LoginSignup
3
2

More than 5 years have passed since last update.

BitVisor Summit 5 参加報告

Posted at

この記事は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 の宣伝中

「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 日目の記事で解説されてる!?
  • 低レイヤーのデバッグ辛い,何かもっとモダンでイケてる方法はないか?
    • 皆さん同じような悩みを抱えつつ,気合でどうにかしている模様

おわりに

というわけで,BitVisor Summit 5 のざっくりとしたまとめでした.
明日は,hdk2 さんの 「UEFI環境でiPXEからBitVisorを起動する」です.
(ってかもうアップロードされてるじゃん,先越された...)

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2