WindowsXPでのHyperThreading有効化
※※ 注意 ※※
以下の手法については、実際に成功事例があるものの100%確実な方法であるかどうかは不明であり、場合によってはWindowsXPを起動不能にしてしまう危険性もあるため、実行される際には自己責任にて行って下さい。結果として起動不能などのトラブルが発生してしまったとしても、当方は一切責任を持ちません。
WindowsXPをインストールしたPCにおいて、インストール時点でのハードウェア環境が古くPentium4等のHyperThreadingに非対応であった場合、後にHyperThreading対応CPU/マザーボードへ換装しても、WindowsXP上でCPUが2個認識されているにもかかわらず、論理CPUが2個とカウントされないことがある。これは、WindowsXPのハードウェア抽象化レイヤであるHAL(Hardware
Abstraction Layer)がPCのマルチプロセッサ対応状況・ACPIへの対応毎に異なる上に、構成が変わった場合でも自動的に適切なHALが選択されないことがあるためである。
現在、どのHALが使われているかは、デバイスマネージャで「コンピュータ」の項目が何になっているかで判別できる。一般的なシングルCPUなPCの場合、「ACPI(Advanced
Configuration and Power Interface)PC」または「ACPIユニプロセッサPC」として認識されていることが多いと思われる(さらに古めのPCの場合、「標準PC」として認識されているかもしれない)。もし「ACPIユニプロセッサPC」として認識されている場合、マルチプロセッサ用のHALとの互換性があるため、自動でマルチプロセッサ用のHALに切り替わるか、あるいはデバイスドライバを「ACPIマルチプロセッサPC」へと変更することでHyperThreading対応HALへの変更が可能だが、それ以外の場合には、互換性の問題から、単純にはHALを変更することができない。ただし、「ACPI(Advanced
Configuration and Power Interface)PC」として認識されている場合で、かつ、APICをサポートしているマザーボードなら、ややトリッキーな方法ながら、HyperThreading対応HALへの切り替えを行うことができる可能性があり、実際に、数台のPCにて変更に成功した事例がある。なお、HyperThreadingへ対応可能なマザーボードなら、マルチプロセッサシステムとして稼働するためAPICが必要なため、ほとんどの場合はAPICに対応していると思われる。
以下に、対応方法を書いてみる。まず、前提条件として、
- BIOSセットアップ等でAPICサポートが許可されている。
- デバイスマネージャ上で「プロセッサ」以下にCPUが2個認識されている。
- デバイスマネージャ上で「コンピュータ」が「ACPI(Advanced Configuration and Power Interface)PC」として認識されている。
がある。この条件を満たしていない場合での成功事例は未確認である。HALの変更手順は以下の通りであるが、システム起動ドライブがC:ドライブ以外の場合、ドライブレターを適切なドライブレターへ読み替えて欲しい。
- ACPIユニプロセッサPC用のHALである halaacpi.dllと、ACPIマルチプロセッサPC用のHALである halmacpi.dllを準備する。WindowsXPのインストールCD-ROMの i386フォルダ内に halaacpi.dl_ とhalmacpi.dl_として圧縮されているので、expandコマンドにて展開する。別途サービスパックを適用している場合、適用したサービスパックに対応する halaacpi.dllとhalmacpi.dllが必要なので、サービスパック適用実行ファイル(SP2なら「WindowsXP-KB835935-SP2-JPN.exe」等)をコマンドプロンプトにて /xオプション付きで実行し、各ファイルを展開する。展開先の i386フォルダ以下に halaacpi.dl_ とhalmacpi.dl_ が存在しているはずなので、同様にして expandコマンドで展開。
- 1.にて用意した halaacpi.dllと halmacpi.dllを、WindowsXPのシステムフォルダ(デフォルトならC:\WINDOWS\system32)へコピーする。
- C:\boot.iniを編集。デフォルトでは隠しファイルとなっていて見えないが、「システムのプロパティ」→「詳細設定」タブ→「起動と回復」の「設定」ボタン→「編集」ボタンでboot.iniの編集を行うことができる。編集内容は以下の通り。
- [operating systems]セクション以下、 「multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=...」から始まる行を複製する。
- 複製した行の最後に「/hal=halaacpi.dll」を追加。ダブルクオートで囲まれた部分がWindowsXPの起動メニューに表示されるので、元の行と区別するため内容を変更しておくとよい。
- PCを再起動するとWindowsXPの選択メニューが出現するので、上記3.にて複製した行を選択。各種デバイスが検出され、正常に起動完了すればHALの変更成功。もし、起動途中で黒画面のままハングアップするなど、起動に失敗してしまったした場合は、boot.iniの設定内容に誤りがある可能性が高いので、一旦再起動し、WindowsXP起動メニューで複製した行でない元の行を選択し、boot.iniの設定内容を確認する。
- WindowsXPが正常に起動できたら、以下の項目を確認。
- デバイスマネージャで「コンピュータ」が「ACPIマルチプロセッサPC」として認識されている。
- タスクマネージャのパフォーマンスでCPU使用率のグラフが2個ある。
確認できた場合、boot.iniの変更を元に戻して作業完了。正しく認識されていない場合には、再度boot.iniの設定内容を確認。
※追記
上記の方法は、古い環境でインストールされたWindowsXP環境をPentium4 3.2GHz (Northwood HT)な環境へ移行する際に実行して成功した方法である。ただ、古いシングルコアな環境から新しくデュアルコアな環境に移行した際に、CPUが1つしか動作していないと思われる場合にも、条件を満たせば同様に成功するかもしれない。ただし、冒頭に記した通り、必ずうまくいくとは保証できないし、新たなトラブルの原因となる可能性も否定できないので、もし、実行する際には自己責任にて十分注意して行って欲しい。