【国際学会 ASPLOS 2023】論文採択までの道のり ~仮想マシン間のメモリ領域共有に関する課題と解決策~
2023年03月28日 火曜日
CONTENTS
技術研究所の研究チームが、コンピューターアーキテクチャ・システム分野の国際学会で最難関の一つとされる The International Conference on Architectural Support for Programming Languages and Operating Systems 2023 (ASPLOS’23) にて、仮想マシン技術についての論文を発表しました。
当記事では、論文の採択までの過程を紹介いたします。
論文は、こちらのリンク(学会公式の発行元である ACM Digital Library )よりダウンロードできますので、よろしければ是非ご覧になってください。
また、こちらの GitHub 上のページで追加の解説、特に、提案手法がどのように実装可能かということがわかりやすくなるように、論文中の実装についての説明とソースコードの対応を記述するという試みを行ったので、よろしければ是非併せてご覧ください。
論文の概要
当論文では、Exit-Less, Isolated, and Shared Access (ELISA) という仮想マシンのための分離 (isolation) を担保しつつ低負荷でメモリの共有を可能にする手法を提案しています。
背景
仮想マシン技術はハイパーバイザーと呼ばれるソフトウェアにより仮想マシンを物理マシンの上で実行できるようにするもので、複数の仮想マシンを一つの物理マシンでホストできることから、クラウド環境等で広く利用されています。
仮想マシン技術が広く利用されている大きな理由の一つとして、ある仮想マシンが、ハイパーバイザーや別の仮想マシンのために割り当てられたメモリを含むリソースから分離 (isolate) されており、悪影響を及ぼすことが難しいということがあります。
一方で、Direct Memory Access(DMA)のようにメモリ領域を介して I/O を行うネットワークインターフェースカード(NIC)などのデバイスを複数の仮想マシンで共有しようとする際には、同一のメモリ領域へのアクセスが必要となります。
問題
これまで、仮想マシン間でメモリ領域を共有するには「方法1:直接、共有したいメモリ領域を複数の仮想マシンに公開する」、「方法2:ハイパーバイザーを経由する」、の2通りの方法が存在しましたが、それぞれに別の問題があります。
- 方法1:直接メモリ領域を複数仮想マシンに公開すると、そのメモリ領域は分離 (isolation) が失われ、それら全ての仮想マシンが直接アクセス可能になります。結果として、例えば、NIC を操作するための DMA メモリ領域が複数仮想マシンに直接公開された場合、仮にその中に悪意のある仮想マシンがいれば、他の仮想マシン宛てに送られてきたデータを盗み見るような操作が可能な場合があります。
- 方法2:ハイパーバイザーが仮想マシンに対して特定のインターフェースを用意し、そのインターフェースを介して、ハイパーバイザーが共有したいメモリ領域への操作を代わりに行うようにする方法では、仮想マシンがインターフェースを起動するたびに、実行のコンテキストが仮想マシンからハイパーバイザーへ切り替わってしまう (exit from the VM context) のですが、この切り替わり処理のコストが高く、性能の劣化を招きます。現在、ソフトウェアによる仮想マシンのための NIC を含むデバイス共有の仕組みは、基本的に方法2を採用しており、その結果、性能が制限されている側面があります。
まとめると、
- 方法1のように直接メモリを公開すると低負荷だが分離がない、一方、
- 方法2のようにハイパーバイザーを経由すると分離はできるが負荷が高い、
ということになります。
そして、分離と低負荷を両立できる仮想マシンのためのメモリ共有手法がこれまでなかった、というのが当論文で解決したい問題です。
解決策
この問題の解決策として、この論文では、Exit-Less, Isolated, and Shared Access (ELISA) という、仮想マシンのためのメモリ共有手法を提案しています。
ELISA では、仮想マシンからハイパーバイザーへの切り替えを行うことなく (exit-less) 分離を担保しながら (isolated) メモリ領域を共有 (share) することができます。
アイデアは、仮想マシンが参照可能なメモリ領域を管理している Extended Page Table (EPT) と呼ばれるテーブルを複数利用することでメモリ領域を分離し、VMFUNC と呼ばれる Intel 製 CPU に搭載されている軽量な CPU 命令を利用して、分離されているメモリ領域を行き来するというものです。
ELISA における低負荷のポイントは、VMFUNC 命令の軽量さに起因します。
結果
ELISA は、仮想マシンがハイパーバイザーを経由してメモリを共有する場合と比較して、3.5 倍軽量という計測結果になりました。
また、この ELISA という仕組みを使って仮想マシン通信機能を実装すると、これまでの一般的なハイパーバイザーを経由して NIC へアクセスする通信機能と比較して、163% の性能向上が確認できました。
その他詳細
主な内容は上のようになっていますが(上は概ね1章の翻訳です)、論文の新しいポイントは、VMFUNC 命令の取り扱いです。
具体的には、今回の VMFUNC 命令の利用シナリオでは、仮想マシン全体、つまり仮想マシンで実行されるカーネルを含めて、を信頼できないものとして考える必要があり、VMFUNC と信頼できない仮想マシン上のカーネルの組み合わせは、ページテーブルの管理と、潜在的に実行可能な攻撃への対処が課題として存在しました。
今回の論文では、それらの課題の解決策として、APT と gate EPT context と呼ばれる仕組みを新しく提案しています。
一方で、それらは仕組みが若干複雑なので、「ELISA は、これまでの2通りのメモリ共有方法では分離と低負荷を両立できなかったが、それを可能にした」くらいの認識を持っていただけましたら十分です。
投稿履歴
本研究は 2020 年に開始し、VEE’21、NSDI’22、ASPLOS’22 という3つの学会への論文投稿・不採択の末、ASPLOS’23 は4回目の投稿でした。
時系列で並べると以下のようになります。
- 2020 年 10 月 研究開始
- 2021 年 1 月 VEE’21 へ論文投稿
- 2021 年 2 月 VEE’21 からの不採択通知
- 2021 年 3 月 NSDI’22 へ論文投稿
- 2021 年 6 月 NSDI’22 からの不採択通知
- 2021 年 8 月 ASPLOS’22 へ論文投稿
- 2021 年 11 月 ASPLOS’22 からの不採択通知
- 2022 年 10 月 ASPLOS’23 への論文投稿
- 2023 年 1 月 ASPLOS’23 からの条件付き採択通知
- 2023 年 2 月 ASPLOS’23 への論文の修正提出
- 2023 年 2 月 ASPLOS’23 から修正が受理され正式に論文が採択される
それぞれの学会での主な不採択理由と、それに対する投稿ごとの変更は以下のような感じでした。
VEE’21
- 不採択理由:脅威モデル ( Threat Model ) について議論されていない
- 不採択を受けての変更:脅威モデルの議論を論文に追加
NSDI’22
- 不採択理由:既存手法で同機能が実現可能なので新規性がない
- 不採択を受けての変更:既存手法で同機能が実現できない旨を重点的に説明できるよう構成を変更
ASPLOS’22
- 不採択理由:実験の比較対象が適切でない
- 不採択を受けての変更:査読者の指摘する対象との比較を行えるようにシステムを再実装
この3回の不採択を受けて、システムの設計・実装を見直し、論文も大幅に書き直した後、ASPLOS’23 へ投稿しました。
ASPLOS 2023 での採択まで
ASPLOS’23 へは、論文を 2022 年の 10 月に投稿しました。
査読結果
査読の結果は、2023 年 1 月 4 日に送られてきました。
今回は査読者が5人いて、それぞれ以下のようなスコアでした。(数字が高い方が良い)
- 査読者 A : 4. weak accept ( 支持しないが、採択に異論はない )
- 査読者 B : 5. accept ( 採択を支持する )
- 査読者 C : 4. weak accept ( 支持しないが、採択に異論はない )
- 査読者 D : 2. weak reject ( 不採択にすべきだが、採択の意見に対して強く反対はしない )
- 査読者 E : 3. major revision ( 大きな修正をすれば採択を検討する )
反論フェーズ
実は、この段階では、採択・不採択の決定はまだなされておらず、論文の著者には査読内容に反論 (rebuttal response) する機会が与えられます。
今回は、1 月 4 日の査読の内容を受けて、1 月 6 日までに反論を用意して、登録するというスケジュールでした。
作戦として、査読者 D の weak reject の判断を覆すことを目指すとともに、他の査読者を味方につけるようなことを意識して、反論を用意しました。
ただ、準備期間が 3 日程度にもかかわらず、付け入られる隙を作らないようにしながら良い印象を与える反論を作成するのは結構大変で、正月休みも明けきらないうちからなかなか神経をすり減らす作業でした。
反論は何文字書いてもいいけど、800 単語までしか査読者は読む義務はない、というルールだったのですが、聞いたところによると査読者はだいたい全部眺めるそうなので、結局 2700 単語くらいまで書きました。
最終判断とさらに修正
この反論提出後に、論文を担当した査読者が全員で会議を行い、最終的に採択するかを決めます。
今回は、1 月 20 に条件付き採択の結果を受け取りました。
条件付き採択は正式な採択ではないため、追加の修正作業が必要で、査読者が提示した修正(追加で必要な記述や実験等)を期限までに行う必要があります。
今回の修正の締め切りは、2 月 2 日となかなか作業期間が短く、かつ、修正が査読者の気にいるものでなければ不採択になる可能性もあるので、これも神経を使いました。
修正提出後、2 月 7 日に、再度、細かい修正の提案を査読者から受け、それを直してやっと 2 月 8 日に結果が正式な採択に切り替わりました。
近年の傾向
このように、査読の結果が見えるようになってから、1ヶ月ほど採択されるかされないかの境界を彷徨うのはあまり精神衛生上良くないですが、近年の学会は傾向として、査読者の誤りを著者が反論によって正す機会を与え、かつ条件付きの採択により全体の論文採択数を増やせるようにするということを目指しているそうで、最終的な結果が出るまでの期間が若干伸びているようです。
まとめ
当記事では、技術研究所の研究チームが発表した論文の採択までの過程を紹介しました。
このように、幾度もの不採択と修正の末やっと発表された論文、よろしければ、是非ご一読ください。