Provided by: manpages-pl_4.27.0-1_all 

NAZWA
/proc/sys/vm/ - podsystem pamięci wirtualnej
OPIS
/proc/sys/vm/
Ten katalog zawiera pliki sterujące zarządzaniem pamięcią, buforami i zarządzaniem cachem.
/proc/sys/vm/admin_reserve_kbytes (od Linuksa 3.10)
Plik definiuje wielkość wolnej pamięci (w KiB) w systemie, jaka ma być zarezerwowana dla
użytkowników z przywilejem CAP_SYS_ADMIN.
Wartość domyślna w tym pliku jest mniejszą z [3% wolnych stron, 8MiB], wyrażoną w KiB. Wartość ta
ma być wystarczająca do zalogowania się superużytkownika i zabicia procesu, jeśli to konieczne,
przy użyciu domyślnego trybu 'guess' overcommit (tj. 0 w /proc/sys/vm/overcommit_memory).
Systemy działające w trybie „overcommit never” (tj. 2 w /proc/sys/vm/overcommit_memory) powinny
zwiększyć wartość w tym pliku, biorąc pod uwagę pełny rozmiar pamięci wirtualnej, jaką użyją
programy służące do odzyskania kontroli (np. login(1), ssh(1) i top(1)). W innym przypadku,
superużytkownik może nie być w stanie zalogować się, w celu odzyskania systemu. Przykładowo, na
architekturze x86-64 odpowiednią wartością jest 131072 (zarezerwowane 128MiB).
Zmiana wartości w tym pliku zaczyna być stosowana, gdy tylko aplikacja zażąda pamięci.
/proc/sys/vm/compact_memory (od Linuksa 2.6.35)
Po zapisie 1 do tego pliku wszystkie strefy są przemieszczane w ten sposób, że — jeśli to możliwe
— pamięć jest dostępna w ciągłych blokach. Efekt tej akcji można sprawdzić za pomocą
/proc/buddyinfo.
Obecne tylko, jeśli jądro zostało skonfigurowane z CONFIG_COMPACTION.
/proc/sys/vm/drop_caches (od Linuksa 2.6.16)
Zapis do tego pliku powoduje zwolnienie przez jądro czystych buforów, dentries i i-węzłów z
pamięci, powodując zwolnienie pamięci. Może być to przydatne to testowania zarządzania pamięcią i
wykonywania powtarzalnych testów systemu plików. Zapis do tego pliku powoduje utratę zalet
buforowania, przez co może spowodować pogorszenie ogólnej wydajności systemu.
Aby zwolnić bufor strony, proszę użyć:
echo 1 > /proc/sys/vm/drop_caches
Aby zwolnić dentries i i-węzły, proszę użyć:
echo 2 > /proc/sys/vm/drop_caches
Aby zwolnić bufor strony, dentries i i-węzły, proszę użyć:
echo 3 > /proc/sys/vm/drop_caches
Ponieważ zapis do tego pliku nie jest destrukcyjny i brudne obiekty nie są zwalniane, użytkownik
powinien wcześniej uruchomić sync(1).
/proc/sys/vm/sysctl_hugetlb_shm_group (od Linuksa 2.6.7)
Ten zapisywalny plik zawiera identyfikator grupy, która może alokować pamięć, za pomocą dużych
(huge) stron. Jeśli proces ma identyfikator grupy systemu plików lub jakiś z uzupełniających
identyfikatorów grup który jest zgodny z tym ID grupy, to może alokować duże strony bez posiadania
przywileju CAP_IPC_LOCK; zob. memfd_create(2), mmap(2) i shmget(2).
/proc/sys/vm/legacy_va_layout (od Linuksa 2.6.9)
Wartość niezerowa oznacza wyłączenie nowego, 32-bitowego rozmieszczenia mapowania pamięci; jądro
będzie używać starego (2.4) rozmieszczenia dla wszystkich procesów.
/proc/sys/vm/memory_failure_early_kill (od Linuksa 2.6.32)
Kontroluje jak zabijać procesy z nienaprawialnym błędem pamięci (z reguły 2-bitowy błąd w module
pamięci), które nie mogą być obsłużone przez jądro, wykryte w tle przez sprzęt. W niektórych
przypadkach (np. jeśli strona ma wciąż poprawną kopię na dysku), jądro obsłuży taki błąd w sposób
przezroczysty, bez wpływu na pracę aplikacji. Jednak jeśli nie istnieje inna, zaktualizowana kopia
danych, jądro zabija procesy, aby zapobiec uszkodzeniu danych wynikłego z propagacji błędu.
Plik posiada jedną z następujących wartości:
1 Wszystkie procesy, które posiadają zmapowaną uszkodzoną i nieprzeładowaną stronę, są
zabijane zaraz po wykryciu uszkodzenia. Proszę zauważyć, że nie jest to obsługiwane dla
nielicznych typów stron, takich jak wewnętrzne przypisanie danych przez jądro lub pamięć
podręczna na dysku (swap), ale działa w przypadku większości stron użytkownika.
0 Usuwana (unmap) jest uszkodzona strona i zabijane procesy tylko, gdy chcą uzyskać dostęp do
strony.
Zabicie jest wykonywane za pomocą sygnału SIGBUS z si_code ustawionym na BUS_MCEERR_AO. Procesy
mogą obsłużyć tę sytuację, jeśli chcą; proszę zapoznać się z sigaction(2), aby dowiedzieć się
więcej.
Funkcja jest aktywna wyłącznie na architekturach/platformach z zaawansowaną, maszynową obsługą
sprawdzania i zależy od możliwości sprzętowych.
Aplikacje mogą indywidualnie przesłonić ustawienie memory_failure_early_kill za pomocą operacji
PR_MCE_KILL prctl(2).
Obecne tylko, jeśli jądro zostało skonfigurowane z CONFIG_MEMORY_FAILURE.
/proc/sys/vm/memory_failure_recovery (od Linuksa 2.6.32)
Włącza odzyskiwanie po błędzie pamięci (jeśli jest obsługiwane przez daną platformę).
1 Próbuje odzyskiwać.
0 Zawsze panikuje przy błędzie pamięci.
Obecne tylko, jeśli jądro zostało skonfigurowane z CONFIG_MEMORY_FAILURE.
/proc/sys/vm/oom_dump_tasks (od Linuksa 2.6.25)
Włącza tworzenie ogólnosystemowego zrzutu zadania (bez wątków jądra), gdy jądro wykonuje
OOM-killing. Zrzut zawiera następujące informacje o każdym zadaniu (wątku, procesie):
identyfikator wątku, realny identyfikator użytkownika, identyfikator grupy wątku (identyfikator
procesu), rozmiar pamięci wirtualnej, rozmiar zestawu rezydentnego, procesor któremu przydzielono
zadanie, wynik oom_adj (patrz opis /proc/pid/oom_adj) i nazwę polecenia. Jest to przydatne do
określenia dlaczego OOM-killer został przywołany i zidentyfikowania zadania, które to spowodowało.
Jeśli zawiera wartość zero, ta informacja nie jest zrzucana. Zrobienie zrzutu stanu pamięci
każdego zadania może nie być wykonalne w bardzo dużych systemach, z tysiącami zadań. Takie systemy
nie powinny być zmuszane do narażania się na dodatkowy spadek wydajności w sytuacjach braku
pamięci, gdy taka informacja nie może być przydatna.
Jeśli wartość jest niezerowa, ta informacja jest pokazywana kiedy tylko OOM-killer rzeczywiście
zabija zadanie zajmujące dużo pamięci.
Domyślną wartością jest 0.
/proc/sys/vm/oom_kill_allocating_task (od Linuksa 2.6.24)
Włącza lub wyłącza zabijanie zadania kolejkującego OOM w sytuacjach braku pamięci (Out-Of-Memory).
Jeśli jest ustawione na zero OOM-killer przeskanuje całą listę zadań i do zabicia wybierze zadania
na podstawie heurystyki. Z reguły wybierane są zadania zajmujące wiele pamięci, które zwalniają
dużą ilość pamięci po zabiciu.
Jeśli jest ustawione na wartość niezerową, OOM-killer po prostu zabija zadanie, które wyzwoliło
stan braku pamięci. W ten sposób unika się potencjalnie kosztownego skanowania listy zadań.
Jeśli /proc/sys/vm/panic_on_oom jest niezerowe, to ma ono pierwszeństwo, niezależnie od wartości
użytej w /proc/sys/vm/oom_kill_allocating_task.
Domyślną wartością jest 0.
/proc/sys/vm/overcommit_kbytes (od Linuksa 3.14)
Ten zapisywalny plik zapewnia alternatywę do /proc/sys/vm/overcommit_ratio do kontrolowania
CommitLimit gdy /proc/sys/vm/overcommit_memory ma wartość 2. Pozwala na wykonanie overcommittu
ilości pamięci w jednostkach absolutnych (w kB), zamiast w wartościach procentowych, jak to ma
miejsce przy overcommit_ratio. W ten sposób można osiągnąć lepszą kontrolę CommitLimit na
systemach z ekstremalnie dużą ilością pamięci.
Tylko jeden z overcommit_kbytes lub overcommit_ratio może działać: jeśli overcommit_kbytes ma
wartość niezerową, to jest używane do obliczenia CommitLimit, w przeciwnym razie używane jest
overcommit_ratio. Zapisanie wartości do któregokolwiek z plików powoduje, że wartość w drugim jest
ustawiana na zero.
/proc/sys/vm/overcommit_memory
Plik zawiera tryb rozliczeń pamięci wirtualnej jądra. Dopuszczalne wartości:
0: heurystyczny overcommit (domyślnie)
1: zawsze robi overcommit, nigdy nie sprawdza
2: zawsze sprawdza, nigdy nie robi overcommitu
W trybie 0 nie są sprawdzane wywołania mmap(2) z MAP_NORESERVE, a domyślne sprawdzenia są bardzo
słabe, prowadząc do ryzyka zabicia procesu przez „OOM-killera”.
W trybie 1 jądro udaje, że jest zawsze wystarczająca ilość pamięci, dopóki pamięć faktycznie się
nie wyczerpie. Jednym z zastosowań tego trybu są naukowe aplikacje obliczeniowe, które korzystają
z dużych, rozsianych macierzy. Przed Linuksem 2.6.0, każda niezerowa wartość implikowała 1.
W trybie 2 (dostępnym od Linuksa 2.6), całkowity adres przestrzeni wirtualnej w systemie, którą
można przypisać (CommitLimit w /proc/meminfo) jest obliczany jako
CommitLimit = (total_RAM - total_huge_TLB) *
overcommit_ratio / 100 + total_swap
gdzie:
• total_RAM jest sumą pamięci RAM w systemie;
• total_huge_TLB jest sumą pamięci przeznaczoną dla dużych stron;
• overcommit_ratio jest wartością w /proc/sys/vm/overcommit_ratio i
• total_swap jest wielkością przestrzeni wymiany.
Na przykład w systemie z 16 GB fizycznej pamięci RAM i 16 GB pamięci wymiany, brakiem przestrzeni
przeznaczonej na duże strony i z overcommit_ratio równym 50, ta formuła daje CommitLimit na
poziomie 24 GB.
Od Linuksa 3.14, gdy wartość w /proc/sys/vm/overcommit_kbytes jest niezerowa, to CommitLimit jest
obliczana w następujący sposób:
CommitLimit = overcommit_kbytes + total_swap
Zobacz opis /proc/sys/vm/admin_reserve_kbytes i /proc/sys/vm/user_reserve_kbytes.
/proc/sys/vm/overcommit_ratio (od Linuksa 2.6.0)
Plik zapisywalny definiujący wartość procentową pamięci, na której można wykonać overcommit.
Domyślną wartością jest 50. Zob. opis /proc/sys/vm/overcommit_memory.
/proc/sys/vm/panic_on_oom (od Linuksa 2.6.18)
Włącza lub wyłącza panikę jądra w sytuacjach braku pamięci.
Jeśli plik ma ustawioną wartość 0, OOM-killer jądra zabija któryś z nieposłusznych procesów. Z
reguły OOM-killer jest w stanie to wykonać i system może pracować dalej.
Jeśli plik ma ustawioną wartość 1, to jądro zwykle panikuje przy sytuacji braku pamięci. Jednak
jeśli proces limituje przydzielanie do konkretnych węzłów używając zasad pamięci (mbind(2)
MPOL_BIND) lub cpuset (cpuset(7)) i te węzły dotknie problem braku pamięci, to taki proces może
być zabity przez OOM-killer. Nie występuje wówczas panika, ponieważ pamięć innych węzłów może być
wolna, co oznacza że system jako całość mógł nie osiągnąć jeszcze sytuacji braku pamięci.
Jeśli ustawiono wartość 2, to jądro zawsze panikuje w sytuacji braku pamięci.
Domyślną wartość jest 0. 1 i 2 są przeznaczone do poprawnej pracy klastrów mimo wystąpienia
problemów. Proszę wybrać właściwą z nich, zgodnie z używanymi zasadami w takich sytuacjach.
/proc/sys/vm/swappiness
Wartość w tym pliku kontroluje jak agresywnie jądro przenosi strony pamięci do pamięci wymiany
(swapu). Wyższe wartości zwiększają agresywność, mniejsze zmniejszają ją. Domyślną wartością jest
60.
/proc/sys/vm/user_reserve_kbytes (od Linuksa 3.10)
Określa pamięć (w KiB) jaka ma być zarezerowana dla procesów użytkownika. Ma to pomóc zapobiegać
sytuacji, gdy użytkownik uruchomi pojedynczy zaborczy proces zajmujący pamięć i nie będzie w
stanie wyjść z tej sytuacji (zabić zaborcy). Wartość w tym pliku działa tylko wówczas, gdy
/proc/sys/vm/overcommit_memory ustawiono na 2 (nigdy nie robi overcommitu). W takim przypadku,
system rezerwuje wielkość pamięci, która jest mniejszą wartością z [3% rozmiaru bieżącego procesu,
user_reserve_kbytes].
Domyślną wartością w tym pliku jest mniejsza wartość z [3% wolnych stron, 128MiB], wyrażoną w KiB.
Jeśli wartość w tym pliku wynosi zero, to użytkownik będzie mógł zaalokować całą wolną pamięć za
pomocą pojedynczego procesu (minus rozmiar zarezerwowany przez /proc/sys/vm/admin_reserve_kbytes).
Każda kolejna próba wykonania polecenia spowoduje błąd „fork: Cannot allocate memory” (nie można
zaalokować pamięci).
Zmiana wartości w tym pliku zaczyna być stosowana, gdy tylko aplikacja zażąda pamięci.
/proc/sys/vm/unprivileged_userfaultfd (od Linuksa 5.2)
Ten (zapisywalny) plik ujawnia znacznik kontrolujący, czy procesy nieuprzywilejowane mogą
korzystać z userfaultfd(2). Jeśli plik ma wartość 1, to procesy nieuprzywilejowane mogą używać
userfaultfd(2). Jeśli plik ma wartość 0, to tylko procesy z przywilejem CAP_SYS_PTRACE mogą używać
userfaultfd(2). Wartością domyślną w tym pliku jest 1.
ZOBACZ TAKŻE
proc(5), proc_sys(5)
TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: Przemek Borys <pborys@dione.ids.pl>, Robert Luberda
<robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ
ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-
list@lists.sourceforge.net.
Linux man-pages 6.9.1 2 maja 2024 r. proc_sys_vm(5)