Perf Top が期待どおりに動作しません。

Perf Top が期待どおりに動作しません。

perf topの出力は完全に混乱しています。

私はCPU全体を消費するsac2というCプログラムを実行しています。特に、1000億バイト以上の配列を繰り返して、すべてのバイトを8ビット整数として追加します。

機能的な観点から見ると、これは興味深いことではありませんが、さまざまな段階で実行するときにさまざまなハードウェアカウンタを収集して比較できます。

topを実行すると以下のようにCPUを100%使用していると出てきます。

top - 00:27:48 up 8 days, 10:10,  4 users,  load average: 0.67, 0.49, 0.58
Tasks: 1881 total,   3 running, 1878 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.4 us,  0.4 sy,  0.0 ni, 99.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 15828906+total, 79267468+free, 51445376 used, 73877056+buff/cache
KiB Swap:  4194300 total,   207800 free,  3986500 used. 97584883+avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
197713 root      20   0   93.2g  20.9g    508 R 100.0  1.4   0:25.91 sac2  
 61859 root      20   0 3875820 748664 102052 S   3.3  0.0  10:40.92 perf
258330 root      20   0  103340   9024   1524 S   2.2  0.0  80:17.05 pmdalinux
194985 root      20   0  163968   4204   1608 R   2.0  0.0   0:10.48 top
  7099 root      20   0   28504   4800    400 S   1.9  0.0 224:19.92 irqbalance
192315 pcp       20   0  125020  35180   2524 S   1.0  0.0   0:06.15 pmlogger
 71102 root      20   0  150408   6092   1584 S   0.7  0.0  25:47.99 dstat

しかし、perf topによると、オーバーヘッド(CPU使用率と仮定)は約40%に過ぎません。その場合は100%になるはずです。

Samples: 68M of event 'cycles:ppp', 4000 Hz, Event count (approx.): 85009918166 lost: 0/0 drop: 0/0
Overhead  Shared Object                 Symbol
  39.63%  sac2                          [.] main
   9.18%  [kernel]                      [k] mem_cgroup_charge_common
   5.10%  [kernel]                      [k] clear_page_c_e
   3.43%  [kernel]                      [k] retint_userspace_restore_args
   3.00%  [kernel]                      [k] sysret_check

また、sac2が完了すると、perf topはsac2が25秒間アクティブであることを示し、オーバーヘッドは着実に減少します。

もう1つの問題は、perf-topのマニュアルページに記載されているほとんどすべてのオプションが無視されることです。

全公開によると、システムには96個のSkylakeコア、192個のスレッド、および1.5TBのメモリがあります。テストを実行すると、マシンに一人だけがあります。私はrootとして実行しており、システムはLinuxカーネル3.10がインストールされているCentos7を実行しています。

1つの可能性は、perf topが3.10カーネルに多くのバグを持っていることです。もう1つの可能性は、オーバーヘッドが何であるかを理解していないことです。それにもかかわらず、ほとんどのオプションが機能しないという事実は非常に受賞しています。誰でも助けることができますか?

ベストアンサー1

また、sac2が完了すると、perf topはsac2が25秒間アクティブであることを示し、オーバーヘッドは着実に減少します。

これは時間平均です。 「観察されたサンプルの割合」はもちろん、観察されたサンプルの数によって異なります。だからこれは完全に予想された!

特に、1000億バイト以上の配列を繰り返して、すべてのバイトを8ビット整数として追加します。

それでは100GBのRAMがありますか?それ以外の場合は、RAMの一部をページアウトする必要があります。出力top結果によると、約16GBのメモリがあることがわかりました!あなたのtop声明は誤解を招き、RAMは1.5TBなので適しています!

perf topまた、ページを取得する必要がある回数(キャッシュ不足など)も計算してみてください。たくさんあなたの場合。これはCPUタイマーに含まれない可能性が高いです!

またperf top、存在しない場合は、-aすべてのコアをサンプリングする代わりに単一のCPUコアに接続します。sac2見ているのと同じコアにプロセスを固定しない限り、プロセスは他の場所で実行される可能性が高くなります。

おすすめ記事