acpi_idle と intel_idle

acpi_idle と intel_idle

2 つの 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プロセッサ用の基本ハードウェアアイドルループ* ...

/ * * intel_idleは、従来のACPI process_idleドライバの代わりに特定のIntelプロセッサに*ロードできるCPUidleドライバです。目的は、*intel_idle*がACPIについてもっと知っているので、Linuxをこれらのプロセッサでより効率的にし、LinuxをACPI BIOSのバグに免疫することです。 */

そのため、最新のIntel CPUの場合は、Intel CPUの効率を向上させるように特別に設計されたintel_idleドライバを使用する必要があります。

それでは、一部の設定がintel_idleをロードし、一部の設定がacpi_idleをロードするのはなぜですか?これは、intel_idleドライバを紹介するコミットメッセージに記載されているものです。

2671717265ae6e720a9ba5f13fbec3a718983b65送信

寄稿者: Len Brown 日付: 2010年3月8日 月曜日 14:07:30 -0500

intel_idle:最新のIntelプロセッサ用の基本ハードウェア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プロセッサモジュールを早期にロードするため、ACPIプラットフォームではCONFIG_INTEL_IDLE = mの使いやすさが低下します。

intel_idle は module_init 中にすべてのプロセッサを調べます。後でホット追加されるプロセッサは、アイドル状態でC1を使用するように制限される。

署名者:レンブラウン

その理由は次のとおりです。

  1. 非Intel CPUまたはシステムの古いIntelアーキテクチャ。
  2. CONFIG_INTEL_IDLE=y が .config に表示されませんでした。
  3. cmdline で intel_idle.max_cstate=0 を使用して開始します。

両方の設定で#3を設定したと言われたので、設定の1つがintel_idleをロードする理由が問題です。 "cat /proc/cmdline"を試して、オプションが実際に設定されていることを確認してください。また、「lscpu」または「cat /proc/cpuinfo」を使用して、アーキテクチャ間の違いを確認してください。

おすすめ記事