私が調査したところによると、私が作業しているコンピュータでは、 "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
ツールインストールされていません:
$ 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 userlandをインストールできますか?
または、そのコンピュータの管理者にインストールを依頼する必要がありますか?さらに残念ながら、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
答え1
perf
root以外のユーザーとしてユーザーゾーンツールをインストールする方法
kernel-2.6.36-gentoo-r4のソースコードを取得/検索(Gentoo Linuxで)。最初の小切手は次のようになりました。この回答
実際、最初
/usr/src/linux
カーネルソースがまだインストールされていることを確認する必要があります。書き込み可能なディレクトリにコピーできます。 )それで十分ですが、カーネルソース全体をコピーするのではなく、互いにリンクしました。
$ mkdir -p build $ cd build $ ln -s /usr/src/linux-2.6.36-gentoo-r4
ディレクトリに書き込め
perf
ないため、ビルドするディレクトリを作成します。~/build/linux-2.6.36-gentoo-r4
$ 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.
Google で「Perl_push_scope」の未定義参照を検索しました。探すSlackware 13.1へのperfのインストールに失敗しました。unix.stackexchange.comから。次の提案に従ってください。自分に答えてください、またはもっと詳しく言うと診断:
$ 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)
.installationperf
は独自のホームディレクトリにあります。$ 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) ]
出力が少し編集され、私のホームディレクトリが~
。