VMware Player 3の XP Mode をマルチコアで動かす方法
  「なば」さんの「2009-11-02 XP mode をVMware Player で、マルチコアで動かす
  より引用。筆者の気付いた追加コメントを ・・・ピンク色で注釈 した。

先日リリースされたVMware Player 3.0には、XP modeのインポート機能*1 が搭載されています。これは、Windowsにインストールされた XP mode のイメージを扱えるようにする*2というものです。

ここで一つ、マルチコア環境においては問題(?)が生じます。

XP mode で提供される Windows XP Professional は、シングルプロセッサ向けに調整された環境となります。つまり、そのままだと、マルチコア環境でもシングルプロセッサ扱いで起動する事になります。

今回は、このVMware Playerの環境で*3Windows XP mode上でマルチコアを認識させる方法とか、そんなのを紹介します。


前準備と問題の原因

とりあえずVMware Tools等一通りインストールしてしまいます。(説明割愛)

XP modeでは、初期状態でWindows Virtual PC向けの統合サービスがインストールされています。VMware Toolsと一緒に入れておいても競合したりはしませんが、気味悪いと感じる人は削除しておきましょう。

問題の原因は、標準で用いられているHALが、シングルプロセッサ向けのものであるという点にあります。

切り替え方法はMicrosoft社のページ*4でも紹介されています。但し、環境によっては、この手順通りに進められない事があります。XP modeもダメでした。

Windows XPのHALは、DLLファイルとして提供されており、そのリストをMicrosoft社のページ上で確認する事ができます。

Windows XP または Windows Server 2003 セットアップ後の HAL オプション

この中で、一般的に用いられるものとしては、次の3種類が多いようです。


・ACPI (Advanced Configuration and Power Interface) PC
 ↑XP modeの標準 (以下「ACPI(無印) PC」と記述する)

・ACPI ユニプロセッサ PC

・ACPI マルチプロセッサ PC
 ↑目標

名前だけを見と、上二つの違いがよく分かりませんね。これには、APICに対応しているか否かの違いがあるようです。(APICとは、PCがマルチプロセッサに対応する仕組みのようなものです。*5

ここで重要なのは、「ACPI ユニプロセッサ PC」はシングルプロセッサ向けのHALであるにも関わらず、APICに対応しているという点です。

(・・あれ? つまり、標準で「ACPI(無印)」が選択されるWindows Virtual PCでは、APICがサポートされていないという事?)


HALを入れ替えるまでの手順

ざっとこんな流れになります。

1. 無理矢理「ACPI ユニプロセッサ PC」のHALでXPを立ち上げる。

2. マルチプロセッサである事を認識させる。(勝手に「ACPI マルチプロセッサ」へ切り替える)

3. 無理矢理立ち上げた後の後始末(<string>これ重要</string>)

それでは、順を追って説明します。


HALを入れ替えて立ち上げるまで

先にも書きましたが、Windows XPのHALは、DLLファイルとして提供されています。まずは、入れ替える為のHALを準備します。

はて、ここで一つ疑問が。

システムにインストールされてないDLLなんて、どうやって準備すれば良いの?

その疑問を、あの懐かしいキャラクターが解決してくれます。


彼(XPの犬)が、この疑問を解決してくれます!(謎

ファイルの検索で、「hal」をキーワードに検索してみましょう。

たぶん、「%systemroot%\Driver Cache\i386\sp3.cab」の中から色々とHitします。

この中から、「halaacpi.dll」(ACPI ユニプロセッサ PC)と、「halmacpi.dll」(ACPI マルチプロセッサ PC)を展開します。

展開したファイルは、「%systemroot%\system32」に保存します。(まぁ、直接コピペとかドラッグ&ドロップしたり、可能ならexpandしても構いません。)

筆者の環境では何故か必要ファイルがヒットしなかったので、C:\WINDOWS\Driver Cache\i386内のsp3.cab をデスクトップにコピーしてから展開し、その中から「halaacpi.dll」と「halmacpi.dll」をC:\WINDOWS\system32へコピーした。


こんな感じになってたらおk。

次は、XP modeを「ACPI ユニプロセッサ PC」用のHALで起動させます。

XPが使用するHALは、boot.iniの起動オプション「/hal=○○.dll」で強制的に指定する事ができます。

これを編集し、XP modeを一度だけ「ACPI ユニプロセッサ PC」として起動させる事にします。

※boot.iniは、XPの起動に必要なシステムファイルです。編集に失敗すると、XP modeが起動しなくなる可能性がありますので、十分注意して編集して下さい。

(ここ探ってくる人は、boot.iniが何なのかとかは大体分かってると思いますが・・あと、失敗しても、その責は負えません。)

筆者は、移動して使用しているワーキングディレクトリ先のE:\Virtual Machinesフォルダを丸々他のパーテションにコピーして保存する事によって、不測の事態に対処した(下記のごとく起動不能となった)。


恐らく、標準では

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect

こんな状態になってると思います。これを

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional (ACPI/APIC)" /noexecute=optin /fastdetect /hal=halaacpi.dll

みたいな感じで書き換えてやりましょう。(太字部分は書き足した分)

boot.iniを編集したら、boot.iniを保存し、仮想マシンをシャットダウンします。

boot.iniファイルの編集は、「システムのプロパティ」の「詳細」タブの「起動と回復」の設定から「編集」ボタンをクリックして行えばよい。


マルチプロセッサである事を認識させる。

XP modeが終了できたら、VMware Playerの設定を編集し、プロセッサ数を変更します。ついでにメモリの量も増やしておきましょう。

ここまで進めた人なら分かってると思いますが、実はACPI(無印)の状態でコア数が2に設定されていると、XPが青画面で落ちます。 ← 説明おせーよ

この設定ができたら、Windows XP mode の再生を開始します。

再生開始の直後、XP起動前に、次のような選択画面が表示されます。

これは、先ほどboot.iniを編集した影響によるもので、「OSの起動情報が複数あるけど、どれにする?」と聞いてきています。

上下キー(↑↓)で選択ができますから、boot.iniで追加した分である「XP Professional (ACPI/APIC)」を選んであげましょう。

そのうちXPが立ち上がり、「ハードウェアの自動認識」が「ACPI マルチプロセッサ PC」を検出します。

ドライバのインストールが終わったら、指示に従ってPCを再起動しましょう。でもまだ終わりません。

<ここで重大な注意>
今度は、起動途中のWindowsブートマネージャーで「Windows XP Professinal(ACPI/APIC)を選択したらお終いだ!・・・それ以降起動しなくなってしまった (;>ω<)/ひぃ〜


後始末。

たぶんこれで、無事マルチプロセッサPCとして認識されるはずです。

・・はずなんですが、このままだと、起動時に毎回「どっち起動する?」と尋ねてくる事になります。うざい事この上ない。

どうしたら良いのか?再度boot.iniを編集してやれば解決します。

この時点では、既に標準のHALが「ACPI マルチプロセッサ PC」となっているので、「/hal=halaacpi.dll」のオプションがついたエントリは必要ありません。

要するに、boot.iniを元の構成に戻してやればOKです。


(参考ページ:WindowsXPでのHyperThreading有効化)

*1:XP modeをVMware上で動作させる際のライセンス上の注意点に関しては、Impress WatchのVMware Workstation 7.0のレビュー記事が参考になります。⇒ [ Aero UIをサポートした「VMware Workstation 7」を試す ]

*2:最初からXP modeのライセンスが無い、Windows 7 Starter, Home Basic/Premium等では使えません。(使えないはずです。)

*3:なんでVMwareなのか? ⇒ 実験環境のVirtual PCがうまい事起動しない・・なぜだ?

*4:参考リンク:ユニプロセッサ コンピューターをマルチプロセッサ コンピューターにアップグレードする

*5:APICについては、こちらのページで簡潔に説明されています。 ⇒ [ ACPIとAPIC ]