"perf stat -a"가 내 CPU 등급보다 낮은 클럭(Ghz)을 표시하는 이유는 무엇입니까?

"perf stat -a"가 내 CPU 등급보다 낮은 클럭(Ghz)을 표시하는 이유는 무엇입니까?

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를 저전력 유휴 상태로 설정합니다. perfCPU를 자주 중단하는 것이 유휴 상태를 전혀 방해하는지 모르겠습니다 .)

관련 정보