CPUIdle:尽管内核请求进入 C6 状态,但内核拒绝进入 C6 状态的原因可能是什么?

CPUIdle:尽管内核请求进入 C6 状态,但内核拒绝进入 C6 状态的原因可能是什么?

我正在尝试测量工作负载运行期间内核在每个 c 状态下花费的时间,发现一个奇怪的现象:内核请求内核进入 C6,但硬件只停留在 C1。

工作负载在 4 个核心上运行:cpu 2-5,我使用 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  |

虽然内核在这段时间内要求核心进入 C6 的时间接近 80%,但硬件实际上只花费了 6% 的时间在 C6 中,主要停留在 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)

相关内容