„Linux“ branduolio nustatymas „GlusterFS“.

Straipsnio vertimas buvo parengtas kursų pradžios išvakarėse Linux administratorius. Profesionalus ».

„Linux“ branduolio nustatymas „GlusterFS“.

Periodiškai šen bei ten iškyla klausimų dėl Gluster rekomendacijų dėl branduolio derinimo ir ar to reikia.

Toks poreikis iškyla retai. Daugumoje darbo krūvių branduolys veikia labai gerai. Nors yra ir minusas. Istoriškai „Linux“ branduolys buvo pasirengęs sunaudoti daug atminties, jei buvo suteikta galimybė, įskaitant talpyklą, kaip pagrindinį būdą pagerinti našumą.

Daugeliu atvejų tai veikia gerai, tačiau esant didelei apkrovai tai gali sukelti problemų.

Turime daug patirties su daug atminties reikalaujančiomis sistemomis, tokiomis kaip CAD, EDA ir panašiai, kurios pradėjo lėtėti esant dideliam krūviui. O kartais Glusteryje susidurdavome su problemomis. Daug dienų atidžiai stebėję atminties naudojimą ir disko delsą, gavome jų perkrovą, didžiulį iowait, branduolio klaidas (branduolių oops), užšalimus ir kt.

Šis straipsnis yra daugelio derinimo eksperimentų, atliktų įvairiose situacijose, rezultatas. Dėl šių parametrų pagerėjo ne tik bendras reagavimas, bet ir gerokai stabilizavosi klasteris.

Kalbant apie atminties derinimą, pirmiausia reikia pažvelgti į virtualios atminties posistemį (VM, virtualią atmintį), kuris turi daugybę parinkčių, kurios gali jus suklaidinti.

vm.sukeitimas

Parametras vm.swappiness nustato, kiek branduolys naudoja apsikeitimą (swap, pageing), palyginti su RAM. Jis taip pat apibrėžiamas šaltinio kode kaip „polinkis pavogti susietą atmintį“. Didelis apsikeitimo lygis reiškia, kad branduolys bus labiau linkęs keistis susietais puslapiais. Maža apsikeitimo vertė reiškia priešingai: branduolys puslapius spausdins mažiau iš atminties. Kitaip tariant, tuo didesnė vertė vm.swappiness, tuo daugiau sistema naudos swap.

Didelis apsikeitimo naudojimas yra nepageidautinas, nes į RAM įkeliami ir iškraunami didžiuliai duomenų blokai. Daugelis žmonių ginčijasi, kad apsikeitimo vertė turėtų būti didelė, tačiau, mano patirtimi, nustačius ją į „0“ pasiekiamas geresnis našumas.

Daugiau paskaityti galite čia - lwn.net/Articles/100978

Tačiau vėlgi, šie nustatymai turėtų būti taikomi atsargiai ir tik išbandę konkrečią programą. Labai apkrautoms srautinio perdavimo programoms šis parametras turėtų būti nustatytas į „0“. Pakeitus į „0“, sistemos reagavimas pagerėja.

vm.vfs_cache_pressure

Šis nustatymas valdo atmintį, kurią branduolys sunaudoja katalogų ir įvesties objektų (dantry ir inode) kaupimui talpykloje.

Kai numatytoji reikšmė yra 100, branduolys bandys „sąžiningai“ atlaisvinti dentry ir inode talpyklas į puslapių talpyklą ir swapcache. Sumažėjus vfs_cache_pressure, branduolys išlaiko dentry ir inode talpyklas. Kai reikšmė yra „0“, branduolys niekada neišvalys dentry ir inode talpyklos dėl atminties slėgio, o tai gali lengvai sukelti atminties trūkumo klaidą. Padidinus vfs_cache_pressure virš 100, branduolys pirmenybę teikia dantrym ir inode praplovimui.

Kai naudojate GlusterFS, daugelis vartotojų, turinčių didelius duomenų kiekius ir daug mažų failų, gali lengvai naudoti daug RAM serveryje dėl inode/dentry talpyklos, todėl gali pablogėti našumas, nes branduolys turi apdoroti duomenų struktūras sistemoje. su 40 GB atminties. Šios vertės nustatymas virš 100 padėjo daugeliui vartotojų pasiekti teisingesnį talpyklą ir patobulintą branduolio reagavimą.

vm.dirty_background_ratio ir vm.dirty_ratio

Pirmasis parametras (vm.dirty_background_ratio) nustato atminties su nešvariais puslapiais procentą, kurį pasiekus reikia pradėti nešvarių puslapių plovimą fone į diską. Kol nepasiekiamas šis procentas, jokie puslapiai neįkeliami į diską. Ir kai prasideda atstatymas, jis veikia fone, nepertraukiant vykdomų procesų.

Antrasis parametras (vm.dirty_ratio) apibrėžia atminties procentinę dalį, kurią gali užimti nešvarūs puslapiai prieš prasidedant priverstinei blykstei. Pasiekus šią ribą, visi procesai tampa sinchroniški (blokuojami) ir jiems neleidžiama tęsti tol, kol jų prašoma įvestis / išvestis iš tikrųjų nebus baigta ir duomenys nebus diske. Esant dideliam įvesties / išvesties kiekiui, tai sukelia problemų, nes nėra duomenų kaupimo talpykloje ir visi procesai, atliekantys I/O, yra užblokuoti laukiant įvesties/išvesties. Dėl to atsiranda daug pakabinamų procesų, didelė apkrova, sistemos nestabilumas ir prastas veikimas.

Sumažinus šiuos parametrus, duomenys dažniau išleidžiami į diską ir nesaugomi RAM. Tai gali padėti daug atminties turinčioms sistemoms, kuriose įprasta 45–90 GB puslapių talpyklos išplauti į diską, todėl priekinėms programoms užtrunka labai daug delsos, todėl sumažėja bendras reagavimas ir interaktyvumas.

"1" > /proc/sys/vm/pagecache

Puslapio talpykla yra talpykla, kurioje saugomi failų ir vykdomųjų programų duomenys, tai yra, tai yra puslapiai su tikruoju failų ar blokuojamų įrenginių turiniu. Ši talpykla naudojama disko nuskaitymų skaičiui sumažinti. „1“ reikšmė reiškia, kad talpyklai naudojama 1% RAM ir bus daugiau nuskaitoma iš disko nei iš RAM. Šio nustatymo keisti nebūtina, bet jei esate paranojiškas dėl puslapio talpyklos valdymo, galite jį naudoti.

"deadline" > /sys/block/sdc/queue/scheduler

Įvesties / išvesties planuoklis yra „Linux“ branduolio komponentas, tvarkantis skaitymo ir rašymo eiles. Teoriškai protingam RAID valdikliui geriau naudoti „noop“, nes „Linux“ nieko nežino apie fizinę disko geometriją, todėl efektyviau leisti valdikliui, kuris gerai žino disko geometriją, apdoroti užklausą taip greitai, kaip galima. Tačiau panašu, kad „terminas“ pagerina našumą. Daugiau apie planuoklius galite perskaityti Linux branduolio šaltinio kodo dokumentacijoje: linux/Documentation/block/*osched.txt. Taip pat mačiau skaitymo pralaidumo padidėjimą atliekant mišrias operacijas (rašo daug).

"256" > /sys/block/sdc/queue/nr_requests

Įvesties / išvesties užklausų skaičius buferyje prieš perduodant jas planuokliui. Kai kurių valdiklių vidinės eilės dydis (eilės_gylis) yra didesnis nei I/O planuoklio nr_requests, todėl I/O planuoklis turi mažai galimybių tinkamai nustatyti prioritetus ir sujungti užklausas. Termino ir CFQ planuotojams geriau, kai nr_requests yra 2 kartus didesnis už valdiklio vidinę eilę. Užklausų sujungimas ir pertvarkymas padeda planuotojui geriau reaguoti esant didelei apkrovai.

echo "16" > /proc/sys/vm/page-cluster

Puslapių grupės parametras valdo puslapių, kurie vienu metu įrašomi į apsikeitimo sritį, skaičių. Aukščiau pateiktame pavyzdyje reikšmė nustatyta į „16“ pagal 64 KB RAID juostelės dydį. Tai nėra prasminga, kai apsikeitimas = 0, bet jei nustatote keitimą į 10 arba 20, šios reikšmės naudojimas padės, kai RAID juostos dydis yra 64K.

blockdev --setra 4096 /dev/<devvardas> (-sdb, hdc arba dev_mapper)

Daugelio RAID valdiklių numatytieji blokavimo įrenginio nustatymai dažnai sukelia siaubingą našumą. Pridėjus aukščiau pateiktą parinktį, nustatomas 4096 * 512 baitų sektorių skaitymas į priekį. Bent jau srautinio perdavimo operacijoms greitis padidinamas užpildžius lusto disko talpyklą nuskaitymu į priekį tuo laikotarpiu, kurį branduolys naudoja įvesties / išvesties paruošimui. Talpykloje gali būti duomenų, kurių bus prašoma kitą kartą nuskaitant. Per daug išankstinio gavimo gali sunaikinti atsitiktinius didelių failų įvesties / išvesties duomenis, jei sunaudojama potencialiai naudingo disko laiko arba įkeliami duomenys už talpyklos ribų.

Toliau pateikiamos dar kelios rekomendacijos failų sistemos lygiu. Bet jie dar nebuvo išbandyti. Įsitikinkite, kad jūsų failų sistema žino juostelės dydį ir diskų skaičių masyve. Pavyzdžiui, kad tai yra 5K juostų raid64 masyvas iš šešių diskų (iš tikrųjų penkių, nes vienas diskas naudojamas lygybei). Šios rekomendacijos yra pagrįstos teorinėmis prielaidomis ir RAID ekspertų sudarytos iš įvairių tinklaraščių/straipsnių.

-> 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))

Jei failai yra dideli, apsvarstykite galimybę padidinti anksčiau išvardytų juostelių dydžius.

DĖMESIO! Viskas, kas aprašyta aukščiau, yra labai subjektyvu tam tikrų tipų programoms. Šis straipsnis negarantuoja jokių patobulinimų, jei vartotojas neišbandys susijusių programų. Jis turėtų būti naudojamas tik tuo atveju, jei būtina pagerinti bendrą sistemos reagavimą arba jei jis išsprendžia esamas problemas.

Дополнительные mм:

„Linux“ branduolio nustatymas „GlusterFS“.

Skaityti daugiau

Šaltinis: www.habr.com

Добавить комментарий