割り込み――実割り込み処理【後編】仮想マシンモニタ Xen 3.0解読室(2/3 ページ)

» 2007年12月26日 03時17分 公開
[高橋浩和(VA Linux Systems Japan),ITmedia]

ソフトウェア割り込み

 ソフトウェア割り込み処理は、割り込み処理の遅延機構といえますが、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 ドメインの停止
表2 ソフトウェア割り込みの種別

データ構造と実装

 ソフトウェア割り込みを管理するデータ構造は、Linuxカーネルのものとほぼ同じで、非常に単純です(図2)

図2 図2 ソフトウェア割り込み管理テーブル

 softirq_handlersテーブルの各エントリがソフトウェア割り込み種別に対応しており、ここにソフトウェア割り込みハンドラを登録します(表2)。各エントリには、ソフトウェア割り込み発生を示すフラグが付属していて、このフラグはCPU数分用意されています(表3)

関数名 説明
raise_softirq() カレントCPUに対し、ソフトウェア割り込み要求を生成
cpu_raise_softirq() 指定したCPUに対し、ソフトウェア割り込み要求を生成
do_softirq() ソフトウェア割り込みハンドラの呼び出し
open_softirq() ソフトウェア割り込みハンドラの登録
表3 ソフトウェア割り込みハンドラ制御関数

 Xenは、ハイパーバイザーからドメインへのコンテキスト切り替え時、このフラグをチェックします。そして、保留中のソフトウェア割り込み要求があれば、対応するソフトウェア割り込みハンドラを呼び出します。

 表2を見ると分かりますが、ソフトウェア割り込みの種類は、Xenハイパーバイザーが直接処理するハードウェア割り込みの数より明らかに多いです。実割り込み処理の延長として動作するのは、TIMER_SOFTIRQ(タイマー)とKEYPRESS_SOFTIRQ(キー入力)程度で、それ以外のソフトウェア割り込みは、Linux 2.6カーネルにおけるworkqueue相当の遅延処理を行わせるために利用しています。

関連キーワード

CPU | Xen | ドメイン | Linux | カーネル | x86


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ