Smallhog.cが私のシステムでCPU使用率を100%未満で表示するのはなぜですか?

Smallhog.cが私のシステムでCPU使用率を100%未満で表示するのはなぜですか?

[ドキュメント/cpu-load.txtsmallhog.c]には、LKML.orgのリンクされたスレッドによると、CPUを大量に消費することができ、カーネルにはCPU使用率の数パーセント以下を報告するサンプルプログラムが含まれています。

現在システムでコンパイルして実行してみました。カーネルは、プログラムのCPU使用量が約80%と報告します。だから状況が少し変わったと思います。

源泉:Documentation/cpu-load.txt は、Linux CPU ロードが誤解を招く可能性があることを示します。言及されていない新しい(または既存の)軽減はありますか?

しかし、Smallhog.cはまだ一部影響。 「作業時計」によるとperf stat本物CPU時間を約100%使用します。ただし、一般的なCPU統計によると、topCPU時間の80%しか使用していません。の「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

これは、CPU時間の残りの20%が割り込みに使用されるためです。 :-D。

smallhog特定のCPUで実行するにはを使用してくださいtaskset -c 0 ./smallhog。その中で を押してくださいtop1結果は次のとおりです。

%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「ハードウェア割り込み」を意味します。

おすすめ記事