2017-07-02 23 views
1

コマンドラインオプションに従って異なるベンチマークを生成するハーネスバイナリがあるとします。私はこれらのベンチマークのサンプリングに本当に興味があります。は、サンプルの子プロセスを "perf record"または "perf record"できますか?

  1. 変更ベンチマークを実行し、「PERFレコード」子プロセスを生成して、レコードの$ harness- PERF

  2. がちょうど」を行うサンプリングを行うためのハーネスバイナリ:

    は、私は3つのオプションを持っていますバイナリ "も子プロセスをサンプリングすることを期待しています。

  3. "perf-record-a $ harness-binary" "すべてのCPUからシステム全体のコレクション"を実行します。これはルートアクセスを必要とするため、私の場合は実行できません。

perfレコードが実際に子プロセスをサンプリングする場合、Approach#2はクリーンです。これが事実かどうかを誰かが確認するのに役立つことができますか?文書やパーツコードへのポインタは高く評価されます。

アプローチ2が実現可能で、ベンチマークがハーネスよりもCPUを大量に使用する場合、ベンチマークサンプリングの品質は合理的に良いと思われます。 -aオプションレコードなし

おかげ

答えて

1

perf record(クローン化され、スレッド)のすべてのフォークのプロセス、ターゲットプロセスからの記録開始後。 perf record ./programを使用すると、すべての子プロセスもプロファイルされ、perf record -p $PIDで既に実行中の$ PIDに接続すると、ターゲットプロセスと、接続後に開始されるすべての子プロセスがプロファイルされます。プロファイリングの継承はデフォルトで有効になっています(必要に応じてコード:attr->inherit = !opts->no_inherit; & no_inherit)。-iオプションで無効にすることができ、-t--per-threadで無効にすることもできます。

この継承はperf statのようである:https://perf.wiki.kernel.org/index.php/Tutorial

デフォルトのカウントと継承

、PERF STATは、すべてのプロセスのスレッドと、後続の子プロセスとスレッドのためにカウントされます。これは、-iオプションを使用して変更できます。スレッドごとまたはプロセスごとにカウントの内訳を取得することはできません。

そして-iオプションがあまりにもperf recordのためにそこにある:http://man7.org/linux/man-pages/man1/perf-record.1.html

-i, --no-inherit 
     Child tasks do not inherit counters. 

perf reportを収集組み合わせperf.dataファイルからいくつかのPIDからのイベントをフィルタリングすることができます。

関連する問題