proc_sys_vm(5) File Formats Manual proc_sys_vm(5) NUME /proc/sys/vm/ - subsistemul de memorie virtuala DESCRIERE /proc/sys/vm/ Acest director conine fiiere pentru ajustarea gestionarii memoriei, tampon(buffer) i zona de prestocare(cache). /proc/sys/vm/admin_reserve_kbytes (incepand cu Linux 3.10) Acest fiier definete cantitatea de memorie libera (in Kio) din sistem care ar trebui rezervata pentru utilizatorii cu capacitatea CAP_SYS_ADMIN. Valoarea implicita din acest fiier este minimul de [3% din paginile libere, 8Mio] exprimat in Kio. Valoarea implicita este menita sa ofere suficient pentru ca superutilizatorul sa se conecteze i sa opreasca un proces, daca este necesar, in modul implicit ,,guess" de alocare in plus de memorie (,,overcommit", adica 0 in /proc/sys/vm/overcommit_memory). Sistemele care ruleaza in modul ,,overcommit never" (adica 2 in /proc/sys/vm/overcommit_memory) ar trebui sa creasca valoarea din acest fiier pentru a ine seama de dimensiunea completa a memoriei virtuale a programelor utilizate pentru recuperare (de exemplu, login(1) ssh(1) i top(1)) In caz contrar, este posibil ca superutilizatorul sa nu se poata conecta pentru a recupera sistemul. De exemplu, pe x86-64, o valoare adecvata este 131072 (128Mio rezervat). Modificarea valorii din acest fiier intra in vigoare ori de cate ori o aplicaie solicita memorie. /proc/sys/vm/compact_memory (incepand cu Linux 2.6.35) Atunci cand se scrie 1 in acest fiier, toate zonele sunt compactate astfel incat memoria libera sa fie disponibila in blocuri contigue, acolo unde este posibil. Efectul acestei aciuni poate fi observat examinand /proc/buddyinfo. Prezenta doar daca nucleul a fost configurat cu opiunea CONFIG_COMPACTION activata. /proc/sys/vm/drop_caches (incepand cu Linux 2.6.16) Scrierea in acest fiier determina nucleul sa elimine din memorie cache-urile, intrarile de director i nodurile-i curate, facand ca memoria respectiva sa devina libera. Acest lucru poate fi util pentru testarea gestionarii memoriei i pentru efectuarea de teste de performana reproductibile pentru sistemul de fiiere. Deoarece scrierea in acest fiier duce la pierderea beneficiilor memorarii in cache, aceasta poate degrada performana generala a sistemului. Pentru a elibera memoria cache de pagini, utilizai: echo 1 > /proc/sys/vm/drop_caches Pentru a elibera intrarile de director i nodurile-i, utilizai: echo 2 > /proc/sys/vm/drop_caches Pentru a elibera memoria cache de pagini, intrarile de director i nodurile-i, utilizai: echo 3 > /proc/sys/vm/drop_caches Deoarece scrierea in acest fiier este o operaiune nedistructiva, iar obiectele modificate (murdare) nu pot fi eliberate, utilizatorul ar trebui sa execute mai intai sync(1). /proc/sys/vm/sysctl_hugetlb_shm_group (incepand cu Linux 2.6.7) Acest fiier inscriptibil conine un ID de grup care are permisiunea de a aloca memorie utilizand pagini imense. Daca un proces are un ID de grup al sistemului de fiiere sau orice ID de grup suplimentar care corespunde acestui ID de grup, atunci acesta poate face alocari de pagini imense fara a deine capacitatea CAP_IPC_LOCK; consultai memfd_create(2), mmap(2) i shmget(2). /proc/sys/vm/legacy_va_layout (incepand cu Linux 2.6.9) Daca nu este zero, aceasta dezactiveaza noua structura de alocare a memoriei pe 32 de bii; nucleul va utiliza structura tradiionala (2.4) pentru toate procesele. /proc/sys/vm/memory_failure_early_kill (incepand cu Linux 2.6.32) Controleaza modul de oprire a proceselor atunci cand o eroare de memorie necorectata (de obicei o eroare de 2 bii intr-un modul de memorie) care nu poate fi gestionata de nucleu este detectata in fundal de hardware. In unele cazuri (cum ar fi pagina care are inca o copie valabila pe disc), nucleul va gestiona defeciunea in mod transparent, fara a afecta nicio aplicaie. Dar, daca nu exista nicio alta copie actualizata a datelor, acesta va opri procesele pentru a preveni propagarea oricarei corupii a datelor. Fiierul are una dintre urmatoarele valori: 1 Omoara toate procesele care au asociata pagina corupta i care nu poate fi reincarcata imediat ce este detectata corupia. Reinei ca acest lucru nu este acceptat pentru cateva tipuri de pagini, cum ar fi datele alocate intern nucleului sau cache-ul de swap, dar funcioneaza pentru majoritatea paginilor de utilizator. 0 Anuleaza asocierea paginii corupte cu toate procesele (cu care era asociata) i omoara un proces numai daca acesta incearca sa acceseze pagina. Omorarea este efectuata utilizand un semnal SIGBUS cu si_code definit la BUS_MCEERR_AO. Procesele pot gestiona acest lucru daca doresc; consultai sigaction(2) pentru mai multe detalii. Aceasta caracteristica este activa numai pe arhitecturi/platforme cu gestionare avansata a verificarii mainii i depinde de capacitaile hardware. Aplicaiile pot schimba individual configurarea memory_failure_early_kill cu operaia prctl(2) PR_MCE_KILL. Prezenta doar daca nucleul a fost configurat cu opiunea CONFIG_MEMORY_FAILURE activata. /proc/sys/vm/memory_failure_recovery (incepand cu Linux 2.6.32) Activeaza recuperarea in caz de eroare a memoriei (atunci cand este acceptata de platforma). 1 Incearca recuperarea. 0 Declaneaza intotdeauna o panica a nucleului in cazul unei erori de memorie. Prezenta doar daca nucleul a fost configurat cu opiunea CONFIG_MEMORY_FAILURE activata. /proc/sys/vm/oom_dump_tasks (incepand cu Linux 2.6.25) Activeaza producerea unei imagini a sarcinilor la nivelul intregului sistem (cu excepia firelor nucleului) atunci cand nucleul efectueaza o operaie ,,OOM-killing" (omorare datorita supraincarcarii memoriei. Imaginea include urmatoarele informaii pentru fiecare sarcina (fir, proces): ID fir, ID utilizator real, ID grup de fire (ID proces), dimensiunea memoriei virtuale, dimensiunea setului rezident, CPU-ul pe care este programata 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 invocata funcia OOM-killer i pentru a identifica sarcina defectuoasa care a cauzat-o. Daca conine valoarea zero, aceasta informaie este suprimata. Pe sistemele foarte mari cu mii de sarcini, este posibil sa nu fie fezabil sa se creeze imaginea cu informaiile privind starea memoriei pentru fiecare dintre acestea. Astfel de sisteme nu ar trebui sa fie forate sa suporte o penalizare a performanei in situaii OOM in care informaiile nu sunt dorite. Daca este stabilita la diferit de zero, aceasta informaie este afiata ori de cate ori OOM-killer omoara efectiv o sarcina care consuma multa memorie. Valoarea implicita este 0. /proc/sys/vm/oom_kill_allocating_task (incepand cu Linux 2.6.24) Aceasta activeaza sau dezactiveaza omorarea sarcinii care declaneaza OOM-killer in situaii de lipsa de memorie. Daca este stabilita la zero, OOM-killer va scana intreaga lista de sarcini i va selecta o sarcina pe baza euristica pentru a o omori. Aceasta selecteaza in mod normal o sarcina defectuoasa care consuma multa memorie i care elibereaza o cantitate mare de memorie atunci cand este eliminata. Daca aceasta valoare este diferita de zero, OOM-killer omoara pur i simplu sarcina care a declanat condiia de depaire a memoriei. Acest lucru evita o scanare a listei de sarcini, posibil costisitoare. Daca valoarea lui /proc/sys/vm/panic_on_oom este diferita de zero, aceasta are prioritate faa de orice valoare utilizata in /proc/sys/vm/oom_kill_allocating_task. Valoarea implicita este 0. /proc/sys/vm/overcommit_kbytes (incepand cu Linux 3.14) Acest fiier inscriptibil ofera o alternativa la /proc/sys/vm/overcommit_ratio pentru controlul CommitLimit atunci cand /proc/sys/vm/overcommit_memory are valoarea 2. Acest lucru permite specificarea cantitaii de memorie suprasolicitata ca valoare absoluta (in ko), i nu ca procent, aa 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: daca overcommit_kbytes are o valoare diferita de zero, atunci este utilizat pentru a calcula CommitLimit, in caz contrar este utilizat overcommit_ratio. Scrierea unei valori in oricare dintre aceste fiiere face ca valoarea din celalalt fiier sa fie pusa la zero. /proc/sys/vm/overcommit_memory Acest fiier conine modul de contabilizare a memoriei virtuale a nucleului. Valorile sunt: 0: supra-rezervare ,,overcommit" euristica (aceasta este valoarea implicita) 1: intotdeauna supra-rezervare, nu verifica niciodata 2: verifica intotdeauna, niciodata supra-rezervare In modul 0, apelurile mmap(2) cu MAP_NORESERVE nu sunt verificate, iar verificarea implicita este foarte slaba, ceea ce conduce la riscul de a obine un proces ,,OOM-killed". In modul 1, nucleul pretinde ca exista intotdeauna suficienta memorie, pana cand memoria se epuizeaza. Un caz de utilizare pentru acest mod este reprezentat de aplicaiile de calcul tiinific care utilizeaza matrici disperse mari. Inainte de Linux 2.6.0, orice valoare diferita de zero implica modul 1. In modul 2 (disponibil incepand cu Linux 2.6), spaiul total de adrese virtuale care poate fi alocat (CommitLimit in /proc/meminfo) se calculeaza astfel CommitLimit = (total_RAM - total_huge_TLB) * overcommit_ratio / 100 + total_swap unde: o total_RAM este cantitatea totala de RAM din sistem; o total_huge_TLB este cantitatea de memorie pusa deoparte pentru paginile imense; o overcommit_ratio este valoarea din /proc/sys/vm/overcommit_ratio; i o total_swap este cantitatea de spaiu de interschimb (swap). De exemplu, intr-un sistem cu 16 Go de RAM fizica, 16 Go de spaiu interschimb, niciun spaiu dedicat paginilor imense i un overcommit_ratio de 50, aceasta formula genereaza un CommitLimit de 24 Go. Incepand cu Linux 3.14, daca valoarea din /proc/sys/vm/overcommit_kbytes este diferita de zero, atunci CommitLimit este calculata 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 (incepand cu Linux 2.6.0) Acest fiier inscriptibil definete un procent cu care memoria poate fi supra-rezervata. Valoarea implicita din fiier este 50. Consultai descrierea /proc/sys/vm/overcommit_memory. /proc/sys/vm/panic_on_oom (incepand cu Linux 2.6.18) Aceasta activeaza sau dezactiveaza o intrare in panica a nucleului intr-o situaie de lipsa a memoriei. Daca valoarea din acest fiier este stabilita la 0, OOM-killer-ul nucleului va omori un proces defectuos. De obicei, OOM-killer este capabil sa omoare un proces defectuos i sistemul va supravieui. Daca valoarea din acest fiier este stabilita la 1, atunci nucleul intra in mod normal in panica atunci cand se produce o depaire a memoriei. Cu toate acestea, daca un proces limiteaza alocarile la anumite noduri utilizand 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 omorat de OOM-killer. In acest caz nu se produce intrarea in panica: deoarece memoria altor noduri poate fi libera, aceasta inseamna ca este posibil ca sistemul in ansamblu sa nu fi ajuns inca intr-o situaie de epuizare a memoriei. Daca valoarea din acest fiier este stabilita la 2, nucleul intra intotdeauna in panica atunci cand apare o condiie de epuizre a memoriei. Valoarea implicita este 0. 1 i 2 sunt pentru protecia impotriva cazurilor de grupare a erorilor. Selectai oricare dintre acestea in funcie de politica de protecie in caz de eroare. /proc/sys/vm/swappiness Valoarea din acest fiier controleaza agresivitatea cu care nucleul va schimba paginile de memorie. Valorile mai mari cresc agresivitatea, iar valorile mai mici scad agresivitatea. Valoarea implicita este 60. /proc/sys/vm/user_reserve_kbytes (incepand cu Linux 3.10) Specifica o cantitate de memorie (in Kio) care sa fie rezervata pentru procesele de utilizator. Acest lucru este menit sa impiedice un utilizator sa porneasca un singur proces care consuma multa memorie, astfel incat sa nu poata recupera (kill the hog). Valoarea din acest fiier are efect numai atunci cand /proc/sys/vm/overcommit_memory este stabilita la 2 (modul ,,overcommit never"). In acest caz, sistemul rezerva o cantitate de memorie care este minimum [3% din dimensiunea procesului curent, user_reserve_kbytes]. Valoarea implicita din acest fiier este minimul de [3% din paginile libere, 128Mio] exprimat in Kio. Daca valoarea din acest fiier este stabilita la zero, atunci unui utilizator i se va permite sa aloce toata memoria libera cu un singur proces (minus cantitatea rezervata de /proc/sys/vm/admin_reserve_kbytes). Orice incercare ulterioara de a executa o comanda va avea ca rezultat mesajul ,,fork: Cannot allocate memory". Modificarea valorii din acest fiier intra in vigoare ori de cate ori o aplicaie solicita memorie. /proc/sys/vm/unprivileged_userfaultfd (incepand cu Linux 5.2) Acest fiier (inscriptibil) expune un indicator care controleaza daca procesele neprivilegiate au voie sa utilizeze userfaultfd(2). Daca acest fiier are valoarea 1, atunci procesele neprivilegiate pot utiliza userfaultfd(2). Daca acest fiier are valoarea 0, atunci numai procesele care au capacitatea CAP_SYS_PTRACE pot utiliza userfaultfd(2). Valoarea implicita in acest fiier este 1. CONSULTAI I proc(5), proc_sys(5) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.12 2 mai 2024 proc_sys_vm(5)