为什么 Smallhog.c 在我的系统上显示 CPU 使用率低于 100%?

为什么 Smallhog.c 在我的系统上显示 CPU 使用率低于 100%?

[文档/cpu-load.txt] 包括一个示例程序,smallhog.c.根据 LKML.org 上的链接线程,它能够占用 CPU,并且内核仅报告百分之几或更少的 CPU 使用率。

我尝试在当前系统上编译并运行它。内核报告该程序的 CPU 使用率约为 80%。所以情况似乎发生了一些变化。

来源:Documentation/cpu-load.txt 表示 Linux cpu 负载 *可能* 具有误导性。是否有未提及的新(或旧)缓解措施?

但smallhog.c仍然有一些影响。根据“任务时钟” perf stat,它真的使用大约 100% 的 CPU 时间。但正常的 CPU 统计认为top它只使用了 80% 的 cpu 时间。中的“user”+“sys”也是如此perf stat

为什么我的特定系统不报告 100% CPU 使用率smallhog.c

我的内核版本是5.1.15-300.fc30.x86_64。

Linux 说我的 TSC 稳定。

$ sudo perf stat ./smallhog
^C./smallhog: Interrupt

 Performance counter stats for './smallhog':

         10,072.25 msec task-clock                #    1.000 CPUs utilized          
               235      context-switches          #    0.023 K/sec                  
                65      cpu-migrations            #    0.006 K/sec                  
                44      page-faults               #    0.004 K/sec                  
    28,736,276,128      cycles                    #    2.853 GHz                       75.00%)
    18,394,555,284      instructions              #    0.64  insn per cycle           (74.99%)
     3,530,232,530      branches                  #  350.491 M/sec                    (75.01%)
        58,545,233      branch-misses             #    1.66% of all branches          (75.01%)

      10.076806251 seconds time elapsed

       3.481505000 seconds user
       4.458544000 seconds sys
$ sudo journalctl -k |grep -iE "tsc|sched_clock"
Jul 09 10:58:25 localhost kernel: tsc: Fast TSC calibration using PIT
Jul 09 10:58:25 localhost kernel: tsc: Detected 2294.623 MHz processor
Jul 09 10:58:25 localhost kernel: clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x21135dc5295, max_idle_ns: 440795305870 ns
Jul 09 10:58:25 localhost kernel: TSC deadline timer enabled
Jul 09 10:58:25 localhost kernel: clocksource: Switched to clocksource tsc-early
Jul 09 10:58:25 localhost kernel: sched_clock: Marking stable (1353126208, 521414)->(1368149024, -14501402)
Jul 09 10:58:25 localhost kernel: tsc: Refined TSC clocksource calibration: 2294.689 MHz
Jul 09 10:58:25 localhost kernel: clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x21139c00f92, max_idle_ns: 440795293667 ns
Jul 09 10:58:25 localhost kernel: clocksource: Switched to clocksource tsc
$ lscpu
...
Vendor ID:           GenuineIntel
CPU family:          6
Model:               61
Model name:          Intel(R) Core(TM) i5-5300U CPU @ 2.30GHz
Stepping:            4
CPU MHz:             1189.926
CPU max MHz:         2900.0000
...

答案1

因为另外 20% 的 CPU 时间用于中断:-D。

smallhog在特定 CPU 上运行,使用taskset -c 0 ./smallhog.在里面top,按1键。结果如下:

%Cpu0 : 22.6 us, 56.1 sy, 0.0 ni, 0.0 id, 0.0 wa, 21.3 hi, 0.0 si, 0.0 st

hi意思是“硬件中断”。

相关内容