【内存管理】【slab】/sys/kernel/slab/<slab name>/trace解析

目录

什么是/sys/kernel/slab//trace?

/sys/kernel/slab//trace的作用

/sys/kernel/slab//trace使用方法


什么是/sys/kernel/slab/<slab name>/trace?

首先是看下官方文档里的相关介绍:

https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-kernel-slab

What:		/sys/kernel/slab/cache/trace
Date:		May 2007
KernelVersion:	2.6.22
Contact:	Pekka Enberg <penberg@cs.helsinki.fi>,
		Christoph Lameter <cl@linux-foundation.org>
Description:
		The trace file specifies whether object allocations and frees
		should be traced.

说明:trace文件指定是否应跟踪对象的分配和释放。

通过trace文件,可以动态的去查看当前哪些函数申请和释放了具体的数据结构实例

(Ps:先通过slabinfo查看有哪些对象,再进入到对应的目录下,查看该对象被调用的堆栈信息)


/sys/kernel/slab/<slab name>/trace的作用

  • 通常我们首先通过/proc/slabinfo,查看当前的部分可能被频繁分配和释放的数据结构实例;
  • 再通过/sys/kernel/slab,更详细的了解某一个具体的数据结构实例的分配和释放情况;
  • /sys/kernel/slab/<slab name>/alloc_calls ,alloc_calls为只读文件,列出了从中执行此高速缓存分配的内核代码位置。
  • /sys/kernel/slab/<slab name>/free_calls ,free_calls为只读文件,用来列举所有对象被释放的位置。
  • /sys/kernel/slab/<slab name>/trace ,trace文件指定是否应跟踪对象的分配和释放。

通过trace文件,可以动态的去查看当前哪些函数申请和释放了具体的数据结构实例。


/sys/kernel/slab/<slab name>/trace使用方法

echo 1 > /sys/kernel/slab/<slab name>/trace  //开启trace追踪,slab会将该成员的所有调用栈信息打印出来
sleep 10
echo 0 > /sys/kernel/slab/<slab name>/trace  //因为开启trace追踪后,会不断的打印,需要重新设置trace为0后才会停止

Ps:因为开启trace可能导致系统输入输出无响应,关闭操作最好放到脚本中做

打印的slab trace大概长这样:

[ 1920.528920] TRACE kmalloc-4096 alloc 0xc2ec53c0 inuse=7 fp=0x  (null)
[ 1920.528927] CPU: 2 PID: 1904 Comm: ps Tainted: G           O   3.18.24_hi3798cv2x #1
[ 1920.528943] [<c0017b58>] (unwind_backtrace) from [<c00132b8>] (show_stack+0x20/0x24)
[ 1920.528951] [<c00132b8>] (show_stack) from [<c0d50af8>] (dump_stack+0x80/0xcc)
[ 1920.528961] [<c0d50af8>] (dump_stack) from [<c0112c60>] (alloc_debug_processing+0xc8/0x170)
[ 1920.528968] [<c0112c60>] (alloc_debug_processing) from [<c0113734>] (__slab_alloc.constprop.9+0x2e8/0x3bc)
[ 1920.528974] [<c0113734>] (__slab_alloc.constprop.9) from [<c0113a04>] (__kmalloc+0x1fc/0x224)
[ 1920.528980] [<c0113a04>] (__kmalloc) from [<c013edb4>] (seq_buf_alloc+0x20/0x44)
[ 1920.528984] [<c013edb4>] (seq_buf_alloc) from [<c013f41c>] (seq_read+0x314/0x4a0)
[ 1920.528990] [<c013f41c>] (seq_read) from [<c011c7fc>] (vfs_read+0x9c/0x15c)
[ 1920.528995] [<c011c7fc>] (vfs_read) from [<c011ce0c>] (SyS_read+0x54/0xb0)
[ 1920.529002] [<c011ce0c>] (SyS_read) from [<c000edc0>] (ret_fast_syscall+0x0/0x38)
[ 1920.529296] TRACE kmalloc-4096 free 0xc2ec53c0 inuse=7 fp=0x  (null)
[ 1920.529301] Object c2ec53c0: 2f 64 61 74 61 2f 6d 65 64 69 61 20 2f 73 74 6f  /data/media /sto
[ 1920.529304] Object c2ec53d0: 72 61 67 65 2f 65 6d 75 6c 61 74 65 64 20 73 64  rage/emulated sd
...
[ 1920.529935] Object c2ec63b0: 2f 73 2f 6d 6e 74 2f 73 64 61 2f 73 64 61 31 00  /s/mnt/sda/sda1.
[ 1920.529939] CPU: 2 PID: 1904 Comm: ps Tainted: G           O   3.18.24_hi3798cv2x #1
[ 1920.529950] [<c0017b58>] (unwind_backtrace) from [<c00132b8>] (show_stack+0x20/0x24)
[ 1920.529957] [<c00132b8>] (show_stack) from [<c0d50af8>] (dump_stack+0x80/0xcc)
[ 1920.529966] [<c0d50af8>] (dump_stack) from [<c01121d8>] (free_debug_processing+0x208/0x324)
[ 1920.529972] [<c01121d8>] (free_debug_processing) from [<c0114150>] (__slab_free+0x2a4/0x408)
[ 1920.529978] [<c0114150>] (__slab_free) from [<c0114774>] (kfree+0x218/0x22c)
[ 1920.529985] [<c0114774>] (kfree) from [<c00e8eec>] (kvfree+0x48/0x58)
[ 1920.529992] [<c00e8eec>] (kvfree) from [<c013f5c8>] (seq_release+0x20/0x30)
[ 1920.529999] [<c013f5c8>] (seq_release) from [<c0158dd4>] (mounts_release+0x3c/0x40)
[ 1920.530005] [<c0158dd4>] (mounts_release) from [<c011da40>] (__fput+0x90/0x1e0)
[ 1920.530010] [<c011da40>] (__fput) from [<c011dc00>] (____fput+0x18/0x1c)
[ 1920.530017] [<c011dc00>] (____fput) from [<c003bd24>] (task_work_run+0xb8/0xf4)
[ 1920.530024] [<c003bd24>] (task_work_run) from [<c0012b5c>] (do_work_pending+0xa4/0xc4)
[ 1920.530030] [<c0012b5c>] (do_work_pending) from [<c000ee08>] (work_pending+0xc/0x20)

 

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Evan_ZGYF丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值