説明

リクエスト順序制御システム、リクエスト順序制御方法およびリクエスト順序制御プログラム

【課題】リクエストを受け付けてから後続リクエストの処理が完了するまでの時間を短縮することを課題とする。
【解決手段】システムボード1では、IOC10が、先行リクエストの種別または後続リクエストの種別に応じて、リクエストの順序制御をIOC10が担当するかCPU20が担当するかを判定する。そして、IOC10が、リクエストの順序制御をCPU20が担当すると判定された場合には、先行リクエストに続いて、後続リクエストをCPU20に送信する。そして、CPU20が、先行リクエストをメモリ30に送信し、先行リクエストの処理が完了した後に、後続リクエストをメモリ30に送信するように順序を制御する。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、順序保証が必要なリクエスト順序を制御するリクエスト順序制御システム、リクエスト順序制御方法およびリクエスト順序制御プログラムに関する。
【背景技術】
【0002】
従来より、情報処理装置の一部を構成するシステムボードでは、順序保証が必要なIOリクエストを受信すると、後続リクエストが先行リクエストを追い越さないようにリクエスト間の順番を制御することが行われている。メモリアクセスのリクエストを例示すると、システムボードは、先行リクエストに基づくメモリアクセス処理が完了した後に、後続リクエストをメモリに送信するように順序を制御している。
【0003】
システムボード上には、図11に例示するように、CPU(Central Processing Unit)、SC(システムコントローラ)、IOC(外部入出力コントローラ)およびメモリが実装されている。このような構成のもと、システムボードでは、IOリクエストがIOC、SC、メモリの順で転送される。
【0004】
システムボードでは、図12に示すように、IOCが順序保証の必要なリクエストを外部入力から受信した場合、まず先行リクエストをSCに発行する。そして、SCは、IOCから先行リクエストを受信すると、先行リクエストをパイプラインに投入し、メモリに対してメモリアクセスを要求する。
【0005】
続いて、SCは、メモリアクセスが確定すると、メモリアクセス確定の応答をIOCに送信する。その後、IOCは、メモリアクセス確定の応答をSCから受信した後に、後続リクエストをSCに発行する。このように、順序保証が必要なIOリクエストについて、図13に示すように、全てIOCが順序保証を行っていた。
【0006】
【特許文献1】特開平6−187231号公報
【特許文献2】特開平4−190435号公報
【特許文献3】特開2007−148507号公報
【発明の開示】
【発明が解決しようとする課題】
【0007】
ところで、上記した従来の技術では、システムボードのIOCが、メモリアクセス確定の応答を受信した後に、後続リクエストを発行するので、先行リクエストがIOCから送出されてからその応答を受信するまで、後続リクエストをIOCに滞留させることになる。この結果、リクエストを受け付けてから後続リクエストの処理が完了するまでに長い時間を要するという問題点があった。
【0008】
そこで、この発明は、先行するリクエストを受け付けてから後続リクエストの処理が完了するまでの時間を短縮することを目的とする。
【課題を解決するための手段】
【0009】
上述した課題を解決し、目的を達成するため、このシステムでは、外部入出力装置が、先行リクエストの種別または後続リクエストの種別に応じて、リクエストの順序制御を外部入出力装置が担当するか演算装置が担当するかを判定する。そして、外部入出力装置が、リクエストの順序制御を演算装置が担当すると判定された場合には、先行リクエストに続いて、後続リクエストを演算装置に送信する。そして、演算装置が、先行リクエストを記憶装置に送信し、先行リクエストの処理が完了した後に、後続リクエストを記憶装置に送信するように順序を制御する。
【発明の効果】
【0010】
開示のシステムは、リクエストを受け付けてから後続リクエストの処理が完了するまでの時間、つまりレイテンシを短縮し、性能を向上させるという効果を奏する。
【発明を実施するための最良の形態】
【0011】
以下に添付図面を参照して、この発明に係るリクエスト順序制御システム、リクエスト順序制御方法およびリクエスト順序制御プログラムの実施例を詳細に説明する。
【実施例1】
【0012】
以下の実施例では、実施例1に係るシステムボードの構成および処理の流れを説明し、最後に実施例1による効果を説明する。なお、以下では、CPUとSCとの機能を併せ持つシステムボードの例について説明する。
【0013】
[システムボードの構成]
まず最初に、図1を用いて、実施例1のシステムボード1の構成を説明する。図1は、実施例1に係るシステムボード1の構成を示すブロック図である。図1に示すように、実施例1によるシステムボード1は、IOC10、CPU20、メモリ30(図中「Memory」、以下同様)を有し、バス等を介してそれぞれの要素が接続されている。以下にこれらの各部の処理を説明する。
【0014】
IOC10は、システムボード1外との信号送受信を制御する。実施例1のIOC10は、順序保証が必要なリクエストを外部装置から受信した場合に、先行リクエストをCPU20に発行し、その後、後続リクエストをCPU20に発行する。なお、IOC10による詳しい処理については、図3を用いて後に詳述する。
【0015】
CPU20は、IOC10とメモリ30との間のパケット送受信を制御するとともに、各種演算とデータの加工を行う。実施例1によりCPU20は、IOCから受信した先行リクエストまたは後続リクエストをパイプラインに投入し、メモリ30にアクセスする。なお、CPU20による詳しい処理については、図6を用いて後に詳述する。
【0016】
メモリ30は、各種処理に必要なデータを記憶する。詳しく説明すると、メモリ30は、CPU20からのリクエストを受信してアクセスを受け付け、リードライト処理を行う。
【0017】
ここで、図2を用いて、IOC10からメモリ30までのパケット経路を説明する。図2に示すように、システムボード1では、CPU20を介してIOC10とメモリ30とが接続されている。そして、IOC10とCPU20とがIOバス、つまりIOC−CPU間のバスを介して接続されている。なお、IOバスは、実施例1では8Lane×4本のシリアル伝送バスであるが、図2では、1本に省略してIOバスを記載している。このように、複数のIOバスが設けられているため、IOバス上を転送中のパケットについて順序保証が必要である。
【0018】
また、図2に示すように、CPU20とメモリ30とが接続されている。CPU20内のパイプラインでは、各種の資源の空き待ちのためリクエストがビジーリトライ、つまりリクエストをパイプラインの入口に戻して再処理する場合があり、このような状況に対応するために、先行リクエストと後続リクエストが順序保証されていなければならない。
【0019】
[IOCの構成]
次に、図3〜図5を用いて、図1に示したIOC10の構成を説明する。図3は、実施例1に係るIOCの構成を示すブロック図である。図4は、制御担当テーブルの一例を説明するための図である。図5は、IOCからメモリまでのパケット経路を説明するための図である。
【0020】
図3に示すように、実施例1のIOC10は、外部入出力制御I/F(インターフェース、以下同様)11、CPU制御I/F12、制御部13、記憶部14を有する。また、CPU制御I/F12は、IOバスを介してCPU20と接続されている。以下にこれらの各部の処理を説明する。
【0021】
外部入出力制御I/F11は、接続される外部装置との間で入出力する各種情報に関する通信を制御する。例えば、外部入出力制御I/F11は、順序保証が必要なリクエストを含む各種リクエストを外部装置から受信する。
【0022】
CPU制御I/F12は、接続されるCPU20との間でやり取りする各種情報に関する通信を制御する。詳しく説明すると、CPU制御I/F12は、先行リクエストをCPU20に送信し、その後、先行リクエストに対応する後続リクエストをCPU20に送信する。また、CPU制御I/F12は、リクエストの処理完了通知をCPU20から受信する。
【0023】
記憶部14は、制御部13による各種処理に必要なデータ、未完了のリクエストおよびプログラムを格納するものであり、制御担当テーブル14aを有する。制御担当テーブル14aは、リクエストの種別に対応付けて、順序保証制御を担当する装置を記憶している。なお、図3の例では、順序保証制御を担当する装置はIOC10またはCPU20であるものとする。ここで、順序保証制御とは、後続リクエストが先行リクエストを追い越すことがないように制御することをいう。
【0024】
制御担当テーブル14aは、図4に示すように、先行リクエストの種別を示す「先行リクエスト」と、後続リクエストの種別を示す「後続リクエスト」と、後続リクエストが先行リクエストを追い越すことがないように順序制御する装置を示す「順序制御担当」とを対応付けて記憶する。なお、図4において、「全DMA Write/Read」は、IOC10から先行リクエストとして発行される全てのDMA Write/Readを示している。
【0025】
ここで、順序制御担当「IOC」とは、後続リクエストが先行リクエストを追い越さないようにする順序制御を主にIOCが行うことを示し、順序制御担当「CPU&IOC」とは、順序制御を主にCPUが行うことを示している。例えば、図4に例示する制御担当テーブル14aにおける(4)の後続リクエスト「ZeroByteRead」は、図5に示すように、IOC内部で処理が完結する。このため、後続リクエスト「ZeroByteRead」がCPU20を通らず、CPUが後続リクエストである「ZeroByteRead」に対する順序制御することができないため、制御担当テーブル14aでは、「DMA Write」に後続する「ZeroByteRead」に対する順序制御担当が「IOC」となっている。
【0026】
また、図4に例示する制御担当テーブル14aにおける(3)の後続リクエスト「PIO Read」の応答は、図5に示すように、CPU20の制御部とパイプラインを通らずにCPU20内部で完結する。このため、後続リクエスト「PIO Read」がCPU20の制御部を通らず、CPUが「PIO Read」に対する順序制御することができないため、制御担当テーブル14aでは、「DMA Write」に後続する「PIO Read」に対する順序制御担当が「IOC」となっている。
【0027】
また、CPU20では、先行リクエストのライト処理(DMA Write)をカウントするカウンタを設けている。この点については、後に図6のCPU20の構成の説明で詳述するが、カウンタは、先行リクエスト「DMA Write」がパイプラインに投入されたら+1とし、そのメモリアクセスが確定したら−1とすることで、順序保証に用いられる。一方、図4に例示する制御担当テーブル14aにおける(5)の先行リクエスト「DMA Read」は、CPU20でカウントしないので、制御担当テーブル14aでは、順序制御担当が「IOC」となっている。
【0028】
制御部13は、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、プログラムや所要データによって種々の処理を実行するが、特に、リクエスト種別判定部13a、先行リクエスト発行部13b、後続リクエスト発行部13cを有する。
【0029】
リクエスト種別判定部13aは、先行リクエストの種別または後続リクエストの種別に応じて、リクエストの順序制御をIOC10が担当するかCPU20が担当するかを判定する。詳しく説明すると、リクエスト種別判定部13aは、順序保証が必要なIOリクエストを外部入力から受信すると、制御部13が発行する先行リクエストおよび後続リクエストに該当する順序制御担当を制御担当テーブル14aから検索する。つまり、リクエスト種別判定部13aは、後続リクエストの前に受信していた「先行リクエスト」と、今回受信した「後続リクエスト」とを検索キーとして用いて、これらに対応するリクエストの組を制御担当テーブルから検索し、検索されたリクエストの組に対応する「制御担当」を読み出す。
【0030】
ここで、リクエスト種別判定部13aは、順序制御担当として「IOC」を読み出した場合には、リクエストの順序制御を自分自身、つまりIOC10が担当すると判定し、その旨を後続リクエスト発行部13cに通知する。また、リクエスト種別判定部13aは、順序制御担当として「CPU&IOC」を読み出した場合には、リクエストの順序制御をIOC10に接続されたCPU20が担当すると判定し、その旨を後続リクエスト発行部13cに通知する。
【0031】
先行リクエスト発行部13bは、先行リクエストをCPU20に発行する。詳しく説明すると、先行リクエスト発行部13bは、リクエスト種別判定部13aによって順序保証が必要なIOリクエストが外部入力から受信された場合に、先行リクエストをCPU20に発行する。つまり、先行リクエスト発行部13bは、IOリクエストとして受信した、先行リクエストおよび後続リクエストの組が順序保証の必要がある場合には、先行リクエストをCPU20に発行する。
【0032】
リクエストの順序制御をCPU20が担当すると判定された場合には、後続リクエスト発行部13cは、先行リクエストの発行に続いて、後続リクエストをCPU20に発行する。この場合、IOCは、CPUが先行リクエストに対する処理を完了したか否かを確認することなく、後続リクエストをCPUに対して送信する。また、リクエストの順序制御をIOC10が担当すると判定された場合には、後続リクエスト発行部13cは、先行リクエストの処理が完了した後に、後続リクエストをCPU20に発行する。
【0033】
後続リクエスト発行部13cは、順序制御担当が「CPU&IOC」である旨の通知をリクエスト種別判定部13aから受信した場合には、後続リクエストのパケット内に1ビットの追い越し禁止フラグ(STOフラグ)を立てる。つまり、CPU20内のパイプラインでは、各種の資源の空き待ちのためリクエストがビジーリトライする場合があり、ここでの先行リクエストおよび後続リクエストの順序保証を行うためである。この点については、詳しくは、CPUの構成の説明で詳述するが、後述するCPU20の順序制御部23aは、追い越し禁止フラグ付きパケットの後続リクエストを受信すると、CPU内部で処理中の先行リクエストがメモリアクセス確定の状態になるのをバッファ24aで待機させた後、リクエスト処理部23bに後続リクエストを通知してメモリ30に送信させる。
【0034】
そして、後続リクエスト発行部13cは、ボード上の実配線長やIOCとCPUのクロック同期化を考慮して、先行リクエストの発行から十分な間隔、例えば、625MHzで20サイクルを空けて後続リクエストを発行する。つまり、後続リクエスト発行部13cは、先行リクエストの発行から十分な間隔を空けて後続リクエストを発行することで、IOバス上の順序を保証している。なお、先行リクエストと後続リクエストとの間隔は、ボード上の実際の配線長、あるいはIOCとCPUとの間のクロック同期を考慮して決定する。
【0035】
また、後続リクエスト発行部13cは、順序制御担当が「IOC」である旨の通知をリクエスト種別判定部13aから受信した場合には、先行リクエストの処理がCPUで完了した後に、後続リクエストをCPU20に発行する。
【0036】
[CPUの構成]
次に、図6〜図7を用いて、図1に示したCPU20の構成を説明する。図6は、実施例1に係るCPUの構成を示すブロック図である。図7は、レイテンシ短縮を説明するための図である。
【0037】
図6に示すように、CPU20は、IOC制御I/F21、メモリ制御I/F22、制御部23、記憶部24を有する。IOC制御I/FはIOバスを介してIOC10と接続されており、メモリ制御I/Fはメモリ30と接続されている。以下にこれらの各部の処理を説明する。
【0038】
IOC制御I/F21は、接続される外部装置との間で入出力する各種情報に関する通信を制御する。例えば、IOC制御I/F21は、リクエストをIOC10から受信し、受信したリクエストに対する処理が完了したことを示すリクエスト完了通知をIOC10へ送信する。
【0039】
メモリ制御I/F22は、接続されるメモリ30との間でやり取りする各種情報に関する通信を制御する。詳しく説明すると、メモリ制御I/F22は、リクエストをメモリ30に送信し、送信したリクエストに対する処理完了通知をメモリ30から受信する。
【0040】
記憶部24は、制御部23による各種処理に必要なデータおよびプログラムを格納するものである。記憶部24は、バッファ24aを有する。バッファ24aは、IOC10から受信した後続リクエストを後述する順序制御部23aが一時的に格納させる。
【0041】
制御部23は、各種の処理手順などを規定したプログラムおよび所要データを格納するための内部メモリを有し、プログラムや所要データによって種々の処理を実行する。制御部は、順序制御部23a、リクエスト処理部23b、送信エラー検出部23cを有する。
【0042】
順序制御部23aは、CPUが順序制御担当である場合には、メモリ制御I/F22を介して先行リクエストをメモリ30に送信し、先行リクエストの処理が完了した後に、後続リクエストをメモリ30に送信するように、リクエストの送信順序を制御する。また、IOC10が順序制御担当である場合には、先行リクエストに基づくメモリアクセスが確定した後、メモリアクセス確定の応答をIOC制御I/F21を介してIOC10に送信する。
【0043】
詳しく説明すると、順序制御部23aは、IOC10から先行リクエストを受信すると、受信した先行リクエストをリクエスト処理部23に通知してメモリ30に送信させる。そして、順序制御部23aは、IOC10から後続リクエストを受信すると、受信した後続リクエストのパケット内に追い越し禁止フラグが立ててあるかを判定する。
【0044】
受信した後続リクエストのパケットに追い越し禁止フラグが立ててある場合、順序制御部23aは後続リクエストをバッファ24aに格納し、CPUで処理中の先行リクエストに基づくメモリアクセスが確定の状態になるまで後続リクエストをバッファ24aに待機させた後、リクエスト処理部23bに後続リクエストを通知してメモリ30に送信させる。
【0045】
詳細な処理を説明すると、順序制御部23aは、ライト処理(DMA Write)に対応する先行リクエストをカウントするカウンタを有し、「DMA Write」に対応するリクエストがパイプラインに投入さる毎に計数値を+1とし、パイプラインに投入したリクエストに基づくメモリアクセスが確定したらカウンタの計数値を−1として、リクエスト間の順序保証を行う。つまり、先行リクエストのIDやリクエスト種およびその完了状態を記録するような大規模なバッファを設ける必要が無く、先行リクエストおよび後続リクエストの順序制御を可能にしている。
【0046】
リクエスト処理部23bは、リクエストをパイプラインに投入し、メモリ30に対してアクセス要求を行う。詳しく説明すると、リクエスト処理部23bは、順序制御部23aから先行リクエストを受信すると、受信した先行リクエストをパイプラインに投入し、メモリ30に対してアクセス要求を行う。
【0047】
そして、リクエスト処理部23bは、先行リクエストの処理完了の通知をメモリ30から受信し、順序制御部23aから後続リクエストを受信すると、受信した後続リクエストをパイプラインに投入し、メモリ30に対してアクセス要求を行う。その後、リクエスト処理部23bは、処理完了の通知をメモリ30から受信する。
【0048】
このように、システムボード1は、リクエストの種別に応じてCPU20が順序制御を行うことで、IOC10が先行リクエストの処理完了を待つ時間を短縮する。ここで、図7を用いてレイテンシ短縮について説明する。なお、図7は処理の順を追ったものであり、IO―BUSやIOCが複数記載されているが、複数存在するものではない。また、縦点線で区切られた一つの区切りは、1クロックサイクルを示している。なお、便宜上、図は上段と下段で分かれているが、図中の矢印に示すように、上段から下段に続いて時間が連続しているものとする。
【0049】
詳しく説明すると、システムボード1は、図7に示すように、CPU20が順序保証を行う場合には、IOC10が順序保証を行う場合と比較して、メモリアクセス確定の通知をIOC10まで転送する処理(図7では「転送」および「IO―BUS」と記載)、IOC10内部で順序制御する処理(図7では「IOC」と記載)、CPU20に向けて転送する処理(図7では、「IO―BUS」と記載)を行なう分のレイテンシが短縮でき、大幅な性能向上ができる。
【0050】
送信エラー検出部23cは、IOCバス上で発生した送信エラーを検出する。詳しく説明すると、送信エラー検出部23cは、送信エラーを検出した場合に、IOC10に対して送信エラーが発生した旨およびエラーが発生したバス番号をIOC10に通知する。そして、送信エラー検出部23cは、送信エラー発生後にCPUが受信する、順序保証が必要なリクエスト(図4の例では、(1)、(2)、(6)のリクエスト)を全て破棄し、IOC10が順序保証するリクエスト(図4の例では、(3)、(4)、(5)のリクエスト)を通常通り処理するように順序制御部23aに指示する。
【0051】
そして、送信エラー検出部23cは、エラー発生前に受信した全てのリクエストの処理が完了すると、送信エラー発生後にCPU20が受信した順序保証が必要なリクエストの再送要求をIOC10に送信する。その後、送信エラー検出部23cは、一定時間経過後、バス縮退を解除する。
【0052】
[システムボードによる処理]
次に、図8および図9を用いて、実施例1に係るシステムボードによる処理を説明する。図8は、実施例1に係るシステムボードによるリクエスト順序保証処理の流れを示すシーケンス図である。図9は、実施例1に係るシステムボードによるエラー発生時におけるリクエスト順序保証処理の流れを示すシーケンス図である。
【0053】
図8に示すように、システムボード1のIOC10は、順序保証が必要なリクエストを外部入力から受信すると(ステップS101)、受信したリクエストの種別を判別し、判別したリクエスト種別から、リクエストの順序制御をIOC10が担当するかCPU20が担当するかを判定する(ステップS102)。なお、以下の図8の例では、リクエストの順序制御をCPU20が担当する場合のリクエスト順序保証処理について説明する。
【0054】
そして、IOC10は、先行リクエストをCPU20に発行する(ステップS103)。続いて、IOC10は、後続リクエストのパケット内に1ビットの追い越し禁止フラグ(STOフラグ)を立て、先行リクエストの発行から十分な間隔、例えば、625MHzで20サイクルを空けてCPUに対して後続リクエストを発行する(ステップS104)。
【0055】
CPU20は、IOC10から先行リクエストを受信すると、受信した先行リクエストをパイプラインに投入し(ステップS105)、メモリ30に対してアクセス要求を行う(ステップS106)。その後、CPU20は、メモリ30から処理完了を受信し(ステップS107)、先行リクエストの処理が完了したと判断すると、後続リクエストをパイプラインに投入する(ステップS108)。
【0056】
そして、CPU20は、後続リクエストのアクセス要求をメモリ30に対して行い(ステップS109)、メモリ30が後続リクエストに対応する処理を完了したときにメモリ30から処理完了を受信する(ステップS110)。
【0057】
次に、実施例1に係るシステムボード1によるエラー発生時におけるリクエスト順序保証処理について図9を用いて説明する。図9に示すように、CPU20は、送信エラーを検出すると(ステップS201)、送信エラーが発生した旨、およびエラーが発生したバス番号をIOC10に通知する(ステップS202)。
【0058】
IOC10は、送信エラーが発生した旨の通知をCPUから受信すると、全リクエストの発行を中断する(ステップS203)。また、CPU20は、送信エラー発生後にIOCから受信するリクエストのうち、CPUが順序保証するリクエストを全て破棄し(ステップS204)、IOC10が順序保証するリクエストを通常通り処理するように順序制御部23aに指示する(ステップS205)。
【0059】
続いて、CPU20は、エラー発生前にIOCから受信した全てのリクエストの処理が完了すると(ステップS206)、パケットの再送要求をIOC10に送信する(ステップS207)。そして、IOC10は、再送要求をCPUから受信すると、溜まっている未完了のリクエストを古いものから順に送出する(ステップS208)。この際に、IOC10は、送信エラーの発生したIOバスを使用しない、つまり送信エラーを発生したIOバスを一時的に縮退させ、縮退したバスとは異なるバスを用いて、リクエストを再送する。
【0060】
その後、CPU20は、一定期間リクエストを処理し(ステップS209)、一定期間経過後にIOバス縮退を解除する旨をIOC10に通知し、通常の処理に復帰する。
【0061】
[実施例1の効果]
上述してきたように、システムボード1では、IOC10が、先行リクエストの種別または後続リクエストの種別に応じて、リクエストの順序制御をIOC10が担当するかCPU20が担当するかを判定する。そして、リクエストの順序制御をCPU20が担当すると判定された場合には、IOC10が、先行リクエストに続いて、CPU20による先行リクエストの処理完了を待たずに、先行リクエスト送信後すぐに、後続リクエストをCPU20に送信する。そして、CPU20が、先行リクエストをメモリ30に送信し、先行リクエストの処理が完了した後に、後続リクエストをメモリ30に送信するように順序を制御する。このため、IOC10がCPU20による先行リクエストの処理完了を待つ時間を短縮して、後続リクエストをCPU20に発行することができる。この結果、リクエストを受け付けてから後続リクエストの処理が完了するまでの時間(レイテンシ)を短縮し、性能を向上させることが可能である。
【0062】
また、実施例1によれば、システムボード1では、後続リクエストがCPU20の処理部23を通らないものである場合には、リクエストの順序制御をIOC10が担当するものとして判定するので、CPU20が順序制御を行うことができないリクエストについては、IOC10に順序制御を担当させることが可能である。
【0063】
また、実施例1によれば、システムボード1では、先行リクエストを送信してから、所定の間隔を空けた後、後続リクエストをCPU20に送信するので、先行リクエストの発行から十分な間隔を空けた後、後続リクエストを発行することにより、IOバス上の順序を確実に保証することが可能である。
【0064】
また、実施例1によれば、システムボード1では、リクエストの順序制御をIOC10が担当すると判定された場合には、IOC10が後続リクエストに追い越し禁止フラグを付加してCPU20に送信する。そして、CPU20が追い越し禁止フラグが付加された後続リクエストを受信すると、先行リクエストの処理が完了した後に、追い越し禁止フラグが付加された後続リクエストをメモリ30に送信する。このため、例えば、先行リクエストのメモリアクセス完了を管理するカウンタをCPU20に設け、カウンタに応じて追い越し禁止フラグが付加された後続リクエストの順序制御を行うことができる。この結果、先行リクエストのIDやリクエスト種およびその完了状態を記録するような大規模なバッファを設ける必要が無く、先行リクエストおよび後続リクエストの順序制御を簡易に行うことが可能である。
【0065】
また、実施例1によれば、システムボード1では、先行リクエストまたは後続リクエストの送信エラーを検出し、エラーが発生したIOバスをIOC10に通知し、リクエストの順序制御をCPU20が担当すると判定された先行リクエストおよび後続リクエストを破棄する。そして、IOCは、通知されたエラーが発生したIOバスを使わずに、先行リクエストおよび後続リクエストをCPU20に送信する。このため、エラー発生時においても、適切に順序制御を行うことが可能である。
【実施例2】
【0066】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では実施例2として本発明に含まれる他の実施例を説明する。
【0067】
(1)IOバス上での順序保証
上記の実施例1では、IOバス上での順序を保証するために、先行リクエストの発行から十分な間隔、例えば、625MHzで20サイクルを空けて後続リクエストを発行する場合を説明したが、本発明はこれに限定されるものではない。IOバスは複数本、例えば4本設けられるが、実施例2ではIOバス上での順序を保証するために、先行リクエストを送信したIOバスと同一のバスで後続リクエストを送信する。
【0068】
実施例2に係るシステムボードのIOCは、図10に示すように、先行リクエストをCPUに発行した後(ステップS303)、後続リクエストのパケット内に追い越し禁止フラグを立て、先行リクエストの送信したバスと同一のバスから後続リクエストをCPUに対して発行する(ステップS304)。
【0069】
実施例2に係るシステムボードのIOCは、先行リクエストを発行する際に、リクエスト伝送に使用するバスを一意に識別するバス番号を記録しておく。そして、IOCは、CPUに後続リクエストを発行する際に、先行リクエストの中に後続リクエストが追い越してはならないリクエストがあれば、その先行リクエストを送信したバスを介して後続リクエストを発行する。また、追い越してはいけない先行リクエストが複数あった場合には、最後に送出した先行リクエストの送信に用いたバスと同一バスを後続リクエストの送信に使用する。
【0070】
このように、先行リクエストを送信したIOバスと同一のIOバスで、後続リクエストを送信するので、後続リクエストが先行リクエストを追い越すことがなくなる結果、IOバス上のリクエスト間の順序を確実に保証することが可能である。
【0071】
(2)システム構成等
また、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、先行リクエスト発行部13bと後続リクエスト発行部13cを統合してもよい。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【0072】
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【0073】
(3)プログラム
なお、本実施例で説明したリクエスト順序制御方法は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【0074】
以上の実施例1〜2を含む実施形態に関し、更に以下の付記を開示する。
【0075】
(付記1)順序保証が必要なリクエストについて、外部入出力装置によって発行された先行リクエストを演算装置を介して記憶装置に送信し、当該先行リクエストの後に発行される後続リクエストが前記記憶装置に送信される順序を制御するリクエスト順序制御システムであって、
前記外部入出力装置は、
前記先行リクエストの種別または前記後続リクエストの種別に応じて、リクエストの順序制御を前記外部入出力装置が担当するか前記演算装置が担当するかを判定する制御担当判定部と、
前記制御担当判定部によって前記リクエストの順序制御を前記演算装置が担当すると判定された場合には、前記先行リクエストに続いて、後続リクエストを前記演算装置に送信するリクエスト送信部と、
を備え、
前記演算装置は、
前記制御担当判定部によって前記リクエストの順序制御を前記演算装置が担当すると判定された場合には、前記先行リクエストを前記記憶装置に送信し、当該先行リクエストの処理が完了した後に、後続リクエストを前記記憶装置に送信するように順序を制御する順序制御部と、
を備えることを特徴とするリクエスト順序制御システム。
【0076】
(付記2)前記制御担当判定部は、前記後続リクエストが前記演算装置を通らないものである場合には、リクエストの順序制御を前記外部入出力装置が担当するように判定することを特徴とする付記1に記載のリクエスト順序制御システム。
【0077】
(付記3)前記リクエスト送信部は、前記先行リクエストを送信してから、所定の間隔を空けた後、前記後続リクエストを前記演算装置に送信することを特徴とする付記1または2に記載のリクエスト順序制御システム。
【0078】
(付記4)前記リクエスト送信部は、前記先行リクエストを送信した通信経路と同一の通信経路で、前記後続リクエストを送信することを特徴とする付記1または2に記載のリクエスト順序制御システム。
【0079】
(付記5)前記リクエスト送信部は、前記制御担当判定部によって前記リクエストの順序制御を前記演算装置が担当すると判定された場合には、前記後続リクエストに追い越し禁止フラグを付加して送信し、
前記順序制御部は、前記追い越し禁止フラグが付加された後続リクエストを受信すると、前記先行リクエストの処理が完了した後に、当該追い越し禁止フラグが付加された後続リクエストを前記記憶装置に送信することを特徴とする付記1〜3のいずれか一つに記載のリクエスト順序制御システム。
【0080】
(付記6)前記演算装置は、前記先行リクエストまたは前記後続リクエストの送信エラーを検出し、当該エラーが発生した通信経路を前記外部入出力装置に通知する送信エラー検出部をさらに備え、
前記順序制御部は、前記制御担当判定部によって前記リクエストの順序制御を前記演算装置が担当すると判定された先行リクエストおよび後続リクエストを破棄し、
前記リクエスト送信部は、前記エラー検出部によって通知された前記通信経路を使わずに、前記先行リクエストおよび前記後続リクエストを前記演算装置に送信することを特徴とする付記1〜5のいずれか一つに記載のリクエスト順序制御システム。
【0081】
(付記7)順序保証が必要なリクエストについて、外部入出力装置によって発行された先行リクエストを演算装置を介して記憶装置に送信し、当該先行リクエストの後に発行される後続リクエストが前記記憶装置に送信される順序を制御するリクエスト順序制御方法であって、
前記外部入出力装置が、前記先行リクエストの種別または前記後続リクエストの種別に応じて、リクエストの順序制御を前記外部入出力装置が担当するか前記演算装置が担当するかを判定する制御担当判定ステップと、
前記外部入出力装置が、前記制御担当判定ステップによって前記リクエストの順序制御を前記演算装置が担当すると判定された場合には、前記先行リクエストに続いて、後続リクエストを前記演算装置に送信するリクエスト送信ステップと、
前記演算装置が、前記リクエストの順序制御を前記演算装置が担当すると判定された場合には、前記先行リクエストを前記記憶装置に送信し、当該先行リクエストの処理が完了した後に、後続リクエストを前記記憶装置に送信するように順序を制御する順序制御ステップと、
を含んだことを特徴とするリクエスト順序制御方法。
【0082】
(付記8)前記制御担当判定ステップは、前記後続リクエストが前記演算装置を通らないものである場合には、リクエストの順序制御を前記外部入出力装置が担当するように判定することを特徴とする付記7に記載のリクエスト順序制御方法。
【0083】
(付記9)前記リクエスト送信ステップは、前記先行リクエストを送信してから、所定の間隔を空けた後、前記後続リクエストを前記演算装置に送信することを特徴とする付記7または8に記載のリクエスト順序制御方法。
【0084】
(付記10)前記リクエスト送信ステップは、前記先行リクエストを送信した通信経路と同一の通信経路で、前記後続リクエストを送信することを特徴とする付記7または8に記載のリクエスト順序制御方法。
【0085】
(付記11)前記リクエスト送信ステップは、前記制御担当判定ステップによって前記リクエストの順序制御を前記演算装置が担当すると判定された場合には、前記後続リクエストに追い越し禁止フラグを付加して送信し、
前記順序制御ステップは、前記追い越し禁止フラグが付加された後続リクエストを受信すると、前記先行リクエストの処理が完了した後に、当該追い越し禁止フラグが付加された後続リクエストを前記記憶装置に送信することを特徴とする付記7〜10のいずれか一つに記載のリクエスト順序制御方法。
【0086】
(付記12)前記演算装置が、前記先行リクエストまたは前記後続リクエストの送信エラーを検出し、当該エラーが発生した通信経路を前記外部入出力装置に通知する送信エラー検出ステップをさらに含み、
前記順序制御ステップは、前記制御担当判定ステップによって前記リクエストの順序制御を前記演算装置が担当すると判定された先行リクエストおよび後続リクエストを破棄し、
前記リクエスト送信ステップは、前記エラー検出ステップによって通知された前記通信経路を使わずに、前記先行リクエストおよび前記後続リクエストを前記演算装置に送信することを特徴とする付記7〜11のいずれか一つに記載のリクエスト順序制御方法。
【0087】
(付記13)順序保証が必要なリクエストについて、外部入出力装置によって発行された先行リクエストを演算装置を介して記憶装置に送信し、当該先行リクエストの後に発行される後続リクエストが前記記憶装置に送信される順序を制御するリクエスト順序制御方法をコンピュータに実行させるクエスト順序制御プログラムであって、
前記外部入出力装置としてのコンピュータに、
前記先行リクエストの種別または前記後続リクエストの種別に応じて、リクエストの順序制御を前記外部入出力装置が担当するか前記演算装置が担当するかを判定する制御担当判定手順と、
前記制御担当判定手順によって前記リクエストの順序制御を前記演算装置が担当すると判定された場合には、前記先行リクエストに続いて、後続リクエストを前記演算装置に送信するリクエスト送信手順と、
を実行させ、
前記演算装置としてのコンピュータに、
前記リクエストの順序制御を前記演算装置が担当すると判定された場合には、前記先行リクエストを前記記憶装置に送信し、当該先行リクエストの処理が完了した後に、後続リクエストを前記記憶装置に送信するように順序を制御する順序制御手順と、
を実行させることを特徴とするリクエスト順序制御プログラム。
【0088】
(付記14)前記リクエスト送信手順は、前記制御担当判定手順によって前記リクエストの順序制御を前記演算装置が担当すると判定された場合には、前記後続リクエストに追い越し禁止フラグを付加して送信し、
前記順序制御手順は、前記追い越し禁止フラグが付加された後続リクエストを受信すると、前記先行リクエストの処理が完了した後に、当該追い越し禁止フラグが付加された後続リクエストを前記記憶装置に送信することを特徴とする付記13に記載のリクエスト順序制御プログラム。
【0089】
(付記15)前記演算装置としてのコンピュータに、前記先行リクエストまたは前記後続リクエストの送信エラーを検出し、当該エラーが発生した通信経路を前記外部入出力装置に通知する送信エラー検出手順をさらに実行させ、
前記順序制御手順は、前記制御担当判定手順によって前記リクエストの順序制御を前記演算装置が担当すると判定された先行リクエストおよび後続リクエストを破棄し、
前記リクエスト送信手順は、前記エラー検出手順によって通知された前記通信経路を使わずに、前記先行リクエストおよび前記後続リクエストを前記演算装置に送信することを特徴とする付記13または14に記載のリクエスト順序制御プログラム。
【0090】
(付記16)外部の装置に接続される入出力部と、前記入出力部に接続され、前記入出力装置からのリクエストに応じた処理を実行する処理部とをそなえた情報処理装置であって、
前記入出力部は、
発行されたリクエストの種別を判別し、先行する先行リクエストと、前記先行リクエストの後に発行される後続リクエストとの種別に応じて、前記先行リクエストと前記後続リクエストとの順序制御を、前記入出力部が担当するか、あるいは前記処理部が担当するかを判定する判定部と、
前記判定部によって前記順序制御を前記処理部が担当すると判定された場合、前記処理部への先行リクエストの送信に続いて、前記処理部による前記先行リクエストに対する処理完了を待たずに、前記後続リクエストを前記処理部に送信する送信部と、
を備えたことを特徴とする情報処理装置。
【0091】
(付記17)前記情報処理装置において、
前記判定部は更に、前記後続リクエストの順序制御が前記処理部で行われるか否かを示す情報を前記後続リクエストに付加し、
前記処理部は、前記入出力部から受信した後続リクエストに前記情報が付加されているか否かを判定し、前記後続リクエストに前記情報が付加されていた場合には、前記入出力部から受信した前記先行リクエスト及び前記後続リクエストの順序制御を行なう制御部を備えることを特徴とする付記16に記載の情報処理装置。
【0092】
(付記18)前記情報処理装置は更に、前記先行リクエストの種別と、前記後続リクエストの種別と、前記順序制御を実行するのが前記処理部であるか否かを示す識別情報とを対応付けて記憶する記憶部を備え、
前記判定部は、前記リクエストの種別に基づいて前記記憶部を参照し、前記順序制御を前記処理部が実行するか否かを判別することを特徴とする付記16に記載の情報処理装置。
【図面の簡単な説明】
【0093】
【図1】実施例1に係るシステムボードの構成を示すブロック図である。
【図2】IOCからメモリまでのパケット経路を示す図である。
【図3】実施例1に係るIOCの構成を示すブロック図である。
【図4】制御担当テーブルの一例を説明するための図である。
【図5】IOCからメモリまでのパケット経路を説明するための図である。
【図6】実施例1に係るCPUの構成を示すブロック図である。
【図7】レイテンシ短縮を説明するための図である。
【図8】実施例1に係るシステムボードによるリクエスト順序保証処理の流れを示すシーケンス図である。
【図9】実施例1に係るシステムボードによるエラー発生時におけるリクエスト順序保証処理の流れを示すシーケンス図である。
【図10】実施例2に係るシステムボードによるリクエスト順序保証処理の流れを示すシーケンス図である。
【図11】従来技術を説明するための図である。
【図12】従来技術を説明するための図である。
【図13】従来技術を説明するための図である。
【符号の説明】
【0094】
1 システムボード
10 IOC
11 外部入出力制御I/F
12 CPU制御I/F
13 制御部
13a リクエスト種別判定部
13b 先行リクエスト発行部
13c 後続リクエスト発行部
14 記憶部
14a 制御担当テーブル
20 CPU
21 IOC制御I/F
22 メモリ制御I/F
23 制御部
23a 順序制御部
23b リクエスト処理部
23c 送信エラー検出部
24 記憶部
24a バッファ
30 メモリ

【特許請求の範囲】
【請求項1】
順序保証が必要なリクエストについて、外部入出力装置によって発行された先行リクエストを演算装置を介して記憶装置に送信し、当該先行リクエストの後に発行される後続リクエストが前記記憶装置に送信される順序を制御するリクエスト順序制御システムであって、
前記外部入出力装置は、
前記先行リクエストの種別または前記後続リクエストの種別に応じて、リクエストの順序制御を前記外部入出力装置が担当するか前記演算装置が担当するかを判定する制御担当判定部と、
前記制御担当判定部によって前記リクエストの順序制御を前記演算装置が担当すると判定された場合には、前記先行リクエストに続いて、後続リクエストを前記演算装置に送信するリクエスト送信部と、
を備え、
前記演算装置は、
前記制御担当判定部によって前記リクエストの順序制御を前記演算装置が担当すると判定された場合には、前記先行リクエストを前記記憶装置に送信し、当該先行リクエストの処理が完了した後に、後続リクエストを前記記憶装置に送信するように順序を制御する順序制御部と、
を備えることを特徴とするリクエスト順序制御システム。
【請求項2】
前記制御担当判定部は、前記後続リクエストが前記演算装置を通らないものである場合には、リクエストの順序制御を前記外部入出力装置が担当するように判定することを特徴とする請求項1に記載のリクエスト順序制御システム。
【請求項3】
前記リクエスト送信部は、前記先行リクエストを送信してから、所定の間隔を空けた後、前記後続リクエストを前記演算装置に送信することを特徴とする請求項1または2に記載のリクエスト順序制御システム。
【請求項4】
前記リクエスト送信部は、前記先行リクエストを送信した通信経路と同一の通信経路で、前記後続リクエストを送信することを特徴とする請求項1または2に記載のリクエスト順序制御システム。
【請求項5】
前記リクエスト送信部は、前記制御担当判定部によって前記リクエストの順序制御を前記演算装置が担当すると判定された場合には、前記後続リクエストに追い越し禁止フラグを付加して送信し、
前記順序制御部は、前記追い越し禁止フラグが付加された後続リクエストを受信すると、前記先行リクエストの処理が完了した後に、当該追い越し禁止フラグが付加された後続リクエストを前記記憶装置に送信することを特徴とする請求項1〜3のいずれか一つに記載のリクエスト順序制御システム。
【請求項6】
前記演算装置は、前記先行リクエストまたは前記後続リクエストの送信エラーを検出し、当該エラーが発生した通信経路を前記外部入出力装置に通知する送信エラー検出部をさらに備え、
前記順序制御部は、前記制御担当判定部によって前記リクエストの順序制御を前記演算装置が担当すると判定された先行リクエストおよび後続リクエストを破棄し、
前記リクエスト送信部は、前記エラー検出部によって通知された前記通信経路を使わずに、前記先行リクエストおよび前記後続リクエストを前記演算装置に送信することを特徴とする請求項1〜5のいずれか一つに記載のリクエスト順序制御システム。
【請求項7】
順序保証が必要なリクエストについて、外部入出力装置によって発行された先行リクエストを演算装置を介して記憶装置に送信し、当該先行リクエストの後に発行される後続リクエストが前記記憶装置に送信される順序を制御するリクエスト順序制御方法であって、
前記外部入出力装置が、前記先行リクエストの種別または前記後続リクエストの種別に応じて、リクエストの順序制御を前記外部入出力装置が担当するか前記演算装置が担当するかを判定する制御担当判定ステップと、
前記外部入出力装置が、前記制御担当判定ステップによって前記リクエストの順序制御を前記演算装置が担当すると判定された場合には、前記先行リクエストに続いて、後続リクエストを前記演算装置に送信するリクエスト送信ステップと、
前記演算装置が、前記リクエストの順序制御を前記演算装置が担当すると判定された場合には、前記先行リクエストを前記記憶装置に送信し、当該先行リクエストの処理が完了した後に、後続リクエストを前記記憶装置に送信するように順序を制御する順序制御ステップと、
を含んだことを特徴とするリクエスト順序制御方法。
【請求項8】
前記リクエスト送信ステップは、前記先行リクエストを送信してから、所定の間隔を空けた後、前記後続リクエストを前記演算装置に送信することを特徴とする請求項7に記載のリクエスト順序制御方法。
【請求項9】
前記リクエスト送信ステップは、前記先行リクエストを送信した通信経路と同一の通信経路で、前記後続リクエストを送信することを特徴とする請求項7に記載のリクエスト順序制御方法。
【請求項10】
順序保証が必要なリクエストについて、外部入出力装置によって発行された先行リクエストを演算装置を介して記憶装置に送信し、当該先行リクエストの後に発行される後続リクエストが前記記憶装置に送信される順序を制御するリクエスト順序制御方法をコンピュータに実行させるリクエスト順序制御プログラムであって、
前記外部入出力装置としてのコンピュータに、
前記先行リクエストの種別または前記後続リクエストの種別に応じて、リクエストの順序制御を前記外部入出力装置が担当するか前記演算装置が担当するかを判定する制御担当判定手順と、
前記制御担当判定手順によって前記リクエストの順序制御を前記演算装置が担当すると判定された場合には、前記先行リクエストに続いて、後続リクエストを前記演算装置に送信するリクエスト送信手順と、
を実行させ、
前記演算装置としてのコンピュータに、
前記リクエストの順序制御を前記演算装置が担当すると判定された場合には、前記先行リクエストを前記記憶装置に送信し、当該先行リクエストの処理が完了した後に、後続リクエストを前記記憶装置に送信するように順序を制御する順序制御手順と、
を実行させることを特徴とするリクエスト順序制御プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate


【公開番号】特開2010−118020(P2010−118020A)
【公開日】平成22年5月27日(2010.5.27)
【国際特許分類】
【出願番号】特願2008−292721(P2008−292721)
【出願日】平成20年11月14日(2008.11.14)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】