Kuidas kontrollida, kas kettad fio abil on jne jaoks piisavad

MĂ€rge. tĂ”lgeSee artikkel on IBM Cloudi inseneride lĂ€biviidud mini-uuringu tulemus, mille eesmĂ€rk oli leida lahendus etcd andmebaasi toimimisega seotud tegelikule probleemile. Meie jaoks oli sarnane ĂŒlesanne asjakohane, kuid autorite mĂ”ttekĂ€ik ja tegevused vĂ”ivad olla huvitavad laiemas kontekstis.

Kuidas kontrollida, kas kettad fio abil on jne jaoks piisavad

Kogu artikli lĂŒhikokkuvĂ”te: fio ja jned

Etcd klastri jĂ”udlus sĂ”ltub suuresti aluseks oleva salvestusruumi kiirusest. JĂ”udluse jĂ€lgimiseks ekspordib etcd mitmesuguseid Prometheuse mÔÔdikuid. Üks neist on wal_fsync_duration_secondsEtcd dokumentatsioonis see ĂŒtleb, seda salvestust vĂ”ib pidada piisavalt kiireks, kui selle mÔÔdiku 99. protsentiil ei ĂŒleta 10 ms


Kui kaalute etcd-klastri seadistamist Linuxi masinatele ja soovite kontrollida, kas teie salvestusseadmed (nt SSD-d) on piisavalt kiired, soovitame kasutada populaarset I/O-testrit nimega FiOPiisab jÀrgmise kÀsu kÀivitamisest (kataloog test-data peab asuma testitava draivi paigaldatud partitsioonis):

fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytest

JÀÀb ĂŒle vaid vaadata vĂ€ljundit ja kontrollida, kas see vastab 99. protsentiilile. fdatasync 10 ms jooksul. Sellisel juhul on teie draiv piisavalt kiire. Siin on nĂ€ide vĂ€ljundist:

fsync/fdatasync/sync_file_range:
  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]

Paar mÀrkust:

  1. Ülaltoodud nĂ€ites oleme parameetreid kohandanud --size Đž --bs konkreetse juhtumi jaoks. MĂ”istliku tulemuse saamiseks fio, mÀÀrake oma kasutusjuhtumi jaoks sobivad vÀÀrtused. Nende valimist arutatakse allpool.
  2. Ainult testimise ajal fio laadib ketta alamsĂŒsteemi. Tegelikkuses on ĂŒsna tĂ”enĂ€oline, et kettale kirjutavad ka teised protsessid (lisaks neile, mis on seotud wal_fsync_duration_seconds). Selline lisakoormus vĂ”ib suurendada wal_fsync_duration_secondsTeisisĂ”nu, kui 99. protsentiil, mis saadi testimisel fio, vaid veidi alla 10 ms, on suur tĂ”enĂ€osus, et salvestusjĂ”udlus on ebapiisav.
  3. Testi jaoks vajate versiooni fio vÀhemalt 3.5, kuna vanemad versioonid ei koonda tulemusi fdatasync protsentiilide kujul.
  4. Eelnev jĂ€reldus on vaid vĂ€ike vĂ€ljavĂ”te ĂŒldisest jĂ€reldusest. fio.

Üksikasjad fio ja etcd kohta

MÔned sÔnad etcd WAL-ide kohta

Tavaliselt kasutavad andmebaasid ennustav logimine (kirjutamise ettelogimine, WAL). See mĂ”jutab ka etcd-d. WAL-i arutelu jÀÀb selle artikli raamidest vĂ€lja, kuid meie eesmĂ€rkide saavutamiseks peame teadma jĂ€rgmist: iga etcd klastri liige salvestab WAL-i pĂŒsivasse mĂ€llu. etcd kirjutab mĂ”ned vĂ”tme-vÀÀrtuse salvest toimingud (nĂ€iteks vĂ€rskendused) enne nende teostamist WAL-i. Kui sĂ”lm jookseb kokku ja taaskĂ€ivitub hetktĂ”mmiste vahel, saab etcd eelmisest hetktĂ”mmisest alates tehtud tehingud WAL-i sisu pĂ”hjal rekonstrueerida.

Seega iga kord, kui klient lisab KV-salvestusse vĂ”tme vĂ”i uuendab olemasoleva vĂ”tme vÀÀrtust, lisab etcd toimingu kirjelduse WAL-i, mis on pĂŒsisalvestuses tavaline fail. Enne jĂ€tkamist PEAB etcd olema 100% kindel, et WAL-i kirje tegelikult kirjutati. Selle saavutamiseks Linuxis ei piisa ainult funktsiooni kasutamisest. write, kuna tegelik kirjutamisoperatsioon fĂŒĂŒsilisse salvestusruumi vĂ”ib viibida. NĂ€iteks vĂ”ib Linux WAL-kirjet mĂ”nda aega hoida kerneli vahemĂ€lus mĂ€lus (nt lehe vahemĂ€lus). Andmete salvestusruumi kirjutamise tagamiseks kasutab sĂŒsteemikutse fdatasync — just seda teebki etcd (nagu on nĂ€ha jĂ€rgmisest vĂ€ljundist) straceSiin 8 — WAL-faili deskriptor):

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>

Kahjuks vĂ”tab pĂŒsimĂ€llu kirjutamine aega. Pikk fdatasync-kutse vĂ”ib mĂ”jutada etcd jĂ”udlust. Salvestusruumi dokumentatsioon nĂ€idatud, et piisava jĂ”udluse saavutamiseks on vajalik, et kĂ”igi kĂ”nede kestuse 99. protsentiil fdatasync WAL-faili kirjutamisel oli aeg alla 10 ms. Salvestusruumiga seotud nĂ€itajaid on ka teisi, kuid sellest me selles artiklis rÀÀgimegi.

Salvestusruumi hindamine fio abil

Saate hinnata, kas teatud salvestusruum sobib etcd-ga kasutamiseks, kasutades utiliiti FiO — populaarne I/O tester. Pea meeles, et ketta I/O saab toimuda erineval viisil: sĂŒnkroniseeritult/asĂŒnkroonselt, paljude erinevate sĂŒsteemikĂ”nede klasside kaudu jne. Negatiivne kĂŒlg on see, et fio on ÀÀrmiselt keeruline kasutada. Utiliidil on palju parameetreid ja nende vÀÀrtuste erinevad kombinatsioonid viivad tĂ€iesti erinevate tulemusteni. MĂ”istliku hinnangu saamiseks etcd puhul peaksite veenduma, et fio genereeritud kirjutuskoormus on WAL-failidesse kirjutamisel vĂ”imalikult lĂ€hedal etcd koormusele:

  • See tĂ€hendab, et genereeritud fio töökoormus peab olema vĂ€hemalt faili jĂ€rjestikuste kirjutamiste seeria, kus iga kirjutamisoperatsioon koosneb sĂŒsteemikĂ”nest writemillele jĂ€rgnes fdatasync.
  • JĂ€rjestikuse kirjutamise lubamiseks peate mÀÀrama lipu --rw=write.
  • Et fio kirjutas kĂ”nede abil write (ja mitte muud sĂŒsteemikĂ”ned - nĂ€iteks pwrite), kasutage lippu --ioengine=sync.
  • LĂ”puks ometi lipp --fdatasync=1 tagab, et igaĂŒhe taga write peab olema fdatasync.
  • Meie nĂ€ites on kaks ĂŒlejÀÀnud parameetrit: --size Đž --bs — vĂ”ivad olenevalt konkreetsest kasutusjuhtumist erineda. JĂ€rgmises osas kirjeldatakse nende konfigureerimist.

Miks me valisime fio ja kuidas me Ôppisime seda seadistama

See postitus pĂ€rineb reaalsest juhtumist, millega me kokku puutusime. Meil ​​oli klaster Kubernetes v1.13 peal Prometheuse jĂ€lgimisega. SSD-sid kasutati etcd v3.2.24 salvestusruumina. Etcd mÔÔdikud nĂ€itasid liiga kĂ”rgeid latentsusaegu. fdatasyncisegi siis, kui klaster oli jĂ”udeolekus. Leidsime, et need mÔÔdikud olid ĂŒsna kĂŒsitavad ja me polnud kindlad, mida need esindasid. Lisaks koosnes klaster virtuaalmasinatest, seega ei saanud me öelda, kas latentsus oli tingitud virtualiseerimisest vĂ”i olid sĂŒĂŒdi SSD-d.

Samuti uurisime mitmesuguseid riist- ja tarkvarakonfiguratsioonide muudatusi, seega vajasime viisi nende hindamiseks. Muidugi saaksime iga konfiguratsiooni jaoks kÀivitada etcd ja vaadata vastavaid Prometheuse mÔÔdikuid, kuid see nÔuaks palju pingutust. Vajasime lihtsat viisi konkreetse konfiguratsiooni hindamiseks. Tahtsime testida oma arusaama etcd-st pÀrinevatest Prometheuse mÔÔdikutest.

Selleks tuli lahendada kaks probleemi:

  • Esiteks, milline nĂ€eb vĂ€lja etcd poolt genereeritud I/O koormus WAL-failidesse kirjutamisel? Milliseid sĂŒsteemikĂ”nesid kasutatakse? Kui suured on kirjutamisplokid?
  • Teiseks, oletame, et meil on vastused ĂŒlaltoodud kĂŒsimustele. Kuidas vastavat koormust taasesitada fioLĂ”ppude lĂ”puks fio — ÀÀrmiselt paindlik ja paljude valikuvĂ”imalustega utiliit (Seda saab kergesti kontrollida nĂ€iteks... siin - u. tĂ”lge.).

Lahendasime mÔlemad probleemid sama kÀsupÔhise lÀhenemisviisi abil. lsof О strace:

  • Koos lsof Saate vaadata kĂ”iki protsessi poolt kasutatavaid failikirjeldusi ja faile, millele need viitavad.
  • Koos strace Saate analĂŒĂŒsida juba töötavat protsessi vĂ”i kĂ€ivitada protsessi ja seda jĂ€lgida. KĂ€sk prindib kĂ”ik protsessi tehtud sĂŒsteemikĂ”ned ja vajadusel ka selle jĂ€rglased. Viimane on oluline protsesside jaoks, mis hargnevad, ja etcd on ĂŒks selline protsess.

Esimese asjana me kasutasime strace et uurida etcd serverit Kubernetes klastris selle jÔudeoleku ajal.

Avastati, et WAL-kirjete plokid olid vĂ€ga tihedalt rĂŒhmitatud, kusjuures enamik neist oli suuruses 2200–2400 baiti. SeetĂ”ttu kasutab selle artikli alguses olev kĂ€sk lippu --bs=2300 (bs — iga kirjeploki suurus baitides fio).

Pane tĂ€hele, et etcd kirjutusplokkide suurus vĂ”ib varieeruda olenevalt versioonist, juurutusest, parameetrite vÀÀrtustest jne – see mĂ”jutab kestust. fdatasyncKui teil on sarnane kasutusjuhtum, analĂŒĂŒsige seda strace teie etcd protsessid ajakohaste vÀÀrtuste saamiseks.

SeejĂ€rel, et saada selge ja terviklik pilt sellest, kuidas etcd failisĂŒsteemiga töötab, kĂ€ivitasime selle jĂ€rgmiselt: strace lippudega -ffttTSee vĂ”imaldas meil jÀÀdvustada tĂŒtarprotsessid ja kirjutada iga vĂ€ljundi eraldi faili. Lisaks saadi ĂŒksikasjalikku teavet iga sĂŒsteemikĂ”ne algusaja ja kestuse kohta.

Kasutasime ka meeskonda lsofkinnitamaks oma arusaamist jĂ€reldusest strace selle jĂ€rgi, millist failideskriptorit ja millisel eesmĂ€rgil kasutati. VĂ€ljund oli strace, sarnane ĂŒlaltoodule. SĂŒnkroniseerimisaegade statistiline manipuleerimine kinnitas, et meetrika wal_fsync_duration_seconds etcd vastete kĂ”ned fdatasync WAL-failikirjeldajatega.

Genereerimiseks, kasutades fio töökoormuse tĂ”ttu, mis oli sarnane etcd-ga, uurisime utiliidi dokumentatsiooni ja valisime oma ĂŒlesande jaoks sobivad parameetrid. Veendusime, et vajalikud sĂŒsteemikĂ”ned olid kaasatud, ja kinnitasime nende kestuse kĂ€ivitades fio kohta strace (nagu tehti jned puhul).

Erilist tÀhelepanu pöörati parameetri vÀÀrtuse mÀÀramisele --sizeSee esindab fio utiliidi tekitatud I/O kogukoormust. Meie puhul on see andmekandjale kirjutatud baitide koguarv. See on otseselt proportsionaalne kÔnede arvuga. write (ja fdatasync). Teatud mÀÀral bs kÔnede arv fdatasync vÔrdub size / bs.

Kuna meid huvitasid protsentiilid, tahtsime, et valimite arv oleks statistiliselt oluliseks piisavalt suur. Otsustasime, et 10^4 (mis vastab 22 MB suurusele) on piisav. Parameetri vĂ€iksemad vÀÀrtused --size tekitas selgemat mĂŒra (nĂ€iteks kĂ”ned fdatasync, mis vĂ”tavad tavapĂ€rasest palju kauem aega ja mĂ”jutavad 99. protsentiili).

See on sinu teha

Artikkel nĂ€itab, kuidas kasutada fio saate hinnata, kas etcd-ga kasutamiseks mĂ”eldud salvestusmeedia on piisavalt kiire. NĂŒĂŒd on see teie otsustada! Teenuses saate uurida SSD-pĂ”hise salvestusruumiga virtuaalmasinaid. IBM Cloud.

PS tÔlkijalt

Valmis kasutusnÀidetega fio Teiste probleemide lahenduste kohta vaadake palun dokumentatsioon vÔi otse projektihoidlad (neid on seal esitatud palju rohkem kui dokumentatsioonis mainitud).

PPS tÔlkijalt

Loe ka meie blogist:

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster