inicializando o kernel de depuração para perf

inicializando o kernel de depuração para perf

Estou tentando fazer alguns testes de desempenho, descobri que a maior parte da sobrecarga está dentro do kernel (kernel.kallsyms).

Então eu preciso do kernel com símbolos de depuração e extraído do vmlinuz para executar o relatório de desempenho com a opção -k.

Instalei o pacote de depuração do kernel do ddebs, mas não tenho certeza de como inicializar o kernel. Eu executo update-grub2 mas o kernel não apareceu na lista.

Eu verifiquei o pacote e descobri que o kernel está instalado dentro de /usr/lib/debug - existem suas bibliotecas (libc etc) e módulos do kernel.

Agora não consigo encontrar uma maneira de carregar o kernel no momento da inicialização.

Acho que preciso executar o kernel com símbolos de depuração para que o desempenho funcione corretamente com a opção -k - caso contrário, os endereços de memória não seriam mapeados corretamente - certo?

Eu executo o perf -k para o kernel sem executar o mesmo, mas não tenho certeza se isso está correto.

Responder1

Ok, na verdade não há problema em executar o desempenho no kernel de depuração quando apenas o kernel normal é carregado.

A propósito, o kernel foi instalado com este tutorial para systemtap: https://wiki.ubuntu.com/Kernel/Systemtap

Notei algumas coisas - o kernel de depuração já foi extraído - o nome é vmlinux, não vmlinuz e é grande.

a segunda coisa quando eu carrego no gdb vejo exatamente o mesmo número e o tempo de compilação é o mesmo do meu kernel não depurado carregado:

uname -a
Linux delo 3.13.0-55-generic #94-Ubuntu SMP Thu Jun 18 00:27:10 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

e o gdb (baseado emesse:

(gdb) print init_uts_ns.name
$1 = {sysname = "Linux", '\000' <repeats 59 times>, nodename = "(none)", '\000' <repeats 58 times>, 
release = "3.13.0-55-generic", '\000' <repeats 47 times>, version = 
"#94-Ubuntu SMP Thu Jun 18 00:27:10 UTC 2015", '\000' <repeats 21 times>, 
machine = "x86_64", '\000' <repeats 58 times>, domainname = "(none)", '\000' <repeats 58 times>}

Quero dizer, a parte 94... é a mesma.

Quando executo o desempenho gravado com:

perf report -g -k /usr/lib/debug/boot/vmlinux-3.13.0-55-generic

na verdade funciona bem - vejo os símbolos do kernel traduzidos para funções reais (-g é apenas para calltrace):

- 3,18%  app  [kernel.kallsyms]  [k] copy_user_enhanced_fast_string
 - copy_user_enhanced_fast_string
  - 98,98% system_call 
     -syscall 
       68,60% 0xbeef0100
       31,40% 0xbeee0100 
  + 0,54% generic_file_aio_read 

alguém me disse que quando o kernel inicializasse e o kernel usado pelo perf não se alinhasse, eu definitivamente veria isso - as funções para amostras do kernel não fariam sentido (apenas alguns dados aleatórios em vez do nome real).

informação relacionada