私がチェックしたところ、「perf」サブシステムのカーネル側が、作業しているコンピューターで有効になっているようです。
カーネル構成を確認すると、次のようになります
$ zgrep "_PERF[_= ]" /proc/config.gz
CONFIG_HAVE_PERF_EVENTS=y
CONFIG_PERF_EVENTS=y
# CONFIG_PERF_COUNTERS is not set
CONFIG_HAVE_PERF_EVENTS_NMI=y
perf_events FAQ で説明されているチェックも行いました:
$ cat /proc/sys/kernel/perf_event_paranoid
1
しかし、perf
toolがインストールされていません:
$ perf
-bash: perf: command not found
$ /sbin/perf
-bash: /sbin/perf: No such file or directory
$ /usr/sbin/perf
-bash: /usr/sbin/perf: No such file or directory
自分のホームディレクトリ( '2.6.36-gentoo-r4'カーネル用)に、perfユーザーランドを通常のユーザーとしてインストールできますか?
または、問題のマシンの管理者にインストールを依頼する必要がありますか?残念ながらdev-util/perf
GentooのパッケージはAMD64でマスク(ブロック)されています。
$ emerge --search perf
[...]
* dev-util/perf [ Masked ]
Latest version available: 2.6.35_rc4
Latest version installed: [ Not Installed ]
Size of files: 73,503 kB
Homepage: http://perf.wiki.kernel.org/
Description: Userland tools for Linux Performance Counters
License: GPL-2
perf
userlandツールをインストールする方法kernel-2.6.36-gentoo-r4のソースを取得/検索 (Gentoo Linux)。 この答え からの最初のチェック
実際、first_
/usr/src/linux
_を見て、カーネルソースがまだインストールされているかどうかを確認する必要があります。書き込み可能なディレクトリにコピーするだけです。)
カーネルソース全体をコピーする代わりに、それらをリンクしただけで十分でした:
_$ mkdir -p build
$ cd build
$ ln -s /usr/src/linux-2.6.36-gentoo-r4
_
_~/build/linux-2.6.36-gentoo-r4
_ディレクトリに書き込むことができないので、perf
が構築されるディレクトリを作成します。
_$ mkdir -p perf
_
実際、私が最初にしたことではありませんでした... make
からのエラーメッセージは、最初はまったく役に立ちませんでした。
カーネルソースの_tools/perf
_ディレクトリに移動します
_$ cd linux-2.6.36-gentoo-r4/tools/perf
_
ビルドperf
、_O=<destdir>
_オプションをmakefileに渡すことを忘れないでくださいシンボリックリンクされたカーネルソースではなくコピーした場合の問題)。
_$ 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.
_
「「Perl_Push_scope」への未定義の参照」に対するGoogle。 unix.stackexchange.comで Slackware 13.1にperfをインストールできない を見つけます。 自己回答 のアドバイスに従うか、診断をもっと上手くするには:
_$ 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
_
これは解決策ではなく回避策であることに注意してください(_libperl.so
_があります)。
Makefileでデフォルトのインストール先を確認してください:その$(HOME)
。 perf
を自分のホームディレクトリにインストールします。
_$ 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'
_
_~/bin
_がPATHにあることを確認します
perf
が正しく動作することを確認します(書き込み可能なディレクトリでcdすることを忘れないでください):
_$ 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) ]
_
出力は少し編集されており、ホームディレクトリが_~
_に置き換えられています。