[hpc] flocking project: storage szerver teszt

csak egy pillanatnyi állapot, hogy is néz ki egy 36 diszkes raid10 linuxon.


root@st01:~/iotest/cpu00_raid10# cat /proc/mdstat 
Personalities : [raid10] 
md127 : active raid10 sdak[35] sdai[34] sdaj[33] sdah[32] sdae[31] sdaf[30] sdag[29] sdac[28] sdad[27] sdaa[26]
sdab[25] sdz[24] sdw[23] sdy[22] sdx[21] sdu[20] sdt[19] sdv[18] sdr[17] sdq[16] sds[15] sdm[14] sdp[13] sdo[12]
sdk[11] sdn[10] sdl[9] sdj[8] sdg[7] sdi[6] sdh[5] sde[4] sdf[3] sdc[2]
sdd[1] sdb[0]
      35163259776 blocks super 1.0 64K chunks 2 near-copies [36/36] [UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU]
      
unused devices: <none>

aztán, hogy mit is lehet olvasni erről.


root@st01:~/iotest/cpu00_raid10# dd if=/dev/md/md0 of=/dev/null bs=4M count=262144
262144+0 records in
262144+0 records out
1099511627776 bytes (1.1 TB) copied, 1174.93 s, 936 MB/s

hát ez alata maradt a kívánt 1GB/sec -nek, valamit tuningolni kell.

Hozzászólások

a saját, erre az egy célra írt roppantul feltúrbózott aio() alapú multithread olvasási-teszterem 2600 mbyte/sec -cel olvas. Valahol a linux kernel rejtelmeiben kellene tunningolni, hogy egy szokásos 'while( fread() ) utility is hozza a formáját.

man readahead esetleg? (Szabványabbul posix_fadvise(), POSIX_FADV_SEQUENTIAL ésvagy POSIX_FADV_WILLNEED hinttel.)

A Linux mdraid 10-nek nekifutottam itt, de ez most estére túl nagy erőfeszítést igényelne. Mindenesetre 64K-s chunk-mérettel és 36 diszkkel a 4 MB elég sovány dd blokkméretnek tűnik.

... Az mdadm manual-ja szerint a RAID10 default layout-ja "n2". Hm, a "man 4 md" szintén leírja, mi is az a RAID10. Ha jól látom, a "near" replikák a lehető leglassabbak szekvenciális olvasásnál.

itt a raid10-ben hogy vannak a diskek? 6x6? 9x4? 18x2 :) ?
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

nem olyan egyszerű ez a raid50.
Hogyisvanez.

5 diszkes raid5; blocksize=64k, 4 adatblock utan jon egy parityblock.
Akkor egy teljes stripe=4block=256k
Ha ilyeneket ezt fuzok raid0 -ba, akkor a raid0 blockmerete ertelmesen 256k tobbszorose, most 512k.
tehat iraskor ket teljes raid5 stripe kerul ki egy raid5 -be, es csak utana lep a kovetkezo raid5-be.
7 ilyen raid5 van, tehat a raid0 teljes stripe=7block=3584k

Namarmost, ah bufferelve 4k -val irok ki, akkor is olvas a raid5 dizkekrol, megpedig (elvileg) csak akkor olvas, ha nincs eleg adat kiirni az egesz raid5 stripe -t (256k) marpedig elegnek kell lennie, hiszen a raid0 blockmerete ennek tobbszorose

hm, hm

Lacosnak ajanlva :-)

van egy sima, 5 diszkes raid5 device. A szekvencialis irasi teljesitmenyevel van problemam.

Itt egy jellemzo 'sar -d -p 3' kimenet-reszlet:


09:57:01 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
09:55:10 AM       sdb    141.67     74.67  90322.67    638.10      3.09     21.80      6.15     87.07
09:55:10 AM       sdd    146.00     90.67  90488.00    620.40      2.54     17.38      5.89     86.00
09:55:10 AM       sdc    139.00    146.67  89325.33    643.68      3.05     21.48      6.74     93.73
09:55:10 AM       sde    140.00    104.00  90794.67    649.28      2.88     21.07      6.14     86.00
09:55:10 AM       sdf    132.33    101.33  90112.00    681.71      3.17     23.94      7.08     93.73

jol latszik, hogy az iras mellett folyamatos olvasas is van. A raid5 iraskor akkor olvas, ha nem egy egesz stripe kerul ki a diszkre. Nehany blockot ki kell olvasni, hogy megallapithato legyen az uj parity block.
(ha teljes stripe kerul kiirasra, akkor a parity block is teljes felulirasra kerul, nem kell beolvasni semmit). Ilyet produkal minden bufferelt iras, a dd is, es a sajat teszteloprogramom is, minden.

Itt pedig egy "jo" 'sar -d -p 3' kimenet-reszlet:


09:57:01 AM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
10:00:34 AM       sdb   1282.33      0.00 228992.00    178.57      7.49      5.85      0.76     96.93
10:00:34 AM       sdd   1286.00      0.00 228293.33    177.52      6.72      5.22      0.75     96.67
10:00:34 AM       sdc   1280.33      0.00 228138.67    178.19      6.52      5.08      0.75     96.13
10:00:34 AM       sde   1296.67      0.00 228565.33    176.27      6.76      5.21      0.73     95.07
10:00:34 AM       sdf   1295.00      0.00 228053.33    176.10      7.71      5.94      0.76     98.13

lenyegesen nagyobb irasi teljesitmeny lathato ugyanarra a raid5 tombre.

Ez a "jo" helyzet akkor all fenn, ha az alabbiak egyuttesen:
1) okos irassal kikapcsolom a bufferelest (O_DIRECT)
2) pontosan stripe-size (4*64k=256k) blockokat irok ki
3) az egyszerre kikuldott anyagmenyiseg (outstanding writes; "irasi szalak") akkora, nem haladja meg a /sys/block/md0/md/stripe_cache_size erteket. Ami 16KiB mertekegysegben van (tapasztalat)
Ha meghaladja (vagyis, ha nem fer bele) akkor a teljesitmeny elromlik.
Maramost bufferelt (normal) IO eseten az irando anyag szinte minden merteket meghalad, es nem varhato el minden programtol, hogy okosan ir.

A

stripe_cache_size

-ra nyomtam egy duckduckgo-t; valamelyik első találat: https://inkhornnet.wordpress.com/2010/06/06/io-performance-and-stripe_c…

Eszerint a

stripe_cache_size

kézzel állítható, másrészt (ld. a blogposzt alatti kommentben) a növelésével az egyik csóka megötszörözte az írási teljesítményt.

(Persze lehet, hogy pont arra utaltál, hogy általános esetben még ez sem elég.)

Valamint az mke2fs-nek megnézted az

-E stride

és az

-E stripe-width

kapcsolóját? Az utóbbi doksija például ezt mondja:

This allows the block allocator to prevent read-modify-write of the parity in a RAID stripe if possible when the data is written

Ebből valami olyat sejtek, hogy a megfelelő blokkolást az alkalmazás ráhagyhatja az ext[234] driver-re. A konkrét értékeket tekintve, legalábbis ha jól értem a leírást: 64 KB-os chunk size-od van, ami 4 KB-os fs blokkban kifejezve

-E stride=16

, ill. 4 adatdiszk,

-E stripe-width=64

.

Esetleg XFS... :)

Szerk.: itt is van valami; ez legalább eszembe juttatta a

blockdev --setra

parancsot.

az a baj, hogy hét ilyen raid5 kapna a feje fölé egy raid0 -át.
Talán ez se baj, de szertném érteni, mi hol, miért romlik el.

Ez valami agyatlan hülyeség, hogyha az md helyesen kiszámítja az optimal_io_size értéket, akkor a queueing rendszer miért nem úgy eteti.

Jövőhéten foly.köv vadiúj kernellel, és a lustre patchek boncolgatásával.

Köszönöm a látogatásod :-)