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
)。
据我所知,perf 能够对每个 process/thread 的完整调用堆栈进行采样,即使它当前在内核中也是如此。由于 perf 在我假设的用户空间中是 运行,我想知道它如何访问不同 process/thread.
堆栈的内核部分目的是编写一个可以对其他 processes/threads 的调用堆栈进行采样的应用程序,即使它们当前在内核中也是如此。
此致
perf
由两部分组成。用户空间工具和 perf_event_open
系统调用。
一般情况下,栈采样是由内核通过syscall完成的。您可以编写还使用 perf_event_open
的应用程序 - 默认情况下包含内核示例 (exclude_kernel==0
)。