O que significam as alterações na saída `free 'de 14.04 para 16.04?

29

Notei que o freerelatório de comandos mudou em algum lugar entre Trusty e Xenial. Aqui está o que o `free -m 'mostra em um dos meus computadores Trusty:

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

Aqui está o equivalente em um sistema Xenial (diferente):

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

A linha +/- buffers / cache, que eu costumava ver, desapareceu. Como devo interpretar os novos números?

  • O Mem usado / gratuito inclui buffers e cache ou não?
  • Quais números são equivalentes aos números usados ​​e gratuitos na linha "+/- buffers / cache" da versão anterior?
otus
fonte

Respostas:

16

Por favor, considere a saída de amostra que obtive do freecomando no meu Ubuntu 12.04:

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

O valor do campo Memused (kb_main_used) agora é calculado da seguinte forma:

used = total - free - cached - buffers

Anteriormente, costumava ser:

used = total - free

Esta alteração foi introduzida no seguinte commit https://gitlab.com/procps-ng/procps/commit/6cb75efef85f735b72e6c96f197f358f511f8ed9

Um valor intermediário:

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

O valor de +/- buffers / cache é calculado da seguinte forma:

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

O novo valor de buff / cache é calculado da seguinte maneira:

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

É o mesmo que buffers_plus_cached, usado nas versões anteriores, a diferença é que anteriormente ele era usado internamente, e agora é exibido diretamente e a linha calculada adicional -/+ buffers/cachefoi removido

Para obter mais informações, verifique esses commits, onde essas alterações foram introduzidas: https://gitlab.com/procps-ng/procps/commit/f47001c9e91a1e9b12db4497051a212cf49a87b1 https://gitlab.com/procps-ng/procps/commit/c9908bb77d9af79005ad9d

No novo availablecampo, para kernels Linux anteriores a 2.6.27, seu valor é igual ao freevalor, mas para as versões posteriores do Kernel, é um pouco diferente:

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)

Cortesia: http://manpages.ubuntu.com/manpages/xenial/en/man1/free.1.html

Portanto, a resposta específica para suas perguntas seria:

  • A nova versão do freeinclui buffers / cache nos cálculos de Mem used/freevalores.
  • O +/- buffers/cachevalor que costumava estar presente nas versões anteriores do freeagora está disponível como:
    • - / + buffers / cacheused = Mem usedcoluna atual (seu cálculo está detalhado acima)
    • - / + buffers / cachefree está disponível como o valor mais preciso na nova coluna atualavailable

NB: Os kb_*nomes das variáveis ​​são os nomes internos usados ​​no código-fonte.

saji89
fonte
1
Essa resposta pode ser melhorada colocando a resposta específica = "a parte tl; dr" na parte superior e os detalhes abaixo (agora é o contrário).
Nikana Reklawyks
Esta é uma ótima explicação, mas no OpenVZ executando o ubuntu 16.04, vejo que "disponível" nem chega perto da coluna livre em "+/- buffers / cache" no "free" anterior. Tendo os mesmos aplicativos em execução, recebo 120 MB gratuitos no 14.04 e quase 0 disponível no 16.04. O uso de memória ram é completamente diferente nesses dois sistemas ou um desses pacotes do free está errado (ou é apenas uma bagunça no OpenVZ para essas coisas).
Sandro Antonucci