(57)【要約】  本発明は、入出力命令の実行完了を知らせるための割り込み通知の回数を削減し、割り込み処理の負荷を軽減する情報処理装置を提供する。  本発明では、ドライバに対して、入出力命令を発行した後に、必ず先行する入出力命令の完了状態を確認することを規定する。すなわち、入出力命令の発行タイミングを先行する入出力命令の完了状態を確認するためのポーリングタイミングと見なす。  入出力装置は割り込み通知をCPUに対して送信する前に、タイマーを設定してあらかじめ規定された時間だけ待機する。この間にドライバから次の入出力命令を発行したという通知が入出力装置に到着した場合、タイマーをリセットし、待機時間をあらかじめ規定された時間分だけ延長する、という動作を行う処理部を入出力装置に対して追加する。
2015173853.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサーと、記憶部と、該プロセッサーから処理の指示を受ける入出力装置とからなる情報処理装置において、
前記情報処理装置は、
前記プロセッサーからの指示に基づいて、
前記プロセッサーからの処理指示時に先行する処理が完了しているかを確認し、
前記入出力装置は、
前記プロセッサーへの処理完了の通知としての割り込み信号を送信する割り込み通知送信部と、
前記プロセッサーに、処理完了の通知の送信を一定時間待機させる待機部と、
前記プロセッサーからの処理開始指示を検知したことを契機に、
前記プロセッサーへ送信を待機させた前記一定時間を、さらに延長する延長部を、
有することを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置において、
前記プロセッサーからの処理開始の指示を、
前記入出力装置の内部にあるレジスタへの書き込みによって検知することを特徴とする情報処理装置。
【請求項３】
請求項２に記載の情報処理装置であって、
前記割り込み通知送信部は、
前記記憶部に設けた複数の処理完了キューを識別する識別情報とともに前記割り込み信号を送信することを特徴とする情報処理装置。
【請求項４】
請求項２もしくは請求項３に記載の情報処理装置であって、
複数のプロセッサーからの指示に対応して、前記入出力装置が、複数の処理開始指示を検知し、
該処理開始指示を検知した場合には、
前記延長部が、
前記プロセッサーへ通知するまでの前記一定時間を、さらに延長することを特徴とする情報処理装置。
【請求項５】
請求項１乃至４に記載の情報処理装置であって、
前記延長部は、
前記プロセッサーからの処理完了通知を処理したことを知らせる信号を検知したときに、
前記プロセッサーへ通知するまでの前記一定時間を、さらに延長することを特徴とする情報処理装置。
【請求項６】
プロセッサーと、記憶部と、該プロセッサーから処理の指示を受ける入出力装置とからなる情報処理装置の処理方法において、
前記プロセッサーからの指示に基づいて、
前記プロセッサーからの処理指示時に先行する処理が完了しているかを確認し、
前記プロセッサーに、処理完了の通知の送信を一定時間待機させ、
前記プロセッサーからの処理開始指示を検知したことを契機に、
前記プロセッサーへの送信を待機させた前記一定時間を、さらに延長し、
前記プロセッサーへの処理完了の通知としての割り込み信号を送信することを特徴とする情報処理装置の処理方法。
【請求項７】
請求項６に記載の情報処理装置の処理方法において、
前記プロセッサーからの処理開始の指示を、
前記入出力装置の内部にあるレジスタへの書き込みによって検知することを特徴とする情報処理装置の処理方法。
【請求項８】
請求項７に記載の情報処理装置の処理方法であって、
前記記憶部に設けた複数の処理完了キューを識別する識別情報とともに前記割り込み信号を送信することを特徴とする情報処理装置の処理方法。
【請求項９】
請求項７もしくは請求項８に記載の情報処理装置の情報処理方法であって、
プロセッサーからの指示は、複数のコアからの指示であり、複数の指示に対応して、前記入出力装置が、複数の処理開始指示を検知し、
該処理開始指示を検知した場合には、
前記プロセッサーへ通知するまでの前記一定時間を、さらに延長することを特徴とする情報処理装置の処理方法。
【請求項１０】
請求項６乃至９に記載の情報処理装置の処理方法であって、
前記プロセッサーからの処理完了通知を処理したことを知らせる信号を検知したときに、
前記プロセッサーへ通知するまでの前記一定時間を、さらに延長することを特徴とする情報処理装置の処理方法。
【請求項１１】
プロセッサーから処理の指示を受ける入出力装置であって、
前記入出力装置は、
処理完了の通知としての割り込み信号を、前記プロセッサーへ送信する割り込み通知送信部と、
前記プロセッサーに、処理完了の通知の送信を、一定時間待機させる待機部と、
前記プロセッサーからの処理開始指示を検知したことを契機に、
前記プロセッサーへの送信を待機させた前記一定時間を、さらに延長する延長部を、
有することを特徴とする入出力装置。
【請求項１２】
請求項１１に記載の入出力装置において、
前記プロセッサーからの処理開始の指示を、
前記入出力装置の内部にあるレジスタへの書き込みによって検知することを特徴とする入出力装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置に関し、特に、入出力命令の実行完了を知らせるための割り込み信号の送出回数がCPUに対して過大になることを防ぐためのコンピュータに接続する入出力装置に関する。
【背景技術】
【０００２】
一般的な入出力装置では、処理の完了を通知する方法として入出力装置がCPUに対して能動的に通知する割り込み通知方式と、CPUが一定の時間間隔で入出力装置の特定領域を監視するポーリング方式が使われる。【０００３】
前者は入出力処理がない場合にはCPUの処理時間を消費せず、入出力処理が完了してから直ちにCPUが完了処理を行うため、入出力にかかる時間が短くてすむ利点がある。【０００４】
一方で、後者は入出力回数が多い場合であってもCPU上で実行される他処理を邪魔せず、一定の負荷で完了処理を行うことができる利点がある。【０００５】
一般的なOSでは、複数のデバイスが同時に動作しているため、処理がない場合にはCPUの処理時間を消費しない割り込み通知方式が用いられている。しかし、割り込み通知方式は入出力回数が多くなると割り込み通知の頻度がCPUにとって過大となり、特に高い入出力性能を持つ装置では、最高性能が頭打ちになる原因となってきている。そのため、割り込み通知頻度が過大となる可能性がある場合には、頻度を抑制する必要が出てきた。【０００６】
特許文献1は、ホスト側の動作に制約条件をつけて、特定のイベント発生時に割り込み通知の送出を一定時間遅延させることを開示している。特許文献1では、遅延契機のイベントが、デバイスによるパケット受信時と、CPUが受信パケットを処理したことをデバイスに伝えるときである。また、特許文献１では、抑制される割り込み信号は、パケット信号の送信完了確認要求のための割り込み信号である。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】US2011/0093637
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１では、CPUが入出力命令をデバイスに発行する際の課題については、何ら配慮されていない。【０００９】
割り込み通知は、入出力装置がCPUに対してオンデマンドで処理を要求するために一般的に用いられる手法であるが、割り込み処理はCPUにとって無視できない負荷を発生させる。入出力装置の性能が高くなるにつれて、単位時間あたりに処理可能な入出力命令数が多くなり、それに伴って入出力命令の実行完了を知らせるための割り込み通知回数も増加してきたため、割り込み処理の負荷が入出力性能に影響を与えるほど大きくなってきている。【００１０】
本発明の目的は、入出力命令の実行完了を知らせるための割り込み通知の回数を削減し、割り込み処理の負荷を軽減するための情報処理装置を提供することにある。
【課題を解決するための手段】
【００１１】
本発明は、プロセッサーと、記憶部と、該プロセッサーから処理の指示を受ける入出力装置とからなる情報処理装置において、
前記情報処理装置は、
前記プロセッサーからの指示に基づいて、
前記プロセッサーからの処理指示時に先行する処理が完了しているかを確認し、
前記入出力装置は、
前記プロセッサーへの処理完了の通知としての割り込み信号を送信する割り込み通知送信部と、
前記プロセッサーに、処理完了の通知の送信を一定時間待機させる待機部と、
前記プロセッサーからの処理開始指示を検知したことを契機に、
前記プロセッサーへ送信を待機させた前記一定時間を、さらに延長する延長部を、
有する情報処理装置に特徴がある。
【発明の効果】
【００１２】
本発明によれば、入出力命令の実行完了を知らせるための割り込み通知の回数を削減し、割り込み処理の負荷を軽減することができる。
【図面の簡単な説明】
【００１３】
【図１】本願発明の第一の実施例に係る入出力装置の概略図を示す図。
【図２】主記憶装置上の入出力命令格納領域・入出力完了通知格納領域の概略を示す図。
【図３】ドライバソフトウェアの動作シーケンスを示す図。
【図４】入出力装置制御部の動作シーケンスを示す図。
【図５】タイマーカウンタを含む割り込み通知頻度抑制機能の動作シーケンスを示す図。
【図６】複数の入出力命令・完了通知格納領域が主記憶装置へ配置されている状態を示す図。
【図７】発行キュー・完了キューの構造の概略を示す図。
【図８】複数の発行キュー・完了キューを扱う本願発明の第二の実施例に係る入出力装置の概略を示す図。
【図９】複数キューが存在する場合のドライバソフトウェアの動作シーケンスを示す図。
【図１０】複数キューが存在する場合のタイマーカウンタを含む割り込み通知頻度抑制機能の動作シーケンス(1)を示す図。
【図１１】複数キューが存在する場合のタイマーカウンタを含む割り込み通知頻度抑制機能の動作シーケンス(2)を示す図。
【図１２】完了通知の処理完了信号を割り込み通知頻度の抑制に用いた本願発明の第三の実施例に係る入出力装置の概略を示す図。
【図１３】完了通知の処理完了信号を、割り込み通知頻度の抑制に用いた時の第二の実施例に対する追加動作シーケンスを示す図。
【図１４】OSの統計情報表示画面の例を示す図。
【発明を実施するための形態】
【００１４】
以下、図面を参照していくつかの実施例を説明する。
【００１５】
本発明では、ドライバソフトウェア(201)に対して、入出力命令を発行した後に、必ず先行する入出力命令の完了状態を確認することを規定する。すなわち、入出力命令の発行タイミングを先行する入出力命令の完了状態を確認するためのポーリングタイミングと見なす。
【００１６】
入出力装置は割り込み通知をCPUに対して送信する前に、タイマーを設定してあらかじめ規定された時間だけ待機する。この間にドライバから次の入出力命令を発行したという通知が入出力装置に到着した場合、タイマーをリセットし、待機時間をあらかじめ規定された時間分だけ延長する、という動作を行う処理部を入出力装置に対して追加している。  以下の文面では図中の要素を表す単語の後に括弧書きで要素番号を示す。また、同じ要素が複数存在し、それらを区別する必要がある場合には要素番号の後にアルファベットを追加して表記する。
【００１７】
本発明を構成する基本構成要素は、中央演算装置(200)、主記憶装置(210)、入出力装置(100)およびそれらを接続する信号線とデータバス(240)である。入出力装置(100)にはデータを記憶し、読み書きされたことを検出して外部に通知する機能を持つレジスタ(300,301,310,311)が存在する。
【実施例１】
【００１８】
本発明の最良の実施形態の一つを図1に示す。
本発明の主要な動作概要を図1にて説明する。
入出力装置制御部(110)は、割り込み通知をだす必要が生じたときに、タイマーカウンタ(310)に対してカウントの開始を指示する。すでにカウントが開始されている場合は、タイマーカウンタ(310)は、入出力装置制御部(110)からのカウント開始指示を無視する。  タイマーカウンタ(310)は、タイマー用クロック生成部(130)から一定時間ごとに発信されるクロック信号が到着するごとに、カウンタの値を1ずつ加算する。【００１９】
比較器(320)は、タイマーカウンタ(310)とタイマー閾値レジスタ(311)の値を比較器(320)によって比較し、両者が一致したら割り込み通知送信部(120)に対して、CPU(200)へ割り込み通知を送出するように指示を出す。同時に、タイマーカウンタ(310)の値をリセットし、カウントの加算を停止させる。【００２０】
割り込み通知送信部(120)は、送出指示を受けると中央演算装置(200)に対して割り込み通知を送出する。【００２１】
中央演算装置(200)が入出力命令を発行したことを入出力装置(100)に対して通知するために、SQPIレジスタ(300)への書き込みを行ったとき、SQPIレジスタは書き込みが行われたことを入出力装置制御部(110)に通知するとともに、タイマーカウンタ(310)の値をリセットする。SQPIレジスタは、Submission Queue Producer Index registerの略称であり、入出力命令の発行をCPUから入出力装置に対して通知するためのレジスタである。ただし、SQPIレジスタ(300)からタイマーカウンタ(310)に出される信号では、タイマーカウンタ(310)の加算は停止させない。【００２２】
以上の動作が割り込み通知回数を抑制するときの基本動作である。
以上の動作を、各部の動作ごとに詳細に説明する。【００２３】
図2と図3を用いてドライバソフトウェア(201)の動作を説明する。ドライバソフトウェア(201)は、OSから入出力の処理要求が到着し、CPU(200)の制御権を渡された時点、または割り込み通知が到着した時点から処理が開始される。以降で動作説明文の先頭に記載されている番号は、図中の番号と対応している。以下のドライバソフトウェア(201)の動作シーケンスの説明では、CPU(200)が、主記憶装置(210)に格納したドライバソフトウェア(201)を読みだして、ドライバソフトウェア(201)の機能を実行する動作を示す。
(1000)OSから入出力処理要求が到着し、CPU(200)の制御権が渡される。
(1001)入出力命令(221)を作成し、主記憶装置(210)に確保された特定領域(220)に書き込む。
(1002)入出力装置(100)に対して新たな命令を発行したことを通知するためにSQPIレジスタ(300)に対して書き込みを行う。
手順(1011)に進む。
(1010)入出力装置(100)から割り込み通知が到着し、OSからドライバソフトウェア(201)に対してCPUの制御権が渡される。
手順(1011)に進む。
(1011)主記憶(210)上に確保されている入出力完了通知を格納する領域(230)をチェックする。
(1012)主記憶(210)上の完了通知格納領域(230)に未処理の入出力完了通知(231)が存在する場合、手順(1103)に進む。未処理の入出力完了通知(231)が存在しない場合、手順(1020)に進む。
(1013)主記憶(210)上の入出力完了通知格納領域(230)に格納されている未処理の完了通知(231)を1つ読み込み、OS依存の方法に則って完了処理を行う。
(1014)入出力装置(100)のCQCIレジスタ(301)に対して書き込みを行い、完了通知(231)の処理が終わったことを入出力装置(100)に通知する。
手順(1011)に進む。CQCIレジスタは、Completion Queue Consumer Index registerの略称であり、入出力命令に対する入出力装置からの完了通知を処理したことをCPUから入出力装置に対して通知するためのレジスタである。
(1020)CPU(200)の制御権をOSに返す。【００２４】
図2と図4を用いて入出力装置制御部(110)の動作を説明する。
(1100)CPU(200)からSQPI(300)レジスタに対して書き込みが行われたことを検出する。
(1101)主記憶装置(210)に確保されている入出力命令格納領域(220)から入出力命令(221)を1つ読み込む。
(1102)入出力命令(221)を処理する。
(1103)入出力処理が完了したら手順(1104)に進む。
未完了の場合、手順(1103)を繰り返す。
(1104)入出力完了通知(231)を作成する。
(1105)入出力完了通知格納領域(230)に空きがある場合は手順(1106)へ進む。
空きがない場合は手順(1120)へ進む。
(1106)主記憶装置(210)確保された入出力完了通知格納領域(230)の空き領域に入出力完了通知(231)を書き込む。
(1107)カウンタ加算開始の指示をタイマーカウンタ(310)に指示する。
(1108)入出力処理を完了する。
(1120)完了通知格納領域(230)の開放処理が終了するまで待機する。
手順(1105)へ進む。
(1130)CPU(200)からCQCIレジスタ(301)に対して書き込みが行われたことを検出する。
(1131)CPU(200)によって処理済みとなった完了通知(231)が格納されていた領域を開放する。
(1132)完了通知格納領域(230)の中に未処理の完了通知(231)が存在する場合には手順(1134)へ進む。未処理の完了通知(231)が存在しない場合には手順(1133)に進む。
(1133)タイマーカウンタ(310)をリセットし、加算停止を指示する。
(1134)完了通知格納領域(230)の開放処理を終了する。【００２５】
図1と図5を用いてタイマーカウンタ(310)を含む割り込み通知頻度抑制機能全体の動作シーケンスを説明する。
(1200)初期化完了または完了キューを作成するコマンドの実行完了に伴って完了キューの動作が開始される。
(1201)カウンタ加算開始信号が到着した場合、手順(1202)へ進む。
到着していない場合、手順(1201)を繰り返す。
(1202)クロック生成部(130)から信号が到着した場合、手順(1210)へ進む。
到着していない場合、手順(1203)へ進む。
(1203)カウンタ加算停止信号が到着した場合、手順(1213)へ進む。
到着していない場合、手順(1204)へ進む。
(1204)SQPIレジスタ(300)への書き込みがあった場合、手順(1214)へ進む。
書き込みがなかった場合、手順(1202)へ進む。
(1210)タイマーカウンタ(310)を1加算する。
(1211)タイマーカウンタ(310)の値が閾値レジスタ(311)と一致した場合、手順(1212)へ進む。
不一致の場合、手順(1203)へ進む。
(1212)割り込み通知信号をCPU(200)に対して送出する。
(1213)タイマーカウンタ(310)をリセットする。
手順(1201)へ進む。
(1214)タイマーカウンタをリセットする。
手順(1202)へ進む。【００２６】
本実施例によれば、割り込み通知のみで入出力処理の完了を通知した場合に比べて、割り込み通知の頻度を抑制することができる。特に、あらかじめ設定する待機時間よりも短い間隔でドライバから入出力命令の発行が行われる場合、割り込み通知の送信は常に遅延される状態となり、割り込み通知を送信せずに入出力処理を進めることが可能な状態となる。これにより、従来では割り込み処理の負荷が問題となっていた高頻度で入出力命令を処理する状態になった場合、割り込み処理を行うことなく入出力動作を完了することが可能となる。【００２７】
また、待機時間の設定値は単発の入出力処理の遅延時間に影響を与えるが、本発明では、待機時間は入出力処理の発行間隔より長いときに大きな効果を得られるため、入出力命令の発行が高頻度の時に対象を定めて短い待機時間を設定すれば、単発入出力処理の遅延時間悪化を最小限に抑えることができる。
【実施例２】
【００２８】
本発明を、CPU(200)と入出力装置(100)の間で、複数の独立した入出力命令格納領域(220)と入出力完了通知格納領域(230)を用いた場合で実施した例を示す。なお、入出力命令格納領域(220)の数と入出力完了通知格納領域(230)の数は一致しなくてもよい。以降では、入出力命令格納領域(220)を発行キュー、入出力完了通知格納領域(230)を完了キューと呼ぶ。【００２９】
主記憶上装置(210)に複数の発行キュー(220)と完了キュー(230)が存在している状態を図6に示す。発行キューと完了キューは、ともに論理番号空間上で無効領域と有効領域が連続しており、それらの境界がPI(331)またはCI(330)によって示され、始点と終点が連結されて循環境界条件を満たす、図7に示すようなリングバッファによって構成されているものとする。PI(331)およびCI(330)は発行キュー(220)と完了キュー(230)の両方に2つずつ存在する。この4つのポインタのうち、発行キュー(220)のPI(331)を入出力装置内のSQPI(300)に格納し、完了キュー(230)のCI(331)を入出力装置内のCQCI(301)に格納する。それ以外のポインタについては、主記憶装置(210)上の適切な位置に配置する。【００３０】
ある発行キュー(220)に投入した入出力命令(221)に対応する完了通知(231)をどの完了キュー(230)から受け取るのかは、ドライバソフトウェア(201)から入出力装置(100)に対して、入出力装置(100)の初期化時に指定するか、または発行キュー(220)の動作を開始させることを入出力装置(100)に指示するときの管理コマンドによって指定する。【００３１】
入出力装置(100)は、CPU(200)に対して割り込み方式によって完了通知(231)の処理を要求するときに、処理が必要な完了キュー(230)をCPU(200)が一意に判別可能となるように、PCI-express規格（PCI expressは、Peripheral Component Interconnect Special Interest Group(PCI-SIG)の商標である。）で定義されているMSI(Message Signaled Interrupts)またはMSI-X(Message Signaled Interrupts extended)を用いる。MSIおよびMSI-Xは、CPU(200)側が設定した特殊なメモリアドレスに、入出力装置(100)が書き込み動作を行うことで割り込み処理要求が発生したことをCPU(200)に伝える仕組みであり、書き込み先のアドレスを異なるものにすることで、CPU(200)は異なる要因で割り込み処理要求が発生していることを識別することが可能である。MSI/MSI-Xの割り込みは単に書き込み先のメモリアドレスの違いでしかないため、割り込み要因数が増加しても物理的な配線が増加することはない。【００３２】
本実施例では、完了キュー(230)が割り込み処理を要求するときに用いるMSI番号またはMSI-X番号を、ドライバソフトウェア(201)が入出力装置(100)の初期化時に指定するか、完了キュー(230)の動作開始を入出力装置(100)に指示するときの管理コマンドによって指定する。また、これらの情報を保持するためのMSI/MSI-X番号レジスタ(303)を入出力装置(100)の内部に配置する。【００３３】
複数の発行キュー(220)および完了キュー(230)を扱う入出力装置(100)の概略図を図8に示す。本実施例では、完了キューごとにタイマーカウンタ(310a,310b)、閾値レジスタ(311a,311b)、MSI/MSI-X番号レジスタ(303a,303b)、比較器(320a,320b)を搭載する。【００３４】
発行キュー(220)と完了キュー(230)の対応付け情報は発行・完了対応レジスタ(302a,302b)に保持しておき、この情報に基づいてタイマーカウンタ(310)リセット信号のルーティングスイッチ部 (140)が適切な完了キューのタイマーカウンタ(310)に対してリセット信号を送出する。【００３５】
タイマーカウンタの値が閾値に達し、割り込み通知を送信するとき、当該完了キューが使うべきMSIまたはMSI-Xのベクタ番号が格納されているMSI/MSI-X番号レジスタ(303)を参照し、割り込み番号を割り込み通知送信部(120)に送る。割り込み通知送信部(120)は指定された割り込み番号に基づいて算出された特殊なメモリアドレスへの書き込み動作を行うことによって、CPU(200)に対して割り込み通知を送信する。【００３６】
図9を用いて、複数の発行キュー(220)と完了キュー(220)が存在する場合のドライバソフトウェア(201)の挙動を説明する。本シーケンスでは一部OSの挙動も含んでいる。
(1000)OSから入出力処理要求が到着し、CPUの制御権が渡される。
(1001)入出力命令(221)を作成し、主記憶装置(210)に確保された特定領域(220)に書き込む。
(1002)入出力装置(100)に対して新たな命令を発行したことを通知するためにSQPIレジスタ(300)に対して書き込みを行う。
手順(1011)に進む。
(1030)入出力装置(100)から特定のMSI番号またはMSI-X番号に対して割り込み通知が到着する。
(1031)OSは割り込み通知で指定されたMSI番号またはMSI-Xに対応する割り込み処理関数（ハンドラ）を呼び出す。
手順(1011)に進む。
(1011)主記憶(210)上に確保されている入出力完了通知を格納する領域(230)をチェックする。
(1012)主記憶(210)上の完了通知格納領域(230)に未処理の完了通知(231)が存在する場合、手順(1103)に進む。未処理の完了通知(231)が存在しない場合、手順(1020)に進む。【００３７】
(1013)主記憶(210)上の完了通知領域(230)に格納されている未処理の完了通知(231)を1つ読み込み、OS依存の方法に則って完了処理を行う。
(1014)入出力装置(100)のCQCIレジスタ(301)に対して書き込みを行い、完了通知の処理が終わったことを通知する。
手順(1011)に進む。
(1040)OSからドライバソフトウェア(201)に対して入出力装置(100)初期化要求が到着する。
(1041)ドライバソフトウェア(201)はMSI番号またはMSI-X番号を確保し、確保した番号に関連づけて割り込み処理関数(ハンドラ)を設定する。
(1042)入出力装置(100)に対してMSI番号またはMSI-X番号を指定して、完了キュー(230)を作成する管理コマンドを送り、完了キュー(230)を生成する。
(1043)入出力装置に対して対応する完了キュー(230)番号を指定し、発行キュー(220)を作成する管理コマンドを送り、発行キュー(220)を生成する。
手順(1043)に進む。
(1020)CPU(200)の制御権をOSに返す。【００３８】
入出力装置制御部(110)のシーケンスは図4と変化しない。ただし、手順(1107)および手順(1133)において制御の対象となるタイマーカウンタ(310)は、入出力完了通知(231)が配置される完了キュー(230)に関連づけられたもののみが対象となる点が異なる。【００３９】
また、複数の発行キュー(220)に対して図4の手順は複数の入出力処理を実行する制御部(110)が並列に動作してもよい。複数の制御部が並列に発行キューを処理する場合、タイマーの開始信号またはリセット信号を送る対象となるタイマーカウンタ(310)は発行キュー(220)に関連づけられた完了キュー(230)に属するもののみとなる。【００４０】
図10を用いて複数キューが存在する場合の割り込み通知頻度抑制機能の動作シーケンスを述べる。図10は完了キューごとに行われる動作シーケンスを示している。
(1200)初期化完了または完了キューを作成するコマンドの実行完了に伴って完了キューの動作が開始される。
(1201)カウンタ加算開始信号が到着した場合、手順(1202)へ進む。
到着していない場合、手順(1201)を繰り返す。
(1202)クロック生成部(130)から信号が到着した場合、手順(1210)へ進む。
到着していない場合、手順(1203)へ進む。
(1203)カウンタ加算停止信号が到着した場合、手順(1213)へ進む。
到着していない場合、手順(1230)へ進む。【００４１】
(1210)タイマーカウンタ(310)を1加算する。
(1211)タイマーカウンタ(310)の値が閾値レジスタ(311)と一致した場合、手順(1220)へ進む。
不一致の場合、手順(1203)へ進む。【００４２】
(1213)タイマーカウンタ(310)をリセットする。
手順(1201)へ進む。
(1214)タイマーカウンタをリセットする。
手順(1202)へ進む。
(1220)MSI番号またはMSI-X番号をMSI/MSI-X番号レジスタ(303)から読み出して入出力装置制御部(110)に伝達する。
(1221)入出力装置制御部(110)は伝えられたMSI番号またはMSI-X番号を用いて、CPU(200)に対して割り込み通知を送出する。
手順(1213)へ進む。
(1230)カウンタリセット信号が到着した場合、手順(1214)へ進む。
到着していない場合、手順(1202)へ進む。【００４３】
図11を用いて、SQPIレジスタ(300)への書き込みを契機にタイマーカウンタをリセットする動作フローを説明する。
(1300)発行キュー(220)の動作を開始した。
(1301)SQPIレジスタ(300)の値が変化した場合、手順(1302)へ進む。
変化していない場合、手順(1301)を繰り返す。
(1302)更新された発行キュー(220)に関連づけられている完了キュー(230)の番号を完了キュー番号レジスタ(302)から読み出す。
(1303)特定された完了キュー(230)に対応づけられたタイマーカウンタ(310)に対してカウンタリセット信号を送る。
手順(1301)へ進む。【００４４】
図12に示すように、中央演算処理装置200を構成する２つのコア200のそれぞれに対応して、SQPIレジスタ300、CQCIレジスタ301を割り当てている。本実施例２では、発行キューをMSI番号またはMSI-X番号に対応させていることで、マルチコアの場合に、特定の完了キューにＩ／Ｏの処理が集中して、Ｉ／Ｏ処理のボトルネックが発生しないようにできる。
【実施例３】
【００４５】
ドライバソフトウェア(201)が、ある完了キュー(230)の状態を確認しにいったとき、完了キュー領域(230)に存在する入出力完了通知(231)を連続して処理するという動作をする場合、完了キュー領域にある完了通知をCPUが処理したことを入出力装置に伝えるためのCQCIレジスタ(301)も割り込み通知のタイミングを遅延させるために利用できる。【００４６】
CQCI(301)の値が更新されたとき、その直前に完了キュー(230)に書き込んだ入出力完了通知(231)が処理されている可能性があるため、割り込み通知の送出をしばらく停止してみることで割り込み通知頻度の抑制効果が見込める。【００４７】
CQCIレジスタ(301)は完了キュー(230)に一対一で関連づけられているため、このレジスタへの書き込みが検出された段階で対応する完了キュー(230)のタイマーカウンタ(310)をリセットすれば、一定時間完了通知の送出を遅延させる効果が得られる。この動作を実現するハードウェア概要を図12に示す。【００４８】
ドライバソフトウェア(201)、入出力装置制御部の動作フローは実施例２と同様である。割り込み通知頻度抑制機能の動作フローに図13のシーケンスを追加する。【００４９】
図13のCQCIレジスタ更新契機でのタイマーカウンタリセットの動作シーケンスについてフローを示す。
(1400)完了キュー(230)の動作を開始した。
(1401)CQCIレジスタ(301)の値が変化した場合、手順(1402)へ進む。
変化していない場合、手順(1401)を繰り返す。
(1402)CQCIレジスタ(301)に対応する完了キュー(230)に関連づけられたタイマーカウンタ(310)に対してカウンタリセット信号を送る。
手順(1401)へ進む。【００５０】
本実施例３によれば、CPU(200)が、一つの完了キュー(230)内の一つの入出力完了通知(231)を読むだけではなく、他の入出力完了通知が完了キュー（230）内に存在すれば、それら複数の入出力完了通知を、まとめて読みだすことが出来るためCPU(200)の負荷を減らすことができる。【００５１】
以上の実施例において、CPU(200)上で動作するOSから見た挙動について述べる。本発明が実施されている入出力装置(100)の挙動は、OSが提供する単位時間あたりの入出力処理数と割り込み回数の統計情報から得ることができる。たとえば、Linux（Linus Torvaldsの米国およびその他の国における登録商標あるいは商標である。）では単位時間あたりの入出力処理数や割り込み回数を取得するためのインターフェイスをprocfsとして実装している。【００５２】
図14はOSのターミナル画面からprocfsを通して統計情報を可視化した例を示している。これらの情報を参照することで、本発明の動作について観察することが可能である。割り込み回数統計値表示画面(400)では、左の列から、割り込み番号、プロセッサごとの割り込み回数、割り込みを通知するデバイスの種類が示されている。入出力処理回数統計値表示画面(401)では、左の列からデバイス名、読み込み命令数、書き込み命令数が示されている。【００５３】
本発明では、入出力要求数が一定の頻度に達するまでは従来の入出力装置と同様に、単位時間あたりの入出力回数(図14中401)に対して単位時間あたりの割り込み回数(図14中400の変化量)は比例する関係にある。【００５４】
単位時間あたりの入出力回数が増加し、一定の閾値を超えると、単位時間あたりの割り込み回数(図14中400)の当該デバイスの割り込み回数が増加しない状態となる。この現象は本発明特有の挙動であり、本発明の実施状態を確認するための一助となる。
【産業上の利用可能性】
【００５５】
コンピュータに接続する入出力装置を備えた情報処理装置において、入出力命令の実行完了を知らせるための割り込み信号の送出回数が、CPUに対して過大になることを防ぐために、本発明は、情報処理装置に広く適用することができる。
【符号の説明】
【００５６】
100          入出力装置
110          入出力装置制御部
120          割り込み通知送信部
130          タイマー用クロック生成部
140          ルーティングスイッチ部
200          中央演算処理装置（CPU）
210          主記憶装置
240          主記憶装置への読み書き用データバス
300          SQPIレジスタ
301          CQCIレジスタ
310          タイマーカウンタ
311          タイマー閾値レジスタ
320          比較器
【図１】
2015173853.tif 000003
【図２】
2015173853.tif 000004
【図３】
2015173853.tif 000005
【図４】
2015173853.tif 000006
【図５】
2015173853.tif 000007
【図６】
2015173853.tif 000008
【図７】
2015173853.tif 000009
【図８】
2015173853.tif 000010
【図９】
2015173853.tif 000011
【図１０】
2015173853.tif 000012
【図１１】
2015173853.tif 000013
【図１２】
2015173853.tif 000014
【図１３】
2015173853.tif 000015
【図１４】
2015173853.tif 000016
【国際調査報告】
2015173853.tif 000017
2015173853.tif 000018