Configurazione di u kernel Linux per GlusterFS

A traduzzione di l'articulu hè stata preparata à a vigilia di l'iniziu di u corsu "Amministratore Linux. Prufessiunale ".

Configurazione di u kernel Linux per GlusterFS

Di tantu in tantu, quì è quì si ponenu dumande nantu à i cunsiglii di Gluster in quantu à a persunalizazione di u kernel è s'ellu hè necessariu.

Questa necessità raramente si sviluppa. U core funziona assai bè sottu a maiò parte di i carichi di travagliu. Ancu s'ellu ci hè un inconveniente. Stòricamente, u kernel Linux cunsuma assai memoria s'ellu hè datu l'uppurtunità, cumpresu per caching cum'è un mezzu primariu di migliurà u rendiment.

In a maiò parte di i casi, questu funziona bè, ma sottu una carica pesante pò causà prublemi.

Avemu una larga sperienza di travaglià cù sistemi chì cunsuma assai memoria, cum'è CAD, EDA è simili, chì cuminciaru à rallentà sottu una carica alta. È qualchì volta avemu scontru prublemi in Gluster. Dopu avè monitoratu currettamente a memoria utilizata è u tempu d'attesa di u discu per più di un ghjornu, avemu avutu un overload di discu, enormi iowait, errori di kernel (kernel oops), freezes, etc.

Questu articulu hè u risultatu di parechji esperimenti di sintonizazione di parametri realizati in diverse situazioni. Grazie à questi paràmetri, micca solu a rispunsibilità in generale hà migliuratu, ma ancu u funziunamentu di u cluster hè statu stabilizatu significativamente.

Quandu si tratta di cunfigurà a memoria, u primu postu per vede hè u subsistema di memoria virtuale (VM), chì hà un gran numaru d'opzioni chì ponu cunfundà.

vm.scambiu

Parameter vm.swappiness determina quantu u kernel usa swap paragunatu à a RAM. Hè ancu definitu in u codice fonte cum'è "tendenza à arrubà a memoria mappata". Un altu valore di swappiness significa chì u kernel serà più propensu à scambià e pagine mappate. Un valore di swappiness bassu significa u cuntrariu: u kernel scambià e pagine da a memoria menu. In autri paroli, u più altu u valore vm.swappiness, u più u sistema aduprà swap.

L'usu estensivu di scambià ùn hè micca desideratu, postu chì enormi blocchi di dati sò caricati è scaricati in RAM. Parechje persone sustene chì u valore di swapiness deve esse altu, ma in a mo spirimintà, mette in "0" risultati in un rendimentu megliu.

Pudete leghje più quì - lwn.net/Articles/100978

Ma dinò, sti paràmetri deve esse usatu cun prudenza è solu dopu avè pruvatu l'applicazione specifica. Per l'applicazioni streaming altamente caricate, stu paràmetru deve esse stabilitu à "0". Quandu cambiatu à "0", a risposta di u sistema migliora.

vm.vfs_cache_pressure

Questa paràmetra cuntrolla a memoria cunsumata da u kernel per cache l'uggetti di u repertoriu è inode (dentry è inode).

Cù u valore predeterminatu di 100, u kernel hà da pruvà à liberà i cache di dentry è inode in una manera ghjustu à u pagecache è swapcache. A diminuzione di vfs_cache_pressure provoca u kernel per priservà i cache di dentry è inode. Quandu u valore hè "0", u kernel ùn lavarà mai a cache di dentry è inode per via di a pressione di memoria, è questu pò facilmente guidà à un errore fora di memoria. L'aumentu di vfs_cache_pressure sopra 100 face chì u kernel dà priorità à e pagine di dentry è inode.

Quandu si usanu GlusterFS, assai utilizatori cù grandi quantità di dati è parechji schedarii chjuchi ponu facilmente aduprà una quantità significativa di RAM in u servitore per via di caching inode / dentry, chì pò purtà à un rendimentu scarsu postu chì u kernel hà da trattà e strutture di dati in un sistema. cù 40 GB di memoria. Stabbilimentu di stu paràmetru à più di 100 hà aiutatu parechji utilizatori à ottene una cache più ghjustificata è una risposta di kernel mejorata.

vm.dirty_background_ratio è vm.dirty_ratio

primu paràmetru (vm.dirty_background_ratio) determina u percentualità di memoria cù e pagine brutte, quandu ghjunghje à quale hè necessariu di principià u flussu di fondo di e pagine brutte à u discu. Finu à questu percentualità hè righjuntu, e pagine ùn sò micca lavate à u discu. È quandu u resettore principia, corre in fondo senza interrompe i prucessi in esecuzione.

Second paràmetru (vm.dirty_ratio) determina u percentualità di memoria chì pò esse occupata da e pagine brutte prima di inizià un flash forzatu. Una volta stu limitu hè righjuntu, tutti i prucessi diventanu sincroni (bloccati) è ùn sò micca permessi di cuntinuà à cuntinuà finu à chì l'operazione I / O chì anu dumandatu hè veramente cumpleta è e dati sò in discu. Cù una alta carica di I / O, questu causa un prublema perchè ùn ci hè micca cache di dati è tutti i prucessi chì facenu I / O sò bluccati aspittendu I / O. Stu risultatu in un gran numaru di prucessi appiccicatu, alta carica, inestabilità di u sistema è un rendimentu poviru.

A diminuzione di i valori di questi paràmetri face chì e dati sò lavati à u discu più spessu è micca almacenati in RAM. Questu pò aiutà à i sistemi pesanti di memoria induve hè normale sguassate cache di pagina 45-90GB à u discu, risultatu in una grande latenza per l'applicazioni front-end, riducendu a risposta generale è l'interattività.

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

A cache di a pagina hè una cache chì guarda dati da i schedarii è i prugrammi eseguibili, vale à dì, queste sò pagine cù u cuntenutu propiu di i schedari o i dispositi di bloccu. Questa cache hè usata per riduce u numeru di letture di discu. Un valore di "1" significa chì a cache usa 1% di RAM è ci saranu più letture da u discu chì da a RAM. Ùn hè micca necessariu di cambià sta paràmetra, ma se site paranoicu per cuntrullà a cache di a pagina, pudete aduprà.

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

U pianificatore I/O hè un cumpunente di u kernel Linux chì gestisce e file di lettura è scrittura. In teoria, hè megliu aduprà "noop" per un controller RAID intelligente, perchè Linux ùn sapi nunda di a geometria fisica di u discu, per quessa, hè più efficaci di lascià u controller, chì cunnosci bè a geometria di u discu, processà a dumanda cum'è prestu pussibule. Ma pare chì "scadenza" migliurà u rendiment. Più infurmazione nantu à i pianificatori ponu esse truvati in a documentazione per u codice fonte di u kernel Linux: linux/Documentation/block/*osched.txt. È aghju osservatu ancu un aumentu di u throughput di lettura durante operazioni miste (assai scritture).

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

U numeru di dumande I/O in u buffer prima di esse mandati à u pianificatore. A dimensione di a fila interna di certi cuntrolli (queue_depth) hè più grande di i nr_requests di u pianificatore I/O, cusì u pianificatore I/O hà pocu probabilità di priurità currettamente è di fusione e dumande. Per i pianificatori di scadenza è CFQ, hè megliu quandu nr_requests hè 2 volte più grande di a fila interna di u controller. A fusione è a riordinazione di e dumande aiuta à u pianificatore à esse più responsive sottu una carica pesante.

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

U paràmetru di page-cluster cuntrola u numeru di pagine chì sò scritte à u swap à un tempu. In l'esempiu sopra, u valore hè stabilitu à "16" per currisponde à a taglia di striscia RAID di 64 KB. Questu ùn hà micca sensu quandu u swappiness = 0, ma se stabilisce u swappiness à 10 o 20, allora l'usu di stu valore vi aiuterà quandu a dimensione di a striscia RAID hè 64 KB.

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

I paràmetri predeterminati di u dispositivu di bloccu per parechji controller RAID spessu risultatu in un rendiment terribili. L'aggiunta di l'opzione sopra cunfigura a lettura in anticipu per i settori di 4096 * 512 byte. Almenu per l'operazioni di streaming, a velocità hè aumentata cumpiendu a cache di discu in chip via lettura in anticipu durante u periodu chì u kernel usa per preparà l'I/O. A cache pò cuntene dati chì saranu dumandati durante a prossima lettura. Troppa lettura in anticipu pò tumbà l'I / O aleatoriu per i fugliali grossi se usa u tempu di discu potenzalmentu utile o carica dati fora di a cache.

Quì sottu sò uni pochi di più cunsiglii à u livellu di u sistema di schedari. Ma ùn sò micca stati ancu pruvati. Assicuratevi chì u vostru sistema di fugliale cunnosce a dimensione di a striscia è u numeru di dischi in u array. Per esempiu, chì questu hè un array raid5 cù una taglia di striscia di 64K di sei dischi (in realtà cinque, perchè un discu hè utilizatu per a parità). Queste raccomandazioni sò basate nantu à supposizioni teoriche è raccolte da diversi blog / articuli da esperti 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))

Per i schedarii più grande, pudete cunsiderà aumentà e dimensioni di striscia sopra.

ATENCION! Tuttu ciò chì descrive sopra hè estremamente subjective per certi tipi di applicazioni. Stu articulu ùn guarantisci alcuna migliione senza prima pruvà l'applicazioni rispettivi da l'utilizatore. Si deve esse usatu solu s'ellu ci hè bisognu di migliurà a risposta generale di u sistema o s'ellu risolve i prublemi attuali.

Materiali supplementari:

Configurazione di u kernel Linux per GlusterFS

Leghjite più

Source: www.habr.com

Add a comment