我正在尝试分析专用内核模块,以查找网络情况下的数据包延迟。 “ systemtap”似乎是对内核进行性能分析的方法,但我找不到将外部内核模块的功能指定为探针的方法。
我知道我可以修改内核模块代码以使用跟踪点,kprobes,jprobe和retprobe。 (我保留此选项作为最后的选择)
根据SourceWare上的文档,
module(MPATTERN).function(PATTERN)
探测点应将MPATTERN
作为树外内核模块的完整路径。在上面的探测点列表中,MPATTERN表示一个字符串文字,旨在标识所加载的目标内核模块。对于树内内核模块,名称就足够了(例如“ btrfs”)。该名称还可以包括“ *”,“ []”和“?”通配符以匹配多个树内模块。 通过指定ko文件的完整路径,还支持树外模块。不支持通配符。该文件必须遵循命名为.ko的约定(字符','和'-'替换为'_')。
我尝试了类似下面的操作,但是找不到任何提到的函数名称作为探测点。
probe module("<lkm_path>.ko").function("<function_name>").call
收到此错误
semantic error: while resolving probe point: identifier 'module' at scripts/lkm-histogram.stp:57:7
source: probe module("<lkm_path>.ko").function("xxx_nic_tx").call {
^
semantic error: no match
对此将提供任何帮助。