acpi_idle 與 intel_idle

acpi_idle 與 intel_idle

有兩台 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 有什麼差別?

答案1

簡答:兩者都是 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 中定義)是專為現代 Intel CPU 設計的空閒驅動程式(來自 intel_idle.c 標頭中的註解):

/* * intel_idle.c - 現代英特爾處理器的本機硬體空閒循環 * ...

/* * intel_idle 是一個 cpuidle 驅動程序,可在特定 Intel 處理器上載入 * 取代舊版 ACPI process_idle 驅動程式。其目的是 * 使 Linux 在這些處理器上更加高效,因為 intel_idle * 比 ACPI 了解更多,並且使 Linux 更不受 ACPI BIOS 錯誤的影響。 */

因此,對於現代 Intel CPU,您應該使用 intel_idle 驅動程序,因為它是專門為提高 Intel CPU 的效率而設計的。

那為什麼有些設定會載入 intel_idle 而有些設定會載入 acpi_idle 呢?這是介紹 intel_idle 驅動程式的提交訊息中所述的內容:

提交2671717265ae6e720a9ba5f13fbec3a718983b65

作者:Len Brown 日期:2010 年 3 月 8 日星期一 14:07:30 -0500

intel_idle:最新英特爾處理器的本機硬體 cpuidle 驅動程式

此實驗驅動程式取代 Intel Atom 處理器、Intel Core i3/i5/i7 處理器和相關 Intel Xeon 處理器上的 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

所以原因是:

  1. 系統上的非 Intel CPU 或較舊的 Intel 架構。
  2. .config 中未標記 CONFIG_INTEL_IDLE=y
  3. 在 cmdline 中使用 intel_idle.max_cstate=0 啟動

既然你說你在兩個設定上都設定了 #3,那麼問題是為什麼其中一個設定載入了 intel_idle。嘗試“cat /proc/cmdline”並確保該選項確實已設定。另外,使用“lscpu”或“cat /proc/cpuinfo”檢查架構之間的差異

答案2

另一個答案很好地總結了差異,intel_idle 與 acpi_idle。

提供有關如何啟用每個驅動程式的附加資訊。這假設核心是使用 CONFIG_INTEL_IDLE=y 建構的。

  • 英特爾空閒:在平台 BIOS 上啟用 C-States,並且不使用任何核心引導參數,然後檢查是否/sys/devices/system/cpu/cpuidle/current_driver顯示intel_idle
  • acpi_空閒:在平台 BIOS 上啟用 C-States,使用 intel_idle.max_cstate=0 核心啟動參數,檢查 current_driver 是否為acpi_idle
  • 完全禁用 C 狀態:在平台 BIOS 上停用 C-States,包括 intel_idle.max_cstate=0 核心啟動參數,檢查 current_driver 是否為none

相關內容