perf-events не показывает StackTraces в Debian 8 Jessie

Я пытаюсь профилировать простую программу C с perf-событиями на debian 8 jessie. Я вижу символы, но не могу получить трассировку стека. Та же процедура генерирует хорошие трассировки стека в 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;
}

Это график пламени с Debian Jessie

Это график пламени с Ubuntu

Почему в Debian Jessie отсутствуют трассировки стека?

Спасибо, Шарат.


person sha    schedule 16.09.2017    source источник


Ответы (1)


Удалось найти проблему. Мне пришлось включить CONFIG_FRAME_POINTER=y и перекомпилировать ядро ​​в соответствии с Brendan Gregg's perf site сайт

К сожалению, в ядре, поставляемом с Debian 8, эта функция не включена, что снижает производительность.

person sha    schedule 27.09.2017