perf stat -a
クロック速度が表示されるのはなぜですか?三回私のCPUクラスより低いですか?
CPU周波数が最大になるようにテストが1秒間実行されたことを確認したため、電源管理が問題ではないと思います。
# time perf stat -a -r 500 mount --make-rprivate /mnt/a
Performance counter stats for 'system wide' (500 runs):
6.217301 cpu-clock (msec) # 3.782 CPUs utilized ( +- 0.63% )
6 context-switches # 0.998 K/sec ( +- 1.31% )
0 cpu-migrations # 0.018 K/sec ( +- 15.14% )
122 page-faults # 0.020 M/sec ( +- 0.04% )
4,719,129 cycles # 0.759 GHz ( +- 1.93% )
3,998,374 instructions # 0.85 insn per cycle ( +- 0.44% )
805,593 branches # 129.573 M/sec ( +- 0.44% )
22,548 branch-misses # 2.80% of all branches ( +- 0.26% )
0.001644054 seconds time elapsed ( +- 0.62% )
real 0m1.152s
user 0m0.386s
sys 0m0.824s
# rpm -q perf
perf-4.14.16-300.fc27.x86_64
答え1
Ghz 値は、perf stat -a
1 秒あたりのサイクル数を表示しません。 4,719,000サイクルを0.0016秒で割った値は0.76Ghzではなく2.9Ghzです。
perf
示されているのは毎秒平均サイクルのようです。各CPUコアに。 2.9Ghzを0.76Ghzで割ると3.8になります。これはCPUの整数ではありませんが、ほぼ似ています。上記の奇妙な「CPU使用量」の数値と正確に一致することがわかりました。
perf stat
以下なしの比較-a
:
# time perf stat -r 500 mount --make-rprivate /mnt/a
Performance counter stats for 'mount --make-rprivate /mnt/a' (500 runs):
1.323450 task-clock (msec) # 0.812 CPUs utilized ( +- 0.84% )
0 context-switches # 0.008 K/sec ( +- 44.54% )
0 cpu-migrations # 0.000 K/sec
122 page-faults # 0.092 M/sec ( +- 0.04% )
2,668,696 cycles # 2.016 GHz ( +- 0.28% )
3,090,908 instructions # 1.16 insn per cycle ( +- 0.04% )
611,827 branches # 462.297 M/sec ( +- 0.03% )
20,252 branch-misses # 3.31% of all branches ( +- 0.09% )
0.001630517 seconds time elapsed ( +- 0.82% )
real 0m1.089s
user 0m0.378s
sys 0m0.715s
さらに、報告された期間はperf stat -a
生産性計算を完全に表していません。 perf record -a
次に、perf report
最も人気のあるホットスポットが次のように表示されます。
# perf record -a sh -c "for i in {1..500}; do mount --make-rprivate /mnt/a; done"
...
# perf report
...
19.40% swapper [kernel.kallsyms] [k] intel_idle
...
つまり、CPUは頻度アイドルコアから下げると、パフォーマンスカウントサイクルには、コアがCPUを停止し、CPUアイドル状態に入ったときに多数の「使用済み」サイクルが含まれているように見えます。
(または少なくともカーネルは努力するCPUを低電力アイドル状態に設定します。perf
CPUを頻繁に停止することはアイドル状態をまったく妨げているかどうかわかりません.)