Construindo Perf com Babeltrace (para conversão de Perf em CTF)
Estou tentando usar o TraceCompass para investigar melhor o rastreamento do meu sistema. Para isso, você precisa do formato CTF e há duas maneiras possíveis de obtê-lo no Linux, a seguir:
Usando LTTng para rastrear e usando o formato CTF a partir desseUsando 'perf data convert' para criar dados CTF a partir de perf.dataEu tenho tentado usar a segunda opção, pois a primeira exige a instalação de pontos de rastreamento e o que obtive do perf é simplesmente o suficiente para mim. Então, supondo que eu tenha meus perf.data disponíveis, Aplicando
perf data convert --to-ctf=./ctf
resultou em:Nenhum suporte de versão compilado. Analisando os recursos online do lwn, descobri que essa conversão não está disponível sem o babeltrace. Para instalar o babeltrace, tentei os seguintes métodos:
1º:
sudo apt-get install libbabeltrace-ctf-dev libbabeltrace-ctf1 libbabeltrace1 libbabeltrace-dev python3-babeltrace
que não resolveu completamente o problema de:Nenhum suporte de versão compilado.
Segundo
Eu tentei construir o babeltrace a partir da fonte. Eu cavei e encontrei todas as suas dependências de antemão:
sudo apt-get install dh-autoreconf bison libdw-dev libelf-dev flex uuid-dev libpopt-dev
git clone git://git.efficios.com/babeltrace.git
cd babeltrace
./bootstrap
sudo ./configure --prefix=/opt/libbabeltrace LDFLAGS=-L/usr/local/lib
sudo make -j4 prefix=/opt/libbabeltrace
sudo make install prefix=/opt/libbabeltrace
Então tentei,
LD_LIBRARY_PATH=/opt/libbabeltrace/lib perf data convert --to-ctf=./ctf
O que também resultou no erro:Nenhum suporte de versão compilado.
Então, no final das contas, acho que agora o problema está ligando o babeltrace ao perf. Embora eu ainda não saiba compilar o perf com o suporte ao babeltrace. Devo construir tudo a partir de módulos do kernel (fornecidos abaixo) ou existe uma solução alternativa para recompilar ou adaptar meu perf atual com o suporte ao babeltrace?
Observe que o perf / core_ctf_convert está implementado neste módulo do kernel:git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git
Observe também que estou usando o Raspbian Jessie em um Raspberry Pi 3.
A orientação é apreciada com antecedência.
Felicidades,
Referências:
https://lwn.net/Articles/634333/
http://tracingsummit.org/w/images/9/98/TracingSummit2014-Perf-CTF.pdf
https://patchwork.kernel.org/patch/5883821/
https://patchwork.kernel.org/patch/5858601/
EDIT: RESOLVED Ok, isso foi complicado. Primeiro, todos os créditos vão para jolsa do kernel.org, que com suas sugestões me fez descobrir isso.
Depois que o libbabeltrace é construído a partir da fonte, o seguinte é feito:
Algumas dependências instaladas (algumas podem não ser necessárias, estas são as que eu instalei para atender à maioria dos recursos de rastreamento disponíveis para o Raspbian. Infelizmente, o bfd não está disponível, disponível)
sudo apt-get install libnewt-dev binutils-arm-none-eabi libcrypto++-dev libunwind-dev systemtap-sdt-dev libssl-dev libperl-dev libiberty-dev
Então,
sudo git clone git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git
cd linux/tools/perf
sudo git checkout perf/core
sudo LIBBABELTRACE=1 LIBBABELTRACE_DIR=/opt/libbabeltrace/ make
sudo LIBBABELTRACE=1 LIBBABELTRACE_DIR=/opt/libbabeltrace/ make install
Após a conclusão da instalação, o perf é executado com o LD_LIBRARY_PATH env. isto é
No diretório em que o perf.data está localizado, chame o seguinte, assumindo que o perf recém-construído esteja localizado em / home / user / linux / tools / perf:
sudo LD_LIBRARY_PATH=/opt/libbabeltrace/lib ./home/user/linux/tools/perf/perf data convert --to-ctf=./ctf
E então, o CTF poderia ser importado para o TraceCompass :)