/proc/slabinfo

Der Slab-Allocator wird zur effizienten internen Speicherverwaltung genutzt. Er verwaltet häufig genutzte Kernelobjekte und stellt diese bei Bedarf schon vorinitialisiert zur Verfügung.

Beispiel

# cat /proc/slabinfo
slabinfo - version: 2.1
# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
nfs_direct_cache       0      0    136   28    1 : tunables  120   60    8 : slabdata      0      0      0
nfs_write_data        36     40    896    4    1 : tunables   54   27    8 : slabdata     10     10      0
nfs_read_data         32     36    832    9    2 : tunables   54   27    8 : slabdata      4      4      0
nfs_inode_cache    17742  19113   1032    3    1 : tunables   24   12    8 : slabdata   6371   6371      0
nfs_page               0      0    128   30    1 : tunables  120   60    8 : slabdata      0      0      0
rpc_buffers            8      8   2048    2    1 : tunables   24   12    8 : slabdata      4      4      0
rpc_tasks             20     20    384   10    1 : tunables   54   27    8 : slabdata      2      2      0
rpc_inode_cache       16     25    768    5    1 : tunables   54   27    8 : slabdata      5      5      0
ip_fib_alias           9    118     64   59    1 : tunables  120   60    8 : slabdata      2      2      0
ip_fib_hash            9    118     64   59    1 : tunables  120   60    8 : slabdata      2      2      0
bio_map_info         100    105   1064    7    2 : tunables   24   12    8 : slabdata     15     15      0
dm_mpath               0      0   1064    7    2 : tunables   24   12    8 : slabdata      0      0      0
dm_uevent              0      0   2608    3    2 : tunables   24   12    8 : slabdata      0      0      0
dm_tio                 0      0     24  144    1 : tunables  120   60    8 : slabdata      0      0      0
dm_io                  0      0     48   77    1 : tunables  120   60    8 : slabdata      0      0      0
jbd_4k                 0      0   4096    1    1 : tunables   24   12    8 : slabdata      0      0      0
scsi_cmd_cache         2     20    384   10    1 : tunables   54   27    8 : slabdata      2      2      0
[...]

Aufbau

Erste Zeile

Version der Implementierung und ggf. der Hinweis zusätzliche statistische Informationen ((statistics))

Zweite Zeile
Bezeichnung der einzelnen Tabellenspalten
Spalte 1 - name
Name des Caches
Spalte 2 - active_objs
Anzahl der gegenwärtig aktiven Objekte
Spalte 3 - num_objs
Gesamtzahl der verfügbaren Objekte (belegt und unbelegt)
Spalte 4 - objsize
Größe jedes Objektes in Bytes
Spalte 5 - objperslab
Objekte pro Slab
Spalte 6 - pagesperslab
Pages pro Slab
Spalten 7 und 8 - ": tunables"
Anfang des Abschnitts mit veränderbaren Einstellungen
Spalte 9 - limit
Maximale Objektanzahl pro CPU-Cache
Spalte 10 - batchcount
Maximal Anzahl von Objekten, die gleichzeitig zwischen globalen und CPU-Cache verschobene werden.
Die Objekte werden vom globalen in den CPU-Cache verschoben, wenn dieser leer ist.
Ist ein CPU-Cache voll, werden die Objekte zurück in den globalen Cache verschoben
Dieser Wert beschreibt wahrscheinlich auch die maximale Anzahl der Objekte, die auf einmal angelegt bzw. freigegeben werden.
Spalte 11 - sharedfactor
Dieser Parameter steuert die Verteilung auf SMP-Systemen
Spalten 12 und 13 - ": slabdata"
Spalte 14 - active_slabs
Aktive Slabs - Slabs mit mindestens einem aktiven Objekt
Spalte 15 - num_slabs
Gesamtzahl der Slabs in diesem Cache
Spalte 16 - sharedavail
Zeigt wahrscheinlich, ob die Verteilung von Slabs auf SMP-Systemen aktiv oder inaktiv ist

Informationen in Echtzeit anzeigen

Mit slabtop lassen sich Slab-Statistiken analog zu top in Echtzeit anzeigen. Details zur Sortierung der Einträge enthält die Manpage.

# slabtop
 Active / Total Objects (% used)    : 575599 / 663892 (86.7%)
 Active / Total Slabs (% used)      : 50177 / 50182 (100.0%)
 Active / Total Caches (% used)     : 92 / 143 (64.3%)
 Active / Total Size (% used)       : 210801.75K / 225399.89K (93.5%)
 Minimum / Average / Maximum Object : 0.02K / 0.34K / 128.00K

  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME
330600 267264  80%    0.09K   8265       40     33060K buffer_head
123552 122385  99%    0.21K   6864       18     27456K dentry_cache
 90105  90086  99%    0.74K  18021        5     72084K ext3_inode_cache
[...]

Einstellungen ändern

Die Slab-Einstellungen mit dem folgende Kommando ändern:

# echo "<name> <limit> <batchcount> <sharedfactor>" > /proc/slabinfo

Wenn der Kernel mit Unterstützung für Slab Cache Statistiken kompiliert wurde, stehen noch weitere Spalten mit zusätzliche Informationen bereit.

Weitere Informationen

Kern-Technik
Linux Magazin 2005/06 Seite 82 ff
Sven Krohlas, "Der Slab-Allocator"

http://www.krohlas.de/computing/slab_allocator.pdf

Jeff Bonwick, "The Slab Allocator"

Usenix 1994 http://www.usenix.org/publications/library/proceedings/bos94/full_papers/bonwick.ps

Jeff Bonwick, "Extending the Slab Allocator to May CPUs and Arbitrary Resources"

http://www.usenix.org/events/usenix01/full_papers/bonwick/bonwick.pdf

Slabinfo Manpage

http://man7.org/linux/man-pages/man5/slabinfo.5.html

M. Tim Jones - Anatomy of the Linux slab allocator

http://www.ibm.com/developerworks/linux/library/l-linux-slab-allocator/

proc/slabinfo (zuletzt geändert am 2014-10-22 18:01:41 durch p54B3BA35)