Periodiski, Å”ur tur, rodas jautÄjumi par Gluster ieteikumiem attiecÄ«bÄ uz kodola regulÄÅ”anu un to, vai tas ir nepiecieÅ”ams.
TÄda vajadzÄ«ba rodas reti. LielÄkajÄ daÄ¼Ä darba slodžu kodols darbojas ļoti labi. Lai gan ir mÄ«nuss. VÄsturiski Linux kodols ir bijis gatavs patÄrÄt daudz atmiÅas, ja tam tika dota iespÄja, tostarp keÅ”atmiÅai kÄ galvenais veids, kÄ uzlabot veiktspÄju.
VairumÄ gadÄ«jumu tas darbojas labi, taÄu ar lielu slodzi tas var radÄ«t problÄmas.
Mums ir liela pieredze ar atmiÅu ietilpÄ«gÄm sistÄmÄm, piemÄram, CAD, EDA un tamlÄ«dzÄ«gÄm, kas lielas slodzes laikÄ sÄka palÄninÄties. Un dažreiz mÄs saskÄrÄmies ar problÄmÄm GlusterÄ. RÅ«pÄ«gi novÄrojot atmiÅas lietojumu un diska latentumu daudzu dienu garumÄ, mÄs saÅÄmÄm to pÄrslodzi, milzÄ«go iowait, kodola kļūdas (kodola oops), sasalÅ”anu utt.
Å is raksts ir daudzu dažÄdÄs situÄcijÄs veiktu skaÅoÅ”anas eksperimentu rezultÄts. Pateicoties Å”iem parametriem, ir uzlabojusies ne tikai kopÄjÄ atsaucÄ«ba, bet arÄ« bÅ«tiski stabilizÄjies klasteris.
RunÄjot par atmiÅas regulÄÅ”anu, pirmÄ lieta, kas jÄÅem vÄrÄ, ir virtuÄlÄs atmiÅas apakÅ”sistÄma (VM, virtuÄlÄ atmiÅa), kurÄ ir liels skaits iespÄju, kas var jÅ«s mulsinÄt.
vm.swapiness
Parametrs vm.swappiness nosaka, cik daudz kodols izmanto mijmaiÅas (swap, peidžeru), salÄ«dzinot ar RAM. Tas ir arÄ« definÄts avota kodÄ kÄ "tendence nozagt kartÄto atmiÅu". Augsta mijmaiÅas intensitÄte nozÄ«mÄ, ka kodols bÅ«s vairÄk tendÄts apmainÄ«t kartÄtÄs lapas. Zema mijmaiÅas vÄrtÄ«ba nozÄ«mÄ pretÄjo: kodols mazÄk lappuÅ”u no atmiÅas. Citiem vÄrdiem sakot, jo lielÄka vÄrtÄ«ba vm.swappiness, jo vairÄk sistÄma izmantos mijmaiÅas.
PlaÅ”a apmaiÅas izmantoÅ”ana nav vÄlama, jo RAM tiek ielÄdÄti un izlÄdÄti milzÄ«gi datu bloki. Daudzi cilvÄki apgalvo, ka mijmaiÅas vÄrtÄ«bai jÄbÅ«t lielai, taÄu, pÄc manas pieredzes, iestatot to uz "0", tiek nodroÅ”inÄta labÄka veiktspÄja.
Bet atkal Å”ie iestatÄ«jumi ir jÄpiemÄro uzmanÄ«gi un tikai pÄc konkrÄtas lietojumprogrammas pÄrbaudes. Ä»oti ielÄdÄtÄm straumÄÅ”anas lietojumprogrammÄm Å”im parametram jÄbÅ«t iestatÄ«tam uz ā0ā. Mainot uz "0", sistÄmas reakcija uzlabojas.
vm.vfs_cache_pressure
Å is iestatÄ«jums kontrolÄ atmiÅu, ko kodols patÄrÄ direktoriju un inode objektu (dentry un inode) keÅ”atmiÅas saglabÄÅ”anai.
Ja noklusÄjuma vÄrtÄ«ba ir 100, kodols mÄÄ£inÄs "godÄ«gi" atbrÄ«vot dentry un inode keÅ”atmiÅu, izmantojot lapas keÅ”atmiÅu un mijmaiÅas keÅ”atmiÅu. Samazinot vfs_cache_pressure, kodols saglabÄ dentry un inode keÅ”atmiÅu. Ja vÄrtÄ«ba ir "0", kodols nekad neizskalos dentry un inode keÅ”atmiÅu atmiÅas spiediena dÄļ, un tas var viegli izraisÄ«t atmiÅas trÅ«kuma kļūdu. Palielinot vfs_cache_spiedienu virs 100, kodols pieŔķir prioritÄti dentry un inode flushing.
Lietojot GlusterFS, daudzi lietotÄji ar lielu datu apjomu un daudziem maziem failiem var viegli izmantot ievÄrojamu daudzumu RAM serverÄ« inode/dentry keÅ”atmiÅas dÄļ, kas var izraisÄ«t veiktspÄjas pasliktinÄÅ”anos, jo kodolam ir jÄapstrÄdÄ sistÄmas datu struktÅ«ras. ar 40 GB atmiÅu. Å Ä«s vÄrtÄ«bas iestatÄ«Å”ana virs 100 ir palÄ«dzÄjusi daudziem lietotÄjiem panÄkt godÄ«gÄku keÅ”atmiÅu un uzlabot kodola reaÄ£ÄtspÄju.
vm.dirty_background_ratio un vm.dirty_ratio
Pirmais parametrs (vm.dirty_background_ratio) nosaka atmiÅas procentuÄlo daudzumu ar netÄ«rÄm lapÄm, pÄc kuras sasniegÅ”anas jÄsÄk netÄ«ro lapu skaloÅ”ana fonÄ diskÄ. KamÄr Å”is procents nav sasniegts, neviena lapa netiek izskalota diskÄ. Un, kad sÄkas atiestatÄ«Å”ana, tÄ darbojas fonÄ, nepÄrtraucot darbÄ«bas procesus.
Otrais parametrs (vm.dirty_ratio) nosaka atmiÅas procentuÄlo daudzumu, ko var aizÅemt netÄ«rÄs lapas, pirms tiek sÄkta piespiedu zibspuldze. Kad Å”is slieksnis ir sasniegts, visi procesi kļūst sinhroni (bloÄ·Äti) un tiem nav atļauts turpinÄties, kamÄr nav faktiski pabeigta to pieprasÄ«tÄ ievade/izvade un dati atrodas diskÄ. Ar smagu I/O tas rada problÄmas, jo nav datu keÅ”atmiÅas un visi procesi, kas veic I/O, tiek bloÄ·Äti, gaidot I/O. Tas izraisa lielu skaitu pakarinÄtu procesu, lielu slodzi, sistÄmas nestabilitÄti un sliktu veiktspÄju.
Samazinot Å”os iestatÄ«jumus, dati tiek biežÄk izskaloti diskÄ un netiek saglabÄti RAM. Tas var palÄ«dzÄt sistÄmÄm ar lielu atmiÅu, kur parasti ir 45ā90 GB lappuÅ”u keÅ”atmiÅas izskaloÅ”ana diskÄ, tÄdÄjÄdi radot milzÄ«gu latentumu priekÅ”gala lietojumprogrammÄm, samazinot vispÄrÄjo atsaucÄ«bu un interaktivitÄti.
"1" > /proc/sys/vm/pagecache
Lapas keÅ”atmiÅa ir keÅ”atmiÅa, kurÄ tiek glabÄti failu un izpildÄmo programmu dati, tas ir, tÄs ir lapas ar faktisko failu saturu vai blokierÄ«cÄm. Å Ä« keÅ”atmiÅa tiek izmantota, lai samazinÄtu diska nolasÄ«jumu skaitu. VÄrtÄ«ba "1" nozÄ«mÄ, ka keÅ”atmiÅai tiek izmantots 1% RAM, un no diska tiks lasÄ«ts vairÄk nekÄ no RAM. Å is iestatÄ«jums nav jÄmaina, taÄu, ja jums ir paranoisks lapas keÅ”atmiÅas kontrole, varat to izmantot.
"termiÅÅ”" > /sys/block/sdc/queue/scheduler
I/O plÄnotÄjs ir Linux kodola komponents, kas apstrÄdÄ lasÄ«Å”anas un rakstÄ«Å”anas rindas. TeorÄtiski viedajam RAID kontrollerim labÄk ir izmantot "noop", jo Linux neko nezina par diska fizisko Ä£eometriju, tÄpÄc efektÄ«vÄk ir ļaut kontrolierim, kurÅ” labi zina diska Ä£eometriju, apstrÄdÄt pieprasÄ«jumu tik Ätri, kÄ iespÄjams. Bet izskatÄs, ka "termiÅÅ”" uzlabo veiktspÄju. PlaÅ”Äku informÄciju par plÄnotÄjiem varat lasÄ«t Linux kodola pirmkoda dokumentÄcijÄ: linux/Documentation/block/*osched.txt. Un arÄ« jauktu darbÄ«bu laikÄ (daudzi raksti) esmu redzÄjis lasÄ«Å”anas caurlaidÄ«bas pieaugumu.
"256" > /sys/block/sdc/queue/nr_requests
I/O pieprasÄ«jumu skaits buferÄ«, pirms tie tiek nodoti plÄnotÄjam. Dažu kontrolleru iekÅ”ÄjÄs rindas lielums (queue_depth) ir lielÄks nekÄ I/O plÄnotÄja nr_requests, tÄpÄc I/O plÄnotÄjam ir maz iespÄju pareizi noteikt prioritÄtes un apvienot pieprasÄ«jumus. TermiÅa un CFQ plÄnotÄjiem ir labÄk, ja nr_requests ir 2 reizes lielÄks par kontroliera iekÅ”Äjo rindu. PieprasÄ«jumu apvienoÅ”ana un pÄrkÄrtoÅ”ana palÄ«dz plÄnotÄjam bÅ«t atsaucÄ«gÄkam lielas slodzes apstÄkļos.
echo "16" > /proc/sys/vm/page-cluster
Lapu klastera parametrs kontrolÄ lappuÅ”u skaitu, kas vienlaikus tiek ierakstÄ«tas mijmaiÅas programmÄ. IepriekÅ” minÄtajÄ piemÄrÄ vÄrtÄ«ba ir iestatÄ«ta uz "16" atbilstoÅ”i RAID joslas izmÄram 64 KB. Nav jÄgas, ja swappiness = 0, bet, ja iestatÄt mijmaiÅas vÄrtÄ«bu uz 10 vai 20, tad Ŕīs vÄrtÄ«bas izmantoÅ”ana jums palÄ«dzÄs, ja RAID joslas izmÄrs ir 64K.
blockdev --setra 4096 /dev/<devname> (-sdb, hdc vai dev_mapper)
NoklusÄjuma bloka ierÄ«ces iestatÄ«jumi daudziem RAID kontrolleriem bieži rada briesmÄ«gu veiktspÄju. Pievienojot iepriekÅ” minÄto opciju, tiek iestatÄ«ta lasÄ«Å”ana uz priekÅ”u 4096 * 512 baitu sektoriem. Vismaz straumÄÅ”anas operÄcijÄm Ätrums tiek palielinÄts, aizpildot mikroshÄmas diska keÅ”atmiÅu ar priekÅ”lasÄ«Å”anu laikÄ, ko kodols izmanto ievades/izvades sagatavoÅ”anai. KeÅ”atmiÅÄ var bÅ«t dati, kas tiks pieprasÄ«ti nÄkamajÄ lasÄ«Å”anas reizÄ. PÄrÄk daudz priekÅ”ielÄdÄÅ”anas var iznÄ«cinÄt lielu failu nejauÅ”u ievadi/izvadi, ja tiek patÄrÄts potenciÄli noderÄ«gs diska laiks vai tiek ielÄdÄti dati Ärpus keÅ”atmiÅas.
TÄlÄk ir sniegti vÄl daži ieteikumi failu sistÄmas lÄ«menÄ«. Bet tie vÄl nav pÄrbaudÄ«ti. PÄrliecinieties, vai jÅ«su failu sistÄma zina svÄ«tras lielumu un disku skaitu masÄ«vÄ. PiemÄram, ka Å”is ir 5K svÄ«tru raid64 masÄ«vs no seÅ”iem diskiem (faktiski pieci, jo viens disks tiek izmantots paritÄtei). Å ie ieteikumi ir balstÄ«ti uz teorÄtiskiem pieÅÄmumiem, un tos no dažÄdiem emuÄriem/rakstiem apkopojuÅ”i RAID eksperti.
-> ext4 fs, 5 disks, 64K stripe, units in 4K blocks
mkfs -text4 -E stride=$((64/4))
-> xfs, 5 disks, 64K stripe, units in 512-byte sectors
mkfs -txfs -d sunit=$((64*2)) -d swidth=$((5*64*2))
UZMANÄŖBU! Viss, kas aprakstÄ«ts iepriekÅ”, ir ļoti subjektÄ«vs dažiem lietojumu veidiem. Å is raksts negarantÄ nekÄdus uzlabojumus bez iepriekÅ”Äjas saistÄ«to lietojumprogrammu testÄÅ”anas. To vajadzÄtu izmantot tikai tad, ja ir nepiecieÅ”ams uzlabot sistÄmas vispÄrÄjo reaÄ£ÄtspÄju vai tas atrisina paÅ”reizÄjÄs problÄmas.