特許第6049891号(P6049891)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立製作所の特許一覧
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6049891
(24)【登録日】2016年12月2日
(45)【発行日】2016年12月21日
(54)【発明の名称】ストレージシステム及び記憶制御方法
(51)【国際特許分類】
   G06F 13/14 20060101AFI20161212BHJP
   G06F 13/10 20060101ALI20161212BHJP
   G06F 3/06 20060101ALI20161212BHJP
   G06F 13/36 20060101ALI20161212BHJP
【FI】
   G06F13/14 310D
   G06F13/10 340A
   G06F13/10 340B
   G06F3/06 301A
   G06F13/36 520B
【請求項の数】12
【全頁数】31
(21)【出願番号】特願2015-535216(P2015-535216)
(86)(22)【出願日】2013年9月5日
(86)【国際出願番号】JP2013073918
(87)【国際公開番号】WO2015033418
(87)【国際公開日】20150312
【審査請求日】2015年6月26日
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110000279
【氏名又は名称】特許業務法人ウィルフォート国際特許事務所
(72)【発明者】
【氏名】鷲谷 幸司
(72)【発明者】
【氏名】新田 敏裕
【審査官】 田中 啓介
(56)【参考文献】
【文献】 特開2009−258841(JP,A)
【文献】 特開2012−073983(JP,A)
【文献】 米国特許出願公開第2009/0083484(US,A1)
【文献】 特開2009−211140(JP,A)
【文献】 米国特許出願公開第2010/0070662(US,A1)
【文献】 米国特許第07668925(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F3/06−3/08
13/10−13/14
13/38−13/42
(57)【特許請求の範囲】
【請求項1】
直列に接続された複数のエクスパンダであるエクスパンダ列と、
前記エクスパンダ列に直接接続された複数の記憶デバイスと、
前記エクスパンダ列のうちの1つのエクスパンダである第1のエクスパンダに直接接続された第1のイニシエータデバイスと、
前記エクスパンダ列のうちの1つのエクスパンダであり前記第1のエクスパンダとは別のエクスパンダである第2のエクスパンダに直接接続された第2のイニシエータデバイスと、
前記第1及び第2のイニシエータデバイスのうちのいずれかのイニシエータデバイスを介して、前記複数の記憶デバイス及び前記複数のエクスパンダのうちの、コマンドの送信先デバイスに、前記コマンドを送信するプロセッサと
を有し、
前記プロセッサが、前記送信先デバイスについて、前記送信先デバイスとの間のエクスパンダが少ない方のイニシエータデバイスである最適経路と、前記送信先デバイスとの間のエクスパンダが多い方のイニシエータデバイスである後退経路とのうち、前記最適経路を選択し、前記選択した最適経路経由で、前記コマンドを、前記送信先デバイスに送信するようになっており、
前記プロセッサが送信するコマンドとして、記憶デバイスに対してデータを入出力するI/Oコマンドと、データの入出力とは異なる処理をエクスパンダ又は記憶デバイスに行なわせる制御コマンドである内部処理コマンドとがあり、
前記第1のイニシエータデバイスの負荷は、前記第1のイニシエータデバイスから発行されたI/Oコマンドの数であり、
前記第2のイニシエータデバイスの負荷は、前記第2のイニシエータデバイスから発行されたI/Oコマンドの数であり、
前記プロセッサが、
前記第1のイニシエータデバイスの負荷が第2のイニシエータデバイスの負荷より小さければ、前記第1のイニシエータデバイスが最適経路であるデバイスに対する内部処理コマンドを、前記第1のイニシエータデバイス経由で送信し、
前記第1のイニシエータデバイスの負荷が第2のイニシエータデバイスの負荷以上になったならば、前記第1のイニシエータデバイスが最適経路であるデバイスに対する内部処理コマンドを前記第1のイニシエータデバイス経由で送信することを止め、前記第2のイニシエータデバイスが最適経路であるデバイスに対する内部処理コマンドを、前記第2のイニシエータデバイス経由で送信する、
ストレージシステム。
【請求項2】
前記コマンドが、I/Oコマンドであり、且つ、前記送信先デバイスが、前記複数の記憶デバイスのうちのいずれかの記憶デバイスである場合、前記プロセッサが、前記送信先デバイスに関し、最適経路についてのレスポンスタイムと後退経路についてのレスポンスタイムとを比較し、最適経路についてのレスポンスタイムが後退経路についてのレスポンスタイムよりも短ければ、前記送信先デバイスに対するI/Oコマンドの経路として、前記送信先デバイスについての最適経路を選択する、
請求項1記載のストレージシステム。
【請求項3】
前記プロセッサが、前記送信先デバイスに関し、最適経路経由で発行されたI/Oコマンドの数と後退経路経由で発行されたI/Oコマンドの数とを比較し、最適経路についてのレスポンスタイムが後退経路についてのレスポンスタイム以上でも、最適経路についてのI/Oコマンド数が後退経路についてのI/Oコマンド数以上であれば、最適経路を選択する、
請求項2記載のストレージシステム。
【請求項4】
前記プロセッサが、前記送信先デバイスに関し、後退経路についてのレスポンスタイムが最適経路についてのレスポンスタイムより短く後退経路についてのI/Oコマンド数が最適経路についてのI/Oコマンド数より多ければ、後退経路を選択する、
請求項3記載のストレージシステム。
【請求項5】
前記プロセッサが、前記コマンドがリードコマンドであれば、前記送信先デバイスに関し、最適経路についてのレスポンスタイムと後退経路についてのレスポンスタイムとを比較すること無しに、最適経路を選択する、
請求項2乃至4のうちのいずれか1項に記載のストレージシステム。
【請求項6】
前記第1及び第2のイニシエータデバイスと、前記複数のエクスパンダが、それぞれ、複数のゾーングループを構成する複数のphyを有し、
前記複数のゾーングループの各々が、同一のエクスパンダ間の物理リンクを挟むphy又は同一のエクスパンダ/イニシエータデバイス間の物理リンクを挟むphyで構成されており、
前記複数のゾーングループのうちの一部のゾーングループは、前記第1及び第2のイニシエータデバイスの各々について、内部処理コマンドが経由しI/Oコマンドが経由しないゾーングループである内部ゾーンであり、
前記プロセッサにより発行された内部処理コマンドは、前記内部ゾーンを構成するphyを経由して、その内部処理コマンドの送信先デバイスに届く、
請求項1乃至5のうちのいずれか1項に記載のストレージシステム。
【請求項7】
前記複数のゾーングループのうちの別の一部のゾーングループは、前記第1及び第2のイニシエータデバイスの各々について、I/Oコマンドが経由し内部処理コマンドが経由しないゾーングループであるI/Oゾーンであり、
同一のエクスパンダ間に関し、I/Oゾーンを構成するphyの数よりも内部ゾーンを構成するphyの数の方が小さい、
請求項6記載のストレージシステム。
【請求項8】
前記第1及び第2のイニシエータデバイスと、前記複数のエクスパンダが、それぞれ、複数のゾーングループを構成する複数のphyを有し、
前記複数のゾーングループのうちの一部のゾーングループは、前記第1のイニシエータデバイスを経由するコマンドが経由し前記第2のイニシエータデバイスを経由するコマンドが経由しないゾーングループである第1ゾーンであり、
前記第1のイニシエータデバイスに近い第1ゾーンを構成するphyの数よりも前記第1のイニシエータデバイスから遠い第1ゾーンを構成するphyの数の方が小さい、
請求項1乃至5のうちのいずれか1項に記載のストレージシステム。
【請求項9】
前記複数のゾーングループのうちの別の一部のゾーングループは、前記第2のイニシエータデバイスを経由するコマンドが経由し前記第1のイニシエータデバイスを経由するコマンドが経由しないゾーングループである第2ゾーンであり、
前記第2のイニシエータデバイスに近い第2ゾーンを構成するphyの数よりも前記第2のイニシエータデバイスから遠い第2ゾーンを構成するphyの数の方が小さい、
請求項8記載のストレージシステム。
【請求項10】
直列に接続された複数のエクスパンダであるエクスパンダ列と、
前記エクスパンダ列に直接接続された複数の記憶デバイスと、
前記エクスパンダ列のうちの1つのエクスパンダである第1のエクスパンダに直接接続された第1のイニシエータデバイスと、
前記エクスパンダ列のうちの1つのエクスパンダであり前記第1のエクスパンダとは別のエクスパンダである第2のエクスパンダに直接接続された第2のイニシエータデバイスと、
前記第1及び第2のイニシエータデバイスのうちのいずれかのイニシエータデバイスを介して、前記複数の記憶デバイス及び前記複数のエクスパンダのうちの、コマンドの送信先デバイスに、前記コマンドを送信するプロセッサと
を有し、
前記プロセッサが、前記送信先デバイスについて、前記送信先デバイスとの間のエクスパンダが少ない方のイニシエータデバイスである最適経路と、前記送信先デバイスとの間のエクスパンダが多い方のイニシエータデバイスである後退経路とのうち、前記最適経路を選択し、前記選択した最適経路経由で、前記コマンドを、前記送信先デバイスに送信するようになっており、
前記プロセッサが送信するコマンドとして、記憶デバイスに対してデータを入出力するI/Oコマンドと、データの入出力とは異なる処理をエクスパンダ又は記憶デバイスに行なわせる制御コマンドである内部処理コマンドとがあり、
前記第1及び第2のイニシエータデバイスと、前記複数のエクスパンダが、それぞれ、複数のゾーングループを構成する複数のphyを有し、
前記複数のゾーングループの各々が、1以上のphyで構成されており、
前記複数のゾーングループのうちの一部のゾーングループは、前記第1及び第2のイニシエータデバイスの各々について、内部処理コマンドが経由しI/Oコマンドが経由しないゾーングループである内部ゾーンであり、
前記プロセッサにより発行された内部処理コマンドは、前記内部ゾーンを構成するphyを経由して、その内部処理コマンドの送信先デバイスに届き、
前記複数のゾーングループのうちの別の一部のゾーングループは、前記第1及び第2のイニシエータデバイスの各々について、I/Oコマンドが経由し内部処理コマンドが経由しないゾーングループであるI/Oゾーンであり、
同一のエクスパンダ間に関し、I/Oゾーンを構成するphyの数よりも内部ゾーンを構成するphyの数の方が小さい、
ストレージシステム。
【請求項11】
直列に接続された複数のエクスパンダであるエクスパンダ列と、前記エクスパンダ列に直接接続された複数の記憶デバイスと、前記エクスパンダ列のうちの1つのエクスパンダである第1のエクスパンダに直接接続された第1のイニシエータデバイスと、前記エクスパンダ列のうちの1つのエクスパンダであり前記第1のエクスパンダとは別のエクスパンダである第2のエクスパンダに直接接続された第2のイニシエータデバイスとを有するストレージシステムの記憶制御方法であって、
(A)前記複数の記憶デバイス及び前記複数のエクスパンダのうちの、コマンドの送信先デバイスについて、前記送信先デバイスとの間のエクスパンダが少ない方のイニシエータデバイスである最適経路と、前記送信先デバイスとの間のエクスパンダが多い方のイニシエータデバイスである後退経路とのうち、前記最適経路を選択し、
(B)前記送信先デバイスについて、前記選択した最適経路経由で、前記コマンドを、前記送信先デバイスに送信し、
コマンドとして、記憶デバイスに対してデータを入出力するI/Oコマンドと、データの入出力とは異なる処理をエクスパンダ又は記憶デバイスに行なわせる制御コマンドである内部処理コマンドとがあり、
前記第1のイニシエータデバイスの負荷は、前記第1のイニシエータデバイスから発行されたI/Oコマンドの数であり、
前記第2のイニシエータデバイスの負荷は、前記第2のイニシエータデバイスから発行されたI/Oコマンドの数であり、
前記第1のイニシエータデバイスの負荷が第2のイニシエータデバイスの負荷より小さければ、(A)において、前記第1のイニシエータデバイスが最適経路であるデバイスに対する内部処理コマンドの経路として、前記第1のイニシエータデバイスを選択し、(B)において、その内部処理コマンドを、その選択した第1のイニシエータデバイス経由で送信し、
前記第1のイニシエータデバイスの負荷が第2のイニシエータデバイスの負荷以上になったならば、前記第1のイニシエータデバイスが最適経路であるデバイスに対する内部処理コマンドを前記第1のイニシエータデバイス経由で送信することを止め、(A)において、前記第2のイニシエータデバイスが最適経路であるデバイスに対する内部処理コマンドの経路として、前記第2のイニシエータデバイスを選択し、(B)において、その内部処理コマンドを、その選択した第2のイニシエータデバイス経由で送信する、
記憶制御方法。
【請求項12】
直列に接続された複数のエクスパンダであるエクスパンダ列と、前記エクスパンダ列に直接接続された複数の記憶デバイスと、前記エクスパンダ列のうちの1つのエクスパンダである第1のエクスパンダに直接接続された第1のイニシエータデバイスと、前記エクスパンダ列のうちの1つのエクスパンダであり前記第1のエクスパンダとは別のエクスパンダである第2のエクスパンダに直接接続された第2のイニシエータデバイスとを有するストレージシステムの記憶制御方法であって、
(A)前記複数の記憶デバイス及び前記複数のエクスパンダのうちの、コマンドの送信先デバイスについて、前記送信先デバイスとの間のエクスパンダが少ない方のイニシエータデバイスである最適経路と、前記送信先デバイスとの間のエクスパンダが多い方のイニシエータデバイスである後退経路とのうち、前記最適経路を選択し、
(B)前記送信先デバイスについて、前記選択した最適経路経由で、前記コマンドを、前記送信先デバイスに送信し、
プロセッサが送信するコマンドとして、記憶デバイスに対してデータを入出力するI/Oコマンドと、データの入出力とは異なる処理をエクスパンダ又は記憶デバイスに行なわせる制御コマンドである内部処理コマンドとがあり、
前記第1及び第2のイニシエータデバイスと、前記複数のエクスパンダが、それぞれ、複数のゾーングループを構成する複数のphyを有し、
前記複数のゾーングループの各々が、1以上のphyで構成されており、
前記複数のゾーングループのうちの一部のゾーングループは、前記第1及び第2のイニシエータデバイスの各々について、内部処理コマンドが経由しI/Oコマンドが経由しないゾーングループである内部ゾーンであり、
前記内部処理コマンドは、前記内部ゾーンを構成するphyを経由して、その内部処理コマンドの送信先デバイスに届き、
前記複数のゾーングループのうちの別の一部のゾーングループは、前記第1及び第2のイニシエータデバイスの各々について、I/Oコマンドが経由し内部処理コマンドが経由しないゾーングループであるI/Oゾーンであり、
同一のエクスパンダ間に関し、I/Oゾーンを構成するphyの数よりも内部ゾーンを構成するphyの数の方が小さい、
記憶制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、記憶制御に関し、例えば、複数のSAS(Serial Attached SCSI)エクスパンダを介してターゲットデバイスにコマンドを送信する技術に関する。
【背景技術】
【0002】
複数のSASエクスパンダ(以下、エクスパンダ)を有するストレージシステムが知られている。この種のストレージシステムでは、エクスパンダに記憶デバイスが接続されており、イニシエータデバイスから記憶デバイスへのコマンドが、複数のエクスパンダを経由する。
【0003】
この種のストレージシステムが、例えば特許文献1に開示されている。特許文献1によれば、直列に接続された複数のエクスパンダの両端にイニシエータデバイスが接続される(例えば図10参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】米国特許第8321596号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
ストレージシステムの大容量化が進むと、記憶デバイスの数が増え、それ故、直列に接続されるエクスパンダの数も増やす必要がある。また、より高速な応答速度をもつ記憶デバイスも登場してきている。以下、便宜上、直列に接続された複数のエクスパンダを「エクスパンダ列」と言う。
【0006】
エクスパンダの数が多いエクスパンダ列において、応答速度が比較的遅い記憶デバイス(SATA(Serial ATA)−HDD(Hard Disk Drive))が比較的後段のエクスパンダに接続されていても、コマンド発行側(例えば、コマンドを発行したマイクロプロセッサ)への影響は小さい。なぜなら、そのような記憶デバイスの応答速度よりも、その記憶デバイスへのコマンドが経由するエクスパンダの数に基づくレイテンシの方が、影響が小さいからである。すなわち、応答速度が比較的遅い記憶デバイスが、比較的前段のエクスパンダに接続されていても比較的後段のエクスパンダに接続されていても、コマンド発行側にとってのレスポンスタイムは、記憶デバイスの応答速度に基づくレスポンスタイムである。
【0007】
しかし、エクスパンダの数が多いエクスパンダ列において、応答速度が比較的速い記憶デバイス(例えばSSD(Solid State Drive))が比較的後段のエクスパンダに接続されていると、コマンド発行側への影響は大きい。具体的には、コマンド発行側には、記憶デバイスの性能が劣化しているように見える。なぜなら、そのような記憶デバイスの応答速度よりも、その記憶デバイスへのコマンドが経由するエクスパンダの数に基づくレイテンシの方が、影響が大きいからである。
【課題を解決するための手段】
【0008】
ストレージシステムが、直列に接続された複数のエクスパンダであるエクスパンダ列と、エクスパンダ列に接続された複数の記憶デバイスと、エクスパンダ列に接続された第1及び第2のイニシエータデバイスと、プロセッサとを有する。プロセッサが、複数の記憶デバイス及び前記複数のエクスパンダのうちの、コマンドの送信先デバイスについて、送信先デバイスとの間のエクスパンダが少ない方のイニシエータデバイスである最適経路と、送信先デバイスとの間のエクスパンダが多い方のイニシエータデバイスである後退経路とのうち、最適経路を選択し、選択した最適経路経由で、コマンドを、送信先デバイスに送信する。
【発明の効果】
【0009】
エクスパンダ列の長さによるレイテンシを軽減することができる。
【図面の簡単な説明】
【0010】
図1】実施例1の概要を示す。
図2】実施例1に係る計算機システムの構成を示す。
図3】実施例1に係るストレージコントローラのメモリが記憶する複数のテーブルを示す。
図4】実施例1に係るターゲット管理テーブルの構成を示す。
図5A】実施例1に係るアクセス経路管理テーブルの構成を示す。
図5B図5Aに示したテーブルのレコードがターゲットデバイスの応答速度の速い順に並び替えられた結果を示す。
図6】実施例1に係るホストI/O管理テーブルの構成を示す。
図7】実施例1に係るエクスパンダの構成を示す。
図8】実施例1に係るターゲット管理テーブル作成処理の流れを示す。
図9】実施例1に係るアクセス経路管理テーブル作成処理の流れを示す。
図10】実施例1に係るホストI/O管理テーブル作成処理の流れを示す。
図11】実施例1に係るI/Oコマンド送信処理の流れを示す。
図12】実施例1に係る内部処理コマンド送信処理の流れを示す。
図13】実施例2の概要を示す。
図14】実施例2に係るMP、コントローラ及びエクスパンダがそれぞれ管理する情報の概要を示す。
図15】実施例2に係るゾーンパーミッションテーブルの構成を示す。
図16】実施例2に係る内部処理コマンド送信処理の流れを示す。
図17A】実施例2に係るオンライン時設定処理の全体的な流れを示す。
図17B】実施例2に係るオフライン時設定処理の全体的な流れを示す。
図18】実施例3の概要を示す。
図19】実施例3に係るゾーニングテーブルの構成を示す。
図20】実施例3に係るゾーンパーミッションテーブルの構成を示す。
図21】実施例1に係る計算機システムの構成の第1の変形例を示す。
図22】実施例1に係る計算機システムの構成の第2の変形例を示す。
図23】実施例2と実施例3の組合せの一例を示す。
【発明を実施するための形態】
【0011】
以下、幾つかの実施例を説明する。
【0012】
以下の説明では、「×××テーブル」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「×××テーブル」を「×××情報」と呼ぶことができる。
【0013】
以下の説明では、ストレージシステムを管理し表示用情報を表示する1以上の計算機の集合を「管理システム」と呼ぶ。例えば、表示用情報を表示する管理計算機が管理システムであってもよいし、管理計算機と管理計算機からの表示用情報を表示する表示用計算機との組み合わせが管理システムであってもよい。管理計算機による「表示用情報を表示する」とは、管理計算機が有する表示デバイスに表示用情報を表示することであってもよいし、管理計算機(例えばサーバ)が遠隔の表示用計算機(例えばクライアント)に表示用情報を送信することであってもよい。また、管理処理の高速化や高信頼化のために複数の計算機で管理計算機と同等の処理を実現してもよく、この場合は当該複数の計算機(表示を表示用計算機が行う場合は表示用計算機も含め)が管理システムでよい。
【0014】
また、以下の説明では、同種の要素を区別して説明する場合は、その要素の参照符号に代えて、その要素に割り振られた識別子(例えばアルファベット)を使用することがある。例えば、記憶デバイスを特に区別しないで説明する場合には、記憶デバイス142と記載し、個々の記憶デバイスを区別して説明する場合には、記憶デバイスA、記憶デバイスBのように記載することがある。
【0015】
また、以下の説明における用語の意味は、下記の通りである。
・「エクスパンダ」は、SASエクスパンダの略であり、スイッチデバイスの一種である。エクスパンダは、複数のphyを有する。
・「エクスパンダ列」は、直列に接続された複数のエクスパンダである。
・「phy」は、エクスパンダが有する物理ポート(通信ポート)である。1つのphyには、1つのデバイスが接続され、そのデバイスは、例えば、別のエクスパンダ、又は、記憶デバイスである。
・「イニシエータデバイス」は、コマンドの送信元になり得るデバイスである。
・「ターゲットデバイス」は、コマンドの送信先になり得るデバイスである。本実施例では、ターゲットデバイスは、典型的には、記憶デバイスであるが、コマンドの種類によってはエクスパンダがターゲットデバイスになることもある。
・「ゾーニング」は、物理的な構成(例えばトポロジー)を論理的に区切る技術である。SASの仕様によれば、複数のゾーングループ(ゾーン)を定義することができる。1つのゾーングループに、1以上のphyを割り当てることができる。例えば、1つのエクスパンダにおける1以上のphyを或るゾーングループに割り当て、そのエクスパンダにおける別のphyを別のゾーングループに割り当てることができる。
・イニシエータデバイスとターゲットデバイスとを含んだトポロジーにおける「接続」は、具体的には、「直接接続」と「間接接続」がある。「直接接続」は、エクスパンダを介さない接続であり、「間接接続」は、1以上のエクスパンダを介した接続である。典型的には、ターゲットデバイスは、イニシエータデバイスに間接接続され、エクスパンダには、間接接続されることもあれば直接接続されることもある。以下の説明では、直接接続であるか間接接続であるかが図面或いは技術常識から明らかな場合は、単に「接続」と言うことがある。
【実施例1】
【0016】
図1は、実施例1の概要を示す。
【0017】
ストレージシステム105が、エクスパンダ列と、エクスパンダ列の両端に接続されたSASコントローラ(以下、コントローラ)A及びBと、マイクロプロセッサ(以下、MP)126とを有する。各コントローラ124は、SASプロトコルに従いコマンドを送信することができるイニシエータデバイスの一例である。
【0018】
エクスパンダ列は、前述したように、直列に接続された複数のエクスパンダ131であり、例えば、直列に接続されたエクスパンダA、B及びCである。エクスパンダAが、エクスパンダ列の一端であり、エクスパンダCが、エクスパンダ列の他端である。エクスパンダAにコントローラAが接続されており、エクスパンダCにコントローラBが接続されている。
【0019】
エクスパンダ列に、複数の記憶デバイス142が接続されている。例えば、エクスパンダAに、記憶デバイスA及びDが直接接続されており、エクスパンダBに、記憶デバイスE及びFが直接接続されており、エクスパンダCに、記憶デバイスB及びCが直接接続されている。
【0020】
コントローラ124とエクスパンダ131、及び、エクスパンダ131とエクスパンダ131は、それぞれ、ワイドリンク(例えば4本の物理リンクの集合である論理リンク)で直接接続され、記憶デバイス142とエクスパンダ131は、1本のリンクで直接接続される。
【0021】
MP126は、コントローラA及びBに接続されている。MP126は、コントローラA及びBのどちらからコマンドを送信してよい。コントローラA又はBを経由してエクスパンダ列へと出るコマンドとしては、I/O(Input/Output)コマンドと、内部処理コマンドとがある。I/Oコマンドは、記憶デバイス142に対するライトコマンド又はリードコマンドである。内部処理コマンドは、記憶デバイス142又はエクスパンダ131に対する制御コマンドである。内部処理コマンドとしては、例えば、リンクダウン等のエラーの有無をチェックするためのヘルスチェックコマンド、エクスパンダ131に接続されているファンの回転数を制御するためのコマンド等である。通常、I/Oコマンドに従い送受信されるデータよりも、内部制御コマンドの方がサイズが小さい。
【0022】
ターゲットデバイスへの経路としては、コントローラAをイニシエータデバイスとする経路(以下、経路A)とコントローラBをイニシエータデバイスとする経路(以下、経路B)の2つがある。MP126は、ターゲットデバイス毎に、最適経路と後退経路とを管理する。「最適経路」は、典型的には、短距離経路、すなわち、イニシエータデバイスとターゲットデバイスとの間に介在するエクスパンダが少ない方の経路である。一方、「後退経路」は、典型的には、長距離経路、すなわち、イニシエータデバイスとターゲットデバイスとの間に介在するエクスパンダが多い方の経路である。なお、ターゲットデバイスによっては、後退経路であっても、イニシエータデバイスとターゲットデバイスとの間に介在するエクスパンダの数が、最適経路と同じである場合もある。図1の例によれば、記憶デバイスAについては、経路Aが最適経路であり(すなわち、コントローラAが最適経路でのイニシエータデバイスであり)、経路Bが後退経路である(すなわち、コントローラBが後退経路でのイニシエータデバイスである)。また、図1の例によれば、記憶デバイスE及びFの各々については、経路A及びBのどちらが最適経路でもよい。ここでは、記憶デバイスEについては、経路Bが最適経路であり、記憶デバイスFについては、経路Aが最適経路であるとする。
【0023】
MP126は、コマンド(特にI/Oコマンド)のターゲットデバイス(記憶デバイス)に対応した最適経路をそのターゲットデバイスの後退経路よりも優先的に選択し、選択した最適経路からコマンドを送信する。図1の例によれば、I/Oコマンドのターゲットデバイスが記憶デバイスAの場合、そのI/Oコマンドは経路A経由で送信される(図1の一点鎖線矢印を参照)。また、図1には示さないが、I/Oコマンドのターゲットデバイスが記憶デバイスBの場合、そのI/Oコマンドは経路B経由で送信される。
【0024】
このように、エクスパンダ列の両端にイニシエータデバイスが接続され、ターゲットデバイス毎に、ターゲットデバイスまでの距離(介在するエクスパンダの数)がより短い最適経路(イニシエータデバイス)が選択され、最適経路経由でコマンドが送信される。これにより、エクスパンダ列の長さ(エクスパンダの段数)による影響が実質半分程度に減り、その結果、エクスパンダ列の長さによるレイテンシを軽減することができる。
【0025】
また、MP126は、内部処理コマンドについては、I/Oコマンドの処理(I/Oコマンドの送信と、そのI/Oコマンドのレスポンスの受信)を妨げないよう、内部処理コマンドを送信する。例えば、MP126は、I/Oコマンドの送信に関して経路Bの負荷よりも経路Aの負荷が高い場合(例えば、経路B経由で送信するI/Oコマンドの数よりも経路A経由で送信するI/Oコマンドの数の方が多い場合)、経路Bが最適経路であるターゲットデバイスに対する内部処理コマンドを、経路Aが最適経路であるターゲットデバイスに対する内部処理コマンドよりも優先的に経路B経由で送信する(図1の破線矢印を参照)。なお、MP126は、I/Oコマンドについては、そのI/Oコマンドのターゲットデバイスに対応した最適経路を選択し、内部処理コマンドについては、その内部処理コマンドのターゲットデバイスに対応した後退経路を選択してもよい。しかし、本実施例では、MP126は、内部処理コマンドについてもその内部処理コマンドのターゲットデバイスに対応した最適経路を優先的に選択する。これにより、内部処理コマンドのターゲットデバイスに対応した後退経路のイニシエータデバイスを最適経路とするターゲットデバイスへのI/Oコマンドの処理の性能が劣化することを避けることが期待できる。
【0026】
以下、実施例1を詳述する。
【0027】
図2は、実施例1に係る計算機システムの構成を示す。
【0028】
計算機システムは、複数(又は1つ)のホスト計算機(以下、ホスト)101と、ストレージシステム105と、管理システム103とを有する。ホスト101とストレージシステム105が、SAN(Storage Area Network)102に接続され、管理システム103とストレージシステム105が、LAN(Local Area Network)104に接続される。SAN102及びLAN104の各々に代えて別種の通信ネットワークが採用されてもよいし、ホスト101、管理システム103及びストレージシステム105が同一の通信ネットワークに接続されてもよい。
【0029】
ホスト101は、ストレージシステム105にユーザデータのI/Oリクエストを送信する。ユーザデータは、ホスト101で使用されるデータである。I/Oリクエストは、I/O先の場所を表すI/O先情報を含む。I/O先情報は、例えば、I/O先のLU(Logical Unit)のLUN(Logical Unit Number)と、そのLUにおける領域のLBA(Logical Block Address)とを含む。LUは、ストレージシステム105から提供される論理的な記憶デバイスである。
【0030】
管理システム103は、ストレージシステム105を管理する1以上の計算機である。管理システム103からストレージシステム105に対して種々の設定をすることができる。
【0031】
ストレージシステム105は、ユーザデータ等のデータを記憶する記憶部と、記憶部に対するデータのI/Oを制御するコントローラ部とを有する。コントローラ部は、例えば、基本筐体106を有し、記憶部は、例えば、複数の増設筐体107を有する。基本筐体106には、二重化されたストレージコントローラ120(第1のストレージコントローラA及び第2のストレージコントローラB)が格納される。増設筐体107には、二重化されたエクスパンダ(第1及び第2のエクスパンダ)131と、二重化されたエクスパンダ131の両方に接続される記憶デバイス群141とが格納される。記憶デバイス群141は、1以上の記憶デバイス(物理的な記憶デバイス)142であり、各記憶デバイス142が、二重化されたエクスパンダ131の両方に接続される。複数の増設筐体107がそれぞれ有する複数の第1のエクスパンダ131(エクスパンダA、B及びC)が直列に接続されることで、第1のエクスパンダ列が構成され、複数の増設筐体107がそれぞれ有する複数の第2のエクスパンダ131(エクスパンダD、E及びF)が直列に接続されることで、第2のエクスパンダ列が構成される。つまり、二重化されたエクスパンダ列が構成される。具体的には、第1のエクスパンダ列については、ターゲットデバイスへの経路として、図1を参照して説明したように、コントローラAがイニシエータデバイスとなる経路Aと、コントローラBがイニシエータデバイスとなる経路Bがあり、第2のエクスパンダ列については、ターゲットデバイスへの経路として、コントローラCがイニシエータデバイスとなる経路Cと、コントローラDがイニシエータデバイスとなる経路Dがある。
【0032】
以下、ストレージコントローラAを例に取り、ストレージコントローラ120の構成を説明する。なお、以下の説明では、通信インタフェースデバイスを「I/F」と略記する。
【0033】
ストレージコントローラAは、CHA(チャネルアダプタ)121と、データCTL(データコントローラ)122と、DKA(ディスクアダプタ)123と、LAN I/F125と、MP(マイクロプロセッサ)126と、メモリ127とを有する。
【0034】
CHA121は、フロントエンドのI/Fの一例であり、SAN102を介してホスト101と通信するI/Fである。CHA121は、ホスト101からI/Oリクエストを受信する。
【0035】
データCTL122は、ストレージコントローラA内の構成要素間のデータ転送を制御する回路である。例えば、データCTL122は、CHA121が受信したI/OリクエストをMP126に転送する。
【0036】
DKA123は、バックエンドのI/Fの一例であり、SANプロトコルに従い記憶デバイス142と通信するI/Fである。本実施例では、第1のエクスパンダ列の両端に接続された2つのコントローラ(SASコントローラ)124をそれぞれ有する2つのDKA123が、ストレージコントローラAに備えられる。
【0037】
LAN I/F125は、LAN104を介して管理システム103と通信するI/Fである。
【0038】
MP126は、CHA121が受信したI/Oリクエストを処理する。具体的には、例えば、MP126は、そのI/OリクエストのI/O先に基づきデータのI/O先となる1又は複数の記憶デバイス142を特定し、特定した各記憶デバイス142にI/Oコマンドを送信する。そのI/Oコマンドに従い1つの記憶デバイス142に対して書き込まれる又は読み出されるデータは、ユーザデータ、ユーザデータの一部、又は、パリティでよい。MP126は、I/Oリクエストに従い1又は複数の記憶デバイス142に対して書き込まれる又は読み出されたユーザデータをメモリ127にキャッシュする。
【0039】
メモリ127は、1以上のメモリの集合でよく、揮発性のメモリ及び不揮発性のメモリのうちの少なくとも1つを含んでよい。メモリ127は、1又は複数の記憶デバイス142に対して書き込まれる又は読み出されたユーザデータのキャッシュ領域を含む。また、メモリ127は、複数のテーブルを記憶する。
【0040】
MP126が1つのストレージコントローラ120に複数存在してもよい。この場合、メモリ127の少なくとも一部領域が、複数のMP126にとっての共有メモリ領域であってもよい。また、この場合、前述の複数のテーブルが、共有メモリ領域に記憶され、各MP126が各テーブルを参照可能でもよい。
【0041】
図3は、メモリ127が記憶する複数のテーブルを示す。
【0042】
メモリ127は、ターゲット管理テーブル201、アクセス経路管理テーブル202及びホストI/O管理テーブル203を記憶する。ターゲット管理テーブル201は、ターゲットデバイスに関する情報を有するテーブルであり、アクセス経路管理テーブル202は、ターゲットデバイス毎の最適経路及び後退経路を管理するテーブルであり、ホストI/O管理テーブル203は、エクスパンダ列の一端からの経路とエクスパンダ列の他端からの経路との各々についての負荷に関する情報を有する。
【0043】
図4は、ターゲット管理テーブル201の構成を示す。
【0044】
ターゲット管理テーブル201は、コントローラ124毎に、レコード群を有する。1つのレコード群は、記憶デバイス毎にレコードを有する。1つのレコードは、コントローラ401、段数N402、エクスパンダ403、ターゲット404、ターゲット種別405、リンクレート406及び最大リンクレート407を有する。コントローラ401は、記憶デバイスを検出したコントローラ124の識別情報である。段数N402は、そのコントローラ124により検出されたエクスパンダの段数を表す情報である。エクスパンダの段数は、そのコントローラ124から数えた場合の数(N番目)である。エクスパンダ403は、そのコントローラ124により検出されたエクスパンダの識別情報(例えば割り当てられたSASアドレス)である。ターゲット404は、そのコントローラ124により検出された記憶デバイスの識別情報(例えば割り当てられたSASアドレス)である。ターゲット種別405は、そのコントローラ124により検出された記憶デバイスの種別を表す情報である。リンクレート406は、記憶デバイスのリンクレート(記憶デバイスが所定のコマンド(例えばモードセンスコマンド)を受信し応答する時点でのリンクレート)を表す情報である。最大リンクレート407は、記憶デバイスの最大リンクレートを表す情報である。
【0045】
図4によれば、コントローラAにとっては、最前段のエクスパンダはエクスパンダAであり最後段のエクスパンダがエクスパンダCであり、コントローラBにとっては、その逆、すなわち、最前段のエクスパンダはエクスパンダCであり最後段のエクスパンダがエクスパンダAである。
【0046】
ターゲット管理テーブル201を基に、アクセス経路管理テーブル202及びホストI/O管理テーブル203が作成される。ターゲット管理テーブル201は、アクセス経路管理テーブル202及びホストI/O管理テーブル203が作成された後、メモリ127から削除されてもよい。
【0047】
図5Aは、アクセス経路管理テーブル202の構成を示す。
【0048】
アクセス経路管理テーブル202は、記憶デバイス毎にレコードを有する。1つのレコードは、ターゲット501、最適経路502及び後退経路503を有する。ターゲット501は、記憶デバイスの識別情報(例えば割り当てられたSASアドレス)である。最適経路502は、記憶デバイスから近い方の(介在するエクスパンダの数が少ない方の)コントローラ(イニシエータデバイス)の識別情報(例えば割り当てられたSASアドレス)である。後退経路503は、記憶デバイスから遠い方の(介在するエクスパンダの数が多い方の)コントローラの識別情報である。
【0049】
アクセス経路管理テーブル202のレコードは、例えば図5Bに示すように、記憶デバイス(ターゲットデバイス)の応答速度の速い順に並び変えられてもよい。また、少なくとも1つのターゲットデバイスについて、最適経路502及び後退経路503のうちの少なくとも一方が無くてよい。例えば、最適経路502のコントローラがわかれば、後退経路503は残りのコントローラである。
【0050】
図6は、ホストI/O管理テーブル203の構成を示す。
【0051】
ホストI/O管理テーブル203は、コントローラ124毎に、レコード群を有する。1つのレコード群は、エクスパンダ毎にサブレコード群を有する。1つのサブレコード群は、記憶デバイス種別(ターゲット種別)毎にレコードを有する。1つのレコードは、コントローラ601、エクスパンダ602、ターゲット種別603、I/O数604、平均レスポンスタイム605、リンクレート606及び内部処理コマンド数607を有する。コントローラ601は、コントローラ124の識別情報(例えば割り当てられたSASアドレス)である。エクスパンダ602は、そのコントローラ124により検出されたエクスパンダ131の識別情報である。ターゲット種別603は、記憶デバイスの種別を表す情報である。I/O数604は、記憶デバイス種別に属する記憶デバイスに対応したI/Oコマンド数の和である。平均レスポンスタイム605は、記憶デバイス種別に属する記憶デバイスに対応したレスポンスタイムの平均である。リンクレート406は、記憶デバイス種別に属する記憶デバイスに対応したリンクレート406の平均である。内部処理コマンド数407は、記憶デバイス種別に属する記憶デバイスに対応した内部処理コマンド数の和である。コントローラA(B)経由で記憶デバイスにI/Oコマンドが送信される場合に、MP Aが、コントローラA(B)とその記憶デバイスが直接接続されているエクスパンダとその記憶デバイスのターゲット種別とに対応したI/O数604を更新する。なお、コントローラA(B)に対応した「All Expander」は、コントローラA(B)に対応した「Expander A」から「Expander C」についての集計結果であるが、コントローラA(B)に対応した「All Expander」についても、I/O数604が更新される。同様に、コントローラA(B)経由で記憶デバイスに内部処理コマンドが送信される場合に、MP Aが、コントローラA(B)とその記憶デバイスが直接接続されているエクスパンダとその記憶デバイスのターゲット種別とに対応した内部処理コマンド数607を更新する(また、コントローラA(B)に対応した「All Expander」についても、内部処理コマンド数607が更新される)。
【0052】
図6によれば、エクスパンダ602によっては、平均レスポンスタイム605が「−」となるターゲット種別603がある。これは、そのエクスパンダ602から特定されるエクスパンダに、そのターゲット種別603が表す種別に属する記憶デバイスが直接接続されていないことを意味する。例えば、エクスパンダAに、SAS−HDDが接続されているがSATA−HDDもSSDも直接接続されていないことがわかる。これは、このテーブル203の基になるターゲット管理テーブル201(図4参照)からも明らかである。
【0053】
また、図6によれば、コントローラA経由のターゲットでありエクスパンダAに接続されている2つのSAS−HDD(記憶デバイスA及びD)について、合計で600個のI/Oコマンドがあり(I/O数604「600」)、平均レスポンスタイムが6ミリ秒であり(平均レスポンスタイム605「6」)、リンクレートの平均が6Gb/sであり(リンクレート606「6」)、合計で15個の内部処理コマンドがある(内部処理コマンド数607「15」)ことがわかる。また、図6によれば、コントローラB経由のターゲットでありエクスパンダAに接続されている2つのSAS−HDD(記憶デバイスA及びD)について、合計で100個のI/Oコマンドがあり(I/O数604「100」)、平均レスポンスタイムが7ミリ秒であり(平均レスポンスタイム605「7」)、リンクレートの平均が6Gb/sであり(リンクレート606「6」)、内部処理コマンドが1つもない(内部処理コマンド数607「0」)ことがわかる。
【0054】
なお、図6によれば、コントローラ123毎に、エクスパンダ602として、「All Expander」がある。これは、エクスパンダA〜Cに対応した情報604〜607の各々についての統計である。例えば、コントローラAのエクスパンダ602「All Expander」に対応したターゲット種別603「SAS」について、I/O数604は、エクスパンダA〜CのI/O数604の和であり、平均レスポンスタイム605は、エクスパンダA及びBの平均レスポンスタイム605の平均であり(エクスパンダCについて平均レスポンスタイム605は「−」であるため除かれる)、リンクレート606は、エクスパンダA〜Cのリンクレート606の平均であり、内部処理コマンド数607は、エクスパンダA〜Cの内部処理コマンド数607の和である。
【0055】
また、図6によれば、各エクスパンダにつき、ターゲット種別毎に集計が行われるが、それに代えて、各エクスパンダにつき、ターゲットデバイス毎に、I/O数、平均レスポンスタイム、リンクレート及び内部処理コマンド数がホストI/O管理テーブル203に記録されてよい。
【0056】
図7は、エクスパンダ131の構成を示す。
【0057】
エクスパンダ131は、例えばLSI(Large Scale Integration)である。エクスパンダ131は、デバイスI/F701と、スイッチ回路703と、メモリ721と、MP704と、FM(フラッシュメモリ)705と、ファンI/F706とを有する。増設筐体107に、ファン707が格納されており、そのファン707がファンI/F706に接続される。
【0058】
デバイスI/F701は、デバイスと通信する。ここで言う「デバイス」は、記憶デバイス142又は別のエクスパンダ131である。デバイスI/F701は、複数のPhy(物理ポート)711で構成されている。複数のphy711は、記憶デバイス142が直接接続されるphy711と、別のエクスパンダ131が直接接続されるphy711とを含む。エクスパンダ131が最前段のエクスパンダ131の場合、複数のphy711は、コントローラ124が直接接続されるphyを含む。
【0059】
スイッチ回路703は、ルーティングを行うハードウェア回路である。スイッチ回路703には、複数のPhy711とMP704とが接続されている。スイッチ回路703は、メモリ721を有し、メモリ721が、エクスパンダルートテーブル731及び直接デバイステーブル732を記憶する。ルーティングは、それらテーブル731及び732を基に行われる。ルーティングテーブル731は、phy毎に、phy経由でアクセス可能なデバイス(エクスパンダ又は記憶デバイス)の識別情報(例えば割り当てられたSASアドレス)を有する。直接デバイステーブル732は、直接接続されているデバイスの識別情報(例えばSASアドレス)とphyの識別情報(例えば番号)との対応関係を有する。
【0060】
メモリ721は、情報及びコンピュータプログラム、例えば、デバイスI/F情報741、及び、ファームウェアのような制御プログラム742を記憶する。
【0061】
FM705は、メモリ702に記憶されている情報等の退避先となる不揮発性メモリの一例である。
【0062】
デバイスI/F情報741は、phy711毎のステータス情報(例えば、通信可能を意味する“Ready”、通信不可能であることを意味する“Not-ready”)を有する。
【0063】
制御プログラム742は、MP704に実行されることで、例えば、phyの有効/無効を制御したり、各phyをポーリングすることにより各phyのステータスを検出したり、エラーが検出された場合にエラー情報をブロードキャストしたり、コントローラ124から受信したコマンド(例えばI/Oコマンド又は内部処理コマンド)に応じてそのコマンドを処理したりすることができる。例えば、コマンドが内部処理コマンドであり、その内部処理コマンドがファンの回転数制御のためのコマンドの場合、制御プログラム742が、ファン707の回転数を制御する。
【0064】
以下、本実施例で行われる処理を説明する。なお、以下の説明では、ストレージコントローラA及び第1のエクスパンダ列(エクスパンダA〜C)を例に取るが、ストレージコントローラB及び第2のエクスパンダ列(エクスパンダD〜F)についても同様の処理が行われる。また、以下の説明では、エクスパンダ及び記憶デバイスのそれぞれの識別情報は、SASアドレスとする。
【0065】
図8は、ターゲット管理テーブル作成処理の流れを示す。
【0066】
この処理は、コントローラA及びBの初期化が完了した場合に、開始される。MP Aは、コントローラA及びBのうちの一方のコントローラAについて、S801〜S805を行う。
【0067】
具体的には、MP Aが、N=1を設定する(S801)。変数Nは、エクスパンダの段数である。変数Nは、MP A内のレジスタ或いはメモリAのような記憶領域に設定される。Nの値は、後述するように1ずつインクリメントされる。つまり、S802以降の処理が、コントローラAにとって最前段のエクスパンダから順次後段のエクスパンダにかけて行われることを意味する。MP Aが、テーブル201に、コントローラ401「コントローラA」を書き、段数N402「1」を書く。MP Aが、N段目のエクスパンダにディスカバーコマンドを、コントローラAを介して発行する(S802)。これにより、MP Aが、N段目のエクスパンダから、N段目のエクスパンダのSASアドレスとN段目のエクスパンダに直接接続されている各デバイス(記憶デバイス及びエクスパンダ)のSASアドレスとを含んだ応答を、コントローラAを介して受信する。MP Aが、テーブル201に、エクスパンダ403として、エクスパンダSASアドレス(N段目のエクスパンダのSASアドレス)を書き、ターゲット404として、各ターゲットSASアドレス(N段目のエクスパンダに直接接続されている各ターゲットデバイスのSASアドレス)を書く。MP Aが、その情報から特定される各ターゲットデバイスに、ターゲットデバイスのSASアドレスを指定したインクワイアリコマンドを、コントローラAを介して発行する(S803)。これにより、MP Aが、N段目のエクスパンダに直接接続されている各ターゲットデバイスから、ターゲットデバイスの形名を含んだ応答を、コントローラAを介して受信する。MP Aは、受信した応答中の形名から、ターゲット種別を特定し、テーブル201に、ターゲット種別405として特定したターゲット種別を書く。MP Aは、N段目のエクスパンダに直接接続されている各ターゲットデバイスに、モードセンスコマンドを、コントローラAを介して発行する(S804)。これにより、MP Aが、N段目のエクスパンダに直接接続されている各ターゲットデバイスから、ターゲットデバイスのリンクレート及び最大リンクレートを含んだ応答を、コントローラAを介して受信する。MP Aは、テーブル201に、受信した応答中のリンクレート及び最大リンクレートを、リンクレート406及び最大リンクレート407として書く。MP Aは、S802で発行したディスカバーコマンドの応答から、N段目のエクスパンダより後段にエクスパンダが存在するか否かを判断する(S805)。S805の判断結果が真の場合(S805:YES)、MP Aは、N=N+1とし(S806)、S802以降の処理を行う。
【0068】
S805の判断結果が偽の場合(S805:NO)、MP Aは、他方のコントローラBについてもS801以降の処理を行ったか否かを判断する(S807)。S807の判断結果が偽の場合(S807:NO)、MP Aは、他方コントローラBについてS801以降の処理を行う。S807の判断結果が真の場合(S807:YES)、テーブル201の作成処理が終了する。この時点で、ターゲット管理テーブル201が完成している。
【0069】
テーブル201の作成処理の後、そのテーブル201を基に、アクセス経路管理テーブル202及びホストI/O管理テーブル203が作成される。
【0070】
図9は、アクセス経路管理テーブル作成処理の流れを示す。
【0071】
MP Aが、N=1を設定する(S901)。
【0072】
次に、MP Aが、ターゲット管理テーブル201のうちの、コントローラAについてN段目のエクスパンダに対応したサブレコード群と、コントローラBについてN段目(及びN段目よりも前段)のエクスパンダに対応したサブレコード群とを比較する(S902)。
【0073】
そして、MP Aは、コントローラAにとってのN段目のエクスパンダとコントローラBにとってのN段目のエクスパンダの各々が第1のエクスパンダ列の真ん中のエクスパンダ或いはそれよりも後段のエクスパンダか否かを判断する。例えば、MP Aは、コントローラAのN段目のエクスパンダについての全てのターゲットSASアドレスが、コントローラBのN段目のエクスパンダについての全てのターゲットSASアドレスと一致するか否かを判断する(S903)。S903の判断結果が偽の場合(S903:NO)、MP Aは、コントローラAのN段目のエクスパンダについての全てのターゲットSASアドレスが、コントローラBのN段目より前段のエクスパンダについての全てのターゲットSASアドレスと一致するか否かを判断する(S904)。
【0074】
S904の判断結果が偽であるということは、コントローラA及びBのそれぞれにとって、N段目のエクスパンダは、第1のエクスパンダ列の真ん中のエクスパンダよりも前段に存在する。このため、S904の判断結果が偽の場合(S904:NO)、MP Aは、テーブル202に、コントローラAにとってのN段目のエクスパンダに直接接続されている各ターゲットデバイスについては、最適経路502「コントローラA」及び後退経路503「コントローラB」を書き、コントローラBにとってのN段目のエクスパンダに直接接続されている各ターゲットデバイスについては、最適経路502「コントローラB」及び後退経路503「コントローラA」を書く(S905)。そして、MP Aは、N=N+1とし(S906)、S902以降を行う。
【0075】
S904の判断結果が真であるということは、コントローラA及びBのそれぞれにとって、N段目のエクスパンダは、第1のエクスパンダ列の真ん中のエクスパンダよりも後段に存在する。言い換えれば、S904の判断結果が真であるということは、第1のエクスパンダ列に接続されている全てのターゲットデバイスについて最適経路が設定済みであるということである。このため、S904の判断結果が真の場合(S904:YES)、この作成処理が終了する。アクセス経路管理テーブル202は既に完成しているからである。
【0076】
S903の判断結果が真であるということは、コントローラA及びBのそれぞれにとって、N段目のエクスパンダは、第1のエクスパンダ列の真ん中のエクスパンダである。このため、その真ん中のエクスパンダに直接接続されている各ターゲットデバイスにとって、イニシエータデバイスがコントローラA及びBのいずれであっても、イニシエータデバイスまでの距離(介在するエクスパンダの数)は同じである。そこで、S903の判断結果が真の場合(S903:YES)、MP Aは、N段目のエクスパンダ(真ん中のエクスパンダ)に直接接続されているターゲットデバイスのうちの半分については、最適経路502「コントローラA」及び後退経路503「コントローラB」とし、残り半分については、最適経路502「コントローラB」及び後退経路503「コントローラA」とする。なお、真ん中のエクスパンダに直接接続されているターゲットデバイスについて、最適経路502を「コントローラA」とするか「コントローラB」とするかの配分は、上記のように単に1:1とすることに代えて、真ん中のエクスパンダ(及び真ん中のエクスパンダより前段のエクスパンダ)に直接接続されているターゲットデバイスの応答速度(ターゲット種別)を基に決定されてよい。例えば、コントローラAの最前段のエクスパンダから真ん中のエクスパンダにかけてのターゲットデバイスの応答速度の平均よりも、コントローラBの最前段のエクスパンダから真ん中のエクスパンダにかけてのターゲットデバイスの応答速度の平均の方が早い場合には、真ん中のエクスパンダに直接接続されているターゲットデバイスについて、コントローラBを最適経路とするターゲットデバイスの方が多い、或いは、応答速度が比較的遅いターゲットデバイスについてコントローラBが優先的に最適経路とされてよい。なぜなら、このケースでは、コントローラBから真ん中のエクスパンダについて応答速度平均が比較的速いため、リンクの占有時間が比較的短いと考えられるからである。
【0077】
図10は、ホストI/O管理テーブル作成処理の流れを示す。
【0078】
MP Aは、コントローラA及びBのうちの一方のコントローラAについて、S1001〜S1004を行う。
【0079】
具体的には、MP Aが、N=1を設定する(S1001)。次に、MP Aが、ターゲット管理テーブル201における、N段目のエクスパンダに対応したサブレコード群を基に、テーブル203に、コントローラAについて、N段目のエクスパンダに対応した情報402〜407を書く(S1002)。リンクレート606は、同一のターゲット種別に属する1以上のターゲットデバイスのリンクレート406の平均である。また、I/O数604、平均レスポンスタイム605及び内部処理コマンド数607は、初期の段階では初期値(例えばゼロ)であり、ストレージシステム105がオンライン状態となって以降、適宜に更新される。MP Aは、N段目のエクスパンダより後段にエクスパンダが存在するか否かを判断する(S1003)。S1003の判断結果が真の場合(S1003:YES)、MP Aは、N=N+1とし(S1004)、S1002以降の処理を行う。
【0080】
S1003の判断結果が偽の場合(S1003:NO)、MP Aは、コントローラAについて、エクスパンダA〜Cのレコード群に基づく、エクスパンダ602「All Expander」のレコード群を、テーブル203に追加し(S1005)、その後、他方のコントローラBについてもS1001以降の処理を行ったか否かを判断する(S1006)。S1006の判断結果が偽の場合(S1006:NO)、MP Aは、他方コントローラBについてS1001以降の処理を行う。S1006の判断結果が真の場合(S1006:YES)、テーブル203の作成処理が終了する。この時点で、ホストI/O管理テーブル203が完成している。
【0081】
図11は、I/Oコマンド送信処理の流れを示す。
【0082】
MP Aは、I/O先をチェックする(S1101)。例えば、MP Aは、I/Oコマンドの基となるI/Oリクエスト(ホスト101からのI/Oリクエスト)で指定されているI/O先LBAを基に、ターゲットデバイス(I/O先の記憶デバイス)を特定する。
【0083】
MP Aは、アクセス経路管理テーブル202をチェックする(S1102)。例えば、MP Aは、S1101で特定されたターゲットデバイスに対応した最適経路(コントローラ)及び後退経路(コントローラ)を特定する。
【0084】
MP Aは、ホストI/O管理テーブル203をチェックする(S1103)。例えば、MP Aは、S1102で特定された最適経路(コントローラ)に対応したI/O数604及び平均レスポンスタイム605を特定し、且つ、S1102で特定された後退経路(コントローラ)に対応したI/O数604及び平均レスポンスタイム605を特定する。なお、最適経路に対応したI/O数604及び平均レスポンスタイム605は、最適経路について、ターゲットデバイスが直接接続されているエクスパンダとターゲットデバイスのターゲット種別との両方に対応したI/O数604及び平均レスポンスタイム605であり、後退経路に対応したI/O数604及び平均レスポンスタイム605は、後退経路について、ターゲットデバイスが直接接続されているエクスパンダとターゲットデバイスのターゲット種別との両方に対応したI/O数604及び平均レスポンスタイム605である。具体的には、ここでのターゲットデバイスが記憶デバイスA(SAS−HDD)の場合、最適経路に対応したI/O数604及び平均レスポンスタイム605は、「Controller A」、「Expander A」及び「SAS」に対応した「600」及び「6」であり、後退経路に対応したI/O数604及び平均レスポンスタイム605は、「Controller B」、「Expander A」及び「SAS」に対応した「100」及び「7」である。なお、「Expander A」に代えて又は加えて、「All Expander」が採用されてもよい。
【0085】
MP Aは、I/Oコマンドがリードコマンドか否かを判断する(S1104)。S1104の判断結果が真の場合(S1104:YES)、MP Aは、S1102で特定された最適経路を選択し、その最適経路からI/Oコマンド(リードコマンド)をターゲットデバイスに送信する(S1107)。リードコマンドは、ホスト101からリードリクエストをMP Aにより受信された場合に送信されるが、そのリードリクエストに対する応答(リードリクエストに従うリード対象のユーザデータ)を短時間でホスト101に返すことが望ましい。そのため、リードコマンドに対する応答も短時間でターゲットデバイスからMP Aに返ることが望ましい。S1104及びS1107によれば、I/Oコマンドがリードコマンドであれば、そのI/Oコマンドは必ず最適経路から送信される。これにより、リードコマンドに対する応答を短時間で受信することが期待できる。なお、S1104は、S1102とS1103の間に行われ、S1104:YESの場合、S1103がスキップされ、S1107が行われてよい。
【0086】
S1104の判断結果が偽の場合(S1104:NO)、MP Aは、後退経路に対応した平均レスポンスタイム605が最適経路に対応した平均レスポンスタイム605より長いか否かを判断する(S1105)。これらの平均レスポンスタイム605は、S1103で既に特定されている。平均レスポンスタイム605が長いということは、負荷が高いということである。
【0087】
S1105の判断結果が真の場合(S1105:YES)、MP Aは、S1102で特定された最適経路を選択し、その最適経路からI/Oコマンドをターゲットデバイスに送信する(S1107)。これにより、負荷の低い方の経路である最適経路からI/Oコマンドが送信されるので、そのI/Oコマンドに対する応答を短時間で受信することが期待できる。
【0088】
S1105の判断結果が偽の場合(S1105:NO)、MP Aは、後退経路に対応したI/O数604が最適経路に対応したI/O数604より多いか否かを判断する(S1106)。これらのI/O数604も、S1103で既に特定されている。
【0089】
S1106の判断結果が真の場合(S1106:YES)、MP Aは、S1102で特定された後退経路を選択し、その後退経路からI/Oコマンドをターゲットデバイスに送信する(S1108)。S1105:NO且つS1106:YESということは、後退経路の方が、平均レスポンスタイムが短く(負荷が低く)且つI/O数が多いということである。このため、後退経路の方がI/Oコマンドのスループットが高いと考えられ、故に、最適経路を使用するよりも短時間でI/Oコマンドの応答を受信できる可能性が高い。
【0090】
S1106の判断結果が偽の場合(S1106:NO)、MP Aは、S1102で特定された最適経路を選択し、その最適経路からI/Oコマンドをターゲットデバイスに送信する(S1107)。S1105:NO且つS1106:NOということは、後退経路の方が平均レスポンスタイムが短いが、その原因は、単に後退経路の方がI/O数が少ないからである可能性が高いと考えられる。このため、最適経路の方が短時間でI/Oコマンドの応答を受信できる可能性が高い。
【0091】
以上が、I/Oコマンドの送信処理の流れである。なお、図11によれば、S1106よりS1105の方が先に行われるが、これは、I/O数を基準とした経路判断より平均レスポンスタイムを基準とした経路判断が優先されていることを意味する。これにより、I/Oコマンドに対する応答をより短時間で受信できる経路を正確に選択できる確率が高まる。また、図11によれば、I/O数を基準とした経路判断が、平均レスポンスタイムを基準とした経路判断の補助的な判断として行われる。これにより、I/Oコマンドに対する応答をより短時間で受信できる経路を選択できる確率が一層高まる。
【0092】
図12は、内部処理コマンド送信処理の流れを示す。
【0093】
MP Aは、I/O数をチェックする(S1201)。例えば、MP Aは、ホストI/O管理テーブル203から、コントローラAのI/O数(コントローラAの「All Expander」に対応したI/O数604の合計)と、コントローラBのI/O数(コントローラBの「All Expander」に対応したI/O数604の合計)とを特定する。
【0094】
MP Aは、コントローラAのI/O数よりもコントローラBのI/O数が多いか否かを判断する(S1202)。
【0095】
S1202の判断結果が真の場合(S1202:YES)、MP Aは、I/O数の多少が逆転するまでの間(コントローラBのI/O数よりもコントローラAのI/O数が多くなるまでの間)、コントローラAが最適経路となるデバイス(記憶デバイス又はエクスパンダ)に対する内部処理コマンドを、そのデバイスに送信する(S1203)。つまり、コントローラBのI/O数の方が多い場合には、コントローラAを最適経路とするデバイスに対する内部処理コマンドが、コントローラBを最適経路とするデバイスに対する内部処理コマンドよりも優先的に処理される。これにより、I/Oコマンドの処理と並行して内部処理コマンドを処理しても、コントローラB経由でのI/Oコマンドの送信とその応答の受信に与える影響は小さい。
【0096】
コントローラBのI/O数よりもコントローラAのI/O数が多くなった場合(S1204:YES)、MP Aは、S1203を止め、コントローラBが最適経路となるデバイス(記憶デバイス又はエクスパンダ)に対する内部処理コマンドを、そのデバイスに送信する(S1205)。
【0097】
S1202の判断結果が偽の場合(S1202:NO)、S1203〜S1205と逆のことが行われる。すなわち、MP Aは、コントローラAのI/O数よりもコントローラBのI/O数が多くなるまでの間、コントローラBが最適経路となるデバイス(記憶デバイス又はエクスパンダ)に対する内部処理コマンドを、そのデバイスに送信する(S1211)。コントローラAのI/O数よりもコントローラBのI/O数が多くなった場合(S1212:YES)、MP Aは、S1211を止め、コントローラAが最適経路となるデバイス(記憶デバイス又はエクスパンダ)に対する内部処理コマンドを、そのデバイスに送信する(S1213)。
【実施例2】
【0098】
以下、実施例2を説明する。その際、実施例1との相違点を主に説明し、実施例1との共通点については説明を省略或いは簡略する。また、以下の説明において、ゾーングループの帯域の広さは、例えば、ゾーングループに割り当てられたphyの数に相当する。例えば、ゾーングループの帯域が広いとは、ゾーングループに割り当てられているphyが多いことに相当し、ゾーングループの帯域が狭いとは、ゾーングループに割り当てられているphyが少ないことに相当してよい。
【0099】
図13は、実施例2の概要を示す。
【0100】
実施例2では、SASの仕様に従うゾーニングが使用される。ゾーニングに従い定義された複数のゾーングループが、内部処理コマンド用のゾーングループとI/Oコマンド用のゾーングループとに分類される。以下、内部処理コマンド用のゾーングループを「内部ゾーン」と言い、I/Oコマンド用のゾーングループを「I/Oゾーン」と言う。内部ゾーンは、内部処理コマンドの送信及びその応答の受信に使用され、I/Oコマンドの送信及びその応答の受信には使用されない。同様に、I/Oゾーンは、I/Oコマンドの送信及びその応答の受信に使用され、内部処理コマンドの送信及びその応答の受信には使用されない。全てのコントローラ124/エクスパンダ131間、及び、全てのエクスパンダ131間に、I/Oゾーンと内部ゾーンが設けられる。I/Oゾーン間が関連付けられ、内部ゾーン間が関連付けられる。I/Oゾーンから内部ゾーンへの関連付け、及び、内部ゾーンからI/Oゾーンへの関連付けはされない。これにより、いずれのコントローラ124からいずれのエクスパンダ131又はいずれの記憶デバイス142にI/Oコマンド及び内部処理コマンドのいずれも届くことが可能である。その際、I/Oコマンドは、1以上のI/Oゾーンのみを経由し、内部処理コマンドは、1以上の内部ゾーンのみを経由する。
【0101】
図13に示す例では、コントローラBにエクスパンダCを直接接続するワイドリンクが、I/Oゾーン「8」と内部ゾーン「9」とに区切られ、エクスパンダCにエクスパンダBを直接接続するワイドリンクが、I/Oゾーン「1」と内部ゾーン「10」とに区切られているとする。そして、I/Oゾーン「8」からI/Oゾーン「1」への関連付けがされていて、且つ、内部ゾーン「9」から内部ゾーン「10」への関連付けがされているとする。
【0102】
1つのワイドリンクのうち、3本の物理リンクがI/Oゾーンに割り当てられ、残り1本の物理リンクが内部ゾーンに割り当てられる。内部ゾーンに割り当てられる物理リンクの数の方が多くても良いが、I/Oコマンドのスループットを向上する観点から、内部ゾーンよりもI/Oゾーンの方が割り当てられる物理リンクの数が多い方が望ましい。つまり、内部ゾーンの帯域よりもI/Oゾーンの帯域が広いことが望ましい。エクスパンダ131間(及び、コントローラ124とエクスパンダ131間)において、内部ゾーンに割り当てられる物理リンクは、少なくとも1本あればよい。なお、正確には、1つのゾーングループには、phyが割り当てられる。図13の例によれば、内部ゾーン「9」には、1本の物理リンクの一端のphy(コントローラBの1つのphy)と、その物理リンクの他端のphy(エクスパンダCの1つのphy)とが割り当てられる。
【0103】
内部処理コマンドのターゲットが、エクスパンダBに直接接続されておりコントローラBを最適経路とする記憶デバイスEであるとする。この場合、MP Aは、記憶デバイスEのSASアドレスを指定した内部処理コマンドを、内部ゾーン「9」を指定してコントローラBへと送信する。コントローラBは、ゾーングループ「9」に割り当てられているphyを特定し、そのphyから、内部処理コマンドを送信する。エクスパンダCは、内部処理コマンドを受信し、内部処理コマンドを受信したphyが割り当てられているゾーングループ「9」に関連付いているゾーングループ「10」を特定し、そのゾーングループ「10」に割り当てられているphyから、その内部処理コマンドを送信する。エクスパンダBは、その内部処理コマンドを受信し、その内部処理コマンドで指定されているSASアドレスに該当する記憶デバイスEに、その内部処理コマンドを送信する。
【0104】
以上、内部処理コマンドの送信を例に取ったが、I/Oコマンドの送信も同様に行われてよい。例えば、コントローラB経由のI/Oコマンドの送信の際には、MP Aは、I/Oゾーン「8」を指定してよい。
【0105】
実施例2によれば、エクスパンダ131間(及びコントローラ124とエクスパンダ131間)において、少なくとも1本の物理リンクが内部処理コマンドの送信又はその応答用に確保されている。内部処理コマンドの送信又はその応答用に確保されている物理リンクを、I/Oコマンド又はその応答は流れない。これにより、内部処理コマンドを短時間で処理することが期待できる。
【0106】
また、実施例2によれば、エクスパンダ131間(及びコントローラ124とエクスパンダ131間)において、内部処理コマンド用の物理リンクよりも多くの物理リンクがI/Oコマンドの送信又はその応答用に確保されている。I/Oコマンドの送信又はその応答用に確保されている物理リンクを、内部処理コマンド又はその応答は流れない。これにより、I/Oコマンドを短時間で処理することが期待できる。
【0107】
以下、実施例2を詳述する。
【0108】
図14は、実施例2に係るMP126、コントローラ124及びエクスパンダ131がそれぞれ管理する情報の概要を示す。
【0109】
MP126は、ゾーン管理テーブル1402をメモリ126に格納する。ゾーン管理テーブル1402は、コントローラ毎に、I/Oゾーンのゾーングループ番号と内部ゾーンのゾーングループ番号とを有する。例えば、そのテーブル1402には、コントローラBであれば、I/Oゾーンのゾーングループ番号として「8」が記録され、内部ゾーンのゾーングループ番号として「9」が記録される。
【0110】
コントローラA及びBは、それぞれ、phy管理テーブル1403を有する。phy管理テーブル1403は、コントローラが有するphy毎に、phyが割り当てられたゾーングループの番号を有する。図13の例によれば、コントローラBは、ゾーングループ「9」が指定されたコマンドを受けた場合、そのコマンドを、コントローラBのphy「3」から送信すべきことがわかる。
【0111】
エクスパンダ131(例えばメモリ721)には、ゾーニングテーブル1404とゾーンパーミッションテーブル1401とが更に記憶される。ゾーニングテーブル1404には、エクスパンダ131が有するphy毎に、phyが割り当てられるゾーングループの番号が記録される。ゾーンパーミッションテーブル1401は、どのゾーングループからどのゾーングループへの関連付けがされているかを表す。関連付けがされていないゾーン間に情報(例えばコマンド又は応答)が転送されることはない。
【0112】
なお、コントローラA(B)が、ゾーン管理テーブルを管理してもよい。この場合、コントローラA(B)が、コマンドがI/Oコマンドであるか内部処理コマンドであるかを判断し、内部処理コマンドと判断した場合に内部処理コマンドを内部ゾーン経由(内部ゾーンに割り当てられたphy経由)で送信してよい。
【0113】
図15は、ゾーンパーミッションテーブル1401の構成を示す。
【0114】
ゾーンパーミッションテーブル1401は、ソースゾーングループとデスティネーションゾーングループとの対応関係を示す。「1」が、関連付けられていることを意味し、「0」が、関連付けられていないことを意味する。図15によれば、ゾーングループ「9」からゾーングループ「10」への転送や、ゾーングループ「10」からゾーングループ「9」への転送が許可されている。このため、図13に示したように、ゾーングループ「9」からゾーングループ「10」を内部処理コマンドが流れることや、その応答が、ゾーングループ「10」からゾーングループ「9」へと流れることを実現することができる。
【0115】
図16は、実施例2に係る内部処理コマンド送信処理の流れを示す。
【0116】
MP Aは、内部処理コマンドのターゲットとなるデバイスの最適経路を特定する(S1601)。例えば、そのデバイスが記憶デバイスの場合、そのデバイスの最適経路は、アクセス経路管理テーブル202から特定される。また、例えば、そのデバイスがエクスパンダの場合、そのデバイスの最適経路は、ホストI/O管理テーブル203から特定される。そのデバイス(エクスパンダ)までの距離が短い(介在するエクスパンダ数が少ない)方のコントローラが最適経路のコントローラである。
【0117】
MP Aは、特定した最適経路(コントローラ)についての内部ゾーンのゾーングループ番号をゾーン管理テーブル1402から特定し、特定したゾーングループ番号を指定した内部処理コマンドを、特定した最適経路(コントローラ)に送信する(S1602)。
【0118】
これにより、その内部処理コマンドは、最適経路(コントローラ)のphy管理テーブル1403や、エクスパンダのゾーニングテーブル1404及びゾーンパーミッションテーブル1401を基に、その内部処理コマンドのターゲットへと転送される。
【0119】
ところで、実施例2では、ストレージシステム105の情報設定の全体的な処理流れして下記を採用することができる。以下、オンライン時とオフライン時とに分けて説明する。なお、「オンライン時」とは、ストレージシステム105が稼働中でありホスト105からI/Oリクエストを受信し得る時である。「オフライン時」とは、ストレージシステム105が非稼働中でありホスト105からI/Oリクエストを受信し得ない時(例えば電源投入時又は再起動時)である。
【0120】
図17Aは、オンライン時設定処理の全体的な流れを示す。
【0121】
MP Aが、ゾーニングを決定する(S1701)。例えば、MP Aが、ターゲット管理テーブル201を基に、エクスパンダ数(エクスパンダ列を構成するエクスパンダの数)と、高速デバイス位置(高速ターゲットデバイスが直接接続されているエクスパンダの位置(SASアドレス))とを特定する。ここで言う「高速ターゲットデバイス」とは、複数のターゲット種別のデバイスのうち比較的応答速度が高速なターゲット種別のデバイスを言う。本実施例では、高速ターゲットデバイスはSSDである。MP Aが、エクスパンダ数(N個)に対する高速デバイス位置(m番目)を基に、複数のゾーングループを定義する。例えば、コントローラAについて、高速デバイス位置が、エクスパンダ列の真ん中より後段の場合、MP Aは、高速デバイス位置がどの程度後段であるかに応じて、コントローラAから高速デバイス位置までのゾーングループの帯域を決定してよい。また、ゾーングループの定義として、エクスパンダ毎に、phyとゾーングループ番号との対応関係も決定される。
【0122】
次に、MP Aが、決定したゾーニングを設定する(S1702)。例えば、MP Aが、各エクスパンダに、決定したゾーングループに関する情報(例えば、ゾーンパーミッションテーブル1401及びゾーニングテーブル1404の情報)を含んだコマンドを送信する。そのコマンドを受けたエクスパンダは、そのコマンドで指定されている情報をメモリ721等に設定する。
【0123】
次に、MP Aが、アクセス管理テーブル202及びホストI/O管理テーブル203を作成する(S1703及びS1704)。
【0124】
最後に、MP Aが、各エクスパンダのゾーニング設定を有効にするために、各エクスパンダにリンクリセットコマンドを送信する(S1705)。
【0125】
図17Bは、オフライン時設定処理の全体的な流れを示す。
【0126】
MP Aが、ゾーニングを決定する(S1711)。具体的には、MP Aが、ターゲット管理テーブル201が示す構成と同様の構成を表す構成情報を管理システム103から受信し、その構成情報を基に、S1701と同様の方法で、ゾーニングを決定する。
【0127】
MP Aが、コントローラA及びBを初期化する(S1712)。
【0128】
MP Aが、S1711で決定したゾーニング(ゾーングループの定義)を、各エクスパンダに設定する(S1713)。具体的には、MP Aが、エクスパンダへのディスカバーコマンドに対する応答から、そのエクスパンダのSASアドレスを特定し、そのSASアドレスを用いてそのエクスパンダにゾーニングを設定する。
【0129】
次に、MP Aが、ターゲット管理テーブル201を作成し(S1714)、その後、アクセス経路管理テーブル202及びホストI/O管理テーブル203を作成する(S1715及びS1716)。
【0130】
オフライン時における情報設定では、エクスパンダの再起動が行われるので、オンライン時のようにリンクリセットコマンドをエクスパンダに送信する処理は不要である。
【0131】
なお、実施例1では、ゾーニングを除き、図17A及び図17Bに示した全体的な処理流れが採用されてもよい。
【実施例3】
【0132】
以下、実施例3を説明する。その際、実施例1及び2との相違点を主に説明し、実施例1及び2との共通点については説明を省略或いは簡略する。
【0133】
図18は、実施例3の概要を示す。
【0134】
実施例3では、実施例2と同様、SASの仕様に従うゾーニングが使用される。実施例2との相違点は、ゾーングループが、内部ゾーン又はI/Oゾーンとされるのではなく、コントローラA用のゾーングループ(以下、Aゾーン)又はコントローラB用のゾーングループ(以下、Bゾーン)とされることである。そして、コントローラAに近いAゾーンの帯域よりコントローラAから遠いAゾーンの帯域が狭く、同様に、コントローラBに近いBゾーンの帯域よりコントローラBから遠いBゾーンの帯域が狭い。言い換えれば、コントローラAから遠いAゾーンの帯域が狭い分、コントローラBに近いBゾーンの帯域が広く確保され、コントローラBから遠いBゾーンの帯域が狭い分、コントローラAに近いAゾーンの帯域が広く確保される。図18では、Aゾーンは、グレーで示されており、Bゾーンは、白色で示されている。なお、いずれのAゾーンの帯域もいずれのBゾーンの帯域も、実施例2のように、エクスパンダ数(エクスパンダ列を構成するエクスパンダの数)と高速デバイス位置(高速ターゲットデバイスが直接接続されているエクスパンダの位置)とを基に決定されてよい。
【0135】
コントローラAからのコマンドがBゾーンを経由しない、及び、コントローラBからのコマンドがAゾーンを経由しないようにするために、各エクスパンダでは、後段(次段)のエクスパンダにアクセス可能なphyが制限される。例えば、図18によれば、エクスパンダAのphy0〜2を経由してエクスパンダBにアクセス可能であるが、エクスパンダAのphy3を経由してエクスパンダBにアクセスすることは不可能である。
【0136】
光ケーブルの普及等により、エクスパンダ間の接続距離が伸び、エクスパンダ列における後段側のエクスパンダにもイニシエータデバイスが接続可能である。イニシエータデバイスから遠い位置にあるエクスパンダのphyほど、そのイニシエータデバイスから発行されるコマンドの通過数は減少すると考えられる。実施例3によれば、前述したように、コントローラAに近いAゾーンの帯域よりコントローラAから遠いAゾーンの帯域が狭く、その分、コントローラBに近いBゾーンの帯域が広く確保される。後退経路としてコントローラAが選択された場合、ターゲットデバイス近くの帯域は狭いため、そのターゲットデバイスについてレスポンスタイムは長くなり得るが、後退経路が選択される頻度は、最適経路が選択される頻度より低い。一方、ターゲットデバイスと、そのターゲットデバイスについて最適経路として選択されるコントローラとの間の帯域は、広く確保されており、故に、そのターゲットデバイスについてレスポンスタイムは短い。つまり、レスポンスタイムが短くなる可能性が高い。これにより、全体として、コマンドのスループットの向上が期待できる。
【0137】
以下、実施例3を詳述する。
【0138】
図19は、実施例3に係るゾーニングテーブル1901の構成を示す。
【0139】
ゾーニングテーブル1901は、ゾーングループの番号と、そのゾーングループに割り当てられたphyの番号を含んだphyビットマップと、デバイス(エクスパンダ)のSASアドレスとを有する。1つのSASアドレスに対応したphyビットマップは、phy毎に、そのphy経由でそのSASアドレスのデバイスとコネクション中か否か(1::使用中、0:未使用)を表す。従って、このテーブル1901によれば、phy0〜2を経由してエクスパンダB(SASアドレスB)に転送中であるが、phy3を経由してエクスパンダBに転送が行われていないことがわかる。
【0140】
図20は、実施例3に係るゾーンパーミッションテーブル2001の構成を示す。
【0141】
ゾーンパーミッションテーブル2001の構成は、実施例2に係るゾーンパーミッションテーブル1401の構成と同じである。このテーブル2001によれば、Aゾーン「8」からAゾーン「10」への転送は不可能であるが、Aゾーン「8」からBゾーン「9」への転送は可能であることがわかる。
【0142】
実施例3では、内部処理コマンドの送信処理として、実施例1での内部処理コマンドの送信処理が採用されてよい。実施例3では、内部処理コマンド(及びI/Oコマンド)は、コントローラAから送信された場合は、Aゾーン及びBゾーンのうちAゾーンのみを経由し、コントローラBから送信された場合は、Aゾーン及びBゾーンのうちBゾーンのみを経由することになる。
【0143】
以上、幾つかの実施例を説明したが、本発明は、これらの実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【0144】
例えば、1つのエクスパンダ列について、2つのイニシエータデバイスは、必ずしもそのエクスパンダ列の両端に接続されないでよい。少なくとも1つのイニシエータデバイスは、エクスパンダ列の途中のエクスパンダに接続されてよい。その一例を、図21に示す。図21によれば、コントローラBが、エクスパンダ列の途中のエクスパンダBに接続される。この構成では、エクスパンダB及びCに直接接続されている全てのターゲットデバイスについて、最適経路がコントローラBとなる。
【0145】
また、例えば、図22に示すように、1つのDKA123が2つのコントローラ(イニシエータデバイス)124を有してもよい。
【0146】
また、実施例2のゾーニングと実施例3のゾーニングが組み合わされても良い。例えば、図23に示すように、実施例3のAゾーン「8」が、I/Oゾーンと内部ゾーンとで構成されてもよい。また、このケースでは、Aゾーン及びBゾーンのそれぞれに少なくとも2本の物理リンクが割り当てられ、1本の物理リンクがI/Oゾーンに割り当てられ残り1本の物理リンクが内部ゾーンに割り当てられてよい。
【0147】
また、最適経路を選択するか後退経路を選択するかは、コマンドの実際の送信先となるターゲットデバイスのリンクレートを基に行われてよい。また、リンクレートに基づく経路選択と、ゾーニングによる経路分離(ゾーングループの定義)は、それぞれ別個に行われてもよい。
【0148】
また、1つのエクスパンダ列につき、イニシエータデバイスが3つ以上存在してもよい。
【符号の説明】
【0149】
124:SASコントローラ(イニシエータデバイス) 126:マイクロプロセッサ 131:SASエクスパンダ

図1
図2
図3
図4
図5A
図5B
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17A
図17B
図18
図19
図20
図21
図22
図23