2016-05-15 5 views
2

PERFは 出力./sample.out -dをstatです:perfで「カウントされない」解決方法

Performance counter stats for './sample.out': 

      0.586266 task-clock (msec)   # 0.007 CPUs utilized   
       2 context-switches   # 0.003 M/sec     
       1 cpu-migrations   # 0.002 M/sec     
       116 page-faults    # 0.198 M/sec     
      7,35,790 cycles     # 1.255 GHz      [81.06%] 
    <not counted> stalled-cycles-frontend 
    <not supported> stalled-cycles-backend 
    <not counted> instructions    
    <not counted> branches     
    <not counted> branch-misses   
    <not supported> L1-dcache-loads:HG  
    <not counted> L1-dcache-load-misses:HG 
    <not counted> LLC-loads:HG    
    <not supported> LLC-load-misses:HG  

     0.088013919 seconds time elapsed 

から表示されますなぜ私が読んで。しかし、私は指示や枝などの基本的なカウンターにもなっています。誰もそれを働かせる方法を提案できますか?

興味深いのは、次のとおりです。STATの睡眠3

PERF

sudoが与えられる出力:STAT -C 1睡眠PERF

Performance counter stats for 'sleep 3': 

      0.598484 task-clock (msec)   # 0.000 CPUs utilized   
       2 context-switches   # 0.003 M/sec     
       0 cpu-migrations   # 0.000 K/sec     
       181 page-faults    # 0.302 M/sec     
    <not counted> cycles     
    <not counted> stalled-cycles-frontend 
    <not supported> stalled-cycles-backend 
    <not counted> instructions    
    <not counted> branches     
    <not counted> branch-misses 

sudoの3

Performance counter stats for 'CPU(s) 1': 

     3002.640578 task-clock (msec)   # 1.001 CPUs utilized   [100.00%] 
       425 context-switches   # 0.142 K/sec     [100.00%] 
       9 cpu-migrations   # 0.003 K/sec     [100.00%] 
       5 page-faults    # 0.002 K/sec     
     7,82,97,019 cycles     # 0.026 GHz      [33.32%] 
     9,38,21,585 stalled-cycles-frontend # 119.83% frontend cycles idle [33.32%] 
    <not supported> stalled-cycles-backend 
     3,09,81,643 instructions    # 0.40 insns per cycle   
              # 3.03 stalled cycles per insn [33.32%] 
     70,15,390 branches     # 2.336 M/sec     [33.32%] 
      6,38,644 branch-misses    # 9.10% of all branches   [33.32%] 

     3.001075650 seconds time elapsed 

なぜこれは予期しない動作ですか?

はあなたに

答えて

-2

sudo perf stat -C 1 sleep 3プロファイルCPU 1に起こるすべて、すべてのプロセスとカーネルコードをありがとうございました。そのため、sudoが必要です。これは、タスククロックが〜3002 msである理由です。

perf stat sleep 3(これは、sudoを必要としません)は、プロセス自体をプロファイルします。sleep(1)タスククロックは、それをCPU時間の〜0.6 msで測定しました。


sleepはほとんど何もしません。実行される命令のほとんどは動的リンカーにあります。 @ osgxの答えが指摘しているように、perfにはマシン上に十分なハードウェアカウンタがないのでカウントが足りないため、それらは多重化されています。 sleepがスリープしていて、実行されていない間に、カウントのないカウンターは録音していたに違いありません。

良い結果を得るには、カウントしているカウンタに応じて、少なくとも100ミリ秒、好ましくは約1秒のループでマイクロベンチマークを入れて、信号対ノイズ比を上げてください。

+0

'PERF stat'は、統計的サンプリング(HTTPではありません//lxr.free-electrons.com/source/tools/perf/builtin-stat.c?v=4.4 - "builtin statコマンド:任意のワークロード、CPU、または特定のPIDについての**正確な**パフォーマンスカウンタサマリーの概要を与える")、すべてのイベントを見ることができるhw pmuの単純なカウントモードでなければなりません。 'sleep 1'と' echo 1'はともに '' strace sleep 1''または '' ltrace sleep 1''をチェックして、何十万回ものサイクリングをしています。 perfレコードだけが統計的サンプリングです。 statの後に-vvフラグを付けて、perf_eventsシステムコールの「サンプリング」フィールドをチェックすることもできます。 – osgx

+0

@osgx:私は、HW PMU自体が50k命令/サイクル/ブランチなど何かの割り込みをトリガするだけで、サンプルを実行することを意味しましたか?クロックサイクルごとに割り込みを発生させることはできません。または、転がったり割り込みを引き起こしたりしなかったカウンタであっても、正確なカウントを取得できますか? –

+0

@osgx:とにかく、あなたの答えは明らかに正しいものです。私のエラーを修正してくれてありがとう。私はそれが多重化カウンターであることに気付くために '-C'出力を十分に見ていなかったし、それはOPの観察を完全に説明している。 –

4

非常に短いプログラムのperf stat -dの典型的な問題は、統計的サンプリングではなく、多重(角カッコ内の%は[33%]言う - このカウンタは、時間のみを実行しているの約33%を数えました)。

PMUに一度に多くのイベントを監視するように依頼すると、perfは実際のハードウェア(CPUのPMUパフォーマンス監視ユニット)に必要なすべてのカウンタを同時にマップすることができません。典型的なPMUには、4または7または8個の独立したカウンタがあるかもしれませんが、いくつかのSMTテクノロジが有効になっている場合(たとえば、HT - ハイパースレッディング)、数を2で割ることができます。

perfに非常に多くのカウンター(perf stat出力に6つのHWイベントがサポートされています)をカウントするように要求すると、すべてのカウンターが小さなグループに分割されます。グループは、perf_eventsがそれらを変更する機会を得たいくつかの時点、例えばタスククロックティック(約3ms)でカーネルによって変更されます。

あなたはあなたのイベントの小さなセットで数に実行する分割することができます - 任意のSWのイベントの数と走行あたり2-4 HWイベント:

perf stat -e task-clock,page-faults,cycles,stalled-cycles-frontend 
perf stat -e task-clock,page-faults,cycles,instructions    
perf stat -e task-clock,page-faults,branches,branch-misses   
perf stat -e task-clock,page-faults,L1-dcache-load-misses:HG,LLC-loads:HG  
関連する問題