如何使用perf捕获组合的内核和用户空间堆栈

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用perf捕获组合的内核和用户空间堆栈相关的知识,希望对你有一定的参考价值。

我正在尝试使用perf捕获组合的用户和内核堆栈,因此我可以看到哪些用户空间代码产生的是特定的内核调用链。基本上我想创建一个看起来像这样的火焰图:flamegraph http://www.brendangregg.com/FlameGraphs/example-perf.svg

不幸的是,我的所有内核堆栈都以entry_SYSCALL_64_fastpath结尾,并且没有与用户空间堆栈的连接。

我正在使用perf record -g --call-graph dwarf -F 99 --pid 12345捕获。我有内核,libc和我的程序的调试符号。这是Fedora 25系统上的内核4.8.14。

答案

尝试使用bcc技术的BPF实用程序。看看profile util。

https://github.com/iovisor/bcc/blob/master/docs/tutorial.md

以上是关于如何使用perf捕获组合的内核和用户空间堆栈的主要内容,如果未能解决你的问题,请参考以下文章

从 perf 获取用户空间堆栈信息

linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核代码

内核空间和内核堆栈之间的关系是什么?

Linux内核——用户堆栈和内核堆栈

内核调试-perf introduction

linux为啥需要内核栈,系统调用时直接使用用户栈不行吗