JP5402698B2 - 記憶装置への情報蓄積制御方法 - Google Patents

記憶装置への情報蓄積制御方法 Download PDF

Info

Publication number
JP5402698B2
JP5402698B2 JP2010027577A JP2010027577A JP5402698B2 JP 5402698 B2 JP5402698 B2 JP 5402698B2 JP 2010027577 A JP2010027577 A JP 2010027577A JP 2010027577 A JP2010027577 A JP 2010027577A JP 5402698 B2 JP5402698 B2 JP 5402698B2
Authority
JP
Japan
Prior art keywords
work
queue
completion
area
request
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010027577A
Other languages
English (en)
Other versions
JP2010157254A (ja
Inventor
敏章 佐伯
寛嗣 照屋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2010027577A priority Critical patent/JP5402698B2/ja
Publication of JP2010157254A publication Critical patent/JP2010157254A/ja
Application granted granted Critical
Publication of JP5402698B2 publication Critical patent/JP5402698B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Description

本発明は、キューに蓄積された処理要求を実行する際の制御方法およびプログラム、またこれらを利用したシステムに関する。
処理要求を含む処理要求情報を発行する発行側装置とその処理要求情報を受信し、処理要求を実行し、実行結果を発行側装置に送信する受信側装置とのインタフェースとして、2種類のキューが使用されることがある。一方のキューには、処理要求情報が待ち行列として蓄積され、キューの先頭の処理要求から順に受信側装置により実行される。
他方のキューには、処理要求が完了したことを示す情報(処理完了情報)が待ち行列として蓄積され、キューの先頭の処理完了情報から順に発行側装置により回収され、処理完了時のステータス確認等が行われる。例えば、コンピュータと周辺機器を接続するための次世代の入出力(I/O)技術として提案されるインフィニバンド(Infiniband)(非特許文献1参照)やVIA(Virtual Interface Architecture)(非特許文献2参照)などのアーキテクチャにおいて、前述した2種類のキューを用いた処理要求の実行が行われる。
Infiniband(SM) Trade Association、"Infiniband(TM) Architecture Specification Volume 1 Release 1.1"、P.80、3.2.1節Queuing、[online]、Final, November 6,2002、[平成15年1月21日検索]、インターネット<http://www.infinibandta.org/specs/> Compaq Computer Corp., Intel Corporation, Microsoft Corporation、"Virtual Interface Architecture Specification"、P.11、2.1.節 VI Architecture Components、[online]、Draft Revision 1.0, December 4, 1997、[平成15年1月21日検索]、インターネット<fttp://download.intel.com/design/servers/vi/san_10.pdf>
しかしながら、前述した2種類のキューをインタフェースとして処理要求を実行する場合、各キューへ処理要求情報あるいは処理完了情報を蓄積する際に、そのキューに蓄積された処理要求情報あるいは処理完了情報の蓄積状況が判断されないことが多い。そのため、各キューの蓄積可能データ数を超えてしまい、キューが溢れる(オーバフローする)場合があった。
キューがオーバフローすると、処理要求の実行が停止し、前述の発行側装置あるいは受信側装置に復旧処理という新たな処理をさせることになり、装置全体としての性能低下が避けられず問題である。当然のことながら、復旧処理をさせるには、ソフトウエアまたはハードウエアによる実装を必要とする。また、蓄積可能データ数を大きくするために、より大きな蓄積領域を確保して各キューのサイズを大きくすることも可能だが、むやみに大きく取られたキューは通常時その一部しか使用されず無駄が発生していた。
そこで、本発明は、以上に述べた課題に鑑み、2種類のキューをインタフェースとして介在させキューに蓄積された処理要求を実行する場合に各キューを溢れさせないための情報蓄積制御方法を提供することを目的とする。また、両者を組み合わせて使用することにより、両キューを共に溢れさせないことも可能である。またハードウエアは実装コストの低減と高性能を実現するために実装を単純化する必要があり、そのためソフトウエアによる実装で実現できることが望ましい。
上記課題を解決するため、処理要求情報が蓄積される第一の領域を設定する工程と、処理要求の完了を示す情報である処理完了情報が蓄積される第二の領域を設定する工程と、前記第一の領域に対応するセマフォ変数の初期値を前記第一の領域に蓄積可能な情報数の最大数として設定する工程と、前記第一の領域に対応するセマフォ変数の値から1を減算した値が正の値か判定し、正の値であれば、前記第一の領域に前記処理要求情報を追加し、前記第一の領域に対応するセマフォ変数の値から1を減算した値を前記第一の領域に対応するセマフォ変数として更新する工程と、前記要求された処理が完了した場合、該処理要求を特定する情報と前記処理完了情報を対応付けて前記第二の領域に蓄積する工程と、前記第二の領域に前記処理完了情報が蓄積されているか判定し、蓄積されていれば、前記第一の領域に対応するセマフォ変数に1を加算した値を前記第一の領域に対応するセマフォ変数として更新し、前記処理完了情報を1つ削除する工程を有することを特徴とする情報蓄積制御方法を提供する。
この場合において、前記第二の領域に蓄積可能な情報数の最大数を前記第一の領域に蓄積可能な情報数の最大数以上に設定することも可能である。また、前記第一の領域、前記第二の領域に共にセマフォ変数を設定することも可能である。
また、上記課題は、処理要求情報が蓄積される複数の第一の領域を設定する工程と、処理要求の完了を示す情報である処理完了情報が蓄積される第二の領域を設定する工程と、前記複数の第一の領域にそれぞれ対応するセマフォ変数の初期値を前記複数の第一の領域にそれぞれ蓄積可能な情報数の最大数として設定する工程と、前記複数の第一の領域のうち1つを選択し、前記選択された第一の領域に対応するセマフォ変数の値から1を減算した値が正の値か判定し、正の値であれば、前記選択された第一の領域に処理要求情報を追加し、前記選択された第一の領域と前記処理要求を特定する情報を対応付けて対応表に蓄積し、前記選択された第一の領域に対応するセマフォ変数の値から1を減算した値を前記選択された第一の領域に対応するセマフォ変数として更新する工程と、前記処理要求が完了した場合、該処理要求を特定する情報を前記処理完了情報と対応付けて前記第二の領域に蓄積する工程と、前記第二の領域に前記処理完了情報が蓄積されているか判定し、蓄積されていれば、前記処理完了情報を1つ読み出し、前記読み出された処理完了情報に対応する前記処理要求を特定し、前記対応表を参照して該特定された処理要求が蓄積された前記第一の領域を特定し、該特定された第一の領域に対応するセマフォ変数に1を加算した値を前記特定された第一の領域に対応するセマフォ変数として更新し、前記読み出された処理完了情報を削除する工程を有することを特徴とする情報蓄積制御方法を提供することにより解決される。
この場合において、前記第二の領域に蓄積可能な情報数の最大数を各第一の領域に蓄積可能な情報数の最大数の総和以上に設定することも可能である。さらに、複数の第一の領域のそれぞれと前記第二の領域にそれぞれセマフォ変数を設定することも可能である。
また、上記課題は、処理要求情報が蓄積される第一の領域と、処理要求の完了を示す情報である処理完了情報が前記処理要求を特定する情報と対応付けられ蓄積される第二の領域と、前記第一の領域を特定する情報とセマフォ変数が対応付けられ蓄積されるセマフォ変数表とが格納される蓄積部と、前記蓄積部を制御する制御部とを有する装置において実行されるプログラムであって、前記制御部に、前記第一の領域に対応するセマフォ変数の初期値を前記第一の領域に蓄積可能な情報数の最大数として設定させる工程と、前記第一の領域に対応するセマフォ変数の値から1を減算した値が正の値か判定させ、正の値であれば、前記第一の領域に対応するセマフォ変数の値から1を減算した値を前記第一の領域に対応するセマフォ変数として前記セマフォ変数表を更新させ、前記第一の領域へ前記処理要求情報を追加させる工程と、前記第二の領域に前記処理完了情報が蓄積されているか判定させ、蓄積されていれば、前記第一の領域に対応するセマフォ変数に1を加算した値を前記第一の領域に対応するセマフォ変数として前記セマフォ変数表を更新させ、前記処理完了情報を1つ削除させる工程を実行させるためのプログラムを提供することにより解決される。
また、上記課題は、処理要求情報が蓄積される第一の領域と、処理要求の完了を示す情報である処理完了情報が前記処理要求を特定する情報と対応付けられ蓄積される第二の領域とが格納される蓄積部と、前記蓄積部を制御し、前記処理要求を実行する制御部を有する第一の装置と、前記第一の装置に接続され、前記第一の領域を特定する情報とセマフォ変数が対応付けられ蓄積されるセマフォ変数表とが格納される蓄積部と、前記蓄積部を制御し、前記処理要求情報を前記第一の装置へ送信する制御部を有する第二の装置とを備え、前記第二の装置における制御部は、予め前記第一の領域に対するセマフォ変数の初期値を前記第一の領域に蓄積可能な情報数の最大数として設定し、特定のタイミングで前記第一の領域に対応するセマフォ変数から1を減算した値が正の値か判定し、正の値であれば、前記第一の領域に対応するセマフォ変数から1を減算した値を前記第一の領域に対応するセマフォ変数として更新し、前記第一の装置に新たな処理要求情報を送信し、前記第一の装置における制御部は、前記新たな処理要求情報を受信して前記第一の領域に追加し、特定のタイミングで前記第一の領域に蓄積された処理要求を実行し、該処理要求に対応する処理完了情報を作成して前記第二の装置に領域に蓄積し、前記第二の装置における制御部は、特定のタイミングで前記第二の領域に前記処理完了情報が蓄積されているか判定し、蓄積されていれば、前記第一の領域に対応するセマフォ変数に1を加算した値を前記第一の領域に対応するセマフォ変数として更新し、前記第二の領域に蓄積された前記処理完了情報を1つ削除することを特徴とするシステムを提供することにより解決される。
以上に説明したように、本発明によれば、2種類のキューをインタフェースとして介在させ処理要求を実行する場合、各キューがオーバフローすることなくキューに処理要求に関するデータを蓄積することができ、キューがオーバフローすることによる処理停止や処理遅延を防止することができる。また、本発明は処理要求の発行側装置における実装だけで済み、発行側装置がプログラムを実行可能な装置であれば、ソフトウエアによる実装が可能となる。
本発明の第一の実施形態に用いる情報処理装置の構成例を示す図である。 本発明の第一の実施形態においてCPUが周辺機器に格納されたデータにアクセスする際の動作を示す図である。 ワークキューに蓄積されるワークリクエストのデータ構成例を示す図である。 コンプリーションキューに蓄積されるワークコンプリーションのデータ構成例を示す図である。 メモリに格納されるセマフォ変数表である。 本発明の第一の実施形態におけるワークリクエスト蓄積処理を説明するフローチャートである。 本発明の第一の実施形態におけるワークコンプリーション回収処理を説明するフローチャートである。 第一の実施形態の変形例におけるワークリクエスト蓄積処理を説明するフローチャートである。 第一の実施形態の変形例におけるワークコンプリーション回収処理を説明するフローチャートである。 本発明の第二の実施形態においてCPUが周辺機器に格納されたデータにアクセスする際の動作を示す図である。 メモリに格納されるワークキュー対ワークリクエスト対応表である。 本発明の第二の実施形態におけるワークリクエスト蓄積処理を説明するフローチャートである。 本発明の第二の実施形態におけるワークコンプリーション回収処理を説明するフローチャートである。
以下、本発明の実施形態について図面に従って説明する。しかしながら、本発明の技術的範囲はかかる実施形態に限定されるものではなく、特許請求の範囲に記載された発明とその均等物に及ぶものである。
図1は、本発明の第一の実施形態に用いる情報処理装置の構成例を示す図である。本発明の適用はインフィニバンドに限定されるものではないが、本発明の実施形態においてはメモリに格納されたOSの指令を実行するCPUが処理要求の発行側装置として処理要求を含むデータ(ワークリクエスト)を送信し、同一筐体内のインフィニバンド用ホストチャネルアダプタが受信側装置としてワークリクエストを受信する場合に、本発明が適用される様子を説明する。
メモリ5には、コンピュータを動作させるための基本ソフトウエアであるオペレーティングシステム(OS、Operating System)や、OS上で動作するアプリケーションプログラムが蓄積される。CPU2は、OSやアプリケーションプログラムからの処理要求に基づき、システムバス3を介して、メモリ5や各種周辺機器(図示されないハードディスクや、SCSIやファイバチャネルを介して外部に接続された図示されないストレージ、LANを介して接続された図示されない他のコンピュータ等)に格納されたデータにアクセスし、コンピュータ1内の装置を制御するための処理を実行する。
CPU2がメモリ5に格納されたデータにアクセスする場合、メモリコントローラ4は、CPU2が指定する仮想メモリ上のアドレスを実際の物理メモリアドレスに変換し、対応するデータをシステムバス3を介してCPU2に送信する。CPU2が周辺機器に格納されたデータにアクセスする場合、CPU2は処理要求を含むデータ(以下ワークリクエストと呼ぶ)をホストチャネルアダプタ(HCA)6のメモリ7に確保されたワークキュー(図示せず)に蓄積する。コプロセッサ8は、HCA内の制御に関する演算を実行する処理装置であり、特定のタイミングでワークキューに蓄積されたワークリクエストを処理し、処理結果のデータをメモリ7に確保されたコンプリーションキュー(図示せず)に格納する。CPU2は特定のタイミングでコンプリーションキューをチェックし、処理結果のデータを回収、削除する。
インフィニバンドスイッチ9は、チャネルアダプタ間を接続し、チャネルアダプタ同士のポイントトゥポイント(point-to-point)のデータ伝送を可能にする。図1では、HCA6が、インフィニバンドスイッチ9を介して、コンピュータ1をネットワークに接続するためのネットワークインタフェースカード(NIC)11、コンピュータ1にSCSI機器を接続するためのSCSIカード13、ファイバチャネル(Fiber Channel)機器を接続するためのFCカード14のそれぞれに備えられたターゲットチャネルアダプタ(TCA)11、13、15と接続されている。また、インフィニバンドスイッチ9を介して他のHCAと直接接続することも可能である。これは、例えば、複数のコンピュータ1が同一筐体内に存在するブレードサーバ(この場合各コンピュータ1をブレードと呼ぶ)のような装置において、ブレード間を接続するバックプレーンと呼ばれる内部バスを介した接続がある。
図2は、本発明の第一の実施形態においてCPU2が周辺機器に格納されたデータにアクセスする際の動作を示す図である。本発明の第一の実施形態においては、メモリ上にワークキュー24およびコンプリーションキュー28が1つずつ確保され、ワークキュー24に蓄積可能なワークリクエスト26の個数を示すセマフォ変数を設定することで、ワークキュー24が溢れることが防止される。
セマフォ変数はワークリクエスト26がワークキュー24に1つ蓄積されると値が1減算され、ワークコンプリーション30が1つ回収されると値が1加算される。セマフォ変数の初期値をワークキュー24に蓄積可能なデータの最大数と設定することで、ワークキュー24のセマフォ変数が正の値であれば、ワークキュー24にデータを追加蓄積可能であることがわかる。
また、セマフォ変数として、ワークキュー24に蓄積可能なデータの最大量(例えば、確保された領域のサイズ)を設定し、ワークリクエスト26の蓄積の度にそのワークリクエスト26のサイズが減算され、ワークコンプリーション30の回収により、ワークリクエスト26のサイズが加算されることによっても同じ効果を得ることができる。後者は、各ワークリクエスト26のサイズが一定でない場合等に有効な手段となる。
図2のCPU2は、OSやアプリケーションプログラムからの処理要求を含むデータをワークリクエスト26として、開始番地と終了番地により特定される領域としてメモリ7に確保された、キュー番号WQ1のワークキュー24に蓄積する。CPU2はワークキュー24に対応して設定されるセマフォ変数が格納されたメモリ5のセマフォ変数表22を参照し、ワークリクエスト26の蓄積が可能か判定する。
ワークリクエスト26の蓄積が可能であれば、ワークリクエスト26がワークキュー24の末尾に追加される。そしてCPU2はセマフォ変数表22を更新する。このワークリクエスト蓄積処理の詳細については後述する。
コプロセッサ8は、特定のタイミングでワークキュー24から先頭のワークリクエスト26を取り出し、処理要求を実行する。ワークリクエスト26には、データの送信、受信といった処理要求内容と、データ送信先や送信するデータあるいは受信したデータの格納先等の情報が格納されており、コプロセッサ8は処理要求内容に沿った処理を実行する。
コプロセッサ8は、処理要求内容に沿ってインフィニバンドスイッチ9を介して接続されたTCAとデータ伝送を行い、ワークリクエスト26を完了する。ワークリクエスト26を処理し終えたら、コプロセッサ8は処理されたワークリクエスト26に対応するワークコンプリーション30を作成し、開始番地と終了番地により特定される領域としてメモリ7に確保された、キュー番号CQ1のコンプリーションキュー28に蓄積する。
CPU2は、特定のタイミングでコンプリーションキュー28からワークコンプリーション30を回収し、対応するワークリクエスト26が完了したことを確認し、メモリ5のセマフォ変数表22のセマフォ変数を更新する。このワークコンプリーション回収処理の詳細については後述する。こうして処理要求が完了する。次に、ワークリクエスト26、ワークコンプリーション30、セマフォ変数表22のデータ構成を説明する。
図3は、ワークキュー24に蓄積されるワークリクエスト26のデータ構成例を示す図である。図3の各エントリには、ワークリクエスト26を特定する識別番号(Work Request ID)31と、処理要求に関連するデータ32が格納される。処理要求に関連するデータ32には、図示しないが例えば、データの送信や受信等の処理要求内容、データの送信先や送信するデータ、受信したデータの格納先といった情報が格納されている。
図4は、コンプリーションキュー28に蓄積されるワークコンプリーション30のデータ構成例を示す図である。図4の各エントリには、処理されたワークリクエスト26を特定する識別番号(Work Request ID)41と、処理されたワークリクエスト26に関連するデータ42が格納される。処理されたワークリクエスト26に関連するデータ42には、図示しないが例えば、正常終了したか異常終了したかを示す終了ステータスや、エラー内容を示すエラーコード等が格納される。ワークコンプリーション30を参照することにより、どのワークリクエスト26がどのような状態で完了したのかを確認することができる。
図5は、メモリ5に格納されるセマフォ変数表22である。図5の各エントリには、キュー番号51とそのキュー番号のセマフォ変数値52が格納される。図5においては、WQ1がワークキュー24に対するキュー番号51を示し、SW1は、ワークキュー24に対するセマフォ変数値52である。
また、本発明の第一の実施形態においては、1つのワークキュー24にのみセマフォ変数が設定されるが、複数のワークキュー24が存在する場合、各キューに設定されたセマフォ変数が図5の行データとしてセマフォ変数表に追加される。さらに、コンプリーションキュー28に対するセマフォ変数が設定され、セマフォ変数表に追加されてもよい。セマフォ変数表22を参照すれば、ワークキュー24あるいはコンプリーションキュー28に対応するセマフォ変数値52を得ることができ、ワークキュー24に対しワークリクエスト26の追加蓄積が可能か判定することができる。
なお、本発明の第一の実施形態においては、セマフォ変数表22を用いるが、表を使わない実装も可能である。例えば、ハッシュ関数を用いて、ワークキュー番号に対応するセマフォを特定するポインタがわかるようにしてもよい。
続いて、本発明の第一の実施形態におけるワークリクエスト蓄積処理、ワークコンプリーション回収処理をそれぞれ説明する。
図6は、本発明の第一の実施形態におけるワークリクエスト蓄積処理を説明するフローチャートである。予め、セマフォ変数表22には、キュー番号WQ1のワークキュー24に対応するセマフォ変数の初期値として、ワークキュー24に蓄積可能なデータの最大数が設定されている。
まず、CPU2は、ワークキュー24のセマフォ変数が正の値か判定する(S62)。CPU2は、メモリ5のセマフォ変数表22を参照し、キュー番号WQ1であるワークキュー24に対応するセマフォ変数値52を得る。得られたセマフォ変数値が正であれば、ワークキュー24には空きがあり、ワークリクエスト26が追加蓄積できることを意味する。
ステップS62でワークキュー24に空きがある場合、CPU2はワークキュー24のセマフォ変数から1減算した値を新たなセマフォ変数としてセマフォ変数表22を更新する(S63)。これは、ワークリクエスト26が蓄積される場合ワーククキュー24の空きが1つ消費されることによるものである。
そして、ステップS62で空きが無いと判定される場合、一定時間待機し再びステップS62の処理を実施する。こうして、ワークキュー24に空きができるのを待つ。もしくは、蓄積をあきらめる。
ステップS63が済むと、ワークキュー24にワークリクエスト26を追加蓄積する(S66)。そして、ステップS64の蓄積処理が成功したか判定する(S67)。ワークキュー24への蓄積は可能な状態でも、蓄積処理の途中で装置の電源断や、割り込み処理による蓄積処理中止などで、蓄積処理に失敗した場合そのままワークリクエスト蓄積処理を中止する。
ステップS67でワークリクエスト26の蓄積に成功すれば、ワークリクエスト蓄積処理を終了する。ステップS67で失敗した場合、ワークキュー24のセマフォ変数に1加算し(S69)、ワークリクエスト蓄積処理を終了する。ステップS63では、ワークリクエストが蓄積されワーククキュー24の空きが1つ消費されるものとしてセマフォ変数を更新したが、ステップS67でワークリクエストの蓄積に失敗したため、ワーククキュー24の空きは消費されていない。従ってステップS69では、ステップS63で減算した値を元に戻す。
図6のワークリクエスト蓄積処理によって、ワークキューの空き状態を表すセマフォ変数が適切に更新され、空きが無い場合、ワークリクエスト26が追加されることはなく、ワークキュー24のオーバフローを防止することができる。
図7は、本発明の第一の実施形態におけるワークコンプリーション回収処理を説明するフローチャートである。まず、コンプリーションキュー28にワークコンプリーション30が蓄積されているか判定する(S71)。CPU2は、コンプリーションキュー28の先頭からワークコンプリーション30を回収し、コンプリーションキュー28が空なら、そのままワークコンプリーション回収処理を終了する。
そして、CPU2はワークキュー24のセマフォ変数に1加算した値をセマフォ変数として更新し(S73)、ワークコンプリーション回収処理を終了する。これは、ワークリクエスト26の処理が完了したため、ワーククキュー24で1つ空きができたことを確認できたからである。ワークキュー24に対応するセマフォ変数値52は、コプロセッサ8がワークリクエスト26の処理を完了した際に更新されるべきだが、CPU2はどのタイミングでコプロセッサ8がワークリクエスト26を処理するか知ることができない。そこで、ワークコンプリーション30の回収時にワークキュー24に空きができたものとみなし、セマフォ変数を更新する。
図7のワークコンプリーション回収処理によって、ワークキュー24の空き状態を表すセマフォ変数が適切に更新され、ワークキュー24のあふれを防止することができる。また、ワークコンプリーション30の回収時にワークキュー24のセマフォ変数を更新することにより、本発明はHCAのコプロセッサ8の処理に関係なくOSやアプリケーション側のみで実装することができ、導入が容易になり、ハードウエアの実装を複雑化させずに済む。
以上本発明の第一の実施形態によれば、ワークキュー24に対応するセマフォ変数を適切に更新し、ワークリクエストを追加する場合、セマフォ変数を参照することにより、ワークキュー24のオーバフローを防止することが可能である。
また、第一の実施形態において予めコンプリーションキュー28に蓄積可能なデータ数がワークキュー24に蓄積可能なデータ数の最大数以上になるようコンプリーションキュー28のサイズを設定することにより(コンプリーションキュー28に対するセマフォ変数を設定することなく)、ワークキュー24に対して設定されたセマフォ変数のみを利用し本発明を適用することができる。
すなわち、ある時点でワークキュー24に蓄積されたワークリクエスト26をすべてコンプリーションキュー28に移したとしても、コンプリーションキュー28が溢れないことが確約されるため、要求処理の実行にあたっては、各ワークキュー24へワークリクエスト26を蓄積する際のワークキュー24のオーバフローのみを防止すればよいからである。
第一の実施形態においては、ワークキュー24にのみセマフォ変数を設定したが、コンプリーションキュー28にのみセマフォ変数を設定し、コンプリーションキュー28のオーバフローを防止することも可能である。図6、図7におけるステップS62、S63、S73のワークキュー24の箇所を適宜コンプリーションキュー28と読み替えることで本発明の適用が可能となる。
コンプリーションキューに空きが無い場合、ワークリクエスト26が追加されることはない。ワークリクエスト26とワークコンプリーション30は1対1に対応するため、追加されたワークリクエスト26が原因でコンプリーションキュー28がオーバフローすることはない。こうして、コンプリーションキュー28のオーバフローを防止することができる。また、ワークリクエスト26の蓄積時にコンプリーションキュー28のセマフォ変数を更新することにより、本発明はHCAのコプロセッサの処理に関係なく実装することができ、導入が容易になり、ハードウエアの実装を複雑化させずに済む。
また、第一の実施形態の変形例として、ワークキュー24、コンプリーションキュー28に共にセマフォ変数を設定し、両キューのオーバフローを防止することも可能である。第一の実施形態の変形例におけるワークリクエスト蓄積処理とワークコンプリーション回収処理について説明する。
図8は、第一の実施形態の変形例におけるワークリクエスト蓄積処理を説明するフローチャートである。図6と同じステップには同じステップ番号が振られており、必要がなければ説明は省略する。予め、セマフォ変数表22には、キュー番号WQ1、CQ1のワークキュー24、コンプリーションキュー28に対応するセマフォ変数の初期値として、各キューに蓄積可能なデータの最大数が設定されている。
まず、CPU2は、ワークキュー24に対応するセマフォ変数が正の値か判定する(S62)。これは、図6と同じステップであり説明を省略する。ステップS62でワークキュー24に空きがある場合、CPU2はワークキュー24のセマフォ変数から1減算した値を新たなセマフォ変数としてセマフォ変数表22を更新する(S63)。これは、ワークリクエスト26が蓄積される場合ワーククキュー24の空きが1つ消費されることによるものである。
ステップS62で空きが無いと判定される場合、一定時間待機し再びステップS62の処理を実施する。こうして、ワークキュー24に空きができるのを待つ。もしくは、蓄積をあきらめる。
ステップS63が済むと、コンプリーションキュー28に対応するセマフォ変数が正の値か判定する(S64)。CPU2は、セマフォ変数表22を参照し、キュー番号CQ1であるコンプリーションキュー28に対応するセマフォ変数値52を得る。セマフォ変数値が正であれば、コンプリーションキュー28に空きがあり、ワークコンプリーション30を蓄積できることを意味する。
ステップS64で空きがあると判定される場合、CPU2はコンプリーションキュー28のセマフォ変数から1減算した値を新たなセマフォ変数としてセマフォ変数表22を更新する(S65)。コンプリーションキュー28に対応するセマフォ変数値は、コプロセッサ8がワークリクエスト26の処理を完了した後に更新されるべきだが、CPU2はどのタイミングでコプロセッサ8がワークリクエスト26を処理するか知ることができない。また、ワークキュー24に蓄積されたワークリクエスト26は必ず処理完了後にそのワークリクエスト26に対応するワークコンプリーション30がコンプリーションキュー28に蓄積され、1対1に対応するものである。そこで、ワークキュー24へのワークリクエスト26の蓄積時にコンプリーションキュー28が1つ消費されたものとみなし、コンプリーションキュー28のセマフォ変数を更新する。
ステップS64で空きが無いと判定される場合、一定時間待機し再びステップS64の処理を実施する。こうして、コンプリーションキュー28に空きができるのを待つ。
こうして、ワークキュー24とコンプリーションキュー28に共に空きがある場合、ワークキュー24にワークリクエスト26を蓄積する(S66)。そして、ステップS64の蓄積処理が成功したか判定する(S67)。
ステップS67でワークリクエスト26の蓄積に成功すれば、ワークリクエスト蓄積処理を終了する。ステップS67で失敗した場合、ワークキュー24のセマフォ変数、コンプリーションキューのセマフォ変数にそれぞれ1加算し(S69)、ワークリクエスト蓄積処理を終了する。ステップS63、S65では、ワークリクエストが蓄積されワーククキュー24、コンプリーションキュー28の空きがそれぞれ1つ消費されるものとして、セマフォ変数を更新したが、ステップS67でワークリクエストの蓄積に失敗したため、ワーククキュー24、コンプリーションキュー28の空きは消費されていない。従ってステップS69では、ステップS63、S65で減算した値を元に戻す。
図8のワークリクエスト26蓄積処理によって、各キューの空き状態を表すセマフォ変数が適切に更新され、ワークキューに空きが無い場合、ワークリクエスト26が追加されることはない。また、コンプリーションキューに空きが無い場合も同様にワークリクエスト26が追加されることはない。ワークリクエスト26とワークコンプリーション30は1対1に対応するため、追加されたワークリクエスト26が原因でコンプリーションキュー28がオーバフローすることはない。こうして、ワークキュー24、およびコンプリーションキュー28のオーバフローを防止することができる。また、ワークリクエスト26の蓄積時にコンプリーションキュー28のセマフォ変数を更新することにより、本発明はHCAのコプロセッサの処理に関係なく実装することができ、導入が容易になり、ハードウエアの実装を複雑化させずに済む。
図9は、第一の実施形態の変形例におけるワークコンプリーション回収処理を説明するフローチャートである。図7と同じステップには同じステップ番号が振られており、必要がなければ説明は省略する。
まず、コンプリーションキュー28にワークコンプリーション30が蓄積されているか判定する(S71)。そして、CPU2はワークキュー24のセマフォ変数に1加算した値をセマフォ変数として更新する(S73)。次に、コンプリーションキュー28のセマフォ変数に1加算した値を新たなセマフォ変数値として更新する(S74)。これは、ステップS82でワークコンプリーション30を1つ回収したことによりコンプリーションキュー28に空きができたためである。
図9のワークコンプリーション30回収処理によって、各キューの空き状態を表すセマフォ変数が適切に更新され、ワークキュー24、およびコンプリーションキュー28のあふれを防止することができる。また、ワークコンプリーション30の回収時にワークキュー24のセマフォ変数を更新することにより、本発明はHCAのコプロセッサの処理に関係なく実装することができ、導入が容易になり、ハードウエアの実装を複雑化させずに済む。
なお、上記の第一の実施形態の変形例は、ワークキュー24とコンプリーションキュー28が1対1に対応するのであれば、それぞれが複数存在する構成においても適用が可能である。
次に本発明の第二の実施形態について説明する。第二の実施形態は、第一の実施形態と同じ図1の構成において、メモリ上に複数のワークキュー24が確保され、複数のワークキュー24に対し1つのコンプリーションキュー28が確保される場合である。本発明の第二の実施形態においては、ワークキュー24およびコンプリーションキュー28に対して、各キューに蓄積可能なデータ(ワークリクエスト26およびワークコンプリーション30)の個数を示すセマフォ変数を設定することで、各キューが溢れることを防止する。
図10は、本発明の第二の実施形態においてCPU2が周辺機器に格納されたデータにアクセスする際の動作を示す図である。図2と同じ箇所には同じ番号が振られており、必要が無ければ説明を省略する。
図10のCPU2は、OSやアプリケーションプログラムからの処理要求を含むデータをワークリクエスト26として、開始番地と終了番地により特定される領域としてそれぞれメモリ7に確保された、ワークキュー番号WQ1からWQnまでのn個(nは自然数)のワークキュー241からワークキュー24nに蓄積する。CPU2は各ワークキュー24と後述するコンプリーションキュー28に対応して設定されるセマフォ変数が格納されたメモリ5のセマフォ変数表22を参照し、ワークリクエスト26の蓄積が可能か判定する。
ワークリクエスト26の蓄積が可能であれば、ワークリクエスト26がワークキュー24の末尾に追加される。CPU2は、ワークリクエスト26がどのワークキュー24に蓄積されたかを示す情報をメモリ5のワークキュー24対ワークリクエスト26対応表23に格納し、そしてセマフォ変数表22を更新する。このワークリクエスト26蓄積処理の詳細については後述する。
コプロセッサ8は、特定のタイミングでワークキュー24から先頭のワークリクエスト26を取り出し、処理要求を実行し、処理要求内容に沿ってインフィニバンドスイッチ9を介しファブリックネットワークに接続されたTCAとデータ伝送を行い、ワークリクエスト26を完了する。取り出したワークリクエスト26を処理し終えたら、コプロセッサ8はワークコンプリーション30を作成し、コンプリーションキュー28に蓄積する。一般には、ワークキュー24とコンプリーションキュー28が1対1に対応している必要はなく、図10のように1つのコンプリーションキュー28に対して複数のワークキュー24を対応させることが可能である。
CPU2は、特定のタイミングでコンプリーションキュー28からワークコンプリーション30を回収し、対応するワークリクエスト26が完了したことを確認し、処理要求が完了する。同時にCPU2はメモリ5のセマフォ変数表22のセマフォ変数を更新する。このワークコンプリーション回収処理の詳細については後述する。
なお、図2では1つだが、コンプリーションキュー28を複数有する構成にすることも可能である。また各ワークキュー24には特定の役割を与えることができる。例えば、WQ1はInfinibandメッセージ送信用のワークリクエスト26が、WQ2はInfinibandメッセージ受信用のワークリクエスト26が蓄積されるよう設定することが可能である。また、ワークリクエスト26、ワークコンプリーション30、セマフォ変数表22のデータ構成は、第一の実施形態と同じくそれぞれ図3、図4、図5のようになっている。
図11は、メモリ5に格納されるワークキュー対ワークリクエスト対応表23である。図11の各エントリには、キュー番号51とそのキュー番号で特定されるワークキュー24に蓄積されたワークリクエスト番号31のリスト111が格納される。この対応表を参照すれば、各ワークキュー24に蓄積されたワークリクエスト26番号のリストを得ることができる。従って、あるワークリクエスト26がどのワークキュー24に蓄積されたかを特定することが可能である。図11においては、例えば、キュー番号WQ1であるキューに、リストWRL1に含まれるワークリクエスト番号(1、12、28)で特定されるワークリクエスト26が蓄積されていることがわかる。
次に本発明の第二の実施形態におけるワークリクエスト蓄積処理およびワークコンプリーションを説明する。
図12は、本発明の第二の実施形態におけるワークリクエスト蓄積処理を説明するフローチャートである。図6および図8と同じステップには同じステップ番号が振られており、必要がなければ説明は省略する。予め、セマフォ変数表22には、各キューに対するセマフォ変数の初期値として、各キューに蓄積可能なデータの最大数が設定されている。
まず、OSやアプリケーションプログラムからの処理要求に対応するワークキュー24が決定される(S61)。CPU2は、処理要求内容に応じて、適切なワークキュー24のワークキュー24番号を取得する。例えば、処理要求内容がデータ送信で、図10のキュー番号WQ1のワークキュー24がデータ送信用に割り当てられていれば、キュー番号WQ1のワークキュー24が選択される。各ワークキュー24への用途の割り当ては自由に定めることができる。また、各ワークキュー24に特に用途が設定されていなければ任意に1つのワークキュー24を選択してもよい。
次にステップS61で決定されたワークキュー24のセマフォ変数が正の値か判定する(S62)。CPU2は、メモリ5のセマフォ変数表22を参照し、ステップS61で決定されたワークキュー24のセマフォ変数値を得る。
ステップS62でセマフォ変数の値が正であれば、CPU2はステップS61で決定されたワークキュー24のセマフォ変数から1減算した値を新たなセマフォ変数としてセマフォ変数表22を更新する(S63)。ステップS62でセマフォ変数の値が正であれば、そのワークキュー24には空きがあり、ワークリクエスト26が蓄積できる。従って、ワークリクエスト26が蓄積された場合そのワーククキューの空きが1つ消費されることによるものである。
ステップS62で空きが無いと判定される場合、一定時間待機し再びステップS62の処理を実施する。こうして、ワークキュー24に空きができるのを待つ。
ステップS63が済むと、コンプリーションキュー28のセマフォ変数が正の値か判定する(S64)。CPU2は、セマフォ変数表22を参照し、コンプリーションキュー28のセマフォ変数値を得る。セマフォ変数値が正であれば、コンプリーションキュー28に空きがあり、ワークコンプリーション30を蓄積できる。
ステップS64で空きがあると判定される場合、CPU2はコンプリーションキュー28のセマフォ変数から1減算した値を新たなセマフォ変数としてセマフォ変数表22を更新する(S65)。コンプリーションキュー28に対応するセマフォ変数値は、コプロセッサ8がワークリクエスト26の処理を完了した後に更新されるべきだが、CPU2はどのタイミングでコプロセッサ8がワークリクエスト26を処理するか知ることができない。また、ワークキュー24に蓄積されたワークリクエスト26は必ず処理完了後にそのワークリクエスト26に対応するワークコンプリーション30がコンプリーションキュー28に蓄積され、1対1に対応するものである。そこで、ワークキュー24へのワークリクエスト26の蓄積時にコンプリーションキュー28が1つ消費されたものとみなし、コンプリーションキュー28のセマフォ変数を更新する。
ステップS64で空きが無いと判定される場合、一定時間待機し再びステップS64の処理を実施する。こうして、コンプリーションキュー28に空きができるのを待つ。
こうして、ワークキュー24とコンプリーションキュー28に共に空きがある場合、ステップS61で決定されたワークキュー24にワークリクエスト26を蓄積する(S66)。次に、ステップS66の蓄積処理が成功したか判定する(S67)。ワークキュー24への蓄積は可能な状態であったが、蓄積処理の途中で装置の電源断や、割り込み処理による蓄積処理中止などで、蓄積処理に失敗した場合そのままワークリクエスト蓄積処理を中止する。
ステップS67でワークリクエスト26の蓄積に成功すれば、ステップS66で蓄積されたワークリクエスト26と、そのワークリクエスト26が蓄積されたワークキュー24を対応付けて記録し(S68)、 ワークリクエスト蓄積処理を終了する。これは、メモリ5に格納されたワークキュー対ワークリクエスト対応表23で、ワークキュー24のキュー番号51に対応するワークリクエストIDリストに、ステップS64で蓄積されたワークリクエスト番号を追加すればよい。
ステップS67で失敗した場合、ステップS61で特定されたワークキュー24のセマフォ変数、コンプリーションキューのセマフォ変数にそれぞれ1加算し(S69)、ワークリクエスト蓄積処理を終了する。ステップS63、S65では、ワークリクエストが蓄積されワーククキュー24、コンプリーションキュー28の空きがそれぞれ1つ消費されるものとして、セマフォ変数を更新したが、ステップS67でワークリクエストの蓄積に失敗したため、ワーククキュー24、コンプリーションキュー28の空きは消費されていない。従ってステップS69では、ステップS63、S65で減算した値を元に戻す。
図12のワークリクエスト蓄積処理によって、各キューの空き状態を表すセマフォ変数が適切に更新され、ワークキューに空きが無い場合、ワークリクエスト26が追加されることはない。また、コンプリーションキューに空きが無い場合も同様にワークリクエスト26が追加されることはない。ワークリクエスト26とワークコンプリーション30は1対1に対応するため、追加されたワークリクエスト26が原因でコンプリーションキュー28がオーバフローすることはない。こうして、ワークキュー24、およびコンプリーションキュー28のオーバフローを防止することができる。また、ワークリクエスト26の蓄積時にコンプリーションキュー28のセマフォ変数を更新することにより、本発明はHCAのコプロセッサの処理に関係なく実装することができ、導入が容易になり、ハードウエアの実装を複雑化させずに済む。
図13は、本発明の第二の実施形態におけるワークコンプリーション回収処理を説明するフローチャートである。まず、コンプリーションキュー28にワークコンプリーション30が蓄積されているか判定する(S71)。CPU2は、コンプリーションキュー28の先頭からワークコンプリーション30を取り出し、コンプリーションキュー28が空なら、そのまま処理を終了する。
次に、抽出されたワークコンプリーション30からそのワークコンプリーション30に対応するワークリクエスト26が蓄積されたワークキュー24を特定する(S72)。ワークコンプリーション30は処理が完了したワークリクエスト26に対応して作成されるものであり、図4に示されているように、ワークコンプリーション30には、処理されたワークリクエスト番号41が格納されている。CPU2は、メモリ5のワークキュー対ワークリクエスト対応表23を参照し、得られたワークリクエスト番号41が含まれるワークリクエストIDリスト111を検索し、対応するキュー番号51を得る。
そして、CPU2はステップS72で特定されたワークキュー24のセマフォ変数に1加算した値をセマフォ変数として更新する(S73)。これは、ワークリクエスト26の処理が完了したため、ステップS72で特定されたワーククキューで1つ空きができたことを確認できたからである。ワークキュー24に対応するセマフォ変数値は、コプロセッサ8がワークリクエスト26の処理を完了した際に更新されるべきだが、CPU2はどのタイミングでコプロセッサ8がワークリクエスト26を処理するか知ることができない。そこで、ワークコンプリーション30の回収時にワークキュー24に空きができたものとみなし、セマフォ変数を更新する。
次に、コンプリーションキュー28のセマフォ変数に1加算した値を新たなセマフォ変数値として更新する(S74)。これは、ステップS72でワークコンプリーション30を1つ回収したことによりコンプリーションキュー28に空きができたためである。
図13のワークコンプリーション回収処理によって、各キューの空き状態を表すセマフォ変数が適切に更新され、ワークキュー24、およびコンプリーションキュー28のオーバフローを防止することができる。また、ワークコンプリーションの回収時にワークキュー24のセマフォ変数を更新することにより、本発明はHCAのコプロセッサの処理に関係なく実装することができ、導入が容易になり、ハードウエアの実装を複雑化させずに済む。
また、第二の実施形態において予めコンプリーションキュー28に蓄積可能なデータ数が各ワークキュー24に蓄積可能なデータ数の最大数の総和以上になるようコンプリーションキュー28のサイズを設定することにより、コンプリーションキュー28に対するセマフォ変数を設定することなく、ワークキュー24に対して設定されたセマフォ変数のみを利用し本発明を適用することができる。
すなわち、ある時点で各ワークキュー24に蓄積されたワークリクエスト26をすべてコンプリーションキュー28に移したとしても、コンプリーションキュー28が溢れないことが確約されるため、処理要求の実行にあたっては、各ワークキュー24へワークリクエスト26を蓄積する際のワークキュー24のオーバフローのみを防止すればよいからである。
本発明は、サーバ対サーバ、サーバ対ストレージ、ブレードサーバのバックプレーンを介したブレード間のプロセス間通信あるいは同一サーバ内のプロセス間通信にも適用が可能である。また、プログラムとしてOSやアプリケーションプログラムの機能として組み込んだり、OSとアプリケーションプログラムの仲介をするミドルウエアとして提供することが可能である。
以上をまとめると付記のようになる。
(付記1) 処理要求情報が蓄積される第一の領域を設定する工程と、処理要求の完了を示す情報である処理完了情報が蓄積される第二の領域を設定する工程と、前記第一の領域に対応するセマフォ変数の初期値を前記第一の領域に蓄積可能な情報数の最大数として設定する工程と、前記第一の領域に対応するセマフォ変数の値から1を減算した値が正の値か判定し、正の値であれば、前記第一の領域に前記処理要求情報を追加し、前記第一の領域に対応するセマフォ変数の値から1を減算した値を前記第一の領域に対応するセマフォ変数として更新する工程と、前記要求された処理が完了した場合、該処理要求を特定する情報と前記処理完了情報を対応付けて前記第二の領域に蓄積する工程と、前記第二の領域に前記処理完了情報が蓄積されているか判定し、蓄積されていれば、前記第一の領域に対応するセマフォ変数に1を加算した値を前記第一の領域に対応するセマフォ変数として更新し、前記処理完了情報を1つ削除する工程を有することを特徴とする情報蓄積制御方法。
(付記2) 付記1において、前記第二の領域に蓄積可能な情報数の最大数が、前記第一の領域に蓄積可能な情報数の最大数以上であることを特徴とする情報蓄積制御方法。
(付記3) 処理要求情報が蓄積される第一の領域を設定する工程と、処理要求の完了を示す情報である処理完了情報が蓄積される第二の領域を設定する工程と、前記第一の領域および前記第二の領域にそれぞれ対応するセマフォ変数の初期値を前記第一の領域および前記第二の領域にそれぞれ蓄積可能な情報数の最大数として設定する工程と、前記第一の領域に対応するセマフォ変数の値から1を減算した値と前記第二の領域に対応するセマフォ変数の値から1を減算した値が共に正の値か判定し、共に正の値であれば、前記第一の領域に処理要求情報を追加し、かつ前記第一の領域に対応するセマフォ変数の値から1を減算した値を前記第一の領域に対応するセマフォ変数として、また前記第二の領域に対応するセマフォ変数の値から1を減算した値を前記第二の領域に対応するセマフォ変数としてそれぞれ更新する工程と、前記処理要求が完了した場合、該処理要求を特定する情報を前記処理完了情報と対応付けて前記第二の領域に蓄積する工程と、前記第二の領域に前記処理完了情報が蓄積されているか判定し、蓄積されていれば、前記第一の領域に対応するセマフォ変数に1を加算した値を前記第一の領域に対応するセマフォ変数として、また前記第二の領域に対応するセマフォ変数の値から1を加算した値を前記第二の領域に対応するセマフォ変数としてそれぞれ更新し、前記処理完了情報を1つ削除する工程を有することを特徴とする情報蓄積制御方法。
(付記4) 処理要求情報が蓄積される複数の第一の領域を設定する工程と、処理要求の完了を示す情報である処理完了情報が蓄積される第二の領域を設定する工程と、前記複数の第一の領域にそれぞれ対応するセマフォ変数の初期値を前記複数の第一の領域にそれぞれ蓄積可能な情報数の最大数として設定する工程と、前記複数の第一の領域のうち1つを選択し、前記選択された第一の領域に対応するセマフォ変数の値から1を減算した値が正の値か判定し、正の値であれば、前記選択された第一の領域に処理要求情報を追加し、前記選択された第一の領域と前記処理要求を特定する情報を対応付けて対応表に蓄積し、前記選択された第一の領域に対応するセマフォ変数の値から1を減算した値を前記選択された第一の領域に対応するセマフォ変数として更新する工程と、前記処理要求が完了した場合、該処理要求を特定する情報を前記処理完了情報と対応付けて前記第二の領域に蓄積する工程と、前記第二の領域に前記処理完了情報が蓄積されているか判定し、蓄積されていれば、前記処理完了情報を1つ読み出し、前記読み出された処理完了情報に対応する前記処理要求を特定し、前記対応表を参照して該特定された処理要求が蓄積された前記第一の領域を特定し、該特定された第一の領域に対応するセマフォ変数に1を加算した値を前記特定された第一の領域に対応するセマフォ変数として更新し、前記読み出された処理完了情報を削除する工程を有することを特徴とする情報蓄積制御方法。
(付記5) 付記4において、前記第二の領域に蓄積可能な情報数の最大数が、前記複数の第一の領域に蓄積可能な情報数の最大数の総和以上であることを特徴とする情報蓄積制御方法。
(付記6) 処理要求情報が蓄積される複数の第一の領域を設定する工程と、処理要求の完了を示す情報である処理完了情報が蓄積される第二の領域を設定する工程と、複数の第一の領域の各第一の領域および第二の領域にそれぞれ対応するセマフォ変数の初期値を前記各第一の領域および前記第二の領域にそれぞれ蓄積可能な情報数の最大数として設定する工程と、前記複数の第一の領域のうち1つを選択し、前記選択された第一の領域に対応するセマフォ変数の値から1を減算した値と前記第二の領域に対応するセマフォ変数の値から1を減算した値が共に正の値か判定し、共に正の値であれば、前記選択された第一の領域に処理要求情報を追加し、前記選択された第一の領域と前記処理要求を特定する情報とを対応付けて対応表に蓄積し、前記選択された第一の領域に対応するセマフォ変数の値から1を減算した値を前記選択された第一の領域に対応するセマフォ変数として、また前記第二の領域に対応するセマフォ変数の値から1を減算した値を前記第二の領域に対応するセマフォ変数としてそれぞれ更新する工程と、前記処理要求が完了した場合、該処理要求を特定する情報を前記処理完了情報に対応付けて前記第二の領域に蓄積する工程と、前記第二の領域に前記処理完了情報が蓄積されているか判定し、蓄積されていれば、前記処理完了情報を1つ読み出し、前記読み出された処理完了情報に対応する前記処理要求を特定し、前記対応表を参照して該特定された処理要求が蓄積された前記第一の領域を特定し、該特定された第一の領域に対応するセマフォ変数に1を加算した値を前記特定された第一の領域に対応するセマフォ変数として、また前記第二の領域に対応するセマフォ変数に1を加算した値を前記第二の領域に対応するセマフォ変数としてそれぞれ更新し、前記読み出された処理完了情報を削除する工程を有することを特徴とする情報蓄積制御方法。
(付記7) 処理要求情報が蓄積される第一の領域と、処理要求の完了を示す情報である処理完了情報が前記処理要求を特定する情報と対応付けられ蓄積される第二の領域と、前記第一の領域を特定する情報とセマフォ変数が対応付けられ蓄積されるセマフォ変数表とが格納される蓄積部と、前記蓄積部を制御する制御部とを有する装置において実行されるプログラムであって、前記制御部に、前記第一の領域に対応するセマフォ変数の初期値を前記第一の領域に蓄積可能な情報数の最大数として設定させる工程と、前記第一の領域に対応するセマフォ変数の値から1を減算した値が正の値か判定させ、正の値であれば、前記第一の領域に対応するセマフォ変数の値から1を減算した値を前記第一の領域に対応するセマフォ変数として前記セマフォ変数表を更新させ、前記第一の領域へ前記処理要求情報を追加させる工程と、前記第二の領域に前記処理完了情報が蓄積されているか判定させ、蓄積されていれば、前記第一の領域に対応するセマフォ変数に1を加算した値を前記第一の領域に対応するセマフォ変数として前記セマフォ変数表を更新させ、前記処理完了情報を1つ削除させる工程を実行させるためのプログラム。
(付記8) 処理要求情報が蓄積される第一の領域と、処理要求の完了を示す処理完了情報が前記処理要求を特定する情報と対応付けられ蓄積される第二の領域と、前記第一の領域を特定する情報とセマフォ変数が対応付けられ蓄積されるセマフォ変数表とが格納される蓄積部と、前記蓄積部を制御する制御部とを有する装置において実行されるプログラムであって、前記制御部に、前記第一の領域および前記第二の領域にそれぞれ対応するセマフォ変数の初期値を前記第一の領域および前記第二の領域にそれぞれ蓄積可能な情報数の最大数として設定させる工程と、前記第一の領域に対応するセマフォ変数の値から1を減算した値と前記第二の領域に対応するセマフォ変数の値から1を減算した値が共に正の値か判定させ、共に正の値であれば、前記第一の領域に対応するセマフォ変数の値から1を減算した値を前記第一の領域に対応するセマフォ変数として、また前記第二の領域に対応するセマフォ変数の値から1を減算した値を前記第二の領域に対応するセマフォ変数としてそれぞれ前記セマフォ変数表を更新させ、前記第一の領域へ前記処理要求情報を追加させる工程と、前記第二の領域に前記処理完了情報が蓄積されているか判定させ、蓄積されていれば、前記第一の領域に対応するセマフォ変数に1を加算した値を前記第一の領域に対応するセマフォ変数として、また前記第二の領域に対応するセマフォ変数の値から1を加算した値を前記第二の領域に対応するセマフォ変数としてそれぞれ前記セマフォ変数表を更新させ、前記処理完了情報を1つ削除させる工程を実行させるためのプログラム。
(付記9) 処理要求情報が蓄積される複数の第一の領域と、処理要求の完了を示す処理完了情報が前記処理要求を特定する情報と対応付けられ蓄積される第二の領域と、前記第一の領域を特定する情報とセマフォ変数が対応付けられ蓄積されるセマフォ変数表とが格納される蓄積部と、前記蓄積部を制御する制御部とを有する装置において実行されるプログラムであって、前記制御部に、前記複数の第一の領域の各第一の領域および前記第二の領域にそれぞれ対応するセマフォ変数の初期値を前記第一の領域および前記第二の領域にそれぞれ蓄積可能な情報数の最大数として設定させる工程と、前記複数の第一の領域のうち1つを選択し、前記選択された第一の領域に対応するセマフォ変数の値から1を減算した値と前記第二の領域に対応するセマフォ変数の値から1を減算した値が共に正の値か判定させ、共に正の値であれば、前記選択された第一の領域と前記処理要求を対応付けて対応表に蓄積させ、前記選択された第一の領域に対応するセマフォ変数の値から1を減算した値を前記選択された第一の領域に対応するセマフォ変数として、また前記第二の領域に対応するセマフォ変数の値から1を減算した値を前記第二の領域に対応するセマフォ変数としてそれぞれ前記セマフォ変数表を更新させ、前記選択された第一の領域へ前記処理要求情報を追加させる工程と、前記第二の領域に前記処理完了情報が蓄積されているか判定させ、蓄積されていれば、前記処理完了情報を1つ読み出し、前記読み出された処理完了情報に対応する前記処理要求を特定し、該特定された第一の領域に対応するセマフォ変数に1を加算した値を前記特定された第一の領域に対応するセマフォ変数として、また前記第二の領域に対応するセマフォ変数の値から1を加算した値を前記第二の領域に対応するセマフォ変数としてそれぞれ前記セマフォ変数表を更新させ、前記処理完了情報を1つ削除させる工程を実行させるためのプログラム。
(付記10) 処理要求情報が蓄積される第一の領域と、処理要求の完了を示す情報である処理完了情報が前記処理要求を特定する情報と対応付けられ蓄積される第二の領域とが格納される蓄積部と、前記蓄積部を制御し、前記処理要求を実行する制御部を有する第一の装置と、前記第一の装置に接続され、前記第一の領域を特定する情報とセマフォ変数が対応付けられ蓄積されるセマフォ変数表とが格納される蓄積部と、前記蓄積部を制御し、前記処理要求情報を前記第一の装置へ送信する制御部を有する第二の装置とを備え、前記第二の装置における制御部は、予め前記第一の領域に対するセマフォ変数の初期値を前記第一の領域に蓄積可能な情報数の最大数として設定し、特定のタイミングで前記第一の領域に対応するセマフォ変数から1を減算した値が正の値か判定し、正の値であれば、前記第一の領域に対応するセマフォ変数から1を減算した値を前記第一の領域に対応するセマフォ変数として更新し、前記第一の装置に新たな処理要求情報を送信し、前記第一の装置における制御部は、前記新たな処理要求情報を受信して前記第一の領域に追加し、特定のタイミングで前記第一の領域に蓄積された処理要求を実行し、該処理要求に対応する処理完了情報を作成して前記第二の領域に追加し、前記第二の装置における制御部は、特定のタイミングで前記第二の領域に前記処理完了情報が蓄積されているか判定し、蓄積されていれば、前記第一の領域に対応するセマフォ変数に1を加算した値を前記第一の領域に対応するセマフォ変数として更新し、前記第二の領域に蓄積された前記処理完了情報を1つ削除することを特徴とするシステム。
(付記11) 処理要求情報が蓄積される第一の領域と、処理要求の完了を示す処理完了情報が前記処理要求を特定する情報と対応付けられ蓄積される第二の領域とが格納される蓄積部と、前記蓄積部を制御し、前記処理要求を実行する制御部を有する第一の装置と、前記第一の装置に接続され、前記第一の領域および前記第二の領域を特定する情報とセマフォ変数が対応付けられ蓄積されるセマフォ変数表とが格納される蓄積部と、前記蓄積部を制御し、前記処理要求情報を前記第一の装置へ送信する制御部を有する第二の装置とを備え、前記第二の装置における制御部は、予め前記第一の領域に対するセマフォ変数の初期値を前記第一の領域に蓄積可能な情報数の最大数として、前記第二の領域に対するセマフォ変数の初期値を前記第二の領域に蓄積可能な情報数の最大数としてそれぞれ設定し、特定のタイミングで前記第一の領域に対応するセマフォ変数から1を減算した値と前記第二の領域に対応するセマフォ変数から1を減算した値が共に正の値か判定し、共に正の値であれば、前記第一の領域に対応するセマフォ変数から1を減算した値を前記第一の領域に対応するセマフォ変数として、また前記第二の領域に対応するセマフォ変数から1を減算した値を前記第二の領域に対応するセマフォ変数としてそれぞれ更新し、前記第一の装置に新たな処理要求情報を送信し、前記第一の装置における制御部は、前記新たな処理要求情報を受信して前記第一の領域に追加し、特定のタイミングで前記第一の領域に蓄積された処理要求を実行し、該処理要求に対応する処理完了情報を作成して前記第二の装置に送信し、前記第二の装置における制御部は、前記処理完了情報を受信して前記第二の領域に追加し、特定のタイミングで前記第二の領域に前記処理完了情報が蓄積されているか判定し、蓄積されていれば、前記第一の領域に対応するセマフォ変数に1を加算した値を前記第一の領域に対応するセマフォ変数として、また前記第二の領域に対応するセマフォ変数の値から1を加算した値を前記第二の領域に対応するセマフォ変数としてそれぞれ更新し、前記第二の領域に蓄積された前記処理完了情報を1つ削除することを特徴とするシステム。
(付記12) 処理要求情報が蓄積される複数の第一の領域と、処理要求の完了を示す処理完了情報が前記処理要求を特定する情報と対応付けられ蓄積される第二の領域とが格納される蓄積部と、前記蓄積部を制御し、かつ前記処理要求を実行する制御部を有する第一の装置と、前記第一の装置に接続され、前記複数の第一の領域の各第一の領域および前記第二の領域を特定する情報とセマフォ変数が対応付けられ蓄積されるセマフォ変数表と、前記処理要求を特定する情報と前記複数の第一の領域のうち該処理要求が蓄積される第一の領域を特定する情報が対応付けられ蓄積される対応表とが格納される蓄積部と、前記蓄積部を制御し、かつ前記処理要求情報を前記第一の装置へ送信する制御部を有する第二の装置とを備え、前記第二の装置における制御部は、予め複数の第一の領域の各第一の領域および第二の領域にそれぞれ対応するセマフォ変数の初期値を前記第一の領域および前記第二の領域にそれぞれ蓄積可能な情報数の最大数として設定し、特定のタイミングで前記複数の第一の領域のうち1つを選択し、前記選択された第一の領域に対応するセマフォ変数から1を減算した値と前記第二の領域に対応するセマフォ変数から1を減算した値が共に正の値か判定し、共に正の値であれば、前記選択された第一の領域に対応するセマフォ変数から1を減算した値を前記選択された第一の領域に対応するセマフォ変数として、また前記第二の領域に対応するセマフォ変数から1を減算した値を前記第二の領域に対応するセマフォ変数としてそれぞれ更新し、前記第一の装置に新たな処理要求情報を送信し、前記選択された第一の領域と前記処理要求を対応付けて対応表に蓄積し、前記第一の装置における制御部は、前記新たな処理要求情報を受信して前記第一の領域に蓄積し、特定のタイミングで前記第一の領域に蓄積された処理要求を実行し、該処理要求に対応する処理完了情報を作成して前記第二の装置に送信し、前記第二の装置における制御部は、前記処理完了情報を受信して前記第二の領域に蓄積し、特定のタイミングで前記第二の領域に前記処理完了情報が蓄積されているか判定し、蓄積されていれば、前記第一の領域に対応するセマフォ変数に1を加算した値を前記第一の領域に対応するセマフォ変数として、また前記第二の領域に対応するセマフォ変数の値から1を加算した値を前記第二の領域に対応するセマフォ変数としてそれぞれ更新し、かつ前記第二の領域に蓄積された前記処理完了情報を1つ削除することを特徴とするシステム。
(付記13) 付記10において、
前記第一の装置が、サーバマシンに備えられたチャネルアダプタであり、前記第二の装置が、ネットワークインタフェースカードに備えられたチャネルアダプタであることを特徴とするシステム。
(付記14) 付記10において、
前記第一の装置、前記第二の装置が共にサーバマシンに備えられたホストチャネルアダプタであることを特徴とするシステム。
1 コンピュータ、2 CPU、3 システムバス、4 メモリコントローラ、5
メモリ、6 ホストチャネルアダプタ、7 メモリ、8 コプロセッサ、9 インフィニバンドスイッチ、10 ネットワークインタフェースカード、12 SCSIカード、14 ファイバチャネルカード、11、13、15ターゲットチャネルアダプタ、24 ワークキュー、26 ワークリクエスト、28 コンプリーションキュー、30 ワークコンプリーション

Claims (2)

  1. 処理要求を発行する発行装置と、
    前記処理要求を受信する受信装置と、
    前記処理要求について処理を実行するターゲット装置と、
    前記発行装置が前記処理要求を発行するときに当該処理要求を記憶する第1の記憶手段と、
    前記発行装置が前記第1の記憶手段に記憶可能な処理要求の数を超えない値に設定された変数を記憶する第2の記憶手段と、
    前記受信装置が前記第1の記憶手段に記憶された処理要求について前記ターゲット装置による処理完了に応じて処理結果に関するデータを記憶する記憶手段であって、前記第1の記憶手段に記憶可能な処理要求の数以上の数の前記データを格納可能な第3の記憶手段とを有し、
    前記発行装置は、前記発行する処理要求の前記第1の記憶手段への記憶に応じて、前記変数を1減少させ、前記第3の記憶手段からの前記データの読み出しに応じて前記変数を1増加させる処理を行い、前記発行装置による前記第1の記憶手段への更なる処理要求の記憶は、前記変数の値が正である場合に行
    ことを特徴とする情報処理装置。
  2. 処理要求を発行する発行装置と、前記処理要求を受信する受信装置と前記処理要求について処理を実行するターゲット装置とを有する情報処理装置の情報処理方法であって、
    前記発行装置が、第1の記憶手段に、前記処理要求を発行するときに当該処理要求を順次記憶する第1の工程と、
    前記発行装置が、前記第1の記憶手段に記憶可能な処理要求の数を超えない値に設定された変数を、第2の記憶手段に記憶する第2の工程と、
    前記受信装置が、前記第1の記憶手段に記憶可能な処理要求の数以上の数のデータを格納可能な第3の記憶手段に、前記第1の記憶手段に記憶された処理要求について前記ターゲット装置による処理完了に応じて処理結果に関するデータを順次記憶する第3の工程と、
    前記発行装置が、前記発行する処理要求の前記第1の記憶手段への記憶に応じて、前記変数を1減少させ、前記第3の記憶手段からの前記データの読み出しに応じて前記変数を1増加させる第4の工程を備え、
    前記発行装置が、前記第1の記憶手段への更なる処理要求の発行と記憶を、前記変数の値が正である場合に行う、
    ことを特徴とする情報処理方法。
JP2010027577A 2010-02-10 2010-02-10 記憶装置への情報蓄積制御方法 Expired - Fee Related JP5402698B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010027577A JP5402698B2 (ja) 2010-02-10 2010-02-10 記憶装置への情報蓄積制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010027577A JP5402698B2 (ja) 2010-02-10 2010-02-10 記憶装置への情報蓄積制御方法

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2003043097A Division JP4484436B2 (ja) 2003-02-20 2003-02-20 記憶装置への情報蓄積制御方法

Publications (2)

Publication Number Publication Date
JP2010157254A JP2010157254A (ja) 2010-07-15
JP5402698B2 true JP5402698B2 (ja) 2014-01-29

Family

ID=42575079

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010027577A Expired - Fee Related JP5402698B2 (ja) 2010-02-10 2010-02-10 記憶装置への情報蓄積制御方法

Country Status (1)

Country Link
JP (1) JP5402698B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10331595B2 (en) * 2014-10-23 2019-06-25 Mellanox Technologies, Ltd. Collaborative hardware interaction by multiple entities using a shared queue

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02118755A (ja) * 1988-10-27 1990-05-07 Hitachi Ltd 装置制御方式
JPH035869A (ja) * 1989-06-01 1991-01-11 Matsushita Electric Ind Co Ltd 情報処理装置
JP2697744B2 (ja) * 1989-07-03 1998-01-14 富士通株式会社 チャネル装置
JPH052468A (ja) * 1991-02-13 1993-01-08 Oki Electric Ind Co Ltd バツフアメモリ管理方式
JP3586522B2 (ja) * 1996-09-26 2004-11-10 日本電気株式会社 周辺機器制御装置
JP3982077B2 (ja) * 1998-08-26 2007-09-26 富士通株式会社 マルチプロセッサシステム
JP2000099446A (ja) * 1998-09-21 2000-04-07 Hitachi Ltd コマンド発行制御方法および装置
US6301639B1 (en) * 1999-07-26 2001-10-09 International Business Machines Corporation Method and system for ordering priority commands on a commodity disk drive
JP2001188628A (ja) * 1999-12-28 2001-07-10 Nec Corp 画像処理装置の消費電力低減装置

Also Published As

Publication number Publication date
JP2010157254A (ja) 2010-07-15

Similar Documents

Publication Publication Date Title
KR100810015B1 (ko) 시스템, 관리 서버, 수신 서버, 제어 방법, 제어 프로그램및 기록 매체
JP4744171B2 (ja) 計算機システム及び記憶制御方法
JP5147584B2 (ja) ストレージサブシステム及びコントローラによるコマンド実行方法
JP4943278B2 (ja) ウィルススキャン方法及びその方法を用いた計算機システム
JP4568168B2 (ja) 情報処理方法及びシステム
JP5909566B2 (ja) 計算機システム及びその制御方法
JP4748950B2 (ja) 記憶領域管理方法及びシステム
US20110107344A1 (en) Multi-core apparatus and load balancing method thereof
JP2010015610A (ja) 情報処理装置、情報処理装置の制御方法、およびプログラム
JP2003131908A (ja) 記憶制御装置
CN105739930A (zh) 一种存储架构及其初始化方法和数据存储方法及管理装置
CN112346653A (zh) 驱动器箱、存储系统和数据传送方法
JP4625675B2 (ja) ストレージ装置のリソース割り当て方法及びストレージ装置
JP5193801B2 (ja) ストレージシステムの性能向上又は管理方法、システム、装置及びプログラム
JP5402698B2 (ja) 記憶装置への情報蓄積制御方法
JP4484436B2 (ja) 記憶装置への情報蓄積制御方法
JP5158576B2 (ja) 入出力制御システム、入出力制御方法、及び、入出力制御プログラム
US20140082433A1 (en) SCSI Reservation Status Information on a SAN Disk
EP3293625B1 (en) Method and device for accessing file, and storage system
JP5884566B2 (ja) バッチ処理システム、進捗状況確認装置、進捗状況確認方法、及びプログラム
JP6836536B2 (ja) ストレージシステム及びio処理の制御方法
JP6200100B2 (ja) 計算機システム
JP5287938B2 (ja) デバイス制御システム及びプログラム
KR101440605B1 (ko) 파일 시스템 게이트웨이 유닛을 구비한 사용자 장치 및 저장 데이터 억세스 방법
WO2020166374A1 (ja) 処理システム、処理方法、上位システム、下位システム、上位プログラムおよび下位プログラム

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120904

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121102

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20130416

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130712

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20130722

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131001

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131014

LAPS Cancellation because of no payment of annual fees