(57)【要約】  データを送受信フレーム毎にフレーム単位で制御するインタフェース制御回路と、受信データバッファに格納された受信データをコマンド発行元へ転送する受信バッファ制御回路と、送信データバッファに格納された送信データをインタフェースへ転送する送信バッファ制御回路と、受信データと送信データの転送を制御する複数のプロトコル制御回路と、インタフェース制御回路で受信された受信フレームに付加される制御情報を基に受信フレームの割当先を複数のプロトコル制御回路の中から選択して、受信フレームの処理を割り当てる受信フレームルーティング制御回路を有する。
2013001578.tif 000002
【特許請求の範囲】
【請求項１】
コマンド発行元のアクセス対象とインタフェースを介してデータの送受信を行うと共に、前記コマンド発行元のアクセス対象と送受信されるデータを送受信フレーム毎にフレーム単位で制御する1又は複数のインタフェース制御回路と、
前記インタフェース制御回路で送受信される送受信フレームのうち受信フレームのデータを受信データとして受信データバッファに格納し、前記受信データバッファに格納された前記受信データを前記コマンド発行元へ転送する受信バッファ制御回路と、
前記コマンド発行元から送信される送信データを送信データバッファに格納し、前記送信データバッファに格納された前記送信データを前記インタフェースへ転送する送信バッファ制御回路と、
前記受信バッファ制御回路に対して前記受信データの転送を制御すると共に、前記送信バッファ制御回路に対して前記送信データの転送を制御する複数のプロトコル制御回路と、
前記インタフェース制御回路で送受信される送受信フレームのうち受信フレームに付加される制御情報を基に前記受信フレームの割当先を前記複数のプロトコル制御回路の中から選択し、前記選択したプロトコル制御回路に前記受信フレームの処理を割り当てる受信フレームルーティング制御回路と、を有することを特徴とする入出力制御装置。
【請求項２】
請求項１に記載の入出力制御装置であって、
前記複数のプロトコル制御回路のうち、前記コマンド発行元から起動コマンドを受信したプロトコル制御回路は、
前記起動コマンドに従って送信フレームに付加される前記制御情報として、当該プロトコル制御回路固有の識別情報を含む制御情報を生成し、前記生成した制御情報を前記送信バッファに格納された送信データに付加し、
前記複数のプロトコル制御回路のうち、前記受信フレームルーティング制御回路により、前記受信フレームの処理が割り当てられたプロトコル制御回路は、
前記受信バッファ制御回路に対して前記受信フレームに対応した受信データの転送を指示することを特徴とする入出力制御装置。
【請求項３】
請求項２に記載の入出力制御装置であって、
前記送信フレームに付加される前記制御情報は、前記送信フレーム送信側の動作を特定する動作情報を含み、前記プロトコル制御回路固有の識別情報は、前記各プロトコル制御回路を一意に識別するためのエクスチェンジ番号を含むことを特徴とする入出力制御装置。
【請求項４】
請求項１に記載の入出力制御装置であって、
前記インタフェース制御回路で送受信される送受信フレームのうち受信フレームに付加される制御情報は、前記コマンド発行元のアクセス対象で生成されるフレームに付加される制御情報であって、前記プロトコル制御回路固有の識別情報を含む制御情報であることを特徴とする入出力制御装置。  
【請求項５】
請求項４に記載の入出力制御装置であって、
前記受信フレームに付加される制御情報は、前記受信フレームの送信元の動作を特定する動作情報を含み、前記プロトコル制御回路固有の識別情報は、前記各プロトコル制御回路を一意に識別するためのエクスチェンジ番号を含むことを特徴とする入出力制御装置。
【請求項６】
請求項１に記載の入出力制御装置であって、
前記受信フレームルーティング制御回路は、
前記受信フレームに付加される制御情報の中に前記プロトコル制御回路を識別するための識別情報として、前記プロトコル制御回路を全て選択するための識別情報が存在する場合、全ての前記プロトコル制御回路に対して、前記受信フレームの処理を割り当てることを特徴とする入出力制御装置。
【請求項７】
請求項１に記載の入出力制御装置であって、
前記受信データバッファは、前記複数のインタフェース制御回路共通の受信データバッファとして構成され、前記送信データバッファは、前記複数のインタフェース制御回路共通の送信データバッファとして構成されることを特徴とする入出力制御装置。
【請求項８】
コマンド発行元のアクセス対象とインタフェースを介してデータの送受信を行うと共に、前記コマンド発行元のアクセス対象と送受信されるデータを送受信フレーム毎にフレーム単位で制御する1又は複数のインタフェース制御回路と、
前記インタフェース制御回路で送受信される送受信フレームのうち受信フレームのデータを受信データとして受信データバッファに格納し、前記受信データバッファに格納された前記受信データを前記コマンド発行元へ転送する受信バッファ制御回路と、
前記コマンド発行元から送信される送信データを送信データバッファに格納し、前記送信データバッファに格納された前記送信データを前記インタフェースへ転送する送信バッファ制御回路と、
前記受信バッファ制御回路に対して前記受信データの転送を制御すると共に、前記送信バッファ制御回路に対して前記送信データの転送を制御する複数のプロトコル制御回路と、
前記インタフェース制御回路で送受信される送受信フレームのうち受信フレームのルーティングを制御する受信フレームルーティング制御回路と、を有する入出力制御装置のフレーム処理方法であって、
前記受信フレームルーティング制御回路が、前記受信フレームに付加される制御情報を基に前記受信フレームの割当先を前記複数のプロトコル制御回路の中から選択するステップと、
前記受信フレームルーティング制御回路が、前記選択したプロトコル制御回路に前記受信フレームの処理を割り当てるステップと、を含むことを特徴とする入出力制御装置のフレーム処理方法。
【請求項９】
請求項８に記載の入出力制御装置のフレーム処理方法であって、
前記コマンド発行元から起動コマンドを受信したプロトコル制御回路が、前記起動コマンドに従って送信フレームに付加される前記制御情報として、当該プロトコル制御回路固有の識別情報を含む制御情報を生成するステップと、
前記コマンド発行元から起動コマンドを受信したプロトコル制御回路が、前記生成した制御情報を前記送信バッファに格納された送信データに付加するステップと、
前記受信フレームルーティング制御回路により、前記受信フレームの処理が割り当てられたプロトコル制御回路が、前記受信バッファ制御回路に対して前記受信フレームに対応した受信データの転送を指示するステップと、を含むことを特徴とする入出力制御装置のフレーム処理方法。
【請求項１０】
請求項８に記載のフレーム処理方法であって、
前記受信フレームルーティング制御回路が、前記受信フレームに付加される制御情報の中に前記プロトコル制御回路を識別するための識別情報として、前記プロトコル制御回路を全て選択するための識別情報が存在する場合、全ての前記プロトコル制御回路に対して、前記受信フレームの処理を割り当てるステップを含むことを特徴とする入出力制御装置のフレーム処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システム内でデータを送受信するための入出力制御装置及び入出力制御装置のフレーム処理方法に関する。
【背景技術】
【０００２】
超高速データリンクの分野においては、飛躍的な技術的発展がある。計算機システムでは、コンピュータと入出力（I/O）装置間のネットワークの相互接続には、さらなる高速化が望まれており、実用的で安価な相互接続手段として、ファイバチャネル（FC）が選択されている。【０００３】
また、ファイバチャネルとホストプロセッサの接続手段として、PCI−SIGにて策定されたPCI（Peripheral  Component Interconnect）を用いる機構が広く用いられており、各社からファイバチャネルのHBA（Host  Bus  Adapter）が市場に提供されている。【０００４】
近年のHBAにおける市場では、仮想化技術やクラウドコンピューティングの台頭により、一つのHBAを複数のゲストOS（Operating  System）で共有して使用することで、TCO（Total  Cost  of  Ownership）を削減するホストシステムが普及しており、共有によるネットワークの負荷増大に伴うHBAの性能（単位時間当たりのトランザクション数）向上に対する要求が飛躍的に増大している。【０００５】
HBAの性能を高めるに際して、例えば、全く独立した複数のファイバチャネル制御回路を１つのLSI（Large  Scale  Integrated  circuit）に集積する方法が報告されている（特許文献１参照）。この特許文献１には、複数のファイバチャネルポートで送受信されるフレームの処理を１つのプロトコル制御回路で実行する方法が言及されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−２２３９１８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし、特許文献１に記載されている方式では、トランザクション数の増加に伴い、プロトコル制御回路の負荷が増大することがある。【０００８】
この場合、プロトコル制御回路の動作周波数を上げることで、処理性能を向上させることは可能である。しかし、プロトコル制御回路の動作周波数の向上には技術的限界があり、この方法のみで、プロトコル制御回路に求められる性能を満足することは難しい。【０００９】
また、別の性能向上手法として、複数のファイバチャネルポートに対して、１対１にプロトコル制御回路を搭載することも可能である。この方法によれば、プロトコル制御回路の負荷を重くすることなく、複数のファイバチャネルポートで送受信されるフレームの処理を同時に制御することが可能となる。【００１０】
しかし、負荷の軽いファイバチャネルポートが存在する場合、そのファイバチャネルポートを制御するプロトコル制御回路の処理も軽くなるため、一部のプロトコル制御回路のアイドル時間が多くなり、複数のプロトコル制御回路全体としては、アイドル時間を有効に使用できなくなる。【００１１】
本発明は、前記従来技術の課題に鑑みて為されたものであり、その目的は、複数の受信フレームを、複数のプロトコル制御回路に割り当て、複数の受信フレームの処理を並列に実行することができる入出力制御装置及び入出力制御装置のフレーム処理方法を提供することにある。
【課題を解決するための手段】
【００１２】
前記目的を達成するために、本発明は、コマンド発行元のアクセス対象と送受信されるデータを送受信フレーム毎にフレーム単位で制御する1又は複数のインタフェース制御回路と、前記インタフェース制御回路で送受信される送受信フレームのうち受信フレームの受信データを受信データバッファに格納し、前記受信データバッファに格納された前記受信データを前記コマンド発行元へ転送する受信バッファ制御回路と、前記コマンド発行元から送信される送信データを送信データバッファに格納し、前記送信データバッファに格納された前記送信データを前記インタフェースへ転送する送信バッファ制御回路と、前記受信バッファ制御回路に対して前記受信データの転送を制御すると共に、前記送信バッファ制御回路に対して前記送信データの転送を制御する複数のプロトコル制御回路と、前記インタフェース制御回路で送受信される送受信フレームのうち受信フレームに付加される制御情報を基に前記受信フレームの割当先を前記複数のプロトコル制御回路の中から選択し、前記選択したプロトコル制御回路に前記受信フレームの処理を割り当てる受信フレームルーティング制御回路と、を有することを特徴とする。
【発明の効果】
【００１３】
本発明によれば、複数の受信フレームを、複数のプロトコル制御回路に割り当て、複数の受信フレームの処理を並列に実行することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明に係る入出力制御装置が用いられた計算機システムの全体構成図である。
【図２】本発明に係る入出力制御装置のブロック図である。
【図３】ファイバチャネルフレームの構成図である。
【図４】ファイバチャネルフレーム内のFC-PHヘッダのフォーマット構成図である。
【図５】エクスチェンジ番号のフォーマット構成図である。
【図６】入出力制御装置がオリジネータとして動作する場合の動作説明図である。
【図７】入出力制御装置がレスポンダとして動作する場合の動作説明図である。
【図８】受信フレームルーティング制御回路のブロック図である。
【図９】受信フレームルーティング制御回路の動作を説明するためのフローチャートである。
【発明を実施するための形態】
【００１５】
＜実施例＞
本実施例は、インタフェース制御回路で受信した受信フレームに付加される制御情報を基に受信フレームの割当先を複数のプロトコル制御回路の中から選択し、選択したプロトコル制御回路に受信フレームの処理を割り当てるものである。
【００１６】
また、本実施例は、本発明を、４つのファイバチャネルポートに対して４つのプロトコル制御回路を有する入出力制御装置に適用した場合の例であり、ファイバチャネルポートに対するプロトコル制御回路の数は実施例に限定されるものではない。
【００１７】
以下、本発明の一実施例を図面に基づいて説明する。
【００１８】
図１は、本発明に係る入出力制御装置を備えた計算機システムのシステム構成図である。
【００１９】
図１において、計算機システムは、ホスト装置１０と、入出力装置１２、１４と、ディスク制御装置１６から構成される。
【００２０】
ホスト装置１０は、１台または複数台のCPU（中央処理装置）２０と、ホストバスコントローラ２２と、主記憶装置２４で構成され、コマンド発行元となる。
【００２１】
CPU２０は、処理プログラムに従ってホスト装置１０全体を統括制御するプロセッサとして構成される。主記憶装置２４は各種データを記憶するデータ記憶領域として構成される。ホストバスコントローラ２２は、CPU２０と主記憶装置２４間のデータ転送、入出力制御装置１２とCPU２０間のデータ転送又は入出力制御装置１２と主記憶装置２４間のデータ転送を制御する。ホストバスコントローラ２２と入出力制御装置１２との間には、インタフェースとして、例えば、PCI-Expressインタフェース６０が構成される。
【００２２】
入出力制御装置１２は、ホスト装置１０又は入出力制御装置１４とデータの授受を行う装置であって、４つのポート（入出力ポート）３０、３２、３４、３６を備えている。入出力制御装置１４は、入出力制御装置１２又はディスク制御装置１６とデータの授受を行う装置であって、４つのポート（入出力ポート）４０、４２、４４、４６を備えている。ポート３０〜３６とポート４０〜４６には、例えば、光トランシーバが配置されており、各ポート間で、光トランシーバを介してデータの授受が行われる。この場合、入出力制御装置１２と入出力制御装置１４との間には、インタフェースとして、例えば、ファイバチャネルインタフェース６２が構成される。
【００２３】
ディスク制御装置１６は、入出力制御装置１４とデータの授受を行う装置であって、ディスク装置５０と、ディスクコントローラ５２で構成され、コマンド発行元（ホスト装置１０）のアクセス対象となる。
【００２４】
ディスク制御装置１６と入出力制御装置１４との間には、インタフェースとして、例えば、PCI-Expressインタフェース６４が構成される。
【００２５】
ディスク装置５０は、複数の記憶デバイス、例えば、HDD（Hard  Disk  Drive）で構成される。ディスクコントローラ５２は、ディスク装置５０に対するデータの入出力を制御する。ディスクコントローラ５２は、入出力制御装置１４に接続される。
【００２６】
次に、図２に入出力制御装置１２のブロック図を示す。
【００２７】
図２において、入出力制御装置１２は、光トランシーバ７０、７２、７４、７６と、ファイバチャネルインタフェース制御回路７８、８０、８２、８４と、送信データバッファ８６と、送信バッファ制御回路８８と、受信データバッファ９０と、受信バッファ制御回路９２と、受信フレームルーティング制御回路９４と、４つのプロトコル制御回路９６、９８、１００、１０２と、DMA（Direct  Memory  Access）制御回路１０４と、起動キュー制御回路１０６と、PCI-Express制御回路１０８から構成される。
【００２８】
光トランシーバ７０〜７６は、それぞれポート３０〜３６に配置され、入出力制御装置１４のポート４０〜４６に配置される光トランシーバとデータ（フレーム）の送受信を行う。
【００２９】
ファイバチャネルインタフェース制御回路７８、８０、８２、８４は、シリアライザデシリアライザ（Serdes）１１０と、フレーム生成回路１１２と、フレーム解析回路１１４とを有し、コマンド発行元のアクセス対象と送受信されるデータを送受信フレーム毎にフレーム単位で制御するインタフェース回路として構成される。
【００３０】
なお、ファイバチャネルインタフェース制御回路７８、８０、８２、８４は、それぞれ同一の構成であるので、以下、ファイバチャネルインタフェース制御回路７８についてのみ説明する。
【００３１】
シリアライザデシリアライザ（Serdes）１１０は、光トランシーバ７０の受信による受信フレームに付加されたシリアルデータをパラレルデータに変換し、変換されたパラレルデータをフレーム解析回路１１４に出力し、フレーム生成回路１１２から送出された送信フレームを光トランシーバ７０に出力する。
【００３２】
フレーム生成回路１１２は、送信データバッファ８６から送信される送信データを基に送信フレームのフレームヘッダを生成し、生成したフレームヘッダに送信データを付加し、送信データとフレームヘッダが付加された送信フレームをシリアライザデシリアライザ（Serdes）１１０に出力する。
【００３３】
フレーム解析回路１１４は、シリアライザデシリアライザ（Serdes）１１０で変換されたパラレルデータからオーダーセットを認識すると共に、フレーム組み立ておよびCRC（Cyclic  Redundancy  Check）を用いた誤り検出等の処理を行い、処理結果を受信フレームに反映し、処理結果が反映された受信フレームを受信データバッファ９０へ出力する。
【００３４】
送信データバッファ８６は、ファイバチャネルインタフェース制御回路７８〜８４共通の送信データバッファであって、DMA制御回路１０４から送出される送信データを格納する。送信バッファ制御回路８８は、プロトコル制御回路９６〜１０２のうちいずれか１つのプロトコル制御回路からの指示を基に送信データバッファ８６内の送信データをファイバチャネルインタフェース制御回路７８〜８４のうちいずれか１つのファイバチャネルインタフェース制御回路に転送する制御を実行する。
【００３５】
受信データバッファ９０は、ファイバチャネルインタフェース制御回路７８〜８４共通の受信データバッファであって、光トランシーバ７０〜７６の受信による受信フレームに付加された受信データを格納する。受信バッファ制御回路９２は、受信データバッファ９０に格納された受信データをDMA制御回路４０へ転送する制御を実行すると共に、受信データバッファ９０に格納された受信フレームのバッファアドレスを、受信フレームルーティング制御回路９４を介してプロトコル制御回路９６〜１０２に割り込み処理で通知する。
【００３６】
受信フレームルーティング制御回路９４は、ファイバチャネルインタフェース制御回路７８〜８４の出力による受信フレームに付加された制御情報を判別し、４つのプロトコル制御回路９６〜１０２のうちいずれか１つのプロトコル制御回路を受信フレームの割当先として決定するためのルーティング制御を実行する。
【００３７】
プロトコル制御回路９６〜１０２は、受信バッファ制御回路９２に対して受信データの転送を制御すると共に、送信バッファ制御回路８８に対して送信データの転送を制御する。また、プロトコル制御回路９６〜１０２は、起動キュー制御回路１０６からの起動コマンドをスタックする起動キュー１１６をそれぞれ備えている。
【００３８】
プロトコル制御回路９６〜１０２は、それぞれが備える起動キュー１１６にスタックされた起動コマンドに従って処理を実行する。例えば、ライトコマンドがプロトコル制御回路９６の起動キュー１１６にスタックされた場合、プロトコル制御回路９６は、送信フレームを送信するための指示をDMA制御回路１０４と送信バッファ制御回路８８に出力する。プロトコル制御回路９８〜１０２も同様に、それぞれが備える起動キュー１１６にコマンドがスタックされると、送信フレームを送信するための指示をDMA制御回路１０４と送信バッファ制御回路８８に出力する。
【００３９】
一方、受信フレームルーティング制御回路９４によって受信フレームの割当先が決定された場合、プロトコル制御回路９６〜１０２のうち受信フレームが割り当てられたプロトコル制御回路は、受信バッファ制御回路９２から割り込みで通知されたバッファアドレスを基に主記憶装置２４におけるデータの格納先をDMA制御回路１０４に指定するための処理を実行する。
【００４０】
DMA制御回路１０４は、例えばPCI-Express制御回路などのバス制御回路１０８からの送信フレームを送信データバッファ８６に送出する制御を実行し、また受信データバッファ９０から送出される受信フレームをPCI-Express制御回路１０８に送出する制御を実行する。この際、プロトコル制御回路９６〜１０２のうちいずれかの１つのプロトコル制御回路から受信フレームの送出が指示された場合、DMA制御回路１０４は、受信データバッファ９０から、指定の受信フレームを読み出し、読み出した受信フレームをPCI-Express制御回路１０８に送出する。
【００４１】
PCI-Express制御回路１０８は、ホスト装置１０とDMA制御回路１０４との間で授受される受信フレームまたは送信フレームの中継を行うとともに、ホスト装置１０のデバイスドライバ２８から送出される起動コマンドを起動キュー制御回路１０６に送出するとともに、起動キュー１１６の状態を、PCI-Express制御回路１０８を介してホスト装置１０に出力する。なお、デバイスドライバ２８は、CPU２０がデバイス処理プログラムを実行することによって構成される。
【００４２】
入出力制御装置１４は、入出力制御装置１２と同一の要素を用いて構成することができる。また、入出力制御装置１４は、入出力制御装置１２を構成する要素のうち受信フレームルーティング制御回路９４を除外し、４つのプロトコル制御回路を用いる代わりに、１つのプロトコル制御回路を用いて構成することもできる。
【００４３】
次に、図３に、ファイバチャネルフレームの構成図を示す。
【００４４】
図３において、ファイバチャネルフレーム２００は、各プロトコル制御回路９６〜１０２で解析される受信フレームとして構成される。このファイバチャネルフレーム２００は、４バイトのSOF（Start  Of  Frame）２０２と、２４バイトのFC-PH（Fibre  Channel  Physical）ヘッダ２０４と、０〜２１１２バイトのデータペイロード２０６と、４バイトのCRC２０８と、４バイトのEOF（End  Of  Frame）２１０から構成される。
【００４５】
SOF２０２とEOF２１０は、デリミタと呼ばれ、ファイバチャネルフレーム２００の区切りを識別するためのオーダーセットである。FC-PHヘッダ２０４は、ファイバチャネルフレーム２００の制御情報として構成される。データペイロード２０６は、例えば、ホスト装置１０が利用するデータで構成される。CRC２０８は、誤り検出用のデータで構成される。この際、データペイロード２０６は、CRCを用いて妥当性が保証されたデータとして構成される。
【００４６】
次に、図４に、ファイバチャネルフレーム内のFC-PHヘッダのフォーマット構成図を示す。
【００４７】
図４において、ファイバチャネルフレーム２００内のFC-PHヘッダのフォーマット３００は、ワードアドレス３０２と、バイトアドレス３０４から構成される。ワードアドレス３０２には、アドレスとして「０」〜「５」が割り当てられ、バイトアドレス３０４には、アドレスとして「０」〜「３」が割り当てられる。各アドレスは、複数のフィールド３０６〜３２８に対応付けられる。
【００４８】
これら複数のフィールド３０６〜３２８のうちフィールド３１６はF-CTLとして構成され、このF-CTL には、Exchange  Context（以下、E-Cと称する。）と呼ばれるフィールドが含まれている。フィールド３１６のE-C内には、フレームの送信側が、オリジネータ（Originator）として動作する場合、“０”の情報が、フレームの送信側の動作を特定する動作情報として付与され、フレームの送信側が、レスポンダ（Responder）として動作する場合には、“１”の情報が、フレームの送信側の動作を特定する動作情報として付与される。
【００４９】
ここで、送受信フレームとしてファイバチャネルフレーム２００を用いる場合、ホスト装置１０とディスク制御装置１６との間の１回のリード/ライト動作で送受信される、論理的なフレームの集合をエクスチェンジ（Exchange）と称し、ファイバチャネルでは、この論理的なフレームの送受信に伴うデータ転送をエクスチェンジ毎に多重動作することとしている。
【００５０】
そこで、本実施例では、エクスチェンジ毎に割り当てる番号を各プロトコル制御回路９６〜１０２でユニークに決定し、各プロトコル制御回路で決定されたエクスチェンジ番号をファイバチャネルフレーム２００のFC-PHヘッダ内に付与することとしている。
【００５１】
即ち、送受信フレームに付加される制御情報に属する識別情報であって、各プロトコル制御回路９６〜１０２固有の識別情報として、各プロトコル制御回路９６〜１０２を一意に識別するためのエクスチェンジ番号をファイバチャネルフレーム２００のFC-PHヘッダ内に付与する。
【００５２】
具体的には、フォーマット３００のうちフィールド３２４をOX-ID（Originator  Exchange  IDentifier）として構成し、フィールド３２６をRX-ID（Responder  Exchange  IDentifier）として構成する。
【００５３】
この際、フレーム送信側が、オリジネータとして動作する場合、フィールド３２４の「OX-ID」にエクスチェンジ番号が付与され、フレームの送信側が、レスポンダとして動作する場合、フィールド３２６のRX-IDに、エクスチェンジ番号が付与される。なお、エクスチェンジ番号は、後述するように、プロトコル制御回路番号を含む番号である。
【００５４】
次に、図５に、エクスチェンジ番号のフォーマットの構成図を示す。
【００５５】
図５において、エクスチェンジ番号のフォーマット４００は、バイトアドレス４０２と、ビットアドレス４０４と、マッピング４０６から構成される。バイトアドレス４０２のうちバイト０、１またはバイト２、３にはビットアドレス４０４として、「０」〜「７」がそれぞれ割り当てられる。１６ビットで構成されるビットアドレス４０４のうち先頭の２ビットには、４つのプロトコル制御回路９６〜１０２の中から１つのプロトコル制御回路を選択するためのプロトコル制御回路番号４０８がマッピングされる。ビットアドレス４０４のうち残りの１４ビットには、エクスチェンジ番号４１０がマッピングされる。
【００５６】
次に、入出力制御装置１２がオリジネータとして動作するときの処理を図６に従って説明する。
【００５７】
ホスト装置１０のデバイスドライバ２８が、トランザクションを実行するに際して、プロトコル制御回路９６〜１０２の中から１つのプロトコル制御回路、例えば、プロトコル制御回路９６を選択し、選択したプロトコル制御回路９６に起動コマンドを送出する場合、デバイスドライバ２８は、起動キュー制御回路１０６に対して起動コマンドを送出する。起動キュー制御回路１０６は、プロトコル制御回路９６の起動キュー１１６に、起動コマンドとして、フレーム送信起動命令をスタックする（６０１）。
【００５８】
フレーム送信起動命令を受けたプロトコル制御回路９６は、送信フレームを生成するとともに、送信フレームのフィールド３１６のE-Cに、“０”を設定し、フィールド３２４のOX-IDに、ユニークなエクスチェンジ番号（プロトコル制御回路番号４０８とエクスチェンジ番号４１０を含む番号）を付与する（６０２）。
【００５９】
その後、プロトコル制御回路９６は、送信バッファ制御回路８８と送信データバッファ８６を介して、例えば、ファイバチャネルインタフェース制御回路７８に送信フレームを送信する（６０３）。この送信フレームは、ファイバチャネルインタフェース制御回路７８から、光トランシーバ７０を介して入出力制御装置１４に送信された後、ディスク制御装置１６に送信される。
【００６０】
この後、ディスク制御装置１６は、送信フレームに応答する応答フレームを生成する。この際、ディスク制御装置１６は、レスポンダとして動作し、応答フレームのフィールド３１６のE-Cに“１”を設定し、フィールド３２４のOX-IDには、受信フレームに付与されたエクスチェンジ番号と同じ番号を付与し、各フィールドに制御情報が設定された応答フレームを入出力制御装置１４に送信する。
【００６１】
入出力制御装置１４は、ディスク制御装置１６から受信した応答フレームを入出力制御装置１２に送信する（６０４）。
【００６２】
この後、応答フレームを受信した入出力制御装置１２は、応答フレームを受信フレームとして処理し、この受信フレームを、プロトコル制御回路９６〜１０２のうち１つのプロトコル制御回路へ割り当てるためのルーティング処理を実行する。
【００６３】
フィールド３２４のOX-IDに、ユニークなエクスチェンジ番号（各プロトコル制御回路９６〜１０２を識別するための番号）を付与する場合、例えば、プロトコル制御回路９６は、プロトコル制御回路番号４０８に、２ビットの番号として、“００”を付与することができる。
【００６４】
また、プロトコル制御回路９８〜１０２が、フィールド３２４のOX-IDに、ユニークなエクスチェンジ番号を付与する場合には、例えば、プロトコル制御回路９８は、プロトコル制御回路番号４０８に、２ビットの番号として、“０１”を付与し、プロトコル制御回路１００は、プロトコル制御回路番号４０８に、２ビットの番号として、“１０”を付与し、プロトコル制御回路１０２は、プロトコル制御回路番号４０８に、２ビットの番号として、“１１”を付与することができる。
【００６５】
次に、入出力制御装置１２がレスポンダとして動作するときの処理を図７に従って説明する。
【００６６】
まず、ディスク制御装置１６が、例えば、リード処理又はライト処理とは異なる処理を実行するに際して、オリジネータとして動作する場合、送信フレームのフィールド３１６のE-Cに“０”を設定し、フィールド３２６のRX-IDにエクスチェンジ番号（プロトコル制御回路番号４０８とエクスチェンジ番号４１０を含む番号）をそれぞれ制御情報として設定し、これら制御情報が設定された送信フレームを、入出力制御装置１６を介して、入出力制御装置１２に送信する（７０１）。
【００６７】
入出力制御装置１２は、受信したフレームのフィールド３１６のE-Cが“０”に設定されているので、レスポンダとして動作し、受信した受信フレームのフィールド３２６のRX-IDに設定されたエクスチェンジ番号を判別し、この判別結果から、受信フレームの割当先となるプロトコル制御回路を決定する。
【００６８】
例えば、受信フレームルーティング制御回路９４は、受信フレームのフィールド３２６のRX-IDに設定されたエクスチェンジ番号を基に受信フレームの割当先となるプロトコル制御回路、例えば、プロトコル制御回路９６を決定し、決定したプロトコル制御回路９６にフレーム受信を通知する（７０２）。この後、プロトコル制御回路９６は、受信フレームをホスト装置１０のデバイスドライバ２８に通知（送信）する（７０３）。
【００６９】
次に、ホスト装置１０のデバイスドライバ２８は、受信フレームに応答する応答フレームを生成し、生成した応答フレームを起動するための応答フレーム起動命令をプロトコル制御回路９６に送信する（７０４）。
【００７０】
プロトコル制御回路９６は、応答フレームのフィールド３１６のE-Cに“１”を設定するとともに、フィールド３２６のRX-IDに、受信フレームに設定されているエクスチェンジ番号と同じエクスチェンジ番号（受信フレームにエクスチェンジ番号が設定されていない場合は、新規のエクスチェンジ番号）を付与し、これら制御情報が設定された応答フレームを、送信バッファ制御回路８８と送信データバッファ８６を介して、例えば、ファイバチャネルインタフェース制御回路７８に送出する（７０５）。
【００７１】
応答フレームを受信したファイバチャネルインタフェース制御回路７８は、光トランシーバ７０を介して、応答フレームを入出力制御装置１４に送信する（７０６）。この後、入出力制御装置１４は、受信した応答フレームをディスク制御装置１６に送信する。
【００７２】
次に、図８に、受信フレームルーティング制御回路のブロック図を示す。
【００７３】
図８において、受信フレームルーティング制御回路９４は、レジスタ５００、５０２、５０４と、デコーダ５０６、５０８と、ANDゲート５１０と、NOTゲート５１２と、ANDゲート５１４〜５２０と、ANDゲート５２２〜５３０と、ORゲート５３２、５３４、５３６、５３８から構成され、レジスタ５００、５０２、５０４の入力側が、それぞれファイバチャネルインタフェース制御回路７８〜８４に接続され、ORゲート５３２〜５３８の出力側が、それぞれプロトコル制御回路９６〜１０２に接続される。
【００７４】
レジスタ５００は、ファイバチャネルインタフェース制御回路７８〜８４から出力される受信フレームのフィールド３１６のE-Cに付加された制御情報を判別し、E-Cが、“０”の場合、“０”の信号を、ANDゲート５１４〜５２０に出力するとともに、“０”の信号を、NOTゲート５１２を介して、“１”の信号に変換してANDゲート５２２〜５３０に出力する。
【００７５】
一方、E-Cが“１”の場合、レジスタ５００は、“１”の信号を、ANDゲート５１４〜５２０に出力するとともに、“１”の信号を、NOTゲート５１２を介して、“０”の信号に変換してANDゲート５２２〜５３０に出力する。
【００７６】
レジスタ５０２は、受信フレームのうちフィールド３２４のOX-IDに付与された制御情報を判別し、この制御情報のうち先頭の２ビットのプロトコル制御回路番号４０８を示す信号をデコーダ５０６に出力する。
【００７７】
デコーダ５０６は、レジスタ５０２の出力信号をデコードし、デコードした信号をそれぞれANDゲート５１４〜５２０に出力する。
【００７８】
例えば、デコーダ５０６は、レジスタ５０２から、“００”の信号を入力した場合、「１０００」の信号を出力し、“０１”の信号を入力した場合、「０１００」の信号を出力し、“１０”の信号を入力した場合、「００１０」の信号を出力し、“１１”の信号を入力した場合、「０００１」の信号を出力する。
【００７９】
ANDゲート５１４〜５２０は、レジスタ５００の出力信号とデコーダ５０６の出力信号の論理積を条件とした信号をORゲート５３２〜５３８に出力する。
【００８０】
例えば、入出力制御装置１２がオリジネータとして動作する場合であって、レジスタ５００から“１”の信号が出力される場合、ANDゲート５１４は、デコーダ５０６から「１０００」の信号が出力されたことを条件に、“１”の信号をORゲート５３２に出力し、ANDゲート５１６は、デコーダ５０６から「０１００」の信号が出力されたことを条件に、“１”の信号をORゲート５３４に出力し、ANDゲート５１８は、デコーダ５０６から「００１０」の信号が出力されたことを条件に、“１”の信号をORゲート５３６に出力し、ANDゲート５２０は、デコーダ５０６から「０００１」の信号が出力されたことを条件に、“１”の信号をORゲート５３８に出力する。
【００８１】
ORゲート５３２〜５３８は、それぞれANDゲート５１４〜５２０から“１”の信号が出力されたことを条件に、それぞれプロトコル制御回路９６〜１０２に受信フレームを割り当てるための割り込み信号をプロトコル制御回路９６〜１０２に出力する。
【００８２】
この際、入出力制御装置１２が、オリジネータとして動作する場合、受信フレームのうちフィールド３２４のOX-IDに、“００”が設定されている場合には、プロトコル制御回路９６が、受信フレームの割当先として決定され、フィールド３２４のOX-IDに、“０１”が設定されている場合には、プロトコル制御回路９８が、受信フレームの割当先として決定され、フィールド３２４のOX-IDに、“１０”が設定されている場合には、プロトコル制御回路１００が、受信フレームの割当先として決定され、フィールド３２４のOX-IDに、“１１”が設定されている場合には、プロトコル制御回路１０２が、受信フレームの割当先として決定されることになる。
【００８３】
即ち、プロトコル制御回路９６が、送信フレームのフィールド３２４のOX-IDに、プロトコル制御回路番号４０８として、“００”を付与し、同様にして、プロトコル制御回路９８〜１０２が、送信フレームのフィールド３２４のOX-IDに、プロトコル制御回路番号４０８として、それぞれ“０１”、“１０”、“１１”を付与した場合、各プロトコル制御回路９６〜１０２は、送信フレームに付与したプロトコル制御回路番号４０８と同一のプロトコル制御回路番号４０８が付与された応答フレームを、受信フレームとして処理することになる。
【００８４】
このように、複数の受信フレームを入出力制御装置１２で処理する場合でも、各受信フレームをプロトコル制御回路番号４０８に従って各プロトコル制御回路９６〜１０２に割り当てることで、複数のトランザクションを並列に処理することができ、結果として、各トランザクションの性能を向上させることができる。
【００８５】
レジスタ５０４は、受信フレームのフィールド３２６のRX-IDを判別し、プロトコル制御回路番号４０８を示す信号をデコーダ５０８に出力するとともに、プロトコル制御回路番号４０８を示す信号とエクスチェンジ番号４１０を示す信号（０〜１５ビットの信号）をそれぞれANDゲート５１０に出力する。
【００８６】
デコーダ５０８は、レジスタ５０４の出力信号をデコードし、デコードした信号をANDゲート５２２〜５２８に出力する。
【００８７】
例えば、デコーダ５０８は、レジスタ５０４の出力が“００”である場合、「１０００」の信号をANDゲート５２２〜５２８に出力し、レジスタ５０４の出力が“０１”である場合、「０１００」の信号をANDゲート５２２〜５２８に出力し、レジスタ５０４の出力が“１０”である場合、「００１０」の信号をANDゲート５２２〜５２８に出力し、レジスタ５０４の出力が“１”である場合、「０００１」の信号をANDゲート５２２〜５２８に出力する。
【００８８】
ANDゲート５２２〜５２８は、NOTゲート５１２の出力信号とデコーダ５０８の出力信号との論理積を条件とした信号をORゲート５３２〜５３８に出力する。
【００８９】
例えば、入出力制御装置１２が、レスポンダとして動作し、受信フレームのE-Cが“０”であって、レジスタ５００から“０”の信号が出力され、NOTゲート５１２の出力が“１”であることを条件に、ANDゲート５２２〜５２８のうち、デコーダ５０８から“１”の信号を入力するANDゲートから“１”の信号が出力される。
【００９０】
具体的には、NOTゲート５１２の出力が“１”であることを条件に、デコーダ５０８の出力が、「１０００」であった場合、ANDゲート５２２から“１”の信号がORゲート５３２に出力され、デコーダ５０８の出力が「０１００」である場合、ANDゲート５２４から“１”の信号がORゲート５３４に出力され、デコーダ５０８の出力が「００１０」である場合、ANDゲート５２６から“１”の信号がORゲート５３６に出力され、デコーダ５０８の出力が「０００１」である場合、ANDゲート５２８から“１”の信号がORゲート５３８に出力される。
【００９１】
ORゲート５３２〜５３８は、ANDゲート５２２〜５２８から“１”の信号が入力されたことを条件に、プロトコル制御回路９６〜１０２に対して受信フレームを割り当てるための割り込み信号を出力する。
【００９２】
この際、入出力制御装置１２が、レスポンダとして動作する場合、受信フレームのうちフィールド３２６のRX-IDに、“００”が設定されている場合には、プロトコル制御回路９６が、受信フレームの割当先として決定され、フィールド３２６のRX-IDに、“０１”が設定されている場合には、プロトコル制御回路９８が、受信フレームの割当先として決定され、フィールド３２６のRX-IDに、“１０”が設定されている場合には、プロトコル制御回路１００が、受信フレームの割当先として決定され、フィールド３２６のRX-IDに、“１１”が設定されている場合には、プロトコル制御回路１０２が、受信フレームの割当先として決定されることになる。
【００９３】
このように、複数の受信フレームを入出力制御装置１２で処理する場合でも、各受信フレームをプロトコル制御回路番号４０８に従って各プロトコル制御回路９６〜１０２に割り当てることで、複数のトランザクションを並列に処理することができ、結果として、各トランザクションの性能を向上させることができる。
【００９４】
また、ANDゲート５１０は、０〜１５ビットの信号であって、プロトコル制御回路番号４０８とエクスチェンジ番号４１０を示す信号がそれぞれ“１”である場合、“１”の信号をANDゲート５３０に出力する。
【００９５】
ANDゲート５３０は、NOTゲート５１２の出力が“１”であることを条件に、ANDゲート５１０から“１”の信号が出力された場合、“１”の信号を全てのORゲート５３２〜５３８に“１”の信号を出力する。
【００９６】
即ち、ORゲート５３２〜５３８は、ANDゲート５３０から“１”の信号が出力された場合、ブロードキャスティングの処理として、全てのプロトコル制御回路９６〜１０２に割り込み信号を出力し、受信フレームの割当先を全てのプロトコル制御回路９６〜１０２に決定する。
【００９７】
この場合、各プロトコル制御回路９６〜１０２は、自身が処理すべき受信フレームであれば、受信フレームの処理を実行し、自身が処理すべき受信フレームでない場合には、受信フレームの処理を無効とすることもできる。
【００９８】
次に、入出力制御装置１２が受信フレームを処理する場合の処理内容を図９のフローチャートに従って説明する。
【００９９】
この処理は、図６に示す応答フレーム送信（６０４）の後のルーティング処理または図７のフレーム受信通知（７０２）におけるルーティング処理として、受信フレームルーティング制御回路９４によって実行される。
【０１００】
まず、受信フレームルーティング制御回路９４は、受信フレームに付加されたフィールド３１６のE-Cの内容を判別し、レスポンダ動作か否かを判定する（S１１）。レスポンダ動作でない場合、即ち、E-C＝１である場合、受信フレームルーティング制御回路９４は、入出力制御装置１２がオリジネータとして動作するため、受信フレームのうちフィールド３２４のOX-IDに付与されたエクスチェンジ番号のうち、先頭２ビットのプロトコル制御回路番号４０８を基に、ルーティング先のプロトコル制御回路番号を決定するための処理を実行する（S１２）。
【０１０１】
この場合、受信フレームルーティング制御回路９４では、レジスタ５００から“１”の信号が出力されるとともに、レジスタ５０２から、プロトコル制御回路番号４０８を示す２ビットの信号がデコーダ５０６に出力される。この結果、２ビットのプロトコル制御回路番号４０８を基にプロトコル制御回路９６〜１０２のうちいずれか１つのプロトコル制御回路に受信フレームを割り当てるための割り込み信号が出力され、割り込みが起動され（S１３）、その後、このルーチンでの処理を終了する。
【０１０２】
この割り込み処理では、受信フレームのうちフィールド３２４のOX-IDに、“００”が設定されている場合、プロトコル制御回路９６が、受信フレームの割当先として決定され、フィールド３２４のOX-IDに、“０１”が設定されている場合、プロトコル制御回路９８が、受信フレームの割当先として決定され、フィールド３２４のOX-IDに、“１０”が設定されている場合、プロトコル制御回路１００が、受信フレームの割当先として決定され、フィールド３２４のOX-IDに、“１１”が設定されている場合、プロトコル制御回路１０２が、受信フレームの割当先として決定されることになる。
【０１０３】
一方、ステップS１１でレスポンダ動作と判定された場合、即ち、E-C＝０である場合、受信フレームルーティング制御回路９４では、レジスタ５００から、“０”の信号が出力されるとともに、レジスタ５０４からプロトコル制御回路番号４０８を示す信号とエクスチェンジ番号４１０を示す信号がそれぞれ出力される。
【０１０４】
ステップS１１でレスポンダ動作と判定された場合、受信フレームルーティング制御回路９４は、受信フレームのフィールド３２６のRX-IDに、プロトコル制御回路番号４０８が付与されているか否かを判定する（S１４）。
【０１０５】
ステップS１４で肯定の判定結果を得た場合、入出力制御装置１２がレスポンダとして動作するため、受信フレームのうちフィールド３２６のRX-IDに付与されたエクスチェンジ番号のうち、先頭２ビットのプロトコル制御回路番号４０８を基に、ルーティング先のプロトコル制御回路番号を決定するための処理を実行する（S１５）。
【０１０６】
この場合、受信フレームルーティング制御回路９４では、レジスタ５００から“０”の信号が出力されるとともに、レジスタ５０４から、プロトコル制御回路番号４０８を示す２ビットの信号がデコーダ５０８に出力される。この結果、２ビットのプロトコル制御回路番号４０８を基にプロトコル制御回路９６〜１０２のうちいずれか１つのプロトコル制御回路に受信フレームを割り当てるための割り込み信号が出力され、割り込みが起動され（S１６）、その後、このルーチンでの処理を終了する。
【０１０７】
この割り込み処理では、受信フレームのうちフィールド３２６のRX-IDに、“００”が設定されている場合、プロトコル制御回路９６が、受信フレームの割当先として決定され、フィールド３２６のRX-IDに、“０１”が設定されている場合、プロトコル制御回路９８が、受信フレームの割当先として決定され、フィールド３２６のRX-IDに、“１０”が設定されている場合、プロトコル制御回路１００が、受信フレームの割当先として決定され、フィールド３２６のRX-IDに、“１１”が設定されている場合、プロトコル制御回路１０２が、受信フレームの割当先として決定されることになる。
【０１０８】
一方、ステップS１４で否定の判定結果を得た場合、受信フレームルーティング制御回路９４は、全てのプロトコル制御回路９６〜１０２に対してブロードキャスティングを実施するための処理を実行する（S１７）。
【０１０９】
即ち、受信フレームルーティング制御回路９４は、受信フレームに付加される制御情報の中に、全てのプロトコル制御回路９６〜１０２を選択するための識別情報が存在する場合、全てのプロトコル制御回路９６〜１０２に対してブロードキャスティングを実施するための処理を実行する。
【０１１０】
具体的には、レジスタ５０４から出力される１６ビットの信号が全て“１”であって、ANDゲート５１０から“１”の信号が出力され、ANDゲート５３０から全てのORゲート５３２〜５３８に“１”の信号が出力され、プロトコル制御回路９６〜１０２に対して割り込みが起動され（S１８）、その後、このルーチンでの処理を終了する。
【０１１１】
この場合、各プロトコル制御回路９６〜１０２は、自身が処理すべき受信フレームであれば、受信フレームの処理を実行し、自身が処理すべき受信フレームでない場合には、受信フレームの処理を無効とする。
【０１１２】
本実施例によれば、複数の受信フレームを、複数のプロトコル制御回路に割り当て、複数の受信フレームの処理を並列に実行することができる。
【０１１３】
また、本実施例によれば、複数の受信フレームを入出力制御装置１２で処理する場合でも、各受信フレームをプロトコル制御回路番号４０８に従って各プロトコル制御回路９６〜１０２に割り当てることで、複数のトランザクションを並列に処理することができ、結果として、各トランザクションの性能を向上させることができる。
【０１１４】
本実施例は、４つのファイバチャネルポートに対して４つのプロトコル制御回路を有する入出力制御装置１２の場合について説明したが、ファイバチャネルポートに対するプロトコル制御回路の数は、実施例に限定されるものではない。例えば、１つのファイバチャネルポートに対して２つ以上のプロトコル制御回路を有する入出力制御装置１２を構成したり、２つ以上のファイバチャネルポートに対して２つ以上のプロトコル制御回路を有する入出力制御装置１２を構成したりすることができる。
【０１１５】
本実施例では、ホスト装置１０とディスク制御装置１６との間に入出力制御装置１２、１４を配置した計算機システムに、本発明を適用したものについて述べたが、図１の入出力制御装置１４の位置に、本実施例で述べた入出力制御装置１２を配置した計算機システムにも、本発明を適用することができる。
【０１１６】
なお、本発明は、上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１１７】
また、上記の各構成、機能等は、それらの一部又は全部を、例えば、集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid  State  Drive）等の記録装置、または、ＩＣ（Integrated  Circuit）カード、ＳＤ（Secure  Digital）メモリカード、ＤＶＤ（Digital  Versatile  Disc）等の記録媒体に記録して置くことができる。
【符号の説明】
【０１１８】
１０  ホスト装置、１２、１４  入出力制御装置、１６  ディスク制御装置、２８  デバイスドライバ、７０〜７６  光トランシーバ、７８〜８４  ファイバチャネルインタフェース制御回路、８６  送信データバッファ、８８  送信バッファ制御回路、９０  受信データバッファ、９２  受信バッファ制御回路、９４  受信フレームルーティング制御回路、９６〜１０２  プロトコル制御回路、１０４  DMA制御回路、１０６  起動キュー制御回路、１０８  PCI-Express制御回路、１１０  シリアライザデシリアライザ回路、１１２  フレーム生成回路、１１４  フレーム解析回路、１１６  起動キュー。
【図１】
2013001578.tif 000003
【図２】
2013001578.tif 000004
【図３】
2013001578.tif 000005
【図４】
2013001578.tif 000006
【図５】
2013001578.tif 000007
【図６】
2013001578.tif 000008
【図７】
2013001578.tif 000009
【図８】
2013001578.tif 000010
【図９】
2013001578.tif 000011
【国際調査報告】
2013001578.tif 000012
2013001578.tif 000013
2013001578.tif 000014
2013001578.tif 000015