mstdn.maud.io is one of the many independent Mastodon servers you can use to participate in the fediverse.
The place to express your ❤️ more freely. / あなたの「すき」をもっと自由に書き表すための場所。

Administered by:

Server stats:

344
active users

VMM(virtual machine monitor) あるいは hypervisor の分類、ふつうは Type-1 と Type-2 だけど、Xen や Hyper-V, ESXi のような Type-1 と QEMU や VMware のようなバイナリトランスレーションやソフトウェアエミュレーションの Type-2、という分類は 15 年以上前から成り立たなくなってる

1975 年の Popek & Goldberg の論文にある仮想化要件が大事で、OS が複数動かされる時に OS が操作したら他の VM の OS の挙動が壊れる命令をセンシティヴ命令と呼んで、いわゆる CPU の特権モード(スーパーバイザーモード)の命令の集合とセンシティヴ命令の集合が完全に包含関係になっていれば、べつに OS が割り込みで命令捕まえるのと同じやり方やればいいので Type-1 で事前に作れる

x86 はそんな綺麗な作り方になってないので Xen の初期は OS の Ring-0 モードとユーザーランドの Ring-3 モードの間にある Ring-1/2 をつかって、Xen を Ring-0、改造した準仮想化 OS を Ring-2 に、みたいなことをして性能は出るけど改変が必要、QEMU や VMware (not ESXi) は無改変で OS 動かせるけど単に CPU エミュレーションなのでバイナリトランスレートとかやってても遅い、というトレードオフが 2005 年ぐらいはあった

Core i7 の最初のが出るちょっと前から Intel VT や AMD V のようなハードウェア仮想化が CPU に追加されて、これはなんてことはなくて Ring 0 の下に Ring -1 を作ってむりやり仮想化要件に合致する命令体系として扱えるようにしたようなモードで(実際は他にもいろいろ仮想化特有の計算のためのハードウェアが追加)、Xen もこれを使うようになって OS の準仮想化のための改造不要になったし、Avi Kivity は 2007 年ぐらいに QEMU のアクセラレーション・ソフトウェア・モジュールとして kvm を作った

この背景で、結局だれが Ring -1 の支配者になるか、というお話なので、Ring -1 で複数の VMM は建てらんないのだが、10 年前からは nested VMM の研究開発が進んで原理的には VirtualBox だろうと Hyper-V だろうと kvm だろうと入れ子で動かせます

@orumin 初期(2000年頃の VMware-2.0とか)のVMwareって、単なるCPU エミュレーションなんでしたっけ?
「一般ユーザー権限でのCPU命令直接実行でゲストVMを動かし、特権命令トラップが発生したらCPUエミュレーションに移行し、適当なタイミング(ゲストVM内での一般ユーザ権限への復帰とか?)でまた命令直接実行に戻る」みたいな作りかと思ってました。当時のCPUでかなり速かった覚えがあるし…

@orumin ググったら VMware-2.0 について「エミュレータは、命令をすべて自分で解釈することで仮想マシンを作り出している。この方法はどのようなアーキテクチャにでも対応できるという利点がある一方、速度が遅くなるという欠点を持っている。これに対してVMwareは命令を直接に実行することで、ほとんどネイティブと同じ速さを可能にしている」と記載されている記事を見つけました→ ascii.jp/elem/000/000/300/3007

ASCII.jp複数のOSを同時に動かせるソフトウェア「VMware」バージョンBeta 2.0が登場完全なPC環境を作り出し、任意のOSを動かせるVMware。バージョンBeta 2では何が新しくなったのか。