Hatena::ブログ(Diary)

hiraku_wfsの日記

2010-12-15

Kernel/VM Advent Calendar 9日目: VirtualBoxによるLinuxへのCPU hotplug

もう、だいぶ前からですが、VirtualBoxCPU hotplugをサポートしています。

virtualization.info | リリース:Oracle VM VirtualBox 3.2(20100519-2)

マニュアルもあります。

Chapter?9.?Advanced topics

というわけで、手元のMac OS XVirtualBoxでも実際できるのか、確かめてみました。

やってみた

実験環境はこんな感じです。

ハードウェアMac mini, Intel Core 2 Duo(2.53GHz)
ホストOSMac OS X 10.6.4
VMMVirtualBox 3.2.12
ゲストOSLinux 2.6.33 (x86_64) (Fedora13)

ゲストLinuxは64bit版じゃないとダメだそうです。8CPUとあるのは、たぶん、ゲストに割り当てる仮想CPUのことだと思われ。

おそらく上は誤訳で、仮想CPUが8個より多い場合でやる時は64bit版ゲストLinuxが必要だよ、ということだと思います。

なので32bit版Linuxでも出来るんじゃないかと(試してませんが)。

http://www.virtualbox.org/manual/ch09.html#cpuhotplug

Windows supports only hot-add while Linux supports hot-add and hot-remove but to use this feature with more than 8 CPUs a 64bit Linux guest is required.

まずは、VMの起動前にやること。

ホストOSから、VMCPU hotplug機能をONにして、最大CPU数を8に設定してみます

GUIからは設定できないので、コマンドラインターミナル.appとか)から。

HostOS:$ VBoxManage modifyvm <vmname> --cpuhotplug on
HostOS:$ VBoxManage modifyvm <vmname> --cpus 8

<vmname>には、自分で設定したVMの名前を指定しましょう。

次にVMを起動します。これはGUIからでOK。コマンドラインからやりたければ、次のような感じ(たぶん)。

HostOS:$ VBoxManage startvm <vmname>

ゲストOSが起動したら、ゲストから見えるCPU数を見てみましょう。

GuestOS:$ grep processor /proc/cpuinfo
processor	: 0

現在のところ、1個(CPU0のみ)です。

では、CPUを1個追加(hot-add)してみましょう。

HostOS:$ VBoxManage controlvm <vmname> plugcpu <cpuid>

具体的には、CPU3を追加したいなら、次のような感じ。

HostOS:$ VBoxManage controlvm "fed13-64-vbox1" plugcpu 3

増えたかどうか、ゲストで確認しましょう。

GuestOS:$ grep processor /proc/cpuinfo
processor	: 0
processor	: 1

ゲストにはCPU1として認識されるようです。

hot-add成功ですね!

さらにもう1個追加しましょう。

HostOS:$ VBoxManage controlvm "fed13-64-vbox1" plugcpu 1

GuestOS:$ grep processor /proc/cpuinfo
processor	: 0
processor	: 1
processor	: 2

今の状態は、こんな感じでしょうか。

仮想CPUゲストから見えるCPU
CPU 0CPU 0
CPU 3CPU 1
CPU 1CPU 2

さて、次に削除(hot-remove)を試してみましょう。今度はunplugcpuです。


HostOS:$ VBoxManage controlvm "fed13-64-vbox1" unplugcpu 3

GuestOS:$ grep processor /proc/cpuinfo
processor	: 0
processor	: 2

ゲストからはCPU1がなくなったように見えます。

仮想CPUゲストから見えるCPU
CPU 0CPU 0
CPU 1CPU 2

CPU online/offlineコード

それでは、CPU hotplugを行った時にLinuxの中でどのようなコードが実行されているのか、追いかけてみましょう。

と思ったのですが、時間的に無理でした。。。><

という訳で、この話は後日書きたいと思います。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/hiraku_wfs/20101215/1292175393