2017-09-16 5 views
2

J'essaie de profiler un simple programme C avec perf-events sur debian 8 jessie. Je peux voir des symboles, mais je suis incapable d'obtenir des piles de pile. La même procédure génère de bonnes stacktraces sur Ubuntu 16.04.perf-events ne montre pas StackTraces sur debian 8 jessie

J'ai installé linux-image-amd64-dbg et libc6-dbg. J'ai confirmé que les paramètres de configuration du noyau incluent CONFIG_KALLSYMS=y

J'ai compilé le programme avec gcc -g3 -O0 hello.c pour activer les symboles de débogage.

Je commence le profilage avec la commande suivante. sudo perf record -g ./a.out

je produis un graphique de la flamme Flame Graph avec la commande suivante

sudo perf script | ~/code/FlameGraph/stackcollapse-perf.pl | \ 
~/code/FlameGraph/flamegraph.pl > perf-kernel.svg 

Voici la liste des hello.c que je suis en train de profil

#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

Pourquoi les traces de pile sont-elles manquantes dans Debian Jessie?

Merci Sharath

Répondre

0

réussi à trouver la question. Je dû permettre CONFIG_FRAME_POINTER=y et recompiler le noyau comme par Brendan Gregg's perf site

Il est regrettable que l'expédition du noyau Debian 8 ne pas activé, ce qui casse perf