「bhyve」の版間の差分

提供: FreeBSD入門
移動: 案内検索
(コマンド)
 
(同じ利用者による、間の2版が非表示)
行1: 行1:
[[bhyve]] (BHyVe)とは、"BSD hypervisor"(BSDハイパーバイザー)です。[[bhyve]]は、[[FreeBSD]]向けに開発されたレガシーフリーなハイパーバイザー(Hypervisor)/仮想マシンマネージャです。[[bhyve]]は、拡張ページテーブル(Extednded Page Tables, EPT)や[[virtio]](VirtIO)ネットワーク/ストレージドライバのようなモダンなCPUの機能を利用します。また、[[bhyve]]コマンドです。
+
[[bhyve]] (BHyVe)とは、"BSD hypervisor"(BSDハイパーバイザー)です。[[bhyve]]は、[[FreeBSD]]向けに開発されたレガシーフリーなハイパーバイザー(Hypervisor)/仮想マシンマネージャです。[[bhyve]]は、拡張ページテーブル(Extednded Page Tables, EPT)や[[virtio]](VirtIO)ネットワーク/ストレージドライバのようなモダンなCPUの仮想化支援機能を利用します。また、[[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 CPUの場合 ===
 +
* VT-x(CPU仮想化機能)
 +
* EPT(メモリ仮想化機能)
 +
が必須です。
 +
Nehalem 以降のプロセッサが対象です。
 +
=== AMD CPUの場合 ===
 +
* AMD-V
 +
* Nested Page Tables
 +
が必須です。
 +
== ゲストOS ==
 +
以下のゲストOSがサポートされています。
 +
* FreeBSD 8.4
 +
* FreeBSD 9
 +
* FreeBSD 10
 +
* FreeBSD 11
 +
* OpenBSD
 +
* NetBSD
 +
* Linux
 +
** CentOS
 +
** Red Hat Enterprise Linux
 +
** Debian
 +
** Fedora
 +
** OpenSUSE
 +
** Ubuntu
 +
** <html><a href="/ubuntu/">Ubuntu</a></html>
 
== 仕様 ==
 
== 仕様 ==
 
* Intel VT-x, EPTサポートが必須です。
 
* Intel VT-x, EPTサポートが必須です。
 +
** CPU仮想化機能のためVT-Xが必須です。
 +
** メモリ仮想化機能のためEPTが必須です。
 
** Nehalem 以降のCPU
 
** Nehalem 以降のCPU
 
** シャドーページングは、サポート外です。
 
** シャドーページングは、サポート外です。
行20: 行49:
 
** BIOS Emulation / ディスイメージからのブートに未対応
 
** BIOS Emulation / ディスイメージからのブートに未対応
 
** bhyveloadでメモリの構造体を作成する。
 
** bhyveloadでメモリの構造体を作成する。
 +
* I/Oは、[[bhyve]]専用コンソール、[[virtio]], VT-d によるパススルー
 
* コンソールは遅い。
 
* コンソールは遅い。
 
* PCI
 
* PCI
行27: 行57:
 
*** 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]]
+
;[[bhyve]]:bhyveloadが初期化した仮想マシンのインスタンスを実行し、ディスク、NIC、コンソール等のデバイスのエミュレーションを担当します。
* [[bhyvectl]]
+
;bhyvectl:仮想マシンの設定値の参照、変更を行います。
* [[bhyveload]]
+
;bhyveload:bhyve仮想マシンへFreeBSDゲストをロードします
* [[vmrun.sh]] (/usr/share/examples/bhyve/vmrun.sh)
+
;vmrun.sh(/usr/share/examples/bhyve/vmrun.sh):仮想マシンを実行するスクリプトです。
 +
 
 
== 設定 ==
 
== 設定 ==
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== 使い方 ==
 
== 使い方 ==
 
== bhyveコマンド ==
 
== bhyveコマンド ==
行62: 行130:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
<syntaxhighlight lang="bash">
 +
usage: bhyveload [-m mem-size] [-d <disk-path>] [-h <host-path>]
 +
                [-e <name=value>] [-c <console-device>] <vmname>
 +
</syntaxhighlight>
 
== 関連項目 ==
 
== 関連項目 ==
 
{{bhyve}}
 
{{bhyve}}
 
<!-- vim: fileencoding=utf-8 filetype=mediawiki
 
<!-- vim: fileencoding=utf-8 filetype=mediawiki
 
-->
 
-->

2015年9月27日 (日) 22:23時点における最新版

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 CPUの場合

  • VT-x(CPU仮想化機能)
  • EPT(メモリ仮想化機能)

が必須です。 Nehalem 以降のプロセッサが対象です。

AMD CPUの場合

  • AMD-V
  • Nested Page Tables

が必須です。

ゲストOS

以下のゲストOSがサポートされています。

  • FreeBSD 8.4
  • FreeBSD 9
  • FreeBSD 10
  • FreeBSD 11
  • OpenBSD
  • NetBSD
  • Linux
    • CentOS
    • Red Hat Enterprise Linux
    • Debian
    • Fedora
    • OpenSUSE
    • Ubuntu
    • Ubuntu

仕様

  • 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

FreeBSDbhyveだと以下の通りです。

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)