- 2014-11-21 10:00〜17:25
- 芝浦工業大学 豊洲キャンパス 401 教室
- http://www.bitvisor.org/summit3/index.html
寝坊して予定より15分遅い電車になり京王線は座れず、有楽町線ではA型ベビーカーにおとなしく座ってない中華系クソガキにガンガン蹴られ、芝浦工大についたら入る建物を間違え遠回り、結局5分ほど遅刻。
「BitVisorの現状と今後」 / 品川高廣(東京大学)
BitVisor はSingle-VMというユニークな特徴を活かして、通常のハイパーバイザとは異なる様々な目的を実現するための汎用プラットフォームとして活用されることを目指しています。本発表では、まず BitVisor の現在のアーキテクチャの概要を説明し、次に BitVisor を活用した研究や開発をいくつか紹介します。また、BitVisor の今後の方向性についてもお話します。
- クライアントからサーバへ
- ベアメタルでも保護
- ASPLOS2015に論文とおった。
- 東大で特殊な応用
- ついに大規模導入事例!
- ECCS:教育用計算機システム
- 1321台のiMac。MacOSXとWin7のデュアル。
- DeepFreezeで再起動時に環境を復元している。
- メンテナンス時はDeepFreezeを解除。閉館時にマシンはshutdownしているので自動起動させたい。
- 問題:
- iMacがwake on lanに非対応。
- ファームにタイマ機能がない。
- windowsの仕様でシャットダウン後のスケジュール起動しない(windowsがスケジュールを消している) → メニューからシャットダウンを消して対応! 再起動させてMacにしてからシャットダウンさせる → 学生はめんどくさいので電源ボタン長押しで止めちゃう orz
- bitvisorで電源offをフックしてスケジュール起動を設定することで解決し。
- まったくなにもしてないはずだが、ちょっと遅くなる。。
- vThrii(ブイスリー): BitVisorの知財をもっている筑波大学が商用利用なら(けっこうな)金をとるっていったので名前変えた。
- Q: サーバ向けとクライアント向けと分けていく? コードベースが大きくなってしまうとメンテコストが。。。
- A: シンプルが売りなのでコア部分は大きくならないようにした。モジュールが(ディレクトリで)増えるだけの予定。
[2014-11-21 10:35]
「The Current Status of BitVisor 1.5(仮)」 / 榮樂英樹(株式会社イーゲル)
BitVisor 1.4は2014年5月にリリースされました。その後、これまでに多くの変更が加えられています。次バージョン1.5(仮)には、TCP/IPスタックの追加、ドライバーの指定方法の大幅な変更、性能改善などが含まれる予定です。これらの変更点について詳しく紹介します。
[2014-11-21 10:35]
- PCIデバドラ
- おおきく変わった。
- デバイスをslotやclassで指定できるようになった。
- そのほか多数
- TCP/IP
- network APIをつくった
- lwIP: オープンソースの組込向けTCP/IP
- NOSYSモードでのみで
- 性能はモードによる。ippassだとゲストの割り込み処理で受信。BitVisorがポーリングしてもGpsにはほどとおい。。。
- 性能改善
- CPUIDが遅い。VMMなし81,BitVisor2887,KVM1700. VT-xのMSR(model-specific register)を必要なところだけ切り替えるようにした。
- VM entry/exitの回数削減
- スレッドスケジューラをロックフリーにしてスピンロックをなくした。(スタベーションすることがあった)
- デバッグ機能
- IEEE1394でログを対向のlinuxにおくる
- UDPでsyslog。相手のMACアドレスは指定する。ARPしてないので。
- vmmstatusでVMexitの理由を表示するようにした。
- そのほか
- ASSERTオフにしても式を評価するようにした。
- BitVisor1.5は近々発表できるはず。例年は12月。..
[2014-11-21 11:06]
- Q: コンフィグの変更はPCIのみ?マニュアルほしいです。
- A: ドキュメントはigelでつくった1.1くらいまでのはあるけど、手間がかかるのでやれてない。。。
[2014-11-21 11:09]
「OSb: OSv on BitVisor」 / 表祐志(筑波大学),品川高廣(東京大学)
OSvは仮想化環境を前提に機能を最小化した軽量OSであり,既存VMM上で多くのLinuxアプリケーションを高速実行できることが確認されている.そこで高速な軽量VMMであるBitVisor上でOSvを動作させることでアプリケーションをより高速に実行できるかを探る.本発表ではBitVisorでOSvをサポートするための最小限の実装について説明する.
[2014-11-21 11:10]
- BitVisor: たとえるならスライドガラス
- OSv: たとえるならカバーガラス
- くっつけてみた→OSb(オーエスビー)
- BitVisorにVertioをいれた。
- 理由: bitvisor summitだから。発展中のOSvをいじらなくてよい。管理はbitvisorで。
- OSvのブートプロセスはふつうのOSとほぼおなじ。物理マシンで動きそうなイメージだが。
- そのままだとACPIまわりでこける→一箇所なおしたらブートした。
- でもデバイスはつかえない。
- ディスクにインストールするのはめんどくさいのでネットワークブートにした。
- ベアメタルのLinuxよりもOSbの方がCPU性能がでる。(単純ループで)
- Para Pass-through Virtio
- QEMUとかのvirtioをもってくるのはイヤだ。
- pro1000の必要なところだけvirtioで、msi-xはスルー。
- PCIコンフィグを偽装。
- PIO空間も偽装。
- 割り込みなどそのほかはパススルー。
- virtio ringをエミュレート。
- Tx: OSvはvirtioのringにデータをつっこむ→PIOたたく→BitVisorがpro1000のバッファにつっこむ
- Rx: pro1000の割り込みはOSvにくる(パススルーなので)。それをフックしてVMexit。リングバッファにつっこむ。
- netperf: OSb 816Mbps, Linux 941
- VMexitが2箇所(送信PIOと受信割り込み)あるのが遅い理由。
- Exitlessにするには? 1コアをホスト専有にしてしまう方法。VMexitでつかまえるのではなくポーリングで監視する。
- 816→921Mbpsになったが、まだちょっとLinuxにとどかかない。
- pingは速い! OSb 0.12ms Linux 0.16ms。
- 最適化(今後):
- pro1000からのデータをコピーしているのをzero copy化したい。VMDqがつかえないか。
- 割り込みを減らす。
- TCP offloading.
- 10GbE/40GbEでやってみたい。
[2014-11-21 11:34]
- Q: スループットはポーリングの頻度による? pingレイテンシが短かいし。
- A: 全力でポーリングしてるので。intr moderationと関係する。
- Q: 1コア専有するとトータルの性能は落ちる?OSvはエンタープライズなので1コアも減らしたくない?
- A: ユースケースによる。IOが多ければ専有しても元がとれるかも。
- Q: キャッシュミスが多くなるかも。
- Q: BitVisorのコアとちがうコアでVMexitするとNUMAだと影響あるか?
- Q: pro1000以外では?
- A: virtioに近いからpro1000をえらんだが、他のでもだいじょうぶそう。さすがにinfinibandはむりそうだけど。
- Q: linuxでもvirtioがうごく? そうするとbitvisorとlinuxでNICを共有できる?
- A: 今はできないけど。
- Q: リングバッファのメモリアクセスはbitvisorはフックできないので辛い?
- A: SRIOVとかVMDqとかつかうしかないか。
[2014-11-21 11:44]
昼休み(80分)
3階の学食にてランチ。12時5分前だったので楽々着席。レシートをみると
- エネルギー 993kcal
- 塩分 4.5g
- 赤 3.0 (たぶん肉)
- 緑 0.9 (たぶん野菜)
- 黄色 7.4 (たぶん炭水化物)
と書いてあった。塩分多いし野菜すくない。
めしくったあとは外に出て日向ぼっこ。日光あびてほんわかしてたら、背後からマクド臭。。。
2階の生協で缶コーヒーを買って部屋に戻る。
「BitVisor 用のストレージスナップショット機能の実装」 / 奥野航平,大月勇人,瀧本栄二,毛利公一(立命館大学)
スナップショット機能は,仮想マシンの状態を保存・復元する機能である.この機能により,仮想マシンを瞬時に元の状態へ復元できるようになる.現状のBitVisor には,このようなスナップショット機能が実装されていない.そこで,ストレージに対するスナップショット機能を BitVisor に実装した.この機能により,再起動によって仮想マシンの状態を復元できるようになる.
[2014-11-21 13:00]
- とりあえずストレージを元にもどす。alkanetでマルウェアの解析をして改変されたのを元にもどしたい。
- AHCIコントローラをエミュレーションする。
- ベースディスクとスナップショットディスク(microsoft VHDを簡素化したもの)の2つを持つ。
- concealドライバでスナップショットドライバを隠す。
- 読み出し
- guestのread reqはよこどりして、bitvisorがベースかスナップショットをreadしてguestに返す。geustが出したreadはそのままデバイスにいって、結果を破棄して、割り込みはguestにわたす。
- 書き込み
- guestのwriteではbitvisorのバッファに書かせる。
- VHD:
- LBA 48bit MSB16bitは無視。index 20bit, offset 12bit。
- BAT: block allocation table.
- 2MiBアラインメント
- 課題
- win7のブートで90秒ほど止まる。ディスクの接続を調べてるっぽい。
- 1世代しか管理できない。
- 割り込み待ちの時間。bitvisorで割り込みをエミュレーションすれば解決。
- 1100行くらいでできた。
[2014-11-21 13:18]
- Q: 90秒問題が解決したらつかえる?
- A: IO待ち時間が長いのが問題。とても遅い。
- Q: AHCIだけ?AHCI前に原始的なアクセスがあるとこまる?
- A: レガシーでなんとかなる
- Q: 2台に分けてるのは1台にできない?
- A: 原理的にはできるが。1台をベースにして型番や容量をguestにまる見せしている。
- conceleは空きポートとしてエミュレーションしている。現実装では。PIレジスタをエミュレーションする方法もある。windowsは90秒問題があるがLinuxではおこらない。謎。
- Q: シャドウバッファへのコピーは減らせないか?ベースディスクのreadは直接できないか?
- A: あまり考えてない。もともとのストレージドライバがバッファをつかうようになってたから。
- Q: シャドウバッファの読み込み完了は?
- A: ポーリング。
- Q: どのくらいかかったか?
- A: 資料探し2ヶ月、実装1ヶ月。趣味で。研究とはかんけいない。
[2014-11-21 13:27]
「BitVisor によるライブマイグレーション機構のNIC対応」 / 深井貴明(筑波大学),表祐志(筑波大学),品川高廣(東京大学)
OSのライブマイグレーションは,IaaSにおける事前メンテンナンスなどに用いられる技術である.ライブマイグレーション機能は主にデバイスを仮想化するVMMで提供される.しかし,デバイスの仮想化は性能劣化を生む.そこで,BitVisorを用い,デバイスを仮想化せずにOSをライブマイグレーションする機構を実現する.このうち本発表では,一部のネットワークインターフェイスカードの状態を転送する実装について述べる.
[2014-11-21 13:28]
- ベアメタルIaaS: 高い性能があるがライブマイグレーションできない。
- 既存
- PCI-Pssthroughしながらライブマイグレーション or OSそのものに実装
- OSに改変が必要なのでベアメタルIaaSに向かない。
- ゲストOSからの実行なので事業者で実行できない。
- コンテナ(dockerなど)
- ゲストkernelを選べないのでIaaSにむかない。
- ライブラリOS
- 複雑な構成はむつかしい。
- PCI-Pssthroughしながらライブマイグレーション or OSそのものに実装
- 物理IOデバイスの状態復元がむつかしい。。。
- write onlyレジスタは書き込みを監視する。
- read onlyレジスタはbitvisorがエミュレーションする。
- (↑ここまでsummit2の話)
- 今回RTL8169に対応した。
- レジスタ・Rxヘッドポインタ・Txテイルポインタ。ポインタはreadもwriteもできない内部状態。
- 受信処理
- own bitたててhead pointerをずらす
- 割り込み生成
- OSはISR(intr status reg)をよむ。bitvisorはここをフックしてディスクリプタテーブルをスキャンして境界を探す。
- OSはデータをよんでownbitをもどす。
- 受信ポインタをずらすために移動元マシンから移動先マシンにダミーパケットを送りつける!
- 送信ポインタは適当に送信するだけ。
- 性能測定
- スループットはbaremetal,vanilla bitvisor,proposl,kvmで違いほとんどなし。
- 遅延: baremetal=vanilla bitvisor
[2014-11-21 13:51]
- Q: テーブルスキャンはタイミングによってはずれてしまわない?
- A: マイグレーションがおわったらNICを止めてしまうので、だいたいだいじょうぶ。全部ownbitがたってると困るので定期的にスキャンしている。
- pro1000もポインタがreadできるらしいがwriteはできなかたかも。
- Q: NICのloopback機能はつかえない?
- A: わからない。
- Q: MACアドレス
- A: スワップする。EEPROMを書き換える。マイグレーション中は二人しかMACアドレス知らない状態になる。ダミーパケットを送るときはbcastを受け取らないようにしてる。
- ポインタはOSもNICももっているので意識があってないとこまる。
- Q: シャドウテーブルにしちゃう?bitvisorがOSとNICの意識をすりあわせるのは?
- A: オーバヘッドはあまりかわらないかもしれない。あまりがんばるとvirtioでよくなっちゃう。
- Q: OSにサスペンド・レジュームさせればどうか?
- A: hotplugとかつかえるかもしれない。
[2014-11-21 14:06]
休憩
「ブランチトレース機能を用いたゲストOS上のプロセス観測手法」 / 大月勇人(立命館大学),瀧本栄二(立命館大学),齋藤彰一(名古屋工業大学),毛利公一(立命館大学)
最近のマルウェアは,他のプロセスのメモリ上に潜んで動作する.プロセスのメモリ空間内にマルウェアと正規のソフトウェアが混在するため,従来のプロセスやスレッドが発行するシステムコールを観測する手法では個々の動作の区別が困難である.そこで,本発表では,CPUに搭載されているブランチトレース機能により取得した分岐命令の情報に基いてシステムコールを呼び出したコードを特定する手法について述べる.
[2014-11-21 14:15]
- タイトルにbitvisorがはいってない唯一
- ほかのプロセスのメモリに潜んで動作するものが出てきた → スレッド単位ではマルウェア判定ができない。
- どのメモリからsyscallが発行されたか調べる必要がある。
- alkanet: スタックの戻りアドレスから得る。
- 改竄されている可能性や、最適化で変わっている可能性がある。
- BTS(branch trace store): intelにのっている。カーネルメモリに記録。フィルタ機能あり。
- BTINT: バッファあふれたら割り込み。
- bitvisorのトレースはいらない。ゲストのトレースがほしい。スレッド毎にトレースをとりたい。
- windowsのページテーブルをむりやり書き換えてバッファを用意。windowsからは書き込み禁止にみせかける。
- branchの記録のうちcall/retがおわっているものは消してスタックトレースを作成する。
- 大域脱出・callが本来とは違う使い方・call以外での関数呼出に課題。
- パフォーマンスは10%くらい低下。
- LBRなど他のブランチトレース機能の活用。
[2014-11-21 14:31]
- Q: マルチコアでもうごく?
- A: いちおう考えている。ロックかけているのが速度低下の原因か?つかっているbitvisorのバージョンが古い。
- Q: ROP
- A: スタックトレースの形になってないものは解析できてない。BTS自体には問題がないが。
- Q: Windowsのバージョンは?
- A: XP。alkanet自体がXPべったりなので。いまwin7対応をすすめている。
[2014-11-21 14:38]
「BitVisor on KVM?」 / 竹腰開(筑波大学), 品川高廣(東京大学)
現在公開されているBitVisorは、KVMの上でnested VMとして動作させる事が出来ない。これをソースコードを修正する事でnested VMに対応させる事を目指して現在作業中である。現時点では、KVM上でのBitVisor自体の起動とmemtest86+といった単純なソフトウェアの起動には成功し、現在Linuxの起動に向けて作業を行っている。本発表では、KVMのnested VM環境におけるBitVisorの問題とその解決方法について、発表時点までに対応が完了したものを紹介する。
[2014-11-21 14:41]
- デバッグの関係でlinux on bitvisor on kvmをやろうとしている。nested VM
- KVMがサポートしているがbitvisorがサポートしてないとかある。LinuxがKVM用の最適化機能を発動して死亡するなど。
- コードが書き換えられてることがあるので、disassする価値はあり。
- no-scrollオプション: ドイツの点字リーダ向けの機能。スクロールのためのmemcpyで落ちてた。VRAMのwriteはできてるがreadができない模様。
[2014-11-21 14:57]
- qemuだと動いてるらしい。
- Q: KVM側の問題っぽいのはあったか?
- A: いまのところバグっぽいのはない。
[2014-11-21 15:05]
休憩
パネルセッション
[2014-11-21 15:20]
- パネリスト: 品川高廣、表祐志、榮樂英樹
- モデレータ: 松原克弥
- コミュニティを活性化するためには?
- 品川:つかう人を増やす。一般人向けではない。敷居が高い。簡単にインストールできるようにする。暗号化でなく応用を。
- 表:軽くVM上で動かせるとよい。
- 榮樂:開発者むけだから。
- MLにパッチがきたことはほぼなし。
- 榮樂: あまり使っているアピールがないのはライセンスがBSDなのもあるか。
- インストールしたことない人挙手→3人くらい
- インストールむつかしい。コンフィグの書き方はドキュメントはなくコード読め、になっている。
- ハングオン的なものをやってはどうか。
- 授業で強制的にBitVisorをつかわせる? OSを下から見れる。
- BitVisorでIOを可視化するとか。なんとなく触るモチベーションとして。
- 取り組むべき課題
- 産業界からはARM対応の声がある。
- 対応デバイスが限られてるとか仕様表に書かれてないところでひっかかるので、入れてみないと分からないところ。
- 自分で組み立てると問題はおこりにくいがノートPCだとハマりやすい。
- VMware上で動く動かないとか。Nested環境で動くようにする。
- 一般ユーザがつかえるアプリをビルドして配布する。
- full disk encriptionとか
- boot optionがない。
- 不満は?
- リリース方法
- 今はtar-ball配布、hg repoを公開すべきか? 著作権・特許がからむところは外したりする必要はある。
- リリース間隔が伸びて活動が見えなくなってきている。
- バグフィックスがリポジトリにあるのに公開されてない。
- 基本公開する方向で。
- 挙手: git/hgは半々
[2014-11-21 16:26]
デモセッション
- vThrii/igelのプロセス切り替えのデモ
- ライブマイグレーションのデモ
[2014-11-21 17:25]