
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
見ているのと同じコアにプロセスを固定しない限り、プロセスは他の場所で実行される可能性が高くなります。