Linux plokkseadme kasutamine: erinevus redaktsioonide vahel
Resümee puudub |
Resümee puudub |
||
9. rida: | 9. rida: | ||
* tavaliselt on arvutis töötaval tavakasutaja protsessil vajadus tegeleda andmesalvestusega (kirjutada ja lugeda) |
* tavaliselt on arvutis töötaval tavakasutaja protsessil vajadus tegeleda andmesalvestusega (kirjutada ja lugeda) |
||
* protsess iseenesest loeb ja kirjutab andmeid ja seejuures protsess ei tegele otseselt ühe või teise füüsilisele plokkseadmele endale iseloomuliku kvaliteediga (nt 4 kBait ploki kirjutumisega (see on tema juurest mitu kihiti allapoole jääva abstraktisioonikihi teema)) - nt protsess tegeleb video faili lugemisega ja pildi esitamisega ekraanile - protsessi jaoks on oluline, et allolev storage lahendus varustab teda ühtlaselt andmetega piisavas tempos (et pildi näitamine ei takerduks) |
* protsess iseenesest loeb ja kirjutab andmeid ja seejuures protsess ei tegele otseselt ühe või teise füüsilisele plokkseadmele endale iseloomuliku kvaliteediga (nt 4 kBait ploki kirjutumisega (see on tema juurest mitu kihiti allapoole jääva abstraktisioonikihi teema)) - nt protsess tegeleb video faili lugemisega ja pildi esitamisega ekraanile - protsessi jaoks on oluline, et allolev storage lahendus varustab teda ühtlaselt andmetega piisavas tempos (et pildi näitamine ei takerduks) |
||
− | * andmed läbivad mitu kihti prosessi juurest füüsilisele andmekandjale |
+ | * andmed läbivad mitu kihti prosessi juurest füüsilisele andmekandjale jõudmisel, nt |
protsess -> failisüsteem -> iscsi kliendipoole plokkseade -> võrk -> iscsi serveris asuv füüsiline raid lülitus -> füüsiline plokkseade |
protsess -> failisüsteem -> iscsi kliendipoole plokkseade -> võrk -> iscsi serveris asuv füüsiline raid lülitus -> füüsiline plokkseade |
||
15. rida: | 15. rida: | ||
Plokkseadme kasutamisel ilmnevad selliseid kvaliteedid |
Plokkseadme kasutamisel ilmnevad selliseid kvaliteedid |
||
− | * iops kiirus - input-output operatsioonide arv (mingis mõttes füüsilise plokkseadme suhtlemine koosneb elementaarsetest tegevustest, nt mingi ühe korraga piiratud andmete mahu (ploki) kirjutamine - nt 4 MBait suurust faili kirjutatakse 5 tegevusena: fail jagatakse kirjutamise kihis 5 tükiks: 1. üks MBait, 2. üks MBait, 3. üks MBait, 4. pool MBait ja 5. pool Mbait ('iostat -x -m 5' väljundis r/s ja w/s) |
+ | * iops kiirus - input-output operatsioonide arv (mingis mõttes füüsilise plokkseadme suhtlemine koosneb elementaarsetest tegevustest, nt mingi ühe korraga piiratud andmete mahu tüki (ploki) kirjutamine - nt 4 MBait suurust faili kirjutatakse 5 tegevusena: fail jagatakse kirjutamise kihis 5 tükiks: 1. üks MBait, 2. üks MBait, 3. üks MBait, 4. pool MBait ja 5. pool Mbait ('iostat -x -m 5' väljundis r/s ja w/s) |
* plokkseadmega tegelemisel kasutatava ühe pöördumise tüki ehk ploki suurus - tavaliselt 4 kBait kuni 2 MBait ('iostat -x -m 5' väljundis wareq-sz ja rareq-sz) |
* plokkseadmega tegelemisel kasutatava ühe pöördumise tüki ehk ploki suurus - tavaliselt 4 kBait kuni 2 MBait ('iostat -x -m 5' väljundis wareq-sz ja rareq-sz) |
||
− | * plokkseadmega seotud command queue'de arv - tavaliselt hdd ja sata-ssd ketaste puhul on see üks tükk |
+ | * plokkseadmega seotud command queue'de arv - tavaliselt hdd ja sata-ssd ketaste puhul on see üks tükk; nvme ketta puhul tuhended tükid |
− | * tükkidega tegelemisel lisandub selline võimalus, et andmete liikumisel läbi erinevate salvestuskihide on võimlik süsteemil ühendada väiksemaid tükke kokku suuremateks (sõltuvalt |
+ | * tükkidega tegelemisel lisandub selline võimalus, et andmete liikumisel läbi erinevate salvestuskihide on võimlik süsteemil ühendada väiksemaid tükke kokku suuremateks (sõltuvalt asjaoludest on see võimalik või siis ei ole) - ('iostat -x -m 5' väljundis wrqm/s ja rrqm/s) |
* ühe command queue sügavus - tavaliselt hdd ja sata-ssd ketaste puhul on see 32 ('hdparm -I /dev/sdc | grep "Queue depth"'), mis parasajagu realiseeritakse on 'iostat -x -m 5' väljundis aqu-sz väärtuseks |
* ühe command queue sügavus - tavaliselt hdd ja sata-ssd ketaste puhul on see 32 ('hdparm -I /dev/sdc | grep "Queue depth"'), mis parasajagu realiseeritakse on 'iostat -x -m 5' väljundis aqu-sz väärtuseks |
||
* mahu liikumise kiirus - Megabaitide liikumise arv sekundis - see on mitmete varasemate asjaolude moel või teisel realiseeriumise tulemus (nt sõltub kui suure tüki suurusega iops tegelemisel tegeleda õnnestub, või kui sügavusega õnnestub command queue kasutamine) - ('iostat -x -m 5' väljundis rMB/s ja wMB/s) |
* mahu liikumise kiirus - Megabaitide liikumise arv sekundis - see on mitmete varasemate asjaolude moel või teisel realiseeriumise tulemus (nt sõltub kui suure tüki suurusega iops tegelemisel tegeleda õnnestub, või kui sügavusega õnnestub command queue kasutamine) - ('iostat -x -m 5' väljundis rMB/s ja wMB/s) |
||
29. rida: | 29. rida: | ||
* postgresqli tarkvara seadistamisel on kasutada parameeter effective_io_concurrency - julgustab protsessi tegema mitmed paralleelseid io kasutamise tegevusi |
* postgresqli tarkvara seadistamisel on kasutada parameeter effective_io_concurrency - julgustab protsessi tegema mitmed paralleelseid io kasutamise tegevusi |
||
* protsess ei saa küll otseselt öelda nt et teenindatagu-mind-command-queue-pikkusega-16, aga ta saab jälgida kuidas läheb tema andmete salvestamise ülesannetega all töötaval storage osakonnal ja siis hoida ennast rohkem või vähem tagasi järmiste ülesannete andmisega (vastavalt queue käesolev täituvus suureneb või väheneb) |
* protsess ei saa küll otseselt öelda nt et teenindatagu-mind-command-queue-pikkusega-16, aga ta saab jälgida kuidas läheb tema andmete salvestamise ülesannetega all töötaval storage osakonnal ja siis hoida ennast rohkem või vähem tagasi järmiste ülesannete andmisega (vastavalt queue käesolev täituvus suureneb või väheneb) |
||
− | |||
− | |||
Redaktsioon: 2. veebruar 2025, kell 16:19
Sissejuhatus
TODO
Tööpõhimõte
Väited
- tavaliselt on arvutis töötaval tavakasutaja protsessil vajadus tegeleda andmesalvestusega (kirjutada ja lugeda)
- protsess iseenesest loeb ja kirjutab andmeid ja seejuures protsess ei tegele otseselt ühe või teise füüsilisele plokkseadmele endale iseloomuliku kvaliteediga (nt 4 kBait ploki kirjutumisega (see on tema juurest mitu kihiti allapoole jääva abstraktisioonikihi teema)) - nt protsess tegeleb video faili lugemisega ja pildi esitamisega ekraanile - protsessi jaoks on oluline, et allolev storage lahendus varustab teda ühtlaselt andmetega piisavas tempos (et pildi näitamine ei takerduks)
- andmed läbivad mitu kihti prosessi juurest füüsilisele andmekandjale jõudmisel, nt
protsess -> failisüsteem -> iscsi kliendipoole plokkseade -> võrk -> iscsi serveris asuv füüsiline raid lülitus -> füüsiline plokkseade
Plokkseadme kasutamisel ilmnevad selliseid kvaliteedid
- iops kiirus - input-output operatsioonide arv (mingis mõttes füüsilise plokkseadme suhtlemine koosneb elementaarsetest tegevustest, nt mingi ühe korraga piiratud andmete mahu tüki (ploki) kirjutamine - nt 4 MBait suurust faili kirjutatakse 5 tegevusena: fail jagatakse kirjutamise kihis 5 tükiks: 1. üks MBait, 2. üks MBait, 3. üks MBait, 4. pool MBait ja 5. pool Mbait ('iostat -x -m 5' väljundis r/s ja w/s)
- plokkseadmega tegelemisel kasutatava ühe pöördumise tüki ehk ploki suurus - tavaliselt 4 kBait kuni 2 MBait ('iostat -x -m 5' väljundis wareq-sz ja rareq-sz)
- plokkseadmega seotud command queue'de arv - tavaliselt hdd ja sata-ssd ketaste puhul on see üks tükk; nvme ketta puhul tuhended tükid
- tükkidega tegelemisel lisandub selline võimalus, et andmete liikumisel läbi erinevate salvestuskihide on võimlik süsteemil ühendada väiksemaid tükke kokku suuremateks (sõltuvalt asjaoludest on see võimalik või siis ei ole) - ('iostat -x -m 5' väljundis wrqm/s ja rrqm/s)
- ühe command queue sügavus - tavaliselt hdd ja sata-ssd ketaste puhul on see 32 ('hdparm -I /dev/sdc | grep "Queue depth"'), mis parasajagu realiseeritakse on 'iostat -x -m 5' väljundis aqu-sz väärtuseks
- mahu liikumise kiirus - Megabaitide liikumise arv sekundis - see on mitmete varasemate asjaolude moel või teisel realiseeriumise tulemus (nt sõltub kui suure tüki suurusega iops tegelemisel tegeleda õnnestub, või kui sügavusega õnnestub command queue kasutamine) - ('iostat -x -m 5' väljundis rMB/s ja wMB/s)
- mainitud kvaliteetide puhul tuleb eristada füüsilise plokkseadme tootja lubadust parajagu realiseeritud väärtusest: nt füüsilise ketta puhul on command queue sügavus 32 sissekannet ja see on fikseeritud arv; kui toimub kõvaketta kasutus siis sõltuvalt sellest mida arvutis töötavad protsessid parasjagu kettaga teevad saab see arv olla palju väiksem või natuke väiksem
Väited kvaliteetide omavahelise dünaamika kohta
- kui protsess kirjutab andmeid (nt wget protsess, postgres protsess, dd protsess, scp protsess või fio protsess), siis protsess ise otseselt ei nõua omale ploki suurust, queue sügavust, iops kiirust ega mahu kopeerimise kiirust - nende omaduste väärtused kujunevad muude asjaolude tagajärjena
- protsess saab nö julgustada storage osakonda endaga tegelema moel või teisel, nt fsync syscall ütleb, et andmed peavad jõudma füüsilisele plokkseadmele välja ja kui andmeid on vähe, siis võib sellega kaasneda madalas kihis väike plokisuurus (iostat -x -m väljundis 'wareq-sz' väike arv) ning eriti kui kirjutatakse selliseid tükke olemasoleva faili erinevatele positsioonidele, st siis on tegu nn random-write operatsiooniga, tulemusena on wareq-sz väike nt 4 KBait ning ei toimu ka mergemist (wrqm/s on väike)
- postgresqli tarkvara seadistamisel on kasutada parameeter effective_io_concurrency - julgustab protsessi tegema mitmed paralleelseid io kasutamise tegevusi
- protsess ei saa küll otseselt öelda nt et teenindatagu-mind-command-queue-pikkusega-16, aga ta saab jälgida kuidas läheb tema andmete salvestamise ülesannetega all töötaval storage osakonnal ja siis hoida ennast rohkem või vähem tagasi järmiste ülesannete andmisega (vastavalt queue käesolev täituvus suureneb või väheneb)
Väited
- arvuti storage io teemaga tegelemisel on asjakohane pöörata tähelepanu, milline 'io scheduler' on kasutusel
- io-scheduler ülesanne on kerneli ja plokkseadme vahel toimuvat andmevahetust ümber järjestata, liigendada jne
- io-scheduler määratakse plokkseadme jaoks (mitte operatsioonisüsteemi jaoks tervikuna)
Nt saab küsida selliselt /dev/sde plokkseadmega tegeleva scheduleri kohta
root@rae-cf-04:~# cat /sys/block/sde/queue/scheduler [mq-deadline] none
- [ ] märkide vahel on kasutusel oleva io-scheduler'i (elevator) nimi, muud esitatud väärtused on kasutamiseks saadaval (aga nt 'none' tuleks aktiveerida udev või linux-command-line abil)
- mq ehk multiqueue väljendab asjaolu, et scheduler toetab plokkseadmega seotuses queue kasutamist
- deadline on üks võimalikest scheduleridest; schedulerid on vajalikud pigem nö rumalate plokkseadmete puhul (nt hdd tüüpi kettad); nvme-ssd sisaldab endas niigi praktiliselt arvutit ja asjakohane on kasutada none nimelist scheduleri
virtuaalse arvuti scheduler on reegline 'none'
root@rae-pbs-01:~# cat /sys/block/vda/queue/scheduler [none] mq-deadline
mdadm seadmega ei ole scheduler seotud
root@jagaja ~ $ ls -ld /sys/block/md127/queue/scheduler ls: cannot access '/sys/block/md127/queue/scheduler': No such file or directory
iscsi seadmega on seotud scheduler 'none'
root@pve-moraal-x570:~# cat /sys/block/sdg/queue/scheduler none [mq-deadline]
fiber channel fc seadmega on seotud scheduler 'none'
root@adala-pve-4:~# cat /sys/block/sdh/queue/scheduler [none] mq-deadline
multipath seadmega on seotud scheduler none
root@adala-pve-4:~# dmsetup -c info | grep mpath | grep 7 mpath_vol_hdd_pve_1 253 7 L--w 2 1 0 mpath-3600000e00d300000003008ec00070000 root@adala-pve-4:~# cat /sys/block/dm-7/queue/scheduler none [mq-deadline]
ceph rados block device seadmega on seotud scheduler none
root@jagaja ~ $ cat /sys/block/rbd2/queue/scheduler [none] mq-deadline
Mõõtmine - üksik sata-ssd ketas - randrw, 8k
Üksiku sata-ssd kettana on kasutuses selline seade
root@rae-cf-04:~# smartctl -a /dev/sde smartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.15.0-130-generic] (local build) Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Device Model: Micron_5400_MTFDDAK7T6TGA Serial Number: 24504CD75CBC LU WWN Device Id: 5 00a075 14cd75cbc Firmware Version: D4MU802 User Capacity: 7 681 501 126 656 bytes [7,68 TB] Sector Sizes: 512 bytes logical, 4096 bytes physical Rotation Rate: Solid State Device Form Factor: 2.5 inches TRIM Command: Available, deterministic, zeroed Device is: Not in smartctl database [for details use: -P showall] ATA Version is: ACS-4 (minor revision not indicated) SATA Version is: SATA 3.3, 6.0 Gb/s (current: 6.0 Gb/s) Local Time is: Sun Feb 2 00:11:16 2025 EET SMART support is: Available - device has SMART capability. SMART support is: Enabled ...
ning seadmele on otse st ilma partitsioonitabelita moodustatud ext4 failisüsteem, enne katsetamise ära oodata lazyext4 abil failisüsteemi valmis saamine
# mkfs.ext4 /dev/sde # mount -o init_itable=1 /dev/sde /mnt/sde # ps aux | grep lazy # iostat -m -x 5 /dev/sde # umount /mnt/sde # mount /dev/sde /mnt/sde
fio seadistusfail
root@rae-cf-04:~# cat fio.fio [global] ioengine=libaio invalidate=1 ramp_time=5 runtime=180 time_based direct=1 group_reporting=1 per_job_logs=0 bs=8k readwrite=randrw size=40g iodepth=32 end_fsync=1 # gtod_reduce=1 [test1-subtest1-blocksize32k] filename=/mnt/sde/fio.img numjobs=12
kus
- bs=8k - väljendab, et fio protsess teeb linux kerneli suunal sellise iseloomuga (mahuga, liigendusega, kiirusega jne) suuruste tükkidega tegevusi (ja nagu allpool on iostat väljendist paista, millele reageerib tuum plokkseadme poole 8k suurustege päringutega pöördumistega)
- randrw ehk juhusliku asukoha suhtes kirjutamine ja lugemine - plokkseadme jaoks kõige väljakutsuvam variant (nt järjestikulise lugemisega võrreldes)
ning käivitamisel paistab
root@rae-cf-04:~# iostat -m -x 30 /dev/sde | grep ^sde Device r/s rMB/s rrqm/s %rrqm r_await rareq-sz w/s wMB/s wrqm/s %wrqm w_await wareq-sz d/s dMB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util .. sde 19900,50 155,47 0,07 0,00 1,51 8,00 19901,57 155,48 0,33 0,00 1,55 8,00 0,00 0,00 0,00 0,00 0,00 0,00 0,40 1,67 60,91 100,00 sde 19831,50 154,93 0,03 0,00 1,52 8,00 19854,03 155,11 0,30 0,00 1,55 8,00 0,00 0,00 0,00 0,00 0,00 0,00 0,40 1,83 60,91 100,00 sde 19761,47 154,39 0,10 0,00 1,52 8,00 19830,37 154,93 0,50 0,00 1,56 8,00 0,00 0,00 0,00 0,00 0,00 0,00 0,40 2,50 60,91 100,00 sde 19995,50 156,22 0,03 0,00 1,51 8,00 19992,33 156,19 0,50 0,00 1,54 8,00 0,00 0,00 0,00 0,00 0,00 0,00 0,40 2,08 60,91 100,00 sde 19697,80 153,89 0,10 0,00 1,52 8,00 19723,87 154,09 0,33 0,00 1,57 8,00 0,00 0,00 0,00 0,00 0,00 0,00 0,40 1,92 60,91 100,00 sde 19959,23 155,93 0,07 0,00 1,51 8,00 19939,47 155,78 0,43 0,00 1,54 8,00 0,00 0,00 0,00 0,00 0,00 0,00 0,40 1,67 60,91 100,00 sde 553,23 4,32 0,00 0,00 1,54 8,00 557,47 4,35 0,07 0,01 1,67 8,00 0,00 0,00 0,00 0,00 0,00 0,00 0,13 0,75 1,78 2,95 sde 0,17 0,00 0,00 0,00 1,00 0,30 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,03 ...
kus
- arvulised väärtused väljendavad linuxi kernelist füüsilise plokkseadme suunal toimuvat, nt wareq-sz (write average request size) väljendab, et toimub 8 kBait suuruse plokiga kirjutamine
- wareq-sz ja rareq-sz (write ja read average request size) - kasutatava ploki suurus
- w/s ja r/s - operatsioonide arv sekundis (tuntud kui iops)
- wrqm/s ja rrqm/s - write ja read request merges sekundis - antud juhul seda ei toimu praktiliselt kuna fio töötab režiimil 'randrw'; aga teatud tingimuste puhul linux kernel käigult agregeerib kokku sisse tulevaid kirjutamisi suuremateks komplektideks, ja saadab need korraga füüsilisele plokkseadmele
- w_await ja r_await - kirjutamise ja lugemisega seotud viivutus - üldiselt loetakse normaalseks alla 4 ms
- wMB/s ja rMB/s - mahu kirjutamise ja lugemise kiirus
- %util - kui palju ajast tegeleb ketas tööga (selle asemel et ootada korraldust töötada)
- dXXX - discard tegevused - reeglina on nad asjakohased mingit tüüpi ssd ketastega (nvme, sata-ssd, sas-ssd jms)
ning fio tulemus
root@rae-cf-04:~# fio fio.fio test1-subtest1-blocksize32k: (g=0): rw=randrw, bs=(R) 8192B-8192B, (W) 8192B-8192B, (T) 8192B-8192B, ioengine=libaio, iodepth=32 ... fio-3.28 Starting 12 processes Jobs: 12 (f=12): [F(1),m(1),F(3),m(1),F(1),m(5)][11.6%][r=149MiB/s,w=149MiB/s][r=19.0k,w=19.1k IOPS][eta 23m:36s] test1-subtest1-blocksize32k: (groupid=0, jobs=12): err= 0: pid=3266168: Sat Feb 1 23:15:16 2025 read: IOPS=19.9k, BW=155MiB/s (163MB/s)(27.3GiB/180007msec) slat (usec): min=2, max=19609, avg=298.37, stdev=637.42 clat (usec): min=363, max=51174, avg=9379.33, stdev=3656.91 lat (usec): min=542, max=52640, avg=9677.78, stdev=3755.98 clat percentiles (usec): | 1.00th=[ 3556], 5.00th=[ 4752], 10.00th=[ 5473], 20.00th=[ 6456], | 30.00th=[ 7242], 40.00th=[ 8029], 50.00th=[ 8717], 60.00th=[ 9503], | 70.00th=[10552], 80.00th=[11863], 90.00th=[13960], 95.00th=[16188], | 99.00th=[21627], 99.50th=[23987], 99.90th=[29230], 99.95th=[31327], | 99.99th=[35914] bw ( KiB/s): min=126053, max=189343, per=100.00%, avg=158884.11, stdev=918.85, samples=4309 iops : min=15756, max=23667, avg=19860.25, stdev=114.85, samples=4309 write: IOPS=19.9k, BW=155MiB/s (163MB/s)(27.3GiB/180007msec); 0 zone resets slat (usec): min=2, max=18651, avg=302.93, stdev=641.72 clat (usec): min=380, max=52645, avg=9353.20, stdev=3745.15 lat (usec): min=384, max=53573, avg=9656.22, stdev=3846.76 clat percentiles (usec): | 1.00th=[ 3261], 5.00th=[ 4555], 10.00th=[ 5342], 20.00th=[ 6390], | 30.00th=[ 7177], 40.00th=[ 7963], 50.00th=[ 8717], 60.00th=[ 9503], | 70.00th=[10552], 80.00th=[11863], 90.00th=[14091], 95.00th=[16319], | 99.00th=[21890], 99.50th=[23987], 99.90th=[29230], 99.95th=[31327], | 99.99th=[36439] bw ( KiB/s): min=126768, max=191136, per=100.00%, avg=159008.05, stdev=903.82, samples=4309 iops : min=15846, max=23892, avg=19875.76, stdev=112.97, samples=4309 lat (usec) : 500=0.01%, 750=0.01%, 1000=0.01% lat (msec) : 2=0.06%, 4=2.24%, 10=62.52%, 20=33.52%, 50=1.67% lat (msec) : 100=0.01% cpu : usr=0.59%, sys=1.62%, ctx=2589547, majf=0, minf=699 IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=100.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0% issued rwts: total=3573369,3576278,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=32 Run status group 0 (all jobs): READ: bw=155MiB/s (163MB/s), 155MiB/s-155MiB/s (163MB/s-163MB/s), io=27.3GiB (29.3GB), run=180007-180007msec WRITE: bw=155MiB/s (163MB/s), 155MiB/s-155MiB/s (163MB/s-163MB/s), io=27.3GiB (29.3GB), run=180007-180007msec Disk stats (read/write): sde: ios=3674207/3677588, merge=13/73, ticks=5564118/5703731, in_queue=11267990, util=99.97%
kus
- slat - start latency
- clat - completion latency
- iops 19.9 k
- TODO
Kui fio seadistuses muuta randrw -> rw, siis hakkab toimuma tohutult mergemisi nii kirjutamise kui lugemise osas
root@rae-cf-04:~# iostat -m -x 30 /dev/sde | grep ^sde Device r/s rMB/s rrqm/s %rrqm r_await rareq-sz w/s wMB/s wrqm/s %wrqm w_await wareq-sz d/s dMB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util .. sde 2965,03 168,40 18590,93 86,24 10,15 58,16 2001,70 168,44 19557,10 90,72 8,47 86,17 0,00 0,00 0,00 0,00 0,00 0,00 0,40 7,58 47,05 100,00 sde 3571,37 203,45 22468,93 86,29 8,20 58,33 2413,53 203,86 23682,37 90,75 7,27 86,49 0,00 0,00 0,00 0,00 0,00 0,00 0,40 6,92 46,83 100,00 sde 3818,73 217,37 24002,17 86,27 7,55 58,29 2577,87 217,57 25273,80 90,74 6,97 86,43 0,00 0,00 0,00 0,00 0,00 0,00 0,40 6,25 46,82 100,00 sde 3860,57 220,35 24344,97 86,31 7,48 58,45 2612,20 220,45 25606,13 90,74 6,85 86,42 0,00 0,00 0,00 0,00 0,00 0,00 0,40 5,83 46,78 100,00 sde 3911,73 223,58 24707,93 86,33 7,38 58,53 2644,50 223,57 25971,50 90,76 6,76 86,57 0,00 0,00 0,00 0,00 0,00 0,00 0,40 5,58 46,72 100,00 sde 3600,83 205,72 22724,93 86,32 7,45 58,50 2438,03 205,54 23867,20 90,73 6,86 86,33 0,00 0,00 0,00 0,00 0,00 0,00 0,47 4,29 43,54 93,08 ...
kus
- tundub, et eelmises katses kasutatud 'random readwrite' st juhuslikule asukohale kirjutamine-lugemine oli nii ebamugav kerneli jaoks, et seejuures ei olnud midagi mergeda
- tundub, et käesolevas katses kasutatud non-random ehk järjestikuline readwrite oli nii mugav kerneli jaoks, et seejuures sai rikkalikult mergeda
Väited
- andmesalvestuse käitumine on dünaamiline - nt suurendades fio testis fio protsessi 8k väärtust nt 8M, tulemusena on iostat väljundis wareq-sz väärtus 1024 ümbruses
Mõõtmine - üksik sata-ssd ketas - randrw, 8M
fio seadistus
- TODO
iostat väljund fio töötamise ajal
root@rae-cf-04:~# iostat -m -x 30 /dev/sde | grep ^sde Device r/s rMB/s rrqm/s %rrqm r_await rareq-sz w/s wMB/s wrqm/s %wrqm w_await wareq-sz d/s dMB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util .. sde 203,20 205,43 3,77 1,82 100,10 1035,24 205,77 211,15 3,33 1,59 151,88 1050,81 0,00 0,00 0,00 0,00 0,00 0,00 0,33 62,50 51,61 85,63 sde 252,17 254,69 4,03 1,57 100,60 1034,25 231,30 232,32 4,43 1,88 151,72 1028,50 0,00 0,00 0,00 0,00 0,00 0,00 0,37 64,55 60,48 100,00 sde 230,50 230,90 3,93 1,68 97,58 1025,79 252,90 256,21 4,53 1,76 149,87 1037,40 0,00 0,00 0,00 0,00 0,00 0,00 0,37 63,91 60,42 100,00 sde 237,63 239,07 3,87 1,60 98,67 1030,21 241,67 246,98 4,83 1,96 152,93 1046,50 0,00 0,00 0,00 0,00 0,00 0,00 0,40 63,42 60,43 100,00 sde 233,59 236,90 3,90 1,64 98,10 1038,50 249,12 250,47 4,57 1,80 150,55 1029,57 0,00 0,00 0,00 0,00 0,00 0,00 0,40 61,58 60,44 99,97 sde 240,63 242,23 4,13 1,69 98,53 1030,81 240,53 243,40 4,57 1,86 152,83 1036,21 0,00 0,00 0,00 0,00 0,00 0,00 0,40 66,00 60,50 100,00 sde 73,03 73,89 1,23 1,66 99,25 1036,03 87,10 88,47 1,73 1,95 147,21 1040,09 0,00 0,00 0,00 0,00 0,00 0,00 0,33 39,20 20,08 33,40 ...
kus
- wareq-sz ja rareq-sz väärtused on nüüd nii 1000 kBait
- wrqm/s ja rrqm/s väärtused on nüüd tekkinud natuke
fio käivitamise tulemus
root@rae-cf-04:~# fio fio.fio test1-subtest1-blocksize32k: (g=0): rw=randrw, bs=(R) 8192KiB-8192KiB, (W) 8192KiB-8192KiB, (T) 8192KiB-8192KiB, ioengine=libaio, iodepth=32 ... fio-3.28 Starting 12 processes Jobs: 12 (f=12): [m(7),F(1),m(1),F(1),m(1),F(1)][17.6%][r=568MiB/s,w=680MiB/s][r=71,w=85 IOPS][eta 14m:33s] test1-subtest1-blocksize32k: (groupid=0, jobs=12): err= 0: pid=3280862: Sun Feb 2 00:19:17 2025 read: IOPS=30, BW=246MiB/s (258MB/s)(43.5GiB/180515msec) slat (usec): min=149, max=828017, avg=194726.62, stdev=109145.26 clat (msec): min=23, max=8072, avg=6000.98, stdev=868.08 lat (msec): min=147, max=8243, avg=6195.44, stdev=875.35 clat percentiles (msec): | 1.00th=[ 1804], 5.00th=[ 4933], 10.00th=[ 5269], 20.00th=[ 5537], | 30.00th=[ 5738], 40.00th=[ 5940], 50.00th=[ 6074], 60.00th=[ 6208], | 70.00th=[ 6342], 80.00th=[ 6611], 90.00th=[ 6879], 95.00th=[ 7080], | 99.00th=[ 7483], 99.50th=[ 7684], 99.90th=[ 7886], 99.95th=[ 8020], | 99.99th=[ 8087] bw ( KiB/s): min=196212, max=917799, per=100.00%, avg=316902.08, stdev=12335.72, samples=3338 iops : min= 12, max= 112, avg=37.72, stdev= 1.54, samples=3338 write: IOPS=30, BW=254MiB/s (266MB/s)(44.8GiB/180515msec); 0 zone resets slat (usec): min=314, max=939817, avg=199242.58, stdev=108881.61 clat (msec): min=84, max=8065, avg=6012.11, stdev=881.04 lat (msec): min=162, max=8306, avg=6211.12, stdev=889.60 clat percentiles (msec): | 1.00th=[ 1469], 5.00th=[ 4933], 10.00th=[ 5336], 20.00th=[ 5604], | 30.00th=[ 5805], 40.00th=[ 5940], 50.00th=[ 6074], 60.00th=[ 6208], | 70.00th=[ 6409], 80.00th=[ 6611], 90.00th=[ 6879], 95.00th=[ 7080], | 99.00th=[ 7483], 99.50th=[ 7684], 99.90th=[ 7953], 99.95th=[ 7953], | 99.99th=[ 8087] bw ( KiB/s): min=196212, max=884670, per=100.00%, avg=319582.91, stdev=12320.50, samples=3389 iops : min= 12, max= 107, avg=37.97, stdev= 1.53, samples=3389 lat (msec) : 50=0.01%, 100=0.05%, 250=0.14%, 500=0.20%, 750=0.14% lat (msec) : 1000=0.13%, 2000=0.57%, >=2000=101.72% cpu : usr=0.16%, sys=0.28%, ctx=29496, majf=0, minf=699 IO depths : 1=0.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.4%, 32=99.6%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=99.9%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0% issued rwts: total=5416,5554,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=32 Run status group 0 (all jobs): READ: bw=246MiB/s (258MB/s), 246MiB/s-246MiB/s (258MB/s-258MB/s), io=43.5GiB (46.7GB), run=180515-180515msec WRITE: bw=254MiB/s (266MB/s), 254MiB/s-254MiB/s (266MB/s-266MB/s), io=44.8GiB (48.1GB), run=180515-180515msec Disk stats (read/write): sde: ios=44117/45201, merge=746/839, ticks=4365191/6841827, in_queue=11211681, util=100.00%
Selgituseks warqm-sz ja rareq-sz suurus ca 1000 kBait osas, et see on seotud väärtusega
root@rae-cf-04:~# cat /sys/block/sde/queue/max_sectors_kb 1280
kui nt seda suurendada natuke, siis muutub ka iostat väljund ('echo 2048 > /sys/block/sde/queue/max_sectors_kb'), jõudluse seisukohast ei ole see tõenäoliselt hea mõte nii üksikuid parameetreid torkima hakata.
Mõõtmine - üksik sata-ssd ketas - suur hulk pisikesi faile
Naturaalsem viis kui fio esile kutsuda rikkalikult plokkseadmele suunduvate päringute mergemist, oleks tekitada kuhugi muu plokkseadme failisüsteemi kataloogi ohtralt pisikesi faile ja neid siis kopeerida kõnealusele plokkseadmele tehtud failisüsteemi, nt
root@rae-cf-04:~# iostat -m -x 5 /dev/sde | grep ^sde Device r/s rMB/s rrqm/s %rrqm r_await rareq-sz w/s wMB/s wrqm/s %wrqm w_await wareq-sz d/s dMB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util .. sde 0,00 0,00 0,00 0,00 0,00 0,00 76,60 48,32 12293,60 99,38 9,08 645,96 0,00 0,00 0,00 0,00 0,00 0,00 0,40 0,50 0,70 10,08 sde 0,00 0,00 0,00 0,00 0,00 0,00 357,60 233,11 59319,00 99,40 9,19 667,52 0,00 0,00 0,00 0,00 0,00 0,00 0,40 0,00 3,29 47,92 sde 0,00 0,00 0,00 0,00 0,00 0,00 51,00 31,42 7992,00 99,37 12,20 630,82 0,00 0,00 0,00 0,00 0,00 0,00 0,40 0,00 0,62 6,40 sde 0,00 0,00 0,00 0,00 0,00 0,00 29,80 19,34 4922,00 99,40 9,27 664,67 0,00 0,00 0,00 0,00 0,00 0,00 0,40 0,00 0,28 4,32 sde 0,00 0,00 0,00 0,00 0,00 0,00 242,20 156,99 40314,40 99,40 8,61 663,74 0,00 0,00 0,00 0,00 0,00 0,00 0,40 0,00 2,09 32,16 sde 0,00 0,00 0,00 0,00 0,00 0,00 397,00 257,03 65036,00 99,39 9,97 662,98 0,00 0,00 0,00 0,00 0,00 0,00 0,60 0,00 3,96 52,64 sde 0,00 0,00 0,00 0,00 0,00 0,00 16,60 10,64 2708,00 99,39 10,16 656,53 0,00 0,00 0,00 0,00 0,00 0,00 0,40 0,00 0,17 2,24 ...
- ilma et süsteem peaks kiiruses wMB/s kaotama ega isegi rakendama seejuures iops ressurssi (w/s) piirab pisikese kernelisse sisse tulevate pöördumiste mergemisest (mitukümmend tuhat tükki sekundis, st wrqm/s), tulemusena on wareq-sz suurus olemas
- %wrqm - mergemiste protsent mis iganes kogu tegevuste hulgas on märkimisväärne (99+ %)
- tundub, et wareq-sz kajastab selle kettale mineva reaalse pöördumise keskmist suurust, mis on koostatud mergemise tulemusel
Üks järgmine variatsioon oleks seejuures lülitada välja mergemine
root@rae-cf-04:~# echo 2 > /sys/block/sde/queue/nomerges
ning tulemus paistab nii
root@rae-cf-04:~# iostat -m -x 5 /dev/sde | grep ^sde Device r/s rMB/s rrqm/s %rrqm r_await rareq-sz w/s wMB/s wrqm/s %wrqm w_await wareq-sz d/s dMB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util .. sde 0,00 0,00 0,00 0,00 0,00 0,00 28150,00 109,96 0,00 0,00 0,14 4,00 0,00 0,00 0,00 0,00 0,00 0,00 0,40 0,00 4,05 52,16 sde 0,00 0,00 0,00 0,00 0,00 0,00 44174,60 172,56 0,00 0,00 0,19 4,00 0,00 0,00 0,00 0,00 0,00 0,00 0,40 0,00 8,53 99,92 sde 0,00 0,00 0,00 0,00 0,00 0,00 3849,20 15,04 0,00 0,00 0,17 4,00 0,00 0,00 0,00 0,00 0,00 0,00 0,60 0,00 0,65 6,16 sde 0,00 0,00 0,00 0,00 0,00 0,00 2465,00 9,63 0,00 0,00 0,16 4,00 0,00 0,00 0,00 0,00 0,00 0,00 0,40 0,00 0,40 3,76 sde 0,00 0,00 0,00 0,00 0,00 0,00 22901,40 89,46 0,00 0,00 0,15 4,00 0,00 0,00 0,00 0,00 0,00 0,00 0,40 0,50 3,37 46,96 sde 0,00 0,00 0,00 0,00 0,00 0,00 42900,20 167,58 0,00 0,00 0,19 4,00 0,00 0,00 0,00 0,00 0,00 0,00 0,40 0,00 8,18 95,28 sde 0,00 0,00 0,00 0,00 0,00 0,00 45540,60 177,89 0,00 0,00 0,20 4,00 0,00 0,00 0,00 0,00 0,00 0,00 0,40 0,00 8,99 100,00 ...
kus
- wrqm/s on tõesti konstantselt null
- wareq-sz väärtus on nüüd minimaalne 4 kBait
- kopeerimise kiirus wMB/s mitusada ei ole tingimata tagasihoidlik, kuna tegu on sata-ssd kettaga, siis süsteemil on rikkalikult iops ressurssi ja nüüd tuleb selle kasutamine esile (w/s väärtus mitukümmend tuhat)
ning katse lõpus jällegi mergemine sisse lülitada
root@rae-cf-04:~# echo 0 > /sys/block/sde/queue/nomerges
Toodud katsed illustreerivad hästi kuidas ühe jõudlust tõstva omaduse välja lülitamine toob esile teise seda kompenseeriva omaduse.
Mõõtmine - mdadm
TODO
Mõõtmine - zfs
TODO
Mõõtmine - ceph rbd
TODO
Väited
- tundub, et kui rbd kasutuskohas on mergemine isegi välja lülitatud, siis ceph osd osakonnas mergemine jms efektiivsus siiski toimub
Mõõtmine - iscsi Ubuntu LIO target
TODO
Mõõtmine - iscsi eternus hdd target
TODO
Mõõtmine - iscsi eternus sdd target
TODO
Kasulikud lisamaterjalid
- 'Chapter 32. Factors affecting I/O and file system performance' - https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/monitoring_and_managing_system_status_and_performance/factors-affecting-i-o-and-file-system-performance_monitoring-and-managing-system-status-and-performance#tools-for-monitoring-and-diagnosing-i-o-and-file-system-issues_factors-affecting-i-o-and-file-system-performance
- TODO