内核的模块在分配资源的时候,为了提高效率和资源的利用率,都是透过slab来分配的。linux系统透过/proc/slabinfo来向用户显示slab的使用情况。
[root@centos6-mysql-172 ~]# 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>
bridge_fdb_cache 0 0 64 59 1 : tunables 120 60 0 : slabdata 0 0 0
nf_conntrack_expect 0 0 240 16 1 : tunables 120 60 0 : slabdata 0 0 0
nf_conntrack_ffffffff81f6f600 0 0 304 13 1 : tunables 54 27 0 : slabdata 0 0 0
iser_descriptors 0 0 128 30 1 : tunables 120 60 0 : slabdata 0 0 0
ib_mad 0 0 448 8 1 : tunables 54 27 0 : slabdata 0 0 0
fib6_nodes 22 59 64 59 1 : tunables 120 60 0 : slabdata 1 1 0
ip6_dst_cache 13 24 320 12 1 : tunables 54 27 0 : slabdata 2 2 0
ndisc_cache 1 10 384 10 1 : tunables 54 27 0 : slabdata 1 1 0
ip6_mrt_cache 0 0 128 30 1 : tunables 120 60 0 : slabdata 0 0 0
RAWv6 4 4 1024 4 1 : tunables 54 27 0 : slabdata 1 1 0
UDPLITEv6 0 0 1024 4 1 : tunables 54 27 0 : slabdata 0 0 0
UDPv6 0 0 1024 4 1 : tunables 54 27 0 : slabdata 0 0 0
tw_sock_TCPv6 0 0 320 12 1 : tunables 54 27 0 : slabdata 0 0 0
request_sock_TCPv6 0 0 192 20 1 : tunables 120 60 0 : slabdata 0 0 0
TCPv6 2 2 1920 2 1 : tunables 24 12 0 : slabdata 1 1 0
ext4_groupinfo_1k 25 30 128 30 1 : tunables 120 60 0 : slabdata 1 1 0
jbd2_1k 0 0 1024 4 1 : tunables 54 27 0 : slabdata 0 0 0
ext4_groupinfo_4k 1840 1848 136 28 1 : tunables 120 60 0 : slabdata 66 66 0
ext4_inode_cache 35498 35500 880 4 1 : tunables 54 27 0 : slabdata 8875 8875 0
这里以ext4_inode_cache为例说明各参数:
name:slab object名称;
active_objs:活跃的对象个数;
num_objs:总的对象个数;
objsize:每个对象的大小,以字节为单位;
objperslab:每个slab包含的ext4_inode_cache对象数目;
pageperslab:tunable:一个slab占几个page内存页,一个slab的大小为880*4=3440,小于内存页大小4096,所以一个slab只占用一个内存页;
limit:每个 CPU 可以缓存的对象的最大数量;
batchcount:当缓存为空时转换到每个 CPU 缓存中全局缓存对象的最大数量;
sharedfactor:说明了对称多处理器(Symmetric MultiProcessing,SMP)系统的共享行为;
active_slabs:活跃的slab数目;
num_slabs:总的slab数目;
除了通过以上方式查看slab信息外,还可以通过slabtop查看
slabtop选项:
--delay=n, -d n #每n秒更新一次显示的信息,默认是每3秒
--sort=S, -s S #指定排序标准进行排序(排序标准,参照下面或者man手册)
--once, -o #显示一次后退出
--version, -V #显示版本
--help #显示帮助信息排序标准:
a: sort by number of active objects
b: sort by objects per slab
c: sort by cache size
l: sort by number of slabs
v: sort by number of active slabs
n: sort by name
o: sort by number of objects
p: sort by pages per slab
s: sort by object size
u: sort by cache utilization
[root@centos6-mysql-172 ~]# slabtop -sc
Active / Total Objects (% used) : 572393 / 577032 (99.2%)
Active / Total Slabs (% used) : 27855 / 27855 (100.0%)
Active / Total Caches (% used) : 98 / 192 (51.0%)
Active / Total Size (% used) : 102383.42K / 103045.42K (99.4%)
Minimum / Average / Maximum Object : 0.02K / 0.18K / 4096.00K
OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
402597 402587 99% 0.10K 10881 37 43524K buffer_head
35500 35498 99% 0.86K 8875 4 35500K ext4_inode_cache
48260 48249 99% 0.19K 2413 20 9652K dentry
9065 9048 99% 0.55K 1295 7 5180K inode_cache
8631 8618 99% 0.55K 1233 7 4932K radix_tree_node
13608 13607 99% 0.14K 504 27 2016K sysfs_dir_cache
2610 2454 94% 0.61K 435 6 1740K proc_inode_cache
536 533 99% 2.00K 268 2 1072K size-2048
800 796 99% 1.00K 200 4 800K size-1024
95 95 100% 6.30K 95 1 760K task_struct
7314 7304 99% 0.07K 138 53 552K selinux_inode_security
750 740 98% 0.62K 125 6 500K shmem_inode_cache
13328 13227 99% 0.03K 119 112 476K size-32
同样以ext4_inode_cache为例,说明各参数:
OBJS:总的对象个数;
ACTIVE:活跃的对象个数;
USE:活跃对象比例;
OBJ SIZE:对象大小;
SLABS:每个CPU可以缓存Slab的最大数目;
OBJ/SLABS:每个slab包含多少个对象;
CACHE Size:缓存大小;