Linuxカーネルでperfイベントが有効になっていることを確認する方法と、root以外のユーザーとしてperfユーザーモードをインストールする方法は?

Linuxカーネルでperfイベントが有効になっていることを確認する方法と、root以外のユーザーとしてperfユーザーモードをインストールする方法は?

私が調査したところによると、私が作業しているコンピュータでは、 "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/perfGentooのパッケージは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

perfroot以外のユーザーとしてユーザーゾーンツールをインストールする方法

  1. 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
    
  2. ディレクトリに書き込めperfないため、ビルドするディレクトリを作成します。~/build/linux-2.6.36-gentoo-r4

    $ mkdir -p perf
    

    実はそもそもそうではありませんでしたが…make最初に出てくるエラーメッセージは全く役に立たなかったです。

  3. tools/perfカーネルソースディレクトリを入力してください

    $ cd linux-2.6.36-gentoo-r4/tools/perf
    
  4. 立てるperfO=<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.
    
  5. 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)。

  6. デフォルトのインストール先の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'
    
  7. ~/binPATHにいることを確認

  8. 動作していることを確認してください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) ]
    

出力が少し編集され、私のホームディレクトリが~

関連情報