ソフトウェア割り込み処理は、割り込み処理の遅延機構といえますが、Xenハイパーバイザーではそれを単なる割り込み処理の遅延機構としてだけでなく、汎用の遅延処理機構として利用しています。Linuxカーネル2.6におけるソフトウェア割り込みやtasklet、workqueueといった役割のすべてを、Xenではソフトウェア割り込み機構が受け持っています。
ソフトウェア割り込みにもハードウェア割り込みと同様に割り込み番号を与えますが、Xen 3.0.2では、これらの番号を静的に割り当てています(表2)。また、これらのソフトウェア割り込み番号それぞれに対し、固有のハンドラを登録できます。Xenハイパーバイザーが、ソフトウェア割り込みを発生させると、登録したハンドラが遅延実行されます。
フラグ | 説明 |
---|---|
TIMER_SOFTIRQ | CPUローカルタイマー |
SCHEDULE_SOFTIRQ | ドメイン再スケジュール |
NEW_TLBFLUSH_CLOCK_RERIOD_SOFTIRQ | TLBフラッシュ |
KEYPRESS_SOFTIRQ | キー入力 |
NMI_SOFTIRQ | ドメイン0へのNMI通知 |
PAGE_SCRUB_SOFTIRQ | ページのゼロクリア |
DOMAIN_SHUTDOWN_FINALISE_SOFTIRQ | ドメインの停止 |
ソフトウェア割り込みを管理するデータ構造は、Linuxカーネルのものとほぼ同じで、非常に単純です(図2)。
softirq_handlersテーブルの各エントリがソフトウェア割り込み種別に対応しており、ここにソフトウェア割り込みハンドラを登録します(表2)。各エントリには、ソフトウェア割り込み発生を示すフラグが付属していて、このフラグはCPU数分用意されています(表3)。
関数名 | 説明 |
---|---|
raise_softirq() | カレントCPUに対し、ソフトウェア割り込み要求を生成 |
cpu_raise_softirq() | 指定したCPUに対し、ソフトウェア割り込み要求を生成 |
do_softirq() | ソフトウェア割り込みハンドラの呼び出し |
open_softirq() | ソフトウェア割り込みハンドラの登録 |
Xenは、ハイパーバイザーからドメインへのコンテキスト切り替え時、このフラグをチェックします。そして、保留中のソフトウェア割り込み要求があれば、対応するソフトウェア割り込みハンドラを呼び出します。
表2を見ると分かりますが、ソフトウェア割り込みの種類は、Xenハイパーバイザーが直接処理するハードウェア割り込みの数より明らかに多いです。実割り込み処理の延長として動作するのは、TIMER_SOFTIRQ(タイマー)とKEYPRESS_SOFTIRQ(キー入力)程度で、それ以外のソフトウェア割り込みは、Linux 2.6カーネルにおけるworkqueue相当の遅延処理を行わせるために利用しています。
Copyright © ITmedia, Inc. All Rights Reserved.