- 第11回 FreeBSD勉強会 FreeBSDハイパーバイザ「BHyVe」の仕組み・使い方紹介
- 浅田拓也(@syuu1228)さん
- http://atnd.org/events/30986
- 日時: 2012-09-28 18:35〜
- 場所: 麹町 KDDIウェブコミュニケーションズ会議室 6F
- http://www.slideshare.net/syuu1228/bhyve-the-bsd-hypervisor
- togetter: http://togetter.com/li/381175 http://togetter.com/li/381323
[2012-09-28 18:11]
→橋本→笹塚→市ヶ谷→麹町 で予定どおりに会場着。
人のあつまりが悪いらしく5分遅れで開始。
概論
- 完全仮想化: 既存OSを改造してない。VirtualBoxとか ⇔ 準仮想化
- x86はトラップされない命令がある → 回避方法:
- バイナリトランスレーション: 実行中にエミュレーションするコードに書き換え。HWの仮想化支援があるまえはこれが主流だった。VMware.
- IntelVT,AMD-V: Ringとは別にハイパーバイザーモードとゲストモードが追加された。
- x86はトラップされない命令がある → 回避方法:
- VirtualBox (Oracle)
- カーネルのなかでドライバとしてハイパーバイザーがうごいている。
- デスクトップ向け、GPLv2
- おおくのホストOSで動くのが特徴。
- Xen(HVM)
- ハイパーバイザーはHWのすぐ上に載っている。
- デバイスの初期化はdom0(管理用のOS)がやる。UIもdom0に委託。dom0はlinuxかsolarisでしか動かない。
- GPLv2
- 参考: Linux KVM
- しくみとしてはVirtualBoxに似ている。ハイパーバイザーはホストOSに統合されている。
- サーバ用途が中心.GPLv2.
- BHyVe
- LinuxKVMのFreeBSD版. カーネルに統合されていてふつうのプロセスとして管理される。
- たぶんサーバ用。Windowsが動かない。
- 準仮想化 Xen(PVM)
- ゲストOSを改造するのでWindowsは動かない。
- 準仮想化の方がバイナリトランスレーションより性能が出た。
- 準仮想化デバイス
- 完全仮想化でデバイスをエミュレーションするのはパフォーマンス的に最適ではない。モード切り替えの回数が無駄に多い。
- ゲスト-ハイパーバイザー間のデータやりとりに最適化されたデバイス。virtioとかはNIC,HDD,consoleをエミュレーション。BHyVeでも使える。
- コンテナ型仮想化: jail(+VIMAGE)
- パーティショニングとも。
- 複数のOSを動かすのではなく、擬似的にOSの環境をつくってリソース管理を別々にやる。
- 原理的には性能が出やすい。
- 欠点: OSがパニックするとまきこまれるとか、複数バージョンを同時に使えないとか、
BHyVe詳細
- KVM似。FreeBSD10へのマージをめざしている。まだカレントにも統合されてない。NetAppの2人くらいがほそぼそと開発している模様。
- やっと動くようになったところ。Intel VT-x + EPT対応ので動く。
- FreeBSDのdmesgをみてもEPTに対応してるかはわからない... arch.intel.comでみるとわかる。
- FreeBSD8版でcontributeされた。いがいとポータブル。
- まだゲストはFreeBSDしか動かなくて、しかも要改造...
- NetApp的にはほかのOSが動いているらしいが、外には出してないみたい...
- amd64でしか動かない。ゲストもホストも。
- デバイスはまだ最低限のものしかない。準仮想化のdisk,nic,console(テキストのみ、やっつけ仕事のやつ)。それとなぜかPCIパススルーも。
BHyVe実演
- http://youtu.be/CXoD5NQEKrM
- VMwareの中で
- BIOSがないのでホストOS上でローダを実行してカーネルイメージをロードする。レジスタも設定する。(この時点ではまだ実行されてない)。
- デバイスがほとんどないすかすかなdmesg。(NetAppという文字も...)
- VMごとにデバイス(/dev/vmm/$VMNAME)ができる。
- ローダーのコードはもともとのコードをパチってきている。
- メモリ仮想化
- 指定した分をどかんと割り付ける。
- ページ共有(dedup?)はない。
- ちいさいVMをつくったりけしたりするとフラグメントするかも?
- PCIパススルー
- ビデオデバイスはできない。BIOSとか古い仕組とからんでるので難しい。
- IOAPICエミュレーションはないのでレガシー割り込みは非サポート、MSI割り込みだけ。(MSI-Xは非サポート)。
- ホストにゲストに割り込みをおくり込むためにstubドライバが必要。
- make buildworldの結果はちょと遅くなるだけ。
- ゲストカーネルの変更点:
- カスタムコンソール、デバッグサポート → シリアルかVGAのサポートが望まれる
- local APICはMSR経由でアクセス (メモリマップドIO非サポート) → local APIC MMIOサポートが望まれる (いまやってるかできたところぐらい)
- 2個目以降のCPUはBIOSがないので、初期化コードがクイックハックでつっこまれている → 要BIOSサポート
- あるといいな
- libvirt対応: 仮想マシンの設定がGUIでできるようになるとか。 (実はゲストをシャットダウンする方法もない..)
- ローダー(*BSDとかLinuxとかの)。
[2012-09-28 20:04]
- Q: FreeBSD10にコミットされる予定だがどのくらいのレベルになるのか?
- A: わからないが、ゲストに手を入れなくてもFreeBSDが動く程度になるのではないか。
- baseにぜんぶ入れようとしているので。linuxのローダーを入れることになるとGPL汚染のおそれが。ローダーだけはportsにする?
- Q: ゲストOSを多重起動するときどうする? 制限はあるか?
- A: ディスクイメージも分ければできる。制限は特にない。
- Q: KVMだとホストのユーザ空間で走るプロセスがあるが?
- A: BHyVeでもある。/usr/sbin/bhyve。ioctl(/dev/vmm/〜, VM_RUN)で vmm.ko で処理できないものをやる。
- QEMUはつかっていない。BIOSもらくなんだがGPL汚染とか、コードをいじっていると不幸になるとか...
[2012-09-28 20:12]
FreeBSDとCloudCore VPS / KDDI 小原さん
- 第9回にも参加したひと挙手 → 1/3くらいか?
[2012-09-28 20:17]