zoukankan      html  css  js  c++  java
  • DEBUG memory问题的一些工具以及注意事项

    1. kasan

    非常有用的debug工具,主要用于debug  访问越界,访问已经释放的内存,栈溢出等,能解决大多数memory问题(90%),但是依然有缺陷,比如不能debug HW操作memory造成的问题,还有一些SW造成的问题,比如process A allocate内存之后再释放,process B allocate到相同内存,此时process A再次写memory是不能被KASAN debug出来的。

    kasan的使用方法也很简单,配置如下config:

    CONFIG_HAVE_ARCH_KASAN=y
    CONFIG_KASAN=y
    # CONFIG_KASAN_OUTLINE is not set
    CONFIG_KASAN_INLINE=y
    CONFIG_TEST_KASAN=m

    另外还有一个bootargs可以设置kasan_multi_shot=1。

    # Enforce KASAN (Kernel Address Sanitizer) to print report on every invalid memory access.
    # Without this parameter KASAN will print report only for the first invalid access.
    bootargs:kasan_multi_shot=1

    参考 https://lore.kernel.org/patchwork/patch/772963/

    2. kmemleak

    用于debug OOM等 allocate而未free造成内存不够用的问题,配置如下config即可使用:

    CONFIG_HAVE_DEBUG_KMEMLEAK=y
    CONFIG_DEBUG_KMEMLEAK=y
    CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=4096
    # CONFIG_DEBUG_KMEMLEAK_TEST is not set
    CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y

    使用方法:

    echo scan > sys/kernel/debug/kmemleak
    cat /sys/kernel/debug/kmemleak

    注意:

    a. bootargs中加入kmemleak=on打开kmemleak。

    b. 发现 echo scan > sys/kernel/debug/kmemleak 提示 sh: echo: write error: Device or resource busy ,此时检查一下开机log中是否有如下log,

    [ 0.833010] console [ttyS0] enabled
    [ 0.836553] kmemleak: Early log buffer exceeded (13624), please increase DEBUG_KMEMLEAK_EARLY_LOG_SIZE
    [ 0.845918] Calibrating delay loop... 2289.66 BogoMIPS (lpj=4579328)
    [ 0.868323] pid_max: default: 32768 minimum: 301

    这是因为log buffer太小导致enable 失败,增加config中的log_size即可。

    3. debug_slub

  • 相关阅读:
    Linux ,Ubuntu 分区建议大小
    [No000019A]【波浪理论精典教学课程】
    CS(计算机科学)知识体
    如何量化考核技术人的KPI?
    Linux系统的命令应该如何记?
    数学和物理太难?这些 GIF 让你秒懂抽象概念
    加密数字货币的 7 个致命悖论
    量子力学中,全体自然数之和是负十二分之一,物理意义是什么?
    30岁左右的人,来谈谈你犯了哪些错误?
    一篇文章学懂Shell脚本,最简明的教程在这里
  • 原文地址:https://www.cnblogs.com/smilingsusu/p/13714404.html
Copyright © 2011-2022 走看看