So prüfen Sie, ob ein bestimmter Kernel-Speicherallokator in Linux verwendet wird

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir untersuchen, wie man prüft, ob ein bestimmter Kernel-Speicher-Allocator in Linux verwendet wird. Wir werden dies erreichen, indem wir die Allokator-Statistiken, die Kernel-Konfiguration und die Systemprotokolle untersuchen.

Zunächst verwenden wir cat /proc/slabinfo, um die Statistiken des Kernel-Slab-Allocators anzuzeigen, was uns Einblicke in die Speicherverwaltung gibt. Anschließend überprüfen wir den verwendeten Allokator, indem wir die Kernel-Konfigurationsdatei mit zcat /proc/config.gz untersuchen. Schließlich untersuchen wir die Allokator-Protokolle in dmesg auf relevante Informationen. Diese Schritte werden Ihnen helfen, zu verstehen, wie Sie den verwendeten Kernel-Speicher-Allocator identifizieren und überprüfen können.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/less("File Paging") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") subgraph Lab Skills linux/cat -.-> lab-558906{{"So prüfen Sie, ob ein bestimmter Kernel-Speicherallokator in Linux verwendet wird"}} linux/less -.-> lab-558906{{"So prüfen Sie, ob ein bestimmter Kernel-Speicherallokator in Linux verwendet wird"}} linux/grep -.-> lab-558906{{"So prüfen Sie, ob ein bestimmter Kernel-Speicherallokator in Linux verwendet wird"}} end

Überprüfen der Allokator-Statistiken mit cat /proc/slabinfo

In diesem Schritt werden wir untersuchen, wie man die Allokator-Statistiken mit dem Befehl cat /proc/slabinfo überprüft. Dieser Befehl bietet einen detaillierten Einblick in den Kernel-Slab-Allocator, der für die effiziente Speicherverwaltung verantwortlich ist. Das Verständnis dieser Informationen kann bei der Fehlersuche von speicherbezogenen Problemen und der Optimierung der Systemleistung hilfreich sein.

Zunächst führen wir den Befehl aus:

cat /proc/slabinfo

Dieser Befehl zeigt eine Liste von Slab-Caches zusammen mit ihren zugehörigen Statistiken an. Die Ausgabe kann zunächst überwältigend erscheinen, aber wir werden sie analysieren.

Hier ist ein Beispiel für die Ausgabe:

slabinfo - version: 2.1
kmem_cache            48     72    192    19    1    1
...
kmalloc-192           48     72    192    19    1    1
...

Jede Zeile repräsentiert einen Slab-Cache. Die Spalten liefern Informationen über den Cache, wie z. B.:

  • name: Der Name des Slab-Caches.
  • <active_objs>: Die Anzahl der aktiven Objekte im Cache.
  • <num_objs>: Die Gesamtanzahl der Objekte im Cache.
  • <objsize>: Die Größe jedes Objekts in Bytes.
  • <objperslab>: Die Anzahl der Objekte pro Slab.
  • <pagesperslab>: Die Anzahl der Seiten pro Slab.
  • <flags>: Flags, die mit dem Cache verknüpft sind.

Der kmem_cache ist ein allgemeiner Cache, während kmalloc-192 ein Cache für Objekte der Größe 192 Bytes ist.

Um die Ausgabe lesbarer zu machen, können Sie den less-Befehl verwenden:

cat /proc/slabinfo | less

Dadurch können Sie die Ausgabe seitenweise durchscrollen. Drücken Sie q, um less zu beenden.

Sie können auch grep verwenden, um die Ausgabe zu filtern und sich auf bestimmte Slab-Caches zu konzentrieren. Beispielsweise können Sie den folgenden Befehl verwenden, um Informationen über den kmalloc-192-Cache zu finden:

cat /proc/slabinfo | grep kmalloc-192

Dies zeigt nur die Zeilen an, die "kmalloc-192" enthalten.

Durch die Untersuchung der Ausgabe von cat /proc/slabinfo können Sie Einblicke in die Speicherverwaltung des Kernels gewinnen und potenzielle Optimierungsbereiche identifizieren.

Überprüfen des Allokators in zcat /proc/config.gz

In diesem Schritt werden wir die Allokator-Konfiguration überprüfen, indem wir die Kernel-Konfigurationsdatei untersuchen, die normalerweise komprimiert ist und sich unter /proc/config.gz befindet. Diese Datei enthält die Konfigurationsoptionen, die zum Bauen des Kernels verwendet wurden, einschließlich derjenigen, die sich auf die Speicherallokation beziehen.

Zunächst verwenden wir den zcat-Befehl, um die Konfigurationsdatei zu dekomprimieren und ihren Inhalt anzuzeigen:

zcat /proc/config.gz

Der zcat-Befehl ähnelt dem cat-Befehl, aber er dekomprimiert automatisch gzip-komprimierte Dateien. Die Ausgabe wird eine lange Liste von Kernel-Konfigurationsoptionen sein.

Um nach Allokator-bezogenen Optionen zu suchen, können wir grep verwenden, um die Ausgabe zu filtern. Beispielsweise können wir den folgenden Befehl verwenden, um Optionen zu finden, die sich auf den Slab-Allocator beziehen:

zcat /proc/config.gz | grep SLAB

Dies zeigt die Zeilen an, die "SLAB" enthalten. Sie könnten etwas wie Folgendes sehen:

CONFIG_SLAB=y
## CONFIG_SLAB_DEPRECATED is not set
CONFIG_SLUB=y
## CONFIG_SLOB is not set

Diese Optionen geben an, welcher Slab-Allocator im Kernel aktiviert ist. CONFIG_SLAB=y zeigt an, dass der ursprüngliche Slab-Allocator aktiviert ist, während CONFIG_SLUB=y anzeigt, dass der SLUB-Allocator aktiviert ist. Nur einer dieser Allokatoren sollte aktiviert sein. CONFIG_SLOB ist ein vereinfachter Allokator für eingebettete Systeme.

Sie können auch nach anderen Allokator-bezogenen Optionen suchen, wie beispielsweise denen, die sich auf den Page-Allocator (Seiten-Allokator) oder das Buddy-System beziehen. Beispielsweise:

zcat /proc/config.gz | grep PAGE_ALLOC

Dies zeigt Optionen an, die sich auf die Seitenallokation beziehen.

Durch die Untersuchung der Kernel-Konfigurationsdatei können Sie überprüfen, welcher Allokator verwendet wird und welche Optionen aktiviert sind. Dies kann hilfreich sein, um das Verhalten der Speicherverwaltung des Systems zu verstehen.

Prüfen der Allokator-Logs in dmesg

In diesem Schritt werden wir den Kernel-Meldungspuffer mit dem Befehl dmesg prüfen, um nach Logs in Bezug auf den Speicherallokator zu suchen. Der dmesg-Befehl zeigt Meldungen aus dem Kernel-Ringpuffer an, der wertvolle Informationen über Systemereignisse enthalten kann, einschließlich Speicherallokation und -freigabe.

Um die Kernel-Meldungen anzuzeigen, geben Sie einfach ein:

dmesg

Dies wird eine große Menge an Text ausgeben. Um die Ausgabe zu filtern und sich auf Allokator-bezogene Meldungen zu konzentrieren, können wir grep verwenden. Beispielsweise können Sie den folgenden Befehl verwenden, um Meldungen in Bezug auf den Slab-Allocator zu finden:

dmesg | grep slab

Sie könnten eine Ausgabe ähnlich der folgenden sehen:

[    0.000000] SLUB: HWalign slab flags
[    1.234567] kmem_cache_create: slab created at <memory_address>

Diese Meldungen können Informationen über die Erstellung, Zerstörung und andere Ereignisse von Slab-Caches liefern.

Sie können auch nach Meldungen in Bezug auf fehlgeschlagene Speicherallokationen suchen:

dmesg | grep alloc

Oder nach Meldungen in Bezug auf Speicherüberlauf-Situationen (Out-of-Memory, OOM):

dmesg | grep OOM

Diese Meldungen können Ihnen helfen, speicherbezogene Probleme zu diagnostizieren.

Um die Ausgabe besser zu verwalten, können Sie less verwenden, um durch die Meldungen zu scrollen:

dmesg | less

Drücken Sie q, um less zu beenden.

Durch die Prüfung der dmesg-Ausgabe können Sie Einblicke in das Verhalten des Speicherallokators gewinnen und potenzielle Probleme identifizieren.

Zusammenfassung

In diesem Lab haben wir untersucht, wie man die Statistiken des Kernel-Speicherallokators mit dem Befehl cat /proc/slabinfo prüfen kann. Dieser Befehl bietet einen detaillierten Einblick in den Slab-Allocator (Speicherblock-Allokator) des Kernels und zeigt eine Liste der Slab-Caches (Speicherblock-Caches) und deren zugehörige Statistiken an, einschließlich des Cache-Namens, der Anzahl der aktiven und gesamten Objekte, der Objektgröße, der Anzahl der Objekte pro Slab, der Anzahl der Seiten pro Slab und der Flags.

Wir haben auch gelernt, wie man less verwendet, um die Ausgabe besser lesbar zu machen, und grep, um die Ausgabe zu filtern und sich auf bestimmte Slab-Caches, wie z. B. kmalloc-192, zu konzentrieren. Durch die Prüfung der Ausgabe können wir Einblicke in die Speicherverwaltung des Kernels gewinnen.