GNU/Linux >> Linux Esercitazione >  >> Linux

Quanta RAM utilizza il kernel?

Kernel è un po' un termine improprio. Il kernel Linux è composto da diversi processi/thread + i moduli (lsmod ) quindi per avere un quadro completo dovresti guardare l'intera palla e non solo un singolo componente.

Per inciso, il mio mostra slabtop :

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

La pagina man per slabtop aveva anche questo da dire:

L'intestazione statistica slabtop tiene traccia di quanti byte di slab vengono utilizzati e non è una misura della memoria fisica. Il campo "Slab" nel file /proc/meminfo tiene traccia delle informazioni sulla memoria fisica della lastra utilizzata.

Eliminazione delle cache

Eliminare le mie cache come suggerito da @derobert nei commenti sotto la tua domanda fa quanto segue per me:

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

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

L'invio di un 3 fa quanto segue:pagecache, dentries e inode gratuiti. Ne discuto di più in questa domanda e risposta di U&L intitolata:Esistono modi o strumenti per eseguire il dump della cache e del buffer di memoria?". Quindi 110 MB del mio spazio venivano utilizzati solo mantenendo le informazioni relative a pagecache, dentries e inode.

Informazioni aggiuntive

  • Se sei interessato ho trovato questo post sul blog che parla di slabtop in un po 'più di dettagli. Si intitola:Comando Linux del giorno:slabtop.
  • La Slab Cache è discussa più dettagliatamente qui su Wikipedia, intitolata:Slab allocation.

Quanta RAM utilizza il mio kernel?

Questa immagine è un po' più confusa per me, ma qui ci sono le cose che "penso" sappiamo.

Lastra

Possiamo ottenere un'istantanea dell'utilizzo di Slab utilizzando questa tecnica. Essenzialmente possiamo estrarre queste informazioni da /proc/meminfo .

$ grep Slab /proc/meminfo
Slab:             100728 kB

Moduli

Inoltre possiamo ottenere un valore di dimensione per i moduli del kernel (non è chiaro se sia la loro dimensione su disco o quando si trovano nella RAM) estraendo questi valori da /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

Informazioni soletta

Gran parte dei dettagli sullo SLAB sono accessibili in questa struttura proc, /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

All'avvio del sistema c'è una riga che riporta l'utilizzo della memoria del kernel Linux subito dopo che è stato caricato.

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

Riferimenti

  • Dove va la memoria? Utilizzo della memoria nel kernel 2.6

Che ne dici di questo:

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

È su una macchina molto piccola appena avviata che gira headless con un kernel normale. Quindi non richiede molto.

Come suggerisce derobert, il kernel utilizzerà la memoria disponibile per la memorizzazione nella cache e questo è molto di ciò che vedi in slabtop . Oltre alla cache dei file, ciò ha a che fare con la memoria condivisibile dai processi dello spazio utente che non è più in uso. Il kernel lo lascia lì fino a quando non viene richiesta di nuovo la stessa roba, oppure qualcosa ha attivamente bisogno di RAM, nel qual caso viene dimenticato. Un'analogia sarebbe prendere un libro da uno scaffale e aprirlo per leggerlo su un tavolo:quando hai finito di leggere, puoi lasciare il libro aperto sul tavolo nel caso avessi bisogno di guardarlo di nuovo.


Su questo server da 512 GB RAM che esegue Solaris, il kernel utilizza 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

Quello più piccolo ha più della metà della sua RAM utilizzata dal 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

Niente di cui preoccuparsi, la RAM inutilizzata è comunque RAM sprecata.


Linux
  1. Come usare il comando Linux grep

  2. Come usare il comando cronologia in Linux

  3. Linux:cosa implica il layout della memoria del kernel virtuale in Dmesg?

  4. Compilando il kernel Linux, quanta dimensione è necessaria?

  5. Come fa un kernel a montare la partizione di root?

Il kernel Linux:le 5 migliori innovazioni

Quanto swap dovresti usare in Linux?

Come posso riservare un blocco di memoria dal kernel Linux?

Come trovare informazioni sulla RAM?

Il kernel Linux 3.x utilizza lo scheduler del processo CFS?

In che modo Linux carica l'immagine "initrd"?