[BitVisor-devel:85] Re: cpu_interpreter関数について

Hideki EIRAKU hdk @ igel.co.jp
2016年 8月 4日 (木) 14:18:34 JST


イーゲル 榮樂です。こんにちは。

From: Shuei Tomita <stomita @ asl.cs.ritsumei.ac.jp>
Subject: [BitVisor-devel:84] cpu_interpreter関数について
Date: Wed, 3 Aug 2016 21:00:27 +0900

> 立命館大学大学院1年 システムソフトウェア研究室の富田と申します.
> 
> 現在,BitVisorでLocal APICアクセスのフックを,
> Intel VT-xのVirtualize APIC Accessを用いて実装を行っております.
> Virtualize APIC Accessを有効化し,
> VMCSのAPIC-access pageにAPICのMMIO領域を指定して,
> APICアクセスによるVM Exitを発生させるようにしています.
> APICアクセスによるVM Exit後には,
> cpu_interpreter関数を実行し命令エミュレーションを行うようにしています.
> 
> そこでお尋ねしたいのですが,cpu_interpreter関数は,
> Virtualize APIC AccessによるVM Exit時の命令エミュレーションが可能でしょうか.

VT-x の Virtualize APIC Access はわかりませんが、命令エミュレーション
は可能です。BitVisor では、AMD SVM 環境においては常時、Intel VT-x 環境
においては UEFI 環境でマルチコアが開始されるまでの間のみ、Local APIC
のアクセスを MMIO フック機能を用いてフックしています。具体的な処理は
core/localapic.c にあります。MMIO フック機能は、フック対象となるページ
をアクセスする命令をすべて cpu_interpreter() 関数で実行します。

> cpu_interpreter関数で,対応できていない命令について教えていただけるとありがたいです.

対応できていない命令よりも、対応できている命令のほうが少ないと思います。
CPU のマニュアルを見ていただけるとわかるかと思いますが、浮動小数点演算
命令や SSE などを含めると、メモリの読み書きを行える命令は非常にたくさ
んあります。AES-NI など CPU の機能拡張に伴い、対応できていない命令は年々
増えていると思います。

cpu_interpreter() 関数が対応している命令のうち、主に MMIO で使われる命
令は、8086 時代からある整数演算命令、MOV 命令、ストリング命令を中心に、
MOVZX 命令や BT 命令などが一部追加されている程度です。それ以外に対応し
ているのは、unrestricted guest 機能に対応していない VT-x 環境で
real-address mode と protected mode の切り替えの際にセグメントをごまか
すためのもので、ここにもメモリアクセスを行う命令はあります。メモリとセ
グメントレジスターの間の MOV 命令なども MMIO に使えないわけではありま
せんが、通常使われません。浮動小数点演算命令や SSE などの命令にはすべ
て対応していません。

-- 
Hideki EIRAKU <hdk @ igel.co.jp>


BitVisor-devel メーリングリストの案内