【微知】Mellanox OFED驱动中开启动态debug的几种方式?func、file、module、format;+p、-p)

发布于:2025-09-04 ⋅ 阅读:(20) ⋅ 点赞:(0)

背景

Mellanox OFED提供了不同级别日志,本文记录mlx5_yyy_xxx相关的日志如何开启。
更多OFED提供的日志参考兄弟篇:Mellanox OFED驱动中使用的8种日志打印函数以及涉及的6种内核日志打印函数盘点?

日志

根据兄弟篇文章分析,mlx5_yyy_xxx系列的日志都是使用了dev_xxx的内核日志,可以支持内核的动态debug功能。只要在OFED中看到mlx5_yyy_xxx(比如mlx5_yyy_dbg 或者info,比如mlx5_ib_dbg, mlx5_core_dbg),就可以用动态debug
在这里插入图片描述

开启的几种方式

以reg_mr为例子,查看mlx5_ib_reg_user_mr的流程的打印,可以根据下文看到mlx5_ib_reg_user_mr中有一个打印: mlx5_ib_dbg(dev, "start 0x%llx, iova 0x%llx, length 0x%llx, access_flags 0x%x\n", start, iova, length, access_flags);
在这里插入图片描述

如何动态开启这个打印呢?

有四种方式:

  • 通过指定函数开启:func
  • 通过指定函数所在文件开启:file
  • 通过指定函数所在ko开启: module
  • 通过print的字符串匹配开启: format
mlx动态debug
四种debug方式
开关方式
echo '... +p' > /sys/kernel/debug/dynamic_debug/control
echo '... -p' > /sys/kernel/debug/dynamic_debug/control
func
echo 'func mlx5_ib_reg_user_mr +p' > xxxcontrol
file
echo 'file drivers/infiniband/hw/mlx5/mr.c +p' > xxxcontrol
module
echo 'module mlx5_ib +p' > xxxcontrol
format
echo 'format 引号start 0x%llx, virt_addr 0x%llx%引号 +p' > xxxcontrol

内核机制如何支持几种方式开启

/sys/kernel/debug/dynamic_debug/control文件中,通过echo进去对应的类型,然后指定一个+p和-p就能开关
前面提到的四种方式如何不用查看代码就能查看呢?
可以先 cat /sys/kernel/debug/dynamic_debug/control | grep xxx,比如要过滤mlx5_ib_reg_user_mr,可以用mlx5_ib_reg_user_mr过滤,或者部分过滤(如果不记得)reg_user_mr。

cat /sys/kernel/debug/dynamic_debug/control | grep mlx5_ib_reg_user_mr

可以看到两行,说明动态debug里面记录了两个,并且这些信息记录了所在文件、模块、函数名、format
在这里插入图片描述
如果没开启的时候 = 后面是一个下划线_
接下来就可以用前面提到的四种方式开启或者关闭:
都遵循echo "[mode] xxx [+|-]p" > /sys/kernel/debug/dynamic_debug/control
mode就是前面提到的四个:func、file、module、format,中间就是对应的对象

#函数方式
echo "func mlx5_ib_reg_user_mr +p" > /sys/kernel/debug/dynamic_debug/control #开启
echo "func mlx5_ib_reg_user_mr -p" > /sys/kernel/debug/dynamic_debug/control #关闭

# 文件方式:注意怎么确定路径,就先grep然后copy
echo "file drivers/infiniband/hw/mlx5/mr.c +p" > /sys/kernel/debug/dynamic_debug/control #开启
echo "file drivers/infiniband/hw/mlx5/mr.c -p" > /sys/kernel/debug/dynamic_debug/control #开启

# ko方式
echo "module mlx5_ib +p" > /sys/kernel/debug/dynamic_debug/control #开启
echo "module mlx5_ib -p" > /sys/kernel/debug/dynamic_debug/control

# format方式, 注意将format中引号包含
echo 'format "start 0x%llx, virt_addr 0x%llx" +p' > /sys/kernel/debug/dynamic_debug/control #开启
echo 'format "start 0x%llx, virt_addr 0x%llx" -p' > /sys/kernel/debug/dynamic_debug/control

# 确认结果:
grep mlx5_ib_reg_user_mr /sys/kernel/debug/dynamic_debug/control

可以看到修改后函数开关是p了:
在这里插入图片描述
关闭方式就是前面的-p

实战举例

开启:使用format方式:

echo 'format "start 0x%llx, virt_addr 0x%llx" +p' > /sys/kernel/debug/dynamic_debug/control #开启

在这里插入图片描述
进行用户态程序打流验证:
在这里插入图片描述

常见问题

/sys/kernel/debug/dynamic_debug/control: Permission denied
需要用sudo或者root进行处理

综述

本文记录mlx5_yyy_xxx相关的日志如何开启。方便平时定位和分析问题。


网站公告

今日签到

点亮在社区的每一天
去签到