30分で論文流し読みシリーズ 8「Multi-hypervisor Virtual Machines: Enabling an Ecosystem of Hypervisor-level Services」
https://www.usenix.org/system/files/conference/atc17/atc17-gopalan.pdf
実際の所要時間
- 二時間
課題
- IaaSでは(仮想)ハードウェアを含め多種多様なサービスを組み合わせて使えるようになっているが、VMMレベルのサービスはそうではなく、通常はベンダ提供の単一のものを使う。
- 多種多様なVMMレベルのサービスを同時に複数使いたいとすると、次のような方法を使う必要がある。
- 必要なだけ機能を詰め込んだVMMを作る: VMMが大きすぎることがセキュリティリスクになる
- メインVMMからモジュール形式でサービスを提供する方法: 実現できる機能に限りがある。ページマッピングやVCPUのスケジューリングなどの低レベルの機能を提供するのが難しい。
- VMMを好きなだけネストする: ネストが深ければ深いほど性能劣化が激しい。それに加えて、あるVMMから見てguestまでのレイヤが厚ければ厚いほどguestから得られる情報が減る。たとえばメモリのコンテンツなど。
解決方法概要
- Span-virtualizationという新アーキテクチャを採用したVMMを使う
- 無改変のguestに対して、より細かいVMMサービスを提供できる
- 個々のguestに対して別のサービスを提供できる
- Span-virtualizationという新アーキテクチャを採用したVMMを使う
- 解決方法詳細
- メインVMM(L0)を用意して、その上にguestおよび各種サービス用のVMM(L1)を任意の数だけ配置する
- guestはL0上に直接乗っているので、L0から見えるguestのメモリはすべてL0を介してL1に見せられる
- L1が制御できるリソースはメモリ、VCPU、I/Oデバイスの3つ - メモリ: 各L1にguestの物理メモリ上の任意の領域を割り当てられる。guestの物理メモリに対して所定のイベントが発生すると、イベントが発生したメモリ領域に対応するL1にその旨通知する
- あるリソースを制御するL1はL0から自由に切り替えられる
- 効果
- 感想
- ハードウェアの機能を活かした曲芸のオンパレードで非常に面白かった。が、流し読み(実装詳細は見てない)にもかかわらず読むのにめちゃくちゃ時間がかかってしまった
- 多種多様なサービスの組み合わせをspanとnestedで性能比較した結果が見たイ。とくに3個以上のサービスを提供する場合。
- table2のspanについてのL2って明に書いてないけどguestのことと考えてよい?
- 上記のメインVMMからモジュール形式でサービスを提供する方法についての論文が読みたくなった