第129回:謎の多いWindows XPの省電力機能を再検証



Evo N200
 先々週に紹介したコンパックEvo Notebook N200の製品版に触れる機会を得たのだが、試作機とは異なる点がいくつかあったので、冒頭で紹介しておきたい。

 まず色(はその記事では特に触れなかったが)は試作機ではツヤ消しだったのだが、製品版ではツヤありのガンメタリックに変更された。4面ともマグネシウム合金で構成された頑丈な筐体ともイメージが合う色で、いかにもビジネスで利用するPCというイメージを醸していると言ったら大げさだろうか。ツートンカラーの色遣いは、未だ疑問の残るところではあるが……。

 試作機では計測できなかった重量だが、実測値で1.19kgと60gほどスペック値よりも重い。セカンドバッテリを装着した状態では1.41kgだった。コンパックによると、液晶パネルやハードディスクなどの部材はベンダーを複数に頼っており、組み込まれたパーツの種類によって、若干重量が異なるとのこと。念のため書き添えておくが、出荷ロットごとに組み込まれている部材の型番は記録されており、サポート時には本体シリアル番号から組み込まれているパーツがわかるようになっているという。

 また、試作機では最低輝度(といっても他機種よりもかなり明るい)でカタログ値を若干下回る程度のバッテリ持続時間と紹介したが、製品版では中間ぐらいの輝度まで上げても、ネットワークに接続していない状態ならばカタログ値並み(約2.5時間)に電池が使えている。

 なお、読者から「256MB DIMMを挿入するとどうなるか?」という質問を頂いた。そこで128Mbitチップを採用したSO-DIMMと256Mbitチップ採用のSO-DIMMの両方で試したが、前者の場合はBIOS上から256MBのメモリが見えるものの起動できず、後者の場合は128MB分しか認識しなかった。これらの事から、メインメモリの256MB化は非公式にも行なえないと考えた方がいいだろう。

 と、今週の題目とは別にN200の話が続いているが、コンパックのノートPCにあるイージーアクセスボタンのちょっとしたTipsを思いついたので書いておきたい。このボタンには、アプリケーションやURLなどを自由に割り当てることができるが、同時にショートカットファイル(.LNKファイル)も指定できる。マイドキュメントなどの頻繁に利用するフォルダをボタンに割り当てたい場合、直接指定はできないが、そのフォルダへのショートカットを適当な場所に作成してからボタンに割り当てればいい。こうすることで、マイドキュメントをボタンひとつで開くことが可能になる。



●p3.sysが参照するHackflagsとは?

 以前、本連載の中で「Windows XPにはプロセッサのクロック周波数を動的に切り替える仕組みがあり、ACPIファンクションを通じてプロセッサのパフォーマンスを最適化することができる」と述べた(なお、どのようなパフォーマンスモードがあるかは以前のコラムを参照いただきたい)。どのようにコントロールするのかは、各プロセッサに対応するプロセッサドライバが担当するのだが、中でもノートPCに最もよく使われているモバイルPentium III用のドライバp3.sysについて少し調べてみた。

 p3.sysはレジストリ内の「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\P3\Parameters\」にある「HackFlags」というエントリを参照し、その値が0の場合は従来のSpeedStepアプレットによるコントロールに依存する(OSは何もしない。なお、マイクロソフトはこのモードを推奨しておらず、SpeedStepユーティリティをインストールしたPCにはWindows XPロゴを発行していない)。値が2の場合には、Windows XPの機能がフルに活用され、フル、アダプティブ、コンスタント、デグレードの4モードが有効になる。問題は1にセットされる場合だ。

 1にセットされている場合、Windows XPはACPI 2.0のメソッドを利用せず、従来からのSpeedStepと同じインターフェイスを通じてパフォーマンスのコントロールを行なう。この場合、プロセッサのパフォーマンス調整は各プロセッサ用のSpeedStepユーティリティと同じ制御となる。つまり、拡張版SpeedStep搭載プロセッサの場合はアダプティブな動作となるが、通常のSpeedStep搭載プロセッサの場合はアダプティブにクロック周波数は切り替わらない。なお、デグレードに関してはどの場合でも動作する(なおフラグをセットした後、再起動しないと効果は現れないので、自分でテストするときには注意して欲しい)。

 実際に両方をセットして比較してみると、1の場合よりも2の方がパフォーマンス遷移がスムースで、特にデグレード時のパフォーマンスの下げ方が大きく異なるのがわかる。パフォーマンスの計測は「WCPUID」などのクロック周波数計測ツールで測ることが可能だ。

 マイクロソフトの資料によれば、440BX(廉価版の440ZXを含む)や440MXといったチップセットを採用したPCではHackFlagsに1を、ICHベースの新しいチップセットを採用したPCでは2をセットすることを推奨している。しかし、その根拠に関しては、誰に質問しても納得できる答えが返ってこない。



●古いチップセットだからACPIで動かない?

 そもそも440MXは“440”となっているが、内部的には他の440シリーズとはかなり異なる設計になっており、どちらかといえばICHアーキテクチャを採用したチップセットに近い設計になっているという。その上、ICHベースのシステムであるかどうかということと、HackFlagsの動作にはあまり依存性はないようなのだ。

 HackFlagsの1と2で動きが異なるのは、2の場合にはACPI BIOSを呼び出してパフォーマンスコントロールを行なう点である。1にセットされている場合は、前述したようにSpeedStepユーティリティが利用していたのと同じインターフェイスを使う。

 パフォーマンスコントロールを行なうためのデータオブジェクトとメソッドはACPI 2.0で定義されており、BIOSがきっちりとこれをサポートしていれば、ACPI経由の制御で問題が発生することはない。つまり、HackFlagsを2にセットできるかどうかはICHベースのチップセットか否かではなく、BIOSが対応しているかどうかで決まるのだ。資料によると、BIOSがACPIのデザインガイドに従って書かれていない場合は正常に動作しない可能性がある、と記されている。きちんと動くのかどうかを検証するのが難しく、また手間のかかる作業であるため、出荷された時期をチップセットの種類で区切ったのでは? と疑いたくなる。

 というのも、冒頭で登場したN200などの440MX採用機やThinkPad X21などの440ZX採用機、Evo N400cや日立FROLA 220FXなどの440BX採用機をHackFlags==2に設定すると、問題なく動作するからだ。この場合、Coppermineでも拡張版SpeedStepが組み込まれているかのようにパフォーマンスが変化する。これがたまたま運良く動作しているだけなのか、それともBIOSがACPI 2.0にちゃんと対応しているから問題ないのかはわからない。

 本当に古いチップセットを採用した機種に2をセットしてもいいのか? という疑問には、正確には答えることができないが、レジストリをいじりながら動きを観察できるユーザーなら、フラグ値を変えながら様子を見てはいかがだろう。まさか旧SpeedStep採用プロセッサで拡張版SpeedStepと同じ動作をさせないための手段とは思えないのだが、何か弊害があるのか。それさえも、現在のところはメーカーあるいはマイクロソフトから回答を得られていない。

 なお、HackFlagsはWindowsが自動的に設定するレジストリエントリではなく、PCベンダーがセットすることになっている。このため、Windows XPを新規インストールした直後は、何もエントリが存在しない。エントリの作成は、このフラグを必要とするPC(主に1をセットしなければならないPC)にメーカー製の電源管理ユーティリティをインストールした時に設定される(もちろん、自分でエントリを作成してもいい。エントリのタイプはDWORD)。



●きちんとPentium IIIとして認識されていると思ったら?

 ところで、ここで話題にしているp3.sysだが、モバイルPentium III-Mの場合にはきちんと組み込まれない場合があるようだ。デバイスマネージャ上では、きちんと正確な名前で表示されるが、ドライバの中を見るとp3.sysではなく汎用ドライバのprocessor.sysになっている場合がある(伝え聞くところによると、p3.sysが組み込まれたという報告もある)。なお、通常のモバイルPentium III(Coppermine)では正常なドライバが組み込まれる。

 ここまでに紹介したプロセッサのパフォーマンス制御は、HackFlagsが2になっている場合やHackFlagsがセットされていない場合はACPIによる制御に委ねられる。このとき、汎用プロセッサドライバとモバイルPentium III-Mの組み合わせで、パフォーマンスのコントロールはきちんと行なわれてるようだ。

 ではp3.sysとprosessor.sysの違いは何なのか? ということになる。本来、この違いはプロセッサの動作ステータス(ACPIで言うところのCステート)の利用スタイルにある。Windows 2000ではモバイルPentium III(Coppermine)と440BXの省電力機能にフォーカスを当て、パフォーマンスと省電力のバランスを取った制御を行なっていた。しかし、プロセッサの省電力時の特性やチップセットが変化すれば、最適制御を行なうためのプロファイルデータも変化しなければならない。

 たとえばモバイルPentium III-MとDeeperSleep対応チップセットの組み合わせの場合、積極的にDeepSleep(C3)を使った方がいい。このハードウェア構成では、C3に入るとすぐにDeeperSleepへと遷移するため、0.13μmプロセスに微細化されたプロセスで増えるリーク電流を最小限に抑えることができるからだ。

 ただ、実際には観察するところ、p3.sysでもprosessor.sysでも同じように制御が行なわれてしまう。いずれの場合も、Windows 2000の時とは異なり頻繁にC3を利用するのだ。きちんと動作しているのだから文句はないのだが、汎用ドライバでもC3が多用される理由はよくわからない。ちなみにWindows 2000では使われていなかったC3が、Coppermineでも多用される理由もよくわからない。

 さらに謎がある。いろいろと実験を重ねているウチに返しそこねている新型バイオノートSRの試作機(あくまで試作機である)で様々な実験をしてみたところ、どうも振る舞いがおかしい。プロセッサ制御モードがアダプティブやコンスタントになっているときはC3が利用されるのだが、デグレード時にはなぜかC2だけしか利用されない。つまり、本来は最も省電力なハズのデグレード時に、最も省電力なCステートが設定されないのである。Cステートの確認は、Windows XPからパフォーマンスモニタ(「ファイル名を指定して実行」で「perfmon」を起動して、モニタする項目を追加する)で行なうことができる。

 同様の現象は他のPCでは見られないが、筆者の手元にモバイルPentium III-Mとi830系チップセットを使うPCがなく、BIOSの問題なのか、それともプロセッサドライバのバグなのか確たる結論を出せずにいる。実は英語版Windows XPでは既にPentium III用プロセッサドライバのアップデートが行なわれており、p3.sysが自動的に組み込まれないPCに対しても専用ドライバがインストールされるように修正されている(Windows Updateで更新可能)。

 このあたりは日本語版のp3.sysアップデートや、他の機種での振る舞いなどをもう少し調査してから機会を見つけて報告したいと思う。

 これほどこの機能にこだわるのも、これがなかなか効果的な機能と思われるからだ。たとえばN200の場合、Windows 2000からWindows XPに変更して最新のプロセッサドライバにアップデートしたところ(まだ数値で測ってはいないのだが)、バッテリ持続時間が伸びたように感じている。液晶の輝度を落とし、あまり大きな負荷をかけない状態では、かなり効き目がありそうだ(あくまで目安だが、最低輝度で3時間ほど原稿を書き続けて残り容量が65%だった。もちろん残容量の表示はあくまで目安ではあるが)。

 このあたりの“効き目”も含め、実際の効果の程の報告は、もう少し実験の時間を頂きたい(本来なら、この程度のことは資料に書かれていると助かるのだが……)。

■■ 注意(編集部)■■

・レジストリの変更はシステムが起動しなくなるなどの危険を伴います。その損害について、筆者およびPC Watch 編集部、またメーカー、マイクロソフトもその責を負いません。レジストリの変更は自己の責任において行なってください。

・この記事中の内容は筆者の環境でテストした結果であり、記事中の結果を筆者およびPC Watch編集部が保証するものではありません。

・筆者およびPC Watch編集部では、この記事についての個別のご質問・お問い合わせにお答えすることはできません。


□関連記事
【本田】Windows XPの省電力機能は本当に効果的なのか?
http://pc.watch.impress.co.jp/docs/article/20010918/mobile117.htm

バックナンバー

(2001年11月28日)

[Text by 本田雅一]


【PC Watchホームページ】


PC Watch編集部 pc-watch-info@impress.co.jp

Copyright (c) 2001 impress corporation All rights reserved.