我正在尝试测量工作负载运行期间内核在每个 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)