[문서/cpu-load.txt
smallhog.c
] 에는 LKML.org의 링크된 스레드에 따르면 CPU를 많이 차지할 수 있고 커널은 CPU 사용량의 몇 퍼센트 이하만 보고하는 샘플 프로그램이 포함되어 있습니다 .현재 시스템에서 컴파일하고 실행해 보았습니다. 커널은 프로그램의 CPU 사용량이 약 80%라고 보고합니다. 그래서 상황이 좀 바뀐 것 같아요.
원천:Documentation/cpu-load.txt는 Linux CPU 로드가 *오도될 수* 있음을 나타냅니다. 언급되지 않은 새로운(또는 기존) 완화가 있습니까?
하지만 Smallhog.c는 여전히일부영향. "작업 시계"에 따르면 perf stat
,진짜CPU 시간을 약 100% 사용합니다. 그러나 일반적인 CPU 통계에 따르면 top
CPU 시간의 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
"하드웨어 인터럽트"를 의미합니다.