首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >acpi_idle对intel_idle

acpi_idle对intel_idle
EN

Unix & Linux用户
提问于 2017-11-20 13:40:44
回答 2查看 7.8K关注 0票数 4

有两个SLES 11服务器:

代码语言:javascript
复制
SERVER311:~ # cat /sys/devices/system/cpu/cpuidle/current_driver
acpi_idle
SERVER311:~ #

以及:

代码语言:javascript
复制
SERVER705:~ # cat /sys/devices/system/cpu/cpuidle/current_driver
intel_idle
SERVER705:~ #

两者都有:

代码语言:javascript
复制
intel_idle.max_cstate=0 processor.max_cstate=0

在:"/boot/grub/menu.lst“中,被重新启动。

问题是: acpi_idle和intel_idle有什么区别?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 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。签名人:伦·布朗

因此,原因是:

  1. 系统上的非Intel CPU或更老的Intel体系结构。
  2. 在CONFIG_INTEL_IDLE=y中未标记为.config
  3. 在cmdline中使用intel_idle.max_cstate=0引导

既然您说在这两个设置上都设置了#3,那么问题是为什么其中一个安装了intel_idle。尝试'cat /proc/cmdline‘并确保选项是真正设置的。此外,检查使用“lscpu”或“cat/proc/cpuinfo”的架构之间的差异。

票数 6
EN

Unix & Linux用户

发布于 2020-02-18 18:51:20

另一个答案很好地总结了不同之处,intel_idle和acpi_idle。

提供关于如何启用每个驱动程序的附加信息。这假设内核是用CONFIG_INTEL_IDLE=y构建的。

  • intel_idle:在平台BIOS上启用C状态,不使用任何内核引导参数,然后检查/sys/devices/system/cpu/cpuidle/current_driver是否显示intel_idle
  • acpi_idle:在平台BIOS上启用C状态,使用intel_idle.max_cstate=0内核引导参数,检查current_driver是acpi_idle.
  • 完全禁用C状态:禁用平台BIOS上的C状态,包括intel_idle.max_cstate=0内核引导参数,检查current_driver是none
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/405775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档