s390 (IBM Z) の Ultravisor と保護仮想マシン(VM)
概要
保護仮想マシン(PVM)は、KVM がゲストメモリやゲストレジスタといった VM の状態に アクセスすることを許さない KVM VM である。代わりに PVM は、Ultravisor(UV)と 呼ばれる新しい実体によって主に管理される。UV は API を提供し、PVM と KVM が これを管理操作の要求に使える。
各ゲストは非保護モードで起動し、その後、保護モードへ移行する要求を出せる。移行の 際、KVM はゲストとその VCPU を Ultravisor に登録し、実行の準備を整える。
Ultravisor はゲストのブートメモリ(つまり kernel/initrd)を保護し、復号する。 ゲストの実行中は、VCPU の開始/停止や注入される割り込みといった状態変化を守る。
VM を実行するには通常、SIE 状態記述子のようなゲストの状態へのアクセスが必要な ので、SIE 命令の動作にいくつか変更が加えられた。新しいフォーマット 4 の状態記述子 が導入され、PVM では一部のフィールドの意味が異なる。速度を高め、露出するゲストの 状態を減らすため、SIE エグジットは可能な限り最小化される。
割り込みの注入
割り込みの注入は Ultravisor が守る。KVM は VCPU の lowcore にアクセスできない ため、注入はフォーマット 4 の状態記述子を介して行われる。
マシンチェック、外部、IO、再開始の各割り込みは、割り込み注入制御フィールド (オフセット 0x54)のビットを介して SIE エントリ時に注入できる。注入の時点で ゲスト cpu がその割り込みに対して有効でなければ、妥当性インターセプトが認識 される。フォーマット 4 の状態記述子には、割り込みに関連するデータを運べる フィールドがインターセプションデータブロック内にある。
プログラム例外とサービコール例外には、もう一層の保護がある。これらは KVM に インターセプトされた命令に対してのみ注入できる。例外は、KVM による 命令エミュレーションの妥当な結果でなければならない。例えば、SIE が報告する アドレッシング例外は注入できない。KVM はゲストメモリにアクセスできないためである。
マスク通知インターセプト
PVM が特定のクラスの割り込みを有効にしたときに通知を受けるため、KVM はもう lctl(g) と lpsw(e) をインターセプトできない。代わりに 2 つの新しい インターセプションコードが導入された。1 つは CR 0、6、14 の内容が変わった ことを示し、異なる割り込みサブクラスを表す。もう 1 つは PSW ビット 13 が 変わったことを示し、マシンチェック介入が要求され、これらが有効になったことを 表す。
命令のエミュレーション
PVM 向けのフォーマット 4 状態記述子では、SIE 命令はフォーマット 2 のときより 多くの命令を解釈する。すべての命令を解釈できるわけではなく、一部の処理は KVM に 渡す必要がある。そのため SIE と Ultravisor は、エミュレーションの入力と出力を 保護する。
SIE に関連する制御構造として、Secure Instruction Data Area(SIDA)、Interception Parameters(IP)、Secure Interception General Register Save Area がある。ゲスト の GR と、I/O データ構造のような命令データの大部分はフィルタリングされる。命令 データは必要に応じて SIDA との間でコピーされる。ゲストの GR は Secure Interception General Register Save Area に出し入れする。
このセーブエリアには、命令のエミュレーションに必要な GR の値だけがコピーされ、 実際のレジスタ番号は隠される。
Interception Parameters の状態記述子フィールドは依然として命令テキストのバイト列を 含むが、実際のレジスタ値ではなく、あらかじめ設定されたレジスタ値を使う。つまり、 ゲストの命令テキストを漏らさないよう、各命令は常に同じ命令テキストを使う。これ は、ハイパーバイザから見ると、ゲストが r<n> に持っていたレジスタ内容が r<m> に あるかもしれないことも意味する。
Secure Instruction Data Area は命令ストレージデータを含む。命令データ、つまり sclp の SCCB のように命令から参照されるデータは、SIDA を介して移動する。命令が インターセプトされると、SIE はこの命令に対するデータ割り込みとプログラム割り込み だけを、先に述べた 2 つのデータエリアを介してゲストに移動させる。他のデータは 無視されるか、妥当性インターセプトを引き起こす。
命令エミュレーションのインターセプト
SIE のセキュア命令インターセプトには 2 種類ある。通常型と通知型である。通常の セキュア命令インターセプトは、インターセプトされた命令種別の命令完了をゲストに 対して保留状態にする。つまり SIE エントリ時に、KVM が与えたデータを使ってその 命令のエミュレーションを完了させようとする。これはプログラム例外か命令完了の いずれかになりうる。
通知型のインターセプトは、ゲスト命令の解釈によるゲスト環境の変化を KVM に伝える。 このようなインターセプトは、例えば、新しい lowcore の位置を知らせる store prefix 命令で認識される。SIE への再エントリ時には、データエリアにある KVM のデータは 無視され、ゲスト命令が完了したものとして実行が続く。そのため KVM は、プログラム 割り込みを注入できない。