perf-events 在 debian 8 jessie 上不显示 StackTraces
perf-events not showing StackTraces on debian 8 jessie
我正在尝试在 debian 8 jessie 上使用 perf-events 分析一个简单的 C 程序。我可以看到符号,但无法获取堆栈跟踪。相同的过程在 ubuntu 16.04.
上生成了良好的堆栈跟踪
我已经安装了 linux-image-amd64-dbg
和 libc6-dbg
。
我已经确认内核配置参数包括 CONFIG_KALLSYMS=y
我已经用 gcc -g3 -O0 hello.c
编译程序以启用调试符号。
我使用以下命令开始分析。
sudo perf record -g ./a.out
我使用以下命令生成火焰图Flame Graph
sudo perf script | ~/code/FlameGraph/stackcollapse-perf.pl | \
~/code/FlameGraph/flamegraph.pl > perf-kernel.svg
这是我要分析的 hello.c 的列表
#include <stdio.h>
#include <unistd.h>
void do2() {
FILE* f = fopen("/dev/zero", "r");
int fd = fileno(f);
char buf[100];
while(1) {
read(fd, buf, sizeof(buf)/sizeof(buf[0]));
}
}
int main(void)
{
do2();
return 0;
}
This is the flame graph with debian jessie
This is the flame graph with ubuntu
为什么 debian jessie 中缺少堆栈跟踪?
谢谢
沙拉斯
设法找到问题。
我必须启用 CONFIG_FRAME_POINTER=y
并根据 Brendan Gregg's perf site
重新编译内核
不幸的是,Debian 8 附带的内核没有启用此功能,这会破坏性能
我正在尝试在 debian 8 jessie 上使用 perf-events 分析一个简单的 C 程序。我可以看到符号,但无法获取堆栈跟踪。相同的过程在 ubuntu 16.04.
上生成了良好的堆栈跟踪我已经安装了 linux-image-amd64-dbg
和 libc6-dbg
。
我已经确认内核配置参数包括 CONFIG_KALLSYMS=y
我已经用 gcc -g3 -O0 hello.c
编译程序以启用调试符号。
我使用以下命令开始分析。
sudo perf record -g ./a.out
我使用以下命令生成火焰图Flame Graph
sudo perf script | ~/code/FlameGraph/stackcollapse-perf.pl | \
~/code/FlameGraph/flamegraph.pl > perf-kernel.svg
这是我要分析的 hello.c 的列表
#include <stdio.h>
#include <unistd.h>
void do2() {
FILE* f = fopen("/dev/zero", "r");
int fd = fileno(f);
char buf[100];
while(1) {
read(fd, buf, sizeof(buf)/sizeof(buf[0]));
}
}
int main(void)
{
do2();
return 0;
}
This is the flame graph with debian jessie
This is the flame graph with ubuntu
为什么 debian jessie 中缺少堆栈跟踪?
谢谢 沙拉斯
设法找到问题。
我必须启用 CONFIG_FRAME_POINTER=y
并根据 Brendan Gregg's perf site
不幸的是,Debian 8 附带的内核没有启用此功能,这会破坏性能