
SLES 11 サーバーは 2 つあります。
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 プロセッサ アイドル ドライバの代わりに、特定の Intel プロセッサにロードされる cpuidle ドライバです。intel_idle は ACPI よりも多くの情報を持っているため、これらのプロセッサで Linux の効率を高め、ACPI BIOS バグに対する Linux の耐性を高めることが目的です。 */
したがって、最新の 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 プロセッサ モジュールを早期にロードするため、CONFIG_INTEL_IDLE=m は ACPI プラットフォームでは簡単には役に立ちません。
intel_idle は module_init 時にすべてのプロセッサをプローブします。後でホットアドされるプロセッサはアイドル時に C1 を使用するように制限されます。
署名者: Len Brown
理由は次のとおりです。
- システム上の非 Intel CPU または古い Intel アーキテクチャ。
- .config で CONFIG_INTEL_IDLE=y とマークされていない
- コマンドラインで 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 ステートを有効にし、カーネル ブート引数を使用しない場合は、 が
/sys/devices/system/cpu/cpuidle/current_driver
表示されることを確認しますintel_idle
。 - acpi_アイドル: プラットフォーム BIOS で C-States を有効にし、intel_idle.max_cstate=0 カーネル ブート引数を使用し、current_driver が であることを確認します
acpi_idle
。 - C-Stateを完全に無効にする: プラットフォーム BIOS で C ステートを無効にし、intel_idle.max_cstate=0 カーネル ブート引数を含め、current_driver が であることを確認します
none
。