有两个SLES 11服务器:
SERVER311:~ # cat /sys/devices/system/cpu/cpuidle/current_driver
acpi_idle
SERVER311:~ #以及:
SERVER705:~ # cat /sys/devices/system/cpu/cpuidle/current_driver
intel_idle
SERVER705:~ #两者都有:
intel_idle.max_cstate=0 processor.max_cstate=0在:"/boot/grub/menu.lst“中,被重新启动。
问题是: acpi_idle和intel_idle有什么区别?
发布于 2017-11-20 21:02:48
简短的回答:两者都是CPU空闲驱动程序的不同实现。acpi_idle是默认的驱动程序,支持所有的CPU体系结构,而intel_idle是Intel特有的。
更多细节: CPU空闲驱动程序的API在include/linux/cpuidle.h中定义。它定义了“CPU空闲电源管理的通用框架”。acpi_idle驱动程序(在驱动程序/acpi/processeridle.c中定义)为所有CPU体系结构实现了这种行为。intel_idle (定义在驱动程序/空闲/ intel_idle.c中)是专门为现代英特尔CPU设计的空闲驱动程序(来自intel_idle.c头中的注释):
/* * intel_idle.c -现代英特尔处理器的本机硬件空闲循环*. /* * intel_idle是一个cpuidle驱动程序,它加载在特定的英特尔处理器*上,而不是传统的processor_idle驱动程序。其目的是*使Linux在这些处理器上更高效,正如intel_idle所知道的那样*比ACPI更有效,并且使Linux更不受ACPI BIOS错误的影响。*/
因此,对于现代英特尔CPU,您应该使用intel_idle驱动程序,因为它是专门为提高英特尔CPU的效率而设计的。
那么,为什么有些设置会用intel_idle加载,有些会用acpi_idle加载呢?这是提交消息中介绍intel_idle驱动程序的内容:
提交2671717265ae6e720a9ba5f13fbeca718983b65作者: Len Brown Date: Mon 8 14:07:30 2010 -0500 intel_idle:用于最新英特尔处理器的本地硬件cpuidle驱动程序这个实验性驱动程序取代了英特尔Atom处理器上的acpi_idle、Intel Core i 3/i5/i7处理器和相关的Intel Xeon处理器。它不支持英特尔的Core2处理器或更早。对于配置有ACPI的内核,CONFIG_INTEL_IDLE=y允许intel_idle在ACPI处理器驱动程序之前探测。使用"intel_idle.max_cstate=0“引导将禁用intel_idle,系统将返回到ACPI的"acpi_idle”。典型的Linux发行版很早就加载了ACPI处理器模块,这使得CONFIG_INTEL_IDLE=m在ACPI平台上不容易使用。intel_idle在module_init时间探测所有处理器。稍后热添加的处理器将仅限于在空闲时使用C1。签名人:伦·布朗
因此,原因是:
既然您说在这两个设置上都设置了#3,那么问题是为什么其中一个安装了intel_idle。尝试'cat /proc/cmdline‘并确保选项是真正设置的。此外,检查使用“lscpu”或“cat/proc/cpuinfo”的架构之间的差异。
发布于 2020-02-18 18:51:20
另一个答案很好地总结了不同之处,intel_idle和acpi_idle。
提供关于如何启用每个驱动程序的附加信息。这假设内核是用CONFIG_INTEL_IDLE=y构建的。
/sys/devices/system/cpu/cpuidle/current_driver是否显示intel_idle。acpi_idle.none。https://unix.stackexchange.com/questions/405775
复制相似问题