Provided by: manpages-pl_4.27.0-1_all bug

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)