Quelle quantité de RAM le noyau utilise-t-il?

46

Cette question est motivée par mon choc lorsque j'ai découvert que le noyau Mac OS X utilise 750 Mo de RAM .

J'utilise Linux depuis 20 ans et j'ai toujours "su" que l'utilisation de la mémoire RAM du noyau est réduite à néant par X (est-il vrai? L'a-t-il jamais été vrai?).

Alors, après quelques recherches sur Google, j'ai essayé slabtopqui m'a dit:

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

Est-ce que cela signifie que mon noyau utilise environ 72 Mo de RAM maintenant?

(Etant donné que le RSS de ces toprapports Xorgest 17M, le noyau est maintenant plus petit que X, et non l’inverse).

Quelle est l'utilisation "normale" de la mémoire RAM du noyau (plage) pour un ordinateur portable?

Pourquoi MacOS utilise-t-il un ordre de grandeur supérieur à celui de Linux?

PS Aucune réponse ici abordée la dernière question, alors s'il vous plaît voir les questions connexes:

sds
la source
Sur ma machine, il rapporte presque 2 Go ... mais quand vous regardez les détails, tout est lié au cache du système de fichiers.
derobert
2
En effet, si je fais un echo 3 > /proc/sys/vm/drop_caches, alors je n'ai que 80 Mo utilisés.
derobert
Selon les commentaires dans le lien que vous avez fourni, la mémoire utilisée par le matériel graphique intégré est incluse dans la comptabilité kernel_task.
Russell Borogove

Réponses:

38

Le noyau est un peu impropre. Le noyau Linux est composé de plusieurs processus / threads + les modules ( lsmod). Ainsi, pour obtenir une image complète, vous devez examiner la totalité de la balle et non pas un seul composant.

Incidemment, le mien montre slabtop:

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

La page de manuel pour slabtopaussi avait ceci à dire:

L'en-tête statistique slabtop suit le nombre d'octets de dalles utilisés et non une mesure de la mémoire physique. Le champ "Slab" dans le fichier / proc / meminfo contient des informations de suivi sur la mémoire physique de la dalle utilisée.

Déposer des caches

Si je laisse tomber mes caches, comme @derobert l’a suggéré dans les commentaires sous votre question, a pour moi les avantages suivants:

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

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

L'envoi d'un 3 a les conséquences suivantes: pagecache, dentries et inodes gratuits. Je discute davantage de cela dans ce Q & A intitulé: existe-t-il des moyens ou des outils pour vider le cache mémoire et la mémoire tampon? ". Ainsi, 110 Mo de mon espace étaient utilisés simplement en maintenant les informations concernant pagecache, dentries et inodes.

Information additionnelle

  • Si vous êtes intéressé, j'ai trouvé cet article de blog qui décrit slabtopun peu plus en détail. Il s'intitule: Commande Linux du jour: slabtop .
  • Le cache de dalle est discuté plus en détail ici sur Wikipedia, intitulé: Allocation de dalle .

Alors, combien de RAM mon noyau utilise-t-il?

Cette image est un peu plus floue pour moi, mais voici les choses que je "pense" que nous savons.

Dalle

Nous pouvons obtenir un instantané de l'utilisation de la dalle en utilisant cette technique. Essentiellement, nous pouvons extraire cette information /proc/meminfo.

$ grep Slab /proc/meminfo
Slab:             100728 kB

Modules

Nous pouvons également obtenir une valeur de taille pour les modules du noyau (indiquez s'il s'agit de leur taille sur le disque ou en RAM) en extrayant ces valeurs 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

Slabinfo

Une grande partie des détails sur le SLAB sont accessibles dans cette structure de 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

Lorsque votre système démarre, une ligne indique l'utilisation de la mémoire du noyau Linux juste après son chargement.

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

Références

slm
la source
1
Y a-t-il un moyen d'obtenir l'image complète?
Gilles
@ Gilles - de combien de souvenirs en usage, non? Il semble que je me souvienne d'un Q concernant cela avant, vous?
slm
@Gilles - Je pense que cela est proche de ce que vous demandez au sujet: grep Slab /proc/meminfo.
slm
@Gilles - il y a aussi ceci:, /proc/slabinfoqui semble être la source slabtop, on peut donc calculer les montants à partir d'ici pour un décompte total plus précis.
slm
1
la colonne 2 de /proc/modulesest plus susceptible d'être chargée taille de la mémoire en mémoire que les modules sur disque sont normalement compressés (par exemple sur Fedora 27 c'est xz), j'ai vérifié tg3pilote NIC ne correspond pas à la taille en octets apparaissant dans /proc/modules.
Terry Wang
7

Que dis-tu de ça:

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

C'est sur une très petite machine fraîchement démarrée qui tourne sans tête avec un noyau normal. Donc, il n'en faut pas beaucoup.

Comme le suggère Derobert, le noyau utilisera la mémoire disponible pour la mise en cache, ce qui correspond à beaucoup de ce que vous voyez slabtop. En plus du cache de fichiers, cela concerne la mémoire partageable des processus de l'espace utilisateur qui n'est plus utilisée. Le noyau le laisse là jusqu'à ce que le même matériel soit de nouveau nécessaire ou que quelque chose ait activement besoin de mémoire vive (RAM), auquel cas il est oublié. Une analogie consisterait à retirer un livre d’une étagère et à l’ouvrir pour le lire sur une table: lorsque vous avez fini de lire, vous pouvez laisser le livre ouvert sur la table au cas où vous auriez besoin de le relire.

boucle d'or
la source
4

Sur ce serveur RAM de 512 Go sous Solaris, le noyau utilise 25 Go:

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

Ce plus petit a plus de la moitié de sa RAM utilisée par le noyau:

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

Rien à craindre, la RAM non utilisée est de toute façon une perte de RAM.

jlliagre
la source
1
Veuillez décrire comment vous avez réalisé votre sortie.
Maus
@Maus en s'exécutant echo ::memstat | mdb -ksur des serveurs de production Solaris 10 antérieurs à la mise à jour 10/09.
Juillet