TinyVisorの使い方

このページでは、PC内に2個のVM(VM0とVM1)を作成し、それぞれのVMでOSを動作させる手順を説明します。

あらかじめ、VM1に割り当てるためのHBA(AHCIカードなど)とHDD、NIC、ビデオカード、ディスプレイ等を用意してください。 また、TinyVisorのインストール方法を参照して、TinyVisorをインストールしてください。

DSC02723.JPG

1. ハードウェア構成の確認

GNU/Linuxを起動して、ハードウェア構成を確認します。

始めに、次のコマンドを実行し、CPU(論理プロセッサ)の数と各CPUのAPIC IDを確認します。 後ほどVMにCPUを割り当てる際に、APIC IDを指定します。

grep '^apicid' /proc/cpuinfo
apicid          : 0
apicid          : 2
apicid          : 4
apicid          : 6
apicid          : 1
apicid          : 3
apicid          : 5
apicid          : 7

次に、次のコマンドを実行し、メモリがマップされている物理アドレスを確認します。 後ほどVMにメモリを割り当てる際に、物理アドレス範囲を指定します。

grep 'System RAM' /proc/iomem
00000000-0009c3ff : System RAM
00100000-dfbdffff : System RAM
100000000-11fffffff : System RAM

最後に、次のコマンドを実行し、I/O(PCI)の構成を確認します。 後ほどVMにI/Oを割り当てる際には、I/Oが接続しているPortのバス番号とデバイス番号、ファンクション番号を指定します。 例えば「88SE9123 PCIe SATA 6.0 Gb/s controller」を割り当てる場合には、00:1c.2を指定します。

lspci -tv
-[0000:00]-+-00.0  Intel Corporation Core Processor DMI
           +-03.0-[01]----00.0  nVidia Corporation G98 [GeForce 8400 GS]
           +-08.0  Intel Corporation Core Processor System Management Registers
           +-08.1  Intel Corporation Core Processor Semaphore and Scratchpad Registers
           +-08.2  Intel Corporation Core Processor System Control and Status Registers
           +-08.3  Intel Corporation Core Processor Miscellaneous Registers
           +-10.0  Intel Corporation Core Processor QPI Link
           +-10.1  Intel Corporation Core Processor QPI Routing and Protocol Registers
           +-1a.0  Intel Corporation 5 Series/3400 Series Chipset USB Universal Host Controller
           +-1a.1  Intel Corporation 5 Series/3400 Series Chipset USB Universal Host Controller
           +-1a.2  Intel Corporation 5 Series/3400 Series Chipset USB Universal Host Controller
           +-1a.7  Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller
           +-1b.0  Intel Corporation 5 Series/3400 Series Chipset High Definition Audio
           +-1c.0-[02]--
           +-1c.1-[03]----00.0  Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller
           +-1c.2-[04]----00.0  Marvell Technology Group Ltd. 88SE9123 PCIe SATA 6.0 Gb/s controller
           +-1c.3-[05]----00.0  NEC Corporation uPD720200 USB 3.0 Host Controller
           +-1d.0  Intel Corporation 5 Series/3400 Series Chipset USB Universal Host Controller
           +-1d.1  Intel Corporation 5 Series/3400 Series Chipset USB Universal Host Controller
           +-1d.2  Intel Corporation 5 Series/3400 Series Chipset USB Universal Host Controller
           +-1d.3  Intel Corporation 5 Series/3400 Series Chipset USB Universal Host Controller
           +-1d.7  Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller
           +-1e.0-[06]----03.0  ATI Technologies Inc Rage XL
           +-1f.0  Intel Corporation 5 Series Chipset LPC Interface Controller
           +-1f.2  Intel Corporation 5 Series/3400 Series Chipset 6 port SATA AHCI Controller
           \-1f.3  Intel Corporation 5 Series/3400 Series Chipset SMBus Controller

2. VM1用HDDにOSをインストール

始めに、BIOSメニューにて、VM1に割り当てるHDDの起動順位をVM0のHDDの起動順位より上にします。

次に、そのHDDに、通常の手順でOSをインストールします。このとき、UEFI環境用ではなく、BIOS環境用にOSをインストールしてください。

最後に、BIOSメニューにて、起動順位をもとに戻します。

3. 各VMへのCPU、メモリ、I/Oの割り当て

VM1を生成し、VM1にCPU、メモリ、I/Oを割り当てるためには、次に示すVMMパラメータを指定します。

パラメータ 説明
vm=<vm名>[,<vm名>[,...]] 生成するVMの一覧を指定します。vm0は指定しなくても指定したとみなします。 vm=vm0,vm1
<vm名>.cpu=<APIC_ID>[,<APIC_ID>,[...]] 指定したVMに割り当てるCPUのAPIC IDを指定します。 vm1.cpu=6.7
<vm名>.mem=<開始アドレス>-<終了アドレス>[,<開始アドレス>-<終了アドレス>,[...]] 指定したVMに割り当てる物理メモリのアドレス範囲を指定します。 vm1.mem=80000000-11fffffff
<vm名>.cpu=<BUS>:<DEV>:<FUNC>[,<BUS>:<DEV>:<FUNC>,[...]] 指定したVMに割り当てるPCIe Root Portのバス番号、デバイス番号、ファンクション番号を指定します。 vm1.pci=00:1c.1,00:1c.2,00:1c.3,00:1c.4

例えば、VMMパラメータは次のようにになります。

vm=vm0,vm1 vm1.mem=80000000-11fffffff vm1.cpu=6,7 vm1.pci=00:1c.1,00:1c.2,00:1c.3,00:1c.4


具体的な手順は、VMMをインストールした方法によって違います。

UEFI環境において、USBメモリにTinyVisorをインストールした場合は、TinyVisorをビルドしたディレクトリに移動し、次のコマンドを実行してUSBメモリに書き込みなおします。1.7以降の場合は、ゲストBIOSのバイナリを明示的に指定する必要があります。

1.7以降の場合

sudo vmm/boot/uefi-loader/install.sh -c 'vm=vm0,vm1 vm1.mem=80000000-11fffffff vm1.cpu=6,7 vm1.pci=00:1c.1,00:1c.2,00:1c.3,00:1c.4' -m bios/out/bios.bin /dev/sdf1

1.6以前の場合

sudo ./install_to_usb.sh -e -c 'vm=vm0,vm1 vm1.mem=80000000-11fffffff vm1.cpu=6,7 vm1.pci=00:1c.1,00:1c.2,00:1c.3,00:1c.4' /dev/sdf1


BIOS環境において、USBメモリにTinyVisorをインストールした場合は、TinyVisorをビルドしたディレクトリに移動し、次のコマンドを実行してUSBメモリに書き込みなおします。BIOS環境では「vm0.boot_int18」または「vm0.boot_drive=81」の指定を指定して、USBメモリの次の優先順位のドライブからOSをロードするようにしてください。

1.7以降の場合

sudo vmm/boot/loader/install.sh -c 'vm0.boot_int18 vm=vm0,vm1 vm1.mem=80000000-11fffffff vm1.cpu=6,7 vm1.pci=00:1c.1,00:1c.2,00:1c.3,00:1c.4' /dev/sdf 0 1 vmm/boot/loader/bootloader vmm/vmm.elf bios/out/bios.bin

1.6以前の場合

sudo ./install_to_usb.sh -c 'vm0.boot_int18 vm=vm0,vm1 vm1.mem=80000000-11fffffff vm1.cpu=6,7 vm1.pci=00:1c.1,00:1c.2,00:1c.3,00:1c.4' /dev/sdf


LinuxのファイルシステムにTinyVisorをインストールした場合、/etc/grub.d/40_customのエントリを次のように変更してから、update-grubコマンドまたはgrub2-mkconfig -o /boot/grub2/grub.cfgコマンドを実行します。

menuentry 'VMM (vm0, vm1)' --class vmm {
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos1)'
        echo    'Loading VMM ...'
        multiboot   /boot/vmm.elf vm=vm0,vm1 vm1.mem=80000000-11fffffff vm1.cpu=6,7 vm1.pci=00:1c.1,00:1c.2,00:1c.3,00:1c.4
        echo    'Loading guest BIOS ...'
        module  /boot/bios.bin
}

4. VMM、OSの起動

PCに電源を投入します。

USBメモリにTinyVisorをインストールした場合は、自動的にVMMが起動します。 USBメモリからVMMがロードされ起動を開始すると、メッセージがCOM1か画面(デフォルトはCOMT1)に出力されます。

LinuxのファイルシステムにTinyVisorをインストールした場合、GRUB画面で「VMM (vm0, vm1)」を選択し、VMMを起動させます。

以下は、USBメモリにTinyVisorをインストールし、VM0にFreeBSDをインストールしたHDDを割り当て、VM1にLinuxをインストールしたHDDを割り当てた場合の写真です。

DSC02724.JPG

VMMの起動が完了すると、VM0とVM1の実行が開始されます。

VM0では、Host BIOSによってブートローダがロードされ、ブートローダによってOSがロードされ、OSが起動します。 ブートローダのメニューやOSのメッセージが画面に出力されます。

DSC02725.JPG

VM1では、初めにGuest BIOSのメッセージがCOM1に出力されます。 次に、Guest BIOSによってGRUBがロードされ、GRUBによってOSがロードされ、OSが起動します。 VM1にビデオカードを割り当てていれば、そのビデオカードに接続されたディスプレイの画面にOSのメッセージが出力されます。

DSC02726.JPG

VM0とVM1のOSが起動完了すれば、それぞれ独立して操作可能です。

DSC02729.JPG

5. OSの再起動

BIOS環境では、VM0のOSを再起動すると、VM0のOSだけが再起動します VM1のOSを再起動すると、VM1のOSだけが再起動します。

UEFI環境では、VM0のOSを再起動して、VM1のOSをシャットダウンすると、マシン全体が再起動します。 VM1のOSを再起動すると、VM1のOSだけが再起動します。

6. OSの停止

VM0のOSと、VM1のOSの両方を停止すると、PCの電源がOFFになります。