BPStudy#38 に参加しました エンジニアなら知っておきたい仮想化¶
BPStudy#38 に参加してきました。 いつも通り走り書きメモです。
今回のネタは"エンジニアなら知っておきたい「仮想マシン」のしくみ"。
第一部「エンジニアなら知っておきたい「仮想マシン」のしくみ」¶
- 発表
長谷川 猛: @hasegaw, http://d.ballade.jp/
「別のところで使う予定の資料だったこともあり、Web系の人にはもしかしたら厳しい内容かもしれません」
発表からひろったポイント & 清水川メモ¶
x86ハードウェアで走らせる仮想マシン
KVMは割と古いOSをざっくりと切ってるので注意。Vistaとか2000とか。
1985年の80386でもメモリ仮想化の機能は搭載されていました(「はじめて読む486」に詳しく書かれていた記憶があるなー)
クラウドっていうキーワードを無理矢理こじつけてみました
でもクラウドってもっと大きい概念ですよね
最近はLinuxをインストールしたら最初っから専用のドライバが使えるようになってきてる
HyperVも同じ方向に行くんじゃないかと思っている
仮想環境で時刻管理は非常に難しい, これは割り込み回数の問題
必要無ければCPUを起こさない: Dynamic Tick, PVタイマーの仕組みをゲストOSでサポート
リング0-4(特権モード)の仕組みは80386 (1985年)から搭載されていました
リングのおかげで仮想マシン実行用モードを追加してオンデマンドでプログラム書き換えできる
Intel-VTやAMD-Vならばプログラム命令書き換えしなくても仮想化支援機能でできるので良い
Intel-VT, AMD-V はリングプロテクションのリング0よりも上位の権限で動作できる
初期のVTは遅かったため、最初のころはVMWareなどでもVT機能は利用していなかった
みなさん、OSのメモリー管理ってどうなっているかご存じですか(これは組み込み系やってる人はなじみ深いかも?)
プログラム毎におなじアドレス空間が(見た目上)使われている。
CR3レジスタを読めば、アプリケーション毎にどのアドレスを使っているか(?)を読み取ることが出来る。要特権モード
Shadow Page Table の処理が全体の75%をしめている(VMのメモリアドレッシング仮想化が全体として非常に遅いのは今の変わってないのか。)
Core i7のアドレッシング仮想化サポート技術(そこのところ、もう少し詳しく知りたい)
VMWareは歴史が長いので、CPUID別に細かく仮想化の制御方法を切り替えていて、それぞれカリカリにチューンしてある。
デバイスの仮想化について。I/Oポートの仮想化。
QEMUには同種のデバイスエミュレータが複数実装されている
- 一番気になる仮想NIC
rtl8139(Realtek 8139)
e1000(Intel PRO/1000)
仮想NICも本物の物理NICとおなじ挙動をするように作られているので、実際に試してみたら蟹さんとIntelとで性能差も6倍くらいでちゃった。
仮想NICにrtl8139を使うと、CPU資源を使ってしまい、性能が熱に消えていく……
- virtioというのはIOの共通化の仕組み。
1, virtio net
2, virtio block
3, virtio console
5, virtio balloon
virtioはホスト-ゲスト間のデータ交換のためにデバイス当たり必ず1つ以上のリングバッファを使用
virtioのリングバッファindirectモードは最近使われている方式。構造体を1ポインタに複数ぶら下げられるので効率的に処理出来る
virtioのリングバッファにぶら下げるのはデータそのもではなく命令。DMA転送命令などをぶら下げておくことでゼロコピーでオーバーヘッドを押さえられる。
FreeBSD用 virtio を開発中。Virtioを理解するために開発中。
スライドの公開は… 出来るだけ公開しようと思います。(やった!)
第二部「LT大会」¶
LTのメモは省略しまーす
@kazunori_279¶
#appengine +HTML5リアルタイムお絵かき
@toshiak_netmark¶
#hbstudy 的ななにか
@koemu¶
VMwareで手っ取り早く社内システムをHAサーバ化してみました