有两个 SLES 11 服务器:
SERVER311:~ # cat /sys/devices/system/cpu/cpuidle/current_driver
acpi_idle
SERVER311:~ #
Run Code Online (Sandbox Code Playgroud)
和:
SERVER705:~ # cat /sys/devices/system/cpu/cpuidle/current_driver
intel_idle
SERVER705:~ #
Run Code Online (Sandbox Code Playgroud)
两者都具有:
intel_idle.max_cstate=0 processor.max_cstate=0
Run Code Online (Sandbox Code Playgroud)
在:“/boot/grub/menu.lst”中,被重新启动。
问题: acpi_idle 和 intel_idle 有什么区别?
小智 5
简短回答:两者都是 CPU 空闲驱动程序的不同实现。acpi_idle 是默认驱动程序,支持所有 CPU 架构,而 intel_idle 是 Intel CPU 特定的。
更多详细信息:用于 CPU 空闲驱动程序的 API 在 include/linux/cpuidle.h 中定义。它定义了“CPU 空闲电源管理的通用框架”。acpi_idle 驱动程序(在drivers/acpi/processor_idle.c 中定义)为所有CPU 架构实现了这种行为。intel_idle(在drivers/idle/intel_idle.c 中定义)是专为现代英特尔CPU 设计的空闲驱动程序(来自intel_idle.c 标头中的注释):
/* * intel_idle.c - 现代英特尔处理器的本机硬件空闲循环 * ...
/* * intel_idle 是一个 cpuidle 驱动程序,它加载在特定的 Intel 处理器上 * 代替传统的 ACPI processor_idle 驱动程序。目的是让 Linux 在这些处理器上更高效,因为 intel_idle 比 ACPI 了解更多,同时让 Linux 对 ACPI BIOS 错误更免疫。*/
因此,对于现代 Intel CPU,您应该使用 intel_idle 驱动程序,因为它专为提高 Intel CPU 的效率而设计。
那么为什么有些设置加载 intel_idle 而有些设置加载 acpi_idle?这是介绍 intel_idle 驱动程序的提交消息中所述的内容:
提交 2671717265ae6e720a9ba5f13fbec3a718983b65
作者:Len Brown 日期:Mon Mar 8 14:07:30 2010 -0500
intel_idle:适用于最新 Intel 处理器的本机硬件 cpuidle 驱动程序
此实验驱动程序取代了英特尔凌动处理器、英特尔酷睿 i3/i5/i7 处理器和相关英特尔至强处理器上的 acpi_idle。
它不支持 Intel 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。
签字人: Len Brown
所以原因是:
既然你说你在两个设置上都设置了 #3,那么问题是为什么其中一个加载了 intel_idle。尝试 'cat /proc/cmdline' 并确保该选项已真正设置。另外,使用“lscpu”或“cat /proc/cpuinfo”检查体系结构之间的差异