Cyflymder storio sy'n addas ar gyfer ac ati? Gadewch i ni ofyn fio

Cyflymder storio sy'n addas ar gyfer ac ati? Gadewch i ni ofyn fio

Stori fer am fio ac ati

Perfformiad clwstwr etcd yn dibynnu i raddau helaeth ar berfformiad ei storio. ac ati yn allforio rhai metrigau i Prometheusi ddarparu'r wybodaeth perfformiad storio a ddymunir. Er enghraifft, y metrig wal_fsync_duration_seconds. Dywed y ddogfennaeth ar gyfer ac ati: Er mwyn i storio gael ei ystyried yn ddigon cyflym, rhaid i 99fed canradd y metrig hwn fod yn llai na 10ms. Os ydych chi'n bwriadu rhedeg clwstwr ac ati ar beiriannau Linux ac eisiau gwerthuso a yw'ch storfa yn ddigon cyflym (fel SSD), gallwch chi ddefnyddio FIO yn arf poblogaidd ar gyfer profi gweithrediadau I/O. Rhedeg y gorchymyn canlynol, lle mae data prawf yn gyfeiriadur o dan y pwynt gosod storio:

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

Does ond angen i chi edrych ar y canlyniadau a gwirio bod y 99fed canradd o'r hyd fdatasync llai na 10 ms. Os felly, mae gennych storfa weddol gyflym. Dyma enghraifft o’r canlyniadau:

  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]

Nodiadau

  • Rydym wedi addasu'r opsiynau --size a --bs ar gyfer ein senario penodol. I gael canlyniad defnyddiol o fio, darparwch eich gwerthoedd eich hun. Ble i'w cael? Darllen sut y dysgon ni i ffurfweddu fio.
  • Yn ystod y profion, daw'r holl lwyth I / O o fio. Mewn senario bywyd go iawn, mae'n debygol y bydd ceisiadau ysgrifennu eraill yn dod i mewn i'r storfa ar wahΓ’n i'r rhai sy'n ymwneud Γ’ wal_fsync_duration_seconds. Bydd y llwyth ychwanegol yn cynyddu gwerth wal_fsync_duration_seconds. Felly os yw'r 99fed canradd yn agos at 10ms, mae eich storfa yn rhedeg allan o gyflymder.
  • Cymerwch y fersiwn FIO heb fod yn is na 3.5 (nid yw'r rhai blaenorol yn dangos canraddau hyd fdatasync).
  • Uchod dim ond pyt o'r canlyniadau o fio.

Stori hir am fio ac ati

Beth yw WAL yn etcd

Defnyddir cronfeydd data fel arfer log ysgrifennu ymlaen llaw; ac ati yn ei ddefnyddio hefyd. Ni fyddwn yn trafod y log ysgrifennu ymlaen llaw (WAL) yn fanwl yma. Mae'n ddigon i ni wybod bod pob aelod o'r clwstwr etcd yn ei gadw mewn storfa barhaus. ac ati yn ysgrifennu pob gweithrediad gwerth allweddol (fel diweddariad) i WAL cyn ei gymhwyso i'r storfa. Os bydd un o'r aelodau storio yn damwain ac yn ailgychwyn rhwng cipluniau, gall adfer trafodion yn lleol ers y ciplun diwethaf gan gynnwys WAL.

Pan fydd cleient yn ychwanegu allwedd i'r storfa gwerth bysell neu'n diweddaru gwerth allwedd sy'n bodoli, ac ati yn cofnodi'r gweithrediad yn WAL, sy'n ffeil reolaidd sy'n cael ei storio'n barhaus. ac ati RHAID bod yn gwbl sicr bod y cofnod WAL wedi digwydd cyn parhau Γ’'r prosesu. Ar Linux, nid yw un alwad system yn ddigon ar gyfer hyn. ysgrifennu, oherwydd efallai y bydd oedi wrth ysgrifennu at storio ffisegol. Er enghraifft, efallai y bydd Linux yn storio cofnod WAL mewn storfa mewn cof cnewyllyn (fel celc tudalen) am beth amser. Ac er mwyn i'r data gael ei ysgrifennu'n gywir i'w storio'n barhaus, mae angen galwad y system fdatasync ar Γ΄l yr ysgrifennu, ac ati yn ei ddefnyddio (fel y gwelwch yng nghanlyniad y gwaith rhediad, lle mae 8 yn ddisgrifydd ffeil WAL):

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>

Yn anffodus, nid yw ysgrifennu at storfa barhaus yn digwydd ar unwaith. Os yw'r alwad fdatasync yn araf, bydd perfformiad y system ac ati yn dioddef. Dywed y ddogfennaeth ar gyfer ac atibod y storfa yn cael ei hystyried yn ddigon cyflym os, yn y 99fed canradd, mae galwadau fdatasync yn cymryd llai na 10ms i ysgrifennu at y ffeil WAL. Mae yna fetrigau defnyddiol eraill ar gyfer storio, ond yn y swydd hon dim ond am y metrig hwn yr ydym yn siarad.

Amcangyfrif storio gyda fio

Os oes angen i chi werthuso a yw'ch storfa yn addas ar gyfer ac ati, defnyddiwch fio, offeryn profi llwyth I/O poblogaidd iawn. Dylid cofio y gall gweithrediadau disg fod yn wahanol iawn: cydamserol ac asyncronig, llawer o ddosbarthiadau o alwadau system, ac ati O ganlyniad, mae fio yn eithaf anodd ei ddefnyddio. Mae ganddo lawer o baramedrau, ac mae gwahanol gyfuniadau o'u gwerthoedd yn cynhyrchu llwythi gwaith I/O gwahanol iawn. I gael ffigurau digonol ar gyfer ac ati, dylech sicrhau bod y llwyth ysgrifennu prawf o fio mor agos Γ’ phosibl at y llwyth gwirioneddol o ac ati wrth ysgrifennu ffeiliau WAL.

Felly, dylai fi, o leiaf, greu llwyth o gyfres o ysgrifenniadau dilyniannol i'r ffeil, bydd pob ysgrifen yn cynnwys galwad system ysgrifennuac yna galwad system fdatasync. Mae angen yr opsiwn --rw=ysgrifennu ar gyfer ysgrifennu dilyniannol i fi. Am fio defnyddio’r alwad system ysgrifennu wrth ysgrifennu, yn hytrach na ysgrifennu, dylech nodi'r paramedr --ioengine=cysoni. Yn olaf, er mwyn galw fdatasync ar Γ΄l pob ysgrifen, mae angen ichi ychwanegu'r paramedr --fdatasync=1. Mae'r ddau opsiwn arall yn yr enghraifft hon (--size a -bs) yn benodol i sgript. Yn yr adran nesaf, byddwn yn dangos i chi sut i'w gosod.

Pam fio a sut y dysgon ni i'w sefydlu

Yn y swydd hon, rydym yn disgrifio achos go iawn. Mae gennym ni glwstwr Kubernetes v1.13 a gafodd ei fonitro gennym gyda Prometheus. etcd v3.2.24 ei gynnal ar SSD. Roedd metrigau ac ati yn dangos cuddni fdatasync yn rhy uchel, hyd yn oed pan nad oedd y clwstwr yn gwneud dim. Roedd y metrigau yn rhyfedd a doedden ni ddim yn gwybod beth oedd eu hystyr. Roedd y clwstwr yn cynnwys peiriannau rhithwir, roedd angen deall beth oedd y broblem: mewn SSDs corfforol neu yn yr haen rhithwiroli. Yn ogystal, rydym yn aml yn gwneud newidiadau i'r ffurfweddiad caledwedd a meddalwedd, ac roedd angen ffordd i werthuso eu canlyniadau. Gallem redeg ac ati ym mhob ffurfwedd ac edrych ar fetrigau Prometheus, ond mae hynny'n ormod o drafferth. Roeddem yn chwilio am ffordd eithaf syml o werthuso cyfluniad penodol. Roeddem am wirio a ydym yn deall metrigau Prometheus o etcd yn gywir.

Ond ar gyfer hyn, roedd yn rhaid datrys dwy broblem. Yn gyntaf, sut olwg sydd ar y llwyth I/O y mae ac ati yn ei greu wrth ysgrifennu i WAL? Pa alwadau system a ddefnyddir? Beth yw maint y cofnodion? Yn ail, os byddwn yn ateb y cwestiynau hyn, sut rydym yn atgynhyrchu llwyth gwaith tebyg gyda fio? Peidiwch ag anghofio bod fio yn arf hyblyg iawn gyda llawer o opsiynau. Fe wnaethon ni ddatrys y ddwy broblem gydag un dull - gan ddefnyddio'r gorchmynion lsof ΠΈ rhediad. Mae lsof yn rhestru'r holl ddisgrifyddion ffeil a ddefnyddir gan y broses a'u ffeiliau cysylltiedig. Ac yn llym, gallwch archwilio proses sydd eisoes yn rhedeg, neu ddechrau proses a'i harchwilio. Mae strace yn argraffu pob galwad system o'r broses sy'n cael ei harchwilio (a'i phrosesau plentyn). Mae'r olaf yn bwysig iawn, gan fod ac ati yn cymryd agwedd debyg yn unig.

Fe wnaethom ddefnyddio strace yn gyntaf i archwilio'r gweinydd etcd ar gyfer Kubernetes pan nad oedd llwyth ar y clwstwr. Gwelsom fod bron pob cofnod CIY tua'r un maint: 2200–2400 beit. Felly, yn y gorchymyn ar ddechrau'r post, fe wnaethom nodi'r paramedr -bs = 2300 (mae bs yn golygu'r maint mewn beit ar gyfer pob cofnod fio). Sylwch fod maint y cofnod ac ati yn dibynnu ar y fersiwn etcd, dosbarthiad, gwerthoedd paramedr, ac ati, ac yn effeithio ar hyd y fdatasync. Os oes gennych senario tebyg, archwiliwch eich prosesau ac ati yn fanwl i ddarganfod yr union niferoedd.

Yna, i gael syniad da o beth mae'r system ffeiliau etcd yn ei wneud, fe ddechreuon ni gyda strace a'r opsiynau -ffttT. Felly ceisiwyd archwilio prosesau'r plentyn a chofnodi allbwn pob un ohonynt mewn ffeil ar wahΓ’n, a hefyd cael adroddiadau manwl am ddechrau a hyd pob galwad system. Defnyddiwyd lsof i gadarnhau ein dadansoddiad o'r allbwn llinyn a gweld pa ddisgrifydd ffeil oedd yn cael ei ddefnyddio at ba ddiben. Felly gyda chymorth strace, cafwyd y canlyniadau a ddangosir uchod. Cadarnhaodd ystadegau amser cydamseru fod wal_fsync_duration_seconds from etcd yn gyson Γ’ galwadau fdatasync gyda disgrifyddion ffeil WAL.

Aethom drwy'r ddogfennaeth ar gyfer fio a dewiswyd opsiynau ar gyfer ein sgript fel y byddai fio yn cynhyrchu llwyth tebyg i ayyb. Fe wnaethom hefyd wirio galwadau system a'u hyd trwy redeg fio o strace, tebyg i ac ati.

Rydym wedi dewis yn ofalus werth y paramedr --size i gynrychioli'r llwyth I/O cyfan o fio. Yn ein hachos ni, dyma gyfanswm nifer y bytes a ysgrifennwyd i'r storfa. Trodd allan i fod mewn cyfrannedd union Γ’ nifer y galwadau system ysgrifennu (a fdatasync). Ar gyfer gwerth penodol o bs, mae nifer y galwadau fdatasync = maint/bs. Gan fod gennym ddiddordeb yn y canradd, roedd yn rhaid i ni gael digon o samplau i fod yn sicr, a gwnaethom gyfrifo y byddai 10^4 yn ddigon i ni (sef 22 mebibytes). Os yw --size yn llai, gall allgleifion ddigwydd (er enghraifft, mae sawl galwad cydamseru data yn cymryd mwy o amser nag arfer ac yn effeithio ar y 99fed canradd).

Rhowch gynnig arni'ch hun

Fe wnaethon ni ddangos i chi sut i ddefnyddio fio a gweld a yw'r storfa yn ddigon cyflym i ac ati berfformio'n dda. Nawr gallwch chi roi cynnig arni drosoch eich hun gan ddefnyddio, er enghraifft, peiriannau rhithwir gyda storfa SSD ynddynt IBM Cloud.

Ffynhonnell: hab.com

Ychwanegu sylw