Що означають зміни у вільному виході з 14.04 до 16.04?


29

Я помітив, що freeзвітність команд змінилася десь між Trusty та Xenial. Ось що показує "free -m" на одному з моїх надійних комп'ютерів:

$ 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

Рядок +/- буфери / кеш-пам'ять, на яку я в основному дивився, відпала. Як слід інтерпретувати нові числа?

  • Чи включає Mem / використовуваний / безкоштовний буфери та кеш чи ні?
  • Які числа є еквівалентом використаних та вільних чисел у рядку "+/- буфери / кеш" попередньої версії?

Відповіді:


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/c9901bbd7d9bbd7d9bbd7bddddddddddd

Що стосується нового 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тепер доступний як:
    • - / + буфери / кешused = Поточний Mem usedстовпець (його розрахунок детально описано вище)
    • - / + буфери / кешfree доступні як більш точне значення в поточному новому стовпціavailable

Примітка: В якості kb_*імен змінних є внутрішніми іменами , використовуваними в вихідному коді.


1
Цю відповідь можна покращити, поставивши конкретну відповідь = "the tl; dr part" вгорі та деталі внизу (зараз це навпаки).
Nikana Reklawyks

Це чудове пояснення, але на OpenVZ, що працює ubuntu 16.04, я бачу, що "доступний" навіть не наближається до вільного стовпця в "+/- буфери / кеш" на попередньому "безкоштовно". Запускаючи ті самі програми, я отримую 120MB безкоштовно 14.04, а близько 0 - 16.04. Або використання оперативної пам’яті зовсім не відрізняється в цих двох системах, або один пакет цих вільних є неправильним (або просто OpenVZ безлад для цих речей).
Сандро Антонучі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.