问题标签 [tracepoint]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
278 浏览

ruby - Ruby TracePoint:如何捕获特定类的定义?

我试图找出如何使用 Ruby 的 TracePoint API 来捕获特定类的定义和随后的重新定义(例如“Resolv”)。我可以使用以下方法捕获所有类定义:

但是,我无法使用其中一个:class:end参数对其进行过滤,因此我只能捕获Resolv该类。该TracePoint对象有一个defined_class属性,但它包含在类定义时是谁(即nilaka (main)),而不是即将处理其定义的类。我也找不到查看正在处理的文件和行的方法。有一个binding变量,但它不包含变量。

我怎样才能做到这一点?

0 投票
1 回答
110 浏览

c - 宏中未使用的参数会怎样?

这个问题来自阅读内核,更具体地说是跟踪宏。当我研究内核模块如何执行二进制、elf 和脚本文件 (fs/exec.c) 时,我接触到了它们。

出于某种原因,我不记得哪个到了 tracepoint.h 文件,其中定义了宏 TRACE_EVENT 等。我使用 trace_event 作为示例,因为内核中的跟踪示例使用此宏。该示例具有宏的这种用法

所以,很自然,在这之后我去了 TRACE_EVENT 的定义,发现了这个

#define TRACE_EVENT(name, proto, args, struct, assign, print) \ DECLARE_TRACE(name, PARAMS(proto), PARAMS(args))

如您所见,trace_event 宏不使用 print 参数(或参数?),以及 struct 和 assign 参数。

非常清楚地表明宏需要它们,但在它下面只是调用不需要它们的 declare_trace 宏。

至于宏扩展的其余部分,我对此表示满意,没有什么意外,但是宏的这种特殊用法让我感到困惑。所有其他领域是否有某种目的,或者它们只是……没有任何存在的理由?

0 投票
0 回答
867 浏览

linux-kernel - 如何在内核模块中使用跟踪点

我最近开始学习这些东西。关于这个问题,我发现了大量关于 kprobes、BPF、eBPF、tracepoints 和 perf 的资源。

我想测试内核中的一些 irq 事件(在它到达设备驱动程序之前)。因此,我在 do_IRQ() 函数的内核中创建了一个跟踪事件。

我已将内核中的跟踪点声明为:

为了检查这一点,我使用 eBPF 尝试了以下代码段。

在这里,我正在侦听特定 IRQ 编号上的 IRQ 事件。这对我来说效果很好,暂时。

现在,我试图将这个跟踪点附加到内核模块中(就像我们在内核模块中附加 kprobe 的方式一样)。这甚至可能吗?目前,我为此使用了 perf,但它产生了一些抖动。当我评估一些对抖动敏感的任务时,我希望我可以在内核模块中使用这个跟踪点。

我将不胜感激有关此事的任何意见或建议。

谢谢,库沙尔。

0 投票
0 回答
468 浏览

linux - Linux内核跟踪点:将探测函数连接到跟踪点时符号未定义

我现在正在使用 Linux 跟踪点进行练习。基本上,我正在尝试制作一个内核模块,其中定义了探测函数并将其连接到 Linux 内核中的跟踪点(内核源文件 dev.c 中的“trace_netif_receive_skb”)。当我在 SLES11 上编译并运行内核模块时,它运行良好。但是当我在 SLES12 上做同样的事情时,它抱怨符号未定义。内核模块源代码为:

这是SLES11上的输出,没有报错。

这是 SLES12 上的输出,上面写着: WARNING: "__tracepoint_netif_receive_skb" [/root/works/codes/tracepoint/tracepoint.ko] undefined!我可以在 /var/log/messages 中找到“未知符号 __tracepoint_netif_receive_skb (err 0)”。

我检查了 SLES11 和 SLES12 的跟踪点框架的内核源代码,除非调用 EXPORT_TRACEPOINT_SYMBOL() 或 EXPORT_TRACEPOINT_SYMBOL_GPL(),否则不会导出定义的“__tracepoint_##name”“include/linux/tracepoint.h”,但我没有在 Linux 内核代码中找到调用 EXPORT_TRACEPOINT_SYMBOL(netif_receive_skb) 或 EXPORT_TRACEPOINT_SYMBOL_GPL(netif_receive_skb) 以导出符号 __tracepoint_netif_receive_skb 的任何地方。那为什么我在 SLES11 上没有遇到问题呢?我怎样才能让它在 SLES12 上工作?

0 投票
1 回答
237 浏览

debugging - 将系统调用事件跟踪输出的格式更改为 ftrace

sys_enter_openat我为系统调用启用了 ftrace 事件跟踪。给出的相应输出格式events/syscalls/sys_enter_openat/format

正如预期的那样,ftrace 的示例输出行类似于

有没有办法改变输出格式,filename: 5af693f224以便显示为filename: <string>而不是地址?我想这本来可以使用systemtaporkrpobe但我的设置现在不允许使用它。

0 投票
1 回答
382 浏览

linux-kernel - kprobe_events fetch-args 适用于 x86 但不适用于 arm64

我想将do_sys_open文件名参数作为字符串。为此,我在 kprobetrace.txt 之后添加了kprobe。一个将文件名作为十六进制的简单探针适用于两者x86/arm64

但是,更改探针以获取文件名的字符串有效x86但无效arm64(即无法获取字符串表示形式filename_string=(fault)

x86:

手臂64:

为了检查我是否正确使用了 arm ABI,我尝试使用perf. 从 perf 中看到的探针/sys/kernel/debug/tracing/kprobe_events是相似的

filename_string=""但是在这种情况下,性能探测也失败了(即)。

kprobe_events设置arm 以获取 args 作为字符串的正确方法是什么?我是否错误地使用了 ABI?

0 投票
1 回答
1020 浏览

c - tracepoint/syscalls/sys_enter 不会触发 bpf_trace_printk

目标:每次执行系统调用时打印 Hello。

代码:

_kern.c

_user.c

问题:当我运行程序时,如果调用 open 系统调用,它也会终止而不打印“Hello”。

问题:我错过了什么?我也尝试过 sys_enter_open 而不是 sys_enter

0 投票
1 回答
88 浏览

c - 为什么 bpf 代码无法访问 cpumap_enqueue_ctx 的前 8 个字节?

阅读一些附加到跟踪点的 ebpf 示例,我注意到每个结构都是从这样的填充开始构建的(来自samples/bpf/xdp_redirect_cpu_kern.c

我发现的只是这条评论,它说 bpf 代码无法访问前 8 个字节,但我不明白为什么。

0 投票
1 回答
71 浏览

c - 无法正确访问跟踪点上下文结构字段

目标:仅当使用 O_RDONLY 标志调用 openat 时才写入 trace_pipe。我已经构建了结构,查看此处包含的格式 /sys/kernel/debug/tracing/events/syscalls/sys_enter_open/format

问题我认为我没有访问 flags 字段,因为看起来第二个 if 语句总是错误的。 问题:我是否正确访问了标志字段?有没有办法打印标志变量内容?

0 投票
1 回答
86 浏览

c - 内核符号 __tracepoint_module_load 在哪里定义?

内核符号在哪里__tracepoint_module_load定义?
以前看过/proc/kallsyms,现在找不到了。

bootlin.com/linux/也找不到它。