Nastavenie linuxového jadra pre GlusterFS

Preklad článku bol pripravený v predstihu pred začiatkom kurzu "Správca Linuxu. profesionálny".

Nastavenie linuxového jadra pre GlusterFS

Z času na čas sa tu a tam objavia otázky týkajúce sa odporúčaní Glusteru týkajúcich sa prispôsobenia jadra a či je to potrebné.

Táto potreba vzniká len zriedka. Jadro funguje veľmi dobre pri väčšine pracovných zaťažení. Aj keď je tu nevýhoda. Historicky linuxové jadro ľahko spotrebuje veľa pamäte, ak dostane príležitosť, vrátane ukladania do vyrovnávacej pamäte ako primárneho prostriedku na zlepšenie výkonu.

Vo väčšine prípadov to funguje skvele, ale pri veľkom zaťažení to môže spôsobiť problémy.

Máme bohaté skúsenosti s prácou so systémami, ktoré spotrebúvajú veľa pamäte, ako sú CAD, EDA a podobne, ktoré sa pri vysokej záťaži začali spomaľovať. A niekedy sme narazili na problémy v Gluster. Po starostlivom sledovaní použitej pamäte a čakacej doby disku viac ako jeden deň sme dostali preťaženie disku, obrovské iowait, chyby jadra (jadro oops), zamrznutie atď.

Tento článok je výsledkom mnohých experimentov s ladením parametrov vykonaných v rôznych situáciách. Vďaka týmto parametrom sa zlepšila nielen odozva vo všeobecnosti, ale výrazne sa stabilizovala aj prevádzka klastra.

Pokiaľ ide o konfiguráciu pamäte, prvé miesto, kam by ste sa mali pozrieť, je virtuálny pamäťový subsystém (VM), ktorý má veľké množstvo možností, ktoré vás môžu zmiasť.

vm.swappiness

Parameter vm.swappiness určuje, koľko jadro využíva swap v porovnaní s RAM. V zdrojovom kóde je tiež definovaný ako „tendencia kradnúť mapovanú pamäť“. Vysoká hodnota swappiness znamená, že jadro bude náchylnejšie na výmenu mapovaných stránok. Nízka hodnota swappiness znamená opak: jadro bude vymieňať stránky z pamäte menej. Inými slovami, čím vyššia je hodnota vm.swappiness, tým viac bude systém využívať swap.

Rozsiahle používanie swapovania je nežiaduce, pretože veľké bloky údajov sa načítavajú a ukladajú do pamäte RAM. Mnoho ľudí tvrdí, že hodnota swapiness by mala byť vysoká, ale podľa mojich skúseností jej nastavenie na „0“ vedie k lepšiemu výkonu.

Viac si môžete prečítať tu - lwn.net/Articles/100978

Ale opäť, tieto nastavenia by sa mali používať opatrne a až po otestovaní konkrétnej aplikácie. Pre vysoko zaťažené streamingové aplikácie by mal byť tento parameter nastavený na „0“. Po zmene na „0“ sa odozva systému zlepší.

vm.vfs_cache_pressure

Toto nastavenie riadi pamäť spotrebovanú jadrom na ukladanie objektov adresára a inódov do vyrovnávacej pamäte (dentry a inode).

S predvolenou hodnotou 100 sa jadro pokúsi uvoľniť medzipamäte dentry a inode spravodlivým spôsobom ako vyrovnávacia pamäť stránok a swapcache. Zníženie vfs_cache_pressure spôsobí, že jadro zachová dentry a inode cache. Keď je hodnota "0", jadro nikdy nevyprázdni dentry a inode cache kvôli tlaku pamäte a to môže ľahko viesť k chybe nedostatku pamäte. Zvýšenie vfs_cache_pressure nad 100 spôsobí, že jadro uprednostní výstupy dentry a inode.

Pri používaní GlusterFS môže veľa používateľov s veľkými množstvami údajov a mnohými malými súbormi ľahko používať značné množstvo pamäte RAM na serveri vďaka vyrovnávacej pamäti inode/dentry, čo môže viesť k slabému výkonu, pretože jadro musí spracovávať dátové štruktúry v systéme. s 40 GB pamäte. Nastavenie tohto parametra na hodnotu vyššiu ako 100 pomohlo mnohým používateľom dosiahnuť spravodlivejšie ukladanie do vyrovnávacej pamäte a lepšiu odozvu jadra.

vm.dirty_background_ratio a vm.dirty_ratio

Prvý parameter (vm.dirty_background_ratio) určuje percento pamäte so špinavými stránkami, po dosiahnutí ktorého je potrebné spustiť preplachovanie špinavých stránok na disk na pozadí. Kým sa nedosiahne toto percento, stránky sa nevyprázdnia na disk. A keď sa reštart spustí, beží na pozadí bez prerušenia spustených procesov.

Druhý parameter (vm.dirty_ratio) určuje percento pamäte, ktorú môžu zabrať špinavé stránky pred spustením vynúteného flash. Po dosiahnutí tohto prahu sa všetky procesy stanú synchrónnymi (zablokovanými) a nebudú môcť pokračovať, kým sa požadovaná I/O operácia skutočne nedokončí a údaje nebudú na disku. Pri vysokom zaťažení I/O to spôsobuje problém, pretože neexistuje žiadne ukladanie údajov do vyrovnávacej pamäte a všetky procesy vykonávajúce I/O sú zablokované a čakajú na I/O. To má za následok veľké množstvo visiacich procesov, vysoké zaťaženie, nestabilitu systému a slabý výkon.

Zníženie hodnôt týchto parametrov spôsobí, že dáta budú na disk vyprázdnené častejšie a nebudú uložené v RAM. To môže pomôcť systémom náročným na pamäť, kde je normálne vyprázdniť 45-90 GB vyrovnávacej pamäte stránok na disk, čo má za následok obrovskú latenciu front-end aplikácií, čím sa znižuje celková odozva a interaktivita.

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

Vyrovnávacia pamäť stránok je vyrovnávacia pamäť, ktorá ukladá údaje zo súborov a spustiteľných programov, to znamená, že ide o stránky so skutočným obsahom súborov alebo blokových zariadení. Táto vyrovnávacia pamäť sa používa na zníženie počtu čítaní disku. Hodnota „1“ znamená, že vyrovnávacia pamäť využíva 1 % pamäte RAM a z disku sa bude čítať viac ako z pamäte RAM. Toto nastavenie nie je potrebné meniť, ale ak ste paranoidní z ovládania vyrovnávacej pamäte stránok, môžete ho použiť.

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

Plánovač I/O je komponent linuxového jadra, ktorý spracováva fronty na čítanie a zápis. Teoreticky je lepšie použiť "noop" pre smart RAID radič, pretože Linux nevie nič o fyzickej geometrii disku, takže je efektívnejšie nechať radič, ktorý dobre pozná geometriu disku, aby spracoval požiadavku ako čo najrýchlejšie. Ale zdá sa, že „deadline“ zlepšuje výkon. Viac informácií o plánovačoch nájdete v dokumentácii zdrojového kódu jadra Linuxu: linux/Documentation/block/*osched.txt. A tiež som pozoroval zvýšenie priepustnosti čítania počas zmiešaných operácií (veľa zápisov).

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

Počet I/O požiadaviek vo vyrovnávacej pamäti pred ich odoslaním do plánovača. Veľkosť interného frontu niektorých ovládačov (queue_depth) je väčšia ako nr_requests plánovača I/O, takže plánovač I/O má malú šancu správne uprednostniť a zlúčiť požiadavky. Pre termínové a CFQ plánovače je lepšie, keď je nr_requests 2-krát väčší ako interný front ovládača. Zlúčenie a zmena poradia dotazov pomáha plánovaču lepšie reagovať pri veľkom zaťažení.

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

Parameter klastra stránok riadi počet stránok, ktoré sa naraz zapíšu do swapu. Vo vyššie uvedenom príklade je hodnota nastavená na „16“, aby zodpovedala veľkosti pruhu RAID 64 kB. Toto nedáva zmysel, keď swappiness = 0, ale ak nastavíte swappiness na 10 alebo 20, potom použitie tejto hodnoty vám pomôže, keď je veľkosť pruhu RAID 64 KB.

blockdev --setra 4096 /dev/<devname> (-sdb, hdc alebo dev_mapper)

Predvolené nastavenia blokového zariadenia pre mnohé radiče RAID často vedú k hroznému výkonu. Pridaním vyššie uvedenej možnosti nakonfigurujete čítanie dopredu pre sektory 4096*512 bajtov. Prinajmenšom pri streamovacích operáciách sa rýchlosť zvyšuje naplnením diskovej vyrovnávacej pamäte na čipe prostredníctvom čítania dopredu počas obdobia, ktoré jadro používa na prípravu I/O. Vyrovnávacia pamäť môže obsahovať údaje, ktoré sa budú vyžadovať pri ďalšom čítaní. Príliš veľa čítania dopredu môže zabiť náhodné I/O pre veľké súbory, ak spotrebuje potenciálne užitočný čas na disku alebo načíta údaje mimo vyrovnávacej pamäte.

Nižšie je uvedených niekoľko ďalších odporúčaní na úrovni súborového systému. Ale zatiaľ neboli testované. Uistite sa, že váš súborový systém pozná veľkosť pruhu a počet diskov v poli. Napríklad, že ide o pole raid5 s veľkosťou pruhu 64 kB zo šiestich diskov (v skutočnosti piatich, pretože jeden disk sa používa na paritu). Tieto odporúčania sú založené na teoretických predpokladoch a zozbierané z rôznych blogov/článkov expertov na RAID.

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

Pri väčších súboroch môžete zvážiť zvýšenie vyššie uvedených veľkostí pruhov.

UPOZORNENIE Všetko popísané vyššie je pre niektoré typy aplikácií mimoriadne subjektívne. Tento článok nezaručuje žiadne vylepšenia bez predchádzajúceho otestovania príslušných aplikácií používateľom. Mal by sa používať iba vtedy, ak je potrebné zlepšiť celkovú odozvu systému alebo ak rieši aktuálne problémy.

Dodatočné materiály:

Nastavenie linuxového jadra pre GlusterFS

Čítaj viac

Zdroj: hab.com

Pridať komentár