Wie viel RAM verbraucht der Kernel?

46

Diese Frage ist durch meinen Schock motiviert , als ich feststellte, dass der Mac OS X-Kernel 750 MB RAM verwendet .

Ich benutze Linux seit 20 Jahren und habe immer "gewusst", dass die Kernel-RAM-Nutzung von X in den Schatten gestellt wird (stimmt das? Stimmt das jemals?).

Also slabtophabe ich nach einigem googeln versucht, was mir sagte:

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

Bedeutet dies, dass mein Kernel jetzt ~ 72 MB RAM verwendet?

(Da die topBerichte Xorghier dargestellten RSS als 17M, der Kernel nun Zwerge X, nicht umgekehrt).

Was ist die "normale" RAM-Auslastung (Reichweite) des Kernels für einen Laptop?

Warum verwendet MacOS um eine Größenordnung mehr RAM als Linux?

PS. Die letzte Frage wurde hier nicht beantwortet. Siehe dazugehörige Fragen:

sds
quelle
Auf meinem Computer werden fast 2 GB gemeldet ... aber wenn Sie sich die Details ansehen, hängt das alles mit dem Dateisystem-Cache zusammen.
Derobert
2
In der Tat, wenn ich eine mache echo 3 > /proc/sys/vm/drop_caches, dann habe ich nur 80MB verwendet.
Derobert
Gemäß den Kommentaren in dem von Ihnen bereitgestellten Link ist der von der integrierten Grafikhardware verwendete Speicher in der Abrechnung von kernel_task enthalten.
Russell Borogove

Antworten:

38

Kernel ist ein bisschen eine Fehlbezeichnung. Der Linux-Kernel besteht aus mehreren Prozessen / Threads + den Modulen ( lsmod). Um ein vollständiges Bild zu erhalten, muss man den gesamten Ball betrachten und nicht nur eine einzelne Komponente.

Übrigens zeigt mir slabtop:

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

Die Manpage für hatte slabtopauch folgendes zu sagen:

Der Slabtop-Statistikheader verfolgt, wie viele Bytes von Slabs verwendet werden, und ist kein Maß für den physischen Speicher. Das Feld 'Platte' in der Datei / proc / meminfo enthält Informationen zum verwendeten physischen Plattenspeicher.

Löschen von Caches

Meine Caches als Dropping @derobert vorgeschlagen in den Kommentaren unter Ihrer Frage tut die folgende für mich:

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

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

Das Senden einer 3 bewirkt Folgendes: Freier Pagecache, Einträge und Inodes. Ich diskutiere dies mehr in dieser U & L-Frage & Antwort mit dem Titel: Gibt es Möglichkeiten oder Werkzeuge, um den Speichercache und den Puffer zu sichern? Msgstr "" "110 MB meines Speicherplatzes wurden verwendet, indem nur die Informationen zu Pagecache, Einträgen und Inodes gepflegt wurden.

zusätzliche Information

  • Wenn Sie interessiert sind, habe ich diesen Blog-Beitrag gefunden, slabtopin dem etwas mehr Details besprochen werden . Es heißt: Linux-Befehl des Tages: slabtop .
  • Der Platten-Cache wird hier auf Wikipedia unter dem Titel " Plattenzuordnung" ausführlicher beschrieben .

Wie viel RAM verbraucht mein Kernel?

Dieses Bild ist ein bisschen nebliger für mich, aber hier sind die Dinge, von denen ich denke, dass wir sie kennen.

Platte

Mit dieser Technik können wir eine Momentaufnahme der Verwendung von Slab erstellen. Grundsätzlich können wir diese Informationen herausholen /proc/meminfo.

$ grep Slab /proc/meminfo
Slab:             100728 kB

Module

Außerdem können wir einen Größenwert für Kernel-Module ermitteln (unklar, ob es sich um die Größe auf der Festplatte oder im RAM handelt), indem wir diese Werte aus /proc/modulesfolgenden Quellen abrufen :

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

Slabinfo

Viele Details zum SLAB sind in dieser Proc-Struktur verfügbar /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

Wenn Ihr System hochfährt, gibt es eine Zeile, die die Speichernutzung des Linux-Kernels direkt nach dem Laden meldet.

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

Verweise

slm
quelle
1
Gibt es sowieso, um das komplette Bild zu bekommen?
Gilles
@Gilles - wie viele Erinnerungen werden verwendet, richtig? Ich scheine mich an eine Frage zu erinnern, Sie?
slm
@Gilles - Ich denke , das ist in der Nähe zu dem, was Sie sind gefragt: grep Slab /proc/meminfo.
slm
@ Gilles - es gibt auch dieses:, /proc/slabinfowelches die Quelle zu sein scheint slabtop, so dass man die Beträge von hier für eine genauere Gesamtzählung berechnen könnte.
slm
1
Spalte 2 von /proc/moduleswird mit größerer Wahrscheinlichkeit Modulgröße in den Speicher geladen, da On-Disk-Module normalerweise komprimiert sind (z. B. auf Fedora 27 ist es xz). Ich habe den tg3NIC-Treiber überprüft , was die On-Disk-Größe (entweder komprimierte oder ursprüngliche Dateigröße) tut stimmt nicht mit der Bytegröße überein, die in angezeigt wird /proc/modules.
Terry Wang
7

Wie wäre es damit:

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

Das ist auf einer frisch gebooteten, sehr kleinen Maschine, die kopflos mit einem normalen Kernel läuft . Es braucht also nicht viel.

Wie derobert andeutet, wird der Kernel den verfügbaren Speicher für das Caching nutzen und das ist eine Menge, was Sie in sehen slabtop. Dies hat neben dem Dateicache mit dem gemeinsam nutzbaren Speicher von nicht mehr verwendeten Userspace-Prozessen zu tun. Der Kernel belässt es dort, bis entweder dasselbe Zeug wieder benötigt wird oder etwas aktiv RAM benötigt, in welchem ​​Fall es vergessen wird. Eine Analogie wäre, ein Buch aus einem Regal zu nehmen und es zum Lesen auf einen Tisch zu legen: Wenn Sie mit dem Lesen fertig sind, können Sie das Buch auf dem Tisch offen lassen, falls Sie es noch einmal ansehen müssen.

Goldlöckchen
quelle
4

Auf diesem 512-GB-RAM-Server unter Solaris verwendet der Kernel 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

Das kleinere hat mehr als die Hälfte des vom Kernel verwendeten RAM:

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

Kein Grund zur Sorge, ungenutzter Arbeitsspeicher ist ohnehin verschwendeter Arbeitsspeicher.

jlliagre
quelle
1
Bitte beschreiben Sie, wie Sie Ihren Output erzielt haben.
Maus
@Maus wird echo ::memstat | mdb -kauf einigen Solaris 10-Produktionsservern ausgeführt, die älter sind als Update 10/09.
Juli