Xawaaraha kaydinta ee ku habboon iwm? Aan waydiino fio

Xawaaraha kaydinta ee ku habboon iwm? Aan waydiino fio

Sheeko gaaban oo ku saabsan fio iyo iwm

Waxqabadka kooxda iwm inta badan waxay ku xiran tahay waxqabadka kaydinteeda. etcd waxay u dhoofisaa qiyaasaha qaar Prometheussi ay u bixiyaan xogta waxqabadka kaydinta la doonayo. Tusaale ahaan, mitirka wal_fsync_duration_second Dukumeentiga iwmd wuxuu leeyahay: Kaydinta si loogu tixgeliyo si degdeg ah, boqolleyda 99-aad ee cabbirkan waa in ay ka yaraataa 10ms. Haddii aad qorsheyneyso inaad ku shaqeyso koox iwm mashiinnada Linux oo aad rabto inaad qiimeyso haddii kaydintaadu ku filan tahay (tusaale SSD), waxaad isticmaali kartaa fiyo waa aalad caan ah oo lagu tijaabiyo hawlgallada I/O. Ku socodsii amarka soo socda, halka xogta-tijaabadu ay tahay tusaha ku hoos jira barta korka kaydinta:

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

Kaliya waxaad u baahan tahay inaad eegto natiijooyinka oo aad hubiso in boqolkiiba 99 ee muddada fdatasync in ka yar 10 ms. Hadday sidaas tahay, waxaad haysataa kayd degdeg ah oo macquul ah. Waa kan tusaale ahaan natiijooyinka:

  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]

Ogeysiis

  • Waxaan u habbaynay --size iyo --bs fursadaha ee xaaladeena gaarka ah. Si aad natiijo waxtar leh uga hesho fio, bixi qiimayaashaada. Xagee laga helaa? Akhriso sida aan ku barannay habaynta fio.
  • Inta lagu jiro baaritaanka, dhammaan culeyska I/O wuxuu ka yimaadaa fio. Xaaladda nolosha dhabta ah, waxay u badan tahay inay jiraan codsiyo kale oo qoraal ah oo soo galaya kaydinta marka laga reebo kuwa la xidhiidha wal_fsync_duration_seconds. Culayska dheeriga ah wuxuu kordhin doonaa qiimaha wal_fsync_duration_seconds. Markaa haddii boqolkiiba 99-aad uu ku dhow yahay 10ms, kaydintaada xawli waa ka dhammaanayaa.
  • Qaado nooca fiyo aan ka hoosayn 3.5 (kuwa hore ma muujiyaan boqolleyda muddada fdatasync).
  • Korku waa qayb yar oo ka mid ah natiijooyinka fio.

Sheeko dheer oo ku saabsan fio iyo iwm

Waa maxay WAL ee iwm

Caadi ahaan xog-ururinta ayaa la isticmaalaa qori-hor-qorista; etcd ayaa sidoo kale isticmaala. Halkan si faahfaahsan uga hadli mayno qoraalka-hor-qorista (WAL). Waxaa nagu filan inaan ogaano in xubin kasta oo ka mid ah kooxda iwm ay ku hayso kaydinta joogtada ah. etcd waxay u qortaa hawlgal kasta oo qiimo-fure ah (sida cusbooneysiin) WAL ka hor inta aan lagu dabaqin dukaanka. Haddii mid ka mid ah xubnaha kaydinta uu shil galo oo uu dib u bilaabo inta u dhaxaysa sawir-qaadista, waxay soo celin kartaa maxalli ahaan wax kala iibsiga tan iyo sawirkii u dambeeyay ee nuxurka WAL.

Marka macmiilku ku daro furaha dukaanka-qiimaha ama uu cusbooneysiiyo qiimaha furaha jira, etcd wuxuu diiwaangeliyaa hawlgalka WAL, kaas oo ah faylka caadiga ah ee kaydinta joogtada ah. etcd WAA inay si buuxda u hubiyaan in galitaanka WAL dhab ahaantii dhacay ka hor intaadan sii wadin habaynta. Linux, hal wicitaan kuma filna tan. ku qor, maadaama qoraalka dhabta ah ee kaydinta jirka laga yaabo in dib loo dhigo. Tusaale ahaan, Linux waxa laga yaabaa in ay kaydka WAL ku kaydiso kaydka xusuusta kernel (sida kaydka bogga) in muddo ah. Iyo si xogta si sax ah loogu qoro kaydinta joogtada ah, wicitaanka nidaamka fdatasync ayaa loo baahan yahay qorista ka dib, iyo etcd kaliya ayaa isticmaala (sida aad ku arki karto natiijada shaqada xarig, halka 8 uu yahay sharaxaadaha faylka 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>

Nasiib darro, qorista kaydinta joogtada ahi ma dhacdo isla markiiba. Haddii wicitaanka fdatasync uu gaabis yahay, waxqabadka nidaamka etcd wuu dhibi doonaa. Dukumeentiga iwmd wuxuu leeyahayin kaydinta loo tixgeliyo si dhakhso ah oo ku filan haddii, boqolkiiba 99, wicitaanada fdatasync ay qaataan wax ka yar 10ms si loogu qoro faylka WAL. Waxaa jira cabbiro kale oo faa'iido leh oo kaydinta, laakiin qoraalkan waxaan ka hadlaynaa oo kaliya mitirkan.

Ku qiyaasida kaydinta fio

Haddii aad u baahan tahay inaad qiimeyso haddii kaydintaadu ku habboon tahay iwm, isticmaal fio, oo ah aalad tijaabinta culayska I/O ee aad loo jecel yahay. Waa in la xusuustaa in hawlaha diskooga ay aad u kala duwanaan karaan: isku mid ah iyo asynchronous, fasallo badan oo wicitaanno ah, iwm. Natiijo ahaan, fio aad bay u adagtahay in la isticmaalo. Waxay leedahay xuduudo badan, iyo isku darka kala duwan ee qiyamkooda waxay soo saaraan culeysyo shaqo oo I / O ah oo aad u kala duwan. Si aad u hesho tirooyin ku filan iwm, waa inaad hubisaa in tijaabada qoraalka culeyska fio uu u dhow yahay inta suurtogalka ah culeyska dhabta ah ee ka imanaya iwm marka aad qorayso faylasha WAL.

Sidaa darteed, fio waa in, ugu yaraan, abuurtaa culays qaab taxane ah oo qoraal ah oo xidhiidhsan faylka, qoraal kastaa waxa uu ka koobnaan doonaa nidaamka wicista. ku qoroo ay ku xigto nidaamka fdatasync call. Qoraalada taxanaha ah ee fio waxay u baahan yihiin --rw=ikhtiyaarka qoraalka. Si aad fio u isticmaasho hab-qorista wac marka aad wax qorayso, halkii aad ka isticmaali lahayd qor, waa inaad qeexdaa --ioengine=sync parameter. Ugu dambeyntii, si aad u wacdo fdatasync ka dib qoraal kasta, waxaad u baahan tahay inaad ku darto --fdatasync=1 parameter. Labada doorasho ee kale ee tusaalahan (--size iyo -bs) waa qoraal-gaar ah. Qaybta xigta, waxaan ku tusi doonaa sida loo habeeyo.

Waa maxay sababta dhabta ah ee fio iyo sida aan u baranay inaan u dhigno

Qoraalkan, waxaan ku qeexaynaa kiis dhab ah. Waxaan leenahay koox Kubureteska v1.13 oo aanu la soconay Prometheus. etcd v3.2.24 waxaa lagu marti galiyay SSD. Qiyaasta Etcd waxay muujisay daahitaanka fdatasync aad u sarreeya, xitaa marka kooxdu aysan waxba qabanayn. Halbeegyadu waxay ahaayeen kuwo yaab leh oo runtii ma aannu garanayn waxay ula jeedaan. Kooxdu waxay ka koobnayd mashiinnada farsamada gacanta, waxaa lagama maarmaan ahayd in la fahmo waxa dhibaatadu tahay: SSD-yada jireed ama lakabka farsamada. Intaa waxaa dheer, waxaan inta badan ku samaynay isbeddel ku saabsan habka hardware iyo software, oo waxaan u baahanahay hab lagu qiimeeyo natiijooyinkooda. Waxaan ku socon karnaa etcd qaabeyn kasta oo aan eegno metrics Prometheus, laakiin taasi waa dhib aad u badan. Waxaan raadinaynay hab cadaalad ah oo fudud oo lagu qiimeeyo qaabayn gaar ah. Waxaan rabnay inaan hubinno inaan si sax ah uga fahannay mitirka Prometheus ka etcd.

Laakiin tan, laba dhibaato waxay ahayd in la xalliyo. Marka hore, muxuu u egyahay rarka I/O ee etcd abuuraa marka wax loo qorayo WAL? Waa maxay wicitaanada nidaamka la isticmaalo? Waa maxay cabbirka diiwaanadu? Marka labaad, haddii aan ka jawaabno su'aalahan, sidee baan u soo saari karnaa culeys shaqo oo la mid ah fio? Ha iloobin in fio ay tahay aalad aad u dabacsan oo leh xulashooyin badan. Waxaan labada dhibaato ku xallinay hal hab - annagoo adeegsanayna amarrada lsof ΠΈ xarig. lsof wuxuu taxayaa dhammaan sharraxayaasha faylka loo isticmaalo habka iyo faylalka la xiriira. Oo adigoo isticmaalaya xadhig, waxaad baari kartaa hanaan hore u socday, ama waxaad bilaabi kartaa habraac oo aad baadho. strace waxay daabacdaa dhammaan wicitaannada nidaamka ee habka la baarayo (iyo habraacyada ilmaheeda). Tan dambe aad bay muhiim u tahay, maadaama etcd ay qaadanayaan hab la mid ah.

Waxaan markii hore u isticmaalnay xargo si aan u sahamino server-ka iwmd ee Kubernetes markii wax culeys ah uusan ku jirin kooxda. Waxaan aragnay in ku dhawaad ​​dhammaan diiwaannada WAL ay isku qiyaas ahaayeen: 2200-2400 bytes. Sidaa darteed, amarka bilowga boostada, waxaan ku qeexnay halbeegga -bs=2300 (bs macnaheedu waa cabbirka bytes ee gelitaanka fio kasta). Ogsoonow in cabbirka galitaanka etcd uu ku xidhan yahay nooca etcd, qaybinta, qiyamka halbeegyada, iwm., oo waxay saamaysaa mudada fdatasync. Haddii aad leedahay xaalad la mid ah, ku baar hababkaaga etcd strace si aad u ogaato tirada saxda ah.

Kadib, si aad fikrad fiican u hesho waxa nidaamka faylka etcd uu qabanayo, waxaan ku bilownay xaraf iyo xulashooyinka -ffttT. Markaa waxaan isku daynay inaan baarno hababka ilmaha oo aan ku duubno wax soo saarka mid kasta oo iyaga ka mid ah fayl gaar ah, iyo sidoo kale hel warbixinno faahfaahsan oo ku saabsan bilowga iyo muddada wicitaanka nidaamka kasta. Waxaan isticmaalnay lsof si aan u xaqiijino falanqayntayada wax-soo-saarka xargaha oo aan aragno sharraxaaha faylka loo isticmaalay ujeeddadaas. Markaa iyadoo la kaashanayo strace, natiijooyinka kor lagu muujiyey ayaa la helay. Tirakoobka wakhtiga isku xidhka ayaa xaqiijiyay in wal_fsync_duration_seconds laga soo bilaabo etcd uu waafaqsan yahay wicitaanada fdatasync ee sharaxayaasha faylka WAL.

Waxaan dhex marnay dukumeentiyada fio waxaanan doorannay ikhtiyaarka qoraalkayaga si fio uu u soo saaro culeys la mid ah iwm. Waxaan sidoo kale hubinay wicitaanada nidaamka iyo mudada ay ku jiraan anagoo ka oronay fio strace, oo la mid ah iwm.

Waxaan si taxadar leh u doorannay qiimaha --size parameter si uu u matalo dhammaan culeyska I/O ee fio. Xaaladeena, tani waa wadarta tirada bytes ee loo qoray kaydinta. Waxay u soo baxday inay si toos ah ula mid tahay tirada qorista (iyo fdatasync) wicitaanada nidaamka. Qiimo gaar ah oo bs ah, tirada fdatasync wicitaanada = cabbirka/bs. Maadaama aan xiisayneyno boqolleyda, waa inaan haysanaa muunado ku filan si aan u hubinno, waxaanan xisaabinay in 10^4 ay nagu filan tahay (taasi waa 22 mebibytes). Haddii --size ka yar yahay, wax ka baxsan ayaa laga yaabaa inay dhacaan (tusaale, dhowr wicis fdatasync ah ayaa qaata waqti ka badan inta caadiga ah waxayna saameeyaan boqolkiiba 99).

Isku day naftaada

Waxaan ku tusnay sida loo isticmaalo fio oo aan aragno haddii kaydintu ku filan tahay iwm si ay si fiican u qabato. Hadda waxaad isku dayi kartaa naftaada adoo isticmaalaya, tusaale ahaan, mashiinada farsamada gacanta ee SSD kaydinta IBM Cloud.

Source: www.habr.com

Add a comment