Prijevod Älanka pripremljen je uoÄi poÄetka kursa .

Povremeno, tu i tamo, postavljaju se pitanja o Glusterovim preporukama u vezi podeŔavanja kernela i da li postoji potreba za tim.
Ova potreba se rijetko javlja. Pod veÄinom optereÄenja, jezgro radi vrlo dobro. MeÄutim, postoji i nedostatak. Historijski gledano, jezgro Linux dragovoljno troÅ”i mnogo memorije ako mu se pruži prilika, ukljuÄujuÄi i keÅ”iranje kao glavni naÄin poboljÅ”anja performansi.
U veÄini sluÄajeva ovo funkcionira dobro, ali pod velikim optereÄenjem može dovesti do problema.
Imamo dosta iskustva sa sistemima koji intenzivno koriste memoriju kao Å”to su CAD, EDA i sliÄni, koji su poÄeli da usporavaju pod velikim optereÄenjem. A ponekad smo nailazili na probleme u Glusteru. Nakon pažljivog praÄenja upotrebe memorije i latencije diska tokom mnogo dana, dobili smo njihovo preoptereÄenje, ogromno Äekanje, greÅ”ke kernela (kernel ups), zamrzavanje itd.
Ovaj Älanak je rezultat mnogih eksperimenata podeÅ”avanja izvedenih u razliÄitim situacijama. ZahvaljujuÄi ovim parametrima, ne samo da je poboljÅ”an ukupni odziv, veÄ se i klaster znaÄajno stabilizovao.
Kada je u pitanju podeŔavanje memorije, prvo na Ŕta treba obratiti pažnju je podsistem virtuelne memorije (VM, virtuelna memorija), koji ima veliki broj opcija koje vas mogu zbuniti.
vm.swappiness
Parametar vm.swappiness odreÄuje koliko kernel koristi swap (swap, paging) u odnosu na RAM. TakoÄer je definirana u izvornom kodu kao "sklonost kraÄi mapirane memorije". Visoka swappiness znaÄi da Äe kernel biti skloniji zamjeni mapiranih stranica. Niska vrijednost zamjene znaÄi suprotno: kernel Äe manje stranica iz memorije. Drugim rijeÄima, Å”to je veÄa vrijednost vm.swappiness, to Äe sistem viÅ”e koristiti swap.
Velika upotreba zamjene je nepoželjna, jer se ogromni blokovi podataka uÄitavaju i istovaruju u RAM. Mnogi ljudi tvrde da bi vrijednost zamjene trebala biti velika, ali prema mom iskustvu, postavljanje na "0" dovodi do boljih performansi.
ViÅ”e možete proÄitati ovdje -
Ali, opet, ove postavke treba pažljivo primijeniti i tek nakon testiranja odreÄene aplikacije. Za visoko optereÄene streaming aplikacije, ovaj parametar treba postaviti na "0". Kada se promijeni na "0", odziv sistema se poboljÅ”ava.
vm.vfs_cache_pressure
Ova postavka kontrolira memoriju koju kernel troŔi za keŔiranje direktorija i inode objekata (dentry i inode).
Sa podrazumevanom vrednoÅ”Äu od 100, kernel Äe pokuÅ”ati da oslobodi keÅ” memorije dentry i inode na "fer" osnovi za keÅ” memorije stranice i swapcache. Smanjenje vfs_cache_pressure uzrokuje da kernel zadržava dentry i inode keÅ”ove. Kada je vrijednost "0", kernel nikada neÄe isprazniti dentry i inode keÅ” memoriju zbog pritiska memorije, a to može lako dovesti do greÅ”ke u nedostatku memorije. PoveÄanje vfs_cache_pressure iznad 100 uzrokuje da kernel daje prioritet dentry i inode flushing.
Kada koriste GlusterFS, mnogi korisnici sa velikim koliÄinama podataka i mnogo malih datoteka mogu lako koristiti znaÄajnu koliÄinu RAM-a na serveru zbog inode/dentry keÅ”iranja, Å”to može dovesti do degradacije performansi jer kernel mora obraditi strukture podataka na sistemu sa 40 GB memorije. Postavljanje ove vrijednosti iznad 100 pomoglo je mnogim korisnicima da postignu pravednije keÅ”iranje i poboljÅ”aju odziv jezgre.
vm.dirty_background_ratio i vm.dirty_ratio
Prvi parametar (vm.dirty_background_ratio) odreÄuje postotak memorije sa prljavim stranicama, nakon dostizanja kojeg je potrebno zapoÄeti ispiranje prljavih stranica u pozadini na disk. Dok se ovaj procenat ne dostigne, nijedna stranica se ne ispuÅ”ta na disk. A kada resetovanje poÄne, radi u pozadini bez prekidanja pokrenutih procesa.
Drugi parametar (vm.dirty_ratio) definira postotak memorije koju mogu zauzeti prljave stranice prije poÄetka prisilnog blica. Jednom kada se dostigne ovaj prag, svi procesi postaju sinhroni (blokirani) i nije im dozvoljeno da nastave sve dok se I/O koji su tražili stvarno ne dovrÅ”i i podaci se ne nalaze na disku. Sa teÅ”kim I/O, ovo uzrokuje problem jer nema keÅ”iranja podataka i svi procesi koji rade I/O su blokirani ÄekajuÄi I/O. To dovodi do velikog broja zakaÄenih procesa, velikog optereÄenja, nestabilnosti sistema i loÅ”ih performansi.
Smanjenje ovih postavki uzrokuje da se podaci ÄeÅ”Äe ispuÅ”taju na disk i ne pohranjuju u RAM. Ovo može pomoÄi sistemima koji optereÄuju memoriju gdje je normalno izbaciti keÅ” memorije stranica od 45-90 GB na disk, Å”to rezultira velikim kaÅ”njenjem za front-end aplikacije, smanjujuÄi ukupni odziv i interaktivnost.
"1" > /proc/sys/vm/pagecache
Predmemorija stranica je keÅ” memorija koja pohranjuje podatke datoteka i izvrÅ”nih programa, odnosno to su stranice sa stvarnim sadržajem datoteka ili blok ureÄaja. Ova keÅ” memorija se koristi za smanjenje broja Äitanja diska. Vrijednost "1" znaÄi da se 1% RAM-a koristi za keÅ” memoriju i da Äe biti viÅ”e Äitanja s diska nego iz RAM-a. Nije potrebno mijenjati ovu postavku, ali ako ste paranoiÄni u pogledu kontrole keÅ”a stranice, možete je koristiti.
"rok" > /sys/block/sdc/queue/scheduler
RasporeÄivaÄ ulazno/izlaznih operacija je komponenta kernela. Linux, koji obraÄuje redove Äitanja i pisanja. Teoretski, za pametni RAID kontroler, bolje je koristiti "noop" jer Linux Planer ne zna niÅ”ta o fiziÄkoj geometriji diska, tako da je efikasnije pustiti kontroleru, koji dobro poznaje geometriju diska, da obradi zahtjev Å”to je brže moguÄe. MeÄutim, Äini se da "rok" poboljÅ”ava performanse. ViÅ”e informacija o planerima možete pronaÄi u dokumentaciji izvornog koda kernela. Linux: linux/Documentation/block/*osched.txt. TakoÄe sam video poveÄanje propusnosti Äitanja tokom meÅ”ovitih operacija (mnogo pisanja).
"256" > /sys/block/sdc/queue/nr_requests
Broj I/O zahtjeva u meÄuspremniku prije nego Å”to se proslijede planeru. VeliÄina internog reda nekih kontrolera (queue_depth) je veÄa od nr_requests I/O planera, tako da I/O planer ima male Å”anse da pravilno odredi prioritete i spoji zahtjeve. Za planere rokova i CFQ, bolje je kada je nr_requests 2 puta veÄi od internog reda kontrolora. Spajanje i preureÄivanje zahtjeva pomaže planeru da bolje reagira pod velikim optereÄenjem.
echo "16" > /proc/sys/vm/page-cluster
Parametar klaster stranica kontrolira broj stranica koje su upisane u zamjenu u jednom trenutku. U gornjem primjeru, vrijednost je postavljena na "16" prema veliÄini RAID trake od 64 KB. Nema smisla sa swappiness = 0, ali ako postavite swappiness na 10 ili 20 onda Äe vam koriÅ”tenje ove vrijednosti pomoÄi kada je veliÄina RAID trake 64K.
blockdev --setra 4096 /dev/<devname> (-sdb, hdc ili dev_mapper)
Zadane postavke blok ureÄaja za mnoge RAID kontrolere Äesto rezultiraju užasnim performansama. Dodavanjem gornje opcije postavlja se Äitanje unaprijed za sektore od 4096 * 512 bajta. U najmanju ruku, za operacije striminga, brzina se poveÄava punjenjem keÅ”a diska na Äipu sa Äitanjem unaprijed tokom perioda koji kernel koristi za pripremu I/O. KeÅ” memorija može sadržavati podatke koji Äe biti zatraženi pri sljedeÄem Äitanju. PreviÅ”e preddohvaÄanja može ubiti nasumiÄni I/O za velike datoteke ako troÅ”i potencijalno korisno vrijeme na disku ili uÄitava podatke izvan keÅ”a.
Ispod je joÅ” nekoliko preporuka na nivou sistema datoteka. Ali joÅ” nisu testirani. Uvjerite se da vaÅ” sistem datoteka zna veliÄinu trake i broj diskova u nizu. Na primjer, da je ovo 5K stripe raid64 niz od Å”est diskova (u stvari pet, jer se jedan disk koristi za paritet). Ove preporuke su zasnovane na teorijskim pretpostavkama i sastavljene od razliÄitih blogova/Älanaka od strane struÄnjaka za 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))Za velike datoteke razmislite o poveÄanju veliÄine traka navedenih iznad.
PAŽNJA! Sve gore opisano je vrlo subjektivno za neke vrste aplikacija. Ovaj Älanak ne jamÄi nikakva poboljÅ”anja bez prethodnog korisniÄkog testiranja povezanih aplikacija. Treba ga koristiti samo ako je potrebno poboljÅ”ati ukupnu odzivnost sistema, ili ako rjeÅ”ava trenutne probleme.
Dodatni materijali:
Äitaj viÅ”e
izvor: www.habr.com
