(57)【特許請求の範囲】
【請求項１】
外部装置との間の通信を制御するプロセッサである通信制御プロセッサと、
前記外部装置から受信したＩ／Ｏ要求に従い記憶ドライブに対するＩ／Ｏ処理を行う複数のメインプロセッサと、
を備え、
前記記憶ドライブに格納するデータをＣＫＤフォーマットに従って管理し、
前記メインプロセッサの夫々の稼働率と、前記Ｉ／Ｏ処理の対象になっているＣＫＤフォーマットで管理されているデータのレコードを構成しているデータ部であるＣ部、Ｋ部、及びＤ部の夫々に関する情報と、前記メインプロセッサの夫々が現在処理中の前記Ｉ／Ｏ処理の負荷の指標であるＩ／Ｏ起動数と、に基づき、前記データ部を単位として、前記Ｉ／Ｏ処理を複数の前記メインプロセッサに振り分け、
前記Ｉ／Ｏ要求を受信した前記メインプロセッサ以外の他の前記メインプロセッサのいずれについても前記Ｉ／Ｏ起動数が０でなく、かつ、前記Ｉ／Ｏ要求を受信した前記メインプロセッサの前記Ｉ／Ｏ起動数が、前記他のメインプロセッサの前記Ｉ／Ｏ起動数のいずれに対してもそれ以下である場合は前記振り分けを行わない
ストレージ装置。
【請求項２】
請求項１に記載のストレージ装置であって、
前記稼働率が低い前記メインプロセッサ、もしくは、前記Ｉ／Ｏ起動数が少ない前記メインプロセッサを優先して前記Ｉ／Ｏ処理の振り分け先とするストレージ装置。
【請求項３】
請求項１に記載のストレージ装置であって、
Ｄ部を含まない前記レコードについての前記Ｉ／Ｏ処理を前記振り分けの対象としないストレージ装置。
【請求項４】
請求項１に記載のストレージ装置であって、
前記Ｉ／Ｏ要求がＣ部の読み出しを要求している場合は、当該読み出しの対象となるＣ部についての前記Ｉ／Ｏ処理を前記振り分けの対象としない
ストレージ装置。
【請求項５】
請求項１に記載のストレージ装置であって、
前記振り分けの対象となる前記Ｉ／Ｏ処理の対象になっている前記データ部の数の総和を求め、前記総和から、前記レコード数及び所定数の前記レコードの集合であるトラック数を求め、
前記トラック数が前記Ｉ／Ｏ処理の振り分け先となる前記メインプロセッサの総数以上である場合は、前記データ部の総和を前記トラック数に分割した単位で、前記データ部についての前記Ｉ／Ｏ処理の振り分けを行い、
前記トラック数が前記Ｉ／Ｏ処理の振り分け先となる前記メインプロセッサの総数未満であり、かつ、前記レコード数が前記Ｉ／Ｏ処理の振り分け先となる前記メインプロセッサの総数以上である場合は、前記データ部の総和を前記レコード数に分割した単位で、前記データ部についての前記Ｉ／Ｏ処理の振り分けを行い、
前記レコード数が前記Ｉ／Ｏ処理の振り分け先となる前記メインプロセッサの総数未満である場合は、前記データ部ごとに前記データ部についての前記Ｉ／Ｏ処理の振り分けを行う
ストレージ装置。
【請求項６】
請求項１に記載のストレージ装置であって、
前記通信制御プロセッサは、前記Ｉ／Ｏ要求を受信すると、前記メインプロセッサの１つであるマスタプロセッサに対して前記Ｉ／Ｏ要求の内容を通知し、
前記マスタプロセッサは、他の前記メインプロセッサである複数のスレーブプロセッサに前記Ｉ／Ｏ処理を振り分ける
ストレージ装置。
【請求項７】
請求項６に記載のストレージ装置であって、
前記記憶ドライブから読み出して前記外部装置に送信するリードデータを格納する、データ格納バッファを備え、
前記スレーブプロセッサは、前記マスタプロセッサから振り分けられた前記Ｉ／Ｏ処理に応じて前記データ格納バッファに前記リードデータを格納すると、その旨を前記通信制御プロセッサに対して直接通知し、
前記通信制御プロセッサは、前記通知に応じて前記リードデータの前記外部装置への転送を行う
ストレージ装置。
【請求項８】
請求項１に記載のストレージ装置であって、
前記メインプロセッサの夫々は、マルチコアプロセッサを構成しているコアプロセッサの１つである、ストレージ装置。
【請求項９】
外部装置との間の通信を制御するプロセッサである通信制御プロセッサと、
前記外部装置から受信したＩ／Ｏ要求に従い記憶ドライブに対するＩ／Ｏ処理を行う複数のメインプロセッサと、
を備え、
前記記憶ドライブに格納するデータをＣＫＤフォーマットに従って管理する
ストレージ装置の制御方法であって、
ストレージ装置が、前記メインプロセッサの夫々の稼働率と、前記Ｉ／Ｏ処理の対象になっているＣＫＤフォーマットで管理されているデータのレコードを構成しているデータ部であるＣ部、Ｋ部、及びＤ部の夫々に関する情報とに基づき、前記データ部を単位として、前記Ｉ／Ｏ処理を複数の前記メインプロセッサに振り分け、
前記ストレージ装置が、Ｄ部を含まない前記レコードについての前記Ｉ／Ｏ処理を前記振り分けの対象としない、ストレージ装置の制御方法。
【請求項１０】
請求項９に記載のストレージ装置の制御方法であって、
前記ストレージ装置が、前記稼働率と、前記Ｉ／Ｏ処理の対象になっているＣＫＤフォーマットで管理されているデータのレコードを構成しているデータ部であるＣ部、Ｋ部、及びＤ部の夫々に関する情報と、前記メインプロセッサの夫々が現在処理中の前記Ｉ／Ｏ処理の負荷の指標であるＩ／Ｏ起動数と、に基づき、前記Ｉ／Ｏ処理を複数の前記メインプロセッサに振り分ける、ストレージ装置の制御方法。
【請求項１１】
請求項９に記載のストレージ装置の制御方法であって、
前記ストレージ装置が、前記Ｉ／Ｏ要求がＣ部の読み出しを要求している場合には、当該読み出しの対象となるＣ部についての前記Ｉ／Ｏ処理を前記振り分けの対象としない、ストレージ装置の制御方法。
【請求項１２】
請求項９に記載のストレージ装置の制御方法であって、
前記通信制御プロセッサは、前記Ｉ／Ｏ要求を受信すると、前記メインプロセッサの１つであるマスタプロセッサに対して前記Ｉ／Ｏ要求の内容を通知し、
前記マスタプロセッサは、他の前記メインプロセッサである複数のスレーブプロセッサに前記Ｉ／Ｏ処理を振り分け、
前記ストレージ装置は、
前記記憶ドライブから読み出して前記外部装置に送信するリードデータを格納する、データ格納バッファを備え、
前記スレーブプロセッサは、前記マスタプロセッサから振り分けられた前記Ｉ／Ｏ処理に応じて前記データ格納バッファに前記リードデータを格納すると、その旨を前記通信制御プロセッサに対して直接通知し、
前記通信制御プロセッサは、前記通知に応じて前記リードデータの前記外部装置への転送を行う
ストレージ装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置、及びストレージ装置の制御方法に関する。
【背景技術】
【０００２】
特許文献１には、複数のマイクロプロセッサを備えたストレージシステムにおいて、１つのマイクロプロセッサに負荷が集中するのを防ぐため、複数のマイクロプロセッサのうち、受信したＩ／Ｏ要求のＩ／Ｏ処理を行うマイクロプロセッサが、自分の負荷が第一の負荷以上である場合に、上記Ｉ／Ｏ処理のうちの少なくともＩ／Ｏ処理部分（キャッシュメモリ２０の一領域であってデータを記憶させるためのキャッシュ領域をキャッシュメモリ２０から確保することを含むキャッシュ制御処理を含んだ処理部分）を他のマイクロプロセッサのいずれかに割り振り、他のマイクロプロセッサが少なくとも上記Ｉ／Ｏ処理部分を実行することが記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−２４９７２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
昨今、処理能力の向上や応答性能の向上を図るべく、ストレージ装置へのマルチコアプロセッサの導入が進んでいる。プロセッサをマルチコア化すればコアプロセッサ間での並列処理が可能となり、ストレージ装置全体の性能向上を期待することができる。
【０００５】
しかしマルチコアプロセッサを導入しても、並列処理の対象とならないような処理については必ずしもその恩恵を享受することができない。例えば、ストレージ装置がメインフレームから１つのリード要求を受け付けた場合、そのリード要求に関するデータ転送処理は１つのコアプロセッサのみが担当することになるが、この場合、全体的な負荷が高く複数のコアプロセッサが並列動作している状況であれば性能改善効果を期待できる。しかし負荷が低く処理を行っていないコアプロセッサが存在する状況では、処理を担当するコアプロセッサに負荷が集中し、マルチコア化による効果を期待することができない。
【０００６】
またメインフレームでは、データの管理方式としてＣ部、Ｋ部、及びＤ部の３つのデータ部で１つのレコードを構成し、所定数のレコードで１つのトラックを構成する、いわゆるＣＫＤ（Count Key Data）フォーマットが広く採用されているが、現状ではこのフォーマットでの管理を前提としたコアプロセッサ間での効率的な負荷分散は行われていない。
【０００７】
本発明は、このような背景に鑑みてなされたもので、ストレージ装置の性能を向上することが可能なストレージ装置、及びストレージ装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成する為の本発明の１つは、ストレージ装置であって、
外部装置との間の通信を制御するプロセッサである通信制御プロセッサと、
前記外部装置から受信したＩ／Ｏ要求に従い記憶ドライブに対するＩ／Ｏ処理を行う複数のメインプロセッサと、
を備え、
前記記憶ドライブに格納するデータをＣＫＤフォーマットに従って管理し、
前記メインプロセッサの夫々の稼働率と、前記Ｉ／Ｏ処理の対象になっているＣＫＤフォーマットで管理されているデータのレコードを構成しているデータ部であるＣ部、Ｋ部、及びＤ部の夫々に関する情報と、前記メインプロセッサの夫々が現在処理中の前記Ｉ／Ｏ処理の負荷の指標であるＩ／Ｏ起動数と、に基づき、前記データ部を単位として、前記Ｉ／Ｏ処理を複数の前記メインプロセッサに振り分け、
前記Ｉ／Ｏ要求を受信した前記メインプロセッサ以外の他の前記メインプロセッサのいずれについても前記Ｉ／Ｏ起動数が０でなく、かつ、前記Ｉ／Ｏ要求を受信した前記メインプロセッサの前記Ｉ／Ｏ起動数が、前記他のメインプロセッサの前記Ｉ／Ｏ起動数のいずれに対してもそれ以下である場合は前記振り分けを行わないものである。
【０００９】
その他、本願が開示する課題、及びその解決方法は、発明を実施するための形態の欄の記載、及び図面の記載等により明らかにされる。
【発明の効果】
【００１０】
本発明によれば、ストレージ装置の性能を向上することができる。
【図面の簡単な説明】
【００１１】
【図１】情報処理システム１の構成を示す図である。
【図２】通信制御プロセッサ１１のハードウエアを示す図である。
【図３】メインプロセッサ１２のハードウエアを示す図である。
【図４】ＣＣＷ４１０の構成を示す図である。
【図５】ＣＣＷチェイン４２０についてのストレージ装置１０の基本動作を説明する図である。
【図６】ＣＣＷチェイン４２０についてのストレージ装置１０の基本動作を説明する図である。
【図７】ＣＫＤフォーマットの構成を示す図である。
【図８】ＣＫＤフォーマットのデータの管理単位（レコード、トラック）を説明する図である。
【図９】リードシーケンスＳ９００を説明する図である。
【図１０】ライトシーケンスＳ１０００を説明する図である。
【図１１】担当決定処理Ｓ９１３を説明するフローチャートである。
【図１２】担当選出処理Ｓ１１３１を説明するフローチャートである。
【図１３】稼働情報１３００の一例を示す図である。
【図１４】振り分け先選出処理Ｓ１２２２を説明するフローチャートである。
【図１５】振り分け処理Ｓ１２２３を説明するフローチャートである。
【図１６】割り当て処理Ｓ１５１３を説明するフローチャートである。
【図１７】振り分け情報１７００の一例を示す図である。
【図１８】リードデータ転送処理Ｓ１８００を説明するフローチャートである。
【図１９】エントリ１９００の一例を示す図である。
【発明を実施するための形態】
【００１２】
図１に一実施形態として説明する情報処理システム１の構成を示している。同図に示すように、情報処理システム１は、１つ以上のホスト装置３（外部装置）、及び１つ以上のストレージ装置１０を含む。
【００１３】
ホスト装置３は、例えば、銀行の自動預金預け払いサービスやインターネットのＷｅｂページ閲覧サービス等のサービスを提供する情報処理装置（コンピュータ）である。尚、本実施形態におけるホスト装置３は、メインフレーム（Mainframe）（汎用コンピュータ）であるものとする。
【００１４】
ホスト装置３とストレージ装置１０とは、通信ネットワーク５を介して互いに通信可能に接続している。通信ネットワーク５は、例えば、ＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network）、ＳＡＮ（Storage Area Network）、インターネット、公衆通信網、専用線などである。
【００１５】
通信ネットワーク５を介して行われる通信は、例えば、ＴＣＰ／ＩＰ、ｉＳＣＳＩ（internet Small Computer System Interface）、ファイバーチャネルプロトコル（Fibre Channel Protocol）、ＦＩＣＯＮ（Fibre Connection）（登録商標）、ＥＳＣＯＮ（Enterprise System Connection） （登録商標）、ＡＣＯＮＡＲＣ（Advanced Connection Architecture）（登録商標）、ＦＩＢＡＲＣ（Fibre Connection Architecture）（登録商標）などのプロトコルに従って行われる。
【００１６】
ホスト装置３は、ＣＰＵ３１（ＣＰＵ：Central Processing Unit）、メモリ３２（ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、ＮＶＲＡＭ（Non Volatile Random Access Memory））、記憶装置３３（例えばハードディスクドライブ（Hard Disk Drive）、半導体記憶装置（ＳＳＤ（Solid State Drive）））、キーボードやマウス等の入力装置３４、液晶モニタやプリンタ等の出力装置３５、及びＮＩＣ（Network Interface Card）やＨＢＡ（Host Bus Adapter）等の通信インタフェース（通信Ｉ／Ｆ３６と表記する。）を備える。
【００１７】
ホスト装置３は、ストレージ装置１０が提供する記憶領域にアクセスするにあたり、Ｉ／Ｏ要求（ライト要求、リード要求等）を含んだデータフレーム（以下、フレームと略記する。）をストレージ装置１０に送信する。このフレームは、例えば、ファイバーチャネルのフレーム（ＦＣフレーム（FC: Fibre Channel））である。
【００１８】
ストレージ装置１０は、ホスト３装置にデータの記憶領域を提供する装置であり、例えば、ディスクアレイ装置である。同図に示すように、ストレージ装置１０は、１つ以上の通信制御プロセッサ１１、１つ以上のメインプロセッサ１２、データ格納バッファ１４、共用メモリ１５、内部スイッチ１６、記憶装置１７、及び保守装置１８を備える。
【００１９】
通信制御プロセッサ１１、メインプロセッサ１２、データ格納バッファ１４、及び共用メモリ１５は、内部スイッチ１６を介して互いに通信可能に接続されている。また保守装置１８は、通信制御プロセッサ１１、メインプロセッサ１２、データ格納バッファ１４、共用メモリ１５、及び内部スイッチ１６と適宜な通信手段（例えば、ＬＡＮ、ＵＳＢ（Universal Serial Bus）、ＲＳ−２３２Ｃ等）を介して通信可能に接続されている。
【００２０】
図２に通信制御プロセッサ１１のハードウエアを示している。同図に示すように、通信制御プロセッサ１１は、中央処理装置１１１、メモリ１１２、外部通信インタフェース（ＮＩＣ、ＨＢＡ等）（以下、外部通信Ｉ／Ｆ１１３と称する。）、及び内部通信インタフェース（以下、内部通信Ｉ／Ｆ１１４と称する。）を備える。
【００２１】
中央処理装置１１１は、ＣＰＵ、ＭＰＵ、ＡＳＩＣ（Application Specific Integrated Circuit）などで構成されるプロセッサである。メモリ１１２は、ＲＯＭ、ＲＡＭ（ＮＶＲＡＭでもよい）を含む。
【００２２】
外部通信Ｉ／Ｆ１１３は、例えば、ＮＩＣ、ＨＢＡ等である。外部通信Ｉ／Ｆ１１３は、一つ以上の通信ポート１１５を備える。各通信ポート１１５には識別子（ポートＩＤ）（例えばＷＷＮ（World Wide Name））が付与されている。
【００２３】
内部通信Ｉ／Ｆ１１４は、内部スイッチ１６を介して所定の通信規格（例えば、ＰＣＩバス（PCT: Peripheral Component Interconnect））に従いストレージ装置１０が備える他の構成要素と通信する。
【００２４】
通信制御プロセッサ１１は、ホスト装置３から送られてくるＩ／Ｏ要求を受信する。通信制御プロセッサ１１は、ホスト装置３から受信したＩ／Ｏ要求についてのプロトコルレベルの解析、メインプロセッサ１２への処理の振り分け、ライト要求に附随するライトデータのデータ格納バッファ１４への格納、リードデータのホスト装置３への送信、ホスト装置３への応答などを行う。
【００２５】
メインプロセッサ１２は、通信制御プロセッサ１１から送られてくるＩ／Ｏ要求の内容に従い、後述する記憶ドライブ１７１に対してＩ／Ｏ処理（ライトデータの記憶ドライブ１７１への書き込み、リードデータの記憶ドライブ１７１からの読み出し）を行う。
【００２６】
図３にメインプロセッサ１２のハードウエアを示している。同図に示すように、メインプロセッサ１２は、コアプロセッサ１２１、ローカルメモリ１２２、データ転送装置１２３、及び内部通信インタフェース（以下、内部通信Ｉ／Ｆ１２４と称する。）を備える。
【００２７】
コアプロセッサ１２１は、ストレージ装置１０に実装されているマルチコアタイプのプロセッサ（以下、マルチコアプロセッサと称する。）が備えるコアプロセッサのうちの１つである。ローカルメモリ１２２は、ＲＯＭ及びＲＡＭ（ＮＶＲＡＭでもよい）を含む。
【００２８】
データ転送装置１２３は、ＤＭＡ（Direct Memory Access）等の高速データ転送チップを含む。データ転送装置１２３はコアプロセッサ１２１に組み込まれていることもある。
【００２９】
内部通信Ｉ／Ｆ１２４は、内部スイッチ１６を介して所定の通信規格（例えば、ＰＣＩバス、ＰＣＩ−Ｘバス等）に従いストレージ装置１０の他の構成要素と通信する。
【００３０】
メインプロセッサ１２は、通信制御プロセッサ１１が受信したＩ／Ｏ要求に応じて、通信制御プロセッサ１１とデータ格納バッファ１４との間のデータ転送、データ格納バッファ１４と記憶装置１７との間のデータ転送を行う。後者のデータ転送には、例えば、記憶装置１７に格納されているデータのデータ格納バッファ１４への転送（ステージング）、データ格納バッファ１４に格納されているデータの記憶装置１７への転送（デステージング）がある。
【００３１】
図１に示すデータ格納バッファ１４は、例えば、高速アクセスが可能なＲＡＭを用いて構成されている。データ格納バッファ１４には、ホスト装置３から受信したライトデータや記憶装置１７から読み出されたリードデータが格納される。
【００３２】
共用メモリ１５には、ストレージ装置１０の制御に用いられる各種の情報（例えば、ストレージ装置１０の構成情報や稼働情報（各メインプロセッサ１２の稼働率（％）（過去の一定期間における稼働率）、各メインプロセッサ１２が現在処理を行っているＩ／Ｏ要求の数（そのメインプロセッサ１２が現在実行中のＩ／Ｏ要求数と、そのメインプロセッサ１２の処理待ちキューに登録されているＩ／Ｏ要求数との和。以下、Ｉ／Ｏ起動数と称する。）が格納される。尚、ユーザは、共用メモリ１５に格納されている情報の全部又は一部に対して、保守装置１８を介して管理装置７からアクセスすることができる。
【００３３】
図１に示す内部スイッチ１６は、例えば、高速クロスバースイッチ（Cross Bar Switch）である。
【００３４】
図１に示す記憶装置１７は、物理的な記憶媒体である複数の記憶ドライブ１７１を備える。記憶ドライブ１７１は、例えば、ＳＡＳ（Serial Attached SCSI）、ＳＡＴＡ（Serial ATA）、ＦＣ（Fibre Channel）、ＰＡＴＡ（Parallel ATA）、ＳＣＳＩなどの形式のハードディスクドライブや、半導体記憶装置（ＳＳＤ）である。記憶装置１７は、ストレージ装置１０と同一の筐体に収容されていることもあるし、ストレージ装置１０が収容されている筐体とは異なる別の筐体に収容されていている場合もある。
【００３５】
尚、データ格納バッファ１４と記憶装置１７との間に、例えば、ホスト装置３への応答性能を向上する役割を果たすキャッシュメモリ（Cache Memory）を介在させてもよい。またデータ格納バッファ１４自体をキャッシュメモリとして機能させてもよい。
【００３６】
ストレージ装置１０は、例えば、記憶ドライブ１７１の記憶領域を所定の単位（以下、物理ページと称する。）で割り当てることにより構成される論理ユニット（ＬＵ：Logical Unit）を単位として、記憶ドライブ１７１の記憶領域をホスト装置３に提供する。
【００３７】
上記論理ユニットは、例えば、ホスト装置３においてデバイスファイル(Device File）やドライブレター（ドライブ名）に対応づけられる。また論理ユニットの夫々には、例えば、論理ユニットごとに固有の識別子である論理ユニット番号（ＬＵＮ（Logical Unit Number)が付与される。この場合、ホスト装置３は、ＬＵＮにより論理ユニットを特定する。このＬＵＮは、例えば、前述したＩ／Ｏ要求に設定される。
【００３８】
またストレージ装置１０は、例えば、記憶ドライブ１７１が提供する物理的な記憶領域（以下、物理記憶領域と称する）を、この物理記憶領域を用いて論理的に設定される記憶領域である論理デバイス（ＬＤＥＶ（Logical Device））を単位として認識する。その場合、各論理デバイスには、論理デバイスごとに固有の論理デバイス番号（ＬＤＥＶ番号）が識別子として付与される。
【００３９】
論理デバイスの記憶領域は、例えば、複数のハードウエアをＲＡＩＤ（Redundant Arrays of Inexpensive （or Independent) Disks）方式（ＲＡＩＤ０〜６の少なくともいずれか）で制御することによって構成されるＲＡＩＤグループの記憶領域として実現される。
【００４０】
保守装置１８（ＳＶＰ：Service Processor）は、例えば、パーソナルコンピュータを用いて構成される。保守装置１８は、ストレージ装置１０の各構成要素（少なくとも通信制御プロセッサ１１、メインプロセッサ１２、データ格納バッファ１４、共用メモリ１５、及び内部スイッチ１６を含む）の状態監視や構成設定、稼働情報の収集、稼働情報の共用メモリ１５への格納等を行う。また保守装置１８は管理装置７と通信し、管理装置７への情報提供や管理装置７からの指示に応じたストレージ装置１０の制御等を行う。
【００４１】
管理装置７は、例えば、パーソナルコンピュータを用いて構成される。管理装置７は、保守装置１８とＬＡＮ等を介して互いに通信可能に接続している。管理装置７は、ユーザが、ストレージ装置１０に対するジョブの実行指示、ストレージ装置１０の構成設定、ストレージ装置１０の動作設定などを行うためのユーザインタフェース（ＧＵＩ（Graphical User Interface）やＣＬＩ（Command Line Interface））を提供する。
【００４２】
＜ＣＣＷ＞
ホスト装置３からストレージ装置１０に送信されるＩ／Ｏ要求は、１つの命令コード（以下、ＣＣＷ（Channel Command Word）と称する。）を列化（チェイン（chain））した命令コード列（以下、ＣＣＷチェインと称する。）からなる。
【００４３】
このＣＣＷには、ライト要求を構成するライトコマンドを含むもの、リード要求を構成するリードコマンドを含むもの、テープの巻き戻し（リワインド（rewind））やディスクのアームの移動（シーク（seek））、サーチ（search）等を指示する制御系コマンドを含むもの、及びストレージ装置１０の構成要素に関する情報を要求するセンス系コマンドを含むもの、などがある。
【００４４】
図４にＣＣＷの構成を示している。同図に示すように、ＣＣＷ４１０は、命令コード４１１、アドレス４１２、フラグ４１３、及びデータ長４１４の各情報を含む。
【００４５】
このうち命令コード４１１には、コマンド（ライトコマンド、リードコマンド、リワインドコマンド、シークコマンド、サーチコマンド等）が設定される。
【００４６】
アドレス４１２には、命令コード４１１に設定されているコマンドの処理対象となるデータの所在が設定される。
【００４７】
フラグ４１３には、命令コード４１１に設定されているコマンドを補足する類の情報、アドレス４１２に設定されているデータの所在を示す情報を補足する情報などが設定される。
【００４８】
データ長４１４には、命令コード４１１に設定されたコマンドによって処理されるデータ（リードデータ、ライトデータ等）のデータ長が設定される。
【００４９】
＜基本動作＞
ストレージ装置１０の通信制御プロセッサ１１は、ホスト装置３からＣＣＷチェインを受信すると、プロトコルの解析を行った後、それに含まれているＣＣＷ４１０をメインプロセッサ１２に送信する。尚、送信されるＣＣＷ４１０が、例えば、ライトコマンドや制御系コマンドを含む場合はそのＣＣＷ４１０にライトデータなどが附随するが、この場合、通信制御プロセッサ１１は、ＣＣＷ４１０に附随するデータをデータ格納バッファ１４に格納し、その格納先のアドレスを上記ＣＣＷ４１０とともにメインプロセッサ１２に通知する。
【００５０】
メインプロセッサ１２は、通信制御プロセッサ１１から送られてくるＣＣＷ４１０に従って処理を行う。
【００５１】
例えば、ＣＣＷ４１０がライトコマンドを含む場合、メインプロセッサ１２は、データ格納バッファ１４に格納されているライトデータを記憶装置１７に書き込む。
【００５２】
また例えば、ＣＣＷ４１０がリードコマンドを含む場合、メインプロセッサ１２は、記憶装置１７からリードデータを読み出し、これをデータ格納バッファ１４に格納する。尚、データ格納バッファ１４に格納されたリードデータは、その後、通信制御プロセッサ１１によってホスト装置３に送信される。
【００５３】
図５及び図６にホスト装置３から受け付けたＣＣＷチェインについてのストレージ装置１０の基本動作を示している。これらの図は、ストレージ装置１０が、「ＣＣＷ１」及び「ＣＣＷ２」という２つのＣＣＷ４１０を含んだＣＣＷチェイン４２０をホスト装置３から受信した際のストレージ装置１０の基本動作を示している。
【００５４】
尚、以下の説明において、「ＣＣＷ１」の命令コード４１１には、「データ１」というライトデータを書き込む「ライトコマンド」が設定されているものとする。また「ＣＣＷ２」の命令コード４１１には、「データ２」というリードデータの読み出しを指示する「リードコマンド」が設定されているものとする。
【００５５】
図５に示すように、通信制御プロセッサ１１は、ＣＣＷチェイン４２０を受信すると（Ｓ５１１）、当該ＣＣＷチェイン４２０に関する情報をメインプロセッサ１２に送信する。
【００５６】
例えば、「ＣＣＷ１」にはライトコマンドが設定されているので、通信制御プロセッサ１１は、「ＣＣＷ１」の内容をメインプロセッサ１２に送信するとともに（Ｓ５１２）、これに附随するライトデータ「データ１」をデータ格納バッファ１４に格納する（Ｓ５１３）。
【００５７】
また例えば、「ＣＣＷ２」にはリードコマンドが設定されているので、通信制御プロセッサ１１は、「ＣＣＷ２」の内容をメインプロセッサ１２に送信する（Ｓ５１２）。
【００５８】
続いて、図６に示すように、メインプロセッサ１２は、まず「ＣＣＷ１」の内容に従い、データ格納バッファ１４に格納されているライトデータ「データ１」を記憶ドライブ１７１に格納する（Ｓ６１１）。
【００５９】
またメインプロセッサ１２は、「ＣＣＷ２」の内容に従い、リードデータ「データ２」を記憶ドライブ１７１から読み出し、これをデータ格納バッファ１４に格納（転送）する（Ｓ６１２）。
【００６０】
その後、通信制御プロセッサ１１は、データ格納バッファ１４に格納されているリードデータやＩ／Ｏ要求に対する完了通知をホスト装置３に送信する（Ｓ６１３）。
【００６１】
＜ＣＫＤフォーマット＞
本実施形態のストレージ装置１０は、メインフレームであるホスト装置３から送られてくるデータをＣＫＤフォーマット（CKD: Count Key Data format）に従って管理している。
【００６２】
図７にＣＫＤフォーマットの構成を示す。同図に示すように、ＣＫＤフォーマットは、Ｃ部７１１（Count部）、Ｋ部７１２（Key部）、及びＤ部７１３（Data部）の３つ情報（以下、これら各部のことをデータ部とも称する。）を含む。
【００６３】
このうちＣ部７１１には、当該データの所在（シリンダ番号、ヘッド番号、レコード番号（ＣＣＨＨＲ））、Ｋ部７１２のデータ長、及びＤ部７１３のデータ長などが格納される。
【００６４】
Ｋ部７１２には、例えば、ホスト装置３において動作するアプリケーションに関連する情報（例えば検索キーに関する情報）が格納される。
【００６５】
Ｄ部７１３には、ライトデータ又はリードデータの実体が格納される。
【００６６】
尚、Ｃ部７１１は固定長（例えば８Ｂｙｔｅ)形式のデータであり、一方、Ｋ部７１２並びにＤ部７１３は、いずれも可変長形式のデータである。
【００６７】
図８に示すように、ＣＫＤフォーマットのデータは、レコード及びトラックを単位として管理される。
【００６８】
即ち、ＣＫＤフォーマットの１つのデータ（１つのＣ部７１１、１つのＫ部７１２、及び１つのＤ部７１３の組み合わせからなるデータ（但し、Ｋ部７１２及びＤ部７１３はＣＫＤフォーマットに含まれないこともある））は、１つのレコード８１１として管理される。また所定数のレコード８１１の集合は、ヘッダ部８１０を含む１つのトラック８１２として管理される。尚、上記所定数は、例えば、ストレージ装置１０の構成や記憶ドライブ１７１の種類に応じて適切な値に設定される。
【００６９】
＜メインプロセッサの主従関係＞
本実施形態のストレージ装置１０において、メインプロセッサ１２は、その役割から、マスタプロセッサもしくはスレーブプロセッサに分類される。
【００７０】
マスタプロセッサは、通信制御プロセッサ１１から送られてくるＣＣＷ４１０を受信すると、その内容に応じて生成される複数のコマンド（以下、サブコマンドと称する）を複数のスレーブプロセッサに送信する。
【００７１】
スレーブプロセッサは、マスタプロセッサから送られてくるサブコマンドに応じて処理を行い、その応答や処理の結果をマスタプロセッサもしくは通信制御プロセッサ１１に返す。
【００７２】
尚、メインプロセッサ１２の夫々が現在、マスタプロセッサもしくはスレーブプロセッサのいずれであるのかを示す情報は、例えば、共用メモリ１５、通信制御プロセッサ１１のメモリ１１２、メインプロセッサ１２のローカルメモリ１２２などに格納されて管理されている。通信制御プロセッサ１１やメインプロセッサ１２は、各メインプロセッサ１２がマスタプロセッサもしくはスレーブプロセッサのいずれであるのかを知ることができる。
【００７３】
メインプロセッサ１２のうちのいずれをマスタプロセッサとし、いずれをスレーブプロセッサとするかは、通信制御プロセッサ１１、メインプロセッサ１２、保守装置１８（管理装置７）などによって、静的（例えば、担当する記憶ドライブ１７１の属性や種類に応じて）、もしくは、動的（例えばストレージ装置１０の稼働状態に基づく負荷分散の観点から）に決定される。
【００７４】
＜リードシーケンス＞
図９は、ストレージ装置１０がリードコマンドを含んだＣＣＷ４１０を受信した際に情報処理システム１において行われるシーケンス（以下、リードシーケンスＳ９００と称する。）である。以下、同図とともにリードシーケンスＳ９００について説明する。
【００７５】
通信制御プロセッサ１１は、ホスト装置３からリードコマンドを含んだＣＣＷ４１０を受信すると（Ｓ９１１）、その内容をマスタプロセッサのローカルメモリ１２２に格納する（Ｓ９１２）。
【００７６】
マスタプロセッサは、ローカルメモリ１２２に格納されたＣＣＷ４１０について、その処理を担当するメインプロセッサ１２を決定する処理（以下、担当決定処理Ｓ９１３と称する。）を行う。尚、担当決定処理Ｓ９１３の詳細については後述する。
【００７７】
マスタプロセッサは、担当決定処理Ｓ９１３が終了すると、担当決定処理Ｓ９１３の戻り値に基づき、当該リードコマンドの処理の振り分けに関する情報（以下、振り分け情報（図１７）と称する）を生成し、これを通信制御プロセッサ１１に送信する（Ｓ９１４）。尚、振り分け情報の詳細については後述する。
【００７８】
またマスタプロセッサは、担当決定処理Ｓ９１３の戻り値が、スレーブプロセッサにリードコマンドの処理を担当させる旨の内容であった場合、当該処理を担当させるスレーブプロセッサに対し、そのスレーブプロセッサに担当させる処理の実行を指示するサブコマンドを送信する（Ｓ９１５，Ｓ９１６）。尚、図９には、担当決定処理Ｓ９１３の戻り値が「スレーブプロセッサＡ」と「スレーブプロセッサＣ」に当該処理を担当させる内容であった場合を示してある。
【００７９】
スレーブプロセッサは、マスタプロセッサから送られてきたサブコマンドに応じて、自身が転送を担当するリードデータを記憶ドライブ１７１から読み出し、読み出したリードデータをデータ格納バッファ１４に格納する。またスレーブプロセッサは、リードデータをデータ格納バッファ１４に格納した旨の通知（以下、リードデータ格納通知と称する。）を通信制御プロセッサ１１に送信する（Ｓ９１７，Ｓ９１９）。
【００８０】
一方、通信制御プロセッサ１１は、Ｓ９１４で受信した振り分け情報に基づき、リードコマンドに対してホスト装置３に応答すべきリードデータについてのデータ格納バッファ１４への格納状況をリアルタイムに監視する。そしてホスト装置３への転送単位分のリードデータがデータ格納バッファ１４に出揃った事を確認すると、通信制御プロセッサ１１は、データ格納バッファ１４に格納されている転送単位分のリードデータをホスト装置３に送信する（Ｓ９２０）。尚、このときの通信制御プロセッサ１１の処理の詳細は後述（図１８）する。
【００８１】
このように、スレーブプロセッサは、マスタプロセッサを介すことなく直接、リードデータ格納通知を通信制御プロセッサ１１に送信するので、通信制御プロセッサ１１はホスト装置３に対して早期にリードデータを提供することができる。
【００８２】
図９に戻り、スレーブプロセッサは、サブコマンドの処理が終了した旨の通知をマスタプロセッサに送信する（Ｓ９１８，Ｓ９２１）。
【００８３】
マスタプロセッサは、リードコマンドの処理を担当させた全てのスレーブプロセッサから、サブコマンドの処理が終了した旨の通知（Ｓ９１８，Ｓ９２１）を受信すると、その旨を通信制御プロセッサ１１に送信する（Ｓ９２２）。
【００８４】
通信制御プロセッサ１１は、リードコマンドの処理が終了した旨の通知をホスト装置３に送信する（Ｓ９２３）。また通信制御プロセッサ１１は、上記通知に対して送られてくる応答をホスト装置３から受信する（Ｓ９２４）。
【００８５】
また以上に説明したリードシーケンスＳ９００では、２つのスレーブプロセッサ（スレーブプロセッサＡ、スレーブプロセッサＣ）のみがリードコマンドの処理を担当する場合であるが、スレーブプロセッサとともにマスタプロセッサにリードコマンドの処理の一部を担当させることも可能である。その場合、マスタプロセッサは、自身が処理を担当するリードデータをデータ格納バッファ１４に格納した際、その格納通知（リードデータ格納通知）を通信制御プロセッサ１１に通知する。また通信制御プロセッサ１１は、各スレーブプロセッサから送られてくるリードデータ格納通知とマスタプロセッサから送られてくるリードデータ格納通知とに基づき、ホスト装置３へのリードデータの転送を行う。またマスタプロセッサは、各スレーブプロセッサからの終了通知（Ｓ９１８，Ｓ９２１）を受信し、かつ、リードコマンドの処理のうち自身が担当する処理が完了した場合に、通信制御プロセッサ１１に終了通知（Ｓ９２２）を送信する。
【００８６】
＜ライトシーケンス＞
図１０は、ストレージ装置１０がライトコマンドを含んだＣＣＷ４１０を受信した際に情報処理システム１において行われるシーケンス（以下、ライトシーケンスＳ１０００と称する。）である。以下、同図とともにライトシーケンスＳ１０００について説明する。
【００８７】
通信制御プロセッサ１１は、ホスト装置３からライトコマンドを含んだＣＣＷ４１０を受信すると（Ｓ１０１１）、その内容をマスタプロセッサのローカルメモリ１２２に格納する（Ｓ１０１２）。また上記ＣＣＷ４１０に附随するライトデータをデータ格納バッファ１４に格納する（Ｓ１０１２）。
【００８８】
マスタプロセッサは、ローカルメモリ１２２に格納されたＣＣＷ４１０について、その処理を担当するメインプロセッサ１２を決定する処理（以下、担当決定処理Ｓ１０１３と称する。）を行う。尚、担当決定処理Ｓ１０１３の詳細は後述する。
【００８９】
マスタプロセッサは、担当決定処理Ｓ１０１３の戻り値が、スレーブプロセッサにライトコマンドの処理を担当させる内容であった場合、当該処理を担当させるスレーブプロセッサに対し、そのスレーブプロセッサに担当させる処理の実行を指示するサブコマンドを送信する（Ｓ１０１４，Ｓ１０１５）。尚、図１０には、担当決定処理Ｓ１０１３の結果が「スレーブプロセッサＡ」と「スレーブプロセッサＣ」のみに当該処理を担当させる内容であった場合を示してある。
【００９０】
スレーブプロセッサは、マスタプロセッサから送られてきたサブコマンドに応じて、データ格納バッファ１４に格納されているライトデータを記憶ドライブ１７１に格納する（Ｓ１０１４，Ｓ１０１５）。
【００９１】
またスレーブプロセッサは、ライトデータを記憶ドライブ１７１に格納した旨の通知（以下、ライトデータ格納通知と称する。）をマスタプロセッサに送信する（Ｓ１０１６，Ｓ１０１７）。
【００９２】
マスタプロセッサは、ライトコマンドの処理を担当した全てのスレーブプロセッサ１２からライトデータ格納通知を受信したことを確認すると、その旨を通信制御プロセッサ１１に送信する（Ｓ１０１８）。
【００９３】
通信制御プロセッサ１１は、上記通知を受信すると、ライトコマンドの処理が終了した旨の通知をホスト装置３に送信し（Ｓ１０１９）、その応答をホスト装置３から受信する（Ｓ１０２０）。
【００９４】
尚、以上に説明したライトシーケンスＳ１０００では、ライトコマンドの処理を２つのスレーブプロセッサ（スレーブプロセッサＡ、スレーブプロセッサＣ）のみが処理を担当する場合であるが、マスタプロセッサに、スレーブプロセッサとともにライトコマンドの処理の一部を担当するようにすることも可能である。その場合、マスタプロセッサは、自身が処理を担当するライトデータを記憶ドライブ１７１に格納する。またマスタプロセッサは、各スレーブプロセッサからのライトデータ格納通知（Ｓ１０１６，Ｓ１０１７）を受信し、かつ、ライトコマンドの処理のうち自身が担当する処理が完了した場合に、通信制御プロセッサ１１に終了通知（Ｓ１０１８）を送信する。
【００９５】
＜担当決定処理＞
図１１は、図９のリードシーケンスＳ９００における担当決定処理Ｓ９１３を説明するフローチャートである。尚、図１０のライトシーケンスＳ１０００における担当決定処理Ｓ１０１３の内容は担当決定処理Ｓ９１３と同様である。本処理の主体はマスタプロセッサである。以下、同図とともに説明する。
【００９６】
まずマスタプロセッサは、ＣＣＷ４１０の命令コード４１１に設定されているコマンド（リードシーケンスＳ９００の場合はリードコマンド。ライトシーケンスＳ１０００の場合はライトコマンド。以下同様。）の処理対象になっているデータが、複数のトラックに跨がって管理されているデータであるか否かを判断する（Ｓ１１１１）。尚、マスタプロセッサは、この判断を、例えば、ＣＣＷ４１０の命令コード４１１に設定されているコマンドの種類に基づき行う。
【００９７】
コマンドの処理対象が複数トラックに跨がって管理されているデータである場合（Ｓ１１１１：ＹＥＳ）、マスタプロセッサは、当該コマンドの処理対象になっているデータのデータ部の総数を取得する（Ｓ１１２１）。尚、マスタプロセッサは、このデータ部の総数を、例えば、ＣＣＷ４１０やＣＣＷチェイン４２０に含まれている情報（コマンドの処理対象になっているデータのレコード数、コマンドの処理対象になっているデータのトラック数）から取得する。その後はＳ１１３１に進む。
【００９８】
コマンドの処理対象になっているデータが複数トラックに跨って管理されているデータでない場合（即ち、単数のトラックで構成されている場合）（Ｓ１１１１：ＮＯ）、続いてマスタプロセッサは、コマンドの処理対象が複数のレコードに跨がって管理されているデータであるか否かを判断する（Ｓ１１１２）。尚、マスタプロセッサは、この判断を、例えば、ＣＣＷ４１０に設定されている命令コード４１１の種類に基づき行う。
【００９９】
コマンドの処理対象になっているデータが複数のレコードに跨がって管理されているデータである場合（Ｓ１１１２：ＹＥＳ）、マスタプロセッサは、当該コマンドの処理対象になっているデータのデータ部の総数を取得する（Ｓ１１２１）。尚、マスタプロセッサは、データ部の総数を、例えば、ＣＣＷ４１０やＣＣＷチェイン４２０に含まれている情報（コマンドの処理対象になっているデータのレコード数）から取得する。その後はＳ１１３１に進む。
【０１００】
コマンドの処理対象になっているデータが複数のレコードに跨って管理されているデータでない場合（即ち、単数のレコードで構成されている場合）（Ｓ１１１２：ＮＯ）、続いてマスタプロセッサは、コマンドの処理対象になっているデータが複数のデータ部で構成されているか否かを判断する（Ｓ１１１３）。この判断は、例えば、ＣＣＷ４１０に基づき行う。
【０１０１】
コマンドの処理対象になっているデータが複数のデータ部で構成されている場合（Ｓ１１１３：ＹＥＳ）、マスタプロセッサは、続いてコマンドの処理対象になっているデータがＤ部１４１３を含むか否かを判断する（Ｓ１１２５）。そしてコマンドの処理対象になっているデータがＤ部１４１３を含む場合（Ｓ１１２５：ＹＥＳ）、マスタプロセッサは、ＣＣＷ４１０からコマンドの処理対象になっているデータのデータ部の総数（＝２又は３）を取得する（Ｓ１１２６）。その後はＳ１１３１に進む。
【０１０２】
一方、Ｓ１１１３の判断において、コマンドの処理対象になっているデータが単数のデータ部で構成されている場合（Ｓ１１１３：ＮＯ）、マスタプロセッサは、当該担当決定処理Ｓ９１３の戻り値に「振り分け無し」を設定する（Ｓ１１４１）。その後、担当決定処理Ｓ９１３は終了する。
【０１０３】
尚、戻り値が「振り分け無し」である場合、リードシーケンスＳ９００もしくはライトシーケンスＳ１０００においてマスタプロセッサからスレーブプロセッサへのサブコマンドの送信は行われず、ホスト装置３から送られてきたコマンドの処理は原則としてマスタプロセッサが担当することになる。
【０１０４】
Ｓ１１２５の判断において、コマンドの処理対象になっているデータがＤ部１４１３を含まない場合には（Ｓ１１２５：ＮＯ）、Ｓ１１４１に進む。尚、このようにコマンドの処理対象になっているデータがＤ部１４１３を含まない場合、担当決定処理Ｓ９１３の戻り値に「振り分け無し」を設定する（Ｓ１１４１）のは、データ部が２つ（Ｃ部１４１１、Ｋ部１４１２）のみである（Ｄ部１４１３を含まない）場合は通常はメインプロセッサ１２の処理負荷が少なく、処理を振り分けることによる効果が期待できないからである。
【０１０５】
Ｓ１１３１では、マスタプロセッサは、処理の担当させるスレーブプロセッサを選出する処理（以下、担当選出処理Ｓ１１３１と称する。）を行う。担当選出処理Ｓ１１３１の詳細については後述する。
【０１０６】
担当選出処理Ｓ１１３１の終了後、マスタプロセッサは、戻り値に担当選出処理Ｓ１１３１の結果を設定する（Ｓ１１３２）。その後、処理はリードシーケンスＳ９００もしくはライトシーケンスＳ１０００に戻る。
【０１０７】
＜担当選出処理Ｓ１１３１＞
図１２は、図１１の担当選出処理Ｓ１１３１の詳細を説明するフローチャートである。以下、同図とともに説明する。
【０１０８】
マスタプロセッサは、まず共用メモリ１５に格納されている稼働情報から、処理の振り分け先として選出することが可能なスレーブプロセッサ（以下、選出可能スレーブプロセッサと称する。）のＩ／Ｏ起動数を取得する（Ｓ１２１１）。尚、マスタプロセッサとそのマスタプロセッサの選出可能スレーブプロセッサとの関係を示す情報は、例えば、共用メモリ１５に格納されて管理されている。マスタプロセッサは、共用メモリ１５に随時アクセスすることにより、選出可能スレーブプロセッサがいずれのメインプロセッサ１２であるのかを取得する。
【０１０９】
図１３に稼働情報の一例を示している。同図に示すように、稼働情報１３００には、各メインプロセッサ１２の識別子１３１１（メインプロセッサＩＤ）に対応づけて、稼働率（％）１３１２、及びＩ／Ｏ起動数１３１３が管理されている。
【０１１０】
図１２に戻り、続いてマスタプロセッサは、選出可能スレーブプロセッサのうち、Ｉ／Ｏ起動数が「０」（即ち現在処理を行っていない）のスレーブプロセッサが存在するか否かを判断する（Ｓ１２１２）。Ｉ／Ｏ起動数が「０」の選出可能スレーブプロセッサが存在する場合（Ｓ１２１２：ＹＥＳ）、処理はＳ１２２１に進む。またＩ／Ｏ起動数が「０」の選出可能スレーブプロセッサが存在しない場合（Ｓ１２１２：ＮＯ）、処理はＳ１２１３に進む。
【０１１１】
Ｓ１２２１では、マスタプロセッサは、共用メモリ１５から、選出可能スレーブプロセッサの夫々の最新の稼働率を取得する（Ｓ１２２１）。そしてマスタプロセッサは、取得した稼働率を用いて、振り分け先選出処理Ｓ１２２２及び振り分け処理Ｓ１２２３を行い、振り分け処理Ｓ１２２３の結果を当該担当選出処理Ｓ１１３１の戻り値とする（Ｓ１２２４）。その後、担当選出処理Ｓ１１３１は終了する。振り分け先選出処理Ｓ１２２２及び振り分け処理Ｓ１２２３の詳細については後述する。
【０１１２】
一方、Ｓ１２１３では、マスタプロセッサは、自身のＩ／Ｏ起動数と選出可能スレーブプロセッサの夫々のＩ／Ｏ起動数とを比較する。自身のＩ／Ｏ起動数が選出可能スレーブプロセッサの夫々のＩ／Ｏ起動数よりも大きい場合は（Ｓ１２１３：ＮＯ）、Ｓ１２２１に進む。
【０１１３】
自身のＩ／Ｏ起動数がいずれの選出可能スレーブプロセッサのＩ／Ｏ起動数と比較してもそれ以下である場合（Ｓ１２１３：ＹＥＳ）、マスタプロセッサは、戻り値に「振り分け無し」を設定する（Ｓ１２１４）。その後、担当選出処理Ｓ１１３１は終了する。
【０１１４】
尚、このように自身のＩ／Ｏ起動数がいずれの選出可能スレーブプロセッサのＩ／Ｏ起動数と比較してもそれ以下である場合に戻り値に「振り分け無し」を設定する（即ちマスタプロセッサのみがコマンドに対する処理を行うように設定する）のは、現時点での処理負荷の低いマスタプロセッサ自身がＩ／Ｏ処理を行うことで適切に負荷分散が図られてストレージ装置１０の性能向上を期待することができるからである。
【０１１５】
＜振り分け先選出処理Ｓ１２２２＞
図１４は、図１２の振り分け先選出処理Ｓ１２２２の詳細を説明するフローチャートである。
【０１１６】
まずマスタプロセッサは、選出可能スレーブプロセッサのうち、Ｉ／Ｏ起動数が「０」のスレーブプロセッサが存在するか否かを判断する（Ｓ１４１１）。尚、Ｉ／Ｏ起動数が「０」のスレーブプロセッサが存在する場合は、選出可能スレーブプロセッサ全体の負荷が比較的低い状況である。
【０１１７】
Ｉ／Ｏ起動数が「０」の選出可能スレーブプロセッサが存在する場合（Ｓ１４１１：ＹＥＳ）、マスタプロセッサは、稼働率の低いものほど優先されるように各選出可能スレーブプロセッサを順位付けする（Ｓ１４２１）。このようにマスタプロセッサは、稼働率の低いものほど優先されるように各選出可能スレーブプロセッサを順位付けするので、稼働率の低いスレーブプロセッサに優先的にＩ／Ｏ処理を割り当てることができ、これによりメインプロセッサ１２間の適切な負荷分散を図ることができる。
【０１１８】
一方、Ｉ／Ｏ起動数が「０」のスレーブプロセッサが存在しない場合（Ｓ１４１１：ＮＯ）、マスタプロセッサは、Ｉ／Ｏ起動数の少ないものほど優先されるように各選出可能スレーブプロセッサを順位付けする（Ｓ１４１２）。その後はＳ１４１３に進む。尚、このように、マスタプロセッサは、Ｉ／Ｏ起動数の少ないものほど優先されるように各選出可能スレーブプロセッサを順位付けするので、現在の処理負荷の低いスレーブプロセッサに優先的にＩ／Ｏ処理を割り当てることができ、これによりメインプロセッサ１２間の適切な負荷分散を図ることができる。
【０１１９】
Ｓ１４１３では、マスタプロセッサは、コマンドの処理対象になっているデータのデータ部の数（図１１のＳ１１２１又はＳ１１２６で取得したデータ部の総数）と、選出可能スレーブプロセッサの総数とを比較する。
【０１２０】
上記比較の結果、コマンドの処理対象になっているデータのデータ部の総数が選出可能スレーブプロセッサの総数以上である場合（Ｓ１４１３：ＹＥＳ）、マスタプロセッサは、自身の選出可能スレーブプロセッサの全てを振り分け先として選出する（Ｓ１４２２）。その後、当該振り分け先選出処理Ｓ１２２２は終了する。
【０１２１】
一方、上記比較の結果、コマンドの処理対象になっているデータのデータ部の総数が選出可能スレーブプロセッサの総数よりも小さい場合（Ｓ１４１３：ＮＯ）、マスタプロセッサは、優先順位の高いものから順に処理対象のデータ部の数分、選出可能スレーブプロセッサを振り分け先として選出する（Ｓ１４１４）。その後、当該振り分け先選出処理Ｓ１２２２は終了する。
【０１２２】
＜振り分け処理Ｓ１２２３＞
図１５は、図１２の振り分け処理Ｓ１２２３の詳細を説明するフローチャートである。
【０１２３】
まずマスタプロセッサは、コマンドの処理対象になっているデータの各レコードのＣ部１４１１の内容（シリンダ番号／ヘッド番号／レコード番号（ＣＣＨＨＲ）、Ｋ部１４１２のデータ長（ＫＬ）、Ｄ部１４１３のデータ長（ＤＬ）を取得する（Ｓ１５１１）。
【０１２４】
次いでマスタプロセッサは、コマンドがＣ部１４１１のデータのホスト装置３への転送を要求するコマンドである場合、処理対象になっているデータのデータ部の総数（図１１のＳ１１２１又はＳ１１２６で取得したデータ部の数）からＣ部１４１１の数を減算する（Ｓ１５１２）。このように、コマンドがＣ部１４１１についてのホスト装置３への転送を要求するコマンドである場合に処理対象のデータ部の総数からＣ部１４１１の数を減算するのは、スレーブプロセッサに処理を行わせる場合でもＣ部１４１１については必ずマスタプロセッサが読み出す必要があり（スレーブプロセッサへのサブコマンドの生成に際しＣ部１４１１の情報が必要となる）、その場合はＣ部１４１１についての処理を振り分けの対象とすることが好ましくない（スレーブプロセッサに担当させても負荷分散の効果が薄い）からである。
【０１２５】
続いてマスタプロセッサは、各データ部の処理を担当させるスレーブプロセッサを決定する処理（以下、割り当て処理Ｓ１５１３と称する。）を行う。割り当て処理Ｓ１５１３の詳細は後述する。
【０１２６】
割り当て処理Ｓ１５１３が終了すると、マスタプロセッサは、割り当て処理Ｓ１５１３の戻り値（各選出可能スレーブプロセッサへのデータ部の割り当て比率）に基づき振り分け情報を生成する。その後、当該振り分け処理Ｓ１２２３は終了する。
【０１２７】
＜割り当て比率決定処理Ｓ１５１３＞
図１６は図１５の振り分け処理Ｓ１２２３における割り当て処理Ｓ１５１３の詳細を説明するフローチャートである。
【０１２８】
まずマスタプロセッサは、コマンドの処理対象になっているデータのトラック数と、選出可能スレーブプロセッサの総数とを比較する（Ｓ１６１１）。
【０１２９】
上記比較の結果、コマンドの処理対象になっているデータのトラック数が選出可能スレーブプロセッサの総数以上である場合（Ｓ１６１１：ＹＥＳ）、マスタプロセッサは、処理対象のデータ部の振り分け単位を、コマンドの処理対象になっているデータのデータ部の総数を処理対象のトラック数で除した数とする（即ち、処理対象のデータ部の総数をトラック数の数に分割し、分割した単位でデータ部のＩ／Ｏ処理を各選出可能スレーブプロセッサに割り当てる）（Ｓ１６１３）。その後、処理はＳ１６２１に進む。
【０１３０】
一方、上記比較の結果、コマンドの処理対象になっているデータのトラック数が選出可能スレーブプロセッサの総数未満である場合（Ｓ１６１１：ＮＯ）、マスタプロセッサは、続いてコマンドの処理対象になっているデータのレコード数と、選出可能スレーブプロセッサの総数とを比較する（Ｓ１６１２）。
【０１３１】
比較の結果、コマンドの処理対象になっているデータのレコード数が選出可能スレーブプロセッサの総数以上である場合（Ｓ１６１２：ＹＥＳ）、マスタプロセッサは、処理対象になっているデータのデータ部の振り分け単位を、処理対象になっているデータのデータ部の総数を処理対象のレコード数で除した数とする（即ち、処理対象になっているデータ部の総数をレコード数の数に分割し、分割した単位でデータ部のＩ／Ｏ処理を各選出可能スレーブプロセッサに割り当てる）（Ｓ１６１４）。その後、処理はＳ１６２１に進む。
【０１３２】
また上記比較の結果、コマンドの処理対象になっているデータのレコード数が選出可能スレーブプロセッサの総数未満である場合（Ｓ１６１２：ＮＯ）、マスタプロセッサは、処理対象のデータ部の振り分け単位を、処理対象のデータ部とする（即ち、データ部のＩ／Ｏ処理を、データ部単位で各選出可能スレーブプロセッサに割り当てる。）（Ｓ１６１５）。その後はＳ１６２１に進む。
【０１３３】
具体例を示す。例えば、データ部の数が４２、レコード数が２１、トラック数が２、選出可能スレーブプロセッサの総数が４である場合、トラック数＜選出可能スレーブプロセッサの総数（Ｓ１６１１：ＮＯ）、レコード数≧選出可能スレーブプロセッサの総数となるので（Ｓ１６１２：ＹＥＳ）、この場合の分割数はレコード数、即ち２１となり、データ部の数４２を２１で除した商（＝２）の数のデータ部（２データ部）を単位として、データ部のＩ／Ｏ処理を各選出可能スレーブプロセッサに割り当てる。
【０１３４】
このように、マスタプロセッサは、処理対象のトラック数が選出可能スレーブプロセッサの総数以上である場合はトラック数に分割した単位で、処理対象のレコード数が選出可能スレーブプロセッサの総数以上である場合はレコード数に分割した単位で、処理対象のデータ部を選出可能スレーブプロセッサに割り当てるので、処理対象のデータの数に応じて、データ部を効率よく適切に選出可能スレーブプロセッサに割り当てることができる。
【０１３５】
Ｓ１６２１では、マスタプロセッサは、各選出可能スレーブプロセッサの夫々の稼働率に基づき、Ｓ１６１１〜Ｓ１６１５の処理で決定した分割数で分割した単位で、データ部を各選出可能スレーブプロセッサに割り当てる。その後、割り当て比率決定処理Ｓ１５１３は終了する。
【０１３６】
具体例を示す。例えば、選出可能スレーブプロセッサの総数が４（以下、各スレーブプロセッサを＃１〜＃４として区別する）であり、各スレーブプロセッサ＃１〜＃４の稼働率が順に５％、１５％、１０％、１０％である場合、マスタプロセッサは、稼働率の逆比（６：２：３：３）の比率になるように、データ部のＩ／Ｏ処理を各選出可能スレーブプロセッサに割り当てる。
【０１３７】
このようにマスタプロセッサは稼働率が低いスレーブプロセッサほど多くのデータ部を割り当てるので、各スレーブプロセッサの負荷を均等化することができ、適切な負荷分散を図ることができる。
【０１３８】
＜振り分け情報＞
ところで、図９に示したリードシーケンスＳ９００においては、担当決定処理Ｓ９１３が終了した後、マスタプロセッサが通信制御プロセッサ１１に対して振り分け情報を通知しているが（Ｓ９１４）、この振り分け情報は、担当決定処理Ｓ９１３の戻り値に基づきマスタプロセッサが生成し、通信制御プロセッサ１１に通知する。そして通信制御プロセッサ１１は、マスタプロセッサから通知された振り分け情報に基づきリードコマンドに対するリードデータを編成し、編成したリードデータを随時ホスト装置３に送信する。
【０１３９】
図１７に振り分け情報の一例を示している。振り分け情報１７００は、リードデータの処理を担当するメインプロセッサ１２毎に生成される。
【０１４０】
リード部位１７１１には、その振り分け情報１７００が、レコードに関するものであるのか、トラックに関するものであるのかを示す情報が設定される。同図は振り分け情報１７００がレコードについて生成されたものである場合である。
【０１４１】
リード数１７１２には、その振り分け情報１７００に管理されている情報がいくつのレコードもしくはトラックについてのものであるのかを示す情報が設定される。同図は振り分け情報が２つのレコードについてのものである場合である。
【０１４２】
ＣＣＷ番号１７１３には、その振り分け情報１７００に管理されている情報がどのＣＣＷ４１０に関するものであるのかを示す情報（以下、ＣＣＷ番号と称する。）が設定される。同図はＣＣＷ番号が「ｘ０３００」であるＣＣＷ４１０に関するものである場合である。
【０１４３】
シーケンス番号１７１４には、ＣＣＷ番号１７１３に設定されているＣＣＷ４１０のコマンドを処理するために生成されるシーケンスごとに付与される識別子（以下、シーケンス番号と称する。）が設定される。同図に示す振り分け情報１７００はシーケンス番号が「１」のシーケンスについてのものである。
【０１４４】
格納先アドレス１７１５には、シーケンス番号１７１４に設定されているシーケンスによって記憶ドライブ１７１から読み出されてデータ格納バッファ１４に格納されるリードデータの、データ格納バッファ１４の格納位置を示す情報（アドレス）が設定される。同図の場合、当該シーケンスによって記憶ドライブ１７１から読み出されたデータは、データ格納バッファ１４の「ｘ４８００００００」というアドレスに格納されることになる。
【０１４５】
Ｃ部情報１７１６には、振り分け情報１７００の処理対象になっているレコードのＣ部１４１１の情報が格納される。同図の振り分け情報１７００は、２つのレコードに関するものであるので、Ｃ部情報１７１６にはそれらのレコードの夫々のＣ部１４１１の情報が設定されている。
【０１４６】
＜リードコマンド処理時における通信制御プロセッサの処理＞
図９に示したように、スレーブプロセッサは、リードデータをデータ格納バッファ１４に格納すると、その旨（リードデータ格納通知）を直接、通信制御プロセッサ１１に通知する（Ｓ９１８、Ｓ９１９）。
【０１４７】
通信制御プロセッサ１１は、Ｓ９１４で受信した振り分け情報１７００に基づき、リードコマンドに対してホスト装置３に応答すべきリードデータのデータ格納バッファ１４への格納状況をリアルタイムに監視している。通信制御プロセッサ１１は、上記リードデータ格納通知に基づき、データ格納バッファ１４に格納されたリードデータを順次ホスト装置３に転送する。
【０１４８】
図１８は、リードデータのホスト装置３への上記転送に関して通信制御プロセッサ１１が行う処理（以下、リードデータ転送処理Ｓ１８００と称する。）を説明するフローチャートである。
【０１４９】
通信制御プロセッサ１１は、スレーブプロセッサから送られてくるリードデータ格納通知を受信すると（Ｓ１８１１：ＹＥＳ）、リードデータ格納通知に含まれているＣＣＷ番号から該当のエントリを検索する（Ｓ１８１２）。
【０１５０】
図１９に通信制御プロセッサ１１が管理する上記エントリの一例を示す。尚、エントリ１９００は、例えば、通信制御プロセッサ１１のメモリ１１２や共用メモリ１５などに格納されている。通信制御プロセッサ１１は、振り分け情報１７００に基づきＣＣＷ番号ごとにエントリ１９００を生成する。
【０１５１】
同図において、ＣＣＷ番号１９１１にはＣＣＷ番号が設定される。データ長１９１２には、当該ＣＣＷに指定されているリードデータの総データ長が設定される。
【０１５２】
シーケンス数１９１３には、前述したシーケンス（当該ＣＣＷ４１０のコマンドを処理するために生成されたシーケンス）の総数が設定される。
【０１５３】
シーケンス毎データ長１９１４には、各シーケンス（各シーケンスはシーケンス番号１９１４１で特定される）のデータ格納バッファ１４へのリードデータの格納状況（データ格納バッファ１４に格納済のリードデータのデータ長）が設定される。
【０１５４】
送信済データ長１９１５には、当該ＣＣＷ４１０に指定されているリードデータのホスト装置３への送信状況（ホスト装置３に送信済のリードデータの総データ長）が設定される。データ格納バッファアドレス１９１６には、当該ＣＣＷ４１０に割り当てられている、データ格納バッファ１４のアドレス（当該ＣＣＷ４１０のリードデータが格納されるアドレス）が設定される。
【０１５５】
図１８に戻り、通信制御プロセッサ１１は、該当のエントリ１９００を検索すると、リードデータ格納通知に含まれているシーケンス番号毎のデータ格納バッファ１４への格納済データ長に基づき、シーケンス毎データ長１９１４の内容を更新する（Ｓ１８１３）。
【０１５６】
続いて通信制御プロセッサ１１は、データ格納バッファ１４に既に格納済のリードデータのうちホスト装置３に未送信のリードデータのデータ長が、ホスト装置３へのリードデータの転送単位（以下、転送長と称する。）以上になっているか否かを判断する（Ｓ１８１４）。
【０１５７】
尚、通信制御プロセッサ１１は、データ格納バッファ１４に既に格納済のリードデータのうちホスト装置３に未送信のリードデータの上記データ長を、エントリ１９００のシーケンス毎データ長１９１４の各シーケンスの格納済のデータ長の総和から送信済みデータ長１９１５を減算することにより求める。
【０１５８】
上記判断の結果、未送信のリードデータのデータ長が転送長を超えていれば（Ｓ１８１４：ＹＥＳ）、通信制御プロセッサ１１は、データ格納バッファ１４に格納されている未送信のリードデータを転送長分（もしくは転送長の整数倍分）、ホスト装置３に送信する（Ｓ１８１５）。また通信制御プロセッサ１１は、Ｓ１８１５で転送したデータ長を、エントリ１９００の送信済データ長１９１５に加算する（Ｓ１８１６）。その後、処理はＳ１８１１に戻る。
【０１５９】
一方、上記判断の結果、未送信のリードデータのデータ長が転送長を超えていなければ（Ｓ１８１４：ＮＯ）、通信制御プロセッサ１１は、エントリ１９００の全シーケンスのリードデータを受信済か否かを判断する（Ｓ１８２１）。エントリ１９００の全シーケンスのリードデータを受信済でない場合は（Ｓ１８２１：ＮＯ）、Ｓ１８１１に戻る。
【０１６０】
一方、エントリ１９００の全シーケンスのリードデータを受信済である場合は（Ｓ１８２１：ＹＥＳ）、Ｓ１８２２に進み、残りのリードデータをホスト装置３に送信する（Ｓ１８２２）。その後、当該エントリ１９００についてのリードデータ転送処理Ｓ１８００は終了する。
【０１６１】
以上に説明したように、ストレージ装置１０は、ＣＫＤフォーマットの１つのレコードを構成しているデータ部（Ｃ部、Ｋ部、Ｄ部）を単位としてスレーブプロセッサに処理を分担させるので、従来よりも細かい単位でＩ／Ｏ処理の負荷分散を図ることがきる。またデータ部を単位としてＩ／Ｏ処理を振り分けることで、１つのみのレコードを対象とするＩ／Ｏ要求を受け付けた場合であっても負荷分散を機能させることができる。とくにホスト装置３から１つのレコードを対象とするＩ／Ｏ要求が多数送られてくるような場合には、負荷分散を有効に機能させることができる。
【０１６２】
またマルチコアプロセッサのコアプロセッサ（メインプロセッサ１２）間で負荷分散を図ることができ、マルチコアプロセッサのメリットを享受することができる。
【０１６３】
以上、本発明の好適な実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲を実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することができる。
【図１】
0005898377.tif 000002
【図２】
0005898377.tif 000003
【図３】
0005898377.tif 000004
【図４】
0005898377.tif 000005
【図５】
0005898377.tif 000006
【図６】
0005898377.tif 000007
【図７】
0005898377.tif 000008
【図８】
0005898377.tif 000009
【図９】
0005898377.tif 000010
【図１０】
0005898377.tif 000011
【図１１】
0005898377.tif 000012
【図１２】
0005898377.tif 000013
【図１３】
0005898377.tif 000014
【図１４】
0005898377.tif 000015
【図１５】
0005898377.tif 000016
【図１６】
0005898377.tif 000017
【図１７】
0005898377.tif 000018
【図１８】
0005898377.tif 000019
【図１９】
0005898377.tif 000020