bhyve

提供: FreeBSD入門
移動: 案内検索
スポンサーリンク

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)


スポンサーリンク