(57)【要約】【課題】ストレージシステムのＩＯ処理の高速化を実現する。【解決手段】ストレージシステムは、計算機に論理ボリュームを提供し、論理ボリューム及び論理ボリュームに対するＩＯ要求を受信するポートを対応づけて管理し、キューに蓄積されたＩＯ要求に基づくＩＯ処理を実行するプロセッサ及びキューに対応するポートである担当ポートの対応づけを管理するための担当プロセッサ管理情報を保持し、プロセッサは、担当プロセッサ管理情報に基づいて担当ポートを特定し、担当ポートに対応づけられる論理ボリュームに対するＩＯ処理を実行し、担当プロセッサ管理情報及びプロセッサの使用率に基づいて、他に対応づけられる担当ポートを介して受信したＩＯ要求に基づくＩＯ処理を実行する。【選択図】図２
2019164510.tif 000002
【特許請求の範囲】
【請求項１】
計算機に記憶領域を提供するストレージシステムであって、
データを格納する複数の記憶媒体及びコントローラを有し、
前記コントローラは、前記計算機と接続して、前記記憶媒体に対するＩＯ要求を受信する複数のポートを有するインタフェースと、前記複数のポートの各々が受信したＩＯ要求を蓄積する複数のキューを格納するメモリと、前記ＩＯ要求に基づくＩＯ処理を実行する複数の演算コア及び当該ＩＯ処理にかかるデータを格納するキャッシュメモリを有する複数のプロセッサと、を有し、
前記ストレージシステムは、
前記複数の記憶媒体の記憶領域から論理ボリュームを生成し、前記計算機に前記論理ボリュームを提供し、
前記論理ボリューム及び前記論理ボリュームに対するＩＯ要求を受信するポートを対応づけて管理し、
前記メモリは、前記キューに蓄積された前記ＩＯ要求に基づくＩＯ処理を実行する前記プロセッサ及び前記キューに対応するポートである担当ポートの対応づけを管理するための担当プロセッサ管理情報を格納し、
前記プロセッサは、
前記担当プロセッサ管理情報に基づいて、前記担当ポートを特定し、
前記担当ポートを介して受信し、前記担当ポートに対応するキューに蓄積された前記ＩＯ要求を取得し、
前記キャッシュメモリへ前記取得したＩＯ要求にかかるデータを格納しながら、前記担当ポートに対応づけられる前記論理ボリュームに対するＩＯ処理を実行し、
前記担当プロセッサ管理情報及び前記プロセッサの使用率に基づいて、他に対応づけられる前記担当ポートを介して受信したＩＯ要求に基づくＩＯ処理を実行するように制御することを特徴とするストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
担当プロセッサ管理情報は、前記プロセッサの演算コア及び前記担当ポートの対応づけを管理しており、
前記プロセッサの演算コアは、
前記担当プロセッサ管理情報に基づいて、他の演算コアに対応づけられる担当ポートを介して受信したＩＯ要求に基づくＩＯ処理を実行するように制御し、
前記他の演算コアに対応づけられる担当ポートの選択において、同じプロセッサ内の他の演算コアに対応づけられる担当ポートを、他のプロセッサ内の演算コアに対応づけられる担当ポートより優先することを特徴とするストレージシステム。
【請求項３】
請求項２に記載のストレージシステムであって、
前記プロセッサの演算コアは、前記他のプロセッサの演算コアに対応づけられる担当ポートを介して受信したＩＯ要求に基づくＩＯ処理を実行するように制御した場合に、前記他のプロセッサの演算コアと前記担当ポートとの対応づけを解除することを特徴とするストレージシステム。
【請求項４】
請求項２に記載のストレージシステムであって、
前記プロセッサの演算コアは、前記担当ポートに対応する前記キューに前記担当ポートを介して受信したＩＯ要求が存在せず、かつ、前記演算コアの使用率が閾値より低い場合、前記担当プロセッサ管理情報に基づいて、前記他の演算コアに対応づけられる担当ポートを介して受信したＩＯ要求に基づくＩＯ処理を実行するように制御することを特徴とするストレージシステム。
【請求項５】
請求項１に記載のストレージシステムであって、
前記少なくとも一つのプロセッサは、
前記複数のポートの各々のＩＯ処理の負荷を算出し、
前記プロセッサに割り当てるポートの負荷の合計値の差が小さくなるように、前記複数のプロセッサへの前記複数のポートの割当を変更し、
前記割当の変更結果に基づいて、前記担当プロセッサ管理情報を更新することを特徴とするストレージシステム。
【請求項６】
計算機に記憶領域を提供するストレージシステムが実行するＩＯ処理の制御方法であって、
前記ストレージシステムは、データを格納する複数の記憶媒体及びコントローラを有し、
前記コントローラは、前記計算機と接続して、前記記憶媒体に対するＩＯ要求を受信する複数のポートを有するインタフェースと、前記複数のポートの各々が受信したＩＯ要求を蓄積する複数のキューを格納するメモリと、前記ＩＯ要求に基づくＩＯ処理を実行する複数の演算コア及び当該ＩＯ処理にかかるデータを格納するキャッシュメモリを有する複数のプロセッサと、を有し、
前記ストレージシステムは、
前記複数の記憶媒体の記憶領域から論理ボリュームを生成し、前記計算機に前記論理ボリュームを提供し、
前記論理ボリューム及び前記論理ボリュームに対するＩＯ要求を受信するポートを対応づけて管理し、
前記メモリは、前記キューに蓄積された前記ＩＯ要求に基づくＩＯ処理を実行する前記プロセッサ及び前記キューに対応するポートである担当ポートの対応づけを管理するための担当プロセッサ管理情報を格納し、
前記ＩＯ処理の制御方法は、
前記プロセッサが、前記担当プロセッサ管理情報に基づいて、前記担当ポートを特定する第１のステップと、
前記プロセッサが、前記担当ポートを介して受信し、前記担当ポートに対応するキューに蓄積された前記ＩＯ要求を取得する第２のステップと、
前記プロセッサが、前記キャッシュメモリへ前記取得したＩＯ要求にかかるデータを格納しながら、前記担当ポートに対応づけられる前記論理ボリュームに対するＩＯ処理を実行する第３のステップと、
前記プロセッサが、前記担当プロセッサ管理情報及び前記プロセッサの使用率に基づいて、他に対応づけられる前記担当ポートを介して受信したＩＯ要求に基づくＩＯ処理を実行するように制御する第４のステップと、を含むことを特徴とするＩＯ処理の制御方法。
【請求項７】
請求項６に記載のＩＯ処理の制御方法であって、
担当プロセッサ管理情報は、前記プロセッサの演算コア及び前記担当ポートの対応づけを管理しており、
前記第４のステップは、前記プロセッサの演算コアが、前記担当プロセッサ管理情報に基づいて、他の演算コアに対応づけられる担当ポートを介して受信したＩＯ要求に基づくＩＯ処理を実行するように制御する第５のステップを含み、
前記第５のステップは、前記プロセッサの演算コアが、前記他の演算コアに対応づけられる担当ポートを選択する場合に、同じプロセッサ内の他の演算コアに対応づけられる担当ポートを、他のプロセッサ内の演算コアに対応づけられる担当ポートより優先するステップを含むことを特徴とするＩＯ処理の制御方法。
【請求項８】
請求項７に記載のＩＯ処理の制御方法であって、
前記第５のステップは、前記プロセッサの演算コアが、前記他のプロセッサの演算コアに対応づけられる担当ポートを介して受信したＩＯ要求に基づくＩＯ処理を実行するように制御した場合に、前記他のプロセッサの演算コアと前記担当ポートとの対応づけを解除するステップを含むことを特徴とするＩＯ処理の制御方法。
【請求項９】
請求項７に記載のＩＯ処理の制御方法であって、
前記第５のステップは、前記プロセッサの演算コアが、前記担当ポートに対応する前記キューに前記担当ポートを介して受信したＩＯ要求が存在せず、かつ、前記演算コアの使用率が閾値より低い場合、前記担当プロセッサ管理情報に基づいて、前記他の演算コアに対応づけられる担当ポートを介して受信したＩＯ要求に基づくＩＯ処理を実行するように制御するステップを含むことを特徴とするＩＯ処理の制御方法。
【請求項１０】
請求項６に記載のＩＯ処理の制御方法であって、
前記少なくとも一つのプロセッサが、前記複数のポートの各々のＩＯ処理の負荷を算出するステップと、
前記少なくとも一つのプロセッサが、前記プロセッサに割り当てるポートの負荷の合計値の差が小さくなるように、前記複数のプロセッサへの前記複数のポートの割当を変更するステップと、
前記少なくとも一つのプロセッサが、前記割当の変更結果に基づいて、前記担当プロセッサ管理情報を更新するステップと、を含むことを特徴とするＩＯ処理の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムのＩＯ処理の高速化を実現する技術に関する。
【背景技術】
【０００２】
ストレージシステムではＩＯ処理の高速化が求められている。ＩＯ処理の高速化を実現するために、ストレージシステムに複数のプロセッサを搭載するシステム構成が採用されている。
【０００３】
しかし、複数のプロセッサを搭載したストレージシステムでは、複数のプロセッサがメモリを共有しているため、アクセス競合等の発生によってＩＯ処理を高速化が十分ではないという問題がある。
【０００４】
前述した課題に対して特許文献１に記載の技術が知られている。特許文献１には、「ディスク装置と、上位装置からの要求を受付け、前記ディスク装置に対するデータの入出力を制御する、複数のプロセッサを有するディスクコントローラとを備えるストレージシステムであって、前記ディスクコントローラは、ストレージシステムの動作プログラムを格納する複数のメモリと、前記上位装置との間のデータの入出力を制御する複数の上位インタフェースと、前記ディスク装置との間のデータの入出力を制御する複数の下位インタフェースとを有し、前記メモリ、前記上位インタフェース、および前記下位インタフェースは、各々、前記プロセッサ毎に、専用に設けられていて、前記複数のプロセッサは、各々、前記専用に設けられたメモリにアクセスして前記動作プログラムを実行して、前記専用に設けられた上位インタフェースおよび下位インタフェースを制御して、前記上位装置から要求される入出力処理を行なうこと」が記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−２６７５４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１の技術では、プロセッサ毎に専用のメモリ及びインタフェースを設ける必要がある。また、特許文献１の技術を適用する場合、複数のプロセッサが共有するキャッシュの記憶領域をプロセッサ毎の専用の領域に分割する必要がある。したがって、ハードウェアコスト及び管理コスト等の運用コストが高いという問題がある。
【０００７】
本発明は、運用コストを抑えつつ、ＩＯ処理の高速化を実現することを目的とする。
【課題を解決するための手段】
【０００８】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、計算機に記憶領域を提供するストレージシステムであって、データを格納する複数の記憶媒体及びコントローラを有し、前記コントローラは、前記計算機と接続して、前記記憶媒体に対するＩＯ要求を受信する複数のポートを有するインタフェースと、前記複数のポートの各々が受信したＩＯ要求を蓄積する複数のキューを格納するメモリと、前記ＩＯ要求に基づくＩＯ処理を実行する複数の演算コア及び当該ＩＯ処理にかかるデータを格納するキャッシュメモリを有する複数のプロセッサと、を有し、前記ストレージシステムは、前記複数の記憶媒体の記憶領域から論理ボリュームを生成し、前記計算機に前記論理ボリュームを提供し、前記論理ボリューム及び前記論理ボリュームに対するＩＯ要求を受信するポートを対応づけて管理し、前記メモリは、前記キューに蓄積された前記ＩＯ要求に基づくＩＯ処理を実行する前記プロセッサ及び前記キューに対応するポートである担当ポートの対応づけを管理するための担当プロセッサ管理情報を格納し、前記プロセッサは、前記担当プロセッサ管理情報に基づいて、前記担当ポートを特定し、前記担当ポートを介して受信し、前記担当ポートに対応するキューに蓄積された前記ＩＯ要求を取得し、前記キャッシュメモリへ前記取得したＩＯ要求にかかるデータを格納しながら、前記担当ポートに対応づけられる前記論理ボリュームに対するＩＯ処理を実行し、前記担当プロセッサ管理情報及び前記プロセッサの使用率に基づいて、他に対応づけられる前記担当ポートを介して受信したＩＯ要求に基づくＩＯ処理を実行するように制御する。
【発明の効果】
【０００９】
本発明によれば、運用コストを抑えつつ、特定のＩＯ要求に関連するデータがプロセッサ内のキャッシュメモリに格納されるように制御できる。したがって、ＩＯ処理に伴うメモリへのアクセスが減少するため、ＩＯ処理の高速化を実現できる。上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【００１０】
【図１】実施例１の計算機システムの構成例を示す図である。
【図２】実施例１のストレージシステムにおけるＩＯ処理の概念を説明する図である。
【図３】実施例１のＩＯ要求管理情報のデータ構造の一例を示す図である。
【図４】実施例１の担当プロセッサ管理情報のデータ構造の一例を示す図である。
【図５】実施例１のストレージシステムが実行する担当プロセッサ管理情報の生成処理の一例を説明するフローチャートである。
【図６】実施例１のストレージシステムが実行するＩＯ制御処理の一例を説明するフローチャートである。
【図７】実施例１のストレージシステムが実行するＩＯ要求の受信処理の一例を説明するフローチャートである。
【図８】実施例２のストレージシステムが実行する担当プロセッサ管理情報の更新処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明の実施例を、図面を用いて説明する。ただし、本発明は以下に示す実施の形態の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【００１２】
以下に説明する発明の構成において、同一又は類似する構成又は機能には同一の符号を付し、重複する説明は省略する。
【００１３】
本明細書等における「第１」、「第２」、「第３」等の表記は、構成要素を識別するために付するものであり、必ずしも、数又は順序を限定するものではない。
【００１４】
図面等において示す各構成の位置、大きさ、形状、及び範囲等は、発明の理解を容易にするため、実際の位置、大きさ、形状、及び範囲等を表していない場合がある。したがって、本発明では、図面等に開示された位置、大きさ、形状、及び範囲等に限定されない。
【実施例１】
【００１５】
図１は、実施例１の計算機システムの構成例を示す図である。
【００１６】
計算機システムは、ストレージシステム１０及び複数のホスト計算機１１−１、１１−２を備える。以下では、ホスト計算機１１−１、１１−２を区別しない場合、ホスト計算機１１と記載する。
【００１７】
ホスト計算機１１は、ネットワーク１５を介してストレージシステム１０と接続する。ネットワーク１５は、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、及びＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等が考えられる。ネットワーク１５の接続方式は有線又は無線のいずれでもよい。
【００１８】
ホスト計算機１１は、図示しないプロセッサ、メモリ、及びネットワークインタフェースを有する計算機である。ホスト計算機１１は、ストレージシステム１０が提供する記憶領域を用いて所定の処理を実行する。
【００１９】
ストレージシステム１０は、ホスト計算機１１に記憶領域を提供する。ストレージシステム１０は、複数のコントローラ１００−１、１００−２及び複数のドライブ１０１−１、１０１−２を有する。以下では、コントローラ１００−１、１００−２を区別しない場合、コントローラ１００と記載し、ドライブ１０１−１、１０１−２を区別しない場合、ドライブ１０１と記載する。
【００２０】
コントローラ１００は、ホスト計算機１１及びドライブ１０１の間のＩＯ処理を制御する。コントローラ１００は、複数のプロセッサ１１０、メモリ１２０、ホストインタフェース１３０、及びドライブインタフェース１４０を有する。コントローラ１００が有する各ハードウェア構成は内部バスを介して互いに接続される。実施例１では、コントローラ１００に含まれるメモリ１２０、ホストインタフェース１３０、及びドライブインタフェース１４０は一つであるが、二つ以上でもよい。
【００２１】
コントローラ１００−１及びコントローラ１００−２は、専用のパスを介して互いに接続される。したがって、コントローラ１００−１に含まれるプロセッサ１１０及び図示しないＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）回路は、当該パスを介して、コントローラ１００−２が有するメモリ１２０にアクセスできる。コントローラ１００−２も同様に、パスを介して、コントローラ１００−１が有するメモリ１２０にアクセスできる。
【００２２】
プロセッサ１１０は、メモリ１２０に格納されるプログラムを実行する演算装置である。プロセッサ１１０は、複数のコア１１１及びキャッシュメモリ１１２を有する。
【００２３】
メモリ１２０は、プロセッサ１１０が実行するプログラム及びプログラムが使用するデータを格納する記憶装置である。メモリ１２０に格納されるプログラム及びデータについては後述する。
【００２４】
ホストインタフェース１３０は、ネットワーク１５を介してホスト計算機１１に接続するためのインタフェースである。ホストインタフェース１３０は、例えば、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）及びＨＢＡ（Ｈｏｓｔ  Ｂｕｓ  Ａｄａｐｔｅｒ）等である。ホストインタフェース１３０は、複数のポート１３１を有する。実施例１のホストインタフェース１３０は、ポート１３１を介してＩＯ要求を受信した場合、メモリ１２０の特定の領域（ＩＯキュー１２４）にＩＯ要求を格納する。
【００２５】
ドライブインタフェース１４０は、ドライブ１０１と接続するためのインタフェースである。
【００２６】
ドライブ１０１は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）及びＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶装置である。
【００２７】
コントローラ１００は、一つ以上のドライブ１０１の記憶領域又は複数のドライブ１０１を用いて構成されるＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）グループの記憶領域を用いて、論理ボリューム１５０を生成する。論理ボリューム１５０は、ホスト計算機１１に提供される記憶領域であり、ポート１３１と対応づけて管理される。なお、ホスト計算機１１には複数の論理ボリューム１５０が提供されてもよい。
【００２８】
ここで、メモリ１２０に格納されるプログラム及びデータについて説明する。メモリ１２０は、制御モジュール１２１を実現するプログラムを格納し、ＩＯ要求管理情報１２２及び担当プロセッサ管理情報１２３を格納する。また、メモリ１２０は、各ポート１３１が受信したＩＯ要求を蓄積するためのＩＯキュー１２４を格納する。
【００２９】
制御モジュール１２１は、ストレージシステム１０全体を制御する。より具体的には、制御モジュール１２１は、論理ボリューム１５０の管理及びＩＯ処理の制御等を行う。
【００３０】
ＩＯ要求管理情報１２２は、ホスト計算機１１から受信したＩＯ要求に基づくＩＯ処理を管理するための情報である。ＩＯ要求管理情報１２２のデータ構造の詳細は図３を用いて説明する。
【００３１】
担当プロセッサ管理情報１２３は、ポート１３１が受信したＩＯ要求に基づくＩＯ処理を実行するプロセッサを管理するための情報である。担当プロセッサ管理情報１２３のデータ構造の詳細は図４を用いて説明する。
【００３２】
なお、メモリ１２０は、図示しないストレージシステム１０を管理するための情報を格納する。例えば、ハードウェア構成を管理するための情報、ポート１３１及び論理ボリューム１５０の対応関係を管理するための情報、並びに、論理ボリューム１５０及びＲＡＩＤグループの関係を管理するための情報等がメモリ１２０に格納される。
【００３３】
図２は、実施例１のストレージシステム１０におけるＩＯ処理の概念を説明する図である。
【００３４】
実施例１の制御モジュール１２１は、後述するように、コントローラ１００に含まれる複数のＩＯキュー１２４（複数のポート１３１）に対して、ＩＯ処理を実行するプロセッサ１１０を設定する。すなわち、制御モジュール１２１は、ポート１３１を担当するプロセッサ１１０の割当を行う。具体的には、制御モジュール１２１は、担当プロセッサ管理情報１２３を生成し、メモリ１２０に担当プロセッサ管理情報１２３を設定する。
【００３５】
図２に示す例では、プロセッサ１１０−１は担当の第１ポート１３１及び第２ポート１３１に対応するＩＯキュー１２４に蓄積されるＩＯ要求に基づくＩＯ処理を実行するように設定される。また、プロセッサ１１０−２は担当の第３ポート１３１及び第４ポート１３１に対応するＩＯキュー１２４に蓄積されるＩＯ要求に基づくＩＯ処理を実行するように設定される。
【００３６】
したがって、プロセッサ１１０−１は、第１ポート１３１及び第２ポート１３１のそれぞれに対応づけられた論理ボリューム１５０に対するＩＯ処理を実行し、プロセッサ１１０−２は、第３ポート１３１及び第４ポート１３１のそれぞれに対応づけられた論理ボリューム１５０に対するＩＯ処理を実行する。
【００３７】
このとき、プロセッサ１１０−１のキャッシュメモリ１１２には、ＩＯ要求管理情報１２２の第１ポート用領域２０１及び第２ポート用領域２０１に格納される情報が蓄積される。ポート用領域２０１は、ポート１３１を介して受信したＩＯ要求に基づくＩＯ処理に関連するデータを格納する領域であり、例えば、テーブル形式の情報のエントリに該当する。すなわち、キャッシュメモリ１１２には、特定の論理ボリューム１５０に対するＩＯ処理に関連するデータが蓄積される。したがって、ＩＯ処理に伴うキャッシュメモリ１１２のキャッシュヒット率が向上するため、メモリ１２０へのアクセス回数が減少する。
【００３８】
ＩＯ処理におけるメモリ１２０へのアクセスは処理速度の低下の一要因であることから、メモリ１２０へのアクセス回数の減少によってＩＯ処理の高速化が可能となる。
【００３９】
本実施例の制御方式では、プロセッサ１１０に対して専用のハードウェアを設ける必要がなく、また、メモリ１２０の領域を分ける必要がない。したがって、運用コストを抑制したＩＯ処理の高速化を実現できる。
【００４０】
図３は、実施例１のＩＯ要求管理情報１２２のデータ構造の一例を示す図である。
【００４１】
ＩＯ要求管理情報１２２は、ホストインタフェースＩＤ３０１、ホストインタフェース種別３０２、ポートＩＤ３０３、キューロック状態３０４、及びＩＯ要求リスト３０５から構成されるエントリを含む。一つのエントリには、一つのホストインタフェース１３０に関する情報が格納される。
【００４２】
ホストインタフェースＩＤ３０１は、ホストインタフェース１３０の識別情報を格納するフィールドである。
【００４３】
ホストインタフェース種別３０２は、ホストインタフェース１３０の種別を示す値を格納するフィールドである。ホストインタフェース種別３０２には、製品名及びインタフェースの規格等が格納される。
【００４４】
ポートＩＤ３０３は、ホストインタフェース１３０が有するポート１３１の識別情報を格納するフィールドである。一つのエントリには、ホストインタフェース１３０が有するポート１３１の数だけ行が含まれる。
【００４５】
キューロック状態３０４は、ポートＩＤ３０３に対応するポート１３１を介して受信したＩＯ要求を蓄積するＩＯキュー１２４のロック状態を示す値を格納するフィールドである。キューロック状態３０４には、ロックが取得されたことを示す「ロック中」及びロックが取得されていないことを示す「未ロック」のいずれかが格納される。
【００４６】
ＩＯ要求リスト３０５は、ＩＯキュー１２４を介してプロセッサ１１０が受信するＩＯ要求に基づくＩＯ処理を管理するためのフィールド群である。ＩＯ要求リスト３０５は、使用状態３１１、コアＩＤ３１２、及びプロセスＩＤ３１３を含む。
【００４７】
使用状態３１１は、ＩＯ要求リスト３０５の行の使用状態を示す値を格納するフィールドである。使用状態３１１には「使用中」及び「未使用」のいずれかが格納される。行を用いてＩＯ処理を管理する場合、使用状態３１１は「未使用」から「使用中」に更新される。コアＩＤ３１２は、ＩＯ要求に基づくＩＯ処理を実行するコア１１１の識別情報を格納するフィールドである。プロセスＩＤ３１３は、ＩＯ処理に対応するプロセスの識別情報を格納するフィールドである。
【００４８】
図４は、実施例１の担当プロセッサ管理情報１２３のデータ構造の一例を示す図である。
【００４９】
担当プロセッサ管理情報１２３は、ホストインタフェースＩＤ４０１、ポートＩＤ４０２、ＩＯ負荷４０３、プロセッサＩＤ４０４、及びコアＩＤ４０５から構成されるエントリを含む。一つのエントリには、一つのホストインタフェース１３０に関する情報が格納される。
【００５０】
ホストインタフェースＩＤ４０１及びポートＩＤ４０２は、ホストインタフェースＩＤ３０１及びポートＩＤ３０３と同一のフィールドである。
【００５１】
ＩＯ負荷４０３は、ポートＩＤ４０２に対応するポート１３１のＩＯ負荷を示す値を格納するフィールドである。
【００５２】
プロセッサＩＤ４０４は、ポート１３１を担当するコア１１１を含むプロセッサ１１０の識別情報を格納するフィールドである。コアＩＤ４０５は、ポート１３１を担当するコア１１１の識別情報を格納するフィールドである。すなわち、ポートＩＤ４０２に対応するポート１３１のＩＯキュー１２４に格納されるＩＯ要求に基づくＩＯ処理を実行するコア１１１を特定するための情報である。
【００５３】
図５は、実施例１のストレージシステム１０が実行する担当プロセッサ管理情報１２３の生成処理の一例を説明するフローチャートである。
【００５４】
担当プロセッサ管理情報１２３の生成処理は、ストレージシステム１０の稼働前に実行される。各コントローラ１００に含まれるプロセッサ１１０によって実現される制御モジュール１２１が、各コントローラ１００のメモリ１２０に格納する担当プロセッサ管理情報１２３の生成処理を実行する。
【００５５】
制御モジュール１２１は、ハードウェア構成を管理するための情報を参照し、コントローラ１００に含まれるプロセッサ１１０及びポート１３１のリストを生成する（ステップＳ１０１）。このとき、制御モジュール１２１は、初期化された担当プロセッサ管理情報１２３をメモリ１２０に格納する。
【００５６】
次に、制御モジュール１２１は、コントローラ１００に含まれる各プロセッサ１１０に割り当てるポート１３１の数（割当数）を算出する（ステップＳ１０２）。
【００５７】
具体的には、制御モジュール１２１は、ポート１３１の数をプロセッサ１１０の数で除算することによって割当数を算出する。なお、前述した割当数の算出方法は一例であってこれに限定されない。
【００５８】
次に、制御モジュール１２１は、コントローラ１００に含まれる全てのプロセッサ１１０へのポート１３１の割当が完了したか否かを判定する（ステップＳ１０３）。
【００５９】
ポート１３１の割当が完了したと判定された場合、制御モジュール１２１は、担当プロセッサ管理情報１２３の生成処理を終了する。
【００６０】
ポート１３１の割当が完了していないと判定された場合、制御モジュール１２１は、プロセッサ１１０のリストからターゲットプロセッサ１１０を選択し（ステップＳ１０４）、ターゲットプロセッサ１１０に割り当てるポート１３１を決定する（ステップＳ１０５）。
【００６１】
具体的には、制御モジュール１２１は、ポート１３１のリストから割当数分のポート１３１を選択する。このとき、選択されたポート１３１は、ポート１３１のリストから削除される。
【００６２】
次に、制御モジュール１２１は、ターゲットプロセッサ１１０に含まれるコア１１１の中から決定されたポート１３１を担当するコア１１１を選択する（ステップＳ１０６）。例えば、制御モジュール１２１は、ラウンドロビン方式でコア１１１を選択する。本発明はコア１１１の選択方法に限定されない。
【００６３】
次に、制御モジュール１２１は、担当プロセッサ管理情報１２３を更新し（ステップＳ１０７）、その後、ステップＳ１０３に戻る。具体的には、以下のような処理が実行される。
【００６４】
制御モジュール１２１は、担当プロセッサ管理情報１２３にエントリを追加し、追加されたエントリのホストインタフェースＩＤ４０１に、コントローラ１００に含まれるホストインタフェース１３０の識別情報を設定する。
【００６５】
制御モジュール１２１は、追加されたエントリに選択されたポート１３１の数だけ行を生成する。制御モジュール１２１は、生成された行のポートＩＤ４０２に選択されたポート１３１の識別情報を設定し、また、生成された行のプロセッサＩＤ４０４にターゲットプロセッサ１１０の識別情報を設定する。さらに、制御モジュール１２１は、生成された行のコアＩＤ４０５に選択されたコア１１１の識別情報を設定する。この時点では、生成された行のＩＯ負荷４０３には「０」等の初期値が設定される。以上がステップＳ１０７の処理の説明である。
【００６６】
なお、コントローラ１００に複数のホストインタフェース１３０が含まれる場合、各ホストインタフェース１３０に対して、ステップＳ１０１からステップＳ１０７の処理が実行される。
【００６７】
図６は、実施例１のストレージシステム１０が実行するＩＯ制御処理の一例を説明するフローチャートである。以下で説明するＩＯ制御処理は、複数のプロセッサ１１０の各々が周期的に実行する。なお、複数のプロセッサ１１０のＩＯ制御処理の実行周期は、同一でもよいし、異なっていてもよい。また、ＩＯ制御周期が同一である場合、複数のプロセッサ１１０のＩＯ制御処理は同期でもよいし、また、非同期でもよい。
【００６８】
プロセッサ１１０のコア１１１は、メモリ１２０に格納される担当プロセッサ管理情報１２３を参照し、担当のポート１３１を特定する（ステップＳ２０１）。
【００６９】
具体的には、プロセッサ１１０のコア１１１は、担当プロセッサ管理情報１２３のプロセッサＩＤ４０４に自プロセッサ１１０の識別情報が設定され、かつ、コアＩＤ４０５に自コア１１１の識別情報が設定される行を検索する。プロセッサ１１０のコア１１１は、検索された行のポートＩＤ４０２に格納されるポート１３１の識別情報を取得する。取得したポート１３１の識別情報はキャッシュメモリ１１２に格納される。
【００７０】
次に、プロセッサ１１０のコア１１１は、特定された全てのポート１３１のＩＯ要求の受信処理が完了したか否かを判定する（ステップＳ２０２）。具体的には、以下のような処理が実行される。
【００７１】
ステップＳ２０１からステップＳ２０２に移行した場合、プロセッサ１１０のコア１１１は、特定された全てのポート１３１のＩＯ要求の受信処理が完了していないと判定する。
【００７２】
ステップＳ２０３からステップＳ２０２に移行した場合、プロセッサ１１０のコア１１１は、特定された全てのポート１３１に対応するＩＯキュー１２４のメモリ領域を参照して、未処理のＩＯ要求が格納されているか否かを判定する。
【００７３】
特定された全てのポート１３１に対応するＩＯキュー１２４に未処理のＩＯ要求が一つ以上格納されていると判定された場合、プロセッサ１１０のコア１１１は、特定されたポート１３１であって、ＩＯ要求の受信処理が完了していないポート１３１のＩＯ要求の受信処理を実行する（ステップＳ２０３）。一定期間経過した後、プロセッサ１１０は、ステップＳ２０２に戻る。ＩＯ要求の受信処理の詳細は図７を用いて説明する。
【００７４】
特定された全てのポート１３１のＩＯ要求の受信処理が完了したと判定された場合、プロセッサ１１０のコア１１１は、自コア１１１の使用率が閾値より小さいか否かを判定する（ステップＳ２０４）。使用率は、判定時より前の所定時間においてＩＯ処理を行っていた時間の比率である。閾値は予め設定されているものとする。ただし、閾値は任意のタイミングで更新できる。
【００７５】
使用率は、例えば、以下のような方法で算出される。コア１１１は、ＩＯ処理を開始又は再開した時刻を開始時刻として取得し、待ち状態への移行又はＩＯ処理を終了した時刻を終了時刻として取得する。コア１１１は、終了時刻から開始時刻を減算した時間をＩＯ処理時間としてメモリ１２０のカウンタに加算する。コア１１１は、カウンタを一定周期（例えば、１秒周期）に参照して、ＩＯ処理が占める割合を使用率として算出する。このとき、コア１１１は、カウンタを「０」にクリアする。
【００７６】
自コア１１１の使用率が閾値以上であると判定された場合、プロセッサ１１０のコア１１１は、ＩＯ制御処理を終了する。
【００７７】
自コア１１１の使用率が閾値より小さいと判定された場合、プロセッサ１１０のコア１１１は、他のコア１１１が担当するポート１３１を特定する（ステップＳ２０５）。
【００７８】
具体的には、プロセッサ１１０のコア１１１は、プロセッサＩＤ４０４に自プロセッサ１１０の識別情報が設定され、かつ、コアＩＤ４０５に自コア１１１以外の識別情報が設定される行を検索し、検索された行のリストをキャッシュメモリ１１２に格納する。自プロセッサ１１０では適当な行が見つからなかった場合、プロセッサ１１０のコア１１１は、担当プロセッサ管理情報１２３のプロセッサＩＤ４０４に自プロセッサ１１０以外の識別情報が設定される行を検索し、検索された行のリストをキャッシュメモリ１１２に格納する。このときに、プロセッサ１１０のコア１１１は、そのポート１３１を担当している他のプロセッサ１１０のキャッシュメモリ１１２にアクセスし、そのポート１３１を担当することを示すポート識別情報を削除する。これによって、そのポート１３１の全ＩＯ処理は、プロセッサ間で移動することとなる。
【００７９】
次に、プロセッサ１１０のコア１１１は、検索された行に対応する全てのポート１３１のＩＯ要求の受信処理が完了したか否かを判定する（ステップＳ２０６）。具体的には以下のような処理が実行される。
【００８０】
プロセッサ１１０のコア１１１は、ステップＳ２０５で検索された行に対応するポート１３１のＩＯ要求の受信処理が完了したか否かを判定する。当該処理はステップＳ２０２と同様の処理である。
【００８１】
検索された行に対応する全てのポート１３１のＩＯ要求の受信処理が完了していないと判定された場合、プロセッサ１１０は、ＩＯ要求の受信処理が完了していないポート１３１のＩＯ要求の受信処理を実行する（ステップＳ２０７）。一定期間経過した後、プロセッサ１１０は、ステップＳ２０６に戻る。
【００８２】
ステップＳ２０１からステップＳ２０３の処理を実行することによって、プロセッサ１１０のコア１１１は、特定の論理ボリューム１５０に対するＩＯ処理のみを実行できる。これによって、キャッシュメモリ１１２には特定の論理ボリューム１５０に関連するデータが格納される。したがって、メモリ１２０へのアクセス回数が減少するためＩＯ処理の高速化を実現できる。
【００８３】
ステップＳ２０４からステップＳ２０７の処理を実行することによって、プロセッサ１１０のコア１１１は、その使用率が低い場合、プロセッサ１１０内の他のコア１１１に割り当てられたポート１３１のＩＯ処理を実行する。これによって、ストレージシステム１０のリソースを有効に活用することができる。また、キャッシュメモリ１１２には、同一プロセッサ１１０に含まれる他のコア１１１が処理する特定の論理ボリューム１５０に関連するデータが格納される。したがって、メモリ１２０へのアクセス回数が減少するためＩＯ処理の高速化を実現できる。
【００８４】
図７は、実施例１のストレージシステム１０が実行するＩＯ要求の受信処理の一例を説明するフローチャートである。
【００８５】
プロセッサ１１０のコア１１１は、特定されたポート１３１であって、ＩＯ要求の受信処理が完了していないポート１３１の中からターゲットポート１３１を選択する（ステップＳ３０１）。
【００８６】
次に、プロセッサ１１０のコア１１１は、ターゲットポート１３１に対応するＩＯキュー１２４のロックを取得する（ステップＳ３０２）。また、プロセッサ１１０のコア１１１は、ロックの取得に成功したか否かを判定する（ステップＳ３０３）。具体的には、以下のような処理が実行される。
【００８７】
プロセッサ１１０のコア１１１は、ＩＯ要求管理情報１２２を参照し、ホストインタフェースＩＤ３０１に自プロセッサ１１０を含むホストインタフェース１３０の識別情報が格納されるエントリを検索し、また、検索されたエントリからポートＩＤ３０３にターゲットポート１３１の識別情報が格納される行を検索する。プロセッサ１１０のコア１１１は、検索された行のキューロック状態３０４が「未ロック」であるか否かを判定する。
【００８８】
検索された行のキューロック状態３０４が「ロック中」である場合、プロセッサ１１０のコア１１１は、ロックの取得に失敗したと判定する。
【００８９】
検索された行のキューロック状態３０４が「未ロック」である場合、プロセッサ１１０のコア１１１は、ロックを取得する。ロックの取得が正常に行われた場合、プロセッサ１１０のコア１１１は、ロックの取得に成功したと判定する。このとき、プロセッサ１１０のコア１１１は、検索された行のキューロック状態３０４に「ロック中」を設定する。
【００９０】
ロックの取得が正常に行われなかった場合、プロセッサ１１０のコア１１１は、ロックの取得に失敗したと判定する。以上が、ステップＳ３０２及びステップＳ３０３の処理の説明である。
【００９１】
ロックの取得に失敗したと判定された場合、プロセッサ１１０のコア１１１は、ＩＯ要求の受信処理を終了する。
【００９２】
ロックの取得に成功したと判定された場合、プロセッサ１１０のコア１１１は、ターゲットポート１３１に対応するＩＯキュー１２４からＩＯ要求を取得し（ステップＳ３０４）、また、当該ＩＯ要求に基づくＩＯ処理の負荷を算出する（ステップＳ３０５）。例えば、ＩＯ処理の負荷は、ＩＯ処理の種類及び扱うデータ量等に基づいて算出されもよいし、モニタ機能を用いてプロセッサ１１０のコア１１１の使用率が負荷として算出されてもよい。
【００９３】
このとき、プロセッサ１１０のコア１１１は、担当プロセッサ管理情報１２３を参照し、プロセッサＩＤ４０４に自プロセッサ１１０の識別情報が格納され、コアＩＤ４０５に自コア１１１の識別情報が格納され、かつ、ポートＩＤ４０２にターゲットポート１３１の識別情報が格納される行を検索する。プロセッサ１１０のコア１１１は、検索された行のＩＯ負荷４０３に算出された負荷を加算する。
【００９４】
次に、プロセッサ１１０のコア１１１は、取得したＩＯ要求が新規のＩＯ要求であるか否かを判定する（ステップＳ３０６）。新規のＩＯ要求であるか否かは、ＩＯ要求の種別及びコマンド等に基づいて判定することができる。データの書込みに対応するＩＯ処理の応答を示すＩＯ要求の場合、取得したＩＯ要求は新規のＩＯ要求でないと判定される。
【００９５】
取得したＩＯ要求が新規のＩＯ要求であると判定された場合、プロセッサ１１０のコア１１１は、ＩＯ要求管理情報１２２のターゲットポート１３１に対応する行を更新し、また、取得したＩＯ要求に基づくＩＯ処理のプロセスを生成し、当該プロセスを開始する（ステップＳ３０７）。その後、プロセッサ１１０のコア１１１はステップＳ３０９に進む。具体的には、以下のような処理が実行される。
【００９６】
プロセッサ１１０のコア１１１は、ホストインタフェースＩＤ３０１に自プロセッサ１１０を含むホストインタフェース１３０の識別情報が格納されるエントリを検索する。プロセッサ１１０のコア１１１は、検索されたエントリのポートＩＤ３０３にターゲットポート１３１の識別情報が格納される行を検索する。プロセッサ１１０のコア１１１は、検索された行のＩＯ要求リスト３０５を参照し、使用状態３１１が「未使用」である行を一つ検索する。プロセッサ１１０のコア１１１は、検索された行の使用状態３１１に「使用中」を設定する。
【００９７】
プロセッサ１１０のコア１１１は、プロセスを生成し、当該プロセスを実行可能状態とする。このとき、プロセッサ１１０のコア１１１は、検索された行のコアＩＤ３１２にコア１１１の識別情報を設定し、検索された行のプロセスＩＤ３１３に生成されたプロセスの識別情報を設定する。生成されたプロセスは、プロセッサ１１０のコア１１１のプロセススケジューリングに基づいて実行される。
【００９８】
プロセッサ１１０のコア１１１は、ＩＯ処理の実行中にホスト計算機１１との通信が必要となった場合、ポート１３１を介してホスト計算機１１にＩＯ要求を送信して当該プロセスを応答待ち状態に変更する。このとき、プロセッサ１１０のコア１１１は、送信するＩＯ要求にプロセスを特定するための情報を付与する。
【００９９】
例えば、データ読み込みのＩＯ処理において、プロセッサ１１０のコア１１１は、読み出し対象のデータをメモリ１２０に格納した後、格納したデータをホスト計算機１１に応答するためにＩＯ要求を送信する。また、プロセスを特定するための情報は、例えば、コアＩＤ３１２とプロセスＩＤ３１３でもよいし、ＩＯ要求リスト３０５の先頭からの行数でもよい。
【０１００】
取得したＩＯ要求が新規のＩＯ要求でないと判定された場合、プロセッサ１１０のコア１１１は、ＩＯ要求リスト３０５を参照し、コアＩＤ３１２及びプロセスＩＤ３１３が自コア１１１の識別情報及びＩＯ要求のプロセスの識別情報に一致する行を検索し、応答待ち状態から実行可能状態に変更する（ステップＳ３０８）。その後、プロセッサ１１０のコア１１１はステップＳ３０９に進む。具体的には、以下のような処理が実行される。
【０１０１】
プロセッサ１１０のコア１１１は、ホストインタフェースＩＤ３０１に自プロセッサ１１０を含むホストインタフェース１３０の識別情報が格納されるエントリを検索する。プロセッサ１１０のコア１１１は、検索されたエントリのポートＩＤ３０３にターゲットポート１３１の識別情報が格納される行を検索する。プロセッサ１１０のコア１１１は、検索された行のＩＯ要求リスト３０５を参照し、取得したＩＯ要求に対応する行を検索する。
【０１０２】
さらに、プロセッサ１１０のコア１１１は、検索された行のコアＩＤ３１２とプロセスＩＤ３１３によって特定されるプロセスを実行可能状態に変更する。当該プロセスは、プロセッサ１１０のコア１１１のプロセススケジューリングに基づいて処理が再開され、ＩＯ処理が完了したあと、プロセッサ１１０のコア１１１が、ＩＯ要求管理情報１２２の対応する行の使用状態３１１、コアＩＤ３１２、及びプロセスＩＤ３１３を初期化する。具体的には、プロセッサ１１０のコア１１１は、使用状態３１１に「未使用」を設定し、コアＩＤ３１２及びプロセスＩＤ３１３に「Ｎ／Ａ」を設定する。
【０１０３】
プロセッサ１１０のコア１１１は、検索された行のコアＩＤ３１２に格納される識別情報に対応するコア１１１に、取得したＩＯ要求を通知する。以上がステップＳ３０８の処理の説明である。
【０１０４】
ステップＳ３０９では、プロセッサ１１０のコア１１１は取得したロックを解放する（ステップＳ３０９）。その後、プロセッサ１１０のコア１１１はＩＯ要求の受信処理を終了する。このとき、プロセッサ１１０のコア１１１は、キューロック状態３０４を「未ロック」に変更する。
【０１０５】
以上で説明したように、実施例１によれば、特定のポート１３１を介して受信したＩＯ要求は、特定のプロセッサ１１０が実行するように集まりやすくなる。これによって、プロセッサ１１０内のコア１１１が共有するキャッシュメモリ１１２には、ポート１３１に対応づけられる論理ボリューム１５０に関連するデータが格納される。コア１１１の使用率が低くなったときは、同じプロセッサ１１０内の他コア１１１が担当しているポート１３１を優先して担当に加える。これによって、ＩＯ処理の実行時のメモリ１２０へのアクセス回数を削減できるため、ＩＯ処理の高速化を実現できる。また、プロセッサ１１０内のすべてのコア１１１の使用率が低くなった場合は、他のプロセッサ１１０が担当するポート１３１のＩＯ要求を実行するようになるので、プロセッサのリソースの有効利用も考慮している。このとき、そのポートの全ＩＯ要求をプロセッサ間で移動するようにすることで、キャッシュデータの有効利用を図っている。
【０１０６】
実施例１では、複数のプロセッサ１１０に一つのメモリ１２０が接続される構成を想定している。しかし、実施例１で説明した方式は前述以外の構成にも適用できる。例えば、複数のプロセッサ１１０に複数のメモリ１２０が接続される構成でもよい。この場合、複数のメモリ１２０の記憶領域を一つの記憶領域として扱うことによって、同様の制御が可能となる。
【実施例２】
【０１０７】
実施例２では、担当プロセッサ管理情報１２３の更新方法について説明する。
【０１０８】
実施例２の計算機システムの構成及びストレージシステム１０の構成は実施例１と同一であるため説明を省略する。実施例２のストレージシステム１０が保持する情報のデータ構造は実施例１と同一であるため説明を省略する。
【０１０９】
図８は、実施例２のストレージシステム１０が実行する担当プロセッサ管理情報１２３の更新処理の一例を説明するフローチャートである。
【０１１０】
担当プロセッサ管理情報１２３の更新処理は、ストレージシステム１０が稼働した後、任意のタイミングで実行される。
【０１１１】
制御モジュール１２１は、全てのコントローラ１００の処理が完了したか否かを判定する（ステップＳ４０１）。
【０１１２】
全てのコントローラ１００の処理が完了したと判定された場合、制御モジュール１２１は担当プロセッサ管理情報１２３の更新処理を終了する。
【０１１３】
全てのコントローラ１００の処理が完了していないと判定された場合、制御モジュール１２１は、ハードウェア構成を管理するための情報を参照し、ターゲットコントローラ１００を選択する（ステップＳ４０２）。
【０１１４】
次に、制御モジュール１２１は、ハードウェア構成を管理するための情報を参照し、ターゲットコントローラ１００に含まれるプロセッサ１１０及びポート１３１のリストを生成する（ステップＳ４０３）。
【０１１５】
次に、制御モジュール１２１は、ターゲットコントローラ１００に含まれるホストインタフェース１３０の各ポート１３１の負荷を取得する（ステップＳ４０４）。
【０１１６】
具体的には、制御モジュール１２１は、担当プロセッサ管理情報１２３を参照し、ホストインタフェースＩＤ４０１がターゲットコントローラ１００に含まれるホストインタフェース１３０の識別情報と一致するエントリを検索する。制御モジュール１２１は、検索されたエントリに含まれる各行のＩＯ負荷４０３の値を取得する。
【０１１７】
次に、制御モジュール１２１は、ターゲットコントローラ１００に含まれる各プロセッサ１１０のコア１１１に割り当てるポート１３１を決定する（ステップＳ４０５）。その後、制御モジュール１２１は、ステップＳ４０１に戻る。ステップＳ４０５では、以下のような処理が実行される。
【０１１８】
制御モジュール１２１は、一つのキャッシュラインのデータサイズ及びＩＯ要求管理情報１２２のＩＯ要求リスト３０５の一つの行（ポート用領域２０１）のデータサイズに基づいて、一つのキャッシュラインに含めることができる行の数を算出する。算出された行の数を基準数と記載する。
【０１１９】
制御モジュール１２１は、基準数を割り当てるポート１３１の数の最小単位に設定し、プロセッサ１１０のコア１１１に割り当てるポート１３１の負荷の合計値の差が最小となるポート１３１の割り当てを決定する。
【０１２０】
制御モジュール１２１は、担当プロセッサ管理情報１２３を参照し、ターゲットコントローラ１００に含まれるホストインタフェース１３０に対応するエントリのプロセッサＩＤ４０４及びコアＩＤ４０５に、決定されたプロセッサ１１０及びコア１１１の識別情報を設定する。以上がステップＳ４０５の処理の説明である。
【０１２１】
実施例２によれば、ポート１３１の負荷に応じて、プロセッサ１１０のコア１１１が担当するポート１３１及びポート１３１の数を動的に変更することができる。
【０１２２】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
【０１２３】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。
【０１２４】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、Ｃ／Ｃ＋＋、ｐｅｒｌ、Ｓｈｅｌｌ、ＰＨＰ、Ｊａｖａ（登録商標）等の広範囲のプログラム又はスクリプト言語で実装できる。
【０１２５】
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はＣＤ−ＲＷ、ＣＤ−Ｒ等の記憶媒体に格納し、コンピュータが備えるプロセッサが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
【０１２６】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【符号の説明】
【０１２７】
１０  ストレージシステム
１１  ホスト計算機
１５  ネットワーク
１００  コントローラ
１０１  ドライブ
１１０  プロセッサ
１１１  コア
１１２  キャッシュメモリ
１２０  メモリ
１２１  制御モジュール
１２２  ＩＯ要求管理情報
１２３  担当プロセッサ管理情報
１２４  ＩＯキュー
１３０  ホストインタフェース
１３１  ポート
１４０  ドライブインタフェース
１５０  論理ボリューム
２０１  ポート用領域 
【図１】
2019164510.tif 000003
【図２】
2019164510.tif 000004
【図３】
2019164510.tif 000005
【図４】
2019164510.tif 000006
【図５】
2019164510.tif 000007
【図６】
2019164510.tif 000008
【図７】
2019164510.tif 000009
【図８】
2019164510.tif 000010