この記事はBitVisor Advent Calendar 一日目の記事です.
謝罪会見
一日目から日付またいでしまってすみません...
UTC には間に合ったということでご勘弁を...
(この言い訳を初日に使うことになるとは思わなかった...)
記事の概要
今日の記事は,昨日(?) 11/30日にありました BitVisor Summit 5 の参加報告的な記事です.
個人的に印象に残った話をまとめたものですので,発表の内容を網羅する感じにはなってないと思います.
後日,発表スライドが BitVisor Summit 5 のページ (https://www.bitvisor.org/summit5/) にアップロードされと思いますのdえ,詳細はそちらを見ていただくということで.
また,何か間違ってる,発表したのと意図が違うなどありましたら,ご指摘ください.
では,各発表について書いていきます.
#「BitVisorの現状と今後」 *品川 高廣(東京大学)
概要: BitVisor や BitVisor Summit 5 の近況や今後の展望について.
- BitVisor Summit の参加者は一度減少したものの,最近増加傾向とのこと.
- BitVisor のメジャーバージョンが近々リリースされる予定
- 東京大学に導入された vThrii について
- vThrii は 株式会社 IGEL が作成した BitVisor ベースの商用 Hypervisor
- 大量の分散したマシンに OS のイメージを配布するプロビジョニングシステムの Hypervisor として採用されている.
- 東大 変態mac [検索] するとたくさん記事が出てきます https://www.google.co.jp/search?q=東大+変態mac
- 国内のシステムソフトウェアの研究プロジェクトで,商業化できた例は少なく,プロジェクトとしては大きな成果といえる.
- 品川先生は最近いろんなところで BitVisor の宣伝中
- IPSJ-ONEなど
- http://live.nicovideo.jp/watch/lv253878857 で IPSJ-ONE の動画が見れます.
- 7時間以降あたりが IPSJ-ONE っぽいです.
- IPSJ-ONEなど
#「BitVisor 2016年の主な変更点」 *榮樂 英樹(株式会社イーゲル)
所感: たくさんあって,全部追い切れなかったので,早くスライド見たい
Intel GbE NIC の MSI 対応
- PCIe デバイス: APIC 経由の割り込み & (MSI or MSI-x) 対応が必須 (仕様)
- virtio-net: APIC 経由の割り込み & MSI-x 対応 (仕様)
- これまでの BitVisor の virtio-net の実装
- APIC 経由の割り込みのみ対応,MSIや MSI-x 非対応
- 仕様に沿ってないが,これでも動いていた
- 割り込みは物理デバイスからのものをパススルーにしていた.
- I219-LM という Intel のデバイス
- ノートPCによっては APIC 経由の割り込みが動作しない
- MSI 割り込みしか対応していない
- この NIC の上では, BitVisor の virtio-net が動かない (割り込みが来ないから)
- 対応
- I219-LM は MSI, Virtio-net は MSI-x しか対応しない.
- ゲストが設定した MSI-x の情報をBitVisor が MSI の情報に変換して I219-LM に設定
- 問題: どのベクター番号を使うか
- 0x00--0x0f: 例外ベクター
- 0x1f--0xff: ゲストOSが利用
- 空いている 0x10--0x1f の範囲のベクター番号を利用
性能改善のための新たなスケジューリングポリシー
- 紆余曲折あり,スケジューリング内で,ticketlock を使うようにしたが遅い
- CONFIG_THREAD_CPU1 --> VM 以外のスレッドは一つのCPUだけがバッチ的にやる
- あるコアが VM 以外のスレッド (ネットワーク受信のポーリングスレッド,保護ドメインのスレッドなど)を走らせたら,他のコアは,VM以外のスレッドを走らせない.
- 最初に VM 以外のスレッドを走らせたコアが,他のスレッドを一通り実行した後,VM に戻る.
- 並列にスレッドを実行できないけど,下手なロック競合は起きない
Nested Paging の改良
-
現在の Nested Paging (仮想物理アドレス--ホスト物理アドレスのマッピング) は 4KB 単位でページングしており,2GB ほどしか一度にマップできない.
-
それ以上マップしようとすると, EPT Violation が頻発する※.
-
大抵のページは,4KB 毎に管理するメリットがないので,2MiB ページングに変更.
- 一度にページングできるメモリ量が増える
- MMIO をフックする領域を 2MiB ページングすると,隣接する 2MiB の MMIO をすべてフックしてしまうので,フック対象領域は 4KB でページング.
- その他,キャッシュなども考慮して,2MiB でページングする部分を選ぶ (詳細聞きそびれた)
-
※現在,EPT のページテーブル用のバッファがあふれると,すべてのマッピングがクリアさせる.
これを,改良する予定はあるか,質問したところ,今のところは無さそうな返答だった(パッチ歓迎とのこと)
次期 BitVisor
- BitVisor 次期バージョンは 2.0
- いろんな機能が入る予定
- Unsafe Nested Virtualization の対応など
#「Virtualize APIC accessによるAPICフック手法」*富田崇詠,明田 修平,瀧本 栄二,毛利 公一(立命館大学)
概要: VMExit の数を減らしつつ,Branch Trace Store からの割り込みをフックしたい
-
モチベーション
- Branch Trace Store は,ブランチトレースを行うための機能(ハードウェアの機能)
- ログのバッファがあふれそうになったら,割り込みを飛ばせる
- この割り込みをちゃんとフックしたい
- 性能も落としたくない
-
MMIO のよるフック, Virtualize APIC access の機能, それぞれで APIC のレジスタへのアクセスを全てフックした場合,両者にあまり性能に差が出ないらしい.
-
Virtualize APIC access の機能をうまく使って,VMExit の数を減らしつつ,Branch Trace Store からの割り込みをフックする実装
- Xen を参考にした
- TPR の値をうまく更新する
-
BitVisor 開発者は割り込みをあまり扱わない傾向があり(たぶん),この機能のノウハウが BitVisor 界隈ではあまりない気がするので,ぜひこの機能のノウハウを積極的に共有してほしいと思った.
#「xHCI driver implementation」 *Koomsin, Ake(IGEL Co., Ltd. )
- たぶん BitVisor Summit 初の英語発表
- BitVisor Summit も国際的になったなぁと思った
- 内容は,xHCI の仕様の説明と,それに対応する BitVisor 側の実装の説明
- やっぱり USB 周りは仕様が複雑そう...
- 実装にどれくらいかかったか尋ねると,5カ月くらいとのこと
- 最初のプロトタイプを作る時間よりも,そこから不具合をつぶす作業に時間がかかったらしい.
- まだまだテストが必要とのこと
- 現在は,新しいOS (Win10 & Linux 4.3? 4? (バージョン忘れた))でしかテストしていない
- 逆に,古いOS だと動かないかも
- OS によって, xHCI のハンドリングの仕方が大きく異なる.
#「TinyVisorを動作させる際に体験したエラーの共有,解説」*安岡亮輔(筑波大学)
- TinyVisor https://osdn.net/projects/tinyvisor/
- 研究で TinyVisor を使いたいので動かした
- 現在,動作確認出来ているのが開発者と発表者だけ
- 世界で2人だけ
- もっと情報が増えてほしい,ユーザ増えてほしい (切実な願い)
- TinyVisor はハードウェア依存が強い
- 動くマザーボード,動かないマザーボードがある
- 研究室にあるマザーボード5,6個試しているあたり涙ぐましい
- GPU も映ったり映らなかったり
- 動くマザーボード,動かないマザーボードがある
- 発表者が開発者に質問したりバグ報告したりしたため,最近開発が盛り上がっているらしい
#「BitVisor内蔵のlwIPでAlkanetのログ送信を試みる」
- モチベーション
- BitVisor に入っている lwIP を使って, Alkanet のログ送出をしたい
- 大量のログを取得するためにはスループットが重要
- 元々の BitVisor の lwIP は性能面が不安
- 実際に性能測定,チューニングをやってみた
- lwIP のパラメータを調整するとそこそこスループットが改善する
- TCP において,NICはゲストから隠蔽した方が遅い
- ゲストから隠蔽すると,VMExit したタイミングでしかパケットを受信できない
- ACK 受信の処理が遅れて性能がでない
#「BitVisor と KVM の性能比較の落とし穴 & BitVisor Advent Calendar について」 *深井貴明(筑波大学)
#フリーディスカッション
提案系
- BitVisor の wiki を作った方が情報が集まるのではないか
- プルリクを投げるときの注意点をまとめた情報があると,プリリクしやすくなるのでないか.
- もっといろんな人と連携を取りたい
質問系
- UEFI 版の BitVisor, EFI と ELF が別々になってて iPXE とかでブートできなくて...
- A. ipxe の
module
,imgfetch
,initrd
などのコマンドで ELF ファイルを読み込んでから EFI をブートするといけます (by 榮樂さん) - Advent Calendar 2 日目の記事で解説されてる!?
- A. ipxe の
- 低レイヤーのデバッグ辛い,何かもっとモダンでイケてる方法はないか?
- 皆さん同じような悩みを抱えつつ,気合でどうにかしている模様
おわりに
というわけで,BitVisor Summit 5 のざっくりとしたまとめでした.
明日は,hdk2 さんの 「UEFI環境でiPXEからBitVisorを起動する」です.
(ってかもうアップロードされてるじゃん,先越された...)