为什么cpu-cycle比cpu当前频率小得多?

时间:2018-01-19 05:54:00

标签: linux performance optimization x86-64

我的cpu最大频率为2.8GHZ,cpu频率模式是性能,但cpu-cycle只有0.105GHZ来自perf,为什么?

cpu-cycles事件是0x3c,它是CPU_CLK_UNHALTED.THREAD_P还是CPU_CLK_THREAD_UNHALTED.REF_XCLK?

我可以直接从perf读取PMC寄存器吗?

现在命令'mpstat'使用cpu-8达到了90%。

CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
 8    0.00    0.00    0.98    0.00    0.00    0.00    0.00   89.22    0.00    9.80
 8    0.00    0.00    0.99    0.00    0.00    0.00    0.00   88.12    0.00   10.89

cpu是Intel(R)Xeon(R)CPU E5-2680 v2 @ 2.80GHz。

processor       : 8
vendor_id       : GenuineIntel
cpu family      : 6
model           : 62
model name      : Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
stepping        : 4
microcode       : 0x428
cpu MHz         : 2800.000
cache size      : 25600 KB

我想通过perf了解cpu-8。

perf stat -C 8

Performance counter stats for 'CPU(s) 8':

   8828.237941      task-clock (msec)         #    1.000 CPUs utilized          
        11,550      context-switches          #    0.001 M/sec                  
             0      cpu-migrations            #    0.000 K/sec                  
             0      page-faults               #    0.000 K/sec                  
   926,167,840      cycles                    #    0.105 GHz                    
 4,012,135,689      stalled-cycles-frontend   #  433.20% frontend cycles idle   
   473,099,833      instructions              #    0.51  insn per cycle         
                                              #    8.48  stalled cycles per insn
    98,346,040      branches                  #   11.140 M/sec                  
     1,254,592      branch-misses             #    1.28% of all branches        

   8.828177754 seconds time elapsed

cpu-cycles只有0.105GHZ,真的很奇怪。

我试着理解cpu-cycles意思。

cat /sys/bus/event_source/devices/cpu/events/cpu-cycles
event=0x3c

我在19.6会议,第40页上查阅了“英特尔®64和IA-32架构软件开发人员手册第3卷”文档。

enter image description here

我还检查了cpu频率设置,cpu应该以最大频率运行。

cat scaling_governor
performance

cat scaling_governor
performance

============================================== < / p>

我尝试这个命令:

 taskset -c 8 stress --cpu 1 

perf stat -C 8 sleep 10

 Performance counter stats for 'CPU(s) 8':

      10000.633899      task-clock (msec)         #    1.000 CPUs utilized          
             1,823      context-switches          #    0.182 K/sec                  
                 0      cpu-migrations            #    0.000 K/sec                  
                 8      page-faults               #    0.001 K/sec                  
    29,792,267,638      cycles                    #    2.979 GHz                    
     5,866,181,553      stalled-cycles-frontend   #   19.69% frontend cycles idle   
    54,171,961,339      instructions              #    1.82  insn per cycle         
                                                  #    0.11  stalled cycles per insn
    16,356,002,578      branches                  # 1635.497 M/sec                  
        33,041,249      branch-misses             #    0.20% of all branches        

      10.000592203 seconds time elapsed

有关我的环境的一些详细信息

我运行一个应用程序,让我们称之为'A',在虚拟机'V'中,在主机'H'中。

虚拟机由qume-kvm创建。

该应用程序用于从网络接收数据包并处理它们。

1 个答案:

答案 0 :(得分:0)

CPU 周期可能会因为 CPU 进入 C1 或 C2 空闲状态而被冻结。