¿Cuánta RAM usa el núcleo?

46

Esta pregunta está motivada por mi sorpresa cuando descubrí que el kernel de Mac OS X usa 750 MB de RAM .

He estado usando Linux durante 20 años, y siempre "supe" que el uso de RAM en el núcleo está eclipsado por X (¿es cierto? ¿Alguna vez ha sido cierto?).

Entonces, después de buscar en Google, intenté lo slabtopque me dijo:

Active / Total Size (% used)       : 68112.73K / 72009.73K (94.6%)

¿Significa esto que mi kernel está usando ~ 72MB de RAM ahora?

(Dado que el RSS de los topinformes Xorges 17M, el núcleo ahora eclipsa X, no al revés).

¿Cuál es el uso (rango) de RAM "normal" del kernel para una computadora portátil?

¿Por qué MacOS usa un orden de magnitud más RAM que Linux?

PD. Ninguna respuesta aquí abordó la última pregunta, así que consulte las preguntas relacionadas:

sds
fuente
En mi máquina, informa casi 2GB ... pero cuando miras los detalles, todo está relacionado con el caché del sistema de archivos.
derobert
2
De hecho, si hago un echo 3 > /proc/sys/vm/drop_caches, entonces solo tengo 80MB usados.
derobert
De acuerdo con los comentarios en el enlace que proporciona, la memoria utilizada por el hardware de gráficos integrado se incluye en la contabilidad kernel_task.
Russell Borogove

Respuestas:

38

Kernel es un poco inapropiado. El kernel de Linux se compone de varios procesos / subprocesos + los módulos ( lsmod), por lo que para obtener una imagen completa, necesitaría mirar toda la bola y no solo un solo componente.

Por cierto, el mío muestra slabtop:

 Active / Total Size (% used)       : 173428.30K / 204497.61K (84.8%)

La página del manual para slabtoptambién tenía esto que decir:

El encabezado de estadística slabtop está rastreando cuántos bytes de losas se están utilizando y no es una medida de memoria física. El campo 'Losa' en el archivo / proc / meminfo es información de seguimiento sobre la memoria física de losa utilizada.

Dejar caer cachés

Dejar caer mis cachés como sugirió @derobert en los comentarios bajo su pregunta hace lo siguiente para mí:

$ sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
$

 Active / Total Size (% used)       : 61858.78K / 90524.77K (68.3%)

Enviar un 3 hace lo siguiente: caché de página gratuito, dentries e inodes. Discuto esto más en este U&L Q&A titulado: ¿Hay alguna forma o herramienta para volcar la memoria caché y el búfer? ". De modo que se utilizaban 110 MB de mi espacio simplemente manteniendo la información sobre caché de página, dentries e inodes.

Información Adicional

Entonces, ¿cuánta RAM está usando mi Kernel?

Esta imagen es un poco más nebulosa para mí, pero aquí están las cosas que "creo" que sabemos.

Losa

Podemos obtener una instantánea del uso de Slab utilizando esta técnica. Esencialmente podemos extraer esta información /proc/meminfo.

$ grep Slab /proc/meminfo
Slab:             100728 kB

Módulos

También podemos obtener un valor de tamaño para los módulos Kernel (no está claro si es su tamaño desde el disco o cuando está en la RAM) extrayendo estos valores de /proc/modules:

$ awk '{print $1 " " $2 }' /proc/modules | head -5
cpufreq_powersave 1154
tcp_lp 2111
aesni_intel 12131
cryptd 7111
aes_x86_64 7758

Información de losa

Muchos de los detalles sobre el SLAB son accesibles en esta estructura de proceso /proc/slabinfo:

$ less /proc/slabinfo | head -5
slabinfo - version: 2.1
# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
nf_conntrack_ffff8801f2b30000      0      0    320   25    2 : tunables    0    0    0 : slabdata      0      0      0
fuse_request         100    125    632   25    4 : tunables    0    0    0 : slabdata      5      5      0
fuse_inode            21     21    768   21    4 : tunables    0    0    0 : slabdata      1      1      0

Dmesg

Cuando su sistema arranca, hay una línea que informa el uso de memoria del kernel de Linux justo después de cargarlo.

$ dmesg |grep Memory:
[    0.000000] Memory: 7970012k/9371648k available (4557k kernel code, 1192276k absent, 209360k reserved, 7251k data, 948k init)

Referencias

slm
fuente
1
¿Hay alguna forma de obtener la imagen completa?
Gilles
@Gilles - de cuántos recuerdos en uso, ¿verdad? Me parece recordar una Q con respecto a eso antes, ¿tú?
SLM
@Gilles - creo que esto está cerca de lo que preguntas acerca de: grep Slab /proc/meminfo.
slm
@Gilles: también existe esto: /proc/slabinfoque parece ser la fuente slabtop, por lo que uno podría calcular las cantidades desde aquí para un recuento total más preciso.
slm
1
/proc/moduleses más probable que la columna 2 cargue el tamaño del módulo en la memoria, ya que los módulos en el disco normalmente están comprimidos (por ejemplo, en Fedora 27 es xz), he verificado el tg3controlador NIC, el tamaño en el disco (ya sea comprimido o el tamaño del archivo original) no coincide con el tamaño del byte que aparece en /proc/modules.
Terry Wang
7

Qué tal esto:

Active / Total Size (% used)       : 4709.24K / 5062.03K

Eso está en una máquina recién arrancada, muy pequeña que funciona sin cabeza con un núcleo normal. Entonces no requiere mucho.

Como sugiere derobert, el kernel utilizará la memoria disponible para el almacenamiento en caché y eso es mucho de lo que ves slabtop. Además de la caché de archivos, esto tiene que ver con la memoria que se puede compartir de los procesos del espacio de usuario que ya no está en uso. El núcleo lo deja allí hasta que se requiera lo mismo nuevamente, o bien algo necesite activamente RAM, en cuyo caso se olvida. Una analogía sería sacar un libro de un estante y dejarlo abierto para leer en una mesa: cuando termine de leer, puede dejar el libro abierto sobre la mesa en caso de que necesite mirarlo nuevamente.

encerrada dorada
fuente
4

En este servidor RAM de 512 GB que ejecuta Solaris, el núcleo utiliza 25 GB:

Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    3210102             25078    5%
Anon                     15266226            119267   23%
Exec and libs               41457               323    0%
Page cache                3539331             27651    5%
Free (cachelist)         13799571            107809   21%
Free (freelist)          30093164            235102   46%

Total                    65949851            515233
Physical                 65927406            515057

Ese más pequeño tiene más de la mitad de su RAM utilizada por el núcleo:

Page Summary                Pages                MB  %Tot
------------     ----------------  ----------------  ----
Kernel                    2149699             16794   52%
Anon                       517016              4039   13%
Exec and libs               15420               120    0%
Page cache                  21840               170    1%
Free (cachelist)             8768                68    0%
Free (freelist)           1404862             10975   34%

Total                     4117605             32168
Physical                  4096002             32000

Nada de qué preocuparse, la RAM no utilizada es RAM desperdiciada de todos modos.

jlliagre
fuente
1
Describa cómo logró su producción.
Maus
@Maus ejecutándose echo ::memstat | mdb -ken algunos servidores de producción Solaris 10 anteriores a la actualización 10/09.
jlliagre