Comments
Description
Transcript
TuxOnIce と ACPI
1 TuxOnIce と ACPI 内藤郁之 1 はじめに TuxOnIce は、サスペンド・レジュームの機能を Linux カーネルに追加するためのパッチである。このサス ペンド・レジュームの機能は、ACPI の S4 状態を利用し、広い意味でパワーマネージメント機能に属する。 ACPI で定義されているスリープ状態には、スリープと呼ばれる Suspend to RAM である S3、hibernate と呼 ばれる Suspend to Disk である S4 がある。これらの状態を Linux で利用するためには、hibernate-script や TuxOnIce のパッチを利用する必要がある。ACPI は、デフォルトで、Linux カーネルに統合されているが、詳 細については、特に日本語で解説されているものを探すのは難しいので、ACPI の概要についても簡単に説明 する。 2 TuxOnIce Linux でのサスペンド・レジュームは、swsusp がカーネルに統合されているが、機能が少なく、サスペンド 時のイメージの圧縮や暗号化はサポートされていない。より高機能のサスペンド/レジュームをサポートして いるのが TuxOnIce のパッチであるが、カーネルに統合されていないため、パッチを当てる必要がある。パッ チは、カーネルのバージョンアップを追いかけて、カーネルのリリース後に公開されるのが通常ではあるが、 遅れることもあり、current が最新版として提供されることもある。current は、開発中のソースコードで、不 具合が存在する可能性もあり、一般には勧められないが、最新のカーネルで TuxOnIce を利用したい場合には、 これを使うことになる。 TuxOnIce は、カーネルに対するパッチとして提供されているので、利用するには、パッチを当てるカーネル のソースコードが必要になる。ディストリビューションによっては、カーネルのソースコードは、デフォルト では提供されないこともあるので、その場合、カーネルのソースコードをインストールしておく必要がある。 今回、この作業を Gentoo Linux で一般的なカーネルである gentoo-sources に対して行ったので、カーネル のソースコードは、インストールされている。したがって、ソースコードが混ざらないように、現在のカーネ ルのソースコードのインストールされているディレクトリをそのまま別のディレクトリにコピーする。 # cd /usr/src # cp -r linux linux-2.6.30-tuxonice-current # ln -sfn linux-2.6.30-tuxonice-current linux TuxOnIce の current のソースコードをダウンロードする。 2 TuxOnIce # cd /tmp # wget http://www.tuxonice.net/downloads/all/current-tuxonice-for-2.6.30.patch-2009062 0-v1.bz2 コピー先のディレクトリに対して TuxOnIce のパッチを当てる。 # cd /usr/src/linux # bzcat /tmp/current-tuxonice-for-2.6.30.patch-20090620-v1.bz2 | patch -p1 パッチがリジェクトされることはなかったが、リジェクトされたときは、メッセージに従って修正を加える。 カーネルの設定を行う。 # make menuconfig まず、Power management and ACPI options を選び、以下の様に、設定を有効にする。 [*] Power Management support [*] Suspend to RAM and Standby [*] Hibernation (aka ’suspend to disk’) (/dev/hda3) Default resume partition <*> Enhanced Hibernation (TuxOnIce) ---> [*] ACPI (Advanced Configuration and Power Interface) Support < > APM (Advanced Power Management) BIOS support CPU Frequency scaling ---> ---> ---> -*- CPU idle PM support Suspend to RAM and Standby、Hibernation (aka ’suspend to disk’)、Enhanced Hibernation (TuxOnIce)、ACPI (Advanced Configuration and Power Interface) Support を有効にして、Default resume partition に swap パー ティションを指定する。また、ここでは、APM を無効にしておく必要がある。 Enhanced Hibernation (TuxOnIce) を選び、その下のメニューで以下の様に設定を行う。 --- Enhanced Hibernation (TuxOnIce) <*> File Allocator <*> Swap Allocator <*> Compression support <*> Usersapce User Interface support (/usr/local/sbin/tuxonice_fbsplash) Default userui program location [*] Replace swsusp by default hibernation を行うときに、どこにイメージを格納しておくかを File Allocator または、Swap Allocator で指 定する。両方指定された場合、Swap Allocator を利用することになり、swap パーティションにイメージが書 き込まれることになる。イメージは圧縮可能であり、Compression support を有効にすることで可能となる。 ユーザスペースで hibernation を実行する場合は、Usersapce User Interface support も有効にしておく。Replace swsup by default は、Software suspend(Software suspend v2 ではない)のコマンドで TuxOnIce を利用するた 2 3 hibernate スクリプト めのものであり、ブートローダでの指定を Software suspend と同じ書式を利用することができるようになる。 また、圧縮機能を利用するには、ルートにある Cryptographic API のメニューの下にある LZO compression を有効にする。 --- Cryptographic API <*> LZO compression algorithm .config をセーブして menuconfig を終了する。あとは、通常と同じように、make && make modules install でコンパイルを行い、カーネルを/boot にコピーする。 # make && make modules install # mount /boot # cp /arch/x86/boot/bzImage /boot/kernel-2.6.28-tuxonice-current grub.conf の kernel 行に resume=swap:/dev/hda3 を追加する。 #/boot/grub/grub.conf kernel /boot/kernel-2.6.30-tuxonice-current root=/dev/hda4 resume=swap:/dev/hda3 また、カーネルに組み込まれていないドライバは、別途、再コンパイルする必要がある。 リブートして、カーネルが動いていることを確認する。 # reboot 3 hibernate スクリプト TuxOnIce パッチと同じサイトにある hibernate スクリプトをインストールすることで、TuxOnIce が利用で きるようになる。 # cd /tmp # tar xzvf hibernate-script-2.0.tar.gz # cd hibernate-script-2.0 # ./install.sh install.sh を実行するとスクリプト、設定ファイルおよび man ページがインストールされる。これらは、い くつかのディストリビューションでは、パッケージとして提供されている。もちろん、Gentoo Linux では、 hibernate-script として portage に収録されているので、emerge コマンドでインストールする。 # emerge hibernate-script ファイルシステムとして、FAT、VFAT、NTFS を含むパーティションが存在する場合、これらのファイ ルシステムを破壊する恐れがあるので、hibernate を実行するときに、マウントを解除するように設定する。 suspend to disk および suspend to RAM 共通の設定は、/etc/hibernate/common.conf に設定する。hibernate.conf は、suspend が実行できるまで、suspend2.conf、ususpend.conf、disk.conf および ram.conf の順に実行して いくようになっている。また、特定の suspend 方法に関するオプションは適切なファイル (suspend2.conf、 3 3 hibernate スクリプト ususpend.conf、disk.conf または ram.conf) に記述する必要がある。 UnmountFSTypes vfat fat msdos ntfs 以上の設定を/etc/hibernate/common.conf に書き込む。個別の設定は、/etc/hibernate/suspend2.conf に書き 込む。 root で hibernate を実行する。 # hibernate 通常の終了時以外のメッセージが流れて、電源が切れる。レジュームを行うには、hibernate を実行したカー ネルで起動すると、通常のブートプロセスが始まり、途中で、レジュームのプロセスに移行し、サスペンド前 のプロンプトが表示される。レジュームに失敗している場合、起動時にフリーズしたり、通常のブートプロセ スのまま、ログインプロンプトが表示されるので、設定を見直す。 一般ユーザでサスペンド・レジュームを行う場合は、sudo を利用する。visudo で設定を行う。 # visudo 以下の行を追加する。 %wheel ALL = NOPASSWD: /usr/sbin/hibernate "" この設定では、wheel グループに属する一般ユーザでも root パスワード無しで、/usr/sbin/hibernate を実行 するとサスペンドが行えるようになる。 4 4 ACPI 4 ACPI 本節では、電源管理に関してのベースとなる ACPI について、簡単に解説する。ACPI は、インテル、HP、 マイクロソフト、Phoenix および東芝により策定され、その仕様は、公開されている [3]。ACPI は、レガシー な APM と異なり、BIOS を介さずにドライバを通して、OS やアプリケーションからアクセスする。また、 ACPI は、OS やドライバには依存しない。下からハードウエア、ACPI、OS、アプリケーションの順に階層化 され、互いに独立している。ACPI は、OS からは、カーネルのドライバを通してアクセスし、ハードウエア は、ACPI に直接アクセスする。 㪦㪪㩷㪛㪼㫇㪼㫅㪻㪼㫅㫋 㪘㫇㫇㫃㫀㪺㪸㫋㫀㫆㫅 㪘㪧㪠㫊 㪘㫇㫇㫃㫀㪺㪸㫋㫀㫆㫅㫊 㪢㪼㫉㫅㪼㫃 㪦㪪㪧㪤㩷㪪㫐㫊㫋㪼㫄㩷㪚㫆㪻㪼 㪦㪪㩷㪪㫇㪼㪺㫀㪽㫀㪺 㪫㪼㪺㪿㫅㫆㫃㫆㪾㫐 㪘㪚㪧㪠㩷㪛㫉㫀㫍㪼㫉㪆 㪘㪤㪣㩷㪠㫅㫋㪼㫉㫇㫉㪼㫋㪼㫉 㪛㪼㫍㫀㪺㪼㩷㪛㫉㫀㫍㪼㫉 㪘㪚㪧㪠 㪩㪼㪾㫀㫊㫋㪼㫉 㪠㫅㫋㪼㫉㪽㪸㪺㪼 㪘㪚㪧㪠㩷㪫㪸㪹㫃㪼 㪠㫅㫋㪼㫉㪽㪸㪺㪼 㪘㪚㪧㪠㩷㪙㪠㪦㪪 㪠㫅㫋㪼㫉㪽㪸㪺㪼 㪘㪚㪧㪠㩷㪩㪼㪾㫀㫊㫋㪼㫉㫊 㪘㪚㪧㪠㩷㪙㪠㪦㪪 㪦㪪 㪠㫅㪻㪼㫇㪼㫅㪻㪼㫅㫋 㫋㪼㪺㪿㫅㫆㫃㫆㪾㫀㪼㫊㪃 㫀㫅㫋㪼㫉㪽㪸㪺㪼㫊㪃 㪺㫆㪻㪼㪃㩷㪸㫅㪻 㪿㪸㫉㪻㫎㪸㫉㪼 㪘㪚㪧㪠 㪘㪚㪧㪠㩷㪫㪸㪹㫃㪼㫊 㪧㫃㪸㫋㪽㫆㫉㫄㩷㪟㪸㫉㪻㫎㪸㫉㪼 㪙㪠㪦㪪 㪟㪸㫉㪻㫎㪸㫉㪼㪆㪧㫃㪸㫋㪽㫆㫉㫄 㪪㫇㪼㪺㫀㪽㫀㪺㩷㪫㪼㪺㪿㫅㫆㫃㫆㪾㫐 図 1 OSPM/ACPI Global System ACPI では、システム全体の電源管理およびデバイス、CPU の電源管理、さらに、スリープ状態の管理と、 広範囲にわたって電力を管理する。ACPI を利用したシステムでは、一般的に、コンピュータは、working 状態 と sleeping 状態の間を遷移する。working 状態では、コンピュータは、作業を行い、ユーザモードアプリケー ションスレッドが処理され実行される。プロセッサやデバイスが利用されていないときには、それらは、低消 費電力状態を取ることが可能である。短時間で非活性のデバイスをオンにできるのでシステムはどんなデバイ スもオフにする。 実のところ、working 状態ではマシンは全体で機能している。様々な working サブ状態は、演算速度、消費 電力、発熱および騒音の点で異なる。working 状態でのチューニングは、速さ、電力、熱および騒音の間での トレードオフの関係にある。 5 4 ACPI コンピュータがアイドル状態になったとき、あるいは、ユーザが電源ボタンを押したとき、OS は、コン ピュータをスリープ状態にする。スリープ状態では、ユーザの目に見える演算は行われない。スリーピングサ ブ状態では、どのイベントがどのくらい時間をかけてシステムを Working 状態にするかが異なる。すべての可 能性のあるイベントで非常に素早く復帰しなければならないとき、システムの消費電力を部分的に削減するサ ブ状態にだけ入ることが可能である。しかしながら、気になるイベントは、ユーザがスイッチを押して何分か の遅延が許される場合、OS は、すべてのコンテキストを NVS ファイルにセーブすることができ、S4 スリー ピング状態にハードウエアが遷移する。この状態では、マシンは殆ど零の消費電力となり、システムコンテキ ストを任意の期間、保持し続ける。他の状態は、それほど利用されない。レガシーな BIOS による電源管理イ ンタフェースをサポートするコンピュータは、ACPI OS がロードされたときに、Wroking 状態にレガシー状 態および遷移を行う。レガシーサポートのないシステムでは、遷移は直接メカニカルオフ状態から Working 状態へ移行する。通常、ユーザが、コンピュータの機械スイッチを操作するか電源を外すことでコンピュータ はメカニカルオフ状態になる。 1 P X F S' B JMV SF 1 P X F S0 ' ' 㪛㪇 ( . FDI 0 GG 㪤 㫆㪻㪼㫄 㪟㪛㪛 㪛㪊 㪛㪊 㪛㪈 㪛㪉 㪛㪇 㪛㪉 㪛㪈 㪚㪛㪩㪦㪤 㪛㪊 㪛㪇 㪛㪉 㪛㪈 # *0 4 3 P V UJO F ( 4 8 P SL JO H - F HB DZ 㪪㪋 㪪㪊 㪪㪉 㪪㪈 8 BLF & WF O U 1 F SGP SN B O D F 4 UB UF 1 Y ( 4 MF F Q JO H 5 I SP UUJO H 㪚㪇 $ $16 ( 4 4 P GU0 GG 図2 $ $O Global System Power State and Transition 6 4 ACPI 4.1 グローバルシステム状態定義 4.1 グローバルシステム状態定義 グローバルシステム状態定義 (Gx 状態) はシステム全体に適用され、ユーザから可視化されている。グロー バルシステム状態は、6 つの原理原則で定義される。 1. アプリケーションソフトウエアが動作しているか? 2. 外部イベントからアプリケーションの応答のレイテンシはどうか? 3. 消費電力はどのくらいか? 4. working 状態に復帰するのに OS の再起動が必要か 5. コンピュータを分解しても安全か? 6. 状態への出入りは電子的に行うことができるか? G3 メカニカルオフ このオフ状態のエントリは回路に電流が流れていないという意味で機械的であることを意味する。ハードウ エアにダメージを与えたり、危険にさらすことなく動作する。OS は、working 状態に戻るためには再起動し なければならい。消費電力ゼロのリアルタイムクロックを例外として、ハードウエアコンテキストは保存され ない。 G2/S5 ソフトオフ 最小の電力を消費するコンピュータ状態である。ユーザモード及びシステムモードコードは実行されない。 この状態は working 状態に戻るには大きなレイテンシを必要とする。システムコンテキストは、ハードウエア では、保存されない。システムは working 状態に戻るには再起動が必要である。この状態で、マシンを分解す るのは危険である。 G1 スリープ 小さい消費電力のコンピュータ状態であり、ユーザモードスレッドは実行されず、システムはオフであるよ うに見える。working 状態に復帰するためのレイテンシはこの状態のエントリの前に選択された復帰環境によ り異なる。多くの要素は、ハードウエアによって、残りはソフトウエアによりセーブされているシステムコン テキストにより処理は、OS をリブートせずにレジュームする。この状態でマシンを分解するのは危険である。 G0 動作状態 システムがユーザモードスレッドを割り当て、実行するコンピュータ状態である。この状態では、周辺機 器、それらの電力状態を動的に変更する。ユーザは、UI でパフォーマンスやバッテリー寿命に最適化された ソフトウエアでシステムの様々なパフォーマンス/電力特性を選択することができる。 S4 不安定でないスリープ マザーボードの電源が落ちたときに、システムコンテキストが(比較的ゆっくりと)保存され展開される特 別なグローバルシステム状態である。システムが S4 に入るように指示されたとき、OS はすべてのシステム コンテキストを安定しているストレージ上のファイルに書き込み、特有のコンテキストマーカを残す。この 7 4.2 デバイス電源管理 4 ACPI マシンは S4 状態に入る。システムがソフトオフやメカニカルオフ状態のままでは、G0 に移行し OS をリス タートする。NVS ファイルからリストアする事態になる。有効な不安定でないスリープのデータセットが見 つかったときにだけ発生し、マシンの設定は変化しない。ユーザは手動でリストアするのを停止することはな い。これらの条件が揃ったとき、OS が再起動して、システムコンテキストをリロードし有効にする。ユーザ にとっては、G1 からのレジュームのように見える効果がある。ディスクレイアウトとメモリサイズは変化し てはいけない設定に含まれている。PC カードやデバイスベイ機器を取り替えることは可能である。 S4 状態は安定なストレージだけを信頼しているので、マシンはそのシステムコンテキストを任意の期間(何 年間も)保存することができる。 表 1 グローバル電力状態のまとめ グローバル ソフトウエア システム状態 実行 G0 動作状態 G1 可 消費電力 0 >0 大 不可 スリープ状態 G2/S5 遅延 OS コンピュータの 電子的な 再起動 分解 出口状態 不要 不可 可能 小 不要 不可 可能 スリープ状態により異なる 不可 大 ほぼ 0 要 不可 可能 不可 大 RTC 要 可能 不可 ソフトオフ状態 G3 機械的なオフ バッテリ 4.2 デバイス電源管理 デバイスは、D0∼D3 の各状態を遷移する。システム全体の状態がオンであっても、デバイスがオフ状態に あることがあり、一般的には、デバイスの状態はユーザからは認識できない。D3 状態は、オフ状態と呼ばれ、 電源はデバイスには供給されず、OS のデバイスの再初期化が必要になり、認識されるまでに最大の時間がか かる。D3hot 状態は、電力消費を最大限抑えるもののデバイスコンテキストは保存されるため、D3 状態から の復帰に比べると時間はかからない。D2 デバイス状態は、D1 状態に比べるとより多くの電力を消費する。こ の状態では、バスでコンテキストは失われることがある。D1 状態は、一部のデバイスでしか定義されないが、 D2 よりも消費電力は大きく、デバイスコンテキストも多く保持する。D0 は、完全なオン状態で、電力消費は 最大となり、デバイスは完全に動作しコンテキストを継続することを期待されている。これらをまとめると以 下の表になる。 表2 デバイスの電源状態の概要 デバイスの状態 消費電力 保持しているデバイスコンテキスト D0 - 完全なオン状態 D1 D2 D3hot 動作に必要な電力 すべて 無し D0>D1>D2>D3hot>D3 D0>D1>D2>D3hot>D3 D0>D1>D2>D3hot>D3 >D2 <D1 <D2 >D1 なし/ オプション ドライバの復帰 完全な初期化によるロード D3 - Off 0 なし 完全な初期化によるロード 8 4 ACPI 4.3 スリープ状態 4.3 スリープ状態 Sx 状態は、グローバルなスリープ状態である G1 内の状態として分類される。Sx 状態は簡単に以下の様に 定義される。 S1 スリープ状態 S1 スリープ状態は底遅延ウエイクスリープ状態である。この状態では、システムコンテキストは失われ、 ハードウエアがすべてのシステムコンテキストをメンテナンスする。 S2 スリープ状態 S2 スリープ状態は、低復帰遅延スリープ状態である。この状態は、CPU とシステムキャッシュコンテキ ストが失われること以外は、S1 と似ている。コントロールは復帰イベント後の CPU のリセットベクタで始 まる。 S3 スリーピング状態 S3 スリープ状態は、システムメモリ以外のすべてのシステムコンテキストが失われる低復帰遅延スリープ 状態である。CPU キャッシュおよびチップセットのコンテキストはこの状態では失われる。ハーウエアは、 メモリコンテキストを保守し、一部の CPU と L2 設定コンテキストを保持する。コントロールは、復帰イベ ントのプロセッサのリセットベクタで始まる。 S4 スリープ状態 S4 スリープ状態は ACPI でサポートされる最小電力で復帰時間が最大のスリープ状態である。電力を最小 にするために、ハードウエアプラットフォームは、すべてのデバイスを電源オフにすると仮定する。プラット フォームのコンテキストは保守される。 S5 ソフトオフ状態 この S5 状態は、OS がどのコンテキストも保持しないと言うこと以外、S4 状態と似ている。システムは、 「オフ」状態にあり、復帰には完全なブートが必要となる。ソフトウエアは、セーブされたメモリイメージか ら復帰するブートであるかどうか区別し、BIOS 内のイニシャルブート動作を許可するために、S5 状態と S4 状態を区別するために異なる状態の値を用いる。 4.4 プロセッサ電力状態定義 プロセッサ電力状態は、グローバル動作状態 G0 内のプロセッサ電力消費と熱管理の状態である。Cx 状態 は特定のエントリと出口セマンティクスを持ち、簡単に以下の様に定義される。 C0 プロセッサ電力状態 プロセッサはこの状態では、命令を実行する。 9 4.5 デバイス及びプロセッサ動作状態の定義 参考文献 C1 プロセッサ状態 このプロセッサ電力状態は、最小の遅延になる。この状態でのハードウエアの遅延は、どの状態を利用する か判断するときに OS が遅延を考慮しないですむほど小さい。プロセッサを非実行電力状態におくことを除い て、この状態はソフトウエアから見える効果は何もない。 C2 プロセッサ電力状態 C2 状態は、C1 状態よりも進んだ省電力を提供する。この状態に最悪のハードウエア遅延が ACPI システム ファームウエアで提供され、OS はこの情報をいつ C1 状態が C2 状態の代わりになるかを決定するために利 用する。プロセッサを非実行電力状態におくこと以外、この状態はソフトウエアから見える効果は何もない。 C3 プロセッサ電力状態 C3 状態は、C1、C2 状態よりも改善した省電力を提供する。この状態での最悪の遅延は ACPI システム ファームウエアで提供される。OS はこの情報をいつ C2 状態が C3 状態の代わりになるかどうか決定するた めに利用する。C3 状態の間、プロセッサのキャッシュは状態を保持するがどのスヌープも無視する。OS は、 キャッシュコヒーレンシーを確実なものとすることに責任がある。 4.5 デバイス及びプロセッサ動作状態の定義 デバイスおとびプロセッサ動作状態は、C0 および D0 のアクティブ/実行状態内の電力消費および能力状 態である。Px 状態は、以下の様に定義される。 P0 動作状態 デバイスまたはプロセッサがこの状態の間、最大のパフォーマンスが利用でき、最大の電力を消費する。 P1 動作状態 この動作状態では、デバイスやプロセッサは、最大性能より下に制限され、消費電力は最大電力より少ない。 Pn 動作状態 この動作状態では、デバイスまたはプロセッサの動作状態はその最小レベルにあり、アクティブ状態の間、 最小の電力消費にとどまる。状態 n は、最大値でプロセッサやデバイスに依存する。プロセッサやデバイス は、16 を越えないように動作状態を定義する。 参考文献 [1] Dennis Nienhüser, ”Power Management Guide”, http://www.gentoo.org/doc/en/power-management-guide.xml [2] ”TuxOnIce HOWTO”, http://www.tuxonice.net/HOWTO.html [3] Hewlett-Packard, Intel, Microsoft, Phoenix and Toshiba, ”Advanced Configuration and Power Interface Specification”, http://www.acpi.info/DOWNLOADS/ACPIspec40a.pdf, 2010 10