連載
» 2007年12月03日 01時31分 UPDATE

仮想マシンモニタ Xen 3.0解読室:割り込み――デバイスが生成する割り込み【前編】 (1/3)

今回から「割り込み」について解説していきます。割り込みとは、非同期に発生する事象を、Xenから各ドメインに非同期に事象を通知する仕組みを指します。

[高橋浩和(VA Linux Systems Japan),ITmedia]

2つの割り込み処理

 さて、今回からは「割り込み」について見ていきましょう。割り込みとは、非同期に発生する事象を、Xenから各ドメインに通知する仕組みを指します。Xenの割り込み処理では、通知先ドメインが行っている処理を強制的に中断し、受信処理を行わせることができます。

 割り込みは、非同期に事象を通知する仕組みで、Xenの環境では大きく分けて2種類あります。1つは、デバイスが生成する割り込みで、もう1つはXenハイパーバイザーがドメインに送る割り込みです。この連載では、前者の割り込みを実割り込み、後者の割り込みを仮想割り込みと呼んで区別することにします。

 実割り込み処理は、Linuxカーネルにおける割り込み処理に相当します。外部デバイスが生成した割り込みを、Xenハイパーバイザーが受け取り、対応する処理を行います。一方仮想割り込みは、Linuxカーネルで言えばプロセスに対するシグナルに相当し、非同期事象をドメインに通知するために利用しています。

実割り込み

 まず、実割り込み処理から見てみましょう。Xenの実割り込み処理のコードは、Linuxカーネルの実装をベースにしています(ハードウェア割り込みの実装だけでなく、遅延処理の仕組みであるソフトウェア割り込みの実装もLinux実装を流用しています)。Linuxにおける割り込み処理の実装を理解している方は、Xenにおける実装をすぐ理解できることでしょう。Linuxカーネルにおける実装との違いはわずかです。

特徴

 Xenの実割り込み処理では、単純な構造を取りながらも応答性を確保できるよう、幾つか設計上の工夫がなされています。まずは、Xenの実割り込みが実現している特徴を確認しておきます。

応答性

 Linuxカーネルと同じ方式で応答性を確保しています。

  • Xenハイパーバイザー走行中の割り込み許可

 Xenハイパーバイザー処理は、割り込み許可の状態で行われます。そのためハイパーバイザー走行中であっても、発生した割り込み要求に対し、即座に割り込みハンドラを起動できます*

  • 段階の割り込み処理

 伝統的なUNIXの実装では、割り込みに優先度をつけて、優先度の高い割り込みに対するハンドラから実行して応答性を確保していました。それに対し、XenハイパーバイザーはLinuxカーネルと同じく、割り込みに優先度をつけるのではなく、2段階で割り込みを処理することによって、応答性を確保しています。

 応答性の必要な処理はハードウェア割り込みハンドラにて即実行し、論理的な処理はソフトウェア割り込みという仕掛けを使って遅延実行します。これによって、次のハードウェア割り込みをすぐに受け付け可能となります。また、ハードウェア割り込みに対するソフトウェア割り込み処理の動作が完了していなくとも、次のハードウェア割り込みを受け付けることができます。

割り込み状態の単純化

2段階の割り込み処理

 Xenは、ソフトウェア割り込みを積極的に利用しており、割り込み処理に関連する資源状態を単純化するためにも使われています。ここはLinuxカーネルの実装と違う部分といえるでしょう。Linuxでは、カーネル走行中にソフトウェア割り込み処理が割り込むことを許可していますが、Xenハイパーバイザーは、その処理中にソフトウェア割り込み処理が割り込むことを許していません(ハードウェア割り込みからの割り込みは可能です)。

 また、ハイパーバイザー呼び出し処理と、各種ソフトウェア割り込みハンドラ処理は直列化(シリアライズ)されます。つまり、1つの処理が終了するごとに次の処理を開始し、順番に処理していきます。ハイパーバイザー呼び出し処理およびソフトウェア割り込みハンドラ実行中に発生したソフトウェア割り込み要求は、それらの処理が完了するまで遅延させられます。

 これが意味するのは、Xenハイパーバイザーのコードが、ソフトウェア割り込み処理から参照される資源(データ構造など)を、特に意識して排他する必要がないということです。一方Linuxカーネルでは、ソフトウェア割り込みを明示的に禁止する必要があります*

 Linuxカーネルとは異なり、ハイパーバイザーのコードを長時間実行し続ける処理がないため、ソフトウェア割り込み処理開始が遅延しても影響はほとんどないと思われます。Xenハイパーバイザーのコード単純化を採用しており、これはなかなか悪くない選択といえます(左図)

マルチプロセッサへの対応

 割り込み処理に対してもCPUは対称です。すべてのCPUは、どの種類の割り込みでも受け付けることができます。また、すべてのCPUで並行して割り込み処理を実行可能です。もちろん、同じ要因の割り込みに対し、ハードウェア割り込みハンドラは同時に1つしか動作できません。一方、ソフトウェア割り込みは、同種の要因であっても、複数のCPU上で同時に動作可能です。

割り込みスタック

 Xenハイパーバイザーは、専用の割り込みスタックを用意していません。ハードウェア割り込みハンドラも、ソフトウェア割り込みハンドラも、ハイパーバイザースタックを借りて動作します。

 Linuxカーネルでは、システムコール処理に割り込んでソフトウェア割り込み処理が動作することを許しているため、比較的大きなスタックが必要とされています。一方Xenハイパーバイザーでは、ハイパーバイザー呼び出し処理中にソフトウェア割り込み処理が動かないため、それほど大きなスタックを必要としません(図2)

図2 図2 割り込みのスタック

このページで出てきた専門用語

即座に割り込みハンドラを起動できます

ハードウェア割り込みハンドラ実行中も割り込みが許可されている。Xenのハードウェア割り込みハンドラは、実行時間が非常に短いので、許可しなくても問題ないと思われるが、ベースとしたLinuxカーネルのコードがそのようになっているため同じように動作する。

Linuxカーネルでは、ソフトウェア割り込みを明示的に禁止する必要があります

local_bh_disable()関数などを利用して、ソフトウェア割り込みから参照される可能性のある資源を保護する。


関連キーワード

Xen | ドメイン | カーネル


       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

ピックアップコンテンツ

- PR -

注目のテーマ