15.2 ACPI

ACPI (advanced configuration and power interface)は、オペレーティングシステムが個々のハードウェアコンポーネントをセットアップ、および制御できるように設計されています。ACPIは、PnPとAPMの両方の後継となります。また、ACPIはバッテリ、ACアダプタ、温度、ファン、およびclose lidbattery lowなどのシステムイベントに関する情報も提供します。

BIOSには個々のコンポーネントとハードウェアアクセス方法についての情報が入ったテーブルがあります。オペレーティングシステムは、この情報を使用して、割り込みまたはコンポーネントの有効化と無効化などのタスクを実行します。BIOSに格納されているコマンドを、オペレーティングシステムが実行するとき、機能はBIOSの実装方法に依存します。ACPIが検出可能で、ロードできるテーブルは、/var/log/boot.msgにレポートされます。ACPIに生じた問題のトラブルシューティングについては、セクション 15.2.3, トラブルシューティングを参照してください。

15.2.1 CPUパフォーマンスの制御

CPUには、3つの省電力方法があります。コンピュータの動作モードによっては、この3つの方法を併用することもできます。また、省電力とは、システムの温度上昇が少なく、ファンが頻繁にアクティブにならないことを意味します。

周波数と電圧の調節

PowerNow!Speedstepは、AMD社とIntel社が使用するこのテクノロジの名称です。ただし、このテクノロジは他のメーカのプロセッサにも適用されます。CPUのクロック周波数とそのコア電圧が同時に低下し、段階的な省エネよりも大きな効果が得られます。つまり、周波数が半分になると(半分のパフォーマンス)、消費電力も半分以下になります。このテクノロジは、ACPIには依存していません。CPU周波数制御には、カーネル自体か、またはユーザスペースアプリケーションを使用した2つのアプローチがあります。従って、/sys/devices/system/cpu/cpu*/cpufreq/で設定できる各種カーネルガバナがあります。

ユーザスペースガバナ

ユーザスペースガバナが設定されている場合、カーネルは、通常、デーモンなどのユーザスペースアプリケーションにCPU周波数制御を譲渡します。SUSE Linux Enterprise Serverでは、このデーモンはpowersavedパッケージにあります。この実装が使用されるとき、CPU周波数は現在のシステム負荷に応じて調整されます。デフォルトでは、カーネル実装の1つが使用されます。ただし、一部のハードウェア、特定のプロセッサまたはドライバによっては、ユーザスペースの実装が唯一の対策となっています。

オンデマンドガバナ

これは、動的CPU周波数ポリシーのカーネル実装で、ほとんどのシステムで使用できます。システムの負荷が高くなるとすぐに、CPU周波数が直ちに上がります。システム負荷が低い場合は、周波数が下がります。

保守的ガバナ

このガバナは、より保守的なポリシーが使用される以外は、オンデマンド実装と類似しています。CPU周波数が上がる前に、一定の時間、システムの負荷が高くなっている必要があります。

省電力ガバナ

CPU周波数を一定にできるだけ低く設定します。

パフォーマンスガバナ

CPU周波数を一定にできるだけ高く設定します。

クロック周波数のスロットリング(速度を抑える)

このテクノロジでは、CPUのクロック信号インパルスが一定割合だけ省略されます。25%のスロットリングでは、4回に1回の割合でインパルスが省略されます。87.5%では、プロセッサにインパルスが届くのは8回に1回だけになります。ただし、省エネ度が減速の割合に比例して増えることはありません。通常、スロットリングが使用されるのは、周波数調節を使用できない場合、または省電力を最大限に使用する場合だけです。このテクノロジも、特殊なプロセスで制御する必要があります。システムインタフェースは、/proc/acpi/processor/*/throttlingです。

プロセッサのスリープ状態への切り替え

オペレーティングシステムは、何も実行することがない場合にプロセッサをスリープ状態にします。この場合、オペレーティングシステムはCPUにhaltコマンドを送ります。C1、C2、およびC3の、3つのオプションがあります。最も経済的な状態C3では、プロセッサキャッシュとメインメモリとの同期も停止します。そのため、この状態を適用できるのは、バスマスタアクティビティを介してメインメモリの内容を変更している他のデバイスが存在しない場合だけです。一部のドライバでは、C3を使用できません。現在の状態は、/proc/acpi/processor/*/powerに表示されます。

周波数調節とスロットリングが関係するのは、プロセッサがビジー状態の場合だけです。これは、プロセッサがアイドル状態のときには、最も経済的なC状態が常に適用されるためです。CPUがビジー状態の場合、省電力方式として周波数調節を使用することをお勧めします。通常、プロセッサは部分的な負荷でのみ動作します。この場合は、低周波数で実行できます。一般に、カーネルのオンデマンドガバナまたはpowersavedのようなデーモンで制御される動的な周波数調節が最善の方法といえます。低周波数をスタティックに設定する方法は、バッテリ使用時やコンピュータを冷却または静止させたい場合に役立ちます。

スロットリングは、システムが高負荷であるにもかかわらずバッテリ使用時間を延長する場合など、最後の手段として使用する必要があります。ただし、スロットリングの割合が高すぎると、スムーズに動作しないシステムがあります。さらに、CPUの負荷が小さければ、CPUスロットリングは無意味です。

15.2.2 ACPIツール

総合的に呼べるACPIユーティリティには、バッテリ充電レベルや温度などの情報を表示するだけのツール(acpi、klaptopdaemon、など)、/proc/acpi内の構造へのアクセスを容易にするツール、変化の監視を補助するツール(akpi、acpiw、gtkacpiw)、BIOS内のACPIテーブルを編集するためのツール(パッケージ pmtools)などが含まれています。

15.2.3 トラブルシューティング

問題を2つに大別できます。1つはカーネルのACPIコードに、未検出のバグが存在する可能性があることです。この場合は、いずれ修正プログラムがダウンロードできるようになります。ただし、問題の多くはBIOSが原因になっています。また、場合によっては、他の広く普及しているオペレーティングシステムにACPIを実装した場合にエラーが起きないよう、BIOSにおけるACPIの指定を故意に変えていることがあります。ACPIに実装すると重大なエラーを生じるハードウェアコンポーネントは、ブラックリストに記録され、これらのコンポーネントに対してLinuxカーネルがACPIを使用しないようにします。

問題に遭遇したときに最初に実行することは、BIOSの更新です。コンピュータがまったくブートしない場合、次のブートパラメータは有用です。

pci=noacpi

PCIデバイスの設定にACPIを使用しません。

acpi=ht

単純なリソース設定のみを実行します。ACPIを他の目的には使用しません。

acpi=off

ACPIを無効にします。

警告: ACPIなしに起動できない場合

一部の新型のコンピュータは(特に、SMPシステムとAMD64システム)、ハードウェアを正しく設定するためにACPIが必要です。これらのコンピュータでACPIを無効にすると、問題が生じます。

コンピュータは時折、USBまたはFireWireを介して接続されたハードウェアと混同されることがあります。コンピュータが起動を拒否した場合、必要のないハードウェアのプラグをすべてはずして再試行してください。

システムのブートメッセージを調べてみましょう。そのためには、ブート後にコマンドdmesg | grep -2i acpiを使用します(または、問題の原因がACPIだとは限らないので、すべてのメッセージを調べます)。ACPIテーブルの解析時にエラーが発生した場合、重要なDSDTテーブルを改善版と置換することができます。この場合、BIOSで障害のあるDSDTが無視されます。具体的な手順についてはセクション 15.4, トラブルシューティングを参照してください。

カーネルの設定には、ACPIデバッグメッセージを有効にするスイッチがあります。ACPIデバッグを有効にした状態でカーネルをコンパイルし、インストールすると、詳細な情報を表示するエラーのエキスパート検索がサポートできるようになります。

BIOSまたはハードウェアに問題がある場合は、常にメーカに連絡することをお勧めします。特に、Linuxに関するサポートを常に提供していないメーカには、問題を通知する必要があります。なぜなら、メーカは、自社の顧客の無視できない数がLinuxを使用しているとわかってやっと、問題を真剣に受け止めるからです。

詳細情報