Kā pārbaudīt diskus ar fio pietiekamu veiktspēju utt

PiezÄ«me. tulk.: Å is raksts ir mini-pētÄ«juma rezultāts, ko veica IBM Cloud inženieri, meklējot risinājumu reālai problēmai, kas saistÄ«ta ar etcd datu bāzes darbÄ«bu. LÄ«dzÄ«gs uzdevums bija aktuāls arÄ« mums, tomēr autoru pārdomu gaita un rÄ«cÄ«ba var bÅ«t interesanta plaŔākā kontekstā.

Kā pārbaudīt diskus ar fio pietiekamu veiktspēju utt

ÄŖss visa raksta kopsavilkums: fio un etc

etcd klastera veiktspēja ir ļoti atkarÄ«ga no pamatā esoŔās krātuves ātruma. etcd eksportē dažādus Prometheus rādÄ«tājus, lai uzraudzÄ«tu veiktspēju. Viens no tiem ir wal_fsync_duration_seconds. Dokumentācijā par etcd tā sakaka uzglabāŔanu var uzskatÄ«t par pietiekami ātru, ja Ŕīs metrikas 99. procentile nepārsniedz 10 msā€¦

Ja apsverat iespēju izveidot etcd klasteru Linux iekārtās un vēlaties pārbaudÄ«t, vai diskdziņi (piemēram, SSD) ir pietiekami ātri, mēs iesakām izmantot populāro I/O testeri ar nosaukumu. FIO. Pietiek palaist Ŕādu komandu (direktoriju test-data jāatrodas pārbaudÄ«tā diskdziņa uzstādÄ«tajā nodalÄ«jumā):

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

Atliek tikai apskatÄ«t izvadi un pārbaudÄ«t, vai 99. procentile atbilst fdatasync 10 ms laikā. Ja tā, tad jÅ«su disks darbojas pietiekami ātri. Å eit ir izvades piemērs:

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]

Dažas piezīmes:

  1. IepriekÅ” minētajā piemērā mēs esam pielāgojuÅ”i parametrus --size Šø --bs konkrētam gadÄ«jumam. Lai iegÅ«tu jēgpilnu rezultātu no fio, norādiet jÅ«su lietoÅ”anas gadÄ«jumam atbilstoÅ”as ā€‹ā€‹vērtÄ«bas. Kā tos izvēlēties, tiks apspriests tālāk.
  2. Tikai pārbaudes laikā fio ielādē diska apakÅ”sistēmu. Reālajā dzÄ«vē ir iespējams, ka diskā tiks ierakstÄ«ti citi procesi (izņemot tos, kas saistÄ«ti ar wal_fsync_duration_seconds). Å Ä« papildu slodze var palielināties wal_fsync_duration_seconds. Citiem vārdiem sakot, ja 99. procentile no testÄ“Å”anas ar fio, tikai nedaudz mazāk par 10 ms, pastāv liela iespēja, ka uzglabāŔanas veiktspēja nav pietiekama.
  3. Pārbaudei jums būs nepiecieŔama versija fio ne mazāk kā 3.5, jo vecākās versijās rezultāti netiek apkopoti fdatasync procentiļu veidā.
  4. IepriekÅ” minētais secinājums ir tikai neliels izvilkums no vispārējā secinājuma fio.

Vairāk par fio un utt

Daži vārdi par WAL utt

Parasti izmanto datu bāzes proaktÄ«va mežizstrāde (iepriekŔēja reÄ£istrÄ“Å”ana, WAL). tiek ietekmēta arÄ« etcd. Diskusija par WAL neietilpst Å”ajā rakstā, taču mÅ«su vajadzÄ«bām jums jāzina, ka katrs etcd klastera dalÄ«bnieks WAL glabā pastāvÄ«gā krātuvē. etcd pirms to izpildes ieraksta dažas atslēgu vērtÄ«bu uzglabāŔanas darbÄ«bas (piemēram, atjauninājumus) WAL. Ja mezgls avarē un tiek restartēts starp momentuzņēmumiem, etcd var atgÅ«t transakcijas kopÅ” iepriekŔējā momentuzņēmuma, pamatojoties uz WAL saturu.

Tādējādi katru reizi, kad klients pievieno atslēgu KV veikalam vai atjaunina esoŔās atslēgas vērtÄ«bu, etcd pievieno darbÄ«bas aprakstu WAL, kas ir parasts fails pastāvÄ«gajā veikalā. etcd Pirms turpināt, JĀBÅŖT 100% pārliecinātam, ka WAL ieraksts patieŔām ir saglabāts. Lai to panāktu operētājsistēmā Linux, nepietiek tikai ar sistēmas izsaukuma izmantoÅ”anu write, jo pati rakstÄ«Å”anas darbÄ«ba fiziskajā datu nesējā var aizkavēties. Piemēram, Linux kādu laiku var saglabāt WAL ierakstu kodola keÅ”atmiņā (piem., lapas keÅ”atmiņā). Lai nodroÅ”inātu datu ierakstÄ«Å”anu datu nesējā, pēc rakstÄ«Å”anas ir jāizsauc sistēmas izsaukums fdatasync - tieÅ”i to dara etcd (kā redzat nākamajā izvadā strace; Å eit 8 - WAL faila deskriptors):

21:23:09.894875 lseek(8, 0, SEEK_CUR)   = 12808 <0.000012>
21:23:09.894911 write(8, ".20210220361223255266632$1020103026"34"rn3fo"..., 2296) = 2296 <0.000130>
21:23:09.895041 fdatasync(8)            = 0 <0.008314>

Diemžēl rakstÄ«Å”ana uz pastāvÄ«gu krātuvi aizņem kādu laiku. IlgstoÅ”a fdatasync zvanu izpilde var ietekmēt etcd veiktspēju. Repozitorija dokumentācijā norādÄ«ts, ka pietiekamai veiktspējai ir nepiecieÅ”ams, lai visu zvanu ilguma 99. procentile fdatasync rakstot uz WAL failu, bija mazāks par 10 ms. Ir arÄ« citi ar krātuvi saistÄ«ti rādÄ«tāji, taču Å”ajā rakstā galvenā uzmanÄ«ba tiks pievērsta tam.

Novērtējot uzglabāŔanu ar fio

Izmantojot utilÄ«tu, varat novērtēt, vai noteikta krātuve ir piemērota lietoÅ”anai kopā ar etcd FIO ā€” populārs I/O testeris. Ņemiet vērā, ka diska I/O var notikt dažādos veidos: sinhronizācija/asinhronizācija, daudzas dažādas syscall klases un tā tālāk. Otra medaļas puse ir tāda fio ārkārtÄ«gi grÅ«ti lietojams. LietderÄ«bai ir daudz parametru, un dažādas to vērtÄ«bu kombinācijas rada pilnÄ«gi atŔķirÄ«gus rezultātus. Lai iegÅ«tu saprātÄ«gu etcd aprēķinu, jums jāpārliecinās, vai fio Ä£enerētā rakstÄ«Å”anas slodze ir pēc iespējas tuvāka etcd WAL faila rakstÄ«Å”anas slodzei:

  • Tas nozÄ«mē, ka radÄ«tais fio ielādei ir jābÅ«t vismaz secÄ«gu ierakstu sērijai failā, kur katra rakstÄ«Å”ana sastāv no sistēmas izsaukuma writekam sekoja fdatasync.
  • Lai iespējotu secÄ«go rakstÄ«Å”anu, jānorāda karogs --rw=write.
  • Ka fio rakstÄ«ja, izmantojot zvanus write (nevis citiem sistēmas izsaukumiem, piemēram, pwrite), izmantojiet karogu --ioengine=sync.
  • Visbeidzot, karogs --fdatasync=1 nodroÅ”ina, ka katrs write vajadzētu fdatasync.
  • Pārējie divi parametri mÅ«su piemērā ir: --size Šø --bs - var atŔķirties atkarÄ«bā no konkrētā lietoÅ”anas gadÄ«juma. Nākamajā sadaļā tiks aprakstÄ«ta to konfigurācija.

Kāpēc mēs izvēlējāmies fio un kā mēs uzzinājām, kā to iestatīt

Å Ä« piezÄ«me nāk no reāla gadÄ«juma, ar kuru mēs saskārāmies. Mums bija klasteris Kubernetes v1.13 ar uzraudzÄ«bu pakalpojumā Prometheus. SSD tika izmantoti kā atmiņa etcd v3.2.24. Etcd metrika uzrādÄ«ja pārāk lielu latentumu fdatasync, pat ja kopa bija dÄ«kstāvē. Mums Å”ie rādÄ«tāji Ŕķita ļoti apÅ”aubāmi, un mēs nezinājām, ko tieÅ”i tie attēlo. Turklāt klasteris sastāvēja no virtuālajām maŔīnām, tāpēc nevarēja pateikt, vai aizkavÄ“Å”anās ir saistÄ«ta ar virtualizāciju vai pie vainas SSD.

Turklāt mēs apsvērām dažādas izmaiņas aparatÅ«ras un programmatÅ«ras konfigurācijā, tāpēc mums bija nepiecieÅ”ams veids, kā tās novērtēt. Protams, katrā konfigurācijā bÅ«tu iespējams palaist etcd un apskatÄ«t atbilstoÅ”os Prometheus rādÄ«tājus, taču tas prasÄ«tu ievērojamas pÅ«les. Mums bija nepiecieÅ”ams vienkārÅ”s veids, kā novērtēt konkrētu konfigurāciju. Mēs vēlējāmies pārbaudÄ«t savu izpratni par Prometheus metriku, kas nāk no etcd.

Tam bija jāatrisina divas problēmas:

  • Pirmkārt, kā izskatās etcd Ä£enerētā I/O slodze, rakstot WAL failos? Kādi sistēmas izsaukumi tiek izmantoti? Kāds ir ierakstu bloku lielums?
  • Otrkārt, pieņemsim, ka mums ir atbildes uz iepriekÅ” minētajiem jautājumiem. Kā reproducēt atbilstoÅ”o slodzi ar fio? Galu galā fio ā€” ārkārtÄ«gi elastÄ«ga lietderÄ«ba ar parametru pārpilnÄ«bu (to ir viegli pārbaudÄ«t, piemēram, Å”eit - apm. tulk.).

Mēs atrisinājām abas problēmas ar vienu un to paÅ”u uz komandām balstÄ«tu pieeju lsof Šø strace:

  • Ar lsof varat skatÄ«t visus procesā izmantotos failu deskriptorus, kā arÄ« failus, uz kuriem tie attiecas.
  • Ar strace varat analizēt jau notiekoÅ”u procesu vai palaist procesu un skatÄ«ties to. Komanda parāda visus Ŕī procesa veiktos sistēmas zvanus un, ja nepiecieÅ”ams, tā pēctečus. Pēdējais ir svarÄ«gs procesiem, kas tiek sadalÄ«ti, un etcd ir viens no Ŕādiem procesiem.

Pirmā lieta, ko darījām, bija izmantot strace pārbaudīt etcd serveri Kubernetes klasterī, kamēr tas bija dīkstāvē.

Tātad tika konstatēts, ka WAL ierakstu bloki ir ļoti blÄ«vi grupēti, lielākās daļas lielums bija 2200-2400 baitu diapazonā. Tāpēc komanda Ŕī raksta sākumā izmanto karogu --bs=2300 (bs ir katra ierakstÄ«Å”anas bloka lielums baitos fio).

LÅ«dzu, ņemiet vērā, ka etcd rakstÄ«Å”anas bloku lielums var atŔķirties atkarÄ«bā no versijas, izvietoÅ”anas, parametru vērtÄ«bām utt. - tas ietekmē ilgumu fdatasync. Ja jums ir lÄ«dzÄ«gs lietoÅ”anas gadÄ«jums, analizējiet ar strace savus etcd procesus, lai iegÅ«tu jaunākās vērtÄ«bas.

Pēc tam, lai iegÅ«tu skaidru un visaptveroÅ”u priekÅ”statu par to, kā etcd darbojas ar failu sistēmu, mēs to sākām no apakÅ”as strace ar karogiem -ffttT. Tas ļāva tvert bērnu procesus un ierakstÄ«t katra izvadi atseviŔķā failā. Papildus tika iegÅ«ta detalizēta informācija par katra sistēmas izsaukuma sākuma laiku un ilgumu.

Mēs arÄ« izmantojām komandu lsoflai apstiprinātu savu izpratni par rezultātu strace attiecÄ«bā uz to, kurÅ” faila deskriptors tika izmantots kādam nolÅ«kam. Es saņēmu secinājumu strace, lÄ«dzÄ«gi kā iepriekÅ”. Statistiskās manipulācijas ar sinhronizācijas laikiem apstiprināja, ka metrika wal_fsync_duration_seconds no etcd atbilst zvaniem fdatasync ar WAL failu deskriptoriem.

Lai Ä£enerētu ar fio lÄ«dzÄ«ga darba slodze kā no etcd, tika izpētÄ«ta utilÄ«ta dokumentācija un izvēlēti mÅ«su uzdevumam piemērotie parametri. Mēs esam pārliecinājuÅ”ies, ka notiek pareizie sistēmas zvani, un apstiprinājuÅ”i to ilgumu, izpildot fio no strace (kā tas tika darÄ«ts etcd gadÄ«jumā).

ÄŖpaÅ”a uzmanÄ«ba tika pievērsta parametra vērtÄ«bas noteikÅ”anai --size. Tas atspoguļo kopējo I/O slodzi, ko rada fio utilÄ«ta. MÅ«su gadÄ«jumā tas ir kopējais datu nesējiem ierakstÄ«to baitu skaits. Tas ir tieÅ”i proporcionāls zvanu skaitam write (un fdatasync). Par konkrētu bs zvanu skaits fdatasync ir vienāds size / bs.

Tā kā mÅ«s interesēja procentile, mēs vēlējāmies, lai paraugu skaits bÅ«tu pietiekami liels, lai tas bÅ«tu statistiski nozÄ«mÄ«gs. Un tā nolēma 10^4 (kas atbilst 22 MB izmēram) bÅ«s pietiekami. Mazākas parametru vērtÄ«bas --size radÄ«ja izteiktāku troksni (piemēram, zvani fdatasync, kas aizņem daudz ilgāku laiku nekā parasti un ietekmē 99. procentili).

Atkarīgs no tevis

Rakstā parādÄ«ts, kā lietot fio var spriest, vai medijs, kas paredzēts lietoÅ”anai ar etcd, ir pietiekami ātrs. Tagad tas ir atkarÄ«gs no jums! Pakalpojumā varat izpētÄ«t virtuālās maŔīnas ar SSD krātuvi IBM Cloud.

PS no tulka

Ar gataviem lietoÅ”anas gadÄ«jumiem fio Par citiem uzdevumiem sk dokumentācija vai tieÅ”i uz projektu krātuves (to ir daudz vairāk, nekā minēts dokumentācijā).

PPS no tulka

Lasi arī mūsu emuārā:

Avots: www.habr.com

Pievieno komentāru