CPUIdle: 요청에도 불구하고 커널이 C6 상태 진입을 거부하는 이유는 무엇일까요?

CPUIdle: 요청에도 불구하고 커널이 C6 상태 진입을 거부하는 이유는 무엇일까요?

작업 부하 실행 중에 커널이 각 c 상태에서 소비하는 시간을 측정하려고 하는데 이상한 동작을 발견했습니다. 커널이 커널에 C6으로 이동하도록 요청하지만 하드웨어는 C1에만 남아 있습니다.

워크로드는 CPU 2-5의 4개 코어에서 실행되며 Turbostat를 사용하여 c-상태 통계를 얻습니다. 1초 측정 간격에 대한 데이터는 다음과 같습니다.

| CPU  | C1% | C1E% | C6%   | CPU%c1 | CPU%c6 |
| :---:|:---:|:---:|:------:|:------:|:------:|
|    2 |1.57 | 0.00|  78.98 | 74.22  |  6.09  |
|    3 |1.80 | 0.00|  78.80 | 74.64  |  5.72  |
|    4 |2.07 | 0.00|  78.66 | 74.02  |  6.48  |
|    5 |1.69 | 0.00|  78.87 | 74.80  |  5.53  |

커널은 이 시간 동안 코어가 거의 80%의 시간 동안 C6에 있어야 하지만 하드웨어는 실제로 C6에서 시간의 6%만 소비하며 대부분 C1에 유지됩니다. 테이블에는 1초 동안의 통계만 포함되어 있지만 전체 워크로드 실행(약 40초) 동안 발생한 거의 모든 내용을 다룹니다. C6으로 이동하고 C1로 이동하라는 커널의 요청을 하드웨어가 거부하는 이유는 무엇일까요?

위 실험을 실행하는 서버에 대한 정보는 다음과 같습니다.

Model name: Intel(R) Xeon(R) Platinum 8280M CPU @ 2.70GHz

Thread(s) per core: 1

Kernel version: 5.15.0-69-generic

CPUidle driver: intel_idle

CPUidle governor: menu

Enabled idle states: POLL, C1, C6 (C1E is disabled)

관련 정보