Kernel/VM Advent Calendar 9日目: VirtualBoxによるLinuxへのCPU hotplug
もう、だいぶ前からですが、VirtualBoxはCPU hotplugをサポートしています。
virtualization.info | リリース:Oracle VM VirtualBox 3.2(20100519-2)
マニュアルもあります。
Chapter 9. Advanced topics
というわけで、手元のMac OS X版VirtualBoxでも実際できるのか、確かめてみました。
やってみた
実験環境はこんな感じです。
ハードウェア | Mac mini, Intel Core 2 Duo(2.53GHz) |
---|---|
ホストOS | Mac OS X 10.6.4 |
VMM | VirtualBox 3.2.12 |
ゲストOS | Linux 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から、VMのCPU hotplug機能をONにして、最大CPU数を8に設定してみます
GUIからは設定できないので、コマンドライン(ターミナル.appとか)から。
HostOS:$ VBoxManage modifyvm--cpuhotplug on HostOS:$ VBoxManage modifyvm --cpus 8
次にVMを起動します。これはGUIからでOK。コマンドラインからやりたければ、次のような感じ(たぶん)。
HostOS:$ VBoxManage startvm
ゲストOSが起動したら、ゲストから見えるCPU数を見てみましょう。
GuestOS:$ grep processor /proc/cpuinfo processor : 0
現在のところ、1個(CPU0のみ)です。
では、CPUを1個追加(hot-add)してみましょう。
HostOS:$ VBoxManage controlvmplugcpu
具体的には、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 0 | CPU 0 |
CPU 3 | CPU 1 |
CPU 1 | CPU 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 0 | CPU 0 |
CPU 1 | CPU 2 |
CPU online/offlineコード
それでは、CPU hotplugを行った時にLinuxの中でどのようなコードが実行されているのか、追いかけてみましょう。
と思ったのですが、時間的に無理でした。。。><
という訳で、この話は後日書きたいと思います。