本文简单介绍两种调试内核ko时检测内存泄露的方法。
slub debug
需要依赖如下内核配置:
CONFIG_SLUB=y
CONFIG_SLUB_DEBUG=y
CONFIG_SLUB_DEBUG_ON=y
CONFIG_SLUB_STATS=y
编译一下应用层的工具用于查看slab信息,工具代码在tools/vm目录中
make slabinfo
完成之后,就可以加载自己开发的module了,场景测试后执行slabinfo查看是否存在内存泄露行为:
查看slab信息:
slabinfo -v
kememleak
打开kmemleak内核配置:
CONFIG_HAVE_DEBUG_KMEMLEAK=y
CONFIG_DEBUG_KMEMLEAK=y
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=400
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=n
开启扫描功能:
echo scan > sys/kernel/debug/kmemleak
然后可以加载内核模块,运行测试环境了,最后来查看是否存在内存泄露,查看kmemleak结果:
cat /sys/kernel/debug/kmemleak
KASAN
参考我其他的文章,也有介绍KASAN的。