Setarea swappiness și memoria cache în Linux

Comportamentul de schimbare Ubuntu în ceea ce privește utilizarea de RAM și paginare (secțiunea swap). Există un vm.swappiness parametru. care implicit la 60, și monitorizează procentul de memorie liberă, în care paginile active se va reseta la o partiție de swap. Cu alte cuvinte, la 100-60 = 40% din memorie, Ubuntu începe deja folosind secțiunea de swap. Atunci când o cantitate mare de memorie RAM în calculator, este mai bine pentru a schimba parametrul vm.swappiness 10 și, prin urmare, nu utilizați comanda Ubuntu swap de memorie RAM ocupat până când ajunge la 100-10 = 90%. Setați valoarea de 10 în loc de 60. În consola, tastați următoarea comandă:

Pentru a salva setările după repornirea face la fișierul /etc/sysctl.conf linia următoare:

Acest lucru s-ar aplica imediat setarea:

În plus, se poate spune despre mai mulți alți parametri.
Valoarea stocată pseudo vfs_cache_pressure - nivelul de memorie alocată pentru cache. Valoarea implicită este 100. Creșterea această setare determină kernel-ul să descarce în mod activ pagina de memorie neutilizate din cache, și anume cantitatea de memorie alocată pentru cache-ul va crește mai lent, care, la rândul său, va reduce probabilitatea ca va implica o partiție de swap. Cu o scădere a acestui parametru de bază, dimpotrivă, va păstra mai mult timp în memoria cache a paginii, inclusiv în swap'e. Aceasta are sens pentru o cantitate mică de memorie RAM, de exemplu, dacă avem 512 MB de memorie, vfs_cache_pressure parametru poate fi setat la 50. Acest lucru va reduce numărul de operații de disc într-o partiție de swap, astfel, eliminarea paginilor neutilizate vor apărea mai puțin frecvent. O reducere suplimentară a acestui parametru poate duce la memorie scăzută.
Dacă doriți să accelereze sistemul și aveți o mulțime de RAM (2 GB sau mai mult), apoi modificați valoarea sistemului, astfel: swappiness = 10. vfs_cache_pressure = 1000 (implicit este de 100). completați fișierul /etc/sysctl.conf următoarea linie:

Caching pentru Linux

Atunci când datele sunt scrise pe disc (orice program), Linux cache aceste informații în memorie, numită Pagina Cache (pagina cache). Pentru informații despre zona de memorie pot fi vizualizate folosind comanda gratuit, vmstat sau de sus. Pentru informații complete despre această zonă de memorie poate fi găsită în fișierul / proc / meminfo. Mai jos este un exemplu de fișier de pe server cu 4 GB RAM:

MemTotal: 3950112 kB
MemFree: 622 560 kB
Tampoanele: 78048 kB
Stocate: 2901484 kB
SwapCached: 0 kB
Active: 3108012 kB
Inactive: 55296 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 3950112 kB
LowFree: 622 560 kB
SwapTotal: 4198272 kB
SwapFree: 4198244 kB
Murdare: 416 kB
Writeback: 0 kB
Mapate: 999 852 kB
Slab: 57104 kB
Committed_AS: 3340368 kB
PageTables: 6672 kB
VmallocTotal: 536870911 kB
VmallocUsed: 35300 kB
VmallocChunk: 536835611 kB
HugePages_Total: 0
HugePages_Free: 0
Hugepagesize: 2048 kB

Dimensiunea paginii Cache este afișată în parametrul „Cached“, în acest exemplu este de 2,9 GB. Când scrieți pagini în memorie „murdare“ crește dimensiunea parametrului. Când începe înregistrarea pe disc va crește parametrul „writeback“, atâta timp cât înregistrarea este terminat. Este destul de dificil pentru a vedea opțiunea „writeback“ de mare, pe măsură ce crește valoarea acesteia doar în timpul de răspuns în cazul operațiilor de intrare / ieșire (I / O) sunt în coada de așteptare, dar nu a fost încă scrise pe disc.
Linux scrie de obicei, datele din memoria cache pe disc folosind pdflush proces. În orice punct al sistemului se execută de la 2 la 8 fluxuri pdflush. Fișierul / proc / sys / vm / nr_pdflush_threads puteți vedea cât de mult este în prezent fire active. De fiecare dată când toate fluxurile existente pdflush ocupat timp de cel puțin 1 secundă. fir nou încearcă să scrie date în dispozitivele coadă libere, astfel încât pentru fiecare dispozitiv activ 1 a fost în scădere fluxul de date din cache. De fiecare dată după un interval de secunde, fără nici o activitate din fluxul pdflush 1 retrasă. În Linux, puteți regla numărul minim și maxim pdflush fluxuri.

Setarea pdflush
Fiecare flux pdflush este controlat de mai mulți parametri în / proc / sys / vm:

  • / Proc / sys / vm / dirty_writeback_centisecs (implicit 500) în sutimi de secundă. Acest parametru indică cât de des pdflush reia funcționarea pentru scrierea datelor pe disc. În mod implicit, fluxul se reia 2 la fiecare 5 secunde.
    Poate un comportament nedocumentat care zadarniceste incercarile de a reduce dirty_writeback_centisecs pentru mai agresiv proces pdflush cache. De exemplu, în versiunile anterioare ale kernel-ului Linux în codul de fișier 2.6 mm / pagina-writeback.c include logica, care descrie „în timpul înregistrării pe disc durează mai mult decât dirty_writeback_centisecs opțiune, atunci aveți nevoie pentru a pune un interval de 1 secundă.“ Această logică este descrisă numai în codul de nucleu, iar funcționarea acestuia depinde de versiunea de kernel Linux. Din moment ce nu este foarte bun, asa ca va fi protejat de reducerea acestui parametru.
  • code> / proc / sys / vm / dirty_expire_centiseconds (implicit 3000): în sutimi de secundă. Acest parametru specifică cât timp datele pot fi stocate în memoria cache, și apoi să fie scrise pe disc. Valoarea implicită pentru o foarte lungă de 30 de secunde. Acest lucru înseamnă că, în timpul funcționării normale, până când cache-ul nu este suficient de date este scris pentru a apela un alt pdflush metodă, Linux nu va scrie date pe disc stocate în memoria cache de cel puțin 30 de secunde.
  • / Proc / sys / vm / dirty_background_ratio (implicit 10): Procentul maxim de RAM, care poate fi umplut pagina de memorie cache pentru a scrie date pe disc. Unele versiuni ale kernel-ului Linux se poate instala această opțiune în 5%.
    În cele mai multe documente, acest parametru este descris ca un procent din memoria totală, dar în conformitate cu codurile sursă ale kernel-ului Linux nu este. Privind la meminfo, dirty_background_ratio valorile parametrilor calculate de la MemFree + Cached - cartografiate. Prin urmare, pentru sistemul nostru demonstrativ este de 10%, un pic mai puțin de 250MB, dar 400MB.

Când pdflush începe înregistrarea?
În configurația implicită, datele înregistrate pe disc sunt stocate în memorie până când:

  1. acestea sunt mai mult de 30 de secunde în memorie;
  2. pagini stocate în memoria cache ocupă mai mult de 10% din memoria de lucru.

În cazul în care operațiunile de server de scriere apar frecvent, atunci se ajunge la o opțiune dirty_background_ratio. și puteți vedea că toate scrierea pe disc este numai prin această opțiune fără a aștepta dirty_expire_centiseconds parametru de expirare.

Procesul de pagini de scris
Parametru / proc / sys / vm / dirty_ratio (implicit 40) - procentajul maxim al memoriei totale care pot fi alocate în cache-ul paginii înainte de pdflush va scrie date pe disc.

Notă: În timpul înregistrării pe disc, toate procesele sunt blocate pe înregistrare, nu doar cel care a umplut tampon de a scrie. Acest lucru poate provoca o blocare a proceselor toate operatiile I / O în sistem.

Recomandări pentru optimizarea Linux pentru aplicații care necesită intrări frecvente
În mod normal, atunci când încercați să crească performanța subsistemului disc cu care se confruntă cu problema că tampoanele Linux prea multe informații dintr-o dată. Acest lucru este valabil mai ales pentru aplicații care necesită sincronizarea sistemului de fișiere folosind Fsync apeluri. În cazul în care în timpul unei astfel de apel în multe date cache, sistemul poate deveni „nu răspunde“ până la sfârșitul acestui apel.
O altă problemă comună apare deoarece prea mulți doresc să înregistreze înainte de a începe înregistrarea de pe discul fizic I / O operațiuni apar mai frecvent decât în ​​timpul funcționării normale.

  • dirty_background_ratio. Principalul instrument de configurare. De obicei, reduce acest parametru. În cazul în care obiectivul dvs. este de a reduce cantitatea de date stocate în memoria cache, astfel încât datele vor fi scrise pe disc, treptat, mai degrabă decât dintr-o dată, scăderea acestui parametru este cel mai eficient mod. Valoarea implicită este acceptabilă pentru majoritatea sistemelor cu o mulțime de RAM și unități de disc lent.
  • dirty_ratio. Al doilea cel mai important element care urmează să fie ajustate. Reducând în același timp în mare măsură parametrii de aplicare care trebuie să scrie pe disc va fi blocat toate împreună.
  • dirty_expire_centisecs. Încercați să reducă acest parametru, dar nu prea mult. Acesta vă permite să reducă timpul pentru a găsi pagini în cache-ul să scrie pe disc, dar pe de altă parte, se va reduce în mod semnificativ viteza medie de scriere a discului, care se manifestă în special în sistemul de antrenare lent.

Ca rezultat, obținem
În fișierul /etc/sysctl.conf, prin:

După sincronizarea datelor în cache și disc, goliți memoria cache și de a salva setările:

Pentru a reduce numărul de finalizare a înregistrării pe disc trebuie ajustată:

implicit 500.

A se vedea, de asemenea: