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. 그 안에서 를 누르세요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"하드웨어 인터럽트"를 의미합니다.

관련 정보