Sut i wirio disgiau gyda fio am berfformiad digonol ar gyfer ac ati

Nodyn. traws.: Mae'r erthygl hon yn ganlyniadau ymchwil fach a gynhaliwyd gan beirianwyr IBM Cloud i chwilio am ateb i broblem wirioneddol yn ymwneud â gweithrediad y gronfa ddata ac ati. Roedd tasg debyg yn berthnasol i ni, ond gall cwrs meddyliau a gweithredoedd yr awduron fod yn ddiddorol mewn cyd-destun ehangach.

Sut i wirio disgiau gyda fio am berfformiad digonol ar gyfer ac ati

Crynodeb byr o'r erthygl gyfan: fio ac ati

Mae perfformiad clwstwr ac ati yn dibynnu'n fawr ar gyflymder y storfa sylfaenol. Er mwyn monitro perfformiad, mae ac ati yn allforio amrywiol fetrigau Prometheus. Un ohonyn nhw yw wal_fsync_duration_seconds. Yn y ddogfennaeth ac ati meddai, gellir ystyried y storfa honno'n ddigon cyflym os nad yw 99fed canradd y metrig hwn yn fwy na 10 ms...

Os ydych chi'n ystyried sefydlu clwstwr ac ati ar beiriannau Linux ac eisiau profi a yw gyriannau storio (fel SSDs) yn ddigon cyflym, rydym yn argymell defnyddio profwr I / O poblogaidd o'r enw FIO. Dim ond rhedeg y gorchymyn canlynol (cyfeiriadur test-data rhaid ei leoli yn rhaniad gosodedig y gyriant sy'n cael ei brofi):

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

Y cyfan sydd ar ôl yw edrych ar yr allbwn a gwirio a yw'n cyd-fynd â'r 99fed canradd fdatasync ar 10 ms. Os felly, yna mae eich gyriant yn ddigon cyflym. Dyma enghraifft o allbwn:

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]

Ychydig o nodiadau:

  1. Yn yr enghraifft uchod rydym wedi addasu'r paramedrau --size и --bs ar gyfer achos penodol. I gael canlyniadau ystyrlon gan fio, nodwch werthoedd sy'n briodol ar gyfer eich achos defnydd. Bydd sut i'w dewis yn cael ei drafod isod.
  2. Yn ystod profion yn unig fio yn llwytho'r is-system ddisg. Mewn bywyd go iawn, mae'n debygol y bydd prosesau eraill (ar wahân i'r rhai sy'n gysylltiedig â wal_fsync_duration_seconds). Gall llwyth ychwanegol o'r fath arwain at gynnydd mewn wal_fsync_duration_seconds. Mewn geiriau eraill, os bydd y 99fed canradd a gafwyd o brofi gyda fio, dim ond ychydig yn llai na 10 ms, mae siawns dda bod y perfformiad storio yn annigonol.
  3. Ar gyfer y prawf bydd angen y fersiwn arnoch chi fio heb fod yn is na 3.5, gan nad yw fersiynau hŷn yn agregu canlyniadau fdatasync ar ffurf canraddau.
  4. Nid yw'r casgliad uchod ond dyfyniad bach o'r casgliad cyffredinol fio.

Manylion am fio ac ati

Ychydig eiriau am WALs etcd

Yn nodweddiadol, cronfeydd data yn defnyddio logio rhagweithiol (logio ymlaen llaw, WAL). ac ati mae hyn hefyd yn berthnasol. Mae trafodaeth ar CIY y tu hwnt i gwmpas yr erthygl hon, ond at ein dibenion ni dyma beth sydd angen i chi ei wybod: Mae pob aelod clwstwr ac ati yn storio WAL mewn storfa barhaus. ac ati yn ysgrifennu rhai gweithrediadau storfa gwerth allweddol (fel diweddariadau) i WAL cyn eu gweithredu. Os bydd nod yn damwain ac yn ailgychwyn rhwng cipluniau, gall ac ati adfer trafodion a gyflawnwyd ers y ciplun blaenorol yn seiliedig ar gynnwys y WAL.

Felly, bob tro y bydd cleient yn ychwanegu allwedd i'r storfa KV neu'n diweddaru gwerth allwedd sy'n bodoli, ac ati yn ychwanegu disgrifiad o'r gweithrediad i WAL, sy'n ffeil reolaidd mewn storfa barhaus. ac ati RHAID bod 100% yn siŵr bod y cofnod CIY yn cael ei gadw mewn gwirionedd cyn symud ymlaen. I gyflawni hyn ar Linux, nid yw'n ddigon defnyddio galwad system write, oherwydd gall y llawdriniaeth ysgrifennu ei hun i'r cyfrwng corfforol gael ei ohirio. Er enghraifft, efallai y bydd Linux yn cadw cofnod WAL mewn celc cnewyllyn yn y cof (fel storfa'r dudalen) am beth amser. Er mwyn sicrhau bod data yn cael ei ysgrifennu i'r cyfryngau, rhaid galw system ar ôl ysgrifennu fdatasync - dyma’n union beth mae ac ati yn ei wneud (fel y gwelir yn yr allbwn canlynol strace; Yma 8 - handlen ffeil WAL):

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>

Yn anffodus, mae ysgrifennu at storfa barhaus yn cymryd peth amser. Gall cymryd amser hir i gwblhau'r alwad fdatasync effeithio ar berfformiad ac ati. Yn y ddogfennaeth ar gyfer yr ystorfa wedi'i nodier mwyn sicrhau perfformiad digonol ei bod yn angenrheidiol bod y 99fed canradd o hyd pob galwad fdatasync wrth ysgrifennu at ffeil, roedd WAL yn llai na 10 ms. Mae yna fetrigau eraill yn ymwneud â storio, ond bydd yr erthygl hon yn canolbwyntio ar yr un hon.

Gwerthuso storio gan ddefnyddio fio

Gallwch werthuso a yw storfa benodol yn addas i'w defnyddio gydag ac ati gan ddefnyddio'r cyfleustodau FIO - profwr I/O poblogaidd. Cofiwch y gall disg I/O ddigwydd mewn gwahanol ffyrdd: cysoni/async, llawer o wahanol ddosbarthiadau o alwadau system, ac ati. Ochr arall y geiniog yw hynny fio hynod o anodd i'w defnyddio. Mae gan y cyfleustodau lawer o baramedrau, ac mae gwahanol gyfuniadau o'u gwerthoedd yn arwain at ganlyniadau hollol wahanol. I gael amcangyfrif rhesymol ar gyfer ac ati, rhaid i chi sicrhau bod y llwyth ysgrifennu a gynhyrchir gan fio mor debyg â phosibl i lwyth ysgrifennu ac ati i ffeiliau WAL:

  • Mae hyn yn golygu bod y cynhyrchu fio rhaid i'r llwyth gwaith o leiaf fod yn gyfres o ysgrifennu dilyniannol i ffeil, lle mae pob gweithrediad ysgrifennu yn cynnwys galwad system writedilyn gan fdatasync.
  • Er mwyn galluogi recordiad dilyniannol, rhaid i chi nodi'r faner --rw=write.
  • Bod fio ysgrifennu gan ddefnyddio galwadau write (ac nid galwadau system eraill - er enghraifft, pwrite), defnyddiwch y faner --ioengine=sync.
  • Yn olaf, y faner --fdatasync=1 yn gwarantu bod y tu ôl i bob write rhaid iddynt fod yn fdatasync.
  • Dau baramedr arall yn ein hesiampl: --size и --bs - gall amrywio yn dibynnu ar yr achos defnydd penodol. Bydd yr adran nesaf yn disgrifio sut i'w ffurfweddu.

Pam dewison ni fio a sut wnaethon ni ddysgu sut i'w sefydlu

Daw'r nodyn hwn o achos gwirioneddol y daethom ar ei draws. Cawsom glwstwr ar Kubernetes v1.13 gyda monitro ar Prometheus. Defnyddiwyd gyriannau cyflwr solet fel storfa ar gyfer ac ati v3.2.24. roedd metrigau ac ati yn dangos cuddni rhy uchel fdatasync, hyd yn oed pan oedd y clwstwr yn segur. Canfuom fod y metrigau hyn yn amheus iawn ac nid oeddem yn siŵr beth yn union yr oeddent yn ei gynrychioli. Yn ogystal, roedd y clwstwr yn cynnwys peiriannau rhithwir, felly roedd yn amhosibl dweud a oedd yr oedi oherwydd rhithwiroli neu'r SSDs oedd ar fai.

Yn ogystal, roeddem yn edrych ar newidiadau amrywiol i ffurfweddiadau caledwedd a meddalwedd, felly roedd angen ffordd i'w gwerthuso. Wrth gwrs, byddai'n bosibl rhedeg ac ati ym mhob ffurfweddiad ac edrych ar y metrigau Prometheus cyfatebol, ond byddai angen ymdrech sylweddol i wneud hyn. Roedd angen ffordd syml arnom i werthuso cyfluniad penodol. Roeddem am brofi ein dealltwriaeth o fetrigau Prometheus yn dod o etcd.

I wneud hyn, roedd yn rhaid datrys dwy broblem:

  • Yn gyntaf, sut olwg sydd ar y llwyth I/O y mae ac ati yn ei gynhyrchu wrth ysgrifennu at ffeiliau WAL? Pa alwadau system a ddefnyddir? Beth yw maint y bloc ysgrifennu?
  • Yn ail, gadewch i ni ddweud bod gennym atebion i'r cwestiynau uchod. Sut i atgynhyrchu'r llwyth cyfatebol gyda fio? Wedi'r cyfan fio - cyfleustodau hynod hyblyg gyda digon o baramedrau (mae hyn yn hawdd i'w wirio, er enghraifft, yma — tua. cyfieithu.).

Fe wnaethom ddatrys y ddwy broblem gan ddefnyddio'r un dull seiliedig ar orchymyn lsof и strace:

  • Gyda lsof Gallwch weld yr holl ddisgrifyddion ffeil a ddefnyddir gan broses, yn ogystal â'r ffeiliau y maent yn cyfeirio atynt.
  • Gyda strace gallwch ddadansoddi proses sydd eisoes yn rhedeg neu redeg proses a'i harsylwi. Mae'r gorchymyn yn dangos yr holl alwadau system a wneir gan y broses hon ac, yn ddewisol, ei ddisgynyddion. Mae'r olaf yn bwysig ar gyfer prosesau sy'n fforchio, ac mae ac ati yn un o brosesau o'r fath.

Y peth cyntaf a wnaethom oedd defnyddio strace i astudio'r gweinydd etcd yn y clwstwr Kubernetes tra oedd yn segur.

Felly, darganfuwyd bod y blociau ysgrifennu yn CIY wedi'u grwpio'n ddwys iawn, gyda'r mwyafrif ohonynt yn yr ystod 2200-2400 beit. Dyma pam mae'r gorchymyn ar ddechrau'r erthygl hon yn defnyddio'r faner --bs=2300 (bs — maint mewn beit o bob bloc recordio yn fio).

Sylwch y gall meintiau bloc ysgrifennu ac ati amrywio yn dibynnu ar fersiwn, defnydd, gwerthoedd paramedr, ac ati. - mae hyn yn effeithio ar ei hyd fdatasync. Os oes gennych achos defnydd tebyg, dadansoddwch gyda strace eich prosesau ac ati i gael y gwerthoedd diweddaraf.

Yna, i gael dealltwriaeth glir a chynhwysfawr o sut mae ac ati yn gweithio gyda'r system ffeiliau, fe wnaethom ei redeg o dan strace gyda baneri -ffttT. Roedd hyn yn ei gwneud hi'n bosibl dal y prosesau plentyn ac ysgrifennu allbwn pob un i ffeil ar wahân. Yn ogystal, cafwyd gwybodaeth fanwl am eiliad cychwyn a hyd pob galwad system.

Fe wnaethon ni ddefnyddio'r gorchymyn hefyd lsofi gadarnhau eich dealltwriaeth o'r allbwn strace o ran pa ddisgrifydd ffeil a ddefnyddiwyd at ba ddiben. Y canlyniad oedd strace, yn debyg i'r un uchod. Manipulations ystadegol gydag amseroedd cydamseru cadarnhau bod y metrig wal_fsync_duration_seconds o alwadau gemau ac ati fdatasync gyda disgrifyddion ffeiliau WAL.

I gynhyrchu gan ddefnyddio fio llwyth gwaith tebyg i'r llwyth o etcd, astudiwyd y ddogfennaeth cyfleustodau a dewiswyd paramedrau addas ar gyfer ein tasg. Gwnaethom yn siŵr bod y galwadau system cywir yn cael eu cynnwys a chadarnhawyd eu hyd trwy redeg fio o strace (fel y gwnaed yn achos etcd).

Rhoddwyd sylw arbennig i bennu gwerth y paramedr --size. Mae'n cynrychioli cyfanswm y llwyth I/O a gynhyrchir gan y cyfleustodau fio. Yn ein hachos ni, dyma gyfanswm nifer y bytes a ysgrifennwyd at y cyfryngau. Mae mewn cyfrannedd union â nifer y galwadau write (a fdatasync). Am ryw beth bs nifer y galwadau fdatasync hafal size / bs.

Gan fod gennym ddiddordeb mewn canradd, ceisiwyd sicrhau bod nifer y samplau yn ddigon mawr ar gyfer arwyddocâd ystadegol. A dyma nhw'n penderfynu hynny 10^4 (sy'n cyfateb i faint o 22 MB) yn ddigonol. Gwerthoedd paramedr llai --size cynhyrchu sŵn mwy amlwg (er enghraifft, galwadau fdatasync, sy'n cymryd llawer mwy o amser nag arfer ac yn effeithio ar y 99fed canradd).

Mae i fyny i chi

Mae'r erthygl yn dangos sut i ddefnyddio fio gallwch werthuso a yw'r cyfrwng y bwriedir ei ddefnyddio gydag ac ati yn ddigon cyflym. Nawr mae i fyny i chi! Gallwch archwilio peiriannau rhithwir gyda storfa SSD yn y gwasanaeth IBM Cloud.

PS gan y cyfieithydd

Gydag enghreifftiau parod o ddefnydd fio ar gyfer datrys problemau eraill i'w gweld yn dogfennaeth neu yn uniongyrchol i storfeydd prosiect (mae llawer mwy ohonynt yno nag a grybwyllir yn y ddogfennaeth).

PPS gan y cyfieithydd

Darllenwch hefyd ar ein blog:

Ffynhonnell: hab.com

Ychwanegu sylw