¿Qué significan los cambios en la salida 'libre' de 14.04 a 16.04?

29

Noté que el freecomando de informes ha cambiado en algún lugar entre Trusty y Xenial. Esto es lo que muestra 'free -m' en una de mis computadoras Trusty:

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

Aquí está el equivalente en un sistema Xenial (diferente):

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

La línea +/- buffers / cache, que solía ver principalmente, desapareció. ¿Cómo debo interpretar los nuevos números?

  • ¿Mem usa / free incluye buffers y caché o no?
  • ¿Qué números son equivalentes a los números usados ​​y libres en la línea "+/- buffers / cache" de la versión anterior?
otus
fuente

Respuestas:

16

Considere la salida de muestra que obtuve del freecomando en mi Ubuntu 12.04:

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

El valor del campo Memused (kb_main_used) ahora se calcula así:

used = total - free - cached - buffers

Anteriormente, solía ser:

used = total - free

Este cambio se introdujo en la siguiente confirmación https://gitlab.com/procps-ng/procps/commit/6cb75efef85f735b72e6c96f197f358f511f8ed9

Un valor intermedio:

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

El valor de +/- buffers / cache se calcula así:

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

El nuevo valor de buff / cache se calcula así:

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

Esto es lo mismo que buffers_plus_cached, usado en versiones anteriores, la diferencia es que anteriormente se usaba internamente, y ahora se muestra directamente, y la línea calculada adicional, -/+ buffers/cachese ha eliminado

Para obtener más información, verifique estas confirmaciones, donde se introdujeron estos cambios: https://gitlab.com/procps-ng/procps/commit/f47001c9e91a1e9b12db4497051a212cf49a87b1 https://gitlab.com/procps-ng/procps/commit/c9908b59712d1af6ae6

A partir del nuevo availablecampo, para los núcleos de Linux anteriores a 2.6.27, su valor es el mismo que el freevalor, pero para las versiones posteriores del núcleo, es un poco 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)

Cortesía: http://manpages.ubuntu.com/manpages/xenial/en/man1/free.1.html

Entonces, la respuesta específica a sus preguntas sería:

  • La nueva versión de freeincluye buffers / cache en los cálculos de Mem used/freevalores.
  • El +/- buffers/cachevalor que solía estar allí en versiones anteriores de freeahora está disponible como:
    • - / + buffers / cacheused = Mem usedColumna actual (Su cálculo se detalla más arriba)
    • - / + buffers / cachefree está disponible como el valor más preciso en la nueva columna actualavailable

Nota: Los kb_*nombres de las variables son los nombres internos utilizados en el código fuente.

saji89
fuente
1
Esta respuesta podría mejorarse colocando la respuesta específica = "la parte tl; dr" en la parte superior y los detalles a continuación (ahora es al revés).
Nikana Reklawyks
Esta es una gran explicación, pero en OpenVZ ejecutando ubuntu 16.04 veo que "disponible" ni siquiera se acerca a la columna libre en "+/- buffers / cache" en el "libre" anterior. Al tener las mismas aplicaciones ejecutándose, obtengo 120 MB gratis en 14.04 y cerca de 0 disponibles en 16.04. O el uso de RAM es completamente diferente en esos dos sistemas o en uno de los paquetes gratuitos que están mal (o simplemente OpenVZ es un desastre para estas cosas).
Sandro Antonucci