Como instalar a ferramenta perf
userland como não-raiz
-
Obtenha / encontre fontes para o kernel-2.6.36-gentoo-r4 (no Gentoo Linux). A primeira verificação de esta resposta
Actually, first you should look at
/usr/src/linux
and see if the kernel sources are still installed. You could just copy them to a directory you can write to.)foi o suficiente, mas em vez de copiar fontes inteiras do kernel eu apenas as vinculei:
$ mkdir -p build $ cd build $ ln -s /usr/src/linux-2.6.36-gentoo-r4
-
Crie um diretório onde
perf
seja criado, pois não poderei escrever no diretório~/build/linux-2.6.36-gentoo-r4
.$ mkdir -p perf
Na verdade, não foi o que eu fiz no início ... mensagens de erro de
make
foram totalmente inúteis no começo. -
Vá para o diretório
tools/perf
em fontes do kernel$ cd linux-2.6.36-gentoo-r4/tools/perf
-
Compile
perf
, não esquecendo de passar a opçãoO=<destdir>
para makefile pois o diretório não é gravável (não haveria nenhum problema se eu copiasse em vez de fontes de kernel ligadas por links simbólicos). p>$ make O=~/build/perf -k Makefile:565: newt not found, disables TUI support. Please install newt-devel or libnewt-dev * new build flags or prefix CC ~/build/perf/perf.o CC ~/build/perf/builtin-annotate.o [...] CC ~/build/perf/util/scripting-engines/trace-event-python.o CC ~/build/perf/scripts/python/Perf-Trace-Util/Context.o AR ~/build/perf/libperf.a LINK ~/build/perf/perf ~/build/perf/libperf.a(trace-event-perl.o): In function 'define_flag_value': ~/build/linux-2.6.36-gentoo-r4/tools/perf/util/scripting-engines/trace-event-perl.c:127: undefined reference to 'PL_stack_sp' ~/build/linux-2.6.36-gentoo-r4/tools/perf/util/scripting-engines/trace-event-perl.c:131: undefined reference to 'Perl_push_scope' [...] ~/build/perf/libperf.a(trace-event-python.o): In function 'handler_call_die': ~/build/linux-2.6.36-gentoo-r4/tools/perf/util/scripting-engines/trace-event-python.c:53: undefined reference to 'PyErr_Print' [...] collect2: ld returned 1 exit status make: *** [/home/narebski/build/perf/perf] Error 1 GEN perf-archive make: Target 'all' not remade because of errors.
-
Google para "referência indefinida para 'Perl_push_scope'". Encontre Falha ao instalar o perf no slackware 13.1 em unix.stackexchange.com. Siga os conselhos em resposta automática ou, para saber mais, o diagnóstico :
$ make O=~/build/perf -k NO_LIBPERL=1 NO_LIBPYTHON=1 Makefile:565: newt not found, disables TUI support. Please install newt-devel or libnewt-dev * new build flags or prefix CC ~/build/perf/perf.o CC ~/build/perf/builtin-annotate.o [...] CC ~/build/perf/util/probe-finder.o AR ~/build/perf/libperf.a LINK ~/build/perf/perf GEN perf-archive
Observe que é solução alternativa em vez de uma solução (eu tenho
libperl.so
). -
Marque Makefile para o destino de instalação padrão: its
$(HOME)
. Instaleperf
em seu próprio diretório pessoal:$ make O=~/build/perf -k NO_LIBPERL=1 NO_LIBPYTHON=1 install Makefile:565: newt not found, disables TUI support. Please install newt-devel or libnewt-dev GEN perf-archive install -d -m 755 '~/bin' install ~/build/perf/perf '~/bin' [...] install scripts/python/bin/* -t '~/libexec/perf-core/scripts/python/bin'
-
Verifique se
~/bin
está em PATH -
Verifique se
perf
funciona corretamente (não esqueça de criar um cd no diretório gravável):$ cd $ perf record -f -- sleep 10 [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.001 MB perf.data (~61 samples) ]
A saída é um pouco redigida, substituindo meu diretório inicial por ~
.