(57)【特許請求の範囲】
【請求項１】
互いに接続された第１のコントローラと第２のコントローラとを備え、
前記第１のコントローラは、第１のプロセッサと、第１の共有メモリとを含み、前記第２のコントローラは、第２のプロセッサと、第２の共有メモリとを含み、
前記第１のプロセッサは、
第１のプロセスの処理のために、優先処理である前記第２のプロセッサによる前記第２の共有メモリへの優先アクセスが必要な場合、前記第２のプロセッサに対する前記第２の共有メモリへのアクセスを第１の依頼内容とし、優先処理を必要とする前記第１の依頼内容を含む第１の依頼情報を前記第２のコントローラに送信し、前記第２のプロセッサから前記第１の依頼情報に対する完了応答を受けてから前記第１のプロセスとは異なるプロセスを処理し、
第２のプロセスの処理のために、前記第２のプロセッサによる優先処理を必要としないプロセスの処理が必要な場合、前記第２のプロセッサに対する前記優先処理を必要としないプロセスを第２の依頼内容とし、前記第２の依頼内容を含む第２の依頼情報を前記第２のコントローラに送信し、前記第２のプロセッサからの前記第２の依頼情報に対する完了応答を待たずに前記第２のプロセスとは異なるプロセスを処理し、
前記第２のプロセッサは、
前記第１の依頼内容を、前記第２のプロセッサが処理するプロセスよりも優先して処理し、前記第２の依頼内容を、任意のタイミングで処理する、
ように構成されたシステム。
【請求項２】
前記第１のプロセッサは、前記第１の依頼情報を前記第２のコントローラの第１の記憶領域に送信し、前記第２の依頼情報を前記第２のコントローラの第２の記憶領域に送信し、
前記第２のプロセッサは、前記第１の依頼情報に含まれる前記第１の依頼内容を、前記第２の依頼情報に含まれる前記第２の依頼内容よりも優先して処理する、
ように構成された請求項１記載のシステム。
【請求項３】
前記第１のプロセッサは、前記第２のプロセッサが、前記第１の依頼内容を前記第２のプロセッサが処理するプロセスよりも優先して処理する指示を、前記第２のコントローラに送信する、
ように構成された請求項１に記載のシステム。
【請求項４】
前記第２の依頼内容は、前記第２のコントローラによるユーザデータ転送のためのハードウェアリソースの起動の依頼である、請求項１に記載のシステム。
【請求項５】
前記第１のコントローラが前記システムに接続されたホスト計算機からＩ／Ｏを受領した際、前記第１のプロセッサは、前記第２の共有メモリに格納されたデータが更新されたか否かを判定し、前記第２の共有メモリに格納された前記データが更新されたことを判定すると、前記第２のコントローラに、前記第２の共有メモリの前記更新されたデータのリードを前記第１の依頼内容とする前記第１の依頼情報を送信する、
ように構成された請求項１記載のシステム。
【請求項６】
前記第１の依頼情報が複数ある場合、前記第１のプロセッサは、前記第２のプロセッサが処理する前記プロセスよりも、前記複数の第１の依頼情報に含まれる第１の依頼内容を優先的に処理する指示を前記第２のコントローラに送信し、
前記第２のコントローラが前記指示を受信すると、前記第２のプロセッサは、前記複数の第１の依頼情報に含まれる前記第１の依頼内容を纏めて優先的に処理する、
ように構成された請求項１記載のシステム。
【請求項７】
前記第２のプロセッサは、第１のコアと第２のコアを含み、
前記第１のコアは、前記システムに接続されたホスト計算機からのＩ／Ｏ処理、前記第１の依頼情報に含まれる前記第１の依頼内容、および、前記第２の依頼情報に含まれる前記第２の依頼内容のいずれかの処理を行い、
前記第２のコアは、前記第１の依頼情報に含まれる前記第１の依頼内容の処理を行う、
ように構成された請求項１記載のシステム。
【請求項８】
前記第２のプロセッサは、前記第１のコアまたは前記第２のコアの負荷状態に応じて、前記第１のコアと前記第２のコアの数の割合を変更する、
ように構成された請求項７記載のシステム。
【請求項９】
前記第１のプロセッサは、前記第２のコアの負荷が高い場合には、前記第１のコアに前記ホスト計算機からのＩ／Ｏ処理よりも前記第１の依頼情報に含まれる前記第１の依頼内容の処理を優先させる、
ように構成された請求項７記載のシステム。
【請求項１０】
前記第２のプロセッサには複数の仮想コアが設定可能であり、前記第１のプロセッサからの要求によって、前記複数の仮想コアの一つ又は複数が前記第１のコアから前記第２のコアに変更される、ように構成された請求項７記載のシステム。
【請求項１１】
互いに接続された第１のコントローラと第２のコントローラとを備えるシステムを使用可能にする制御方法であって、前記第１のコントローラは、第１のプロセッサと、第１の共有メモリとを含み、前記第２のコントローラは、第２のプロセッサと、第２の共有メモリとを含み、
前記第１のプロセッサは、
第１のプロセスの処理のために、優先処理である前記第２のプロセッサによる前記第２の共有メモリへの優先アクセスが必要な場合、前記第２のプロセッサに対する前記第２の共有メモリへのアクセスを第１の依頼内容とし、優先処理を必要とする前記第１の依頼内容を含む第１の依頼情報を前記第２のコントローラに送信し、前記第２のプロセッサから前記第１の依頼情報に対する完了応答を受けてから前記第１のプロセスとは異なるプロセスを処理し、
第２のプロセスの処理のために、前記第２のプロセッサによる優先処理を必要としないプロセスの処理が必要な場合、前記第２のプロセッサに対する前記優先処理を必要としないプロセスを第２の依頼内容とし、前記第２の依頼内容を含む第２の依頼情報を前記第２のコントローラに送信し、前記第２のプロセッサからの前記第２の依頼情報に対する完了応答を待たずに前記第２のプロセスとは異なるプロセスを処理し、
前記第２のプロセッサは、
前記第１の依頼内容を、前記第２のプロセッサが処理するプロセスよりも優先して処理し、前記第２の依頼内容を、任意のタイミングで処理する、制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ホスト計算機と記憶領域との間でのデータの入出力処理を制御するストレージシステム及びその制御方法に係り、詳しくは、ホスト計算機と記憶装置との間のデータの送受信を実行するコントローラが多重化された、クラスタ構造のストレージシステムに関するものである。
【背景技術】
【０００２】
ホスト計算機と記憶領域間のアクセスを制御するコントローラが多重化されたストレージシステムは、クラスタ構成のストレージシステムとして知られている。この種のストレージシステムは、複数のコントローラを効果的に稼働させるために、あるコントローラのプロセッサが他のコントローラのメインメモリやインターフェース等のハードウェア資源にアクセスする必要があった。そこで、このアクセスを迅速かつ確実にするために、プロセッサはハードウェアに直接アクセスするのではなく、アクセスのための専用ＬＳＩを介してアクセスするようにしていた。クラスタ構成のコントローラを持つストレージシステムとして、特許第３７１９９７６号公報、及び、特開２００８−２６９４２４号公報に開示されたものが知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第３７１９９７６号公報
【特許文献２】特開２００８−２６９４２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
近年、汎用ＬＳＩの性能が向上している事情もあって、専用ＬＳＩを用いることなく、汎用品を利用してストレージシステムのクラスタコントローラを構築することが求められている。このタイプのストレージシステムでは、二つのコントローラのプロセッサ同士をＰＣＩ‐Ｅｘｐｒｅｓｓバスで接続することによって、複数のコントローラ同士がアクセスできるようにしている。
【０００５】
このタイプのストレージシステムでは、専用ＬＳＩを利用していないために、第１のコントローラのプロセッサは、第２のコントローラのデータ転送用ハードウェアやメモリ等のハードウェアリソースに直接アクセスできないが、第１のコントローラのプロセッサは第２のコントローラのプロセッサにリソースへのアクセスを依頼し、当該アクセスの結果を第２のコントローラのプロセッサから受け取るようにすればよい。
【０００６】
しかしながら、第２のコントローラのプロセッサはホストＩ／Ｏの処理を頻繁に行なっており、その間に、第１のコントローラのプロセッサからリクエストを受け付けても直ぐにこれに応答することができないために、専用ＬＳＩを利用したストレージシステムに比較して応答性能が低下するという問題があった。
【０００７】
そこで、第２のコントローラのプロセッサに、第１のコントローラのプロセッサからのリクエストを優先して処理させることが必要になる。この種の優先処理として、プロセッサ間で割り込み要求を用いる方法がある。しかし、割り込みがあった際にＯＳがそれまで動作していたプロセスから通常の割り込みハンドラへと処理を切り替える必要があり、このプロセスの切り替えに時間を要するためにオーバーヘッドが大きく、割り込み要求が多用されると性能が却って低下するという問題がある。
【０００８】
また、プロセッサにマルチコアプロセッサを用い、複数のコアのうちの一つを、他のコントローラからのリクエストを受け付ける専用のコアとして決め、このコアではホストＩ／Ｏ処理等の通常の処理を行わないことによって、他のコントローラから受け付けたリクエストへの応答時間を短縮する方法も考えられる。しかしながら、専用コアへの負荷が大きくなると、他のコントローラからのリクエストに対する処理が遅延し、一方、専用コアの数を増やすと、通常コアの割合が少なくなって、ホストＩ／Ｏ処理の性能が影響を受けるおそれもある。
【０００９】
そこで、本発明は、クラスタ構造のストレージシステムにおいて、一方のコントローラのプロセッサから他方のコントローラのプロセッサにアクセスが送られても、他方のコントローラのプロセッサは、このアクセスを優先処理できるとともに、Ｉ／Ｏ処理も遅延させないようにすることを目的とするものである。
【課題を解決するための手段】
【００１０】
前記目的を達成するために、本発明は、第１のコントローラの第１のプロセッサは、第２のコントローラの第２のプロセッサによって処理されるべき依頼情報を当該第２のプロセッサに優先処理させるものとそうでないものとを区別して当該第２のプロセッサに送信し、かつ、当該第２のプロセッサは、優先処理する依頼情報とそうではない依頼情報とを区別して取得することを特徴とするストレージシステム及びその制御方法である。
【００１１】
本発明によれば、第２のプロセッサは第１のプロセッサからの依頼情報を全て優先処理するものではなく、ストレージシステムの運用上優先することが必要なものから処理するために、第２のプロセッサのホスト計算機からのＩ／Ｏ処理を遅延させることもない。
【発明の効果】
【００１２】
本発明によれば、クラスタ構造のストレージシステムにおいて、一方のコントローラのプロセッサから他方のコントローラのプロセッサにアクセスが送られても、当該第２のコントローラのプロセッサは、このアクセスを優先処理できるとともに、Ｉ／Ｏ処理も遅延させないようにすることができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、第１の実施形態に係るストレージシステムを有する計算機システムのハードウェアブロック図である。
【図２】図２は、コントローラのＭＰＵメモリの構成例に係るブロック図である。
【図３】図３は、ＭＰＵメモリのテキスト領域のソフトウェアリソースの構成を示すブロック図である。
【図４】図４は依頼送信プログラムの処理フローの一例である。
【図５】図５は依頼送信プログラムの他の形態を示すフローチャートである。
【図６】図６は割り込み受信プログラムの処理フローの一例である。
【図７】図７は通常受信プログラムの処理フローの一例である。
【図８】図８は代理アクセスプログラムの処理フローの一例である。
【図９】図９はタイマー同期プログラムの処理フローの一例である。
【図１０】図１０は依頼処理識別テーブルの構成例である。
【図１１】図１１はアクセス先属性テーブルのである。
【図１２】図１２は自他系判定テーブルの構成例である。
【図１３】図１３はホスト計算機２からのリードＩ／Ｏ処理のフローチャートである。
【図１４】図１４は図１３のフローチャートの一部を詳しく説明したものである。
【図１５】図１５は図１３のフローチャートの一部を詳しく説明したものである。
【図１６】図１６は第２の実施形態のＭＰＵメモリの構成例である。
【図１７】図１７は専用コア判定テーブルの構成例である。
【図１８】図１８は、第２の実施形態における、ＭＰＵメモリのソフトウェア構成図である。
【図１９】図１９は第２の実施形態における依頼送信プログラムの処理フローの一例である。
【図２０】図２０は、専用コア数調整プログラムのフローチャートである。
【図２１】図２１は依頼方式要件テーブルの一例である。
【図２２Ａ】図２２Ａは依頼方式利用可否テーブルの第１の例である。
【図２２Ｂ】図２２Ｂは依頼方式利用可否テーブルの第２の例である。
【図２３】図２３は第４の実施形態における依頼送信プログラムのフローチャートである。
【図２４】図２４はボリューム毎に既述の性能要件を定めた、ボリューム性能要件テーブルの構成例である。
【図２５】図２５はユーザがボリュームのＩ／Ｏ性能要件を設定するための入力画面の一例である。
【図２６】図２６は期待通信応答時間補正のためのフローチャートである。
【発明を実施するための形態】
【００１４】
実施形態１
次に本発明にストレージシステムの実施形態を図面に基づいて説明する。ストレージシステムは、デュアルコントローラ構成を備える。図１は、第１の実施形態に係るストレージシステムを有する計算機システムのハードウェアブロック図である。計算機システム１は、ホスト計算機２、管理端末３、ストレージシステム４、ネットワーク５，６を備える。ネットワーク５は、ホスト計算機２とストレージシステ４とを接続するためのものであり、特に、ＳＡＮである。ネットワーク６は、ストレージシステム４と管理端末３とを接続する、特に、ＬＡＮである。ホスト計算機２は、例えば、大型汎用コンピュータ、サーバ、クライアント端末である。ホスト計算機２はＳＡＮ５を介さずにストレージシステム４に接続されてもよい。また、管理端末３は、ＬＡＮ６を介さずにストレージシステムに接続されてもよい。
【００１５】
ストレージシステム４は、第１のコントローラ１００ａと、第２のコントローラ１００ｂと、複数のストレージドライブ１０９Ｄを有するドライブ部１０９と、を備えている。第１のコントローラ１００ａを[ＣＴＬａ]と記述することがあり、第２のコントローラ１００ｂを[ＣＴＬｂ]と記述することがある。また、コントローラ内の構成要素を表現する際で、そのＣＴＬａの構成要素かＣＴＬｂの構成要素かを区別する場合には、前者の構成要素の符号の後に[ａ]を付し、後者の構成要素の符号の後に[ｂ]を付す。同一の構成要素には同一の符号を付す。ＣＴＬａ及びＣＴＬｂのどちらの構成要素であるかの区別が不要である場合には、［ａ］、[ｂ]を付さないこととする。二つのコントローラを区別する際には、一つのコントローラを自系（内部）のコントローラと呼び、他方のコントローラを他系（外部）のコントローラと呼ぶこともある。
【００１６】
ＣＴＬａは、ＭＰＵ１０１ａ、ＭＰＵメモリ１０２ａ、ＤＭＡ１０３ａ、ＨＯＳＴ＿Ｉ／Ｆ（Ｉ／Ｆ：インターフェースの略、以後同じ。）１０４ａ、ＤＲＩＶＥ＿Ｉ／Ｆ１０５ａ、及び、管理＿Ｉ／Ｆ１０６ａと、を備えている。ＣＴＬｂも同様である。ＣＴＬａのＨＯＳＴ＿Ｉ／Ｆ１０４ａ及びＣＴＬｂのＨＯＳＴ＿Ｉ／Ｆ１０４ｂはそれぞれＳＡＮ５を介してホスト計算機２と接続する。ＣＴＬａのＤＲＩＶＥ＿Ｉ／Ｆ１０５ａとＣＴＬｂのＤＲＩＶＥ＿Ｉ／Ｆ１０５ｂはそれぞれドライブ部１０９に接続する。ＣＴＬａの管理＿Ｉ／Ｆ１０６ａとＣＴＬｂの管理＿Ｉ／Ｆ１０６ｂとはそれぞれＬＡＮ６を介して管理端末３に接続する。
【００１７】
ＣＴＬａのＮＴＢ１０７ａとＣＴＬａのＮＴＢ１０７ｂとはそれぞれノントランスペアレントブリッジである。ＭＰＵ１０１ａとＭＰＵ１０１ｂとは、ＮＴＢ１０７ａ、１０７ｂを介して、例えば、転送速度５Ｇｂｐｓ以上の全二重方式の高速なバス１０８で接続されており、ユーザデータや制御情報を交換することが出来る。ＮＴＢ１０７および接続路１０８はそれぞれ複数あってもよい。ドライブ部１０９は複数の論理記憶領域としてのＬＵ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ）を構成する。ドライブ部１０９の各ストレージドライブ１０９Ｄは磁気ディスク或いはＳＳＤ等の記憶媒体から構成される。
【００１８】
次に、ＣＴＬａのＭＰＵメモリ１０２ａの構成を図２に基づいて説明する。ＣＴＬｂのＭＰＵメモリ１０２ｂも同じである。ＭＰＵメモリ１０２ａは、テキスト領域１０ａ、ローカルメモリ１１ａの領域、通信エリア１４ａの領域、共有メモリ（以下、［ＳＭ］という。）１２ａの領域、キャッシュメモリ１３ａの領域を有し、それぞれの領域はアドレス範囲として設定される。それぞれの領域に、プログラム、制御情報或いは各種データが格納される。
【００１９】
テキスト領域１０ａは、ストレージシステムにその機能を実現させるための各種プログラムを格納する。ローカルメモリ１１ａは、テキスト領域１０ａのプログラムによって参照されるテーブルを格納する。このテーブルは、ＣＴＬｂのテキスト領域のプログラムからは参照されない。ＭＰＵメモリ１０２ｂのテキスト領域のプログラムはＭＰＵメモリ１０２ｂのローカルメモリ１１ｂを参照する。
【００２０】
ローカルメモリ１１ａのテーブルには、例えば、自他系判定テーブル１１０、代理アクセス識別テーブル１１１、ハードウェア属性テーブル１１２を格納する。各テーブルの説明は後述するとおりである。
【００２１】
通信エリア１４ａは、割込用通信エリア１４１ａと通常通信エリア１４２ａを有する。この通信エリアには、ＭＰＵ１０１ｂによって制御情報やデータが書き込まれる。ＭＰＵメモリ１０２ｂの通信エリア１４ｂの割込用通信エリア１４１ｂと通常通信エリア１４２ｂには、ＭＰＵ１０１ａによって制御情報やデータが書き込まれる。
【００２２】
ＳＭ１２ａは、ＣＴＬａとＣＴＬｂで共有される必要がある、ストレージシステム構成情報・制御情報を格納している。この情報には自系コントローラのものと他系コントローラのものが含まれる。他系コントローラのＳＭ１２ｂも同じである。この情報を以後共有情報という。
【００２３】
共有情報は、ストレージシステムを制御するのに必要な情報である。具体的には、メモリに格納され、ホストコンピュータと交換されるデータのキャッシュの管理情報、ホストインタフェース、ディスクインタフェース、ＤＭＡ等のデータ転送用ハードリソースの起動用レジスタ、及び、それらに排他的にアクセスするためのロック機構を実現するロックビット等の排他管理情報、他方のコントローラにも認識される必要がある、ハードウェアリソースの構成の設定又は更新情報、ストレージアプリケーション（例えば、ボリュームのレプリカイメージを作成するボリュームコピー機能や、物理的なボリューム容量を仮想化し必要に応じて割り当てる仮想ボリューム機能、遠隔サイトへのデータコピーを行うことによりディザスタリカバリを実現するリモートコピー機能等）をコントローラ間で整合性を取って行うための制御情報である。
【００２４】
この共有情報が一方のコントローラ側のＳＭ１２ａに存在する場合、他系コントローラのＭＰＵ１０１ｂから当該一方のコントローラのＭＰＵ１０１ａを介して参照される。例えば、キャッシュメモリ１３ａのインデックス情報は、このキャッシュメモリを有する側のコントローラ１００ａに存在するために、他系コントローラ１００ｂがこのインデックス情報を参照する場合には、キャッシュメモリ１３ａを有する側のコントローラ１００ａのＭＰＵ１０１ａを介して当該インデックス情報にアクセスする。
【００２５】
キャッシュメモリ１３ａは、ホスト計算機２からのユーザデータないしディスクに格納したユーザデータを一時的に保持する。他系コントローラのキャッシュメモリ１３ｂも同じである。
【００２６】
図３はテキスト領域１０ａのソフトウェアリソースの構成図である。ソフトウェアリソースは、構成管理プログラム２０１、基本Ｉ／Ｏプログラム２０２、タイマー同期プログラム２０３ａ、代理アクセスプログラム２０４ａ、割り込み受信プログラム２０５ａ、通常受信プログラム２０６ａ、依頼送信プログラム２０７ａ、ＳＭアクセスプログラム２０８ａ、ＤＭＡアクセスプログラム２０９ａ、ＨＯＳＴ＿ＩＦアクセスプログラム２１０ａ、ＤＲＩＶＥ＿ＩＦアクセスプログラム２１１ａを備える。これらプログラムは、ＭＰＵ１０１ａによって実行される。ＣＴＬｂのテキスト領域も同様である。
【００２７】
構成管理プログラム２０１ａは、管理端末３からのコマンドによって起動し、構成管理情報を参照し、これを更新することもできる。構成管理情報は、ドライブ部１０９やＨＯＳＴ＿ＩＦ１０４、ＤＲＩＶＥ＿ＩＦ１０５等のハードウェアや、１ないし複数のストレージドライブで構成される論理ボリューム等の論理構成要素を管理するための情報等である。ＣＴＬａの構成情報とＣＴＬｂの構成情報は、ＳＭａ（１２ａ）とＳＭｂ（１２ｂ）とに記録されている。
【００２８】
複数のコントローラをホスト計算機に対して統一的に運用するために、一方のコントローラの構成情報に更新があった場合には、これを他系コントローラに同期させることが望ましい。この同期は、例えば、ＭＰＵ１０２ａが自系コントローラのＳＭ１２ａの構成情報を更新する際、この更新を他系のコントローラのＳＭ１２ｂにライトすることによって達成される。
【００２９】
管理端末３からアクセスされた管理＿Ｉ／Ｆ１０６ａを有するコントローラ１００ａ側のＭＰＵ１０１ａは、同じ側のＳＭ１２ａの構成管理情報を更新し、他系コントローラ１００ｂのＭＰＵメモリ１０２ｂの通信用エリア１４ｂの構成情報更新判定用フラグにオンを設定する。他系コントローラのＭＰＵ１０１ｂはこの更新フラグを参照し、フラグがオンであればコントローラ１００ａ側のＭＰＵ１０１ａから、ＳＭ１２ａの最新の構成情報を取得して、自身の側のコントローラ１００ｂのＳＭ１２ｂの更新情報を更新しフラグにオフを設定する。
【００３０】
基本Ｉ／Ｏプログラム２０２ａは、ホスト計算機２からのＩ／Ｏ要求コマンドを受けて、データのリードＩ／Ｏ又はライトＩ／Ｏを実行する。基本Ｉ／Ｏプログラム２０２ａはリードＩ／Ｏ又はライトＩ／Ｏを実行する際、必要に応じて、依頼送信プログラム２０７ａやＳＭアクセスプログラム２０８ａ、ＤＭＡアクセスプログラム２０９ａ、ＨＯＳＴ＿ＩＦアクセスプログラム２１０ａ、ＤＲＩＶＥ＿ＩＦアクセスプログラム２１１ａなどを呼び出し、各プログラムを実行させる。
【００３１】
タイマー同期プログラム２０３ａは、自系コントローラ１００ａのタイマーを他系コントローラ１００ｂのタイマーと同期させるためのものである。複数のコントローラのうち、一つのコントローラのタイマーをマスター扱いとし、他のコントローラのタイマーをスレーブ扱いとする。マスター扱いのコントローラのタイマー同期プログラムは非動作モードにされる。
【００３２】
代理アクセスプログラム２０４ａは、他系コントローラのＭＰＵ１０１ｂから送信された依頼情報（コマンドなど）に基づいて、自系コントローラ１００ａのＭＰＵ１０１ａを、メモリ１０２ａ、インターフェース１０４ａ，１０５ａ、そして、ＤＭＡ１０３ａの何れか又は複数に、ＭＰＵ１０１ｂの代わりにアクセスさせるためのプログラムである。
【００３３】
依頼送信プログラム２０７ａは、構成管理プログラム２０１ａや基本Ｉ／Ｏプログラム２０２ａが他系コントローラ１００ｂのＭＰＵメモリ１０２ｂのＳＭ１２ｂやキャッシュメモリ１３ｂをリードしたり、あるいはこれにライトしたり、インターフェース１０４ｂ，１０５ｂ、そして、ＤＭＡ１０３ｂを起動させるためにアクセスする等、他系コントローラのＭＰＵ１０１ｂにこれらの仲介を依頼するためのものである。この依頼は、プロセッサ１０１ａがブリッジ１０８を介して他系コントローラのＭＰＵメモリ１０２ｂの通信用エリア１４ｂに依頼情報（コマンド等）を書込み、このコマンドを他系コントローラのＭＰＵ１０１ｂが実行することによって達成される。既述のとおり、通信エリア１４ａ（１４ｂ）には、割込処理のための依頼情報が記録される割込用通信エリア１４１ａ（１４１ｂ）と割込処理以外の通常処理のためのコマンドが記録される通常通信エリア１４２ａ（１４２ｂ）とがある。
【００３４】
割込用通信エリア１４１ａには、他系コントローラ１００ｂから優先処理が要求される依頼情報が記録され、通常通信エリア１４２ａには他系コントローラから非優先処理が要求されるコマンドが記録される。ＣＴＬａの構成管理プログラム２０１ａや基本Ｉ／Ｏプログラム２０２ａがＣＴＬｂのＭＰＵ１０１ｂに素早く対応して欲しい処理を割込用通信エリア１４１ａに書き込み、かつ、ＣＴＬｂに対して割込み信号を発行するようにして、プロセッサ間通信に専用ＬＳＩが利用されない不利益を補うようにしている。ＣＴＬｂのＭＰＵ１０１ｂは代理アクセスプログラム２０４ｂを実行することによって、割込用通信エリア１４１ｂ及び通常通信エリア１４２ｂに格納されたコマンドを実行して、コマンドの実行結果である、メモリ（１２ｂ、１３ｂ）のリード情報、データ転送完了情報等をコマンドの依頼元であるＭＰＵ１０１ａに応答する。
【００３５】
ＭＰＵ１０１ａの依頼送信プログラム２０７ａは、割込用通信エリア１４１ｂに格納されるべき依頼情報（コマンド）の種類、属性等を優先処理が必要とされる範囲のものに制限する。多種多様な依頼情報が全て割込用通信エリア１４１ｂに格納されるとすると、ＭＰＵ１０１ｂは他系コントローラのために多くのコマンドを優先処理しなければならず、ＭＰＵ１０１ｂが本来処理しなければならならない、自系コントローラでの「ホスト計算機からのＩ／Ｏの処理等が遅延してしまう。
【００３６】
そこで、他系コントローラに優先処理される依頼情報は何かということについて説明する。第１のコントローラのプロセッサが第２のコントローラのプロセッサに既述の共有情報の参照を依頼した場合には、第１のコントローラのプロセッサが第２のコントローラのプロセッサから共有情報を得るまでは、第１のコントローラのプロセッサは次の処理に移行すべきではない。例えば、第１のコントローラのプロセッサが第２のコントローラから共有情報を取得できなければ、第１のコントローラのプロセッサはドライブ部１０９の正しいボリュームへアクセスできず、Ｉ／Ｏ処理を正確に行うことができない。第１のコントローラが自身の共有情報の更新情報を他系コントローラに反映させる場合もこれを迅速に完了されることが望まれる。つまり、こうした共有情報へのアクセスは極めて短い時間で完了され、依頼元プロセッサに依頼先プロセッサから応答されなければならない。したがって、本発明は優先処理される依頼情報の好適例を、他系コントローラの共有メモリに対するアクセスとした。
【００３７】
次に優先処理されることが必須ではない依頼情報について説明する。例えば、自系コントローラが他系コントローラにデータの転送を依頼したり、あるいは、データの転送を要求することを検討する。データの転送がサイズの大きいデータの転送を伴って処理に長時間を費やす可能性を持つとしても、他系コントローラのデータ転送用ハードウェアの起動は共有情報へのアクセスより優先されなければならないものではない。
【００３８】
換言すれば、他系コントローラのプロセッサからの応答時間が短いことが要求されない。なぜなら、共有情報とは異なり優先処理されないことの影響が少ないことに加えて、コントローラはホストＩ／Ｏを並行して多重で処理できるため、あるホストＩ／Ｏコマンドの処理に伴い、プロセッサが他系コントローラのプロセッサにデータ転送のためのハードリソースの起動を依頼した後、他系コントローラのプロセッサからの応答を待つことなく他のホストＩ／Ｏコマンドの処理に移れるからである。そうしたデータ転送起動については応答時間を短くすることが必須ではなく、優先処理ではない通常処理（非優先処理）として扱われる。
【００３９】
そこで、第１のコントローラのプロセッサは第２のコントローラのプロセッサに依頼すべき情報を優先処理されるべきものか、そうでないものかを判別して、前者の場合に限って、その依頼情報を第２のコントローラの優先処理部に送信し、後者の依頼情報を第２のコントローラの通常処理部に送信することとした。第２のコントローラのプロセッサは優先処理部の依頼情報を優先処理し、通常処理部の依頼情報を通常処理する。
【００４０】
第１実施形態は、優先処理の実効手段として、割込処理を採用した。第２のコントローラ１００ｂのプロセッサ１０１ｂは、第１のコントローラ１００ａのプロセッサ１０１ａから送られた依頼情報が、割込用通信エリア１４１ｂに書き込まれたか、通常通信エリア１４２ｂに書き込まれたかによって、第１のコントローラ１００ａからの依頼情報が優先処理されるものか、或いは、優先処理されない通常処理をされるものかを区別する。通常通信エリア１４２ｂに書き込まれたコマンドについて、第２のコントローラのプロセッサ１０１ｂは定期的に通常通信エリア１４２ｂをポーリングし、通常通信エリア１４２ｂに通常処理対象の依頼情報があることを発見すると、ホストＩ／Ｏ処理終了後、あるいはその途中など合間を見つけて当該コマンドを処理する。
【００４１】
図３の割込受信プログラム２０５ａは、他系コントローラ１００ｂから割込み要求を受信した際に呼び出されて起動し、割込用通信エリア１４１ａにあるコマンドを受信して代理アクセスプログラム２０４ａに渡すプログラムであり、通常受信プログラム２０６ａは、既述のポーリングの際に起動され、通常通信エリア１４２ａにコマンドがある場合には、これを受信して代理アクセスプログラム２０４ａに渡すプログラムである。
【００４２】
既述の各プログラムは必要に応じてＳＭアクセスプログラム２０８、ＤＭＡアクセスプログラム２０９、ＨＯＳＴ＿ＩＦアクセスプログラム２１０、ＤＲＩＶＥ＿ＩＦアクセスプログラム２１１などを呼び出し、これらプログラムの一部又は全部を起動する。
【００４３】
ＳＭアクセスプログラム２０８ａは、構成管理プログラム２０１ａや基本Ｉ／Ｏプログラム２０２ａが、ＳＭ１２ａの共有情報を必要とする際に呼び出され、ＳＭ１２ａの制御情報を参照・更新する処理を実行するためのプログラムである。
【００４４】
ＤＭＡアクセスプログラム２０９ａは，ＤＭＡ１０３ａを起動してキャッシュメモリ１３ａに格納されたユーザデータデータの転送等を行うためのプログラムである。
【００４５】
ＨＯＳＴ＿ＩＦアクセスプログラム２１０ａはＨＯＳＴ＿ＩＦ１０５ａにアクセスしてホスト計算機２との間でコマンド・データの送受信を行うためのプログラムである。
【００４６】
ＤＲＩＶＥ＿ＩＦアクセスプログラム２１１ａはＤＲＩＶＥ＿ＩＦ１０５ａにアクセスしてドライブ１０９Ｄとの間でコマンド・データの送受信を行うためのプログラムである。
【００４７】
これらアクセスプログラムは、アクセス対象のハードウェアを識別する番号、アクセス種別（リード／ライト／データ転送等）、対象データが存在するメモリのアドレス、ハードウェアの処理が完了した際にその成功／失敗、読み込んだ値等の結果情報が格納されるメモリアドレス等の情報を含むアクセス要求情報とともに、基本Ｉ／Ｏプログラム等によって呼び出される。各アクセスプログラムは、基本Ｉ／Ｏプログラムよって特定されたハードウェアに対して、指定されたアクセス種別に応じたアクセスを実行する。
【００４８】
ＤＲＩＶＥ＿ＩＦアクセスプログラム２１１ａは、基本Ｉ／Ｏプログラム２０２ａによって、ＤＲＩＶＥ＿ＩＦ１０５ａを識別するためのＤＲＩＶＥ＿ＩＦ番号、およびリード／ライト等のアクセス種別、転送データ格納エリア（キャッシュメモリ、ドライブ部）のアドレス、応答の格納先アドレス（ＳＭのアドレス）といった管理情報を伴うアクセス要求情報と共に呼び出される。呼び出されたＤＲＩＶＥ＿ＩＦアクセスプログラム２１１ａは、アクセス種別やデータ転送先アドレス等の情報に基づいて、ＤＲＩＶＥ＿ＩＦ番号で指定されたＤＲＩＶＥ＿ＩＦ１０５を起動して終了する。起動されたＤＲＩＶＥ＿ＩＦ１０５ａは指定されたキャッシュメモリ１３ａのデータをドライブ部１０９へ転送、またはドライブ部１０９の指定されたデータを指定されたデータ格納キャッシュエリアへ転送する。さらに、転送が正常に完了されたかどうか等の完了ステータス情報を、ＭＰＵメモリ１０ａ１にある、指定した応答格納先エリア（通信エリア１４ａ）に書き込む。
【００４９】
ＨＯＳＴ＿ＩＦアクセスプログラム２１０ａは、基本Ｉ／Ｏプログラム２０２ａによって、ＨＯＳＴ＿ＩＦ１０４ａを識別するためのＨＯＳＴ＿ＩＦ番号、およびリード／ライト等のアクセス種別、転送データ格納エリア（キャッシュメモリ、ドライブ部）のアドレス、応答の格納先アドレス（ＳＭのアドレス）といった管理情報を伴うアクセス要求情報と共に呼び出される。呼び出されたＨＯＳＴ＿ＩＦアクセスプログラムは、アクセス種別やデータ転送先アドレス等の情報に基づいて、ＨＯＳＴ＿ＩＦ番号で指定されたＨＯＳＴ＿ＩＦを起動して終了する。起動されたＨＯＳＴ＿ＩＦはキャッシュメモリ１３の指定エリアのデータをホスト計算機へ転送、または、ホストからのデータをキャッシュメモリの指定されたエリアに転送する。さらに、転送が正常に完了されたかどうか等の完了ステータス情報を、ＭＰＵメモリ１０１ａにある、指定した応答格納先エリア（通信エリア１４ａ）に書き込む。
【００５０】
ＤＭＡアクセスプログラムが受け取る起動要求には、起動するＤＭＡの識別番号、データ転送元／転送先のキャッシュメモリが属するコントローラの情報とメモリアドレス、及び、ＤＭＡのよるデータ転送完了に関するステータス情報を格納するための応答格納先アドレス（ＳＭの通信エリア）等の情報を含む。
【００５１】
ＳＭアクセスプログラム２０８ａは、ＭＰＵメモリ１０１ａのＳＭ１２ａに対して、アクセス要求元プログラムによって特定された要求種別に応じて、リード／ライト／アトミックアクセス等を行う。そして、アクセスの結果を通信エリアの結果返却エリアに書き込む。
【００５２】
図４は依頼送信プログラム２０７の処理フローである。依頼送信プログラム２０７は、基本Ｉ／Ｏプログラム２０２や構成情報管理プログラム２０１等の呼び出し元プログラムによって、代理アクセスを依頼すべき、他系コントローラのハードウェアを示す識別情報、依頼内容（リード、ライト、データ転送起動等）、及び、必要に応じて、リード対象のメモリ等のアドレスや、他系コントローラのハードウェア又はアクセスプログラムからの返値を格納するための自系コントローラのＭＰＵメモリ１０１ａのアドレス等、付随するパラメータを含む依頼情報を伴って呼び出される。
【００５３】
先ず、依頼送信プログラム２０７ａは、呼び出し元プログラムから与えられた依頼情報から、依頼処理情報を識別するための識別コードを取得する（ステップＳ１２０１）。次に、依頼処理識別テーブル１１１ａ（図１０：詳細は後述）を参照し、識別コードに応じてアクセス先である他系コントローラのハードウェアリソースの情報を取得する（ステップＳ１２０２）。依頼送信プログラム２０７ａは、ステップＳ１２０３に移行し、アクセス先のハードウェアが既述の共有情報を有するか否かを判定する。具体的には、アクセス先属性テーブル１１２（図１２：詳細は後述）を参照、アクセス先ハードウェアに対応する共有情報フィールドにＹｅｓが格納されていれば、他系コントローラ１００ｂのアクセス先ハードウェアに対するアクセスを共有情報に対するアクセスと判定する。依頼送信プログラム２０７ａが、これを肯定すると他系コントローラ１００ｂのＭＰＵメモリ１０２ｂの割込用通通信エリア１４１ｂに依頼情報を送信する（Ｓ１２０４）。
【００５４】
このアクセスの依頼に際して、依頼送信プログラム２０７ａは、依頼情報を他系コントローラのＭＰＵメモリ１０２ｂの通信エリア１４ｂの割込用通信エリア１４１ｂにライトした後、コントローラ間接続バス１０８を介して他系コントローラのＭＰＵ１０１ｂに割込信号（例えば、ＰＣＩ−ｅｘｐｒｅｓｓのＭＳＩパケット）を送信する。
【００５５】
一方、依頼送信プログラム２０７ａが、ステップＳ１２０３を否定して、他系コントローラに対するアクセスを共有情報に対するアクセスでないと判定すると、他系コントローラ１００ｂの依頼先ハードウェアに対して割り込み処理をさせる必要はなく、依頼情報を他系コントローラ１００ｂのＭＰＵメモリ１０２ｂの通常通信エリア１４２ｂへ送信する（Ｓ１２０５）。
【００５６】
図５は依頼送信プログラム２０７の他の形態を示すためのフローチャートである。図４のステップＳ１２０４が、ステップＳ１２１０からステップＳ１２１４に置き換えられている点が図４のフローチャートとは異なる。依頼送信プログラム２０７ａが、呼び出し元プログラムによるアクセス先を、他系コントローラ１０１ｂのアクセス先（ＳＭ１２ｂ等）に記録された共有情報と判定すると、他系コントローラ１００ｂに対する割り込み処理の依頼のうち未完了の割り込み処理の数を更新記録するカウンタをインクリメントする。依頼送信プログラム２０７ａが割り込み信号を送信しようとする段階でカウンタを＋１し、他系コントローラから応答信号が返信された時点でカウンタを−１する。コントローラはこのカウンタを自系コントローラのＭＰＵメモリ１０２のローカルメモリ内に持っている。
【００５７】
依頼送信プログラム２０７ａは、ステップＳ１２１０において、現在のカウンタの値が閾値未満かどうかを判定し（Ｓ１２１０）、閾値以上であれば（Ｓ１２１０：Ｎｏ）、他系コントローラ１００ｂのＭＰＵ１０２ｂに対して割り込み処理の依頼を行わずに、自系コントローラ１００ａのＭＰＵメモリ１０２ａの割込待機エリアに依頼要求を記録してフローチャートを終了する（ステップＳ１２１１）。
【００５８】
依頼送信プログラム２０７ａは、カウンタが閾値未満であることを判定すると（Ｓ１２１２：Ｙｅｓ）、割込待機エリアに記録されている依頼要求があるかどうかをチェック（Ｓ１２１２）、割込待機エリアに依頼情報がある場合には、待機中の依頼情報とＳ１２０３によって判定された現在の依頼情報とを合わせて、他系コントローラの割込通信エリア１４１ｂに送信し（Ｓ１２１４）、かつ、複数の依頼情報に対する割込信号を他系コントローラ１００ｂに送信する（Ｓ１２１４）。依頼送信プログラム２０７ａは、依頼情報数分カウンタをインクリメントする（ステップＳ１２１５）。一方、依頼送信プログラムが、待機中の依頼情報が無いことを判定すると、現在の依頼情報を送信して（Ｓ１２１３）、現在の依頼情報に対する割込信号を送信するとともに（Ｓ１２１４）、カウンタを＋１する（Ｓ１２１５）。
【００５９】
このフローチャートによれば、依頼送信プログラム２０７ａが割り込み要求をまとめることによって、割り込み処理の対象となる依頼情報の送信を依頼先コントローラ１００ｂに対して断続的に多発することを避けて、依頼先コントローラ１００ｂで依頼情報に基づいて呼び出されるプロセスの切り替え等が頻発することに基づくオーバーヘッドを減らすことができる。
【００６０】
図６は割り込み受信プログラム２０５の処理フローを示している。割込受信プログラム２０５は、ＭＰＵ１０１ｂが割込信号を他系コントローラ１０１ａから受領した時点で実行中の処理を中断して実行される。実行中処理を中断する際は、プログラムカウンタやローカル変数等が記録され割り込み処理が終了すると元のプログラムが再開される。この仕組みは一般的にＯＳが持つ機能である。
【００６１】
先ず、割込受信プログラム２０５ａは、割込用通信エリア１４１ａに依頼情報（要求）が記録されているか否かをチェックし（Ｓ１８０２）、要求があれば割込用通信エリア１４１ａから依頼情報を取得して（Ｓ１８００）、これを伴って代理アクセスプログラム２０４ａを起動し（Ｓ１８０１）、ステップＳ１８０２に戻る。要求が無ければ（Ｓ１８０２：Ｎｏ）、フローチャートを終了する。
【００６２】
図７は通常受信プログラム２０６の処理フローを示す。通常通信プログラム２０６はＭＰＵ１０１に定期的に呼び出されるが、Ｉ／Ｏ処理等のホストコマンドの処理を中断して実行されることはない。そのため、通常受信プログラムは、割込処理とは異なり実行中処理にオーバーヘッドを生じさせないが、依頼を受信してから処理するまでの時間が長くなる場合がある。通常受信プログラム２０６ａは、先ず、依頼要求情報が通常通信エリア１４２ａに格納されているかどうかチェックし（Ｓ１９００）、なければ終了する。依頼情報が格納されていれば、通常通信エリア１４２ａから依頼情報を取得し（ステップＳ１９０１）、代理アクセスプログラム２０４ａを起動する（Ｓ１９０２）。代理アクセスプログラム２０４ａの起動が終了するとステップＳ１９００に戻る。
【００６３】
図８は、代理アクセスプログラム２０４のフローチャートを示す。代理アクセスプログラム２０４ａは、割込受信プログラム２０５ａ、又は、通常通信プログラム２０６ａに起動される。代理アクセスプログラム２０４ａは依頼情報を割込通信プログラム２０５ａ又は通常通信プログラム２０６ａを介して取得する（ステップＳ１７００）。次に、依頼処理識別テーブル１１１（図１０）を参照して、依頼情報に含まれる識別コードから他系コントローラのアクセス先ハードウェアを識別する（ステップＳ１７０１）。そして、ステップＳ１７０２〜Ｓ１７０９において、アクセス先ハードウェアを判別し、各アクセス先ハードウェアのアクセスプログラムを起動する。
【００６４】
図９はタイマー同期プログラム２０３の処理フローである。タイマー情報は、複数のコントローラによって共有されるべき共有情報の一つである。タイマー同期処理は複数のコントローラのＭＰＵ内部タイマーを同期するための処理である。タイマー同期プログラム２０３ａは自系コントローラ１００ａにおいて一定時間おきに呼び出され、他系コントローラ１００ｂのＭＰＵ内部タイマーの値を取得して自系コントローラ１００ａのＭＰＵ内部タイマーに読んだ値を反映する。この場合、他系コントローラのタイマーがマスター扱いである。
【００６５】
タイマー同期プログラム２０３ａは依頼送信プログラム２０７ａを起動して他系コントローラの割込通信エリア１４１ｂにタイマー読出依頼情報を記録する（Ｓ１１０１）。他系コントローラのＭＰＵ１０１ｂは割込み受信プログラム２０５ｂによって依頼情報を取得し、さらに代理アクセスプログラム２０４ａによってＭＰＵ１０１ｂの内部タイマー値を読み込む。ＭＰＵ１０１ｂは依頼送信プログラム２０７ａを実行して、依頼情報に対する応答として、読出情報をコントローラ１００ａの割込用通信エリア１４１ａに格納する。ＭＰＵ１０１ａは割込受信プログラム２０５ａを実行して割込用通信エリア１４１ａのタイマー値を受信し、さらに、代理アクセスプログラム２０４ａはＭＰＵ１０１ａの内部タイマーにアクセスして、読み出したタイマー値を反映させる。このように、タイマー同期プログラムは、他系コントローラから応答があるまでビジーループで待ち（Ｓ１１０２）、応答が来たら、応答情報からタイマー値を取得して（Ｓ１１０３）、タイマー値を自系コントローラのＭＰＵ内部タイマーに反映して（Ｓ１１０４）、フローチャートを終了する。
【００６６】
次に、代理アクセスプログラム、割り込み受信プログラム、通常受信プログラム、及び、依頼送信プログラムの一つ又は二つ以上によって利用される制御・管理テーブルについて説明する。この制御・管理テーブルには、既述の自他系判定テーブル１１０、依頼処理識別テーブル１１１、アクセス先属性テーブル１１２（図２を参照）が含まれている。
【００６７】
図１０は依頼処理識別テーブル１１１の構成例を示す図である。依頼識別テーブル１１１は、識別コードに応じて通信種別とアクセス先を識別するためのテーブルである。各エントリは識別コードフィールド１１１０、通信種別フィールド１１１１、アクセス先フィールド１１１２を持つ。依頼送信プログラム２０７は、構成管理プログラム２０１や基本Ｉ／Ｏプログラム２０２からのコマンドに基づいて、通信種別１１１１を判定し、更に、アクセス先１１１２を判定する。
【００６８】
依頼送信プログラム２０７はこの判定事項に基づいて識別コードを決定する。依頼送信プログラム２０７ａが他系コントローラ１００ｂの通信用エリア１４ｂの割込用通信エリア１４１ｂと通常通信エリア１４２ｂのどちらに識別コードを書き込むかは、アクセス先によって定まる。アクセス先が共有情報かタイマー情報の場合には、識別コードは割込用通信エリア１４１ｂに書き込まれ、それ以外の場合には通常通信エリア１４２ｂに書き込まれる。
【００６９】
図１１はアクセス先属性テーブル１１２の構成例を示す図である。アクセス先属性テーブル１１２は各アクセス先が共有情報を格納するか否かを示すテーブルであり、各エントリはアクセス先フィールド１１２０、共有情報フィールド１１２１を含む。共有メモリ（ＳＭ）１２は共有情報を含み、タイマーも共有情報を含むが、それ以外のアクセス先は共有情報を含んでいない。
【００７０】
依頼送信プログラム２０７ａが他系コントローラ１１０ｂの通信用エリア１４ｂの割込用通信エリア１４１ｂと通常通信エリア１４２ｂのどちらに識別コードを書き込むかは、アクセス先属性テーブル１１２を参照して、アクセス先が共有情報を含む（Ｙｅｓ）ことを判定すると、依頼送信プログラム２０７ａは、識別コードを割込み通信エリア１４１ｂに格納する。アクセス先が共有情報を含まないことを判定すると、依頼送信プログラム２０７ａは、識別コードを通常通信エリア１４２ｂに格納する。
【００７１】
図１２は自他系判定テーブル１１０の構成例を示す図である。自他系判定テーブル１１０は既述の識別コード（ＩＤ）に基づいて、アクセス先の種別と、アクセス先がＣＴＬａ／ＣＴＬｂのいずれかにあることを示している。各エントリはＩＤフィールド１１００、種別フィールド１１０１、ＣＴＬフィールド１１０２と、を含んでいる。依頼送信プログラム２０７ａは、ＣＴＬフィールドの登録情報が「ｂ」（他系コントローラ）である場合に、他系コントローラの通信エリア１４ｂに識別コードを格納し、ＣＴＬフィールドの登録情報が［ａ］であることを検出すると、構成情報プログラム２０１ａ又は基本プログラム２０２ａのアクセス先は自コントローラ内のリソースであるため、これらプログラムは、他系コントローラ１００ｂの通信エリア１４ｂに識別情報を格納する必要がなく、依頼処理識別テーブル１１１のアクセス先ハードウェアリソースに対して通信種別に対応する処理を実行する。
【００７２】
次に、ホスト計算機２からのリードＩ／Ｏ処理の説明をしながら、代理アクセスプログラム２０４、割込み受信プログラム２０５、通常受信プログラム２０６、及び、依頼送信プログラム２０７の動作を図１３乃至図１６に基づいて説明する。図１３はリードＩ／Ｏの処理フローチャートである。このフローは、ＭＰＵ１０１がホストＩＦ１０４からのリードＩ／Ｏコマンドを受信した際に開始される。
【００７３】
先ず、基本Ｉ／Ｏコマンド２０２は構成管理プログラム２０１に構成情報の更新の有無について問い合わせをする。構成管理プログラム２０１ａは、通信用エリア１４ａにアクセスして、構成情報更新済みフラグがセットされたか否かをチェックする。他系コントローラ１００ｂの構成情報更新済みフラグがセットされていることを検出すると、最新の共有情報を他系コントローラからリードする必要があるために（Ｓ１０１５：Ｙｅｓ）、依頼送信プログラム２０７ａを起動する（Ｓ１０１６）。
【００７４】
依頼送信プログラム２０７ａが起動すると、他系コントローラ１００ｂの通信エリア１４ｂの割込通信用エリア１４１ｂに、識別コード（０ｘ００）を書き込むとともに他系コントローラ１００ｂに割込み信号を送信する。識別コード（０ｘ００）は、他系コントローラ１００ｂのＭＰＵ１０１ｂに共有メモリ１２ｂにアクセスして共有メモリ１２ｂから更新済み共有情報をリードすることを要求する命令である。依頼送信プログラム２０７ａは、他系コントローラ１００ｂからの応答をビジーループで待つ（Ｓ１０１７）。なお、他系コントローラ１００ｂからの応答を自系コントローラ１００ａで既述のように優先処理するようにしてもよい。
【００７５】
他系コントローラ１００ｂのＭＰＵ１０１ｂは割込信号を自系コントローラ１００ａから受信すると、割込受信プログラム２０５ｂを起動し、割込受信プログラム２０５ｂは割込通信エリア１４１ｂの識別コードをリードして代理アクセスプログラム２０４ｂに識別コードを渡す。代理アクセスプログラム２０４ｂは識別コードに基づいて、依頼処理識別テーブル１１１ｂを参照し、アクセス先をＳＭ１２ｂと判定してＳＭ１２ｂにアクセスする。
【００７６】
そして、代理アクセスプログラム２０４ａは、更新済共有情報をリードして、共有情報を含む応答を、依頼送信プログラム２０７ｂを介して自系コントローラ１００ａに送信する自系コントローラのＩ／Ｏ基本プログラム２０２ａは応答情報から更新済共有情報を取得し（Ｓ１０１８）、構成管理プログラム２０１ａを介して更新情報を共有メモリ１２ａに反映する（ｓ１０１９）。このように、基本Ｉ／Ｏプログラム２０２ａがホスト計算機２からのリードＩ／Ｏ処理を実行する際に、デュアルコントローラ構成のストレージシステムに於ける、両コントローラで共有すべき構成情報の更新の有無をチェックするようにしたので、一方のコントローラに構成情報の更新がなされても他系コントローラにこれを迅速に反映するようにできる。なお、Ｓ１０１５において、構成管理プログラム２０１ａが、通信エリア１４ａをチェックした際、構成情報更新フラグがセットされていない場合には、Ｓ１０１６−Ｓ１０１９をスキップすればよい。
【００７７】
次に、基本Ｉ／Ｏプログラム２０２ａは、ＳＭ１２ａの共有情報（自系コントローラ１００ａのキャッシュメモリ１３ａのキャッシュインデックスと他系コントローラ１００ｂのキャッシュメモリ１３ｂのキャッシュインデックス）を参照してキャッシュヒットミス判定を行い（Ｓ１００２）、キャッシュヒットならばＳ１００８に進む。
【００７８】
キャッシュヒットミスならばステップＳ１００４に進む。Ｓ１００４において、基本Ｉ／Ｏプログラム２０２ａは、リードデータをドライブ部１０９からステージングするための新規のキャッシュエリアを、自系コントローラ１００ａのキャッシュメモリ１３ａ又は他系コントローラ１００ｂのキャッシュメモリ１３ｂに確保するために、それぞれのキャッシュメモリの構成情報を更新する。構成情報管理プログラム２０１ａは、キャッシュエリアの確保に関する情報を自系コントローラ１００ａのＳＭａに反映すると、依頼送信プログラム２０７ａによって、他系コントローラ１００ｂの通信エリア１４ｂの割込通信用エリア１４１ｂに更新情報が更新された旨のフラグをセットする。他系コントローラ１００ｂのＭＰＵ１０１ｂは、このフラグを優先処理して、自系コントローラ１００ａの割込通信用エリア１４１ａにＳＭ１２ａのキャッシュ構成情報をリードするための依頼を書き込む。
【００７９】
次いで、基本Ｉ／Ｏプログラム２０２ａは、キャッシュエリアが自系のキャッシュメモリに確保されたことを判定すると、自系コントローラ１００ａのＤＲＩＶＥ＿ＩＦ１０５ａを起動、即ち、ＤＲＩＶＥ＿ＩＦアクセスプログラム２１１ａを起動する（Ｓ１００６）。確保したキャッシュ領域が他系のコントローラ１００ｂのキャッシュメモリ１３ａにあれば、基本Ｉ／Ｏプログラム２０２ａは依頼送信プログラム２０７ａを起動して、他系コントーラの通常通信用エリア１４２ｂにＤＲＩＶＥ＿ＩＦ１０５ｂの起動要求を書き込む。他系コントローラ１００ｂのＭＰＵ１０１ｂは代理アクセスプログラム２０４ａを実行してＤＲＩＶＥ＿ＩＦアクセスプログラム２１１ｂを起動し、そして、ＤＲＩＶＥ＿ＩＦ１０５ｂを起動する。
【００８０】
一方、基本Ｉ／Ｏプログラム２０２ａがキャッシュヒットを判定すると（Ｓ１００２：Ｙｅｓ）、ステップＳ１００８において、ＳＭ１２ａの共有情報を参照して、リードデータを有しているキャッシュメモリ１３が、リードＩ／Ｏをホスト計算機から受信したＨＯＳＴ＿ＩＦ１０４と同じ側のコントローラにあるか否かを判定する（Ｓ１００８）。基本Ｉ／Ｏプログラム２０２ａがこれを否定判定すると、リードデータを有するキャッシュメモリがリードＩ／Ｏを処理すべきコントローラ（図１３の場合、自系コントローラ１００ａとする。）にあるか否かを判定し（Ｓ１００９）、キャッシュメモリ１３が自系コントローラ１００ａに属することを判定すると、自系コントローラ１００ａのＤＭＡアクセスプログラム２０９ａを起動して、ＤＭＡ１０３ａを起動させる（Ｓ１０１０）。ＤＭＡ２０９ａは、キャッシュメモリのリードデータをＨＯＳＴ＿ＩＦ１０４ａに転送する。
【００８１】
一方、キャッシュメモリが他系コントローラ１００ｂにあることを判定すると、他系コントローラにそのＤＭＡ１０９ｂを起動することを依頼するために依頼送信プログラム２０７ａを起動する（Ｓ１０１１）。
【００８２】
ステップＳ１００８において、基本Ｉ／Ｏプログラム２０２ａが、自系コントローラ１００ａのＳＭ１２ａの構成情報を参照して、リードデータを有しているキャッシュメモリが、リードＩ／Ｏをホスト計算機２から受信したＨＯＳＴ＿ＩＦ１０４と同じ側のコントローラにあることを判定すると、このＨＯＳＴ＿ＩＦが自系コントローラ１００ａの側にあるか否かを判定する。基本Ｉ／Ｏプログラムが、ＨＯＳＴ＿ＩＦが自系コントローラ１００ａにあることを判定するとＨＯＳＴ＿ＩＦアクセスプログラム２１０ａを起動してＨＯＳＴ＿ＩＦ１０４ａを起動する（ステップＳ１０１３）。
【００８３】
基本Ｉ／Ｏプログラムは、ＨＯＳＴ＿ＩＦが他系コントローラ１００ｂの側にあることを判定すると（Ｓ１００８：Ｙｅｓ）、他系コントローラ１００ｂのＨＯＳＴ＿ＩＦアクセスプログラム２１０ｂの起動を依頼するために依頼送信プログラム２０７ａを起動する（ステップ１０１４）。
【００８４】
ステップＳ１０１３，ステップ１０１４、ステップ１０１０、ステップ１０１１、ステップ１００６、及び、ステップ１００７を経て、基本Ｉ／ＯプログラムはＳ１０１５に進む。Ｓ１０１５では、基本Ｉ／Ｏプログラム２０２ａは、既述の起動されたプログラムからの応答待ち状態を設定して、図１３のフローチャートを一旦終了させる。基本Ｉ／Ｏプログラム２０２ａは起動対象プログラムからの応答を確認すると、リードＩ／Ｏコマンドの処理を継続するために、図１３のフローチャートを再開する。
【００８５】
基本Ｉ／Ｏプログラム２０２ａは、図１３のＳ１００６又はＳ１００７の起動要求に対する応答を確認すると図１３のフローチャートを再開する。再開後の流れは図１４のフローチャートに示すようになる。起動対象プログラムからの応答があった状況（Ｓ１００６又はＳ１００７）では、新たなキャッシュエリアが自系コントローラ１００ａ又は他系コントローラ１００ｂに確保されている。そして、新たに確保されたキャッシュエリアには、ドライブ部１０９からリードデータがステージングされている。したがって、基本Ｉ／Ｏプログラム２０２ａは、Ｓ１００２を肯定判定し、Ｓ１００８以降を実行する。図１４の各ステップに対する説明は、図１３のものと同じである。
【００８６】
基本Ｉ／Ｏプログラム２０２ａがＳ１０１３又はＳ１０１４によって起動対象となったプログラムからの応答を受領すると、自系コントローラ１００ａ及び他系コントローラ１００ｂにおいて、ＤＭＡ１０３によってリード対象のデータがキャッシュメモリ１３からＨＯＳＴ＿ＩＦ１０４に転送できる状態になっている。したがって、基本Ｉ／Ｏプログラムは、ホスト計算機へのリードデータ転送を可能にするために、ホスト＿ＩＦアクセスプログラム２１０を起動させる必要がある。そのために、基本Ｉ／Ｏプログラム２０２ａがＳ１０１３又はＳ１０１４によって起動対象となったプログラムからの応答を受領すると、図１５に示すように、図１３のＳ１０１２以降の処理を実行する。図１５のＳ１０１２以降の処理は図１３のものと同じである。
【００８７】
基本Ｉ／Ｏプログラム２０２ａが、Ｓ１０１３において起動対象となった自系コントローラ１００ａのＨＯＳＴ＿ＩＦアクセスプログラム２１０ａから応答を受信するか、又は、Ｓ１０１４において起動対象となった他系コントローラ１００ｂのＨＯＳＴ＿ＩＦアクセスプログラム２１０ｂからの応答を受信すると（図１５：Ｓ１０１５）、リードデータがキャッシュメモリ１３からＨＯＳＴ＿ＩＦ１０４を経てリードＩ／Ｏの発行元ホスト計算機２に転送されたために、リードＩ／Ｏ処理を終了する。
【００８８】
実施形態２
第１の実施形態では、既述の優先処理を割込処理によって実現したが、第２の実施形態では、プロセッサにマルチコアのタイプのものを採用し、一部のコアを優先処理専用として設定し、当該コアがホストＩ／Ｏ処理を行わないようにすることによって優先処理が達成されるようにした。図１６は第２の実施形態のＭＰＵメモリ１０２ａの構成である。第１の実施形態と異なるのは、ローカルメモリ１１ａに、複数のコアプロセッサのうちの専用コアプロセッサを判定するためのテーブル１１３ａが追加されている点と、通信エリア１４ａにコア毎割込用通信エリア１４３ａ、および、コア毎通常通信エリア１４４ａが追加されている点である。他系コントローラ１００ｂのＭＰＵメモリ１０２ｂも同様である。
【００８９】
第２の実施形態において、各コアは起動時に専用コア判定テーブル１１３ａを参照することによって自身が専用コアであるか否かを判定し、専用コアでない通常コアと判定した場合のみ基本Ｉ／Ｏプログラム２０２ａ、構成管理プログラム２０１ａを実行する。
【００９０】
図１７に専用コア判定テーブル１１３の例を示す。専用コア判定テーブル１１３にはコアの数だけエントリがあり、各エントリはコアフィールド１１３０、コア種別フィールド１１３１、割り込み受付可否フィールド１１３２を持つ。コアフィールド１１３０にはコアを識別するための情報が格納され、コア種別フィールド１１３１には専用コアか通常コアを区別するための識別情報が格納され、割込受付可否フィールド１１３２には、通常コアに対する割込処理の受付の可否を示す情報が格納される。
【００９１】
専用コアは既述のとおり、優先処理に特化されているのに対して、通常コアは、優先処理の他に、ホストＩ／Ｏの処理と、管理端末３からの管理要求処理をも実行可能である。通常コア及び専用コアへの依頼情報の送信は、コア毎の通信エリアを利用する。専用コアは他系コントローラからの依頼の処理に割込要求を必要としないので、専用コアへの依頼は、コア毎通常通信エリア１４２ａが利用される。図１７に示したように、通常コアに対しては、割込受付の可否を設定できる。割込受付が否に設定された通常コアは、他系コントローラから割込要求を受付けないため、当該コアに対する割込用通信エリアを利用しない。したがって、この通常コアは既述の優先処理ではなく、既述の通常処理に対応する。割込受付が可に設定された通常コアは、他系コントローラから割込要求を受付けるために、既述の優先処理及び通常処理の両方に対応することができる。
【００９２】
既述の専用コア判定テーブル１１３において、コア種別、割込受付可否は、各コアの負荷によって動的に変更可能である。また、二つのプロセッサが夫々４つのコアを有する例を示し、かつ、各プロセッサに一つの専用コアがある例を示したが、これは一例である。専用コアと通常コアのバランスは、テーブルに記載されたものに限られない。専用コアと通常コアの切り替えは、構成管理プログラムが専用コア判定テーブル１１３を書き換えることによって可能となる。既述の専用コア判定テーブルにおいて、ＣＴＬ０は第１のコントローラのＭＰＵ１０１ａのことであり、ＣＴＬ１は第２のコントローラのＭＰＵ１０１ｂのことである。
【００９３】
図１８は、第２の実施形態における、ＭＰＵメモリ１０２のソフトウェア構成図である。第１の実施形態と異なるのは、専用コア数調整プログラム２２０が追加されている点である。このプログラムの詳細については後述する。
【００９４】
図１９は第２の実施形態における依頼送信プログラム２０７ａの処理フローである。第１の実施形態の依頼送信プログラム（図４）と異なるのはＳ１２０３とＳ１２０４の間にステップＳ１２５３〜Ｓ１２５６が加わっている点である。ホストＩ／Ｏを受信した通常コア（専用コアはホストＩ／Ｏを受信しない）は、依頼送信プログラム２０７を起動する。依頼送信プログラム２０７ａはＳ１２０１〜Ｓ１２０３を経てＳ１２５３で専用コア判定テーブル１１３を参照し、他系コントローラ１００ｂのＭＰＵ１０１ｂに専用コアが一つでもあるかどうかを判定する（Ｓ１２５４）。
【００９５】
依頼送信プログラム２０７ａを実行する通常コアが、他系コントローラに専用コアがないことを判定すると、他系コントローラのＭＰＵメモリ１０１ｂの通常コアの割込用通信エリア１４３ｂに依頼情報を書き込み、割込み要求を送信する（Ｓ１２０４）。
【００９６】
一方、依頼送信プログラム２０７ａが専用コアの存在を判定するとＳ１２５７に進み、専用コアと設定されている他系コントローラのコアを一つ選択する（Ｓ１２５７）。専用コアと設定されているコアが複数ある場合はそのいずれかを、例えばラウンドロビン等で選択する。そして、他系コントローラ１００ｂにおける、選択したコア用の通常通信エリア１４４ｂに依頼情報を書き込む（ステップＳ１２５６）。専用コアはホストＩ／Ｏ処理等非優先処理を行わないため、短時間で依頼情報の送信元に応答することがき、また、優先処理を割込処理によって実行する場合に比較して、実行中のプログラムを割込処理に切り替えなければならないことに基づくオーバーヘッドが生じないメリットを発揮する。
【００９７】
図２０は、専用コア数調整プログラム２２０のフローチャートである。専用コア数調整プログラム２００は、定期的、例えば１分毎に実行される。専用コア数調整プログラムは、プロセッサの各コアの負荷（稼働率）を継続してモニタし、通常コアのプロセッサ負荷が低い時は専用コアを設定して（或いは専用コアの比率を多くして）、依頼送信プログラム２０７が通常コアに対する割込要求によるオーバーヘッドが生じないようにすることができる。一方、調整プログラム２２０は、通常コアのプロセッサ負荷が高くなった時は専用コア設定のコアを無くすようにする（或いは専用コアの比率を少なくする。）。
【００９８】
専用コア数調整プログラム２２０は、Ｓ２６００において、複数のコアの夫々について負荷情報を取得し、Ｓ２６０１で、通常コアの負荷の総合値から専用コアの負荷の総合値を引いた差分が閾値以上かどうかを判定する。閾値以上であれば専用コアを減らす（Ｓ２６０２）。
【００９９】
専用コア数を減じる手順は次のとおりである。専用コア数調整プログラム２２０ａは自身が属する自系コントローラ１００ａの専用コア判定テーブル１１３ａを変更することによって、自系コントローラ１００ａ又は他系コントローラ１００ｂの専用コア数を減じることができる。その際、専用コア数調整プログラム２２０ａは、自系コントローラ１００ａの専用コア判定テーブルの更新より前に、他系コントローラ１００ｂの専用コア判定テーブル１１３ｂを更新することが好ましい。
【０１００】
専用コア判定テーブル１１３は自系コントローラのＭＰＵ１０１ａと他系コントローラのＭＰＵ１０１ｂの情報を含むために、自系コントローラと他系コントローラによって共有される共有情報であり、これに対する更新のためのアクセスは優先処理の対象となる。したがって、自系コントローラ１００ａからのアクセスは他系コントローラ１００ｂの専用コアに対して行われるか、あるいは、通常コアの割込通信用エリア１４３ｂに対して行われる。自系コントローラ１００ａから他系コントローラ１００ｂへのアクセスは、専用コア或いは通常コアのいずれでもよい。自系コントローラの専用コア数調整プログラム２２０ａは他系コントローラ１００ｂからの応答を待って、自系コントローラの専用コア判定テーブル１１３ａを変更する。
【０１０１】
他系コントローラ１００ｂの専用コア判定テーブル１１３ｂの更新を自系コントローラ１００ａの専用コア判定テーブル１１３ａの更新より優先させたのは、他系コントローラ１００ｂから自系コントローラ１００ａの専用コアに依頼が前もって来ないようにするためである。なお、自系コントローラ１００ａは他系コントローラ１００ｂからの応答を待って専用コア判定テーブル１１３ａを更新したが、他系コントローラ１００ｂからの応答を待つことなく、自系コントローラ１００ａのテーブル１１３ａを更新してもよい。
【０１０２】
一方、専用コア数調整プログラム２２０ａがＳ２６０１を否定判定すると、専用コアの合計負荷から通常コアの合計負荷を引いた負荷の差が閾値以上かどうかを判定する（Ｓ２６０３）。閾値以上であれば専用コアを増やす（Ｓ２６０４）。先ず、専用コア数調整プログラム２２０ａは自系コントローラ１００ａの専用コア判定テーブル１１３ａを更新する。その際、専用コア数調整プログラム２２０ａは、専用コアに属性を変更しようとしている通常コアがホストＩ／Ｏ等の処理中であることを想定して、一定時間経過して当該処理が経過するのを待って当該通常コアを専用コアに変更する。その後、自系コントローラ１００ａは、優先処理として他系コントローラ１００ｂに専用コア判定テーブル１１３ｂの更新を依頼する。なお、専用コア数調整プログラム２２０ａは、処理中の依頼処理を全て中断して、通常コアを専用コアに即時に切り替えるようにしてもよい。
【０１０３】
第２の実施形態によれば、専用コアの負荷と通常コアの負荷とを比較して、専用コアの比率が動的に変更されるので、Ｉ／Ｏ処理の負荷が優先処理に比較して高い場合には通常コアの比率を上げてＩ／Ｏ処理を迅速化し、優先処理の負荷がＩ／Ｏ負荷に比べて高い場合には、専用コアの比率を上げて優先処理を迅速化した。これによって、第２の実施形態は、マルチコアに優先処理専用の専用コアを設定しても、常時、Ｉ／Ｏ処理と優先処理とを高次元で均衡させることができる。第２の実施形態は、専用コアの負荷が高い場合には、割込可否が可に設定された通常コアに共有情報へのアクセスを依頼すればよい。
【０１０４】
実施形態３
第３の実施形態は、第２の実施形態の変形として、Ｓｉｍｕｌｔａｎｅｏｕｓ  Ｍｕｌｔｉ−Ｔｈｒｅａｄｉｎｇ（ＳＭＴ）を用いることを特徴とする。ＳＭＴを用いることによって一つの物理コアをスレッドという仮想的な複数のコアとして扱うことができる。このスレッドを仮想コアと呼ぶ。本実施形態によれば、既述の専用コア判定テーブル１１３において、エントリが仮想コア数分用意されることになる。コアフィールドには仮想コアの識別番号が記録される。この仮想コアのうち１以上を専用コアとして設定できる点は第２の実施形態と同じである。
【０１０５】
この実施形態は、ＳＭＴを用いることにより、普段は仮想コアをＨＡＬＴ状態（停止状態）にしておき、コントローラから他系コントローラの当該仮想コアに割り込み信号を発生することによって、当該仮想コアを専用コアとして起動させることができる。したがって、専用コア設定の仮想コアを空転させることにより他の仮想コア（通常コア）の処理能力を圧迫することを避けられるという利点がある。さらに、本実施形態は、複数の仮想コアを専用コア設定にした上でそのうちの一つのコア以外を停止させて待機させておき、停止していない方の専用コア設定の仮想コアが障害等で停止した場合に、待機させておいた仮想コアにコア間割り込みを送信して待機状態から復帰させることで高速に専用コア設定の仮想コアをフェイルオーバさせることができる。
【０１０６】
実施形態４
次に、既述の第２実施形態の変形例としての第４の実施形態について説明する。この実施形態は、コントローラの依頼送信プログラム２０７ａが他系コントローラ１００ｂに依頼した処理が完了したと判定するための要件を定め、この要件を達成するための依頼方式を選択することを特徴とする。この特徴点のために、第２の実施形態に係るＭＰＵメモリのローカルメモリ１１（図１６）に、当該要件を決定するためのテーブルとこの要件を達成するための依頼方式を選択するためのテーブルが追加されている。前者の例が依頼方式要件テーブルと称するものであり、後者の例が依頼方式利用可否テーブルと称するものである。
【０１０７】
図２１は依頼方式要件テーブル１１４の一例である。依頼方式要件テーブル１１４は、依頼送信プログラム２０７ａによって指定される、他系コントローラ１００ｂのアクセス先１１４０と、アクセス先に対するアクセス種別１１４１と、他系のコントローラのＭＰＵ１０１ｂがアクセス先にアクセス種別に係る処理を実行し、その処理の完了を依頼送信元のコントローラ１００ａに応答するまでの期待時間（期待応答時間）１１４２を記録するエントリを有している。
【０１０８】
図２２Ａは依頼方式利用可否テーブル１１５の第１の例である。依頼方式利用可否テーブル１１５は、依頼送信プログラム２０７ａが依頼情報を送信すべき、他系コントローラ１００ｂのコアを規定する依頼先フィールド１１５３と、依頼送信プログラムからの通信タイプを規定する依頼方式フィールド１１５０と、依頼先コアが依頼を処理できるか否かを規定する利用可否フィールド１１５１と、依頼元コントローラが依頼情報を依頼先コントローラに送信してから依頼先コアが依頼情報を処理して依頼元コントローラに応答を返すまでの時間を規定した期待応答時間フィールド１１５２と、を有する。期待応答時間は各コアの負荷によって変動する。構成管理プログラムは各コアの負荷を継続的にモニタして、期待応答時間を必要に応じて更新する。
【０１０９】
図２２Ｂは依頼方式利用可能テーブル１１５の第２の例である。コア0、コア１が専用コアである。したがって、コア0またはコア１に送信される要求は割込み要求である必要はなく、通常処理の依頼でよい。通常、専用コアに対する負荷が低い時は、コア０またはコア１での期待応答時間は短く、通常、コア０またはコア１などの専用コアに通常処理の依頼を送信するほうが、コア２などの通常コアへ割込み要求を送信するより有利である。しかしながら、コア０、またはコア１などの専用コアの負荷が高くなった場合、コア２などの通常コアへ割込み要求を送信する方が、コア０またはコア１などの専用コアへ通常処理の依頼を送信するより期待応答時間が短くなることもある。
【０１１０】
図２３はこの実施形態における依頼送信プログラム２０７のフローチャートである。既述の図５、図１９のフローチャートと異なるのは、ステップＳ１２０３以降がステップＳ１２８０からステップＳ１２８３と置き換えられていることである。ステップＳ１２０２の次のステップＳ１２８０では、依頼送信プログラム２０７は依頼方式要件テーブル１１４を参照して、アクセス先であるハードウェア１１４０と、アクセスの種別に対応する要件としての期待応答時間１１４２を取得する。
【０１１１】
次いで、依頼送信プログラム２０７は、依頼方式利用可否テーブル１１５を参照し（ステップＳ１２８１）、要件１１４２（期待応答時間）を満たす、依頼先１１５３、依頼方式１１５０、利用可否１１５１の各属性の組み合わせを選択する（ステップＳ１２８２）。要件を満たすとは、依頼方式利用可否テーブル１１５において期待応答時間フィールド１１５２に含まれる期待応答時間が、ステップＳ１２８０で取得した当該アクセス種別に対する期待応答時間１１４２以下であることである。依頼送信プログラム２０７ａは、依頼方式利用可否テーブル１１５に基づいて選択した依頼方式、すなわち、依頼先のコア１１５３と通信方式（割り込み通信か通常通信か）１１５０にしたがって、他系コントローラ１００ｂに依頼のためのアクセスを行う（ステップＳ１２８３）。
【０１１２】
専用コア数調整プログラム２２０はコア毎の負荷状況を判定することにより、依頼方式利用可否テーブル１１５を更新する。通常コアがホストＩ／Ｏ処理によって負荷が高い場合は、通常通信方式の期待応答時間を長く設定される。一方、その負荷が低い場合は、通常通信方式の期待応答時間が短く設定される。前者の場合では、通常通信方式の期待応答時間より割り込み通信方式の期待応答時間の方が短く、後者の場合ではこれが逆になる。通常通信方式での期待応答時間は例えば待ち行列モデル等によって決定される。
【０１１３】
図２１において、第１のコントローラ１００ａから第２のコントローラ１００ｂの共有メモリ１２ｂへのアクセス、即ち、リード、ライト（ノンポステッドライト、アトミック更新）の完了応答時間は１０マイクロ秒であるため、これ以下で第１のコントローラ１００ａに応答できる方式は、図２２Ａ，Ｂよれば、第２のコントローラ１００ｂのプロセッサ１０１ｂに対するコア非選択の通常通信方式によるか、或いは、コア１の通常通信方式である。専用コアの期待応答時間は通常コアより常に短いとは限らず、また、割込み方式に通信が通常方式による通信より常に短いとは限らない。コアの負荷や、Ｉ／Ｏ処理の負荷によってどのコアを用いてどの方式の通信によることが期待応答時間を満足できるかが異なってくる。コア非選択の通常通信方式では、依頼先のコアを指定せず，複数のコアのうちどれが要求を受け付けても良い、ことを意味する。通信エリアは，コア毎の通信エリアとコア共通の通信エリアとに別れており、コア毎のエリアに書き込まれた依頼はコア１の通常通信方式が設定される。共通のエリアに書きこまれた依頼はコア非選択の通常通信方式が設定される。コア非選択の通常通信方式が設定されると、Ｉ／Ｏ処理が完了したコアが要求を拾うため、コアを指定するよりも通常応答時間は短くなりやすい。この場合、コアが通信エリアから要求を読み出す、排他制御が必要である。
【０１１４】
実施形態５
第４の実施形態の変形例としての第５実施形態について説明する。第５実施形態は、ユーザがＩ／Ｏ処理に対する性能要件を定め、これに応じて通信の期待応答時間を補正する例を示す。Ｉ／Ｏ処理に対する性能要件として、レスポンス時間（ホストがＩ／Ｏコマンドを発行してからストレージシステムから応答が返されるまでの所要時間）である場合を示す。
【０１１５】
図２４はボリューム毎に既述の性能要件を定めた、ボリューム性能要件テーブル１１６の構成例である。このボリューム性能要件テーブルは、ＭＰＵメモリ１０２のローカルメモリ１１に追加される。ボリューム性能要件テーブル１１６はボリューム番号フィールド１１６１と、期待通信応答時間補正値フィールド１１６２と、を持つ複数のエントリからなる。ボリューム番号フィールド１１６１はストレージシステム内部でボリュームを識別するための番号を格納し、期待応答時間補正値フィールド１１６２は当該ボリュームへのＩ／Ｏ要求に伴う通信において、通信方式の選択に用いる要件を補正するためものである。
【０１１６】
図２５はユーザがボリュームのＩ／Ｏ性能要件を設定するための入力画面を示す。本画面は管理端末３に表示され、本画面を通してユーザがボリューム毎の性能要件を入力する。画面には性能要件定義のための性能要件入力用テーブル３００が表示される。性能要件入力用テーブル３００にはボリューム番号フィールド３００１と期待Ｉ／Ｏレスポンス時間フィールド３００２という二つの入力用フィールドを持ったエントリが表示される。
【０１１７】
ユーザはそれぞれの欄に要件を定めるボリュームのボリューム番号３００１と、このボリュームのＩ／Ｏレスポンスにおける期待応答時間を期待Ｉ／Ｏレスポンス時間３００２に入力する。管理端末３は入力を受けると当該情報をストレージシステム４に出力する。ストレージの構成管理プログラム２０１は、ボリューム性能要件テーブル１１６に新しくエントリを追加し、追加されたエントリのボリューム番号フィールドに入力されたボリューム番号を入力し、さらに、期待通信応答時間補正値フィールドに、入力された期待Ｉ／Ｏレスポンス時間から求めた補正値を格納する。
【０１１８】
補正値の求め方は、例えば、基準Ｉ／Ｏレスポンス時間を決めておき、基準Ｉ／Ｏレスポンス時間に対する期待Ｉ／Ｏレスポンス時間の比率を期待通信応答時間補正値としてもよい。こうすることで、期待Ｉ／Ｏレスポンス時間が短いボリュームは、期待Ｉ／Ｏレスポンス時間の長いボリュームに比べて通信応答時間の短い依頼方式を選択する。通信応答時間の短い依頼方式については、第４の実施形態において説明したとおりである。これによって、性能要件の異なるボリュームへのＩ／Ｏ要求が混在している場合に、性能要件が厳しいボリュームへのＩ／Ｏ処理が優先されて、全体として、各ボリュームの性能要件を満たすことができる。
【０１１９】
期待通信応答時間補正の具体的な手順を図２６に示す。図２６は図２３の変形例である。相違点として、まず、依頼送信プログラム２０７が呼び出される際に、どのボリュームへのＩ／Ｏ処理に伴う呼び出しであるかの情報が呼び出し元プログラムであるＩ／Ｏ基本プログラム２０２等から依頼送信プログラム２０７に渡される。この情報はボリューム番号を含む。これを対象ボリューム番号と呼ぶ。また、図２３のフローに加えて、ステップ１２８０の前にステップＳ１２９０が追加されている。
【０１２０】
ステップＳ１２９０では、ボリューム性能要件テーブル１１６を参照して、対象ボリューム番号に対応するエントリの期待通信応答時間補正値フィールド１１６２に格納された値を取得する。そしてこの値を、続くステップ１２８０で取得した期待応答時間値に乗じて補正する。補正された期待応答時間値を通信方式の要件として、続くステップ１２８１以降の処理を行うことにより、ボリューム毎の性能要件に応じて通信方式を選択することができる。これにより、Ｉ／Ｏレスポンス性能が要求されるボリュームのＩ／Ｏ処理に伴う通信には通信応答時間の期待値が小さい通信方式を選択することができ、ボリュームのＩ／Ｏ性能要件を満たすことができる。
【０１２１】
なお、本実施形態ではボリューム毎のＩ／Ｏ性能要件に応じて決定した係数を積算する方法により期待応答時間を補正する例を示したが、例えばユーザによって入力されたボリューム毎のＩ／Ｏ性能要件が予め定められた閾値を下回るか否かによって予め定められた期待通信応答時間に補正するとしてもよい。また、本実施形態ではボリューム毎の性能要件を定めているが、例えばＩ／Ｏ発行元のホスト毎に性能要件を定めてもよい。また、Ｉ／Ｏ性能要件としてはレスポンス時間を用いるのでなく、スループット性能（単位時間あたりにホストに応答を返すＩ／Ｏコマンド数、またはデータ量）で定めてもよい。この場合は要求されるスループット性能の値が高いほどＩ／Ｏ処理に伴う通信の期待応答時間は短く設定する。
【０１２２】
なお、本発明は既述の実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、既述の実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換えることも可能であり、また、ある実施形態の構成に他の実施形態の構成を加えることも可能である。また、各実施形態の構成の一部について、他の構成の追加、削除、置換をすることも可能である。また、既述の各構成、機能、各処理部、処理手段等は、それらの一部又は全部を、例えば、ＬＳＩで設計する等によりハードウェアで実現してもよい。また、各構成、機能等は、プロセッサが夫々の機能を実現するプログラムを解釈し、実行することよりソフトウエアで実現してもよい。また、制御線や接続線は説明上必要と考えられるものを示しており、製品上必ずしも全てのものを示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてよい。
【０１２３】
なお、既述の実施形態では、コントローラのプロセッサからの依頼が書き込まれる通信エリアを、割込用通信エリアと通常通信用エリアに分けたが、こられ通信エリアを分けることなく共通にして、優先処理のための割り込み信号があったか否かで、優先処理又は非優先(通常処理)を切り替えるようにしてもよい。
【図１】
0005909566.tif 000002
【図２】
0005909566.tif 000003
【図３】
0005909566.tif 000004
【図４】
0005909566.tif 000005
【図５】
0005909566.tif 000006
【図６】
0005909566.tif 000007
【図７】
0005909566.tif 000008
【図８】
0005909566.tif 000009
【図９】
0005909566.tif 000010
【図１０】
0005909566.tif 000011
【図１１】
0005909566.tif 000012
【図１２】
0005909566.tif 000013
【図１３】
0005909566.tif 000014
【図１４】
0005909566.tif 000015
【図１５】
0005909566.tif 000016
【図１６】
0005909566.tif 000017
【図１７】
0005909566.tif 000018
【図１８】
0005909566.tif 000019
【図１９】
0005909566.tif 000020
【図２０】
0005909566.tif 000021
【図２１】
0005909566.tif 000022
【図２２Ａ】
0005909566.tif 000023
【図２２Ｂ】
0005909566.tif 000024
【図２３】
0005909566.tif 000025
【図２４】
0005909566.tif 000026
【図２５】
0005909566.tif 000027
【図２６】
0005909566.tif 000028