(57)【特許請求の範囲】
【請求項１】
直列に接続された複数のエクスパンダであるエクスパンダ列と、
前記エクスパンダ列に直接接続された複数の記憶デバイスと、
前記エクスパンダ列のうちの１つのエクスパンダである第１のエクスパンダに直接接続された第１のイニシエータデバイスと、
前記エクスパンダ列のうちの１つのエクスパンダであり前記第１のエクスパンダとは別のエクスパンダである第２のエクスパンダに直接接続された第２のイニシエータデバイスと、
前記第１及び第２のイニシエータデバイスのうちのいずれかのイニシエータデバイスを介して、前記複数の記憶デバイス及び前記複数のエクスパンダのうちの、コマンドの送信先デバイスに、前記コマンドを送信するプロセッサと
を有し、
前記プロセッサが、前記送信先デバイスについて、前記送信先デバイスとの間のエクスパンダが少ない方のイニシエータデバイスである最適経路と、前記送信先デバイスとの間のエクスパンダが多い方のイニシエータデバイスである後退経路とのうち、前記最適経路を選択し、前記選択した最適経路経由で、前記コマンドを、前記送信先デバイスに送信するようになっており、
前記プロセッサが送信するコマンドとして、記憶デバイスに対してデータを入出力するＩ／Ｏコマンドと、データの入出力とは異なる処理をエクスパンダ又は記憶デバイスに行なわせる制御コマンドである内部処理コマンドとがあり、
前記第１のイニシエータデバイスの負荷は、前記第１のイニシエータデバイスから発行されたＩ／Ｏコマンドの数であり、
前記第２のイニシエータデバイスの負荷は、前記第２のイニシエータデバイスから発行されたＩ／Ｏコマンドの数であり、
前記プロセッサが、
前記第１のイニシエータデバイスの負荷が第２のイニシエータデバイスの負荷より小さければ、前記第１のイニシエータデバイスが最適経路であるデバイスに対する内部処理コマンドを、前記第１のイニシエータデバイス経由で送信し、
前記第１のイニシエータデバイスの負荷が第２のイニシエータデバイスの負荷以上になったならば、前記第１のイニシエータデバイスが最適経路であるデバイスに対する内部処理コマンドを前記第１のイニシエータデバイス経由で送信することを止め、前記第２のイニシエータデバイスが最適経路であるデバイスに対する内部処理コマンドを、前記第２のイニシエータデバイス経由で送信する、
ストレージシステム。
【請求項２】
前記コマンドが、Ｉ／Ｏコマンドであり、且つ、前記送信先デバイスが、前記複数の記憶デバイスのうちのいずれかの記憶デバイスである場合、前記プロセッサが、前記送信先デバイスに関し、最適経路についてのレスポンスタイムと後退経路についてのレスポンスタイムとを比較し、最適経路についてのレスポンスタイムが後退経路についてのレスポンスタイムよりも短ければ、前記送信先デバイスに対するＩ／Ｏコマンドの経路として、前記送信先デバイスについての最適経路を選択する、
請求項１記載のストレージシステム。
【請求項３】
前記プロセッサが、前記送信先デバイスに関し、最適経路経由で発行されたＩ／Ｏコマンドの数と後退経路経由で発行されたＩ／Ｏコマンドの数とを比較し、最適経路についてのレスポンスタイムが後退経路についてのレスポンスタイム以上でも、最適経路についてのＩ／Ｏコマンド数が後退経路についてのＩ／Ｏコマンド数以上であれば、最適経路を選択する、
請求項２記載のストレージシステム。
【請求項４】
前記プロセッサが、前記送信先デバイスに関し、後退経路についてのレスポンスタイムが最適経路についてのレスポンスタイムより短く後退経路についてのＩ／Ｏコマンド数が最適経路についてのＩ／Ｏコマンド数より多ければ、後退経路を選択する、
請求項３記載のストレージシステム。
【請求項５】
前記プロセッサが、前記コマンドがリードコマンドであれば、前記送信先デバイスに関し、最適経路についてのレスポンスタイムと後退経路についてのレスポンスタイムとを比較すること無しに、最適経路を選択する、
請求項２乃至４のうちのいずれか１項に記載のストレージシステム。
【請求項６】
前記第１及び第２のイニシエータデバイスと、前記複数のエクスパンダが、それぞれ、複数のゾーングループを構成する複数のｐｈｙを有し、
前記複数のゾーングループの各々が、同一のエクスパンダ間の物理リンクを挟むｐｈｙ又は同一のエクスパンダ／イニシエータデバイス間の物理リンクを挟むｐｈｙで構成されており、
前記複数のゾーングループのうちの一部のゾーングループは、前記第１及び第２のイニシエータデバイスの各々について、内部処理コマンドが経由しＩ／Ｏコマンドが経由しないゾーングループである内部ゾーンであり、
前記プロセッサにより発行された内部処理コマンドは、前記内部ゾーンを構成するｐｈｙを経由して、その内部処理コマンドの送信先デバイスに届く、
請求項１乃至５のうちのいずれか１項に記載のストレージシステム。
【請求項７】
前記複数のゾーングループのうちの別の一部のゾーングループは、前記第１及び第２のイニシエータデバイスの各々について、Ｉ／Ｏコマンドが経由し内部処理コマンドが経由しないゾーングループであるＩ／Ｏゾーンであり、
同一のエクスパンダ間に関し、Ｉ／Ｏゾーンを構成するｐｈｙの数よりも内部ゾーンを構成するｐｈｙの数の方が小さい、
請求項６記載のストレージシステム。
【請求項８】
前記第１及び第２のイニシエータデバイスと、前記複数のエクスパンダが、それぞれ、複数のゾーングループを構成する複数のｐｈｙを有し、
前記複数のゾーングループのうちの一部のゾーングループは、前記第１のイニシエータデバイスを経由するコマンドが経由し前記第２のイニシエータデバイスを経由するコマンドが経由しないゾーングループである第１ゾーンであり、
前記第１のイニシエータデバイスに近い第１ゾーンを構成するｐｈｙの数よりも前記第１のイニシエータデバイスから遠い第１ゾーンを構成するｐｈｙの数の方が小さい、
請求項１乃至５のうちのいずれか１項に記載のストレージシステム。
【請求項９】
前記複数のゾーングループのうちの別の一部のゾーングループは、前記第２のイニシエータデバイスを経由するコマンドが経由し前記第１のイニシエータデバイスを経由するコマンドが経由しないゾーングループである第２ゾーンであり、
前記第２のイニシエータデバイスに近い第２ゾーンを構成するｐｈｙの数よりも前記第２のイニシエータデバイスから遠い第２ゾーンを構成するｐｈｙの数の方が小さい、
請求項８記載のストレージシステム。
【請求項１０】
直列に接続された複数のエクスパンダであるエクスパンダ列と、
前記エクスパンダ列に直接接続された複数の記憶デバイスと、
前記エクスパンダ列のうちの１つのエクスパンダである第１のエクスパンダに直接接続された第１のイニシエータデバイスと、
前記エクスパンダ列のうちの１つのエクスパンダであり前記第１のエクスパンダとは別のエクスパンダである第２のエクスパンダに直接接続された第２のイニシエータデバイスと、
前記第１及び第２のイニシエータデバイスのうちのいずれかのイニシエータデバイスを介して、前記複数の記憶デバイス及び前記複数のエクスパンダのうちの、コマンドの送信先デバイスに、前記コマンドを送信するプロセッサと
を有し、
前記プロセッサが、前記送信先デバイスについて、前記送信先デバイスとの間のエクスパンダが少ない方のイニシエータデバイスである最適経路と、前記送信先デバイスとの間のエクスパンダが多い方のイニシエータデバイスである後退経路とのうち、前記最適経路を選択し、前記選択した最適経路経由で、前記コマンドを、前記送信先デバイスに送信するようになっており、
前記プロセッサが送信するコマンドとして、記憶デバイスに対してデータを入出力するＩ／Ｏコマンドと、データの入出力とは異なる処理をエクスパンダ又は記憶デバイスに行なわせる制御コマンドである内部処理コマンドとがあり、
前記第１及び第２のイニシエータデバイスと、前記複数のエクスパンダが、それぞれ、複数のゾーングループを構成する複数のｐｈｙを有し、
前記複数のゾーングループの各々が、１以上のｐｈｙで構成されており、
前記複数のゾーングループのうちの一部のゾーングループは、前記第１及び第２のイニシエータデバイスの各々について、内部処理コマンドが経由しＩ／Ｏコマンドが経由しないゾーングループである内部ゾーンであり、
前記プロセッサにより発行された内部処理コマンドは、前記内部ゾーンを構成するｐｈｙを経由して、その内部処理コマンドの送信先デバイスに届き、
前記複数のゾーングループのうちの別の一部のゾーングループは、前記第１及び第２のイニシエータデバイスの各々について、Ｉ／Ｏコマンドが経由し内部処理コマンドが経由しないゾーングループであるＩ／Ｏゾーンであり、
同一のエクスパンダ間に関し、Ｉ／Ｏゾーンを構成するｐｈｙの数よりも内部ゾーンを構成するｐｈｙの数の方が小さい、
ストレージシステム。
【請求項１１】
直列に接続された複数のエクスパンダであるエクスパンダ列と、前記エクスパンダ列に直接接続された複数の記憶デバイスと、前記エクスパンダ列のうちの１つのエクスパンダである第１のエクスパンダに直接接続された第１のイニシエータデバイスと、前記エクスパンダ列のうちの１つのエクスパンダであり前記第１のエクスパンダとは別のエクスパンダである第２のエクスパンダに直接接続された第２のイニシエータデバイスとを有するストレージシステムの記憶制御方法であって、
（Ａ）前記複数の記憶デバイス及び前記複数のエクスパンダのうちの、コマンドの送信先デバイスについて、前記送信先デバイスとの間のエクスパンダが少ない方のイニシエータデバイスである最適経路と、前記送信先デバイスとの間のエクスパンダが多い方のイニシエータデバイスである後退経路とのうち、前記最適経路を選択し、
（Ｂ）前記送信先デバイスについて、前記選択した最適経路経由で、前記コマンドを、前記送信先デバイスに送信し、
コマンドとして、記憶デバイスに対してデータを入出力するＩ／Ｏコマンドと、データの入出力とは異なる処理をエクスパンダ又は記憶デバイスに行なわせる制御コマンドである内部処理コマンドとがあり、
前記第１のイニシエータデバイスの負荷は、前記第１のイニシエータデバイスから発行されたＩ／Ｏコマンドの数であり、
前記第２のイニシエータデバイスの負荷は、前記第２のイニシエータデバイスから発行されたＩ／Ｏコマンドの数であり、
前記第１のイニシエータデバイスの負荷が第２のイニシエータデバイスの負荷より小さければ、（Ａ）において、前記第１のイニシエータデバイスが最適経路であるデバイスに対する内部処理コマンドの経路として、前記第１のイニシエータデバイスを選択し、（Ｂ）において、その内部処理コマンドを、その選択した第１のイニシエータデバイス経由で送信し、
前記第１のイニシエータデバイスの負荷が第２のイニシエータデバイスの負荷以上になったならば、前記第１のイニシエータデバイスが最適経路であるデバイスに対する内部処理コマンドを前記第１のイニシエータデバイス経由で送信することを止め、（Ａ）において、前記第２のイニシエータデバイスが最適経路であるデバイスに対する内部処理コマンドの経路として、前記第２のイニシエータデバイスを選択し、（Ｂ）において、その内部処理コマンドを、その選択した第２のイニシエータデバイス経由で送信する、
記憶制御方法。
【請求項１２】
直列に接続された複数のエクスパンダであるエクスパンダ列と、前記エクスパンダ列に直接接続された複数の記憶デバイスと、前記エクスパンダ列のうちの１つのエクスパンダである第１のエクスパンダに直接接続された第１のイニシエータデバイスと、前記エクスパンダ列のうちの１つのエクスパンダであり前記第１のエクスパンダとは別のエクスパンダである第２のエクスパンダに直接接続された第２のイニシエータデバイスとを有するストレージシステムの記憶制御方法であって、
（Ａ）前記複数の記憶デバイス及び前記複数のエクスパンダのうちの、コマンドの送信先デバイスについて、前記送信先デバイスとの間のエクスパンダが少ない方のイニシエータデバイスである最適経路と、前記送信先デバイスとの間のエクスパンダが多い方のイニシエータデバイスである後退経路とのうち、前記最適経路を選択し、
（Ｂ）前記送信先デバイスについて、前記選択した最適経路経由で、前記コマンドを、前記送信先デバイスに送信し、
プロセッサが送信するコマンドとして、記憶デバイスに対してデータを入出力するＩ／Ｏコマンドと、データの入出力とは異なる処理をエクスパンダ又は記憶デバイスに行なわせる制御コマンドである内部処理コマンドとがあり、
前記第１及び第２のイニシエータデバイスと、前記複数のエクスパンダが、それぞれ、複数のゾーングループを構成する複数のｐｈｙを有し、
前記複数のゾーングループの各々が、１以上のｐｈｙで構成されており、
前記複数のゾーングループのうちの一部のゾーングループは、前記第１及び第２のイニシエータデバイスの各々について、内部処理コマンドが経由しＩ／Ｏコマンドが経由しないゾーングループである内部ゾーンであり、
前記内部処理コマンドは、前記内部ゾーンを構成するｐｈｙを経由して、その内部処理コマンドの送信先デバイスに届き、
前記複数のゾーングループのうちの別の一部のゾーングループは、前記第１及び第２のイニシエータデバイスの各々について、Ｉ／Ｏコマンドが経由し内部処理コマンドが経由しないゾーングループであるＩ／Ｏゾーンであり、
同一のエクスパンダ間に関し、Ｉ／Ｏゾーンを構成するｐｈｙの数よりも内部ゾーンを構成するｐｈｙの数の方が小さい、
記憶制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、記憶制御に関し、例えば、複数のＳＡＳ（Serial  Attached  SCSI）エクスパンダを介してターゲットデバイスにコマンドを送信する技術に関する。
【背景技術】
【０００２】
複数のＳＡＳエクスパンダ（以下、エクスパンダ）を有するストレージシステムが知られている。この種のストレージシステムでは、エクスパンダに記憶デバイスが接続されており、イニシエータデバイスから記憶デバイスへのコマンドが、複数のエクスパンダを経由する。【０００３】
この種のストレージシステムが、例えば特許文献１に開示されている。特許文献１によれば、直列に接続された複数のエクスパンダの両端にイニシエータデバイスが接続される（例えば図１０参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第８３２１５９６号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ストレージシステムの大容量化が進むと、記憶デバイスの数が増え、それ故、直列に接続されるエクスパンダの数も増やす必要がある。また、より高速な応答速度をもつ記憶デバイスも登場してきている。以下、便宜上、直列に接続された複数のエクスパンダを「エクスパンダ列」と言う。【０００６】
エクスパンダの数が多いエクスパンダ列において、応答速度が比較的遅い記憶デバイス（ＳＡＴＡ（Serial  ATA）−ＨＤＤ（Hard  Disk  Drive））が比較的後段のエクスパンダに接続されていても、コマンド発行側（例えば、コマンドを発行したマイクロプロセッサ）への影響は小さい。なぜなら、そのような記憶デバイスの応答速度よりも、その記憶デバイスへのコマンドが経由するエクスパンダの数に基づくレイテンシの方が、影響が小さいからである。すなわち、応答速度が比較的遅い記憶デバイスが、比較的前段のエクスパンダに接続されていても比較的後段のエクスパンダに接続されていても、コマンド発行側にとってのレスポンスタイムは、記憶デバイスの応答速度に基づくレスポンスタイムである。【０００７】
しかし、エクスパンダの数が多いエクスパンダ列において、応答速度が比較的速い記憶デバイス（例えばＳＳＤ（Solid  State  Drive））が比較的後段のエクスパンダに接続されていると、コマンド発行側への影響は大きい。具体的には、コマンド発行側には、記憶デバイスの性能が劣化しているように見える。なぜなら、そのような記憶デバイスの応答速度よりも、その記憶デバイスへのコマンドが経由するエクスパンダの数に基づくレイテンシの方が、影響が大きいからである。
【課題を解決するための手段】
【０００８】
ストレージシステムが、直列に接続された複数のエクスパンダであるエクスパンダ列と、エクスパンダ列に接続された複数の記憶デバイスと、エクスパンダ列に接続された第１及び第２のイニシエータデバイスと、プロセッサとを有する。プロセッサが、複数の記憶デバイス及び前記複数のエクスパンダのうちの、コマンドの送信先デバイスについて、送信先デバイスとの間のエクスパンダが少ない方のイニシエータデバイスである最適経路と、送信先デバイスとの間のエクスパンダが多い方のイニシエータデバイスである後退経路とのうち、最適経路を選択し、選択した最適経路経由で、コマンドを、送信先デバイスに送信する。
【発明の効果】
【０００９】
エクスパンダ列の長さによるレイテンシを軽減することができる。
【図面の簡単な説明】
【００１０】
【図１】実施例１の概要を示す。
【図２】実施例１に係る計算機システムの構成を示す。
【図３】実施例１に係るストレージコントローラのメモリが記憶する複数のテーブルを示す。
【図４】実施例１に係るターゲット管理テーブルの構成を示す。
【図５Ａ】実施例１に係るアクセス経路管理テーブルの構成を示す。
【図５Ｂ】図５Ａに示したテーブルのレコードがターゲットデバイスの応答速度の速い順に並び替えられた結果を示す。
【図６】実施例１に係るホストＩ／Ｏ管理テーブルの構成を示す。
【図７】実施例１に係るエクスパンダの構成を示す。
【図８】実施例１に係るターゲット管理テーブル作成処理の流れを示す。
【図９】実施例１に係るアクセス経路管理テーブル作成処理の流れを示す。
【図１０】実施例１に係るホストＩ／Ｏ管理テーブル作成処理の流れを示す。
【図１１】実施例１に係るＩ／Ｏコマンド送信処理の流れを示す。
【図１２】実施例１に係る内部処理コマンド送信処理の流れを示す。
【図１３】実施例２の概要を示す。
【図１４】実施例２に係るＭＰ、コントローラ及びエクスパンダがそれぞれ管理する情報の概要を示す。
【図１５】実施例２に係るゾーンパーミッションテーブルの構成を示す。
【図１６】実施例２に係る内部処理コマンド送信処理の流れを示す。
【図１７Ａ】実施例２に係るオンライン時設定処理の全体的な流れを示す。
【図１７Ｂ】実施例２に係るオフライン時設定処理の全体的な流れを示す。
【図１８】実施例３の概要を示す。
【図１９】実施例３に係るゾーニングテーブルの構成を示す。
【図２０】実施例３に係るゾーンパーミッションテーブルの構成を示す。
【図２１】実施例１に係る計算機システムの構成の第１の変形例を示す。
【図２２】実施例１に係る計算機システムの構成の第２の変形例を示す。
【図２３】実施例２と実施例３の組合せの一例を示す。
【発明を実施するための形態】
【００１１】
以下、幾つかの実施例を説明する。
【００１２】
以下の説明では、「×××テーブル」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「×××テーブル」を「×××情報」と呼ぶことができる。
【００１３】
以下の説明では、ストレージシステムを管理し表示用情報を表示する１以上の計算機の集合を「管理システム」と呼ぶ。例えば、表示用情報を表示する管理計算機が管理システムであってもよいし、管理計算機と管理計算機からの表示用情報を表示する表示用計算機との組み合わせが管理システムであってもよい。管理計算機による「表示用情報を表示する」とは、管理計算機が有する表示デバイスに表示用情報を表示することであってもよいし、管理計算機（例えばサーバ）が遠隔の表示用計算機（例えばクライアント）に表示用情報を送信することであってもよい。また、管理処理の高速化や高信頼化のために複数の計算機で管理計算機と同等の処理を実現してもよく、この場合は当該複数の計算機（表示を表示用計算機が行う場合は表示用計算機も含め）が管理システムでよい。
【００１４】
また、以下の説明では、同種の要素を区別して説明する場合は、その要素の参照符号に代えて、その要素に割り振られた識別子（例えばアルファベット）を使用することがある。例えば、記憶デバイスを特に区別しないで説明する場合には、記憶デバイス１４２と記載し、個々の記憶デバイスを区別して説明する場合には、記憶デバイスＡ、記憶デバイスＢのように記載することがある。
【００１５】
また、以下の説明における用語の意味は、下記の通りである。
・「エクスパンダ」は、ＳＡＳエクスパンダの略であり、スイッチデバイスの一種である。エクスパンダは、複数のｐｈｙを有する。
・「エクスパンダ列」は、直列に接続された複数のエクスパンダである。
・「ｐｈｙ」は、エクスパンダが有する物理ポート（通信ポート）である。１つのｐｈｙには、１つのデバイスが接続され、そのデバイスは、例えば、別のエクスパンダ、又は、記憶デバイスである。
・「イニシエータデバイス」は、コマンドの送信元になり得るデバイスである。
・「ターゲットデバイス」は、コマンドの送信先になり得るデバイスである。本実施例では、ターゲットデバイスは、典型的には、記憶デバイスであるが、コマンドの種類によってはエクスパンダがターゲットデバイスになることもある。
・「ゾーニング」は、物理的な構成（例えばトポロジー）を論理的に区切る技術である。ＳＡＳの仕様によれば、複数のゾーングループ（ゾーン）を定義することができる。１つのゾーングループに、１以上のｐｈｙを割り当てることができる。例えば、１つのエクスパンダにおける１以上のｐｈｙを或るゾーングループに割り当て、そのエクスパンダにおける別のｐｈｙを別のゾーングループに割り当てることができる。
・イニシエータデバイスとターゲットデバイスとを含んだトポロジーにおける「接続」は、具体的には、「直接接続」と「間接接続」がある。「直接接続」は、エクスパンダを介さない接続であり、「間接接続」は、１以上のエクスパンダを介した接続である。典型的には、ターゲットデバイスは、イニシエータデバイスに間接接続され、エクスパンダには、間接接続されることもあれば直接接続されることもある。以下の説明では、直接接続であるか間接接続であるかが図面或いは技術常識から明らかな場合は、単に「接続」と言うことがある。
【実施例１】
【００１６】
図１は、実施例１の概要を示す。【００１７】
ストレージシステム１０５が、エクスパンダ列と、エクスパンダ列の両端に接続されたＳＡＳコントローラ（以下、コントローラ）Ａ及びＢと、マイクロプロセッサ（以下、ＭＰ）１２６とを有する。各コントローラ１２４は、ＳＡＳプロトコルに従いコマンドを送信することができるイニシエータデバイスの一例である。【００１８】
エクスパンダ列は、前述したように、直列に接続された複数のエクスパンダ１３１であり、例えば、直列に接続されたエクスパンダＡ、Ｂ及びＣである。エクスパンダＡが、エクスパンダ列の一端であり、エクスパンダＣが、エクスパンダ列の他端である。エクスパンダＡにコントローラＡが接続されており、エクスパンダＣにコントローラＢが接続されている。【００１９】
エクスパンダ列に、複数の記憶デバイス１４２が接続されている。例えば、エクスパンダＡに、記憶デバイスＡ及びＤが直接接続されており、エクスパンダＢに、記憶デバイスＥ及びＦが直接接続されており、エクスパンダＣに、記憶デバイスＢ及びＣが直接接続されている。【００２０】
コントローラ１２４とエクスパンダ１３１、及び、エクスパンダ１３１とエクスパンダ１３１は、それぞれ、ワイドリンク（例えば４本の物理リンクの集合である論理リンク）で直接接続され、記憶デバイス１４２とエクスパンダ１３１は、１本のリンクで直接接続される。【００２１】
ＭＰ１２６は、コントローラＡ及びＢに接続されている。ＭＰ１２６は、コントローラＡ及びＢのどちらからコマンドを送信してよい。コントローラＡ又はＢを経由してエクスパンダ列へと出るコマンドとしては、Ｉ／Ｏ（Input/Output）コマンドと、内部処理コマンドとがある。Ｉ／Ｏコマンドは、記憶デバイス１４２に対するライトコマンド又はリードコマンドである。内部処理コマンドは、記憶デバイス１４２又はエクスパンダ１３１に対する制御コマンドである。内部処理コマンドとしては、例えば、リンクダウン等のエラーの有無をチェックするためのヘルスチェックコマンド、エクスパンダ１３１に接続されているファンの回転数を制御するためのコマンド等である。通常、Ｉ／Ｏコマンドに従い送受信されるデータよりも、内部制御コマンドの方がサイズが小さい。【００２２】
ターゲットデバイスへの経路としては、コントローラＡをイニシエータデバイスとする経路（以下、経路Ａ）とコントローラＢをイニシエータデバイスとする経路（以下、経路Ｂ）の２つがある。ＭＰ１２６は、ターゲットデバイス毎に、最適経路と後退経路とを管理する。「最適経路」は、典型的には、短距離経路、すなわち、イニシエータデバイスとターゲットデバイスとの間に介在するエクスパンダが少ない方の経路である。一方、「後退経路」は、典型的には、長距離経路、すなわち、イニシエータデバイスとターゲットデバイスとの間に介在するエクスパンダが多い方の経路である。なお、ターゲットデバイスによっては、後退経路であっても、イニシエータデバイスとターゲットデバイスとの間に介在するエクスパンダの数が、最適経路と同じである場合もある。図１の例によれば、記憶デバイスＡについては、経路Ａが最適経路であり（すなわち、コントローラＡが最適経路でのイニシエータデバイスであり）、経路Ｂが後退経路である（すなわち、コントローラＢが後退経路でのイニシエータデバイスである）。また、図１の例によれば、記憶デバイスＥ及びＦの各々については、経路Ａ及びＢのどちらが最適経路でもよい。ここでは、記憶デバイスＥについては、経路Ｂが最適経路であり、記憶デバイスＦについては、経路Ａが最適経路であるとする。【００２３】
ＭＰ１２６は、コマンド（特にＩ／Ｏコマンド）のターゲットデバイス（記憶デバイス）に対応した最適経路をそのターゲットデバイスの後退経路よりも優先的に選択し、選択した最適経路からコマンドを送信する。図１の例によれば、Ｉ／Ｏコマンドのターゲットデバイスが記憶デバイスＡの場合、そのＩ／Ｏコマンドは経路Ａ経由で送信される（図１の一点鎖線矢印を参照）。また、図１には示さないが、Ｉ／Ｏコマンドのターゲットデバイスが記憶デバイスＢの場合、そのＩ／Ｏコマンドは経路Ｂ経由で送信される。【００２４】
このように、エクスパンダ列の両端にイニシエータデバイスが接続され、ターゲットデバイス毎に、ターゲットデバイスまでの距離（介在するエクスパンダの数）がより短い最適経路（イニシエータデバイス）が選択され、最適経路経由でコマンドが送信される。これにより、エクスパンダ列の長さ（エクスパンダの段数）による影響が実質半分程度に減り、その結果、エクスパンダ列の長さによるレイテンシを軽減することができる。【００２５】
また、ＭＰ１２６は、内部処理コマンドについては、Ｉ／Ｏコマンドの処理（Ｉ／Ｏコマンドの送信と、そのＩ／Ｏコマンドのレスポンスの受信）を妨げないよう、内部処理コマンドを送信する。例えば、ＭＰ１２６は、Ｉ／Ｏコマンドの送信に関して経路Ｂの負荷よりも経路Ａの負荷が高い場合（例えば、経路Ｂ経由で送信するＩ／Ｏコマンドの数よりも経路Ａ経由で送信するＩ／Ｏコマンドの数の方が多い場合）、経路Ｂが最適経路であるターゲットデバイスに対する内部処理コマンドを、経路Ａが最適経路であるターゲットデバイスに対する内部処理コマンドよりも優先的に経路Ｂ経由で送信する（図１の破線矢印を参照）。なお、ＭＰ１２６は、Ｉ／Ｏコマンドについては、そのＩ／Ｏコマンドのターゲットデバイスに対応した最適経路を選択し、内部処理コマンドについては、その内部処理コマンドのターゲットデバイスに対応した後退経路を選択してもよい。しかし、本実施例では、ＭＰ１２６は、内部処理コマンドについてもその内部処理コマンドのターゲットデバイスに対応した最適経路を優先的に選択する。これにより、内部処理コマンドのターゲットデバイスに対応した後退経路のイニシエータデバイスを最適経路とするターゲットデバイスへのＩ／Ｏコマンドの処理の性能が劣化することを避けることが期待できる。【００２６】
以下、実施例１を詳述する。【００２７】
図２は、実施例１に係る計算機システムの構成を示す。【００２８】
計算機システムは、複数（又は１つ）のホスト計算機（以下、ホスト）１０１と、ストレージシステム１０５と、管理システム１０３とを有する。ホスト１０１とストレージシステム１０５が、ＳＡＮ（Storage  Area  Network）１０２に接続され、管理システム１０３とストレージシステム１０５が、ＬＡＮ（Local  Area  Network）１０４に接続される。ＳＡＮ１０２及びＬＡＮ１０４の各々に代えて別種の通信ネットワークが採用されてもよいし、ホスト１０１、管理システム１０３及びストレージシステム１０５が同一の通信ネットワークに接続されてもよい。【００２９】
ホスト１０１は、ストレージシステム１０５にユーザデータのＩ／Ｏリクエストを送信する。ユーザデータは、ホスト１０１で使用されるデータである。Ｉ／Ｏリクエストは、Ｉ／Ｏ先の場所を表すＩ／Ｏ先情報を含む。Ｉ／Ｏ先情報は、例えば、Ｉ／Ｏ先のＬＵ（Logical  Unit）のＬＵＮ（Logical  Unit  Number）と、そのＬＵにおける領域のＬＢＡ（Logical  Block  Address）とを含む。ＬＵは、ストレージシステム１０５から提供される論理的な記憶デバイスである。【００３０】
管理システム１０３は、ストレージシステム１０５を管理する１以上の計算機である。管理システム１０３からストレージシステム１０５に対して種々の設定をすることができる。【００３１】
ストレージシステム１０５は、ユーザデータ等のデータを記憶する記憶部と、記憶部に対するデータのＩ／Ｏを制御するコントローラ部とを有する。コントローラ部は、例えば、基本筐体１０６を有し、記憶部は、例えば、複数の増設筐体１０７を有する。基本筐体１０６には、二重化されたストレージコントローラ１２０（第１のストレージコントローラＡ及び第２のストレージコントローラＢ）が格納される。増設筐体１０７には、二重化されたエクスパンダ（第１及び第２のエクスパンダ）１３１と、二重化されたエクスパンダ１３１の両方に接続される記憶デバイス群１４１とが格納される。記憶デバイス群１４１は、１以上の記憶デバイス（物理的な記憶デバイス）１４２であり、各記憶デバイス１４２が、二重化されたエクスパンダ１３１の両方に接続される。複数の増設筐体１０７がそれぞれ有する複数の第１のエクスパンダ１３１（エクスパンダＡ、Ｂ及びＣ）が直列に接続されることで、第１のエクスパンダ列が構成され、複数の増設筐体１０７がそれぞれ有する複数の第２のエクスパンダ１３１（エクスパンダＤ、Ｅ及びＦ）が直列に接続されることで、第２のエクスパンダ列が構成される。つまり、二重化されたエクスパンダ列が構成される。具体的には、第１のエクスパンダ列については、ターゲットデバイスへの経路として、図１を参照して説明したように、コントローラＡがイニシエータデバイスとなる経路Ａと、コントローラＢがイニシエータデバイスとなる経路Ｂがあり、第２のエクスパンダ列については、ターゲットデバイスへの経路として、コントローラＣがイニシエータデバイスとなる経路Ｃと、コントローラＤがイニシエータデバイスとなる経路Ｄがある。【００３２】
以下、ストレージコントローラＡを例に取り、ストレージコントローラ１２０の構成を説明する。なお、以下の説明では、通信インタフェースデバイスを「Ｉ／Ｆ」と略記する。【００３３】
ストレージコントローラＡは、ＣＨＡ（チャネルアダプタ）１２１と、データＣＴＬ（データコントローラ）１２２と、ＤＫＡ（ディスクアダプタ）１２３と、ＬＡＮ  Ｉ／Ｆ１２５と、ＭＰ（マイクロプロセッサ）１２６と、メモリ１２７とを有する。【００３４】
ＣＨＡ１２１は、フロントエンドのＩ／Ｆの一例であり、ＳＡＮ１０２を介してホスト１０１と通信するＩ／Ｆである。ＣＨＡ１２１は、ホスト１０１からＩ／Ｏリクエストを受信する。【００３５】
データＣＴＬ１２２は、ストレージコントローラＡ内の構成要素間のデータ転送を制御する回路である。例えば、データＣＴＬ１２２は、ＣＨＡ１２１が受信したＩ／ＯリクエストをＭＰ１２６に転送する。【００３６】
ＤＫＡ１２３は、バックエンドのＩ／Ｆの一例であり、ＳＡＮプロトコルに従い記憶デバイス１４２と通信するＩ／Ｆである。本実施例では、第１のエクスパンダ列の両端に接続された２つのコントローラ（ＳＡＳコントローラ）１２４をそれぞれ有する２つのＤＫＡ１２３が、ストレージコントローラＡに備えられる。【００３７】
ＬＡＮ  Ｉ／Ｆ１２５は、ＬＡＮ１０４を介して管理システム１０３と通信するＩ／Ｆである。【００３８】
ＭＰ１２６は、ＣＨＡ１２１が受信したＩ／Ｏリクエストを処理する。具体的には、例えば、ＭＰ１２６は、そのＩ／ＯリクエストのＩ／Ｏ先に基づきデータのＩ／Ｏ先となる１又は複数の記憶デバイス１４２を特定し、特定した各記憶デバイス１４２にＩ／Ｏコマンドを送信する。そのＩ／Ｏコマンドに従い１つの記憶デバイス１４２に対して書き込まれる又は読み出されるデータは、ユーザデータ、ユーザデータの一部、又は、パリティでよい。ＭＰ１２６は、Ｉ／Ｏリクエストに従い１又は複数の記憶デバイス１４２に対して書き込まれる又は読み出されたユーザデータをメモリ１２７にキャッシュする。【００３９】
メモリ１２７は、１以上のメモリの集合でよく、揮発性のメモリ及び不揮発性のメモリのうちの少なくとも１つを含んでよい。メモリ１２７は、１又は複数の記憶デバイス１４２に対して書き込まれる又は読み出されたユーザデータのキャッシュ領域を含む。また、メモリ１２７は、複数のテーブルを記憶する。【００４０】
ＭＰ１２６が１つのストレージコントローラ１２０に複数存在してもよい。この場合、メモリ１２７の少なくとも一部領域が、複数のＭＰ１２６にとっての共有メモリ領域であってもよい。また、この場合、前述の複数のテーブルが、共有メモリ領域に記憶され、各ＭＰ１２６が各テーブルを参照可能でもよい。【００４１】
図３は、メモリ１２７が記憶する複数のテーブルを示す。【００４２】
メモリ１２７は、ターゲット管理テーブル２０１、アクセス経路管理テーブル２０２及びホストＩ／Ｏ管理テーブル２０３を記憶する。ターゲット管理テーブル２０１は、ターゲットデバイスに関する情報を有するテーブルであり、アクセス経路管理テーブル２０２は、ターゲットデバイス毎の最適経路及び後退経路を管理するテーブルであり、ホストＩ／Ｏ管理テーブル２０３は、エクスパンダ列の一端からの経路とエクスパンダ列の他端からの経路との各々についての負荷に関する情報を有する。【００４３】
図４は、ターゲット管理テーブル２０１の構成を示す。【００４４】
ターゲット管理テーブル２０１は、コントローラ１２４毎に、レコード群を有する。１つのレコード群は、記憶デバイス毎にレコードを有する。１つのレコードは、コントローラ４０１、段数Ｎ４０２、エクスパンダ４０３、ターゲット４０４、ターゲット種別４０５、リンクレート４０６及び最大リンクレート４０７を有する。コントローラ４０１は、記憶デバイスを検出したコントローラ１２４の識別情報である。段数Ｎ４０２は、そのコントローラ１２４により検出されたエクスパンダの段数を表す情報である。エクスパンダの段数は、そのコントローラ１２４から数えた場合の数（Ｎ番目）である。エクスパンダ４０３は、そのコントローラ１２４により検出されたエクスパンダの識別情報（例えば割り当てられたＳＡＳアドレス）である。ターゲット４０４は、そのコントローラ１２４により検出された記憶デバイスの識別情報（例えば割り当てられたＳＡＳアドレス）である。ターゲット種別４０５は、そのコントローラ１２４により検出された記憶デバイスの種別を表す情報である。リンクレート４０６は、記憶デバイスのリンクレート（記憶デバイスが所定のコマンド（例えばモードセンスコマンド）を受信し応答する時点でのリンクレート）を表す情報である。最大リンクレート４０７は、記憶デバイスの最大リンクレートを表す情報である。【００４５】
図４によれば、コントローラＡにとっては、最前段のエクスパンダはエクスパンダＡであり最後段のエクスパンダがエクスパンダＣであり、コントローラＢにとっては、その逆、すなわち、最前段のエクスパンダはエクスパンダＣであり最後段のエクスパンダがエクスパンダＡである。【００４６】
ターゲット管理テーブル２０１を基に、アクセス経路管理テーブル２０２及びホストＩ／Ｏ管理テーブル２０３が作成される。ターゲット管理テーブル２０１は、アクセス経路管理テーブル２０２及びホストＩ／Ｏ管理テーブル２０３が作成された後、メモリ１２７から削除されてもよい。【００４７】
図５Ａは、アクセス経路管理テーブル２０２の構成を示す。【００４８】
アクセス経路管理テーブル２０２は、記憶デバイス毎にレコードを有する。１つのレコードは、ターゲット５０１、最適経路５０２及び後退経路５０３を有する。ターゲット５０１は、記憶デバイスの識別情報（例えば割り当てられたＳＡＳアドレス）である。最適経路５０２は、記憶デバイスから近い方の（介在するエクスパンダの数が少ない方の）コントローラ（イニシエータデバイス）の識別情報（例えば割り当てられたＳＡＳアドレス）である。後退経路５０３は、記憶デバイスから遠い方の（介在するエクスパンダの数が多い方の）コントローラの識別情報である。【００４９】
アクセス経路管理テーブル２０２のレコードは、例えば図５Ｂに示すように、記憶デバイス（ターゲットデバイス）の応答速度の速い順に並び変えられてもよい。また、少なくとも１つのターゲットデバイスについて、最適経路５０２及び後退経路５０３のうちの少なくとも一方が無くてよい。例えば、最適経路５０２のコントローラがわかれば、後退経路５０３は残りのコントローラである。【００５０】
図６は、ホストＩ／Ｏ管理テーブル２０３の構成を示す。【００５１】
ホストＩ／Ｏ管理テーブル２０３は、コントローラ１２４毎に、レコード群を有する。１つのレコード群は、エクスパンダ毎にサブレコード群を有する。１つのサブレコード群は、記憶デバイス種別（ターゲット種別）毎にレコードを有する。１つのレコードは、コントローラ６０１、エクスパンダ６０２、ターゲット種別６０３、Ｉ／Ｏ数６０４、平均レスポンスタイム６０５、リンクレート６０６及び内部処理コマンド数６０７を有する。コントローラ６０１は、コントローラ１２４の識別情報（例えば割り当てられたＳＡＳアドレス）である。エクスパンダ６０２は、そのコントローラ１２４により検出されたエクスパンダ１３１の識別情報である。ターゲット種別６０３は、記憶デバイスの種別を表す情報である。Ｉ／Ｏ数６０４は、記憶デバイス種別に属する記憶デバイスに対応したＩ／Ｏコマンド数の和である。平均レスポンスタイム６０５は、記憶デバイス種別に属する記憶デバイスに対応したレスポンスタイムの平均である。リンクレート４０６は、記憶デバイス種別に属する記憶デバイスに対応したリンクレート４０６の平均である。内部処理コマンド数４０７は、記憶デバイス種別に属する記憶デバイスに対応した内部処理コマンド数の和である。コントローラＡ（Ｂ）経由で記憶デバイスにＩ／Ｏコマンドが送信される場合に、ＭＰ  Ａが、コントローラＡ（Ｂ）とその記憶デバイスが直接接続されているエクスパンダとその記憶デバイスのターゲット種別とに対応したＩ／Ｏ数６０４を更新する。なお、コントローラＡ（Ｂ）に対応した「All  Expander」は、コントローラＡ（Ｂ）に対応した「Expander  A」から「Expander  C」についての集計結果であるが、コントローラＡ（Ｂ）に対応した「All  Expander」についても、Ｉ／Ｏ数６０４が更新される。同様に、コントローラＡ（Ｂ）経由で記憶デバイスに内部処理コマンドが送信される場合に、ＭＰ  Ａが、コントローラＡ（Ｂ）とその記憶デバイスが直接接続されているエクスパンダとその記憶デバイスのターゲット種別とに対応した内部処理コマンド数６０７を更新する（また、コントローラＡ（Ｂ）に対応した「All  Expander」についても、内部処理コマンド数６０７が更新される）。【００５２】
図６によれば、エクスパンダ６０２によっては、平均レスポンスタイム６０５が「−」となるターゲット種別６０３がある。これは、そのエクスパンダ６０２から特定されるエクスパンダに、そのターゲット種別６０３が表す種別に属する記憶デバイスが直接接続されていないことを意味する。例えば、エクスパンダＡに、ＳＡＳ−ＨＤＤが接続されているがＳＡＴＡ−ＨＤＤもＳＳＤも直接接続されていないことがわかる。これは、このテーブル２０３の基になるターゲット管理テーブル２０１（図４参照）からも明らかである。【００５３】
また、図６によれば、コントローラＡ経由のターゲットでありエクスパンダＡに接続されている２つのＳＡＳ−ＨＤＤ（記憶デバイスＡ及びＤ）について、合計で６００個のＩ／Ｏコマンドがあり（Ｉ／Ｏ数６０４「６００」）、平均レスポンスタイムが６ミリ秒であり（平均レスポンスタイム６０５「６」）、リンクレートの平均が６Ｇｂ／ｓであり（リンクレート６０６「６」）、合計で１５個の内部処理コマンドがある（内部処理コマンド数６０７「１５」）ことがわかる。また、図６によれば、コントローラＢ経由のターゲットでありエクスパンダＡに接続されている２つのＳＡＳ−ＨＤＤ（記憶デバイスＡ及びＤ）について、合計で１００個のＩ／Ｏコマンドがあり（Ｉ／Ｏ数６０４「１００」）、平均レスポンスタイムが７ミリ秒であり（平均レスポンスタイム６０５「７」）、リンクレートの平均が６Ｇｂ／ｓであり（リンクレート６０６「６」）、内部処理コマンドが１つもない（内部処理コマンド数６０７「０」）ことがわかる。【００５４】
なお、図６によれば、コントローラ１２３毎に、エクスパンダ６０２として、「All  Expander」がある。これは、エクスパンダＡ〜Ｃに対応した情報６０４〜６０７の各々についての統計である。例えば、コントローラＡのエクスパンダ６０２「All  Expander」に対応したターゲット種別６０３「ＳＡＳ」について、Ｉ／Ｏ数６０４は、エクスパンダＡ〜ＣのＩ／Ｏ数６０４の和であり、平均レスポンスタイム６０５は、エクスパンダＡ及びＢの平均レスポンスタイム６０５の平均であり（エクスパンダＣについて平均レスポンスタイム６０５は「−」であるため除かれる）、リンクレート６０６は、エクスパンダＡ〜Ｃのリンクレート６０６の平均であり、内部処理コマンド数６０７は、エクスパンダＡ〜Ｃの内部処理コマンド数６０７の和である。【００５５】
また、図６によれば、各エクスパンダにつき、ターゲット種別毎に集計が行われるが、それに代えて、各エクスパンダにつき、ターゲットデバイス毎に、Ｉ／Ｏ数、平均レスポンスタイム、リンクレート及び内部処理コマンド数がホストＩ／Ｏ管理テーブル２０３に記録されてよい。【００５６】
図７は、エクスパンダ１３１の構成を示す。【００５７】
エクスパンダ１３１は、例えばＬＳＩ（Large  Scale  Integration）である。エクスパンダ１３１は、デバイスＩ／Ｆ７０１と、スイッチ回路７０３と、メモリ７２１と、ＭＰ７０４と、ＦＭ（フラッシュメモリ）７０５と、ファンＩ／Ｆ７０６とを有する。増設筐体１０７に、ファン７０７が格納されており、そのファン７０７がファンＩ／Ｆ７０６に接続される。【００５８】
デバイスＩ／Ｆ７０１は、デバイスと通信する。ここで言う「デバイス」は、記憶デバイス１４２又は別のエクスパンダ１３１である。デバイスＩ／Ｆ７０１は、複数のＰｈｙ（物理ポート）７１１で構成されている。複数のｐｈｙ７１１は、記憶デバイス１４２が直接接続されるｐｈｙ７１１と、別のエクスパンダ１３１が直接接続されるｐｈｙ７１１とを含む。エクスパンダ１３１が最前段のエクスパンダ１３１の場合、複数のｐｈｙ７１１は、コントローラ１２４が直接接続されるｐｈｙを含む。【００５９】
スイッチ回路７０３は、ルーティングを行うハードウェア回路である。スイッチ回路７０３には、複数のＰｈｙ７１１とＭＰ７０４とが接続されている。スイッチ回路７０３は、メモリ７２１を有し、メモリ７２１が、エクスパンダルートテーブル７３１及び直接デバイステーブル７３２を記憶する。ルーティングは、それらテーブル７３１及び７３２を基に行われる。ルーティングテーブル７３１は、ｐｈｙ毎に、ｐｈｙ経由でアクセス可能なデバイス（エクスパンダ又は記憶デバイス）の識別情報（例えば割り当てられたＳＡＳアドレス）を有する。直接デバイステーブル７３２は、直接接続されているデバイスの識別情報（例えばＳＡＳアドレス）とｐｈｙの識別情報（例えば番号）との対応関係を有する。【００６０】
メモリ７２１は、情報及びコンピュータプログラム、例えば、デバイスＩ／Ｆ情報７４１、及び、ファームウェアのような制御プログラム７４２を記憶する。【００６１】
ＦＭ７０５は、メモリ７０２に記憶されている情報等の退避先となる不揮発性メモリの一例である。【００６２】
デバイスＩ／Ｆ情報７４１は、ｐｈｙ７１１毎のステータス情報（例えば、通信可能を意味する“Ready”、通信不可能であることを意味する“Not-ready”）を有する。【００６３】
制御プログラム７４２は、ＭＰ７０４に実行されることで、例えば、ｐｈｙの有効／無効を制御したり、各ｐｈｙをポーリングすることにより各ｐｈｙのステータスを検出したり、エラーが検出された場合にエラー情報をブロードキャストしたり、コントローラ１２４から受信したコマンド（例えばＩ／Ｏコマンド又は内部処理コマンド）に応じてそのコマンドを処理したりすることができる。例えば、コマンドが内部処理コマンドであり、その内部処理コマンドがファンの回転数制御のためのコマンドの場合、制御プログラム７４２が、ファン７０７の回転数を制御する。【００６４】
以下、本実施例で行われる処理を説明する。なお、以下の説明では、ストレージコントローラＡ及び第１のエクスパンダ列（エクスパンダＡ〜Ｃ）を例に取るが、ストレージコントローラＢ及び第２のエクスパンダ列（エクスパンダＤ〜Ｆ）についても同様の処理が行われる。また、以下の説明では、エクスパンダ及び記憶デバイスのそれぞれの識別情報は、ＳＡＳアドレスとする。【００６５】
図８は、ターゲット管理テーブル作成処理の流れを示す。【００６６】
この処理は、コントローラＡ及びＢの初期化が完了した場合に、開始される。ＭＰ  Ａは、コントローラＡ及びＢのうちの一方のコントローラＡについて、Ｓ８０１〜Ｓ８０５を行う。【００６７】
具体的には、ＭＰ  Ａが、Ｎ＝１を設定する（Ｓ８０１）。変数Ｎは、エクスパンダの段数である。変数Ｎは、ＭＰ  Ａ内のレジスタ或いはメモリＡのような記憶領域に設定される。Ｎの値は、後述するように１ずつインクリメントされる。つまり、Ｓ８０２以降の処理が、コントローラＡにとって最前段のエクスパンダから順次後段のエクスパンダにかけて行われることを意味する。ＭＰ  Ａが、テーブル２０１に、コントローラ４０１「コントローラＡ」を書き、段数Ｎ４０２「１」を書く。ＭＰ  Ａが、Ｎ段目のエクスパンダにディスカバーコマンドを、コントローラＡを介して発行する（Ｓ８０２）。これにより、ＭＰ  Ａが、Ｎ段目のエクスパンダから、Ｎ段目のエクスパンダのＳＡＳアドレスとＮ段目のエクスパンダに直接接続されている各デバイス（記憶デバイス及びエクスパンダ）のＳＡＳアドレスとを含んだ応答を、コントローラＡを介して受信する。ＭＰ  Ａが、テーブル２０１に、エクスパンダ４０３として、エクスパンダＳＡＳアドレス（Ｎ段目のエクスパンダのＳＡＳアドレス）を書き、ターゲット４０４として、各ターゲットＳＡＳアドレス（Ｎ段目のエクスパンダに直接接続されている各ターゲットデバイスのＳＡＳアドレス）を書く。ＭＰ  Ａが、その情報から特定される各ターゲットデバイスに、ターゲットデバイスのＳＡＳアドレスを指定したインクワイアリコマンドを、コントローラＡを介して発行する（Ｓ８０３）。これにより、ＭＰ  Ａが、Ｎ段目のエクスパンダに直接接続されている各ターゲットデバイスから、ターゲットデバイスの形名を含んだ応答を、コントローラＡを介して受信する。ＭＰ  Ａは、受信した応答中の形名から、ターゲット種別を特定し、テーブル２０１に、ターゲット種別４０５として特定したターゲット種別を書く。ＭＰ  Ａは、Ｎ段目のエクスパンダに直接接続されている各ターゲットデバイスに、モードセンスコマンドを、コントローラＡを介して発行する（Ｓ８０４）。これにより、ＭＰ  Ａが、Ｎ段目のエクスパンダに直接接続されている各ターゲットデバイスから、ターゲットデバイスのリンクレート及び最大リンクレートを含んだ応答を、コントローラＡを介して受信する。ＭＰ  Ａは、テーブル２０１に、受信した応答中のリンクレート及び最大リンクレートを、リンクレート４０６及び最大リンクレート４０７として書く。ＭＰ  Ａは、Ｓ８０２で発行したディスカバーコマンドの応答から、Ｎ段目のエクスパンダより後段にエクスパンダが存在するか否かを判断する（Ｓ８０５）。Ｓ８０５の判断結果が真の場合（Ｓ８０５：ＹＥＳ）、ＭＰ  Ａは、Ｎ＝Ｎ＋１とし（Ｓ８０６）、Ｓ８０２以降の処理を行う。【００６８】
Ｓ８０５の判断結果が偽の場合（Ｓ８０５：ＮＯ）、ＭＰ  Ａは、他方のコントローラＢについてもＳ８０１以降の処理を行ったか否かを判断する（Ｓ８０７）。Ｓ８０７の判断結果が偽の場合（Ｓ８０７：ＮＯ）、ＭＰ  Ａは、他方コントローラＢについてＳ８０１以降の処理を行う。Ｓ８０７の判断結果が真の場合（Ｓ８０７：ＹＥＳ）、テーブル２０１の作成処理が終了する。この時点で、ターゲット管理テーブル２０１が完成している。【００６９】
テーブル２０１の作成処理の後、そのテーブル２０１を基に、アクセス経路管理テーブル２０２及びホストＩ／Ｏ管理テーブル２０３が作成される。【００７０】
図９は、アクセス経路管理テーブル作成処理の流れを示す。【００７１】
ＭＰ  Ａが、Ｎ＝１を設定する（Ｓ９０１）。【００７２】
次に、ＭＰ  Ａが、ターゲット管理テーブル２０１のうちの、コントローラＡについてＮ段目のエクスパンダに対応したサブレコード群と、コントローラＢについてＮ段目（及びＮ段目よりも前段）のエクスパンダに対応したサブレコード群とを比較する（Ｓ９０２）。【００７３】
そして、ＭＰ  Ａは、コントローラＡにとってのＮ段目のエクスパンダとコントローラＢにとってのＮ段目のエクスパンダの各々が第１のエクスパンダ列の真ん中のエクスパンダ或いはそれよりも後段のエクスパンダか否かを判断する。例えば、ＭＰ  Ａは、コントローラＡのＮ段目のエクスパンダについての全てのターゲットＳＡＳアドレスが、コントローラＢのＮ段目のエクスパンダについての全てのターゲットＳＡＳアドレスと一致するか否かを判断する（Ｓ９０３）。Ｓ９０３の判断結果が偽の場合（Ｓ９０３：ＮＯ）、ＭＰ  Ａは、コントローラＡのＮ段目のエクスパンダについての全てのターゲットＳＡＳアドレスが、コントローラＢのＮ段目より前段のエクスパンダについての全てのターゲットＳＡＳアドレスと一致するか否かを判断する（Ｓ９０４）。【００７４】
Ｓ９０４の判断結果が偽であるということは、コントローラＡ及びＢのそれぞれにとって、Ｎ段目のエクスパンダは、第１のエクスパンダ列の真ん中のエクスパンダよりも前段に存在する。このため、Ｓ９０４の判断結果が偽の場合（Ｓ９０４：ＮＯ）、ＭＰ  Ａは、テーブル２０２に、コントローラＡにとってのＮ段目のエクスパンダに直接接続されている各ターゲットデバイスについては、最適経路５０２「コントローラＡ」及び後退経路５０３「コントローラＢ」を書き、コントローラＢにとってのＮ段目のエクスパンダに直接接続されている各ターゲットデバイスについては、最適経路５０２「コントローラＢ」及び後退経路５０３「コントローラＡ」を書く（Ｓ９０５）。そして、ＭＰ  Ａは、Ｎ＝Ｎ＋１とし（Ｓ９０６）、Ｓ９０２以降を行う。【００７５】
Ｓ９０４の判断結果が真であるということは、コントローラＡ及びＢのそれぞれにとって、Ｎ段目のエクスパンダは、第１のエクスパンダ列の真ん中のエクスパンダよりも後段に存在する。言い換えれば、Ｓ９０４の判断結果が真であるということは、第１のエクスパンダ列に接続されている全てのターゲットデバイスについて最適経路が設定済みであるということである。このため、Ｓ９０４の判断結果が真の場合（Ｓ９０４：ＹＥＳ）、この作成処理が終了する。アクセス経路管理テーブル２０２は既に完成しているからである。【００７６】
Ｓ９０３の判断結果が真であるということは、コントローラＡ及びＢのそれぞれにとって、Ｎ段目のエクスパンダは、第１のエクスパンダ列の真ん中のエクスパンダである。このため、その真ん中のエクスパンダに直接接続されている各ターゲットデバイスにとって、イニシエータデバイスがコントローラＡ及びＢのいずれであっても、イニシエータデバイスまでの距離（介在するエクスパンダの数）は同じである。そこで、Ｓ９０３の判断結果が真の場合（Ｓ９０３：ＹＥＳ）、ＭＰ  Ａは、Ｎ段目のエクスパンダ（真ん中のエクスパンダ）に直接接続されているターゲットデバイスのうちの半分については、最適経路５０２「コントローラＡ」及び後退経路５０３「コントローラＢ」とし、残り半分については、最適経路５０２「コントローラＢ」及び後退経路５０３「コントローラＡ」とする。なお、真ん中のエクスパンダに直接接続されているターゲットデバイスについて、最適経路５０２を「コントローラＡ」とするか「コントローラＢ」とするかの配分は、上記のように単に１：１とすることに代えて、真ん中のエクスパンダ（及び真ん中のエクスパンダより前段のエクスパンダ）に直接接続されているターゲットデバイスの応答速度（ターゲット種別）を基に決定されてよい。例えば、コントローラＡの最前段のエクスパンダから真ん中のエクスパンダにかけてのターゲットデバイスの応答速度の平均よりも、コントローラＢの最前段のエクスパンダから真ん中のエクスパンダにかけてのターゲットデバイスの応答速度の平均の方が早い場合には、真ん中のエクスパンダに直接接続されているターゲットデバイスについて、コントローラＢを最適経路とするターゲットデバイスの方が多い、或いは、応答速度が比較的遅いターゲットデバイスについてコントローラＢが優先的に最適経路とされてよい。なぜなら、このケースでは、コントローラＢから真ん中のエクスパンダについて応答速度平均が比較的速いため、リンクの占有時間が比較的短いと考えられるからである。【００７７】
図１０は、ホストＩ／Ｏ管理テーブル作成処理の流れを示す。【００７８】
ＭＰ  Ａは、コントローラＡ及びＢのうちの一方のコントローラＡについて、Ｓ１００１〜Ｓ１００４を行う。【００７９】
具体的には、ＭＰ  Ａが、Ｎ＝１を設定する（Ｓ１００１）。次に、ＭＰ  Ａが、ターゲット管理テーブル２０１における、Ｎ段目のエクスパンダに対応したサブレコード群を基に、テーブル２０３に、コントローラＡについて、Ｎ段目のエクスパンダに対応した情報４０２〜４０７を書く（Ｓ１００２）。リンクレート６０６は、同一のターゲット種別に属する１以上のターゲットデバイスのリンクレート４０６の平均である。また、Ｉ／Ｏ数６０４、平均レスポンスタイム６０５及び内部処理コマンド数６０７は、初期の段階では初期値（例えばゼロ）であり、ストレージシステム１０５がオンライン状態となって以降、適宜に更新される。ＭＰ  Ａは、Ｎ段目のエクスパンダより後段にエクスパンダが存在するか否かを判断する（Ｓ１００３）。Ｓ１００３の判断結果が真の場合（Ｓ１００３：ＹＥＳ）、ＭＰ  Ａは、Ｎ＝Ｎ＋１とし（Ｓ１００４）、Ｓ１００２以降の処理を行う。【００８０】
Ｓ１００３の判断結果が偽の場合（Ｓ１００３：ＮＯ）、ＭＰ  Ａは、コントローラＡについて、エクスパンダＡ〜Ｃのレコード群に基づく、エクスパンダ６０２「All  Expander」のレコード群を、テーブル２０３に追加し（Ｓ１００５）、その後、他方のコントローラＢについてもＳ１００１以降の処理を行ったか否かを判断する（Ｓ１００６）。Ｓ１００６の判断結果が偽の場合（Ｓ１００６：ＮＯ）、ＭＰ  Ａは、他方コントローラＢについてＳ１００１以降の処理を行う。Ｓ１００６の判断結果が真の場合（Ｓ１００６：ＹＥＳ）、テーブル２０３の作成処理が終了する。この時点で、ホストＩ／Ｏ管理テーブル２０３が完成している。【００８１】
図１１は、Ｉ／Ｏコマンド送信処理の流れを示す。【００８２】
ＭＰ  Ａは、Ｉ／Ｏ先をチェックする（Ｓ１１０１）。例えば、ＭＰ  Ａは、Ｉ／Ｏコマンドの基となるＩ／Ｏリクエスト（ホスト１０１からのＩ／Ｏリクエスト）で指定されているＩ／Ｏ先ＬＢＡを基に、ターゲットデバイス（Ｉ／Ｏ先の記憶デバイス）を特定する。【００８３】
ＭＰ  Ａは、アクセス経路管理テーブル２０２をチェックする（Ｓ１１０２）。例えば、ＭＰ  Ａは、Ｓ１１０１で特定されたターゲットデバイスに対応した最適経路（コントローラ）及び後退経路（コントローラ）を特定する。【００８４】
ＭＰ  Ａは、ホストＩ／Ｏ管理テーブル２０３をチェックする（Ｓ１１０３）。例えば、ＭＰ  Ａは、Ｓ１１０２で特定された最適経路（コントローラ）に対応したＩ／Ｏ数６０４及び平均レスポンスタイム６０５を特定し、且つ、Ｓ１１０２で特定された後退経路（コントローラ）に対応したＩ／Ｏ数６０４及び平均レスポンスタイム６０５を特定する。なお、最適経路に対応したＩ／Ｏ数６０４及び平均レスポンスタイム６０５は、最適経路について、ターゲットデバイスが直接接続されているエクスパンダとターゲットデバイスのターゲット種別との両方に対応したＩ／Ｏ数６０４及び平均レスポンスタイム６０５であり、後退経路に対応したＩ／Ｏ数６０４及び平均レスポンスタイム６０５は、後退経路について、ターゲットデバイスが直接接続されているエクスパンダとターゲットデバイスのターゲット種別との両方に対応したＩ／Ｏ数６０４及び平均レスポンスタイム６０５である。具体的には、ここでのターゲットデバイスが記憶デバイスＡ（ＳＡＳ−ＨＤＤ）の場合、最適経路に対応したＩ／Ｏ数６０４及び平均レスポンスタイム６０５は、「Controller  A」、「Expander  A」及び「SAS」に対応した「600」及び「6」であり、後退経路に対応したＩ／Ｏ数６０４及び平均レスポンスタイム６０５は、「Controller  B」、「Expander  A」及び「SAS」に対応した「100」及び「7」である。なお、「Expander  A」に代えて又は加えて、「All  Expander」が採用されてもよい。【００８５】
ＭＰ  Ａは、Ｉ／Ｏコマンドがリードコマンドか否かを判断する（Ｓ１１０４）。Ｓ１１０４の判断結果が真の場合（Ｓ１１０４：ＹＥＳ）、ＭＰ  Ａは、Ｓ１１０２で特定された最適経路を選択し、その最適経路からＩ／Ｏコマンド（リードコマンド）をターゲットデバイスに送信する（Ｓ１１０７）。リードコマンドは、ホスト１０１からリードリクエストをＭＰ  Ａにより受信された場合に送信されるが、そのリードリクエストに対する応答（リードリクエストに従うリード対象のユーザデータ）を短時間でホスト１０１に返すことが望ましい。そのため、リードコマンドに対する応答も短時間でターゲットデバイスからＭＰ  Ａに返ることが望ましい。Ｓ１１０４及びＳ１１０７によれば、Ｉ／Ｏコマンドがリードコマンドであれば、そのＩ／Ｏコマンドは必ず最適経路から送信される。これにより、リードコマンドに対する応答を短時間で受信することが期待できる。なお、Ｓ１１０４は、Ｓ１１０２とＳ１１０３の間に行われ、Ｓ１１０４：ＹＥＳの場合、Ｓ１１０３がスキップされ、Ｓ１１０７が行われてよい。【００８６】
Ｓ１１０４の判断結果が偽の場合（Ｓ１１０４：ＮＯ）、ＭＰ  Ａは、後退経路に対応した平均レスポンスタイム６０５が最適経路に対応した平均レスポンスタイム６０５より長いか否かを判断する（Ｓ１１０５）。これらの平均レスポンスタイム６０５は、Ｓ１１０３で既に特定されている。平均レスポンスタイム６０５が長いということは、負荷が高いということである。【００８７】
Ｓ１１０５の判断結果が真の場合（Ｓ１１０５：ＹＥＳ）、ＭＰ  Ａは、Ｓ１１０２で特定された最適経路を選択し、その最適経路からＩ／Ｏコマンドをターゲットデバイスに送信する（Ｓ１１０７）。これにより、負荷の低い方の経路である最適経路からＩ／Ｏコマンドが送信されるので、そのＩ／Ｏコマンドに対する応答を短時間で受信することが期待できる。【００８８】
Ｓ１１０５の判断結果が偽の場合（Ｓ１１０５：ＮＯ）、ＭＰ  Ａは、後退経路に対応したＩ／Ｏ数６０４が最適経路に対応したＩ／Ｏ数６０４より多いか否かを判断する（Ｓ１１０６）。これらのＩ／Ｏ数６０４も、Ｓ１１０３で既に特定されている。【００８９】
Ｓ１１０６の判断結果が真の場合（Ｓ１１０６：ＹＥＳ）、ＭＰ  Ａは、Ｓ１１０２で特定された後退経路を選択し、その後退経路からＩ／Ｏコマンドをターゲットデバイスに送信する（Ｓ１１０８）。Ｓ１１０５：ＮＯ且つＳ１１０６：ＹＥＳということは、後退経路の方が、平均レスポンスタイムが短く（負荷が低く）且つＩ／Ｏ数が多いということである。このため、後退経路の方がＩ／Ｏコマンドのスループットが高いと考えられ、故に、最適経路を使用するよりも短時間でＩ／Ｏコマンドの応答を受信できる可能性が高い。【００９０】
Ｓ１１０６の判断結果が偽の場合（Ｓ１１０６：ＮＯ）、ＭＰ  Ａは、Ｓ１１０２で特定された最適経路を選択し、その最適経路からＩ／Ｏコマンドをターゲットデバイスに送信する（Ｓ１１０７）。Ｓ１１０５：ＮＯ且つＳ１１０６：ＮＯということは、後退経路の方が平均レスポンスタイムが短いが、その原因は、単に後退経路の方がＩ／Ｏ数が少ないからである可能性が高いと考えられる。このため、最適経路の方が短時間でＩ／Ｏコマンドの応答を受信できる可能性が高い。【００９１】
以上が、Ｉ／Ｏコマンドの送信処理の流れである。なお、図１１によれば、Ｓ１１０６よりＳ１１０５の方が先に行われるが、これは、Ｉ／Ｏ数を基準とした経路判断より平均レスポンスタイムを基準とした経路判断が優先されていることを意味する。これにより、Ｉ／Ｏコマンドに対する応答をより短時間で受信できる経路を正確に選択できる確率が高まる。また、図１１によれば、Ｉ／Ｏ数を基準とした経路判断が、平均レスポンスタイムを基準とした経路判断の補助的な判断として行われる。これにより、Ｉ／Ｏコマンドに対する応答をより短時間で受信できる経路を選択できる確率が一層高まる。【００９２】
図１２は、内部処理コマンド送信処理の流れを示す。【００９３】
ＭＰ  Ａは、Ｉ／Ｏ数をチェックする（Ｓ１２０１）。例えば、ＭＰ  Ａは、ホストＩ／Ｏ管理テーブル２０３から、コントローラＡのＩ／Ｏ数（コントローラＡの「All  Expander」に対応したＩ／Ｏ数６０４の合計）と、コントローラＢのＩ／Ｏ数（コントローラＢの「All  Expander」に対応したＩ／Ｏ数６０４の合計）とを特定する。【００９４】
ＭＰ  Ａは、コントローラＡのＩ／Ｏ数よりもコントローラＢのＩ／Ｏ数が多いか否かを判断する（Ｓ１２０２）。【００９５】
Ｓ１２０２の判断結果が真の場合（Ｓ１２０２：ＹＥＳ）、ＭＰ  Ａは、Ｉ／Ｏ数の多少が逆転するまでの間（コントローラＢのＩ／Ｏ数よりもコントローラＡのＩ／Ｏ数が多くなるまでの間）、コントローラＡが最適経路となるデバイス（記憶デバイス又はエクスパンダ）に対する内部処理コマンドを、そのデバイスに送信する（Ｓ１２０３）。つまり、コントローラＢのＩ／Ｏ数の方が多い場合には、コントローラＡを最適経路とするデバイスに対する内部処理コマンドが、コントローラＢを最適経路とするデバイスに対する内部処理コマンドよりも優先的に処理される。これにより、Ｉ／Ｏコマンドの処理と並行して内部処理コマンドを処理しても、コントローラＢ経由でのＩ／Ｏコマンドの送信とその応答の受信に与える影響は小さい。【００９６】
コントローラＢのＩ／Ｏ数よりもコントローラＡのＩ／Ｏ数が多くなった場合（Ｓ１２０４：ＹＥＳ）、ＭＰ  Ａは、Ｓ１２０３を止め、コントローラＢが最適経路となるデバイス（記憶デバイス又はエクスパンダ）に対する内部処理コマンドを、そのデバイスに送信する（Ｓ１２０５）。【００９７】
Ｓ１２０２の判断結果が偽の場合（Ｓ１２０２：ＮＯ）、Ｓ１２０３〜Ｓ１２０５と逆のことが行われる。すなわち、ＭＰ  Ａは、コントローラＡのＩ／Ｏ数よりもコントローラＢのＩ／Ｏ数が多くなるまでの間、コントローラＢが最適経路となるデバイス（記憶デバイス又はエクスパンダ）に対する内部処理コマンドを、そのデバイスに送信する（Ｓ１２１１）。コントローラＡのＩ／Ｏ数よりもコントローラＢのＩ／Ｏ数が多くなった場合（Ｓ１２１２：ＹＥＳ）、ＭＰ  Ａは、Ｓ１２１１を止め、コントローラＡが最適経路となるデバイス（記憶デバイス又はエクスパンダ）に対する内部処理コマンドを、そのデバイスに送信する（Ｓ１２１３）。
【実施例２】
【００９８】
以下、実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略或いは簡略する。また、以下の説明において、ゾーングループの帯域の広さは、例えば、ゾーングループに割り当てられたｐｈｙの数に相当する。例えば、ゾーングループの帯域が広いとは、ゾーングループに割り当てられているｐｈｙが多いことに相当し、ゾーングループの帯域が狭いとは、ゾーングループに割り当てられているｐｈｙが少ないことに相当してよい。【００９９】
図１３は、実施例２の概要を示す。【０１００】
実施例２では、ＳＡＳの仕様に従うゾーニングが使用される。ゾーニングに従い定義された複数のゾーングループが、内部処理コマンド用のゾーングループとＩ／Ｏコマンド用のゾーングループとに分類される。以下、内部処理コマンド用のゾーングループを「内部ゾーン」と言い、Ｉ／Ｏコマンド用のゾーングループを「Ｉ／Ｏゾーン」と言う。内部ゾーンは、内部処理コマンドの送信及びその応答の受信に使用され、Ｉ／Ｏコマンドの送信及びその応答の受信には使用されない。同様に、Ｉ／Ｏゾーンは、Ｉ／Ｏコマンドの送信及びその応答の受信に使用され、内部処理コマンドの送信及びその応答の受信には使用されない。全てのコントローラ１２４／エクスパンダ１３１間、及び、全てのエクスパンダ１３１間に、Ｉ／Ｏゾーンと内部ゾーンが設けられる。Ｉ／Ｏゾーン間が関連付けられ、内部ゾーン間が関連付けられる。Ｉ／Ｏゾーンから内部ゾーンへの関連付け、及び、内部ゾーンからＩ／Ｏゾーンへの関連付けはされない。これにより、いずれのコントローラ１２４からいずれのエクスパンダ１３１又はいずれの記憶デバイス１４２にＩ／Ｏコマンド及び内部処理コマンドのいずれも届くことが可能である。その際、Ｉ／Ｏコマンドは、１以上のＩ／Ｏゾーンのみを経由し、内部処理コマンドは、１以上の内部ゾーンのみを経由する。【０１０１】
図１３に示す例では、コントローラＢにエクスパンダＣを直接接続するワイドリンクが、Ｉ／Ｏゾーン「８」と内部ゾーン「９」とに区切られ、エクスパンダＣにエクスパンダＢを直接接続するワイドリンクが、Ｉ／Ｏゾーン「１」と内部ゾーン「１０」とに区切られているとする。そして、Ｉ／Ｏゾーン「８」からＩ／Ｏゾーン「１」への関連付けがされていて、且つ、内部ゾーン「９」から内部ゾーン「１０」への関連付けがされているとする。【０１０２】
１つのワイドリンクのうち、３本の物理リンクがＩ／Ｏゾーンに割り当てられ、残り１本の物理リンクが内部ゾーンに割り当てられる。内部ゾーンに割り当てられる物理リンクの数の方が多くても良いが、Ｉ／Ｏコマンドのスループットを向上する観点から、内部ゾーンよりもＩ／Ｏゾーンの方が割り当てられる物理リンクの数が多い方が望ましい。つまり、内部ゾーンの帯域よりもＩ／Ｏゾーンの帯域が広いことが望ましい。エクスパンダ１３１間（及び、コントローラ１２４とエクスパンダ１３１間）において、内部ゾーンに割り当てられる物理リンクは、少なくとも１本あればよい。なお、正確には、１つのゾーングループには、ｐｈｙが割り当てられる。図１３の例によれば、内部ゾーン「９」には、１本の物理リンクの一端のｐｈｙ（コントローラＢの１つのｐｈｙ）と、その物理リンクの他端のｐｈｙ（エクスパンダＣの１つのｐｈｙ）とが割り当てられる。【０１０３】
内部処理コマンドのターゲットが、エクスパンダＢに直接接続されておりコントローラＢを最適経路とする記憶デバイスＥであるとする。この場合、ＭＰ  Ａは、記憶デバイスＥのＳＡＳアドレスを指定した内部処理コマンドを、内部ゾーン「９」を指定してコントローラＢへと送信する。コントローラＢは、ゾーングループ「９」に割り当てられているｐｈｙを特定し、そのｐｈｙから、内部処理コマンドを送信する。エクスパンダＣは、内部処理コマンドを受信し、内部処理コマンドを受信したｐｈｙが割り当てられているゾーングループ「９」に関連付いているゾーングループ「１０」を特定し、そのゾーングループ「１０」に割り当てられているｐｈｙから、その内部処理コマンドを送信する。エクスパンダＢは、その内部処理コマンドを受信し、その内部処理コマンドで指定されているＳＡＳアドレスに該当する記憶デバイスＥに、その内部処理コマンドを送信する。【０１０４】
以上、内部処理コマンドの送信を例に取ったが、Ｉ／Ｏコマンドの送信も同様に行われてよい。例えば、コントローラＢ経由のＩ／Ｏコマンドの送信の際には、ＭＰ  Ａは、Ｉ／Ｏゾーン「８」を指定してよい。【０１０５】
実施例２によれば、エクスパンダ１３１間（及びコントローラ１２４とエクスパンダ１３１間）において、少なくとも１本の物理リンクが内部処理コマンドの送信又はその応答用に確保されている。内部処理コマンドの送信又はその応答用に確保されている物理リンクを、Ｉ／Ｏコマンド又はその応答は流れない。これにより、内部処理コマンドを短時間で処理することが期待できる。【０１０６】
また、実施例２によれば、エクスパンダ１３１間（及びコントローラ１２４とエクスパンダ１３１間）において、内部処理コマンド用の物理リンクよりも多くの物理リンクがＩ／Ｏコマンドの送信又はその応答用に確保されている。Ｉ／Ｏコマンドの送信又はその応答用に確保されている物理リンクを、内部処理コマンド又はその応答は流れない。これにより、Ｉ／Ｏコマンドを短時間で処理することが期待できる。【０１０７】
以下、実施例２を詳述する。【０１０８】
図１４は、実施例２に係るＭＰ１２６、コントローラ１２４及びエクスパンダ１３１がそれぞれ管理する情報の概要を示す。【０１０９】
ＭＰ１２６は、ゾーン管理テーブル１４０２をメモリ１２６に格納する。ゾーン管理テーブル１４０２は、コントローラ毎に、Ｉ／Ｏゾーンのゾーングループ番号と内部ゾーンのゾーングループ番号とを有する。例えば、そのテーブル１４０２には、コントローラＢであれば、Ｉ／Ｏゾーンのゾーングループ番号として「８」が記録され、内部ゾーンのゾーングループ番号として「９」が記録される。【０１１０】
コントローラＡ及びＢは、それぞれ、ｐｈｙ管理テーブル１４０３を有する。ｐｈｙ管理テーブル１４０３は、コントローラが有するｐｈｙ毎に、ｐｈｙが割り当てられたゾーングループの番号を有する。図１３の例によれば、コントローラＢは、ゾーングループ「９」が指定されたコマンドを受けた場合、そのコマンドを、コントローラＢのｐｈｙ「３」から送信すべきことがわかる。【０１１１】
エクスパンダ１３１（例えばメモリ７２１）には、ゾーニングテーブル１４０４とゾーンパーミッションテーブル１４０１とが更に記憶される。ゾーニングテーブル１４０４には、エクスパンダ１３１が有するｐｈｙ毎に、ｐｈｙが割り当てられるゾーングループの番号が記録される。ゾーンパーミッションテーブル１４０１は、どのゾーングループからどのゾーングループへの関連付けがされているかを表す。関連付けがされていないゾーン間に情報（例えばコマンド又は応答）が転送されることはない。【０１１２】
なお、コントローラＡ（Ｂ）が、ゾーン管理テーブルを管理してもよい。この場合、コントローラＡ（Ｂ）が、コマンドがＩ／Ｏコマンドであるか内部処理コマンドであるかを判断し、内部処理コマンドと判断した場合に内部処理コマンドを内部ゾーン経由（内部ゾーンに割り当てられたｐｈｙ経由）で送信してよい。【０１１３】
図１５は、ゾーンパーミッションテーブル１４０１の構成を示す。【０１１４】
ゾーンパーミッションテーブル１４０１は、ソースゾーングループとデスティネーションゾーングループとの対応関係を示す。「１」が、関連付けられていることを意味し、「０」が、関連付けられていないことを意味する。図１５によれば、ゾーングループ「９」からゾーングループ「１０」への転送や、ゾーングループ「１０」からゾーングループ「９」への転送が許可されている。このため、図１３に示したように、ゾーングループ「９」からゾーングループ「１０」を内部処理コマンドが流れることや、その応答が、ゾーングループ「１０」からゾーングループ「９」へと流れることを実現することができる。【０１１５】
図１６は、実施例２に係る内部処理コマンド送信処理の流れを示す。【０１１６】
ＭＰ  Ａは、内部処理コマンドのターゲットとなるデバイスの最適経路を特定する（Ｓ１６０１）。例えば、そのデバイスが記憶デバイスの場合、そのデバイスの最適経路は、アクセス経路管理テーブル２０２から特定される。また、例えば、そのデバイスがエクスパンダの場合、そのデバイスの最適経路は、ホストＩ／Ｏ管理テーブル２０３から特定される。そのデバイス（エクスパンダ）までの距離が短い（介在するエクスパンダ数が少ない）方のコントローラが最適経路のコントローラである。【０１１７】
ＭＰ  Ａは、特定した最適経路（コントローラ）についての内部ゾーンのゾーングループ番号をゾーン管理テーブル１４０２から特定し、特定したゾーングループ番号を指定した内部処理コマンドを、特定した最適経路（コントローラ）に送信する（Ｓ１６０２）。【０１１８】
これにより、その内部処理コマンドは、最適経路（コントローラ）のｐｈｙ管理テーブル１４０３や、エクスパンダのゾーニングテーブル１４０４及びゾーンパーミッションテーブル１４０１を基に、その内部処理コマンドのターゲットへと転送される。【０１１９】
ところで、実施例２では、ストレージシステム１０５の情報設定の全体的な処理流れして下記を採用することができる。以下、オンライン時とオフライン時とに分けて説明する。なお、「オンライン時」とは、ストレージシステム１０５が稼働中でありホスト１０５からＩ／Ｏリクエストを受信し得る時である。「オフライン時」とは、ストレージシステム１０５が非稼働中でありホスト１０５からＩ／Ｏリクエストを受信し得ない時（例えば電源投入時又は再起動時）である。【０１２０】
図１７Ａは、オンライン時設定処理の全体的な流れを示す。【０１２１】
ＭＰ  Ａが、ゾーニングを決定する（Ｓ１７０１）。例えば、ＭＰ  Ａが、ターゲット管理テーブル２０１を基に、エクスパンダ数（エクスパンダ列を構成するエクスパンダの数）と、高速デバイス位置（高速ターゲットデバイスが直接接続されているエクスパンダの位置（ＳＡＳアドレス））とを特定する。ここで言う「高速ターゲットデバイス」とは、複数のターゲット種別のデバイスのうち比較的応答速度が高速なターゲット種別のデバイスを言う。本実施例では、高速ターゲットデバイスはＳＳＤである。ＭＰ  Ａが、エクスパンダ数（Ｎ個）に対する高速デバイス位置（ｍ番目）を基に、複数のゾーングループを定義する。例えば、コントローラＡについて、高速デバイス位置が、エクスパンダ列の真ん中より後段の場合、ＭＰ  Ａは、高速デバイス位置がどの程度後段であるかに応じて、コントローラＡから高速デバイス位置までのゾーングループの帯域を決定してよい。また、ゾーングループの定義として、エクスパンダ毎に、ｐｈｙとゾーングループ番号との対応関係も決定される。

【０１２２】
次に、ＭＰ  Ａが、決定したゾーニングを設定する（Ｓ１７０２）。例えば、ＭＰ  Ａが、各エクスパンダに、決定したゾーングループに関する情報（例えば、ゾーンパーミッションテーブル１４０１及びゾーニングテーブル１４０４の情報）を含んだコマンドを送信する。そのコマンドを受けたエクスパンダは、そのコマンドで指定されている情報をメモリ７２１等に設定する。【０１２３】
次に、ＭＰ  Ａが、アクセス管理テーブル２０２及びホストＩ／Ｏ管理テーブル２０３を作成する（Ｓ１７０３及びＳ１７０４）。【０１２４】
最後に、ＭＰ  Ａが、各エクスパンダのゾーニング設定を有効にするために、各エクスパンダにリンクリセットコマンドを送信する（Ｓ１７０５）。【０１２５】
図１７Ｂは、オフライン時設定処理の全体的な流れを示す。【０１２６】
ＭＰ  Ａが、ゾーニングを決定する（Ｓ１７１１）。具体的には、ＭＰ  Ａが、ターゲット管理テーブル２０１が示す構成と同様の構成を表す構成情報を管理システム１０３から受信し、その構成情報を基に、Ｓ１７０１と同様の方法で、ゾーニングを決定する。【０１２７】
ＭＰ  Ａが、コントローラＡ及びＢを初期化する（Ｓ１７１２）。【０１２８】
ＭＰ  Ａが、Ｓ１７１１で決定したゾーニング（ゾーングループの定義）を、各エクスパンダに設定する（Ｓ１７１３）。具体的には、ＭＰ  Ａが、エクスパンダへのディスカバーコマンドに対する応答から、そのエクスパンダのＳＡＳアドレスを特定し、そのＳＡＳアドレスを用いてそのエクスパンダにゾーニングを設定する。【０１２９】
次に、ＭＰ  Ａが、ターゲット管理テーブル２０１を作成し（Ｓ１７１４）、その後、アクセス経路管理テーブル２０２及びホストＩ／Ｏ管理テーブル２０３を作成する（Ｓ１７１５及びＳ１７１６）。【０１３０】
オフライン時における情報設定では、エクスパンダの再起動が行われるので、オンライン時のようにリンクリセットコマンドをエクスパンダに送信する処理は不要である。【０１３１】
なお、実施例１では、ゾーニングを除き、図１７Ａ及び図１７Ｂに示した全体的な処理流れが採用されてもよい。
【実施例３】
【０１３２】
以下、実施例３を説明する。その際、実施例１及び２との相違点を主に説明し、実施例１及び２との共通点については説明を省略或いは簡略する。【０１３３】
図１８は、実施例３の概要を示す。【０１３４】
実施例３では、実施例２と同様、ＳＡＳの仕様に従うゾーニングが使用される。実施例２との相違点は、ゾーングループが、内部ゾーン又はＩ／Ｏゾーンとされるのではなく、コントローラＡ用のゾーングループ（以下、Ａゾーン）又はコントローラＢ用のゾーングループ（以下、Ｂゾーン）とされることである。そして、コントローラＡに近いＡゾーンの帯域よりコントローラＡから遠いＡゾーンの帯域が狭く、同様に、コントローラＢに近いＢゾーンの帯域よりコントローラＢから遠いＢゾーンの帯域が狭い。言い換えれば、コントローラＡから遠いＡゾーンの帯域が狭い分、コントローラＢに近いＢゾーンの帯域が広く確保され、コントローラＢから遠いＢゾーンの帯域が狭い分、コントローラＡに近いＡゾーンの帯域が広く確保される。図１８では、Ａゾーンは、グレーで示されており、Ｂゾーンは、白色で示されている。なお、いずれのＡゾーンの帯域もいずれのＢゾーンの帯域も、実施例２のように、エクスパンダ数（エクスパンダ列を構成するエクスパンダの数）と高速デバイス位置（高速ターゲットデバイスが直接接続されているエクスパンダの位置）とを基に決定されてよい。【０１３５】
コントローラＡからのコマンドがＢゾーンを経由しない、及び、コントローラＢからのコマンドがＡゾーンを経由しないようにするために、各エクスパンダでは、後段（次段）のエクスパンダにアクセス可能なｐｈｙが制限される。例えば、図１８によれば、エクスパンダＡのｐｈｙ０〜２を経由してエクスパンダＢにアクセス可能であるが、エクスパンダＡのｐｈｙ３を経由してエクスパンダＢにアクセスすることは不可能である。【０１３６】
光ケーブルの普及等により、エクスパンダ間の接続距離が伸び、エクスパンダ列における後段側のエクスパンダにもイニシエータデバイスが接続可能である。イニシエータデバイスから遠い位置にあるエクスパンダのｐｈｙほど、そのイニシエータデバイスから発行されるコマンドの通過数は減少すると考えられる。実施例３によれば、前述したように、コントローラＡに近いＡゾーンの帯域よりコントローラＡから遠いＡゾーンの帯域が狭く、その分、コントローラＢに近いＢゾーンの帯域が広く確保される。後退経路としてコントローラＡが選択された場合、ターゲットデバイス近くの帯域は狭いため、そのターゲットデバイスについてレスポンスタイムは長くなり得るが、後退経路が選択される頻度は、最適経路が選択される頻度より低い。一方、ターゲットデバイスと、そのターゲットデバイスについて最適経路として選択されるコントローラとの間の帯域は、広く確保されており、故に、そのターゲットデバイスについてレスポンスタイムは短い。つまり、レスポンスタイムが短くなる可能性が高い。これにより、全体として、コマンドのスループットの向上が期待できる。【０１３７】
以下、実施例３を詳述する。【０１３８】
図１９は、実施例３に係るゾーニングテーブル１９０１の構成を示す。【０１３９】
ゾーニングテーブル１９０１は、ゾーングループの番号と、そのゾーングループに割り当てられたｐｈｙの番号を含んだｐｈｙビットマップと、デバイス（エクスパンダ）のＳＡＳアドレスとを有する。１つのＳＡＳアドレスに対応したｐｈｙビットマップは、ｐｈｙ毎に、そのｐｈｙ経由でそのＳＡＳアドレスのデバイスとコネクション中か否か（１：:使用中、０：未使用）を表す。従って、このテーブル１９０１によれば、ｐｈｙ０〜２を経由してエクスパンダＢ（ＳＡＳアドレスＢ）に転送中であるが、ｐｈｙ３を経由してエクスパンダＢに転送が行われていないことがわかる。【０１４０】
図２０は、実施例３に係るゾーンパーミッションテーブル２００１の構成を示す。【０１４１】
ゾーンパーミッションテーブル２００１の構成は、実施例２に係るゾーンパーミッションテーブル１４０１の構成と同じである。このテーブル２００１によれば、Ａゾーン「８」からＡゾーン「１０」への転送は不可能であるが、Ａゾーン「８」からＢゾーン「９」への転送は可能であることがわかる。【０１４２】
実施例３では、内部処理コマンドの送信処理として、実施例１での内部処理コマンドの送信処理が採用されてよい。実施例３では、内部処理コマンド（及びＩ／Ｏコマンド）は、コントローラＡから送信された場合は、Ａゾーン及びＢゾーンのうちＡゾーンのみを経由し、コントローラＢから送信された場合は、Ａゾーン及びＢゾーンのうちＢゾーンのみを経由することになる。【０１４３】
以上、幾つかの実施例を説明したが、本発明は、これらの実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。【０１４４】
例えば、１つのエクスパンダ列について、２つのイニシエータデバイスは、必ずしもそのエクスパンダ列の両端に接続されないでよい。少なくとも１つのイニシエータデバイスは、エクスパンダ列の途中のエクスパンダに接続されてよい。その一例を、図２１に示す。図２１によれば、コントローラＢが、エクスパンダ列の途中のエクスパンダＢに接続される。この構成では、エクスパンダＢ及びＣに直接接続されている全てのターゲットデバイスについて、最適経路がコントローラＢとなる。【０１４５】
また、例えば、図２２に示すように、１つのＤＫＡ１２３が２つのコントローラ（イニシエータデバイス）１２４を有してもよい。【０１４６】
また、実施例２のゾーニングと実施例３のゾーニングが組み合わされても良い。例えば、図２３に示すように、実施例３のＡゾーン「８」が、Ｉ／Ｏゾーンと内部ゾーンとで構成されてもよい。また、このケースでは、Ａゾーン及びＢゾーンのそれぞれに少なくとも２本の物理リンクが割り当てられ、１本の物理リンクがＩ／Ｏゾーンに割り当てられ残り１本の物理リンクが内部ゾーンに割り当てられてよい。【０１４７】
また、最適経路を選択するか後退経路を選択するかは、コマンドの実際の送信先となるターゲットデバイスのリンクレートを基に行われてよい。また、リンクレートに基づく経路選択と、ゾーニングによる経路分離（ゾーングループの定義）は、それぞれ別個に行われてもよい。【０１４８】
また、１つのエクスパンダ列につき、イニシエータデバイスが３つ以上存在してもよい。
【符号の説明】
【０１４９】
１２４：ＳＡＳコントローラ（イニシエータデバイス）  １２６：マイクロプロセッサ  １３１：ＳＡＳエクスパンダ
【図１】
0006049891.tif 000002
【図２】
0006049891.tif 000003
【図３】
0006049891.tif 000004
【図４】
0006049891.tif 000005
【図５Ａ】
0006049891.tif 000006
【図５Ｂ】
0006049891.tif 000007
【図６】
0006049891.tif 000008
【図７】
0006049891.tif 000009
【図８】
0006049891.tif 000010
【図９】
0006049891.tif 000011
【図１０】
0006049891.tif 000012
【図１１】
0006049891.tif 000013
【図１２】
0006049891.tif 000014
【図１３】
0006049891.tif 000015
【図１４】
0006049891.tif 000016
【図１５】
0006049891.tif 000017
【図１６】
0006049891.tif 000018
【図１７Ａ】
0006049891.tif 000019
【図１７Ｂ】
0006049891.tif 000020
【図１８】
0006049891.tif 000021
【図１９】
0006049891.tif 000022
【図２０】
0006049891.tif 000023
【図２１】
0006049891.tif 000024
【図２２】
0006049891.tif 000025
【図２３】
0006049891.tif 000026