proc_sys_vm(5)

NUME
/proc/sys/vm/ - subsistemul de memorie virtuală

DESCRIERE

/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.

CONSULTAȚI ȘI
proc(5), proc_sys(5)

TRADUCERE
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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.