当前位置: 首页 > article >正文

linux 内核OOM问题定位-SLAB_DEBUG

1,配置menuconfig

Kernel hacking > Memory Debugging 

配置 config=y

[*] SLUB debugging on by default                                                                 
[*] Enable SLUB performance statistics 

配置之前

lark@ubuntu:~/Public/rk356x-linux/rk356x-linux/kernel$ cat .config | grep "CONFIG_SLUB"
CONFIG_SLUB_SYSFS=y
CONFIG_SLUB_DEBUG=y
# CONFIG_SLUB_MEMCG_SYSFS_ON is not set
CONFIG_SLUB=y
CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
.

配置之后看.config

 lark@ubuntu:~/Public/rk356x-linux/rk356x-linux/kernel$ cat .config | grep "CONFIG_SLUB"
CONFIG_SLUB_SYSFS=y
CONFIG_SLUB_DEBUG=y
# CONFIG_SLUB_MEMCG_SYSFS_ON is not set
CONFIG_SLUB=y
CONFIG_SLUB_CPU_PARTIAL=y
CONFIG_SLUB_DEBUG_ON=y
CONFIG_SLUB_STATS=y

或者配置defconfig,配置完之后需要clean后再编译

Public\rk356x-linux\rk356x-linux\kernel\arch\arm64\configs\rockchip_linux_defconfig

 改后的代码路径rk356x-linux\kernel\mm\Makefile

obj-$(CONFIG_KSM) += ksm.o
obj-$(CONFIG_PAGE_POISONING) += page_poison.o
obj-$(CONFIG_SLAB) += slab.o
obj-$(CONFIG_SLUB) += slub.o
obj-$(CONFIG_KASAN)    += kasan/
obj-$(CONFIG_KFENCE) += kfence/
obj-$(CONFIG_FAILSLAB) += failslab.o

SLAB或者SLUB有一个用就可以,改menuconfig没有clean会覆盖之前的更改,现在看一下编译的过程。编译的流程

 make -C /home/lark/Public/rk356x-linux/rk356x-linux/kernel/ -j5 CROSS_COMPILE=/home/lark/Public/rk356x-linux/rk356x-linux/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- ARCH=arm64 rockchip_linux_defconfig

更改slab除了menuconfig之外可以在 rockchip_linux_defconfig中更改,配置完重新编译之后:

lark@ubuntu:~/Public/rk356x-linux/rk356x-linux/kernel$ cat .config | grep "SLUB"
CONFIG_SLUB_SYSFS=y
CONFIG_SLUB_DEBUG=y
# CONFIG_SLUB_MEMCG_SYSFS_ON is not set
CONFIG_SLUB=y
CONFIG_SLUB_CPU_PARTIAL=y
CONFIG_SLUB_DEBUG_ON=y
CONFIG_SLUB_STATS=y

当slab_unreclamiable一直增加时我们怀疑是内核态内存泄漏,这个时候我们可以看是哪个kmalloc申请的内存多。

首先看slabinfo按的size排序查看 slub object,可以查看 space 总占用大小,及objects个数判断泄漏点 为kmalloc-128。

当没看到/sys/kernel/debug或者没有权限或者打开失败后:

umount /sys/fs/bpf /sys/kernel/debug/

mount -t debugfs none /sys/kernel/debug

那个泄露多看/sys/kernel/debug的slab/kmalloc*-的alloc-traces和free-traces。

root@ubuntu2004:/sys/kernel/debug/slab/kmalloc-128# ls
alloc_traces  free_traces 

root@ubuntu2004:#cat alloc_traces

root@ubuntu2004:#cat free_traces

主动去触发slub debug检查 

echo 1 > /sys/kernel/slab/kmalloc-128/validate 

1,查看slab 使用状态
cat /proc/slabinfo 
2,查看slab debug信息,统计状态等
/sys/kernel/slab/*

root@ubuntu2004:/sys/kernel/slab/kmalloc-128# echo 1 > validate

root@ubuntu2004:/sys/kernel/slab/kmalloc-128# echo 1 > trace

3,调试内存泄漏,踩踏等信息
/sys/kernel/debug/slab/* 

root@ubuntu2004:/sys/kernel/debug/slab/kmalloc-128#cat alloc_traces
 

对比alloc和free次数,找到比较多的。 

 跟踪代码

rk356x-linux\kernel\net\rfkill\rfkill-wlan.c

static int rfkill_wlan_remove(struct platform_device *pdev)
{
    struct rfkill_wlan_data *rfkill = platform_get_drvdata(pdev);

    LOG("Enter %s\n", __func__);

    wake_lock_destroy(&rfkill->wlan_irq_wl);

    fb_unregister_client(&rfkill_wlan_fb_notifier);

    if (gpio_is_valid(rfkill->pdata->power_n.io))
        gpio_free(rfkill->pdata->power_n.io);

    if (gpio_is_valid(rfkill->pdata->reset_n.io))
        gpio_free(rfkill->pdata->reset_n.io);

     //此处没有kfree

      // kfree(rfkill);
       //   g_rfkill = NULL;

    return 0;
}


http://www.kler.cn/a/500354.html

相关文章:

  • 电池预测 | 第21讲 基于Gamma伽马模型结合EM算法和粒子滤波算法参数估计的锂电池剩余寿命预测
  • 搭建prometheus+grafana监控系统抓取Linux主机系统资源数据
  • shell基础使用及vim的常用快捷键
  • 一分钟学会文心一言API如何接入,文心一言API接入教程
  • 【Uniapp-Vue3】使用defineExpose暴露子组件的属性及方法
  • HTTPS SSL/TLS 工作流程
  • 数据在内存的存储
  • Android 修改SVG属性并显示图片(AndroidSvg)
  • Spring Security单点登录
  • linux-ssh + google authenticator双因子认证
  • Python 通过命令行在 unittest.TestCase 中运行单元测试
  • 妙用编辑器:把EverEdit打造成一个编程学习小环境
  • 通过案例研究二项分布和泊松分布之间关系
  • Windows下安装最新版的OpenSSL,并解决OpenSSL不是当前版本的问题,或者安装不正确的问题
  • Python爬虫进阶——案例:模拟bilibili登录)
  • 【Elasticsearch】 复合查询
  • 贪心算法汇总
  • NLP文本数据增强全攻略:从回译到多样化策略,全面提升模型表现!
  • 8 事件等待
  • Windows下调试Dify相关组件(1)--前端Web
  • 2024版idea 插件无法加载
  • C#中通道(Channels)的应用之(生产者-消费者模式)
  • 微商关系维系与服务创新:链动2+1模式、AI智能名片与S2B2C商城小程序的应用研究
  • AI刷题-数列推进计算任务、数组中的幸运数问题