Ҳикояи кӯтоҳ дар бораи fio ва ғайра
Фаъолияти кластер
fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytest
Шумо танҳо лозим аст, ки ба натиҷаҳо назар кунед ва санҷед, ки 99 фоизи давомнок аст
sync (usec): min=534, max=15766, avg=1273.08, stdev=1084.70
sync percentiles (usec):
| 1.00th=[ 553], 5.00th=[ 578], 10.00th=[ 594], 20.00th=[ 627],
| 30.00th=[ 709], 40.00th=[ 750], 50.00th=[ 783], 60.00th=[ 1549],
| 70.00th=[ 1729], 80.00th=[ 1991], 90.00th=[ 2180], 95.00th=[ 2278],
| 99.00th=[ 2376], 99.50th=[ 9634], 99.90th=[15795], 99.95th=[15795],
| 99.99th=[15795]
ёддошт
- Мо арзишҳои параметрҳои -size ва -bs -ро барои сенарияи мушаххаси худ фармоиш додем. Барои ба даст овардани натиҷаҳои муфид аз fio, арзишҳои худро ворид кунед. Ман онҳоро аз куҷо гирифта метавонам? Хондан,
чӣ тавр мо конфигуратсияи fio-ро ёд гирифтем . - Ҳангоми санҷиш, ҳама бори I/O аз fio меояд. Дар сенарияи воқеии воқеӣ, эҳтимол дорад, ки дархостҳои дигари навиштан ба анбор нисбат ба онҳое, ки бо wal_fsync_duration_seconds алоқаманданд, ворид шаванд. Сарбории иловагӣ арзиши wal_fsync_duration_secondsро зиёд мекунад. Ҳамин тавр, агар фоизи 99-ум қариб 10 мс бошад, нигоҳдории шумо ба қадри кофӣ зуд нест.
- Версияро гиред
fio на камтар аз 3.5 (дар пештара фоизи давомнокии fdatasyncро нишон намедиҳанд). - Дар боло танҳо як пораи натиҷаҳо аз fio оварда шудааст.
Ҳикояи дароз дар бораи fio ва ғайра
WAL дар ва ғайра чист?
Одатан пойгоҳи додаҳо истифода мешаванд
Вақте ки муштарӣ калидро ба мағозаи арзишҳои калидӣ илова мекунад ё арзиши калиди мавҷударо нав мекунад, etcd сабти ин амалиётро ба WAL менависад, ки файли муқаррарӣ дар нигаҳдории доимӣ мебошад. etcd БОЯД комилан мутмаин бошад, ки навиштани WAL воқеан пеш аз идомаи коркард рух додааст. Дар Linux, як занги системавӣ барои ин кофӣ нест
21:23:09.894875 lseek(8, 0, SEEK_CUR) = 12808 <0.000012>
21:23:09.894911 write(8, ". 20210220361223255266632$10 20103026"34"rn3fo"..., 2296) = 2296 <0.000130>
21:23:09.895041 fdatasync(8) = 0 <0.008314>
Мутаассифона, навиштан ба нигаҳдории доимӣ фаврӣ нест. Агар занги fdatasync суст бошад, кори системаи etcd паст мешавад.
Арзёбии нигаҳдорӣ бо истифода аз fio
Агар ба шумо лозим ояд, ки арзёбӣ кунед, ки оё нигаҳдории шумо барои etcd мувофиқ аст, fio, асбоби хеле маъмули санҷиши сарбории I/O-ро истифода баред. Дар хотир бояд дошт, ки амалиёти диск метавонад хеле гуногун бошад: синхронӣ ва асинхронӣ, синфҳои зиёди зангҳои системавӣ ва ғайра. Дар натиҷа, истифода бурдани fio хеле душвор аст. Он параметрҳои зиёд дорад ва омезиши гуногуни арзишҳои онҳо сарбории кории хеле гуногуни вуруд/баҳоро ба вуҷуд меорад. Барои гирифтани рақамҳои мувофиқ барои etcd, шумо бояд боварӣ ҳосил кунед, ки ҳангоми навиштани файлҳои WAL сарбории навиштани санҷиш аз fio ба бори воқеии etcd то ҳадди имкон наздик бошад.
Аз ин рӯ, fio бояд ҳадди аққал як миқдори навиштҳои пайдарпайро ба файл тавлид кунад, ки ҳар як навиштан аз занги система иборат аст.
Чаро fio ва чӣ гуна мо танзим кардани онро ёд гирифтем
Дар ин мақола мо як ҳолати воқеиро тасвир мекунем. Мо кластер доштем
Аммо барои ин ду масъаларо хал кардан лозим буд. Аввалан, бори I/O, ки etcd ҳангоми навиштан ба WAL эҷод мекунад, чӣ гуна аст? Кадом зангҳои системавӣ истифода мешаванд? Постҳо чӣ андоза доранд? Дуюм, агар мо ба ин саволҳо ҷавоб диҳем, чӣ гуна мо метавонем як бори кориро бо fio такрор кунем? Фаромӯш накунед, ки fio як воситаи хеле фасеҳ бо имконоти зиёд аст. Мо ҳарду масъаларо бо як равиш - бо истифода аз фармонҳо ҳал кардем
Аввалин коре, ки мо кардем, истифодаи strace барои омӯзиши сервери etcd барои Kubernetes буд, вақте ки дар кластер сарборӣ набуд. Мо дидем, ки қариб ҳамаи сабтҳои WAL тақрибан як андоза буданд: 2200–2400 байт. Аз ин рӯ, дар фармони аввали паём, мо параметри -bs = 2300 -ро муайян кардем (bs маънои андозаи байтро барои ҳар як вуруди fio дорад). Дар хотир доред, ки андозаи вурудоти etcd аз версияи etcd, интиқол, арзишҳои параметр ва ғайра вобаста аст ва ба давомнокии fdatasync таъсир мерасонад. Агар шумо як сенарияи шабеҳ дошта бошед, равандҳои etcd-и худро бо истифода аз strace тафтиш кунед, то рақамҳои дақиқро пайдо кунед.
Сипас, барои гирифтани тасаввуроти хуб дар бораи он, ки системаи файлии etcd чӣ кор мекунад, мо онро бо strace ва имконоти -ffttT иҷро кардем. Ҳамин тавр, мо кӯшиш кардем, ки равандҳои кӯдакро омӯзем ва натиҷаи ҳар яки онҳоро дар файли алоҳида сабт кунем ва инчунин дар бораи оғоз ва давомнокии ҳар як занги система гузоришҳои муфассал гирем. Мо lsof-ро барои тасдиқи таҳлили баромади strace истифода бурдем ва бубинем, ки кадом дескриптори файл бо кадом мақсадҳо истифода шудааст. Ҳамин тавр, бо истифода аз strace, мо натиҷаҳои дар боло нишондодашударо ба даст овардем. Омори вақти ҳамоҳангсозӣ тасдиқ кард, ки метрикаи wal_fsync_duration_seconds аз etcd ба зангҳои fdatasync бо тавсифи файли WAL мувофиқат мекунад.
Мо ба ҳуҷҷатҳои fio назар кардем ва параметрҳои скрипти худро интихоб кардем, то fio сарбории монанд ба etcd тавлид кунад. Мо инчунин зангҳои система ва давомнокии онҳоро тавассути иҷро кардани fio аз strace, ба монанди ғайра тафтиш кардем.
Мо арзиши параметри --size-ро бодиққат интихоб кардем, ки тамоми сарбории I/O-ро ифода мекунад. Дар ҳолати мо, ин шумораи умумии байтҳои ба анбор навишташуда мебошад. Маълум шуд, ки ба шумораи зангҳои системаи навиштан (ва fdatasync) мутаносиб аст. Барои арзиши муайяни bs, шумораи зангҳо ба fdatasync = андоза/bs. Азбаски мо ба фоиз таваҷҷӯҳ доштем, ба мо лозим буд, ки намунаҳои кофӣ дошта бошем, то эътимод дошта бошем ва мо ҳисоб кардем, ки 10^4 барои мо кофӣ хоҳад буд (ин 22 мебибайт аст). Агар --size хурдтар бошад, нишондиҳандаҳои берунӣ метавонанд ба вуқӯъ оянд (масалан, якчанд зангҳои fdatasync аз маъмулӣ бештар вақт мегиранд ва ба фоизи 99-ум таъсир мерасонанд).
Худатон кӯшиш кунед
Мо нишон додем, ки чӣ тавр истифода бурдани fio ва фаҳмем, ки оё нигоҳдорӣ кофӣ аст, то etcd хуб кор кунад. Акнун шумо метавонед инро дар амал худ истифода баред, масалан, мошинҳои виртуалӣ бо нигоҳдории SSD дар
Манбаъ: will.com