FreeBSD勉強会 第11回 FreeBSDハイパーバイザ「BHyVe」の仕組み・使い方紹介
話は全体的に仮想化技術についてでした。最後の方でBHyVeについて話していました。
関連資料
第11回 FreeBSD勉強会 : ATND http://atnd.org/events/30986
第11回 FreeBSD勉強会 FreeBSDハイパーバイザ「BHyVe」の仕組み・使い方紹介 - Togetter
第11回 FreeBSD勉強会 #FreeBSDStudy - Togetter
BHyVe: The BSD Hypervisor(発表パワーポイント) http://www.slideshare.net/syuu1228/bhyve-the-bsd-hypervisor
完全仮想化 VirtualBOX
実ハードウエアを完全にエミュレートし、既存のOSをそのまま仮想マシン上で動作させる。OSに一切手を加えない。高速化のためにCPUの部分はエミュレートしない。CPUにはユーザモードとカーネルモードがある。アプリケーションが破壊しそうな行動がきたらハンドルしてエラーを返す。権限の分離を行なっている。ユーザモードで仮想化のマシンを動かす。システム全体に影響を与えるのはユーザモードではできない。なので、できないのをトラップで検知して特権処理に合わせてエミュレートを行う。特権命令ではないセンシティブ命令がある。
昔の手法
バイナリトランスレーション
ゲストのプログラムを実行中に書き換え。実行されるとまずい命令を置き換える。システム影響を与えないで実行できるようにする。VMwareが主にやっている。ハードウエア仮想化支援ができる前にはこれが行われていた。
仮想化のソフトウエアの種類
Virtual Box
FreeBSDでBHyVe以外で動く唯一のハードウエア仮想化対応のハイパーバイザー。あまりサーバ用途ではなく、デスク通っップ用途。特徴として多くのホストOSで動く。
Xen(HVM)ゼン
準仮想化
Xen(PVM)
P実ハードウエアを完全にエミュレートするのではなく、仮想化に都合が良い構造にゲストOSを改変。センティブ命令はソースコードレベルであらかじめ書き換えられている。バイナリトランスレーションなどのように実行中に書き換えてない。そのため、バイナリトランスレーションよりもいくつかのベンチマークでは性能が高く評価される。オーバヘッドが低い。OSを書き換えてしまえという発想から生まれた。
完全仮想化に用いられている実ハードウエアと仮想化ディバイスをエミュレートするのは必ずしも良いわけでは無い。なぜならば、ゲストとハイパーバイザ間のモード切り替えの回数が無駄に多いためメモリコピーが発生して必ずしも性能が高くない。
準仮想化ではゲストとハイパーバイザのやりとりに最適化されているため既存のディバイスよりもオーバヘッドが少ない。NICとHDDのがKVMでは導入されている。BHyVeでも実装されている。ソースまるごとではなく公開されている資料を作られている。
Jail
コンテナ型仮想化
- 一つのOS上に擬似的に複数のOS環境を作り、OSの各種リソース情報をコンテナごとに別々に管理することにより、プロセスごとにして別のOSで有るかのように見せる。
- 複数のバージョンのOSを仮想化には向いてない
- ホストがカーネルパニックになるとダメ
あるプロセスに対して、あるディレクトリをルートディレクトリに見せる。上位ディレクトリが見えないような挙動を行う。
- Jail
chrootに加えて、プロセス空間も独立
- Jail+VIMAGE
ネットワーックスタックも独立
netstat -nrを実行してもJailの外側のルーティングテーブルは見えない。
準仮想化原理的にはオーバヘッドが少ないが、できることが少ない。
BHyVeの詳細
- Linux KVMのようなもの
- FreeBSD10へのマージを目指して開発中。
- Intel-VT-x EPT対応のCPUで動作Nehalem以降のCPU
- http://ark.intel.com/にCPUのリストがあり。対応しているからしてないかがわかる。dmesgはEPTではわからない。
- NetAPの二人が頑張って開発している。
- 今はKVMのような機能が揃っているわけではない。
- FrreeBSD8.1-10 amd64は無改造で動く
- FreeBSD7.22-10/amd64は要改造
- amd64のみ32bitは対象外
- 最初はFreeBSD8ベースで開発していた。8と9と10ではうごくのではないか。
- 現在はFreeBSDのみ動く。
- Linuxも動くらしいがコードは出してない。(ぼそっとRedhatが動いたみたいな事を行っていた時があった。)
- 仮想コンソールはビデオというより文字が表示できるのみ。でもなぜか、CPIパススルーはできている。
- SMP対応(最大8コア)
- HDDとNICとはバートIO
設定方法
CFT: Hands-on BHyVe http://callfortesting.org/bhyve/
- VMware上でBHyVeを動かせる
- デモではVMwareFusionで動かしていた。
- ホスト側での設定
- Pysicalmen で使うメモリ量を指定する。これをしてしないとメモリが無いと言われる。
- vmm.koをロードする必要がある
- #/root/bhyve-guest
- Bhyveload-m 128 -h . mygest
- BIOSが無いのメモリをかくほしてやる
- Destoryしないとメモリを確保されたままになる。
- Hw.physmem
- BIOSが無いのでディスクイメージのブートセクタから起動できないで変わりんbhyveloadによりメモリの構造体を作る。
- コンソールが遅いだけ。ネットからSSHでつなげれれば速い
- PCIはビデオ周りはだめ。NIC周りはいける。IOAPICエミュレートを持たないためレガシ割り込みは非サポート。MSIのみMSIーXはダメ、MSI割り込みをするとわかっているもの飲み使える。
- Virtioの仕様にそったネットとbloc(HDD)をサポート
仕様の書いてあるPDFは以下の通り
http://ozlabs.org/~rusty/virtio-spec/virtio-paper.pdf
ゲストカーネルの変更点
- 変更している点は実装してない部分
- カスタムコンソールとデバッグポート
- com0 emulation or VGA emulationが必要
- コンソール出力がOSに無いものを利用しているため
- 設定しないと何も出ない。
- SMPの場合2個めからどうするか?
- 2つめ以降のquick hackが必要。
実装中の機能
- BIOS 7割、8割はできている。が10割できないと使えない。起動してFreeBSDのロゴは見えるようにはなっている。
- Guest suspend /resume これがライブグレーションができるようになる。動いているマシンを移動できるようになる。
- AHCI emulation
MMIO local APIC できたと言っているがソースは見てない
- IOAPIC emulation できた。レガシー割り込みができるようになったらしい。現在はMSI割り込みのみ
やろうと思っているが手はつけてない。
- Older Intel CUP supprt(witout EPT)Core2tDuoとかうわっどで動かすようにしたいが、優先度は高くない。
- Q複数立ち上げる場合には
- A/dev/vmm/$vmname ごとにつくってそれを立ち上げる。他のプロセスと同じ。
次回
次回は佐藤先生がやる予定
FDTが導入されたよ!的な組み込み系の話になるみたい。
日時は11月2日