Co oznaczają zmiany w wolnej produkcji z 14.04 na 16.04?

29

Zauważyłem, że freeraportowanie poleceń zmieniło się gdzieś pomiędzy Trusty i Xenial. Oto, co pokazuje „free -m” na jednym z moich komputerów Trusty:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          7916       7645        271         99        455       1764
-/+ buffers/cache:       5426       2490
Swap:        24999        805      24194

Oto odpowiednik (innego) systemu Xenial:

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           3553        1192         857          16        1504        2277
Swap:          3689           0        3689

Zniknęła linia buforów +/- buforów / pamięci podręcznej, na którą głównie patrzyłam. Jak mam interpretować nowe liczby?

  • Czy użyta / bezpłatna pamięć Mem zawiera bufory i pamięć podręczną?
  • Które liczby są odpowiednikami używanych i wolnych numerów w wierszu „+/- buffers / cache” wcześniejszej wersji?
otus
źródło

Odpowiedzi:

16

Proszę rozważyć przykładowy wynik otrzymany z freepolecenia w moim Ubuntu 12.04:

           total       used       free     shared    buffers     cached
Mem:       8074640    6187480    1887160     377056     365128    2113156
-/+ buffers/cache:    3709196    4365444
Swap:     15998972      82120   15916852

Wartość pola Memused (kb_main_used) jest teraz obliczana w następujący sposób:

used = total - free - cached - buffers

Wcześniej było to:

used = total - free

Ta zmiana została wprowadzona w następującym zatwierdzeniu https://gitlab.com/procps-ng/procps/commit/6cb75efef85f735b72e6c96f197f358f511f8ed9

Wartość pośrednia:

buffers_plus_cached = buffers (kb_main_buffers) + cached (kb_main_cached) = 365128 + 2113156 = 2478284

+/- wartość buforów / pamięci podręcznej jest obliczana w następujący sposób:

buffers = kb_main_used - buffers_plus_cached = 6187480 - 2478284 = 3709196
/
cache = kb_main_free + buffers_plus_cached = 1887160 + 2478284 = 4365444

Nowa wartość buff / cache jest obliczana w następujący sposób:

buff/cache = kb_main_buffers+kb_main_cached = 365128 + 2113156 = 2478284

Jest to to samo, co buffers_plus_cachedw poprzednich wersjach. Różnica polega na tym, że poprzednio był używany wewnętrznie, a teraz został bezpośrednio wyświetlony, a linia obliczona dalej -/+ buffers/cachezostała usunięta.

Aby uzyskać więcej informacji, sprawdź te zatwierdzenia, w których wprowadzono te zmiany: https://gitlab.com/procps-ng/procps/commit/f47001c9e91a1e9b12db4497051a212cf49a87b1 https://gitlab.com/procps-ng/procps/commit/c9908b597d9898b597d9

Począwszy od nowego availablepola, dla jąder Linux starszych niż 2.6.27 jego wartość jest taka sama jak freewartość, ale dla późniejszych wersji jądra jest nieco inna:

Estimation of how much memory  is  available  for  starting  new
applications,  without swapping. Unlike the data provided by the
cache or free fields, this field takes into account  page  cache
and also that not all reclaimable memory slabs will be reclaimed
due to  items  being  in  use  (MemAvailable  in  /proc/meminfo,
available   on   kernels  3.14,  emulated  on  kernels  2.6.27+,
otherwise the same as free)

Dzięki uprzejmości: http://manpages.ubuntu.com/manpages/xenial/en/man1/free.1.html

Konkretna odpowiedź na twoje pytania brzmiałaby:

  • Nowa wersja freezawiera bufory / pamięć podręczną w obliczeniach Mem used/freewartości.
  • +/- buffers/cacheWartość, która kiedyś tam w poprzednich wersjach freejest obecnie dostępna jako:
    • - / + bufory / pamięć podręcznaused = bieżąca Mem usedkolumna (jej obliczenia opisano szczegółowo powyżej)
    • - / + bufory / pamięć podręcznafree jest dostępna jako dokładniejsza wartość w bieżącej nowej kolumnieavailable

Uwaga: Do kb_*nazwy zmiennych są wewnętrzne nazwy używane w kodzie źródłowym.

saji89
źródło
1
Odpowiedź można poprawić, umieszczając konkretną odpowiedź = „część tl; dr” na górze, a szczegóły poniżej (teraz jest na odwrót).
Nikana Reklawyks
To świetne wyjaśnienie, ale na OpenVZ z systemem Ubuntu 16.04 widzę, że „dostępne” nawet nie zbliża się do wolnej kolumny w „+/- buforach / pamięci podręcznej” na poprzednim „wolnym”. Po uruchomieniu tych samych aplikacji otrzymuję 120 MB za darmo 14.04 i prawie 0 dostępnych 16.04. Albo użycie pamięci RAM jest zupełnie inne w tych dwóch systemach, albo jedna z tych darmowych paczek jest błędna (lub jest to po prostu bałagan w OpenVZ dla tych rzeczy).
Sandro Antonucci