%EC%9D%84%20%ED%91%9C%EC%8B%9C%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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
초당 사이클 수를 표시하지 않습니다. 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를 자주 중단하는 것이 유휴 상태를 전혀 방해하는지 모르겠습니다 .)