Что означают изменения в «свободном» выпуске с 14 по 16 апреля?

29

Я заметил, что freeкоманда отчетов изменилась где-то между Trusty и Xenial. Вот что `free -m 'показывает на одном из моих компьютеров Trusty:

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

Вот эквивалент (другой) системы Xenial:

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

Строка +/- buffers / cache, на которую я в основном смотрел, пропала. Как я должен интерпретировать новые цифры?

  • Используются ли в Mem / free буферы и кеш или нет?
  • Какие числа эквивалентны используемым и свободным числам в строке «+/- buffers / cache» более ранней версии?
Otus
источник

Ответы:

16

Пожалуйста, рассмотрите пример вывода, который я получил из freeкоманды в моем Ubuntu 12.04:

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

Значение поля Memused (kb_main_used) теперь вычисляется так:

used = total - free - cached - buffers

Раньше это было:

used = total - free

Это изменение было введено в следующем коммите https://gitlab.com/procps-ng/procps/commit/6cb75efef85f735b72e6c96f197f358f511f8ed9

Промежуточное значение:

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

+/- значение буферов / кеша рассчитывается так:

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

Новое значение buff / cache вычисляется так:

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

Это то же самое buffers_plus_cached, что использовалось в предыдущих версиях, разница в том, что раньше он использовался для внутренних целей, а теперь он отображается напрямую, а дальнейшая вычисленная строка -/+ buffers/cacheбыла удалена

Для получения дополнительной информации, пожалуйста, проверьте эти коммиты, где были внесены эти изменения: https://gitlab.com/procps-ng/procps/commit/f47001c9e91a1e9b12db4497051a212cf49a87b1 https://gitlab.com/procps-ng/procps/commit/c9908bbb1808111.

Что касается нового availableполя, для ядер Linux старше 2.6.27 его значение совпадает со freeзначением, но для более поздних версий ядра оно немного отличается:

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)

Предоставлено: http://manpages.ubuntu.com/manpages/xenial/en/man1/free.1.html

Итак, конкретный ответ на ваши вопросы будет:

  • Новая версия freeвключает буферы / кэш в вычислениях Mem used/freeзначений.
  • +/- buffers/cacheЗначение , которое используется , чтобы быть там в предыдущих версиях freeтеперь доступен как:
    • - / + buffers / cacheused = текущий Mem usedстолбец (его расчет подробно описан выше)
    • - / + буферы / кешfree доступны как более точное значение в текущем новом столбцеavailable

Примечание: В качестве kb_*имен переменных являются внутренними именами , используемыми в исходном коде.

saji89
источник
1
Этот ответ можно улучшить, поместив конкретный ответ = «часть tl; dr» вверху и подробности ниже (сейчас все наоборот).
Никана Рекламикс
Это отличное объяснение, но на OpenVZ под управлением Ubuntu 16.04 я вижу, что «доступные» даже близко не подходят к столбцу free в «+/- buffers / cache» на предыдущем «свободном». Работая с теми же приложениями, я получаю 120 МБ бесплатно в 14.04, и близко к 0 доступно в 16.04. Либо использование оперативной памяти в этих двух системах совершенно различно, либо в пакетах этих бесплатных приложений нет (или это просто беспорядок для OpenVZ).
Сандро Антонуччи