BHyVe: The BSD Hypervisor
  Takuya ASADA a.k.a @syuu1228

  28. Sep. 2012


12年10月4日木曜日
仮想化とFreeBSD




12年10月4日木曜日
仮想化とは?
                       プロセス         プロセス


              プロセス
                        OS            OS


                OS       ハイパーバイザ


              ハードウェア         ハードウェア

               従来             仮想化
  ✤   一台のコンピュータ上に複数の仮想的なコンピュータを動作させ、そ
      れぞれの上でOS・アプリケーションを実行

  ✤   複数のOSを調停するソフトウェア→ハイパーバイザ
12年10月4日木曜日
FreeBSDにおける仮想化の種類



  ✤   完全仮想化 VirtualBox, Xen(HVM), BHyVe

  ✤   準仮想化 Xen(PVM)

  ✤   コンテナ型仮想化 Jail




12年10月4日木曜日
完全仮想化
                 プロセス    プロセス



                 既存OS    既存OS


                   ハイパーバイザ


                    ハードウェア



  ✤   実ハードウェアを完全にエミュレートし、既存のOSをそのまま仮想
      マシン上で動作させる ↔ 準仮想化

  ✤   高速化の為、ゲストマシンで実行されるプログラムを直接実CPUで
      実行

12年10月4日木曜日
ゲストマシンのプログラムの直接実行

                          カーネルモード(ring0)
                            特権命令の実行を
                            ハンドル、エミュ
                            レーション実行
                                     特権命令が実行されたら
                                      カーネルモードへ遷移
                            ゲストプログラム
                             を直接実行


                          ユーザモード(ring3)

  ✤
      仮想化対象のCPUに期待される動作

      ✤
          ユーザモードでゲストマシン上のプログラムを直接実行

      ✤
          システム全体に影響を与える命令(センシティブ命令)はユーザモードから実行出来ない(=特権命令)
          →トラップが発生してカーネルモードへ遷移

      ✤
          トラップハンドラで実行しようとした特権命令に合わせてエミュレーション処理を行い、ゲストプログラムの実行に戻る


12年10月4日木曜日
x86アーキテクチャの問題点
                  カーネルモード(ring0)
                    特権命令の実行を
                    ハンドル、エミュ
                     レーション実行


                      ✕
                    ゲストプログラム
                     を直接実行


                  ユーザモード(ring3)



      ✤   特権命令ではないセンシティブ命令がある
          →権限が不足していない為トラップされない
          これの実行を回避する必要がある


12年10月4日木曜日
バイナリトランスレーション



  ✤   ゲストのプログラムを実行中に書き換え、センシティブ命令をエミュ
      レーション処理に置き換える事により実行を回避

  ✤   現在では後述のハードウェア仮想化支援が主流になったが、以前はこ
      れが主流の方式だった




12年10月4日木曜日
ハードウェア仮想化支援機能による
  仮想化(Intel VT, AMD-V)
  ✤   CPUにRingとは独立した仮想化用のモードを追
                                          ハイパーバイザ ゲストモード
      加:                                    モード
      ハイパーバイザモード、ゲストモード
                                           カーネル   カーネル
                                 ring 0     モード    モード
  ✤   ゲストモードはセンシティブ命令の実行などエ
      ミュレーションが必要な処理が発生した時点で
                                 ring 3     ユーザ    ユーザ
      中断され、ハイパーバイザモードへ復帰する                  モード    モード


  ✤   ハードウェアレベルで仮想化に対応する事によ
      り、仮想化オーバヘッドを低減しながらハイパ
      ーバイザの実装を単純化出来るようになった

12年10月4日木曜日
VirtualBox
                                   プロセス


                          プロセス
                                  ゲストOS


                       ホストOS     ハイパーバイザ


                             ハードウェア


  ✤   BHyVe以外で唯一FreeBSD上で動作するハードウェア仮想化支援対応のハイパーバイザ

  ✤   ホストカーネル上のドライバとしてハイパーバイザが動作、ゲストマシンは通常のプロセスとして
      FreeBSDが管理

  ✤   デスクトップ用途が中心

  ✤   ライセンス:GPLv2

  ✤   オラクルが開発、多くのOS上で動作

12年10月4日木曜日
Xen(HVM)
                          プロセス       プロセス



                          dom0        HVM


                                ハイパーバイザ


                                ハードウェア


  ✤   ハードウェア上で直接Xenハイパーバイザが動作

  ✤   ユーザからの操作やハードウェアへのアクセスには「dom0」と呼ばれる準仮想化された管理OSを用いる
      (FreeBSDは対応していない)

  ✤   サーバ用途が中心

  ✤   ライセンス:GPLv2

  ✤   XenハイパーバイザはXenコミュニティで開発
      各OSの準仮想化対応はそれぞれのOSのコミュニティ・開発元で開発
12年10月4日木曜日
Linux KVM(参考)
                                  プロセス


                       プロセス
                                 ゲストOS


                      ホストOS     ハイパーバイザ


                             ハードウェア


  ✤   ハイパーバイザはLinuxカーネルに統合

  ✤   ゲストマシンは通常のプロセスとしてLinuxが管理

  ✤   サーバ用途が中心

  ✤   ライセンス:GPLv2

  ✤   Linuxカーネルコミュニティで開発

12年10月4日木曜日
BHyVe
                                      プロセス


                             プロセス
                                     ゲストOS


                            ホストOS   ハイパーバイザ


                                ハードウェア


  ✤   Linux KVMのFreeBSD版!

  ✤   ハイパーバイザはFreeBSDカーネルに統合

  ✤   ゲストマシンは通常のプロセスとしてFreeBSDが管理

  ✤   サーバ用途が中心

  ✤   ライセンス:BSDL

  ✤   FreeBSDコミュニティで開発(baseへのマージを目指している)
12年10月4日木曜日
準仮想化 - Xen(PVM)
                           プロセス     プロセス



                            dom0     PVM


                              ハイパーバイザ


                               ハードウェア


  ✤   実ハードウェアを完全にエミュレートするのではなく、仮想化に都合が良い構造にゲストOSを改変
      センシティブ命令の実行やハードウェアアクセスなどハイパーバイザによるエミュレーションが必要な処理は、ゲストからハイ
      パーバイザを呼び出す「ハイパーバイザコール」に置き換え

  ✤   高速化の為、ゲストマシンで実行されるプログラムを直接実CPUで実行
      センシティブ命令の実行など実行されてはまずい処理は予め書き換えられているので、バイナリトランスレーションやハードウ
      ェア仮想化支援を必要としない

  ✤   現在ではハードウェア仮想化支援(HVM)を使う事が多くなったが、登場時はハードウェア仮想化は未だ存在しておらず、バイ
      ナリトランスレーションよりもいくつかのベンチマークで性能が高く、オーバヘッドも低かった


12年10月4日木曜日
準仮想化デバイス
  ✤   完全仮想化環境で用いられているHDDやNICなどの仮想デバイスは実デ
      バイスをエミュレートしているのでゲストOS上の既存のドライバが使え
      るが、ゲスト・ハイパーバイザ間のモード切り替え回数が無駄に多い、
      メモリコピーが発生するなど必ずしも性能が高くない

  ✤   準仮想化環境で用いられている仮想デバイスはゲスト・ハイパーバイザ
      間のデータのやり取りに最適化されている為、既存デバイスのエミュレ
      ーションよりも性能が高い

  ✤   準仮想化デバイスを完全仮想化環境にも導入しよう→ virtio
      BHyVeでも使用

12年10月4日木曜日
コンテナ型仮想化
                   プロセス     プロセス



                    コンテナ
                                OS


                      ハードウェア


  ✤   1つのOS上に擬似的に複数のOS環境を作り、OSの各種リソース情報をコンテナごと
      に別々に管理する事により、プロセスに対し別々のOSであるかのように見せかける

  ✤   オーバヘッドは最も低いが、OSは1つしか動作していないので再起動やpanicには全
      コンテナが巻き込まれる、1つのバージョンのOSにしか対応しない、異なるOSの混
      在環境は作れないなどの制約がある

12年10月4日木曜日
コンテナ型仮想化

  ✤   chroot
      あるプロセスに対して、あるディレクトリをルートディレクトリに見せる
      (ls /しても指定したディレクトリより上位ディレクトリは見えない)

  ✤   jail
      chrootに加えて、プロセス空間も独立
      (ps axを実行してもjailの外側のプロセスは見えない)

  ✤   jail + VIMAGE
      更にネットワークスタックも独立
      (netstat -nrを実行してもjailの外側のルーティングテーブルは見えない)

12年10月4日木曜日
BHyVe詳解




12年10月4日木曜日
BHyVeとは
  ✤   Linux KVMのようなFreeBSDカーネルに統合されたハイパーバイザ

  ✤   FreeBSD 10へのマージを目指して開発中

  ✤   Intel VT-x、EPT対応CPUで動作(Nehalem以降のIntel CPU)

  ✤   対応しているホストOS:FreeBSD 8.1 - 10/amd64(無変更)

  ✤   対応しているゲストOS:FreeBSD 7.2 - 10/amd64(要改造)

  ✤   対応デバイス:仮想ディスク、仮想NIC、仮想コンソール、PCIパススルー

  ✤   SMP対応(最大8コア)

12年10月4日木曜日
BHyVe実演
              自分でも試してみたい人は
              http://callfortesting.org/bhyve/
              をチェック!




12年10月4日木曜日
/boot/loader.conf

      hw.physmem="0x100000000"
      vmm_load=”YES”




  ✤   hw.physmemでホストOSのメモリサイズを制限
      (0x100000000 = 4GB)

  ✤   BHyVeのカーネルモジュールであるvmm.koをロード



12年10月4日木曜日
/usr/sbin/bhyveload
      # /usr/sbin/bhyveload -m 256 -h /usr/guest myguest
      # ls /dev/vmm
      myguest


  ✤   VMインスタンス(/dev/vmm/$VMNAME)を作成し、BSDカーネルをVMインスタ
      ンスのメモリ領域にロードして起動可能な状態を作る

  ✤   BIOSが無いのでディスクイメージのブートセクタから起動できない。代わりに、
      bhyveloadにより64bitモードでFreeBSDカーネルを実行する為の様々な初期化処理を行
      なっている

  ✤   ロードするだけで実行はしない。ブートローダが走っているように見えるのは、ホスト
      OSへ移植されたゲスト専用のブートローダが動いているだけ

12年10月4日木曜日
/usr/sbin/bhyve

      # /usr/sbin/bhyve -c 2 -m 256 -s 1,virtio-net,tap0
      -s 2,virtio-blk,/usr/guest/diskdev.img myguest


  ✤   bhyveloadが初期化したVMインスタンスを実行し、ディスク、NIC、
      コンソールなどのデバイスエミュレーション処理を行う

  ✤   VMインスタンスの状態は、プロセス内ではなく/dev/vmm/
      $VMNAMEというデバイス上、つまりカーネル内に保持される。こ
      のファイルへread(), write(), mmap()する事によりVM内のメモリ空間
      にアクセス出来る

12年10月4日木曜日
カーネルとユーザランドの役割分担
                       ハイパーバイザモード                    ゲストモード

                                                  ゲストOS
              カーネル

                     FreeBSDカーネル
                                         vmm.ko

                                 ioctl
              ユーザ




                       仮想デバイス

                     /usr/sbin/bhyve


  ✤   各デバイスのエミュレーション、仮想マシンのコンソールなどのUIはユーザ
      ランドで動作する/usr/sbin/bhyveが受け持つ

  ✤   VT-xの機能を用い、CPUをゲストモードへ切り替えるのはカーネルにロー
      ドされたvmm.koが受け持つ

12年10月4日木曜日
メモリ仮想化


  ✤   hw.physmemで制限されたメモリ領域の外側から仮想マシン起動時に
      固定的に割り付け

  ✤   仮想マシン間のページ共有無し

  ✤   オンデマンドメモリ割り付け無し

  ✤   これにより、PCIパススルー時のメモリマップが簡単になった



12年10月4日木曜日
PCIパススルー

  ✤   Intel VT-dにより物理PCIデバイスをパススルー

  ✤   IOAPICエミュレーションを持たない為、レガシ割り込みは非サポー
      ト
      MSI割り込みのみをサポート(MSI-X割り込みも非サポート)

  ✤   ホストOSで割り込みを受け取ってゲストへ送り込むため、ホストに
      stubドライバが必要


12年10月4日木曜日
virtio


  ✤   virtioの仕様に沿ったvirtio-net, virtio-blkをサポート
      http://ozlabs.org/~rusty/virtio-spec/virtio-paper.pdf

  ✤   virtio-netは/dev/tapNを通してイーサネットフレームを送受信

  ✤   virtio-blkはホストファイルシステム上のディスクイメージを読み書き




12年10月4日木曜日
パフォーマンス
                                     make buildworld
                 1500


                 1125


                  750


                  375


                   0
                        Bare Metal       Partitioned   Virtualized


                                     build time(sec)


  ✤   /usr/srcをNFS上に/usr/objをローカルディスクにおいた時の
      make build world時の速度を比較

12年10月4日木曜日
ゲストカーネルの変更点

  ✤   カスタムコンソール&デバッグポート
      → com0 emulationかVGA emulationが必要

  ✤   Local APICはMSR経由でアクセス(MMIO非サポートの為)
      → Local APIC MMIO supportが必要

  ✤   セカンダリプロセッサを直接64bitモードで起動
      → BIOS emulationが必要(?)


12年10月4日木曜日
実装中の機能

  ✤   BIOS emulation (@syuu1228‘s Google Summer of Code 2012 project)

  ✤   Guest suspend/resume (@iorivur)

  ✤   AHCI emulation?

  ✤   MMIO local APIC?

  ✤   IOAPIC emulation?

  ✤   AMD-V support?

  ✤   Older Intel CPU support(without EPT)?

12年10月4日木曜日
やってくれる人がいるといいな



  ✤   libvirt対応

  ✤   NetBSD, OpenBSD, Linuxなどのローダ

  ✤   PCIパススルーのテスト




12年10月4日木曜日
最新情報はこちらまで



  ✤   http://bhyve.org/

  ✤   @syuu1228




12年10月4日木曜日

BHyVe: The BSD Hypervisor

  • 1.
    BHyVe: The BSDHypervisor Takuya ASADA a.k.a @syuu1228 28. Sep. 2012 12年10月4日木曜日
  • 2.
  • 3.
    仮想化とは? プロセス プロセス プロセス OS OS OS ハイパーバイザ ハードウェア ハードウェア 従来 仮想化 ✤ 一台のコンピュータ上に複数の仮想的なコンピュータを動作させ、そ れぞれの上でOS・アプリケーションを実行 ✤ 複数のOSを調停するソフトウェア→ハイパーバイザ 12年10月4日木曜日
  • 4.
    FreeBSDにおける仮想化の種類 ✤ 完全仮想化 VirtualBox, Xen(HVM), BHyVe ✤ 準仮想化 Xen(PVM) ✤ コンテナ型仮想化 Jail 12年10月4日木曜日
  • 5.
    完全仮想化 プロセス プロセス 既存OS 既存OS ハイパーバイザ ハードウェア ✤ 実ハードウェアを完全にエミュレートし、既存のOSをそのまま仮想 マシン上で動作させる ↔ 準仮想化 ✤ 高速化の為、ゲストマシンで実行されるプログラムを直接実CPUで 実行 12年10月4日木曜日
  • 6.
    ゲストマシンのプログラムの直接実行 カーネルモード(ring0) 特権命令の実行を ハンドル、エミュ レーション実行 特権命令が実行されたら カーネルモードへ遷移 ゲストプログラム を直接実行 ユーザモード(ring3) ✤ 仮想化対象のCPUに期待される動作 ✤ ユーザモードでゲストマシン上のプログラムを直接実行 ✤ システム全体に影響を与える命令(センシティブ命令)はユーザモードから実行出来ない(=特権命令) →トラップが発生してカーネルモードへ遷移 ✤ トラップハンドラで実行しようとした特権命令に合わせてエミュレーション処理を行い、ゲストプログラムの実行に戻る 12年10月4日木曜日
  • 7.
    x86アーキテクチャの問題点 カーネルモード(ring0) 特権命令の実行を ハンドル、エミュ レーション実行 ✕ ゲストプログラム を直接実行 ユーザモード(ring3) ✤ 特権命令ではないセンシティブ命令がある →権限が不足していない為トラップされない これの実行を回避する必要がある 12年10月4日木曜日
  • 8.
    バイナリトランスレーション ✤ ゲストのプログラムを実行中に書き換え、センシティブ命令をエミュ レーション処理に置き換える事により実行を回避 ✤ 現在では後述のハードウェア仮想化支援が主流になったが、以前はこ れが主流の方式だった 12年10月4日木曜日
  • 9.
    ハードウェア仮想化支援機能による 仮想化(IntelVT, AMD-V) ✤ CPUにRingとは独立した仮想化用のモードを追 ハイパーバイザ ゲストモード 加: モード ハイパーバイザモード、ゲストモード カーネル カーネル ring 0 モード モード ✤ ゲストモードはセンシティブ命令の実行などエ ミュレーションが必要な処理が発生した時点で ring 3 ユーザ ユーザ 中断され、ハイパーバイザモードへ復帰する モード モード ✤ ハードウェアレベルで仮想化に対応する事によ り、仮想化オーバヘッドを低減しながらハイパ ーバイザの実装を単純化出来るようになった 12年10月4日木曜日
  • 10.
    VirtualBox プロセス プロセス ゲストOS ホストOS ハイパーバイザ ハードウェア ✤ BHyVe以外で唯一FreeBSD上で動作するハードウェア仮想化支援対応のハイパーバイザ ✤ ホストカーネル上のドライバとしてハイパーバイザが動作、ゲストマシンは通常のプロセスとして FreeBSDが管理 ✤ デスクトップ用途が中心 ✤ ライセンス:GPLv2 ✤ オラクルが開発、多くのOS上で動作 12年10月4日木曜日
  • 11.
    Xen(HVM) プロセス プロセス dom0 HVM ハイパーバイザ ハードウェア ✤ ハードウェア上で直接Xenハイパーバイザが動作 ✤ ユーザからの操作やハードウェアへのアクセスには「dom0」と呼ばれる準仮想化された管理OSを用いる (FreeBSDは対応していない) ✤ サーバ用途が中心 ✤ ライセンス:GPLv2 ✤ XenハイパーバイザはXenコミュニティで開発 各OSの準仮想化対応はそれぞれのOSのコミュニティ・開発元で開発 12年10月4日木曜日
  • 12.
    Linux KVM(参考) プロセス プロセス ゲストOS ホストOS ハイパーバイザ ハードウェア ✤ ハイパーバイザはLinuxカーネルに統合 ✤ ゲストマシンは通常のプロセスとしてLinuxが管理 ✤ サーバ用途が中心 ✤ ライセンス:GPLv2 ✤ Linuxカーネルコミュニティで開発 12年10月4日木曜日
  • 13.
    BHyVe プロセス プロセス ゲストOS ホストOS ハイパーバイザ ハードウェア ✤ Linux KVMのFreeBSD版! ✤ ハイパーバイザはFreeBSDカーネルに統合 ✤ ゲストマシンは通常のプロセスとしてFreeBSDが管理 ✤ サーバ用途が中心 ✤ ライセンス:BSDL ✤ FreeBSDコミュニティで開発(baseへのマージを目指している) 12年10月4日木曜日
  • 14.
    準仮想化 - Xen(PVM) プロセス プロセス dom0 PVM ハイパーバイザ ハードウェア ✤ 実ハードウェアを完全にエミュレートするのではなく、仮想化に都合が良い構造にゲストOSを改変 センシティブ命令の実行やハードウェアアクセスなどハイパーバイザによるエミュレーションが必要な処理は、ゲストからハイ パーバイザを呼び出す「ハイパーバイザコール」に置き換え ✤ 高速化の為、ゲストマシンで実行されるプログラムを直接実CPUで実行 センシティブ命令の実行など実行されてはまずい処理は予め書き換えられているので、バイナリトランスレーションやハードウ ェア仮想化支援を必要としない ✤ 現在ではハードウェア仮想化支援(HVM)を使う事が多くなったが、登場時はハードウェア仮想化は未だ存在しておらず、バイ ナリトランスレーションよりもいくつかのベンチマークで性能が高く、オーバヘッドも低かった 12年10月4日木曜日
  • 15.
    準仮想化デバイス ✤ 完全仮想化環境で用いられているHDDやNICなどの仮想デバイスは実デ バイスをエミュレートしているのでゲストOS上の既存のドライバが使え るが、ゲスト・ハイパーバイザ間のモード切り替え回数が無駄に多い、 メモリコピーが発生するなど必ずしも性能が高くない ✤ 準仮想化環境で用いられている仮想デバイスはゲスト・ハイパーバイザ 間のデータのやり取りに最適化されている為、既存デバイスのエミュレ ーションよりも性能が高い ✤ 準仮想化デバイスを完全仮想化環境にも導入しよう→ virtio BHyVeでも使用 12年10月4日木曜日
  • 16.
    コンテナ型仮想化 プロセス プロセス コンテナ OS ハードウェア ✤ 1つのOS上に擬似的に複数のOS環境を作り、OSの各種リソース情報をコンテナごと に別々に管理する事により、プロセスに対し別々のOSであるかのように見せかける ✤ オーバヘッドは最も低いが、OSは1つしか動作していないので再起動やpanicには全 コンテナが巻き込まれる、1つのバージョンのOSにしか対応しない、異なるOSの混 在環境は作れないなどの制約がある 12年10月4日木曜日
  • 17.
    コンテナ型仮想化 ✤ chroot あるプロセスに対して、あるディレクトリをルートディレクトリに見せる (ls /しても指定したディレクトリより上位ディレクトリは見えない) ✤ jail chrootに加えて、プロセス空間も独立 (ps axを実行してもjailの外側のプロセスは見えない) ✤ jail + VIMAGE 更にネットワークスタックも独立 (netstat -nrを実行してもjailの外側のルーティングテーブルは見えない) 12年10月4日木曜日
  • 18.
  • 19.
    BHyVeとは ✤ Linux KVMのようなFreeBSDカーネルに統合されたハイパーバイザ ✤ FreeBSD 10へのマージを目指して開発中 ✤ Intel VT-x、EPT対応CPUで動作(Nehalem以降のIntel CPU) ✤ 対応しているホストOS:FreeBSD 8.1 - 10/amd64(無変更) ✤ 対応しているゲストOS:FreeBSD 7.2 - 10/amd64(要改造) ✤ 対応デバイス:仮想ディスク、仮想NIC、仮想コンソール、PCIパススルー ✤ SMP対応(最大8コア) 12年10月4日木曜日
  • 20.
    BHyVe実演 自分でも試してみたい人は http://callfortesting.org/bhyve/ をチェック! 12年10月4日木曜日
  • 21.
    /boot/loader.conf hw.physmem="0x100000000" vmm_load=”YES” ✤ hw.physmemでホストOSのメモリサイズを制限 (0x100000000 = 4GB) ✤ BHyVeのカーネルモジュールであるvmm.koをロード 12年10月4日木曜日
  • 22.
    /usr/sbin/bhyveload # /usr/sbin/bhyveload -m 256 -h /usr/guest myguest # ls /dev/vmm myguest ✤ VMインスタンス(/dev/vmm/$VMNAME)を作成し、BSDカーネルをVMインスタ ンスのメモリ領域にロードして起動可能な状態を作る ✤ BIOSが無いのでディスクイメージのブートセクタから起動できない。代わりに、 bhyveloadにより64bitモードでFreeBSDカーネルを実行する為の様々な初期化処理を行 なっている ✤ ロードするだけで実行はしない。ブートローダが走っているように見えるのは、ホスト OSへ移植されたゲスト専用のブートローダが動いているだけ 12年10月4日木曜日
  • 23.
    /usr/sbin/bhyve # /usr/sbin/bhyve -c 2 -m 256 -s 1,virtio-net,tap0 -s 2,virtio-blk,/usr/guest/diskdev.img myguest ✤ bhyveloadが初期化したVMインスタンスを実行し、ディスク、NIC、 コンソールなどのデバイスエミュレーション処理を行う ✤ VMインスタンスの状態は、プロセス内ではなく/dev/vmm/ $VMNAMEというデバイス上、つまりカーネル内に保持される。こ のファイルへread(), write(), mmap()する事によりVM内のメモリ空間 にアクセス出来る 12年10月4日木曜日
  • 24.
    カーネルとユーザランドの役割分担 ハイパーバイザモード ゲストモード ゲストOS カーネル FreeBSDカーネル vmm.ko ioctl ユーザ 仮想デバイス /usr/sbin/bhyve ✤ 各デバイスのエミュレーション、仮想マシンのコンソールなどのUIはユーザ ランドで動作する/usr/sbin/bhyveが受け持つ ✤ VT-xの機能を用い、CPUをゲストモードへ切り替えるのはカーネルにロー ドされたvmm.koが受け持つ 12年10月4日木曜日
  • 25.
    メモリ仮想化 ✤ hw.physmemで制限されたメモリ領域の外側から仮想マシン起動時に 固定的に割り付け ✤ 仮想マシン間のページ共有無し ✤ オンデマンドメモリ割り付け無し ✤ これにより、PCIパススルー時のメモリマップが簡単になった 12年10月4日木曜日
  • 26.
    PCIパススルー ✤ Intel VT-dにより物理PCIデバイスをパススルー ✤ IOAPICエミュレーションを持たない為、レガシ割り込みは非サポー ト MSI割り込みのみをサポート(MSI-X割り込みも非サポート) ✤ ホストOSで割り込みを受け取ってゲストへ送り込むため、ホストに stubドライバが必要 12年10月4日木曜日
  • 27.
    virtio ✤ virtioの仕様に沿ったvirtio-net, virtio-blkをサポート http://ozlabs.org/~rusty/virtio-spec/virtio-paper.pdf ✤ virtio-netは/dev/tapNを通してイーサネットフレームを送受信 ✤ virtio-blkはホストファイルシステム上のディスクイメージを読み書き 12年10月4日木曜日
  • 28.
    パフォーマンス make buildworld 1500 1125 750 375 0 Bare Metal Partitioned Virtualized build time(sec) ✤ /usr/srcをNFS上に/usr/objをローカルディスクにおいた時の make build world時の速度を比較 12年10月4日木曜日
  • 29.
    ゲストカーネルの変更点 ✤ カスタムコンソール&デバッグポート → com0 emulationかVGA emulationが必要 ✤ Local APICはMSR経由でアクセス(MMIO非サポートの為) → Local APIC MMIO supportが必要 ✤ セカンダリプロセッサを直接64bitモードで起動 → BIOS emulationが必要(?) 12年10月4日木曜日
  • 30.
    実装中の機能 ✤ BIOS emulation (@syuu1228‘s Google Summer of Code 2012 project) ✤ Guest suspend/resume (@iorivur) ✤ AHCI emulation? ✤ MMIO local APIC? ✤ IOAPIC emulation? ✤ AMD-V support? ✤ Older Intel CPU support(without EPT)? 12年10月4日木曜日
  • 31.
    やってくれる人がいるといいな ✤ libvirt対応 ✤ NetBSD, OpenBSD, Linuxなどのローダ ✤ PCIパススルーのテスト 12年10月4日木曜日
  • 32.
    最新情報はこちらまで ✤ http://bhyve.org/ ✤ @syuu1228 12年10月4日木曜日