「bhyve」の版間の差分
行8: | 行8: | ||
== 概要 == | == 概要 == | ||
[[bhyve]] は、[[FreeBSD 10.0-RELEASE]]の一部として2014/01/02に正式にリリースされました。 | [[bhyve]] は、[[FreeBSD 10.0-RELEASE]]の一部として2014/01/02に正式にリリースされました。 | ||
− | 簡単にいうとLinux KVMのFreeBSD版です。ハイパーバイザは、[[FreeBSD]] [[カーネル]] | + | 簡単にいうとLinux KVMのFreeBSD版です。ハイパーバイザは、[[FreeBSD]] [[カーネル]]に統合されています。 |
− | + | ||
+ | [[bhyve]]は、仮想マシンを作成すると /dev/vmm/仮想マシン名 のファイルが作成されます。 | ||
== ライセンス == | == ライセンス == | ||
BSDライセンス | BSDライセンス | ||
== 仕様 == | == 仕様 == | ||
* Intel VT-x, EPTサポートが必須です。 | * Intel VT-x, EPTサポートが必須です。 | ||
+ | ** CPU仮想化機能のためVT-Xが必須です。 | ||
+ | ** メモリ仮想化機能のためEPTが必須です。 | ||
** Nehalem 以降のCPU | ** Nehalem 以降のCPU | ||
** シャドーページングは、サポート外です。 | ** シャドーページングは、サポート外です。 | ||
行20: | 行23: | ||
** BIOS Emulation / ディスイメージからのブートに未対応 | ** BIOS Emulation / ディスイメージからのブートに未対応 | ||
** bhyveloadでメモリの構造体を作成する。 | ** bhyveloadでメモリの構造体を作成する。 | ||
+ | * I/Oは、[[bhyve]]専用コンソール、[[virtio]], VT-d によるパススルー | ||
* コンソールは遅い。 | * コンソールは遅い。 | ||
* PCI | * PCI | ||
行27: | 行31: | ||
*** MSI-Xは非サポート | *** MSI-Xは非サポート | ||
* vmm.koが必要です。 | * vmm.koが必要です。 | ||
− | |||
+ | == x86の仮想化の実現方法 == | ||
+ | 仮想マシンは、OSの上でCPUエミュレータ、仮想デバイスをエミュレートすることでゲストOSの実行環境を実現できます。しかし、すべてをエミュレーションすると実効速度が遅くなります。 | ||
+ | |||
+ | x86上でx86を仮想化している場合、命令を直接CPUで実行したらよい、と考えられますが、すべての命令を実行できるわけではありません。そのため、直接実行できない命令をトラップし、エミュレーションする必要があります。 | ||
+ | |||
+ | 命令には、いくつか種類があります。 | ||
+ | * 非特権命令 | ||
+ | * 特権命令 | ||
+ | * センシティブ命令 | ||
+ | |||
+ | 特権命令をユーザーモードで実行したときに、その特権命令をトラップできればいいのですが、x86 では、それが難しくなっています。 | ||
+ | x86では、センシティブ命令が非特権命令であるため、ユーザーモードで実行できてしまいます。 | ||
+ | |||
+ | x86アーキテクチャにおける仮想化は、センシティブ命令でかつ非特権命令を「静的」もしくは、「動的」に置き換える必要がありました。 | ||
+ | ;VMWare:動的な置き換え | ||
+ | ;Xen:静的な置き換え | ||
+ | |||
+ | 近年のハードウェア側で対応する機能をCPUで提供されています。 | ||
+ | ;インテル:Intel Virtualization Technology (VT-x) | ||
+ | ;AMD:AMD Virtualization | ||
+ | |||
+ | ユーザーモードで実行されるゲストOSでセンシティブ命令を実行したとき、それがトラップされ、ルートモードのハイパーバイザによって、エミュレーションを実行し、仮想OSに処理を返します。 | ||
+ | |||
+ | KVMは、VT-xを前提にハイパーバイザを作成しています。 | ||
+ | KVMでは、エミュレーションの部分にQEMUを使用します。 | ||
+ | <pre> | ||
+ | QEMU | ||
+ | | | ||
+ | Linux kernel - kvm <-> Guest Kernel | ||
+ | </pre> | ||
+ | |||
+ | [[FreeBSD]]の[[bhyve]]だと以下の通りです。 | ||
+ | <pre> | ||
+ | bhyve | ||
+ | | | ||
+ | BSD kernel - vmm.ko <-> Guest Kernel | ||
+ | </pre> | ||
+ | |||
+ | == インストール == | ||
+ | [[FreeBSD 10.0-RELEASE]]では、デフォルトでベースシステムに入っています。 | ||
== コマンド == | == コマンド == | ||
− | + | ;[[bhyve]]:bhyveloadが初期化した仮想マシンのインスタンスを実行し、ディスク、NIC、コンソール等のデバイスのエミュレーションを担当します。 | |
− | + | ;[[bhyvectl]]:仮想マシンの設定値の参照、変更を行います。 | |
− | + | ;[[bhyveload]]:bhyve仮想マシンへFreeBSDゲストをロードします | |
− | + | ;[[vmrun.sh]](/usr/share/examples/bhyve/vmrun.sh):仮想マシンを実行するスクリプトです。 | |
== 設定 == | == 設定 == | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
行60: | 行103: | ||
-l: LPC device configuration | -l: LPC device configuration | ||
-m: memory size in MB | -m: memory size in MB | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | <syntaxhighlight lang="bash"> | ||
+ | usage: bhyveload [-m mem-size] [-d <disk-path>] [-h <host-path>] | ||
+ | [-e <name=value>] [-c <console-device>] <vmname> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
2014年3月27日 (木) 02:13時点における版
bhyve (BHyVe)とは、"BSD hypervisor"(BSDハイパーバイザー)です。bhyveは、FreeBSD向けに開発されたレガシーフリーなハイパーバイザー(Hypervisor)/仮想マシンマネージャです。bhyveは、拡張ページテーブル(Extednded Page Tables, EPT)やvirtio(VirtIO)ネットワーク/ストレージドライバのようなモダンなCPUの機能を利用します。また、bhyveコマンドです。
読み方
- bhyve
- びーはいぶ
目次
概要
bhyve は、FreeBSD 10.0-RELEASEの一部として2014/01/02に正式にリリースされました。 簡単にいうとLinux KVMのFreeBSD版です。ハイパーバイザは、FreeBSD カーネルに統合されています。
bhyveは、仮想マシンを作成すると /dev/vmm/仮想マシン名 のファイルが作成されます。
ライセンス
BSDライセンス
仕様
- Intel VT-x, EPTサポートが必須です。
- CPU仮想化機能のためVT-Xが必須です。
- メモリ仮想化機能のためEPTが必須です。
- Nehalem 以降のCPU
- シャドーページングは、サポート外です。
- AMD SVM 未対応
- BIOSがないため、ディスイメージから起動できない。
- BIOS Emulation / ディスイメージからのブートに未対応
- bhyveloadでメモリの構造体を作成する。
- I/Oは、bhyve専用コンソール、virtio, VT-d によるパススルー
- コンソールは遅い。
- PCI
- IO APICエミュレート機能を持たないため、レガシーな割り込みは非サポート。
- MSIのみサポート
- MSI割り込みするものだけが仕様できる
- MSI-Xは非サポート
- vmm.koが必要です。
x86の仮想化の実現方法
仮想マシンは、OSの上でCPUエミュレータ、仮想デバイスをエミュレートすることでゲストOSの実行環境を実現できます。しかし、すべてをエミュレーションすると実効速度が遅くなります。
x86上でx86を仮想化している場合、命令を直接CPUで実行したらよい、と考えられますが、すべての命令を実行できるわけではありません。そのため、直接実行できない命令をトラップし、エミュレーションする必要があります。
命令には、いくつか種類があります。
- 非特権命令
- 特権命令
- センシティブ命令
特権命令をユーザーモードで実行したときに、その特権命令をトラップできればいいのですが、x86 では、それが難しくなっています。 x86では、センシティブ命令が非特権命令であるため、ユーザーモードで実行できてしまいます。
x86アーキテクチャにおける仮想化は、センシティブ命令でかつ非特権命令を「静的」もしくは、「動的」に置き換える必要がありました。
- VMWare
- 動的な置き換え
- Xen
- 静的な置き換え
近年のハードウェア側で対応する機能をCPUで提供されています。
- インテル
- Intel Virtualization Technology (VT-x)
- AMD
- AMD Virtualization
ユーザーモードで実行されるゲストOSでセンシティブ命令を実行したとき、それがトラップされ、ルートモードのハイパーバイザによって、エミュレーションを実行し、仮想OSに処理を返します。
KVMは、VT-xを前提にハイパーバイザを作成しています。 KVMでは、エミュレーションの部分にQEMUを使用します。
QEMU | Linux kernel - kvm <-> Guest Kernel
FreeBSDのbhyveだと以下の通りです。
bhyve | BSD kernel - vmm.ko <-> Guest Kernel
インストール
FreeBSD 10.0-RELEASEでは、デフォルトでベースシステムに入っています。
コマンド
- bhyve
- bhyveloadが初期化した仮想マシンのインスタンスを実行し、ディスク、NIC、コンソール等のデバイスのエミュレーションを担当します。
- bhyvectl
- 仮想マシンの設定値の参照、変更を行います。
- bhyveload
- bhyve仮想マシンへFreeBSDゲストをロードします
- vmrun.sh(/usr/share/examples/bhyve/vmrun.sh)
- 仮想マシンを実行するスクリプトです。
設定
使い方
bhyveコマンド
bhyveコマンドとは
bhyveコマンドは、仮想マシン内でゲストオペレーティングシステムを実行するコマンドです。
コマンドラインオプション
Usage: bhyve [-aehAHIPW] [-g <gdb port>] [-s <pci>] [-S <pci>] [-c vcpus] [-p pincpu] [-m mem] [-l <lpc>] <vm> -a: local apic is in XAPIC mode (default is X2APIC) -A: create an ACPI table -g: gdb port -c: # cpus (default 1) -p: pin vcpu 'n' to host cpu 'pincpu + n' -H: vmexit from the guest on hlt -P: vmexit from the guest on pause -W: force virtio to use single-vector MSI -e: exit on unhandled I/O access -h: help -s: <slot,driver,configinfo> PCI slot config -S: <slot,driver,configinfo> legacy PCI slot config -l: LPC device configuration -m: memory size in MB
usage: bhyveload [-m mem-size] [-d <disk-path>] [-h <host-path>] [-e <name=value>] [-c <console-device>] <vmname>
関連項目
- bhyve
- bhyvectl
- bhyveload
- vmrun.sh (/usr/share/examples/bhyve/vmrun.sh)