GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuánta RAM usa el kernel?

Kernel es un nombre 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, debe observar la pelota completa y no solo un componente.

Por cierto, el mío muestra slabtop :

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

La página man para slabtop también tenía esto que decir:

El encabezado de la estadística slabtop rastrea cuántos bytes de slabs se están utilizando y no es una medida de la memoria física. El campo 'Slab' en el archivo /proc/meminfo rastrea información sobre la memoria física de slab usada.

Soltar cachés

Dejar mis cachés como sugirió @derobert en los comentarios debajo de 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 libre, dentries e inodos. Hablo más sobre esto en esta sesión de preguntas y respuestas de U&L titulada:¿Existen formas o herramientas para volcar la memoria caché y el búfer?". Por lo tanto, 110 MB de mi espacio se usaban simplemente para mantener la información sobre la memoria caché, las dentaduras y los inodos.

Información adicional

  • Si está interesado, encontré esta publicación de blog que analiza slabtop en un poco más de detalles. Se titula:Comando Linux del día:slabtop.
  • El Slab Cache se analiza con más detalle aquí en Wikipedia, titulado:Asignación de Slab.

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

Esta imagen es un poco más confusa para mí, pero estas son las cosas que "creo" que sabemos.

Losa

Podemos obtener una instantánea del uso de Slab usando esta técnica. Básicamente, podemos extraer esta información de /proc/meminfo .

$ grep Slab /proc/meminfo
Slab:             100728 kB

Módulos

También podemos obtener un valor de tamaño para los módulos del Kernel (no está claro si es su tamaño en el disco o 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

Se puede acceder a muchos de los detalles sobre SLAB 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 que se carga.

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

Referencias

  • ¿Adónde va la memoria? Uso de memoria en el kernel 2.6

¿Qué tal esto:

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

Eso es en una máquina muy pequeña recién arrancada que se ejecuta sin periféricos con un núcleo normal. Así que no requiere mucho.

Como sugiere Derobert, el núcleo utilizará la memoria disponible para el almacenamiento en caché y eso es mucho de lo que se ve en slabtop . Además del caché de archivos, esto tiene que ver con la memoria compartida de los procesos del espacio de usuario que ya no está en uso. El kernel lo deja allí hasta que se requieran las mismas cosas nuevamente o algo necesite RAM de forma activa, en cuyo caso se olvida. Una analogía sería sacar un libro de un estante y dejarlo abierto para leerlo sobre una mesa:cuando termines de leer, puedes dejar el libro abierto sobre la mesa en caso de que necesites volver a mirarlo.


En este servidor de 512 GB de RAM que ejecuta Solaris, el kernel 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 kernel:

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

No hay nada de qué preocuparse, la RAM no utilizada es RAM desperdiciada de todos modos.


Linux
  1. ¿Cómo funciona internamente copy_from_user del kernel de Linux?

  2. ¿Cómo determina el kernel de Linux el orden de las llamadas __init?

  3. Compilando el kernel de Linux, ¿cuánto tamaño se necesita?

  4. ¿Cómo monta un kernel la partición raíz?

  5. ¿Cómo puedo reservar un bloque de memoria del kernel de Linux?

Cómo usar el comando de historial en Linux

¿Cuánto intercambio debería usar en Linux?

¿Cómo se identifica la distribución de Linux en uso?

¿Cómo monitorear el uso de la memoria dedicada al kernel?

¿Cómo puedo determinar el número de ranuras de RAM en uso?

¿Cómo carga Linux la imagen 'initrd'?