https://naba-san.hatenablog.com/


XP mode をVMware Player で、マルチコアで動か

naba_san2009-11-02

先日リリースされたVMware Player 3.0には、XP modeのインポート機能*1 が搭載されています。これは、Windowsにインストールされた XP mode のイメージを扱えるようにする*2というものです。
ここで一つ、マルチコア環境においては問題(?)が生じます。XP mode で提供される Windows XP Professional は、シングルプロセッサ向けに調整された環境となります。つまり、そのままだと、マルチコア環境でもシングルプロセッサ扱いで起動する事になります。
今回は、このVMware Playerの環境で*3Windows XP mode上でマルチコアを認識させる方法とか、そんなのを紹介します。

本記事の内容は、VMware Player 4.0.1でも問題なく動作することを確認しています。

前準備と問題の原因


とりあえず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. 無理矢理立ち上げた後の後始末(これ重要)

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

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

新しい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しても構いません。)


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

HALの切り替え

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

XPが使用するHALは、boot.iniの起動オプション「/hal=○○.dll」で強制的に指定する事ができます。これを編集し、XP modeを一度だけ「ACPI ユニプロセッサ PC」として起動させる事にします。

※boot.iniは、XPの起動に必要なシステムファイルです。編集に失敗すると、XP modeが起動しなくなる可能性がありますので、十分注意して編集して下さい。
(ここ探ってくる人は、boot.iniが何なのかとかは大体分かってると思いますが・・あと、失敗しても自己責任で。)

恐らく、標準では

[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を保存し、仮想マシンをシャットダウンします。

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

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

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

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

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

これは、先ほどboot.iniを編集した影響によるもので、「OSの起動情報が複数あるけど、どれにする?」と聞いてきています。上下キー(↑↓)で選択ができますから、boot.iniで追加した分である「XP Professional (ACPI/APIC)」を選んであげましょう。

暫くするとXPが立ち上がり、「ハードウェアの自動認識」が「ACPI マルチプロセッサ PC」を検出します。ドライバのインストールが終わったら、指示に従ってPCを再起動しましょう。でもまだ終わりません。

一度「ACPI マルチプロセッサ PC」を認識した後は,起動オプションの「XP Professional (ACPI/APIC)」を選択するとブルースクリーンになるという報告がありました(詳細はコメント欄を参照)。

「XP Professional (ACPI/APIC)」を選択してブルースクリーンになる場合,起動オプションの選択画面でキーボードの上下キー(↑↓)を使用し,「XP Professional」を選んで起動するようにして下さい。

後始末。

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

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

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

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

関連リンク

リンク頂いているページさんなど

内容を補足頂いている派生記事など主ですが、私が書いたものを読むよりも分かりやすいかもしれません。内容が分かりづらい場合は併せて読まれると良いと思います。
VMware Player 3の XP Mode をマルチコアで動かす方法

VMware Player で XP Mode をマルチコア起動させる方法 Ashiat 0:

VMware PlayerにXPモードをインストールする方法

気がついた時点で順次追加させて頂いています。

*1:XP modeをVMware上で動作させる際のライセンス上の注意点に関しては、Impress WatchVMware 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 ]