/proc/sys/vm/ - subsistemul de memorie virtuală
- /proc/sys/vm/
- Acest director conține fișiere pentru ajustarea
gestionării memoriei, tampon(buffer) și zona de
prestocare(cache).
- /proc/sys/vm/admin_reserve_kbytes (începând cu Linux
3.10)
- Acest fișier definește cantitatea de memorie liberă
(în Kio) din sistem care ar trebui rezervată pentru
utilizatorii cu capacitatea CAP_SYS_ADMIN.
- Valoarea implicită din acest fișier este minimul de [3% din
paginile libere, 8Mio] exprimat în Kio. Valoarea implicită
este menită să ofere suficient pentru ca superutilizatorul
să se conecteze și să oprească un proces,
dacă este necesar, în modul implicit „guess”
de alocare în plus de memorie („overcommit”,
adică 0 în /proc/sys/vm/overcommit_memory).
- Sistemele care rulează în modul „overcommit
never” (adică 2 în
/proc/sys/vm/overcommit_memory) ar trebui să crească
valoarea din acest fișier pentru a ține seama de dimensiunea
completă a memoriei virtuale a programelor utilizate pentru
recuperare (de exemplu, login(1) ssh(1) și
top(1)) În caz contrar, este posibil ca superutilizatorul
să nu se poată conecta pentru a recupera sistemul. De
exemplu, pe x86-64, o valoare adecvată este 131072 (128Mio
rezervat).
- Modificarea valorii din acest fișier intră în vigoare
ori de câte ori o aplicație solicită memorie.
- /proc/sys/vm/compact_memory (începând cu Linux
2.6.35)
- Atunci când se scrie 1 în acest fișier, toate zonele
sunt compactate astfel încât memoria liberă să
fie disponibilă în blocuri contigue, acolo unde este
posibil. Efectul acestei acțiuni poate fi observat examinând
/proc/buddyinfo.
- Prezenta doar daca nucleul a fost configurat cu opțiunea
CONFIG_COMPACTION activată.
- /proc/sys/vm/drop_caches (începând cu Linux
2.6.16)
- Scrierea în acest fișier determină nucleul să
elimine din memorie cache-urile, intrările de director și
nodurile-i curate, făcând ca memoria respectivă
să devină liberă. Acest lucru poate fi util pentru
testarea gestionării memoriei și pentru efectuarea de teste
de performanță reproductibile pentru sistemul de
fișiere. Deoarece scrierea în acest fișier duce la
pierderea beneficiilor memorării în cache, aceasta poate
degrada performanța generală a sistemului.
- Pentru a elibera memoria cache de pagini, utilizați:
-
echo 1 > /proc/sys/vm/drop_caches
- Pentru a elibera intrările de director și nodurile-i,
utilizați:
-
echo 2 > /proc/sys/vm/drop_caches
- Pentru a elibera memoria cache de pagini, intrările de director
și nodurile-i, utilizați:
-
echo 3 > /proc/sys/vm/drop_caches
- Deoarece scrierea în acest fișier este o operațiune
nedistructivă, iar obiectele modificate (murdare) nu pot fi
eliberate, utilizatorul ar trebui să execute mai
întâi sync(1).
- /proc/sys/vm/sysctl_hugetlb_shm_group (începând cu
Linux 2.6.7)
- Acest fișier inscriptibil conține un ID de grup care are
permisiunea de a aloca memorie utilizând pagini imense. Dacă
un proces are un ID de grup al sistemului de fișiere sau orice ID
de grup suplimentar care corespunde acestui ID de grup, atunci acesta
poate face alocări de pagini imense fără a
deține capacitatea CAP_IPC_LOCK; consultați
memfd_create(2), mmap(2) și shmget(2).
- /proc/sys/vm/legacy_va_layout (începând cu Linux
2.6.9)
- Dacă nu este zero, aceasta dezactivează noua
structură de alocare a memoriei pe 32 de biți; nucleul va
utiliza structura tradițională (2.4) pentru toate
procesele.
- /proc/sys/vm/memory_failure_early_kill (începând cu
Linux 2.6.32)
- Controlează modul de oprire a proceselor atunci când o
eroare de memorie necorectată (de obicei o eroare de 2 biți
într-un modul de memorie) care nu poate fi gestionată de
nucleu este detectată în fundal de hardware. În unele
cazuri (cum ar fi pagina care are încă o copie
valabilă pe disc), nucleul va gestiona defecțiunea în
mod transparent, fără a afecta nicio aplicație. Dar,
dacă nu există nicio altă copie actualizată a
datelor, acesta va opri procesele pentru a preveni propagarea
oricărei corupții a datelor.
- Fișierul are una dintre următoarele valori:
- 1
- Omoară toate procesele care au asociată pagina
coruptă și care nu poate fi reîncărcată
imediat ce este detectată corupția. Rețineți
că acest lucru nu este acceptat pentru câteva tipuri de
pagini, cum ar fi datele alocate intern nucleului sau cache-ul de swap,
dar funcționează pentru majoritatea paginilor de
utilizator.
- 0
- Anulează asocierea paginii corupte cu toate procesele (cu care era
asociată) și omoară un proces numai dacă
acesta încearcă să acceseze pagina.
- Omorârea este efectuată utilizând un semnal
SIGBUS cu si_code definit la BUS_MCEERR_AO. Procesele
pot gestiona acest lucru dacă doresc; consultați
sigaction(2) pentru mai multe detalii.
- Această caracteristică este activă numai pe
arhitecturi/platforme cu gestionare avansată a verificării
mașinii și depinde de capacitățile
hardware.
- Aplicațiile pot schimba individual configurarea
memory_failure_early_kill cu operația prctl(2)
PR_MCE_KILL.
- Prezenta doar daca nucleul a fost configurat cu opțiunea
CONFIG_MEMORY_FAILURE activată.
- /proc/sys/vm/memory_failure_recovery (începând cu
Linux 2.6.32)
- Activează recuperarea în caz de eroare a memoriei (atunci
când este acceptată de platformă).
- 1
- Încearcă recuperarea.
- 0
- Declanșează întotdeauna o panică a nucleului
în cazul unei erori de memorie.
- Prezenta doar daca nucleul a fost configurat cu opțiunea
CONFIG_MEMORY_FAILURE activată.
- /proc/sys/vm/oom_dump_tasks (începând cu Linux
2.6.25)
- Activează producerea unei imagini a sarcinilor la nivelul
întregului sistem (cu excepția firelor nucleului) atunci
când nucleul efectuează o operație
„OOM-killing” (omorâre datorită
supraîncărcării memoriei. Imaginea include
următoarele informații pentru fiecare sarcină (fir,
proces): ID fir, ID utilizator real, ID grup de fire (ID proces),
dimensiunea memoriei virtuale, dimensiunea setului rezident, CPU-ul pe
care este programată sarcina, scorul oom_adj (a se vedea descrierea
/proc/pid/oom_adj) și numele comenzii. Acest lucru
este util pentru a determina de ce a fost invocată funcția
OOM-killer și pentru a identifica sarcina defectuoasă care a
cauzat-o.
- Dacă conține valoarea zero, această informație
este suprimată. Pe sistemele foarte mari cu mii de sarcini, este
posibil să nu fie fezabil să se creeze imaginea cu
informațiile privind starea memoriei pentru fiecare dintre acestea.
Astfel de sisteme nu ar trebui să fie forțate să
suporte o penalizare a performanței în situații OOM
în care informațiile nu sunt dorite.
- Dacă este stabilită la diferit de zero, această
informație este afișată ori de câte ori
OOM-killer omoară efectiv o sarcină care consumă
multă memorie.
- Valoarea implicită este 0.
- /proc/sys/vm/oom_kill_allocating_task (începând cu
Linux 2.6.24)
- Aceasta activează sau dezactivează omorârea sarcinii
care declanșează OOM-killer în situații de
lipsă de memorie.
- Dacă este stabilită la zero, OOM-killer va scana
întreaga listă de sarcini și va selecta o
sarcină pe bază euristică pentru a o omorî.
Aceasta selectează în mod normal o sarcină
defectuoasă care consumă multă memorie și care
eliberează o cantitate mare de memorie atunci când este
eliminată.
- Dacă această valoare este diferită de zero,
OOM-killer omoară pur și simplu sarcina care a
declanșat condiția de depășire a memoriei.
Acest lucru evită o scanare a listei de sarcini, posibil
costisitoare.
- Dacă valoarea lui /proc/sys/vm/panic_on_oom este
diferită de zero, aceasta are prioritate față de
orice valoare utilizată în
/proc/sys/vm/oom_kill_allocating_task.
- Valoarea implicită este 0.
- /proc/sys/vm/overcommit_kbytes (începând cu Linux
3.14)
- Acest fișier inscriptibil oferă o alternativă la
/proc/sys/vm/overcommit_ratio pentru controlul CommitLimit
atunci când /proc/sys/vm/overcommit_memory are valoarea 2.
Acest lucru permite specificarea cantității de memorie
suprasolicitată ca valoare absolută (în ko),
și nu ca procent, așa cum se face cu
overcommit_ratio. Acest lucru permite un control mai fin al
CommitLimit pe sistemele cu dimensiuni de memorie extrem de
mari.
- Numai unul dintre overcommit_kbytes sau overcommit_ratio
poate avea un efect: dacă overcommit_kbytes are o valoare
diferită de zero, atunci este utilizat pentru a calcula
CommitLimit, în caz contrar este utilizat
overcommit_ratio. Scrierea unei valori în oricare dintre
aceste fișiere face ca valoarea din celălalt fișier
să fie pusă la zero.
- /proc/sys/vm/overcommit_memory
- Acest fișier conține modul de contabilizare a memoriei
virtuale a nucleului. Valorile sunt:
- 0: supra-rezervare „overcommit” euristică (aceasta
este valoarea implicită)
1: întotdeauna supra-rezervare, nu verifică niciodată
2: verifică întotdeauna, niciodată supra-rezervare
- În modul 0, apelurile mmap(2) cu MAP_NORESERVE nu
sunt verificate, iar verificarea implicită este foarte
slabă, ceea ce conduce la riscul de a obține un proces
„OOM-killed”.
- În modul 1, nucleul pretinde că există
întotdeauna suficientă memorie, până
când memoria se epuizează. Un caz de utilizare pentru acest
mod este reprezentat de aplicațiile de calcul
științific care utilizează matrici disperse mari.
Înainte de Linux 2.6.0, orice valoare diferită de zero
implica modul 1.
- În modul 2 (disponibil începând cu Linux 2.6),
spațiul total de adrese virtuale care poate fi alocat
(CommitLimit în /proc/meminfo) se calculează
astfel
-
CommitLimit = (total_RAM - total_huge_TLB) *
overcommit_ratio / 100 + total_swap
- unde:
- •
- total_RAM este cantitatea totală de RAM din sistem;
- •
- total_huge_TLB este cantitatea de memorie pusă deoparte
pentru paginile imense;
- •
- overcommit_ratio este valoarea din
/proc/sys/vm/overcommit_ratio; și
- •
- total_swap este cantitatea de spațiu de interschimb
(swap).
- De exemplu, într-un sistem cu 16 Go de RAM fizică, 16 Go de
spațiu interschimb, niciun spațiu dedicat paginilor imense
și un overcommit_ratio de 50, această formulă
generează un CommitLimit de 24 Go.
- Începând cu Linux 3.14, dacă valoarea din
/proc/sys/vm/overcommit_kbytes este diferită de zero, atunci
CommitLimit este calculată ca:
-
CommitLimit = overcommit_kbytes + total_swap
- A se vedea, de asemenea, descrierea lui
/proc/sys/vm/admin_reserve_kbytes și
/proc/sys/vm/user_reserve_kbytes.
- /proc/sys/vm/overcommit_ratio (începând cu Linux
2.6.0)
- Acest fișier inscriptibil definește un procent cu care
memoria poate fi supra-rezervată. Valoarea implicită din
fișier este 50. Consultați descrierea
/proc/sys/vm/overcommit_memory.
- /proc/sys/vm/panic_on_oom (începând cu Linux
2.6.18)
- Aceasta activează sau dezactivează o intrare în
panică a nucleului într-o situație de lipsă a
memoriei.
- Dacă valoarea din acest fișier este stabilită la 0,
OOM-killer-ul nucleului va omorî un proces defectuos. De obicei,
OOM-killer este capabil să omoare un proces defectuos și
sistemul va supraviețui.
- Dacă valoarea din acest fișier este stabilită la 1,
atunci nucleul intră în mod normal în panică
atunci când se produce o depășire a memoriei. Cu
toate acestea, dacă un proces limitează alocările la
anumite noduri utilizând politici de memorie (mbind(2)
MPOL_BIND) sau cpuset-uri (cpuset(7)) și aceste
noduri ating starea de epuizare a memoriei, un proces poate fi
omorât de OOM-killer. În acest caz nu se produce intrarea
în panică: deoarece memoria altor noduri poate fi
liberă, aceasta înseamnă că este posibil ca
sistemul în ansamblu să nu fi ajuns încă
într-o situație de epuizare a memoriei.
- Dacă valoarea din acest fișier este stabilită la 2,
nucleul intră întotdeauna în panică atunci
când apare o condiție de epuizre a memoriei.
- Valoarea implicită este 0. 1 și 2 sunt pentru
protecția împotriva cazurilor de grupare a erorilor.
Selectați oricare dintre acestea în funcție de
politica de protecție în caz de eroare.
- /proc/sys/vm/swappiness
- Valoarea din acest fișier controlează agresivitatea cu care
nucleul va schimba paginile de memorie. Valorile mai mari cresc
agresivitatea, iar valorile mai mici scad agresivitatea. Valoarea
implicită este 60.
- /proc/sys/vm/user_reserve_kbytes (începând cu Linux
3.10)
- Specifică o cantitate de memorie (în Kio) care să fie
rezervată pentru procesele de utilizator. Acest lucru este menit
să împiedice un utilizator să pornească un
singur proces care consumă multă memorie, astfel
încât să nu poată recupera (kill the hog).
Valoarea din acest fișier are efect numai atunci când
/proc/sys/vm/overcommit_memory este stabilită la 2 (modul
„overcommit never”). În acest caz, sistemul
rezervă o cantitate de memorie care este minimum [3% din
dimensiunea procesului curent, user_reserve_kbytes].
- Valoarea implicită din acest fișier este minimul de [3% din
paginile libere, 128Mio] exprimat în Kio.
- Dacă valoarea din acest fișier este stabilită la
zero, atunci unui utilizator i se va permite să aloce toată
memoria liberă cu un singur proces (minus cantitatea
rezervată de /proc/sys/vm/admin_reserve_kbytes). Orice
încercare ulterioară de a executa o comandă va avea
ca rezultat mesajul „fork: Cannot allocate memory”.
- Modificarea valorii din acest fișier intră în vigoare
ori de câte ori o aplicație solicită memorie.
- /proc/sys/vm/unprivileged_userfaultfd (începând cu
Linux 5.2)
- Acest fișier (inscriptibil) expune un indicator care
controlează dacă procesele neprivilegiate au voie să
utilizeze userfaultfd(2). Dacă acest fișier are
valoarea 1, atunci procesele neprivilegiate pot utiliza
userfaultfd(2). Dacă acest fișier are valoarea 0,
atunci numai procesele care au capacitatea CAP_SYS_PTRACE pot
utiliza userfaultfd(2). Valoarea implicită în acest
fișier este 1.
Traducerea în limba română a acestui manual a
fost făcută de Remus-Gabriel Chelu
<remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită;
citiți
Licența
publică generală GNU Versiunea 3 sau o versiune
ulterioară cu privire la condiții privind drepturile de autor.
NU se asumă NICIO RESPONSABILITATE.
Dacă găsiți erori în traducerea
acestui manual, vă rugăm să trimiteți un e-mail
la
translation-team-ro@lists.sourceforge.net.