perf 如何采样内核堆栈?

How does perf sample kernel stacks?

据我所知,perf 能够对每个 process/thread 的完整调用堆栈进行采样,即使它当前在内核中也是如此。由于 perf 在我假设的用户空间中是 运行,我想知道它如何访问不同 process/thread.

堆栈的内核部分

目的是编写一个可以对其他 processes/threads 的调用堆栈进行采样的应用程序,即使它们当前在内核中也是如此。

此致

perf由两部分组成。用户空间工具和 perf_event_open 系统调用。

一般情况下,栈采样是由内核通过syscall完成的。您可以编写还使用 perf_event_open 的应用程序 - 默认情况下包含内核示例 (exclude_kernel==0)。