.. _amd_cpu_c-state:
=======================
AMD CPU c-state
=======================
.. _amd_cpu_c-state_freezing:
ADM Ryzon处理器随机"冻结"问题
=================================
AMD Ryzon处理器似乎在 ``c-states`` 电源管理上存在缺陷,可能会在低负载时随机"冻结"。这个问题绕过低方法是在内核参数添加::
processor.max_cstate=1
此外,一些系统中内核可以覆盖BIOS设置(见 :ref:`acpi_cpufreq` BIOS有一种设置 ``Power Regulator = OS Control Mode`` 表示操作系统可以决定电源管理 ),此时就需要再加上一个 ``intel_idle.max_cstate=0`` 来确保不进入睡眠状态。否则执行 ``cat /sys/module/intel_idle/parameters/max_cstate`` 会看到数值是 ``9`` ,这样就存在逻辑上冲突(感觉AMD这块有BUG)
所以,我实际配置:
.. literalinclude:: amd_cpu_c-state/disable_cstate
:language: bash
:caption: 关闭AMD的cstate避免"冻结"问题
重启服务器后检查::
$cat /sys/module/intel_idle/parameters/max_cstate
0
也即是(对于intel处理)强制不进入 :ref:`cpu_c-state` 的节能状态,这个措施对于配置了允许OS控制BIOS的电源管理(见 :ref:`acpi_cpufreq` )是有效的,实践验证,对这种BIOS配置的AMD处理器也需要这样处理。
.. note::
上述问题我是在国产化海光处理器上发现,该处理器是 :ref:`amd_zen` 微架构,应该也存在这样的缺陷。最好的解决方案可能还是在BIOS中关闭Power Manager,这样就不会出现上述冲突。
参考
========
- `What are the CPU c-states? How to check and monitor the CPU c-state usage in Linux per CPU and core? `_
- `wmealing/C-states.md `_
- `Random "Freezing" with AMD Ryzen CPUs `_