Nastavitev jedra Linuxa za GlusterFS

Prevod članka je bil pripravljen na predvečer začetka tečaja "Administratorski Linux. poklicno".

Nastavitev jedra Linuxa za GlusterFS

Občasno se tu in tam pojavijo vprašanja o Glusterjevih priporočilih glede prilagajanja jedra in ali je to potrebno.

Ta potreba se pojavi redko. Jedro deluje zelo dobro pri večini delovnih obremenitev. Čeprav obstaja slaba stran. Zgodovinsko gledano jedro Linuxa zlahka porabi veliko pomnilnika, če ima priložnost, vključno za predpomnjenje kot primarni način izboljšanja zmogljivosti.

V večini primerov to deluje odlično, vendar lahko pri veliki obremenitvi povzroči težave.

Imamo bogate izkušnje pri delu s sistemi, ki porabijo veliko pomnilnika, kot so CAD, EDA ipd., ki so se pod velikimi obremenitvami začeli upočasnjevati. In včasih smo v Glustru naleteli na težave. Po natančnem spremljanju porabljenega pomnilnika in čakalne dobe diska, ki traja več kot en dan, smo dobili preobremenitev diska, ogromno iowait, napake jedra (jedro ups), zamrznitve itd.

Ta članek je rezultat številnih poskusov prilagajanja parametrov, izvedenih v različnih situacijah. Zahvaljujoč tem parametrom se ni izboljšala le odzivnost na splošno, temveč se je bistveno stabiliziralo tudi delovanje gruče.

Ko gre za konfiguriranje pomnilnika, je najprej treba pogledati podsistem navideznega pomnilnika (VM), ki ima veliko število možnosti, ki vas lahko zmedejo.

vm.swappiness

Parameter vm.swappiness določa, koliko jedro uporablja zamenjavo v primerjavi z RAM-om. V izvorni kodi je opredeljen tudi kot "nagnjenost k kraji preslikanega pomnilnika." Visoka vrednost swappiness pomeni, da bo jedro bolj nagnjeno k zamenjavi preslikanih strani. Nizka vrednost swappiness pomeni nasprotno: jedro bo manj zamenjalo strani iz pomnilnika. Z drugimi besedami, višja je vrednost vm.swappiness, bolj bo sistem uporabljal zamenjavo.

Ekstenzivna uporaba zamenjave je nezaželena, saj se ogromni bloki podatkov naložijo in razložijo v RAM. Veliko ljudi trdi, da bi morala biti vrednost swapiness visoka, vendar po mojih izkušnjah nastavitev na »0« povzroči boljšo zmogljivost.

Več si lahko preberete tukaj - lwn.net/Articles/100978

Toda spet je treba te nastavitve uporabljati previdno in šele po testiranju določene aplikacije. Za zelo obremenjene pretočne aplikacije mora biti ta parameter nastavljen na "0". Ko se spremeni na "0", se izboljša odzivnost sistema.

vm.vfs_cache_pressure

Ta nastavitev nadzoruje pomnilnik, ki ga porabi jedro za predpomnjenje objektov imenika in inode (dentry in inode).

S privzeto vrednostjo 100 bo jedro poskušalo sprostiti predpomnilnike dentry in inode na pravičen način za pagecache in swapcache. Zmanjšanje vfs_cache_pressure povzroči, da jedro ohrani predpomnilnike dentry in inode. Ko je vrednost "0", jedro ne bo nikoli izpraznilo predpomnilnika dentry in inode zaradi pritiska na pomnilnik, kar lahko zlahka povzroči napako zmanjkanja pomnilnika. Povečanje vrednosti vfs_cache_pressure nad 100 povzroči, da da jedro prednost dentry in inode pageouts.

Pri uporabi GlusterFS lahko številni uporabniki z velikimi količinami podatkov in številnimi majhnimi datotekami zlahka uporabijo precejšnjo količino RAM-a na strežniku zaradi predpomnjenja inode/dentry, kar lahko povzroči slabo delovanje, saj mora jedro obravnavati podatkovne strukture v sistemu s 40 GB pomnilnika. Nastavitev tega parametra na več kot 100 je mnogim uporabnikom pomagala doseči pravičnejše predpomnjenje in izboljšano odzivnost jedra.

vm.dirty_background_ratio in vm.dirty_ratio

Prvi parameter (vm.dirty_background_ratio) določa odstotek pomnilnika z umazanimi stranmi, ko je dosežen, je potrebno začeti splakovanje umazanih strani v ozadju na disk. Dokler ta odstotek ni dosežen, se strani ne splaknejo na disk. In ko se ponastavitev začne, teče v ozadju brez prekinitve tekočih procesov.

Drugi parameter (vm.dirty_ratio) določa odstotek pomnilnika, ki ga lahko zasedejo umazane strani, preden se začne prisilno utripanje. Ko je ta prag dosežen, postanejo vsi procesi sinhroni (blokirani) in ne smejo nadaljevati izvajanja, dokler V/I operacija, ki so jo zahtevali, dejansko ni dokončana in so podatki na disku. Pri veliki V/I obremenitvi to povzroči težavo, ker ni predpomnjenja podatkov in vsi procesi, ki izvajajo V/I, so blokirani in čakajo na V/I. Posledica tega je veliko število zaustavljenih procesov, visoka obremenitev, nestabilnost sistema in slabo delovanje.

Zmanjšanje vrednosti teh parametrov povzroči, da se podatki pogosteje izpirajo na disk in se ne shranijo v RAM. To lahko pomaga pri sistemih, ki imajo veliko pomnilnika, kjer je običajno, da se predpomnilniki strani od 45 do 90 GB izpraznijo na disk, kar povzroči veliko zakasnitev za sprednje aplikacije, kar zmanjša splošno odzivnost in interaktivnost.

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

Predpomnilnik strani je predpomnilnik, ki shranjuje podatke iz datotek in izvedljivih programov, torej so to strani z dejansko vsebino datotek ali blokovnih naprav. Ta predpomnilnik se uporablja za zmanjšanje števila branj diska. Vrednost "1" pomeni, da predpomnilnik uporablja 1 % RAM-a in bo več branj z diska kot iz RAM-a. Te nastavitve ni treba spreminjati, vendar če ste paranoični glede nadzora predpomnilnika strani, jo lahko uporabite.

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

V/I razporejevalnik je komponenta jedra Linuxa, ki obravnava čakalne vrste za branje in pisanje. Teoretično je za pametni krmilnik RAID bolje uporabiti "noop", ker Linux ne ve ničesar o fizični geometriji diska, zato je bolj učinkovito pustiti krmilniku, ki dobro pozna geometrijo diska, da zahtevo obdela kot čim hitreje. Vendar se zdi, da "rok" izboljša učinkovitost. Več informacij o načrtovalcih je na voljo v dokumentaciji za izvorno kodo jedra Linux: linux/Documentation/block/*osched.txt. Opazil sem tudi povečanje prepustnosti branja med mešanimi operacijami (veliko pisanja).

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

Število V/I zahtev v medpomnilniku, preden so poslane razporejevalniku. Notranja velikost čakalne vrste nekaterih krmilnikov (queue_depth) je večja od nr_requests I/O razporejevalnika, zato ima I/O razporejevalnik malo možnosti, da pravilno določi prednost in združi zahteve. Za razporejevalnike rokov in CFQ je bolje, če je nr_requests 2-krat večje od notranje čakalne vrste krmilnika. Združevanje in preurejanje poizvedb pomaga, da je razporejevalnik bolj odziven pod veliko obremenitvijo.

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

Parameter page-cluster nadzira število strani, ki so hkrati zapisane v zamenjavo. V zgornjem primeru je vrednost nastavljena na "16", da se ujema z velikostjo traku RAID 64 KB. To ni smiselno, če je swappiness = 0, če pa nastavite swappiness na 10 ali 20, vam bo uporaba te vrednosti pomagala, ko je velikost traku RAID 64 KB.

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

Privzete nastavitve blokovnih naprav za številne krmilnike RAID pogosto povzročijo grozljivo delovanje. Če dodate zgornjo možnost, konfigurirate vnaprejšnje branje za sektorje velikosti 4096*512 bajtov. Vsaj pri pretočnih operacijah se hitrost poveča s polnjenjem diskovnega predpomnilnika na čipu prek vnaprejšnjega branja v obdobju, ki ga jedro uporablja za pripravo V/I. Predpomnilnik lahko vsebuje podatke, ki bodo zahtevani med naslednjim branjem. Preveč vnaprejšnjega branja lahko prekine naključni V/I za velike datoteke, če porabi potencialno uporaben čas na disku ali naloži podatke zunaj predpomnilnika.

Spodaj je še nekaj priporočil na ravni datotečnega sistema. Niso pa še testirani. Prepričajte se, da vaš datotečni sistem pozna velikost črte in število diskov v polju. Na primer, da je to polje raid5 z velikostjo črte 64 K šestih diskov (pravzaprav petih, ker se en disk uporablja za pariteto). Ta priporočila temeljijo na teoretičnih predpostavkah in so jih strokovnjaki RAID zbrali iz različnih blogov/člankov.

-> 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 večje datoteke lahko razmislite o povečanju zgornjih velikosti črt.

POZOR Vse zgoraj opisano je za nekatere vrste aplikacij izjemno subjektivno. Ta članek ne zagotavlja nobenih izboljšav, ne da bi uporabnik prej preizkusil zadevne aplikacije. Uporabljati ga je treba le, če je treba izboljšati splošno odzivnost sistema ali če rešuje trenutne težave.

Dodatni materiali:

Nastavitev jedra Linuxa za GlusterFS

Preberi več

Vir: www.habr.com

Dodaj komentar