分类: IT业界
2011-12-13 14:42:47
最近在设置一个实时、低延迟Linux系统时,我遭遇了,至少作为一名系统管理员会这样的一头雾水。
当前戴尔服务器采用的是可在闲置时保持低电压状态的处理器。闲置状态称为“C状态”。
C0状态是正常运行状态。如果一个处理器置于较高级别的C状态,就可以节省电力,但处理器也得花更长的时间在必要时再次开始执行代码。当调度代码即将在闲置处理器上运行时,这种迟缓导致了延迟时间的略微加长。之所以这样,是因为非0的C状态会从内部关闭处理器的某些组件,需要花费时间让处理器重回C0状态。C状态的级别越高,越能节省电力,但产生的延迟也越长。
对于大多数系统,这样相当值得 - 让处理器重回C0状态所需的若干微秒的延迟不会造成问题。然而,某些应用程序要求系统延迟极低,即使耗费较多电力也在所不辞。考虑到这一点,很多戴尔系统允许在BIOS系统设置工具程序中禁用C状态。
然而,最近的Linux核心(例如用于红帽企业级Linux 6 的核心)包含了针对英特尔处理器的C状态驱动程序,称为“intel_idle”。该驱动程序试图将C状态应用于英特尔处理器 - 即使BIOS系统设置中已经禁用C状态。毫不奇怪,这会引起一定的混乱。想看看您的系统是否在使用这个驱动程序?请在您的核心信息中搜索“intel_idle”。
如果您努力最小化系统延迟,想要禁用C状态,请注意:在BIOS设置中关闭C状态可能还不够。如果发现正在使用intel_idle C状态驱动程序,您可以使用核心参数“intel_idle.max_cstate=0”来禁用intel_idle驱动程序,至此,Linux应恢复为采用由BIOS提供的ACPI(高级配置和电源管理接口)表开展C状态控制。