当它显示来自 lttng 的跟踪输出的调用堆栈时,tracecompass 调用堆栈输入的格式是什么?

问题描述 投票:0回答:2

我有带有时间戳的内核函数调用信息和它们被调用的顺序,并且可以从中生成调用堆栈。但是由于 tracecompass 已经显示来自 lttng 的跟踪输出的调用堆栈,我想知道我是否可以以它理解的某种格式将我的数据提供给 tracecompass,以便它可以显示来自我的数据的调用堆栈。但是找不到调用堆栈需要哪种输入格式。我知道它需要 lttng 的 ctf 格式输出,但这是针对整个跟踪数据而不是堆栈跟踪。

callstack lttng
2个回答
1
投票

lttng trace 中的callstack 是由状态系统构建的。我不知道他们是如何为 UST 应用程序中的调用堆栈做这件事的。但是在内核的控制流视图中存在类似的外观功能。调用树是由 sched_process_fork 事件生成的。

sched_process_fork: { cpu_id = 1 }, { parent_comm = "bash", parent_tid = 16746, parent_pid = 16746, parent_ns_inum = 4026531836, child_comm = "bash", child_tid = 16970, _vtids_length = 1, vtids = [ [0] = 16970 ], child_pid = 16970, child_ns_inum = 4026531836 }

它们是在一个进程分叉一个新进程时创建的。您可以使用 babeltrace 以该格式编写一些事件,并尝试从 Trace Compass 中的内核跟踪角度使用控制流视图。

但我认为您应该查看带有调用堆栈的 CTF 跟踪的元数据,以了解它们在那里是如何进行的。

希望我能帮上一点忙。


0
投票

我建议展示你有什么样的跟踪格式。现在(2023 年 1 月)Trace Compass 支持 LTTng、FTrace 和 Perf OS 级跟踪。这些内核跟踪都不会填充任何调用堆栈视图,但是,在用户空间端,LTTng-UST、UFTrace、Trace Event 和其他人会这样做。

如果您想生成自定义甘特图,一种方法是进行数据驱动分析。另一种方法是使用 EASE 来拥有自定义脚本。第三种选择是伪造它。我已经在 C here 中完成了

我真正推荐的是使用进出分析here,因为它非常简单。有了这个,您就有了一个手动 GUI,它将指导您如何进行追踪。

© www.soinside.com 2019 - 2024. All rights reserved.