"Devirtualizable Virtual Machines Enabling General, Single-Node, Online Maintenance", David E. Lowell, Yasushi Saito, and Eileen J. Samberg, ASPLOS '04

システムをアップグレードする際に、仮想マシン上に二つのOSインスタンスを設けて、片方のインスタンスでアップグレードを行い、それが完了したら元のOSからデータを移行することで、アップグレード中の代替用リソースを用意しなくとも動的にアップグレードを可能にしましょうという研究。さらに、代替用のリソースが必要ないので単一のノードからなるシステムでも、動的なアップグレードが出来る。
本論文中に、わかりやすい図があるので、それを参照。




ただ、この手法だとOSがVMMの上にのっているので、オーバーヘッドが避けられない(本論文には、速度で10%-20%程度の低下と書いてある。システムを止めることなくアップグレードするニーズが高いような所で、このオーバーヘッドは大きい)。このオーバーヘッドをなくすために、本論文で提案されているMicrovisorという仮想マシンは動的アップグレードをすることに特化されている。
具体的には、アップグレード中以外は仮想マシンを無効にする(devirtualize)という手法を用いることで,アップグレード時以外でのオーバーヘッドを減らしている(ゼロになるわけではなく、5.6%ほどはオーバーヘッドがあると書いてある)。
他にも、

  • I/Oは仮想化しない(→ネットワークにつないでいる場合は、余分なNICを用意しないといけない)
  • 3つ以上のOSインスタンスを扱うことができない(仮想マシンは、アップグレード時にしか使わないから)
  • メモリも仮想化しない

といったアップグレードに特化して制約を設けることで、仮想マシンを簡素化している。
実装の詳細に興味をもったら論文を参照してみてください。

以下、所感。
この論文を読んで初めて知ったんだけど、Alphaアーキテクチャでは、OSが一番高い特権レベルで動かすのではなくて,PALcode(Privileged Architecture Library)というやつがOSのさらに高い特権レベルで動いてるらしい。
あと、著者らはx86上でも同じようなシステムは作れるでしょうと書いてあった.けど面倒そうだなぁ..