So überprüfen Sie, ob eine bestimmte Kernel-Slab-Einstellung in Linux aktiv ist

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 lernen Sie, wie Sie prüfen können, ob eine bestimmte Kernel-Slab-Einstellung in Linux aktiv ist. Sie werden verschiedene Methoden zur Untersuchung der Speicherverwaltung des Kernels erkunden, wobei der Schwerpunkt speziell auf dem Slab-Allocator liegt.

Das Lab führt Sie durch den Prozess der Überprüfung der Slab-Statistiken mithilfe von /proc/slabinfo, der Überprüfung der zugehörigen Einstellungen mit sysctl vm und der Untersuchung der relevanten Protokolle in dmesg. Diese Schritte vermitteln Ihnen die erforderlichen Fähigkeiten, um das Verhalten des Kernel-Slabs zu verstehen und Probleme damit zu beheben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") subgraph Lab Skills linux/echo -.-> lab-558759{{"So überprüfen Sie, ob eine bestimmte Kernel-Slab-Einstellung in Linux aktiv ist"}} linux/cat -.-> lab-558759{{"So überprüfen Sie, ob eine bestimmte Kernel-Slab-Einstellung in Linux aktiv ist"}} linux/grep -.-> lab-558759{{"So überprüfen Sie, ob eine bestimmte Kernel-Slab-Einstellung in Linux aktiv ist"}} linux/env -.-> lab-558759{{"So überprüfen Sie, ob eine bestimmte Kernel-Slab-Einstellung in Linux aktiv ist"}} end

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

In diesem Schritt lernen Sie, wie Sie die Statistiken des Kernel-Slab-Allocators mithilfe der Datei /proc/slabinfo untersuchen können. Der Slab-Allocator ist ein Speicherverwaltungsmechanismus, den der Linux-Kernel verwendet, um kleine Objekte effizient zu verwalten. Das Verständnis der Slab-Nutzung kann hilfreich sein, um Speicherbezogene Probleme zu diagnostizieren.

Das /proc-Dateisystem ist ein virtuelles Dateisystem, das Informationen über Prozesse und andere Systeminformationen bereitstellt. /proc/slabinfo enthält speziell Details über die Slab-Caches des Kernels.

Um den Inhalt von /proc/slabinfo anzuzeigen, verwenden Sie den Befehl cat. cat ist ein Standard-Unix-Werkzeug, das Dateien sequenziell liest und sie an die Standardausgabe schreibt.

Öffnen Sie Ihr Terminal, wenn es noch nicht geöffnet ist. Sie können dies tun, indem Sie auf das Symbol Xfce Terminal auf der linken Seite des Desktops klicken.

Geben Sie jetzt den folgenden Befehl ein und drücken Sie die Eingabetaste:

cat /proc/slabinfo

Sie werden eine Ausgabe ähnlich der folgenden sehen (der genaue Inhalt variiert je nach Systemaktivität):

slabinfo - version: 2.1
## name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
nf_conntrack_expect      0      0    128   63    1 : tunables    0    0    0 : slabdata      0      0      0
nf_conntrack      10     10    320   25    2 : tunables    0    0    0 : slabdata      1      1      0
request_sock_TCP      0      0    192   42    1 : tunables    0    0    0 : slabdata      0      0      0
... (viele weitere Zeilen)

Lassen Sie uns die Ausgabe analysieren:

  • name: Der Name des Slab-Caches (z.B. nf_conntrack, request_sock_TCP).
  • <active_objs>: Die Anzahl der Objekte, die derzeit in diesem Cache verwendet werden.
  • <num_objs>: Die Gesamtanzahl der in diesem Cache zugewiesenen Objekte.
  • : Die Größe jedes Objekts in Bytes.
  • : Die Anzahl der Objekte, die in einen einzelnen Slab passen.
  • : Die Anzahl der Speicherseiten, die von einem einzelnen Slab verwendet werden.
  • tunables: Parameter, die für diesen Cache eingestellt werden können.
  • slabdata: Informationen über die Slabs selbst.

Diese Ausgabe bietet einen Momentanbild davon, wie der Kernel den Speicher für verschiedene interne Datenstrukturen nutzt. Obwohl die Rohausgabe umfangreich sein kann, ist sie eine grundlegende Informationsquelle für die erweiterte Fehlerbehebung in Linux.

Sie haben die Slab-Allocator-Statistiken erfolgreich angezeigt. Klicken Sie auf Weiter, um mit dem nächsten Schritt fortzufahren.

Überprüfen der Slab-Einstellungen mit sysctl vm

In diesem Schritt werden Sie Kernel-Parameter im Zusammenhang mit virtueller Arbeitsspeicherverwaltung (Virtual Memory, VM) und dem Slab-Allocator mithilfe des Befehls sysctl untersuchen. sysctl ist ein Werkzeug, das es Ihnen ermöglicht, Kernel-Parameter zur Laufzeit anzuzeigen und zu ändern.

Kernel-Parameter sind Konfigurationsoptionen, die das Verhalten des Linux-Kernels beeinflussen. Viele dieser Parameter befinden sich im /proc/sys-Dateisystem. sysctl bietet eine bequeme Möglichkeit, auf diese Parameter zuzugreifen und sie zu verwalten, ohne direkt mit den Dateien in /proc/sys zu interagieren.

Wir interessieren uns für Parameter im Zusammenhang mit virtueller Arbeitsspeicherverwaltung, die oft Einstellungen enthalten, die die Speicherverwaltung beeinflussen, einschließlich Aspekte des Slab-Allocators. Diese Parameter sind typischerweise unter dem vm-Unterbaum gruppiert.

Um alle Kernel-Parameter im Zusammenhang mit virtueller Arbeitsspeicherverwaltung anzuzeigen, verwenden Sie den sysctl-Befehl mit dem vm-Argument:

sysctl vm

Geben Sie den Befehl in Ihrem Terminal ein und drücken Sie die Eingabetaste. Sie werden eine Liste von Parametern und ihren aktuellen Werten sehen, ähnlich wie folgt:

vm.admin_reserve_kbytes = 8192
vm.block_dump = 0
vm.compact_memory = 0
vm.compact_unevictable_percentage = 1
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 20
vm.dirtytime_expire_seconds = 43200
vm.drop_caches = 0
vm.extfrag_threshold = 500
vm.highmem_is_dirtyable = 0
vm.laptop_mode = 0
vm.lowmem_reserve_ratio = 256   256     32      0       0
vm.max_map_count = 65530
vm.min_free_kbytes = 67584
vm.min_slab_ratio = 5
vm.min_unmapped_ratio = 1
vm.mmap_min_addr = 65536
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.nr_overcommit_hugepages = 0
vm.numa_balancing = 1
vm.numa_balancing_scan_delay_ms = 1000
vm.numa_balancing_scan_period_min_ms = 20
vm.numa_balancing_scan_period_max_ms = 10000
vm.numa_balancing_scan_size_mb = 32
vm.overcommit_memory = 0
vm.overcommit_ratio = 50
vm.page-cluster = 3
vm.panic_on_oom = 0
vm.percpu_pagelist_fraction = 0
vm.stat_interval = 1
vm.swappiness = 60
vm.user_reserve_kbytes = 131072
vm.vfs_cache_pressure = 100

Suchen Sie nach Parametern, die möglicherweise mit Caching oder Speicherdruck im Zusammenhang stehen, wie vm.vfs_cache_pressure oder vm.min_slab_ratio. Diese Parameter können beeinflussen, wie der Kernel verschiedene Arten von Caches verwaltet, einschließlich Slab-Caches.

Sie können auch einen bestimmten Parameter anzeigen, indem Sie seinen vollständigen Namen angeben. Beispielsweise, um den Wert von vm.vfs_cache_pressure anzuzeigen:

sysctl vm.vfs_cache_pressure

Dieser Befehl wird die folgende Ausgabe liefern:

vm.vfs_cache_pressure = 100

Der Parameter vm.vfs_cache_pressure steuert die Tendenz des Kernels, den Speicher, der für das Caching von Verzeichnis- und Inode-Objekten verwendet wird, freizugeben. Ein höherer Wert bedeutet, dass der Kernel aggressiver bei der Freigabe dieses Speichers ist.

Das Verständnis dieser Parameter kann Ihnen helfen, das Speicherverhalten Ihres Systems zu optimieren.

Klicken Sie auf Weiter, um zum nächsten Schritt zu gelangen.

Prüfen der Slab-Protokolle in dmesg

In diesem letzten Schritt lernen Sie, wie Sie den Kernel-Nachrichtenpuffer auf Nachrichten im Zusammenhang mit dem Slab-Allocator mithilfe des Befehls dmesg überprüfen können. Der Kernel-Nachrichtenpuffer speichert Nachrichten, die vom Kernel während des Bootvorgangs und der Laufzeit erzeugt werden. Diese Nachrichten können Informationen über Hardware, Gerätetreiber und Kernel-Subsysteme wie den Slab-Allocator enthalten.

Der Befehl dmesg wird verwendet, um den Kernel-Ringpuffer auszugeben oder zu steuern. Dieser Puffer enthält Nachrichten vom Kernel, die oft für das Debugging und die Fehlerbehebung nützlich sind.

Um den gesamten Kernel-Nachrichtenpuffer anzuzeigen, können Sie einfach dmesg ausführen:

dmesg

Allerdings kann die Ausgabe sehr lang sein. Um speziell Nachrichten im Zusammenhang mit dem Slab-Allocator zu finden, können Sie die Ausgabe von dmesg an den grep-Befehl weiterleiten und nach Schlüsselwörtern wie "slab" oder "SLUB" (SLUB ist eine moderne Implementierung des Slab-Allocators) suchen.

Geben Sie den folgenden Befehl in Ihrem Terminal ein und drücken Sie die Eingabetaste:

dmesg | grep -i "slab\|slub"

Lassen Sie uns diesen Befehl analysieren:

  • dmesg: Gibt den Kernel-Nachrichtenpuffer aus.
  • |: Dies ist eine Pipe, die die Ausgabe des linken Befehls als Eingabe an den rechten Befehl sendet.
  • grep: Ein Befehlszeilen-Werkzeug zum Suchen in Textdateien nach Zeilen, die einem regulären Ausdruck entsprechen.
  • -i: Diese Option macht die Suche unabhängig von Groß- und Kleinschreibung, sodass es "slab", "SLAB", "slub", "SLUB" usw. findet.
  • "slab\|slub": Dies ist das Suchmuster. slab sucht nach dem Wort "slab", \| fungiert als OR-Operator und slub sucht nach dem Wort "slub".

Die Ausgabe zeigt alle Zeilen aus dem Kernel-Nachrichtenpuffer, die "slab" oder "slub" (unabhängig von Groß- und Kleinschreibung) enthalten. Sie könnten Nachrichten im Zusammenhang mit der Initialisierung des Slab-Allocators während des Bootvorgangs oder potenzielle Warnungen oder Fehler sehen, wenn es Probleme gibt.

[    0.000000] kmem_cache_init
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] SLUB: TotalObjects=0, ObjectsPerSpan=0, SpansPerChunk=0
[    0.000000] SLUB: min_objects.limit=0, min_objects.batchcount=0
[    0.000000] SLUB: tunables.limit=0, tunables.batchcount=0, tunables.sharedfactor=0
[    0.000000] SLUB: Not setting slab_nomerge.
[    0.000000] SLUB: Not setting slab_debug.
[    0.000000] SLUB: Not setting slab_max_order.
[    0.000000] SLUB: Not setting slab_alias_debug.
[    0.000000] SLUB: Not setting slab_pad.
[    0.000000] SLUB: Not setting slab_red_zone.
[    0.000000] SLUB: Not setting slab_poison.
[    0.000000] SLUB: Not setting slab_freelist_debug.
[    0.000000] SLUB: Not setting slab_freelist_random.
[    0.000000] SLUB: Not setting slab_freelist_hardened.
[    0.000000] SLUB: Not setting slab_trace.
[    0.000000] SLUB: Not setting slab_reclaim_account.
[    0.000000] SLUB: Not setting slab_way.
[    0.000000] SLUB: Not setting slab_sizes.
[    0.000000] SLUB: Not setting slab_caches.
[    0.000000] SLUB: Not setting slab_test.
[    0.000000] SLUB: Not setting slab_order.
[    0.000000] SLUB: Not setting slab_debug_objects.
[    0.000000] SLUB: Not setting slab_debug_memcg.
[    0.000000] SLUB: Not setting slab_debug_check_objects.
[    0.000000] SLUB: Not setting slab_debug_check_freelist.
[    0.000000] SLUB: Not setting slab_debug_check_alloc.
[    0.000000] SLUB: Not setting slab_debug_check_free.
[    0.000000] SLUB: Not setting slab_debug_check_redzone.
[    0.000000] SLUB: Not setting slab_debug_check_poison.
[    0.000000] SLUB: Not setting slab_debug_check_trace.
[    0.000000] SLUB: Not setting slab_debug_check_reclaim_account.
[    0.000000] SLUB: Not setting slab_debug_check_way.
[    0.000000] SLUB: Not setting slab_debug_check_sizes.
[    0.000000] SLUB: Not setting slab_debug_check_caches.
[    0.000000] SLUB: Not setting slab_debug_check_test.
[    0.000000] SLUB: Not setting slab_debug_check_order.
[    0.000000] SLUB: Not setting slab_debug_check_debug_objects.
[    0.000000] SLUB: Not setting slab_debug_check_debug_memcg.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_objects.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_freelist.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_alloc.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_free.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_redzone.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_poison.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_trace.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_reclaim_account.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_way.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_sizes.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_caches.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_test.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_order.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_debug_objects.
[    0.000000] SLUB: Not setting slab_debug_check_debug_check_debug_memcg.

Dieser Befehl ist eine leistungsstarke Möglichkeit, Kernel-Nachrichten zu filtern und relevante Informationen für die Fehlerbehebung spezieller Kernel-Subsysteme zu finden.

Sie haben nun gelernt, wie Sie Slab-Statistiken prüfen, die zugehörigen Kernel-Parameter überprüfen und die Kernel-Protokolle auf Slab-bezogene Nachrichten untersuchen können. Dies sind grundlegende Fähigkeiten für das Verständnis und die Diagnose der Speichernutzung in Linux.

Klicken Sie auf Weiter, um dieses Lab abzuschließen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie die Kernel-Slab-Einstellungen in Linux überprüfen können. Sie haben begonnen, indem Sie die Statistiken des Kernel-Slab-Allocators mithilfe der Datei /proc/slabinfo untersucht haben. Diese Datei bietet Details über aktive Objekte, Gesamtanzahl von Objekten, Objektgröße und andere relevante Informationen für verschiedene Slab-Caches. Dieser Schritt hat gezeigt, wie Sie den cat-Befehl verwenden können, um diese wichtigen Daten zur Speicherverwaltung anzuzeigen.

Als Nächstes haben Sie die Slab-Einstellungen mithilfe des Befehls sysctl vm überprüft. Dieser Befehl ermöglicht es Ihnen, Kernel-Parameter im Zusammenhang mit virtueller Arbeitsspeicherverwaltung (Virtual Memory, VM) zu untersuchen und zu ändern, einschließlich Slab-spezifischer Einstellungen. Schließlich haben Sie gelernt, wie Sie die Slab-bezogenen Protokolle in dmesg, dem Kernel-Nachrichtenpuffer, untersuchen können, um eventuelle Fehler oder Warnungen im Zusammenhang mit dem Slab-Allocator zu identifizieren. Diese Schritte bieten insgesamt einen umfassenden Ansatz zum Verständnis und zur Fehlerbehebung des Kernel-Slab-Verhaltens.