IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ 日立ヴァンタラ株式会社の特許一覧

特開2024-165378ストレージ装置及びストレージコントローラの制御方法
<>
  • 特開-ストレージ装置及びストレージコントローラの制御方法 図1
  • 特開-ストレージ装置及びストレージコントローラの制御方法 図2
  • 特開-ストレージ装置及びストレージコントローラの制御方法 図3
  • 特開-ストレージ装置及びストレージコントローラの制御方法 図4
  • 特開-ストレージ装置及びストレージコントローラの制御方法 図5
  • 特開-ストレージ装置及びストレージコントローラの制御方法 図6
  • 特開-ストレージ装置及びストレージコントローラの制御方法 図7
  • 特開-ストレージ装置及びストレージコントローラの制御方法 図8
  • 特開-ストレージ装置及びストレージコントローラの制御方法 図9
  • 特開-ストレージ装置及びストレージコントローラの制御方法 図10
  • 特開-ストレージ装置及びストレージコントローラの制御方法 図11
  • 特開-ストレージ装置及びストレージコントローラの制御方法 図12
  • 特開-ストレージ装置及びストレージコントローラの制御方法 図13
  • 特開-ストレージ装置及びストレージコントローラの制御方法 図14
  • 特開-ストレージ装置及びストレージコントローラの制御方法 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024165378
(43)【公開日】2024-11-28
(54)【発明の名称】ストレージ装置及びストレージコントローラの制御方法
(51)【国際特許分類】
   G06F 3/06 20060101AFI20241121BHJP
   G06F 13/10 20060101ALI20241121BHJP
   G06F 13/14 20060101ALI20241121BHJP
   G06F 11/20 20060101ALI20241121BHJP
【FI】
G06F3/06 301K
G06F13/10 340A
G06F13/14 310D
G06F13/14 330E
G06F11/20 671
G06F3/06 306Z
【審査請求】有
【請求項の数】13
【出願形態】OL
(21)【出願番号】P 2023081528
(22)【出願日】2023-05-17
(71)【出願人】
【識別番号】524132520
【氏名又は名称】日立ヴァンタラ株式会社
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】田中 勝也
(72)【発明者】
【氏名】島田 健太郎
【テーマコード(参考)】
5B034
【Fターム(参考)】
5B034CC04
(57)【要約】
【課題】コントローラのプロセッサが停止する場合に、ローカルルータのような特別な制御機能部を備えることなく、ホスト装置からのI/O要求に継続して応答することを可能とする。
【解決手段】本発明のコントローラのフロントエンドインターフェースは、コントローラのプロセッサ毎に対応する複数のキューイングインターフェースを持ち、プロセッサからの指示により、ホストI/Oコマンドのエンキュー先を切り換えることができる。コントローラは、コントローラOSの再起動時に、仕掛中ホストI/Oの完了を待ってコントローラ閉塞と再起動を実施するため、その可否判断のために、プロセッサがキュー切り換えを指示してから切り換え元キューが空になるのを待つ。
【選択図】図9
【特許請求の範囲】
【請求項1】
ホスト装置からの要求を処理するストレージ装置であって、
複数のストレージコントローラを含み、
前記複数のストレージコントローラの内の第1のストレージコントローラは、
前記ホスト装置との通信のプロトコルを制御する第1のフロントエンドインターフェースと、
前記ストレージ装置の制御を行う第1のプロセッサと、を含み、
前記複数のストレージコントローラの内の第2のストレージコントローラは、
前記ストレージ装置の制御を行う第2のプロセッサを含み、
前記第1のストレージコントローラは、更に、
前記第1のプロセッサが用いる第1のアドレスと、前記第1のフロントエンドインターフェースが用いる第2のアドレスとを変換する第1のアドレス変換部と、
前記第2のプロセッサが用いる第3のアドレスと、前記第1のフロントエンドインターフェースが用いる前記第2のアドレスとを変換する第2のアドレス変換部と、
前記第1のフロントエンドインターフェースから前記第1のアドレス変換部を通じた前記第1のプロセッサへのデータ転送を制御する第1のアウトバウンドキューと、
前記第1のプロセッサから前記第1のアドレス変換部を通じた前記第1のフロントエンドインターフェースへのデータ転送を制御する第1のインバウンドキューと、を含み、
前記第2のストレージコントローラは、更に、
前記第1のフロントエンドインターフェースから前記第2のアドレス変換部を通じた前記第2のプロセッサへのデータ転送を制御する第2のアウトバウンドキューと、
前記第2のプロセッサから前記第2のアドレス変換部を通じた前記第1のフロントエンドインターフェースへのデータ転送を制御する第2のインバウンドキューと、を含み、
前記第1のフロントエンドインターフェースは、前記ホスト装置からの要求のエンキュー先として前記第2のアウトバウンドキューを指定する第1のエンキュー先切り換え指示を受信した後、次に受信する新しいホスト要求に関連する一連作業の識別子が付与された前記ホスト装置からの要求から、エンキュー先を前記第2のアウトバウンドキューに切り換える、ストレージ装置。
【請求項2】
請求項1に記載されたストレージ装置であって、
前記第1のプロセッサは、
処理を停止する前に、前記第1のエンキュー先切り換え指示を前記第1のフロントエンドインターフェースに送信し、
前記第1のアウトバウンドキュー及び前記第1のインバウンドキューが空になった後に処理を停止する、ストレージ装置。
【請求項3】
請求項2に記載されたストレージ装置であって、
前記第1のアウトバウンドキューで最も最近に処理された前記ホスト装置からの要求に関連する一連作業の識別子と、前記ホスト装置からの要求に対する応答のうち前記第1のインバウンドキューで最も最近に処理された応答のホスト要求に関連する一連作業の識別子とが同じホスト要求を示す場合に、前記第1のプロセッサが処理を停止する、ストレージ装置。
【請求項4】
請求項1に記載されたストレージ装置であって、
前記第1のフロントエンドインターフェースは、
前記第1のアウトバウンドキューに関連する第1の割込みの送信先アドレスと、前記第2のアウトバウンドキューに関連する第2の割込みの送信先アドレスと、を個別に設定し、
前記第1の割込みを、前記第1のアドレス変換部を通じて、前記第1のプロセッサに送信し、
前記第2の割込みを、前記第2のアドレス変換部を通じて、前記第2のプロセッサに送信する、ストレージ装置。
【請求項5】
請求項1に記載されたストレージ装置であって、
前記第1のプロセッサは、前記第1のフロントエンドインターフェースのエンキュー先設定を読み出すことができる、ストレージ装置。
【請求項6】
請求項5に記載されたストレージ装置であって、
前記第1のプロセッサは、再起動後に、前記第1のフロントエンドインターフェースから前記ホスト装置からの要求のエンキュー先設定を読み出した結果、エンキュー先が前記第2のアウトバウンドキューであった場合に、エンキュー先を前記第1のアウトバウンドキューに切り換える、ストレージ装置。
【請求項7】
請求項1に記載されたストレージ装置であって、
更に、前記第1のプロセッサが用いる前記第1のアドレスと、第2のフロントエンドインターフェースが用いる第4のアドレスとを変換する第3のアドレス変換部と、
前記第2のプロセッサが用いる前記第3のアドレスと、前記第2のフロントエンドインターフェースが用いる前記第4のアドレスとを変換する第4のアドレス変換部と、を含み、
前記第3のアドレス変換部と、前記第4のアドレス変換部とを通じて、前記第1のプロセッサと前記第2のプロセッサとが相互に通信する、ストレージ装置。
【請求項8】
請求項1に記載されたストレージ装置であって、
更に、前記第1のアドレス変換部と前記第2のアドレス変換部とを含むスイッチを含み、
前記スイッチを通じて前記第1のプロセッサと前記第2のプロセッサとが相互に通信する、ストレージ装置。
【請求項9】
請求項1に記載されたストレージ装置であって、
前記第1のフロントエンドインターフェースは、前記第1のエンキュー先切り換え指示を受信する前に、前記ホスト装置からの要求を、前記第1のアウトバウンドキューまたは前記第2のアウトバウンドキューにエンキューし、
前記第1のプロセッサは、処理を停止する前に、前記第1のエンキュー先切り換え指示を前記第1のフロントエンドインターフェースに送信し、
前記第1のフロントエンドインターフェースは、前記第1のプロセッサから前記第1のエンキュー先切り換え指示を受信すると、次に受信する新しいホスト要求に関連する一連作業の識別子が付与された前記ホスト装置からの要求から、前記第2のアウトバウンドキューのみにエンキューし、
前記第1のプロセッサは、前記第1のアウトバウンドキュー及び前記第1のインバウンドキューが空になった後に処理を停止する、ストレージ装置。
【請求項10】
請求項9に記載されたストレージ装置であって、
前記第2のストレージコントローラは、更に、
前記ホスト装置との通信のプロトコルを制御する第2のフロントエンドインターフェースと、
前記第1のプロセッサが用いる前記第1のアドレスと、前記第2のフロントエンドインターフェースが用いる第4のアドレスとを変換する第3のアドレス変換部と、
前記第2のプロセッサが用いる前記第3のアドレスと、前記第2のフロントエンドインターフェースが用いる第4のアドレスとを変換する第4のアドレス変換部と、
前記第2のフロントエンドインターフェースから前記第4のアドレス変換部を通じた前記第2のプロセッサへのデータ転送を制御する第3のアウトバウンドキューと、
前記第2のプロセッサから前記第4のアドレス変換部を通じた前記第2のフロントエンドインターフェースへのデータ転送を制御する第3のインバウンドキューと、を含み、
前記第1のストレージコントローラは、更に、
前記第2のフロントエンドインターフェースから前記第3のアドレス変換部を通じた前記第1のプロセッサへのデータ転送を制御する第4のアウトバウンドキューと、
前記第1のプロセッサから前記第3のアドレス変換部を通じた前記第2のフロントエンドインターフェースへのデータ転送を制御する第4のインバウンドキューと、を含み、
前記第2のフロントエンドインターフェースは、前記ホスト装置からの要求を、前記第3のアウトバウンドキューまたは前記第4のアウトバウンドキューにエンキューし、
前記第2のプロセッサは、前記第1のプロセッサが処理を停止する前に、前記ホスト装置からの要求のエンキュー先として前記第3のアウトバウンドキューを指定する第2のエンキュー先切り換え指示を前記第2のフロントエンドインターフェースに送信し、
前記第2のフロントエンドインターフェースは、前記第2のエンキュー先切り換え指示を受信すると、次に受信する新しいホスト要求に関連する一連作業の識別子が付与された前記ホスト装置からの要求から、前記第3のアウトバウンドキューのみにエンキューし、
前記第1のプロセッサは、前記第1のアウトバウンドキュー、前記第1のインバウンドキュー、前記第4のアウトバウンドキュー及び前記第4のインバウンドキューが空になった後に処理を停止する、ストレージ装置。
【請求項11】
請求項10に記載されたストレージ装置であって、
前記第1のアウトバウンドキューで最も最近に処理された前記ホスト装置からの要求に関連する一連作業の識別子と、前記ホスト装置からの要求に対する応答のうち前記第1のインバウンドキューで最も最近に処理された応答のホスト要求に関連する一連作業の識別子とが同じホスト要求を示し、
且つ、前記第4のアウトバウンドキューで最も最近に処理された前記ホスト装置からの要求に関連する一連作業の識別子と、前記ホスト装置からの要求に対する応答のうち前記第4のインバウンドキューで最も最近に処理された応答のホスト要求に関連する一連作業の識別子とが同じホスト要求を示す場合に、前記第1のプロセッサが処理を停止する、ストレージ装置。
【請求項12】
請求項1に記載されたストレージ装置であって、
前記第1のストレージコントローラに故障が発生したとき、前記故障を検出した前記第2のプロセッサが、前記第1のフロントエンドインターフェースに対して、前記第1のエンキュー先切り換え指示を送信する、ストレージ装置。
【請求項13】
ホスト装置からの要求を処理するストレージ装置のストレージコントローラの制御方法であって、
前記ストレージ装置は、複数のストレージコントローラを含み、
前記複数のストレージコントローラの内の第1のストレージコントローラは、
前記ホスト装置との通信のプロトコルを制御する第1のフロントエンドインターフェースと、
前記ストレージ装置の制御を行う第1のプロセッサと、を含み、
前記複数のストレージコントローラの内の第2のストレージコントローラは、
前記ストレージ装置の制御を行う第2のプロセッサを含み、
前記第1のストレージコントローラは、更に、
前記第1のプロセッサが用いる第1のアドレスと、前記第1のフロントエンドインターフェースが用いる第2のアドレスとを変換する第1のアドレス変換部と、
前記第2のプロセッサが用いる第3のアドレスと、前記第1のフロントエンドインターフェースが用いる前記第2のアドレスとを変換する第2のアドレス変換部と、
前記第1のフロントエンドインターフェースから前記第1のアドレス変換部を通じた前記第1のプロセッサへのデータ転送を制御する第1のアウトバウンドキューと、
前記第1のプロセッサから前記第1のアドレス変換部を通じた前記第1のフロントエンドインターフェースへのデータ転送を制御する第1のインバウンドキューと、を含み、
前記第2のストレージコントローラは、更に、
前記第1のフロントエンドインターフェースから前記第2のアドレス変換部を通じた前記第2のプロセッサへのデータ転送を制御する第2のアウトバウンドキューと、
前記第2のプロセッサから前記第2のアドレス変換部を通じた前記第1のフロントエンドインターフェースへのデータ転送を制御する第2のインバウンドキューと、を含み、
前記ストレージコントローラの制御方法は、
前記第1のフロントエンドインターフェースが、前記ホスト装置からの要求のエンキュー先として前記第2のアウトバウンドキューを指定する第1のエンキュー先切り換え指示を受信するステップと、
前記第1のフロントエンドインターフェースが、前記第1のエンキュー先切り換え指示を受信した後、次に受信する新しいホスト要求に関連する一連作業の識別子が付与された前記ホスト装置からの要求から、エンキュー先を前記第2のアウトバウンドキューに切り換えるステップと、を含む、ストレージコントローラの制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、フロントエンドインターフェースとプロセッサを含むストレージ装置に関する。
【背景技術】
【0002】
ストレージ装置では、信頼性を向上するため、ストレージ装置の制御を司るストレージコントローラ(以下、単にコントローラと呼ぶ)を複数設けて、いずれかのコントローラで故障が発生して動作が停止しても、残ったコントローラで動作を継続可能としている。このようなコントローラの典型的な個数は2である。
【0003】
例えば、特許文献1には、ストレージ装置のコントローラ部を2つのコントローラで構成する例が開示されている。この場合、各々のコントローラには、システムの制御を行うプロセッサがそれぞれ搭載されており、各プロセッサに接続されるスイッチには、非透過性ブリッジ(NTB:NON-TRANSPARENT BRIDGE)が備えられる。
【0004】
このNTBが担う役割の一つは、各スイッチに接続されるプロセッサが用いるアドレスと、それ以外のアドレスとのアドレス変換機能である。特に2つのコントローラを接続する場合には、それぞれのプロセッサが用いるアドレスは、それぞれのプロセッサが制御・管理するため、互いに一方のコントローラのプロセッサが用いるアドレスを他方のコントローラのプロセッサが用いるアドレスに変換する必要がある。例えば、それぞれのプロセッサは、接続されるメモリやプロトコルチップなどに互いに独立なアドレスを割り振るので、そのまま接続して同じアドレスを用いることはできない。2つプロセッサは、その間をNTBで接続し、そしてNTBが通過するパケットの送信先アドレスを変換することにより、相互にデータ転送が可能になる。
【0005】
また各プロセッサの停止時には、それぞれのプロセッサが用いていたアドレスは、制御するプロセッサが不在になるため、例えばどのメモリにどのアドレスを付与していたかが不明になり、利用が不可になる。
【0006】
またストレージ装置において、故障以外にもコントローラのOS(OPERATING SYSTEM)のアップデート等でコントローラのプロセッサの停止が必要な場合がある。ストレージ装置では、ホスト装置とのデータの入出力のためにI/O(Input/Output)通信を行っている。このホスト装置とのI/O通信に使われるプロトコルは、例えばFIBRE CHANNELである。
【0007】
コントローラには、プロセッサと共に、このようなI/O通信に使われるプロトコルの制御を行うプロトコルチップを含むフロントエンドインターフェースが搭載される。このような状況において、コントローラのプロセッサを停止すると、当該フロントエンドインターフェースに接続されるプロセッサが不在となり、ホスト装置からのI/O要求に無応答となる。ホスト装置からみると、一時的にストレージ装置がシステムダウンしたように見える。回復するためには、まだ稼働を続けている残ったコントローラにホスト装置を接続しなおす必要がある。
【0008】
この課題の解決には、コントローラにおいて、自動的にホスト装置からのI/O要求をOSアップデート等で停止していないプロセッサを持つコントローラに接続し直すことが考えられる。
【0009】
例えば特許文献1に記載されている構成では、システムの制御を行うプロセッサが2つ搭載されているので、一方のコントローラのプロセッサが停止した場合、ホスト装置からのI/O要求を他方のコントローラのプロセッサに伝達することが考えられる。
【0010】
また、特許文献2には、フロントエンドインターフェースからのアクセス先を自動的に各コントローラに振り分けることで、コントローラのプロセッサの停止時にもI/O通信を自動的に切り換えることが可能な機能を持つローカルルータを備えるストレージ装置の例が開示されている。
【先行技術文献】
【特許文献】
【0011】
【特許文献1】米国特許第8、700、856号
【特許文献2】米国特許第8、423、677号
【発明の概要】
【発明が解決しようとする課題】
【0012】
特許文献1に記載の技術では、NTBが各コントローラに高々一つしか搭載されておらず、各フロントエンドインターフェースは、それぞれのコントローラのプロセッサが制御するアドレスを使用しており、他方のプロセッサが制御するアドレスは使用していない。そのため、当該コントローラのプロセッサの停止時にはそのアドレスが使用不可となるので、使用できるアドレスがなく、各フロントエンドインターフェースは、ホスト装置からの要求を他方のプロセッサに伝えることができない。
【0013】
また、特許文献2に記載の技術では、ローカルルータは複雑な制御を必要とするので、何らかのプロセッサを搭載してプログラム制御を行う場合があり得る。その場合、ローカルルータ自体のOSのアップデート時にはローカルルータの停止・再起動が必要になる。このような場合には、ローカルルータによるホスト装置とのI/O通信を自動的に切り換える機能が利用できず、ホスト装置とのI/O通信が切断される。
【0014】
従って、コントローラのプロセッサが停止する場合に、ローカルルータのような特別な制御機能部を備えることなく、ホスト装置からのI/O要求に継続して応答することを可能とする技術が望まれる。
【課題を解決するための手段】
【0015】
本発明の一実態様は、ホスト装置からの要求を処理するストレージ装置であって、複数のストレージコントローラを含み、前記複数のストレージコントローラの内の第1のストレージコントローラは、前記ホスト装置との通信のプロトコルを制御する第1のフロントエンドインターフェースと、前記ストレージ装置の制御を行う第1のプロセッサと、を含み、前記複数のストレージコントローラの内の第2のストレージコントローラは、前記ストレージ装置の制御を行う第2のプロセッサを含み、前記第1のストレージコントローラは、更に、前記第1のプロセッサが用いる第1のアドレスと、前記第1のフロントエンドインターフェースが用いる第2のアドレスとを変換する第1のアドレス変換部と、前記第2のプロセッサが用いる第3のアドレスと、前記第1のフロントエンドインターフェースが用いる前記第2のアドレスとを変換する第2のアドレス変換部と、前記第1のフロントエンドインターフェースから前記第1のアドレス変換部を通じた前記第1のプロセッサへのデータ転送を制御する第1のアウトバウンドキューと、前記第1のプロセッサから前記第1のアドレス変換部を通じた前記第1のフロントエンドインターフェースへのデータ転送を制御する第1のインバウンドキューと、を含み、前記第2のストレージコントローラは、更に、前記第1のフロントエンドインターフェースから前記第2のアドレス変換部を通じた前記第2のプロセッサへのデータ転送を制御する第2のアウトバウンドキューと、前記第2のプロセッサから前記第2のアドレス変換部を通じた前記第1のフロントエンドインターフェースへのデータ転送を制御する第2のインバウンドキューと、を含み、前記第1のフロントエンドインターフェースは、前記ホスト装置からの要求のエンキュー先として前記第2のアウトバウンドキューを指定する第1のエンキュー先切り換え指示を受信した後、次に受信する新しいホスト要求に関連する一連作業の識別子が付与された前記ホスト装置からの要求から、エンキュー先を前記第2のアウトバウンドキューに切り換える。
【発明の効果】
【0016】
本発明の一態様によれば、デュアルコントローラを構成する片方のコントローラのプロセッサが処理を停止しても、他方のコントローラのプロセッサがホスト装置からのI/O要求を引継いで、継続して応答することができる。前述した以外の課題、構成及び効果は、以下の実施例の説明によって明らかにされる。
【図面の簡単な説明】
【0017】
図1】実施例1に係るストレージ装置を示す図である。
図2】実施例1に係るコントローラの構成を示す図である。
図3】実施例1に係るOQとIQの構成を説明する図である。
図4】実施例1に係るストレージ装置における、フロントエンドインターフェースとメモリとの間の、正常時のデータ転送経路を説明する図である。
図5】実施例1に係るストレージ装置における、フロントエンドインターフェースのエンキュー先キュー切り換え後のデータ転送経路を説明する図である。
図6】実施例1に係るストレージ装置における、フロントエンドインターフェースのエンキュー先キュー切り換え後のデータ転送経路を説明する図である。
図7】実施例1に係るストレージ装置における、正常時のデータ転送シーケンスを説明する図である。
図8】実施例1に係るストレージ装置における、フロントエンドインターフェースのエンキュー先キュー切り換え後のデータ転送シーケンスを説明する図である。
図9】実施例1に係るストレージ装置において、片方のコントローラを再起動する場合のフローチャートを説明する図である。
図10】実施例2に係るストレージ装置における、フロントエンドインターフェースとメモリとの間の、正常時のデータ転送経路を説明する図である。
図11】実施例2に係るストレージ装置において、片方のコントローラを再起動する場合のフローチャートを説明する図である。
図12】実施例3に係るストレージ装置におけるコントローラの構成を説明する図である。
図13】実施例3に係るストレージ装置における、フロントエンドインターフェースとメモリとの間の、正常時のデータ転送経路を説明する図である。
図14】実施例3に係るストレージ装置における、フロントエンドインターフェースのエンキュー先キュー切り換え後のデータ転送経路を説明する図である。
図15】実施例3に係るストレージ装置における、フロントエンドインターフェースのエンキュー先キュー切り換え後のデータ転送経路を説明する図である。
【発明を実施するための形態】
【0018】
以下、図面を参照しながら、本発明の幾つかの実施例を説明する。なお、全ての実施例を通して、同一符号が付されている構成要素は、実質的に同じものであるとする。また、プロセッサが実行する処理は、適宜に記憶資源(例えばメモリ)及び通信インターフェース装置(例えば、通信ポート)を用いながら行うため、処理の主語がプロセッサとされてもよい。プロセッサは、CPU(Central Processing Unit)の他に専用ハードウェアを有していてもよい。
【実施例0019】
図1から図9を参照して、実施例1に係るストレージ装置の説明を行う。
【0020】
図1は、実施例1に係るストレージ装置を示す図である。
【0021】
ストレージ装置100は、コントローラ110、120と、複数のハードディスクドライブまたは複数のソリッドステートドライブを有するドライブボックス130と、を含む。
【0022】
コントローラ110は、プロセッサ111と、メモリ112と、フロントエンドインターフェース113と、バックエンドインターフェース114と、PCIe(PCI Express)スイッチ115と、管理プロセッサ116と、を有する。同様に、コントローラ120は、プロセッサ121と、メモリ122と、フロントエンドインターフェース123と、バックエンドインターフェース124と、PCIeスイッチ125と、管理プロセッサ126と、を有する。プロセッサ111、121は、それぞれ内部に複数のプロセッサコア(非図示)を有する。
【0023】
ストレージ装置100にアクセスするホスト装置(非図示)は、フロントエンドインターフェース113、123を介して、ストレージ装置100に接続される。ホスト装置とフロントエンドインターフェース113、123との間は、ファイバチャネルケーブルまたはイーサネットケーブル等の伝送線で接続される。
【0024】
あるいはホスト装置とフロントエンドインターフェース113、123とが、複数の伝送線と複数のスイッチで構成されたストレージエリアネットワークを介して接続される構成でも良い。フロントエンドインターフェース113、123は、ホスト装置とストレージ装置100との間のデータ転送プロトコルと、コントローラ110、120内のデータ転送プロトコルとを変換する。フロントエンドインターフェース113、123は、プロトコルチップを含む。
【0025】
ドライブボックス130は、バックエンドインターフェース114、124を介して、コントローラ110、120に接続される。バックエンドインターフェース114、124は、コントローラ110、120内のデータ転送プロトコルと、コントローラ110、120とドライブボックス130との間のデータ転送プロトコルを変換する。なお、ドライブボックス内のドライブがPCIe接続のNVMeSSDである場合、バックエンドインターフェース114、124は、プロトコル変換を行わないPCIeスイッチである。
【0026】
プロセッサ111、121は、フロントエンドインターフェース113、123を介して接続したホスト装置と、バックエンドインターフェース114、124を介して接続したドライブボックス130との間のデータ転送を制御する。さらに、プロセッサ111、121は、コントローラ間のデータ転送を制御する。
【0027】
メモリ112、122は、それぞれ、プロセッサ111、121の主記憶であり、プロセッサ111、121が実行するプログラム(ストレージ制御プログラム等)や、プロセッサ111、121が参照する管理テーブル等を格納する。また、メモリ112、122は、それぞれコントローラ110、120のキャッシュメモリとしても使用される。
【0028】
図2は、実施例1に係るコントローラ110、120の構成を示す図である。
【0029】
図2では、説明を簡単にするため、図1におけるバックエンドインターフェース114、124を省略している。
【0030】
プロセッサ111、121は、それぞれNTB211、231を有する。NTB211とNTB231との間は、リンク140で接続されている。プロセッサ111とプロセッサ121とは、リンク140を介して相互に通信可能である。このようにして、ストレージ装置100内は、2個のコントローラ110、120によりデュアルコントローラを構成する。プロセッサ111、121は、2つのコントローラ間で二重化されるユーザーデータや、コントローラの制御データを、リンク140上で転送する。
【0031】
フロントエンドインターフェース113は、割込み設定レジスタ217、218を有する。フロントエンドインターフェース113は、割込み設定レジスタ217、218に設定されたアドレスにMSI(Message Signaled Interrupt )等の割込みを送信することができる。例えば、割込み設定レジスタ217にはプロセッサ111が内蔵する割込みコントローラ(非図示)へのアドレスを設定し、割込み設定レジスタ218にはプロセッサ121が内蔵する割込みコントローラ(非図示)へのアドレスを設定する。そうすることにより、フロントエンドインターフェース113は、プロセッサ111または121に割込みを送信することができる。これら割込みは、フロントエンドインターフェースからプロセッサへのエラー通知や、後述するデータ転送用制御キューの操作に関連して使用する。
【0032】
同様に、フロントエンドインターフェース123は、割込み設定レジスタ237、238を有する。フロントエンドインターフェース123は、割込み設定レジスタ237、238に設定されたアドレスにMSI等の割込みを送信することができる。例えば、割込み設定レジスタ237にはプロセッサ121が内蔵する割込みコントローラへのアドレスを設定し、割込み設定レジスタ238にはプロセッサ111が内蔵する割込みコントローラへのアドレスを設定する。そうすることにより、フロントエンドインターフェース123は、プロセッサ111または121に割込みを送信することができる。
【0033】
また、フロントエンドインターフェース113、123がプロセッサ111、121に送信する割込みは、PCIe WriteリクエストとしてNTBを通過することができるMSIまたはMSI-Xのみを使用し、レガシー割込み(INTx)は使用しない。
【0034】
PCIeスイッチ115は、NTB214と215とを有する。NTB214は、プロセッサ111のポート212と、リンク117を介して接続する。NTB215は、プロセッサ121のポート233と、リンク128を介して接続する。
【0035】
同様に、PCIeスイッチ125は、NTB234と235とを有する。NTB234は、プロセッサ121のポート232と、リンク127を介して接続する。NTB235は、プロセッサ111のポート213と、リンク118を介して接続する。
【0036】
プロセッサ111のポート213と、プロセッサ121のポート233とは、PCIeのDPC(Downstream Port Containment)機能を有効に設定している。これにより、例えばストレージ装置100からコントローラ110を取り外す際に、リンク118、128がダウンしても、ストレージ装置100内に残されたコントローラ120はリンクダウンをエラーとして扱う必要がないので、動作を継続できる。
【0037】
同様に、例えばストレージ装置100からコントローラ120を取り外す際に、リンク118、128がダウンしても、ストレージ装置100内に残されたコントローラ110はリンクダウンをエラーとして扱う必要がないので、動作を継続できる。
【0038】
管理プロセッサ116は、そのルートポート216をPCIeスイッチ115と接続し、フロントエンドインターフェース113とPCIeスイッチ115に対するルートコンプレックスとして機能する。
【0039】
同様に、管理プロセッサ126は、そのルートポート236をPCIeスイッチ125と接続し、フロントエンドインターフェース123とPCIeスイッチ125に対するルートコンプレックスとして機能する。
【0040】
なお、管理プロセッサ116は、ホスト装置とストレージ装置100間のデータ転送制御には関与せず、それ以外のフロントエンドインターフェース113と、NTB214、215を含むPCIeスイッチ115と、の初期設定等を行う。また、管理プロセッサ116は、その代替機能がPCIeスイッチ115に内蔵されてもよい。
【0041】
同様に、管理プロセッサ126は、ホスト装置とストレージ装置100間のデータ転送制御には関与せず、それ以外のフロントエンドインターフェース123と、NTB234、235を含むPCIeスイッチ125と、の初期設定等を行う。また、管理プロセッサ126は、その代替機能がPCIeスイッチ125に内蔵されてもよい。
【0042】
メモリ112、122は、プロセッサ111、121とフロントエンドインターフェース113、123間のデータ転送を制御するためのキューであるOQ(Outbound Queue)、IQ(Inbound Queue)を有する。OQはフロントエンドインターフェースからプロセッサへのデータ転送を制御するキューであり、IQはプロセッサからフロントエンドインターフェースへのデータ転送を制御するキューである。
【0043】
メモリ112は、プロセッサ111とフロントエンドインターフェース113とのデータ転送を制御する、OQ201とIQ202とを有する。また、メモリ112は、プロセッサ111とフロントエンドインターフェース123とのデータ転送を制御する、OQ203とIQ204とを有する。
【0044】
同様に、メモリ122は、プロセッサ121とフロントエンドインターフェース123とのデータ転送を制御する、OQ221とIQ222とを有する。また、メモリ122は、プロセッサ121とフロントエンドインターフェース113とのデータ転送を制御する、OQ223とIQ224とを有する。このように、実施例1に係るストレージ装置では、フロントエンドインターフェースの制御キューが、2つのコントローラに跨がって配置される。
【0045】
なお、図2では、OQ201を「OQ00」、IQ202を「IQ00」、OQ203を「OQ01」、IQ204を「IQ01」、OQ221を「OQ11」、IQ222を「IQ11」、OQ223を「OQ10」、IQ224を「IQ10」と表示する。
【0046】
また、フロントエンドインターフェース113は、プロセッサ111からの指示により、OQ201とIQ202とを使用するか、OQ223とIQ224とを使用するか、を切り換えることができる。同様に、フロントエンドインターフェース123は、プロセッサ121からの指示により、OQ221とIQ222とを使用するか、OQ203とIQ204とを使用するか、を切り換えることができる。
【0047】
上記プロセッサの指示は、例えば、フロントエンドインターフェースのPCIeレジスタに、プロセッサが所定の値をPCIe Writeリクエストで書き込むことにより実行する。
【0048】
また、上記の切り換え設定状況は、PCIeでアクセス可能なフロントエンドインターフェース113、123のレジスタに格納されていて、プロセッサ111、121が読み出すことができる。
【0049】
フロントエンドインターフェース113、123は、それぞれ、プロセッサ111、121のいずれとも、NTBを介して接続している。これにより、プロセッサ111または121が停止して、リンク117、118がリンクダウンするか、または、リンク127、128がリンクダウンする場合でも、フロントエンドインターフェース113、123とPCIeスイッチ115、125との間のリンクがダウンすることはない。つまり、フロントエンドインターフェース113、123とPCIeスイッチ115、125を接続するリンクの状態は、プロセッサ111、121の停止の影響を受けない。
【0050】
図3は、実施例1に係るOQとIQの構成を説明する図である。
【0051】
OQ201とIQ202とは、いずれも、0番からN-1番の合計N個のエレメントに、エントリを格納する。OQ201において、エントリの内容は、例えばホスト装置から受信したホストI/Oコマンドである。IQ202において、エントリの内容は、例えば完了したホストI/Oコマンドに対応するレスポンスや、プロセッサがフロントエンドインターフェースに指示するデータ転送リストである。また、各エントリには、そのエントリがホストI/Oのどのエクスチェンジに関連するかを示すエクスチェンジの識別情報(すなわちエクスチェンジID)が含まれる。エクスチェンジとは、ホストとストレージ間のリード動作やライト動作等に関連する一連の作業を示す。
【0052】
図3のOQ201では、例として、i-1番目からi+5番目のエレメントにエントリが格納されている。OQ201のその他のエントリは空である。OQ_PI(Producer Index)301は、フロントエンドインターフェースが次にエントリを格納するエレメントの場所を示す。OQ_CI(Consumer Index)302は、プロセッサが次に読み出すエントリが格納されているエレメントの場所を示す。OQ_PI301とOQ_CI302が同じエレメントを示す場合は、OQ201には一つも未処理のエントリが格納されておらず、空である状態を示す。また、i-1番目のエレメントには、処理が終わった最新のエントリが格納されている。プロセッサは、このエントリのエクスチェンジIDを調べることにより、どのエクスチェンジに関連するエントリの処理が完了したかを判断することができる。
【0053】
図3のIQ202では、例として、j-1番目からi+4番目のエレメントにエントリが格納されている。IQ202のその他のエントリは空である。IQ_PI311は、プロセッサが次にエントリを格納するエレメントの場所を示す。IQ_CI312は、フロントエンドインターフェースが次に読み出すエントリが格納されているエレメントの場所を示す。IQ_PI311とIQ_CI312が同じエレメントを示す場合は、IQ202には一つも未処理のエントリが格納されておらず、空である状態を示す。また、j-1番目のエレメントには、処理が終わった最新のエントリが格納されている。プロセッサは、このエントリのエクスチェンジIDを調べることにより、どのエクスチェンジに関連するエントリの処理が完了したかを判断することができる。
【0054】
図4は、実施例1に係るストレージ装置100における、フロントエンドインターフェースとメモリとの間の、正常時のデータ転送経路を説明する図である。
【0055】
ここでは、フロントエンドインターフェース113とプロセッサ111とは図2のOQ201とIQ202とを使用し、フロントエンドインターフェース123とプロセッサ121とは図2のOQ221とIQ222とを使用する場合を想定している。
【0056】
フロントエンドインターフェース113は、PCIeスイッチ115、NTB214、リンク117およびプロセッサ111を通るデータ転送経路400を介して、メモリ112にアクセスする。フロントエンドインターフェース123は、PCIeスイッチ125、NTB234、リンク127およびプロセッサ121を通るデータ転送経路401を介して、メモリ122にアクセスする。また、メモリ112とメモリ122との間は、プロセッサ111、121がリンク140を通るデータ転送経路402を介して、データを転送する。
【0057】
フロントエンドインターフェース113は、PCIeスイッチ115、NTB214、リンク117を介して、プロセッサ111に割込みを送信する。フロントエンドインターフェース123は、PCIeスイッチ125、NTB234、リンク127を介して、プロセッサ121に割込みを送信する。
【0058】
図5は、実施例1に係るストレージ装置100における、フロントエンドインターフェースのエンキュー先キュー切り換え後のデータ転送経路を説明する図である。
【0059】
ここでは、フロントエンドインターフェース113とプロセッサ121とは図2のOQ223とIQ224とを使用し、フロントエンドインターフェース123とプロセッサ121とは図2のOQ221とIQ222とを使用する場合を想定している。
【0060】
フロントエンドインターフェース113は、PCIeスイッチ115、NTB215、リンク128およびプロセッサ121を通るデータ転送経路500を介して、メモリ122にアクセスする。フロントエンドインターフェース123は、PCIeスイッチ125、NTB234、リンク127およびプロセッサ121を通るデータ転送経路401を介して、メモリ122にアクセスする。また、メモリ112とメモリ122間は、プロセッサ111、121がリンク140を通るデータ転送経路402を介して、データを転送する。
【0061】
フロントエンドインターフェース113は、PCIeスイッチ115、NTB215、リンク128を介して、プロセッサ121に割込みを送信する。フロントエンドインターフェース123は、PCIeスイッチ125、NTB234、リンク127を介して、プロセッサ121に割込みを送信する。
【0062】
図6は、実施例1に係るストレージ装置100における、フロントエンドインターフェースのエンキュー先キュー切り換え後のデータ転送経路を説明する図である。
【0063】
ここでは、フロントエンドインターフェース113とプロセッサ111とは図2のOQ201とIQ202とを使用し、フロントエンドインターフェース123とプロセッサ111とは図2のOQ203とIQ204とを使用する場合を想定している。
【0064】
フロントエンドインターフェース113は、PCIeスイッチ115、NTB214、リンク117およびプロセッサ111を通るデータ転送経路400を介して、メモリ112にアクセスする。フロントエンドインターフェース123は、PCIeスイッチ125、NTB235、リンク118およびプロセッサ111を通るデータ転送経路600を介して、メモリ112にアクセスする。また、メモリ112とメモリ122間は、プロセッサ111、121がリンク140を通るデータ転送経路402を介して、データを転送する。
【0065】
フロントエンドインターフェース113は、PCIeスイッチ115、NTB214、リンク117を介して、プロセッサ111に割込みを送信する。フロントエンドインターフェース123は、PCIeスイッチ125、NTB235、リンク118を介して、プロセッサ111に割込みを送信する。
【0066】
図7は、実施例1に係るストレージ装置100における、正常時のデータ転送シーケンスを説明する図である。
【0067】
ここでは、例として、フロントエンドインターフェース113とプロセッサ111とがOQ201とIQ202を使用する場合を述べる。
【0068】
先ず、ホスト装置700が、フロントエンドインターフェース113に、ホストI/Oコマンド701を送信する。
【0069】
ホストI/Oコマンド701を受信したフロントエンドインターフェース113は、そのコマンド内容を含むエントリ702をOQ201にエンキューする(ステップ703)。
【0070】
次に、フロントエンドインターフェース113は、OQにエントリをエンキューしたことをプロセッサ111に通知するため、割込み設定レジスタ217に設定されたアドレスに、割込みを送信する(ステップ704)。さらに、フロントエンドインターフェース113は、メモリ112にある、OQ201のOQ_PIを更新する(ステップ705)。
【0071】
割込みを受信したプロセッサ111は、OQ201からホストI/Oコマンドの内容が格納されたエントリを読み出す(ステップ706)。さらに、プロセッサ111は、フロントエンドインターフェース113にある、OQ201のOQ_CIを更新する(ステップ707)。
【0072】
次に、プロセッサ111は、ホストI/Oコマンド701に対応するデータ転送リストを含むエントリを、IQ202にエンキューする(ステップ708)。さらに、プロセッサ111は、フロントエンドインターフェース113にある、IQ202のIQ_PIを更新する(ステップ709)。
【0073】
IQ_PIを更新されたフロントエンドインターフェース113は、IQ202からデータ転送リストを含むエントリを読み出す(ステップ710)。
【0074】
続いて、ホスト装置700とメモリ112との間で、IQ202から読み出されたエントリに含まれるデータ転送リストに従い、フロントエンドインターフェース113がデータ転送を行う(ステップ711)。
【0075】
データ転送が完了すると、フロントエンドインターフェース113は、メモリ112にある、IQ202のIQ_CIを更新する(ステップ712)。
【0076】
このようにして、プロセッサ111は、フロントエンドインターフェース113が受信したホストI/Oコマンド701を処理できる。
【0077】
図8は、実施例1に係るストレージ装置100における、フロントエンドインターフェースのエンキュー先キュー切り換え後のデータ転送シーケンスを説明する図である。
【0078】
ここでは、例として、フロントエンドインターフェース113とプロセッサ121とがOQ223とIQ224とを使用する場合を述べる。
【0079】
先ず、ホスト装置700が、フロントエンドインターフェース113に、ホストI/Oコマンド801を送信する。
【0080】
ホストI/Oコマンド801を受信したフロントエンドインターフェース113は、そのコマンド内容を含むエントリ802をOQ223にエンキューする(ステップ803)。
【0081】
次に、フロントエンドインターフェース113は、OQにエントリをエンキューしたことをプロセッサ121に通知するため、割込み設定レジスタ218に設定されたアドレスに、割込みを送信する(ステップ804)。さらに、フロントエンドインターフェース113は、メモリ122にある、OQ223のOQ_PIを更新する(ステップ805)。
【0082】
割込みを受信したプロセッサ121は、OQ223からホストI/Oコマンドの内容が格納されたエントリを読み出す(ステップ806)。さらに、プロセッサ121は、フロントエンドインターフェース113にある、OQ223のOQ_CIを更新する(ステップ807)。
【0083】
次に、プロセッサ121は、ホストI/Oコマンド801に対応するデータ転送リストを含むエントリを、IQ224にエンキューする(ステップ808)。さらに、プロセッサ121は、フロントエンドインターフェース113にある、IQ224のIQ_PIを更新する(ステップ809)。
【0084】
IQ_PIを更新されたフロントエンドインターフェース113は、IQ224からデータ転送リストを含むエントリを読み出す(ステップ810)。
【0085】
続いて、ホスト装置700とメモリ122の間で、IQ224から読み出されたエントリに含まれるデータ転送リストに従い、フロントエンドインターフェース113がデータ転送を行う(ステップ811)。
【0086】
データ転送が完了すると、フロントエンドインターフェース113は、メモリ122にある、IQ224のIQ_CIを更新する(ステップ812)。
【0087】
このようにして、プロセッサ121は、フロントエンドインターフェース113が受信したホストI/Oコマンド801を処理できる。
【0088】
図9は、実施例1に係るストレージ装置100において、片方のコントローラを再起動する場合のフローチャートを説明する図である。
【0089】
ここでは、例として、コントローラ110を再起動する場合に、フロントエンドインターフェース113が受信したホストI/Oの処理を、コントローラ120のプロセッサ121が引き継ぐ場合の処理フローを述べる。
【0090】
先ず、プロセッサ111が、コントローラ120が再起動中か否かを確認する(ステップ901)。
【0091】
次に、ステップ902において、コントローラ120が再起動中であれば、ステップ901に戻る。再起動中でなければ、ステップ903へ進む。
【0092】
次に、プロセッサ111は、プロセッサ121に、コントローラ110の再起動処理の開始を通知する(ステップ903)。
【0093】
次に、プロセッサ111は、フロントエンドインターフェース113に、操作対象キューをOQ201、IQ202からOQ223、IQ224へ切り換える、キュー切り換えコマンドを送信する(ステップ904)。
【0094】
キュー切り換えコマンドを受信したフロントエンドインターフェース113は、その後受信したホストI/Oコマンドを、OQ223へエンキューするようになる(ステップ905)。言い換えれば、フロントエンドインターフェース113は、新しく受信したエクスチェンジから、エンキュー先のOQを切り換える。エクスチェンジが新しく始まったか否かは、ホストI/Oコマンドに含まれるエクスチェンジIDを調べることで判断することができる。
【0095】
すなわち、フロントエンドインターフェース113は、プロセッサ111からキュー切り換えコマンドを受信した後にホスト装置700から受信したホストI/Oコマンドのうち、最初にエクスチェンジIDが切り替わったホストI/Oコマンド(すなわち新しいエクスチェンジIDが付与された最初のホストI/Oコマンド)及びそれより後のホストI/Oコマンドを、OQ223へエンキューする。
【0096】
次に、プロセッサ111は、OQ201とIQ202が空になるのを待つ(ステップ906)。プロセッサ111は、OQ201のOQ_PIとOQ_CIが等しい場合に、OQ201が空であると判断することができる。同様に、プロセッサ111は、IQ202のIQ_PIとIQ_CIが等しい場合に、IQ202が空であると判断することができる。OQ201とIQ202が空であれば、フロントエンドインターフェース113が受信したホストI/Oであって、OQ201に関連してプロセッサ111が処理すべき未完了のホストI/Oが無いことがわかる。
【0097】
さらに、OQ201に関連する未完了のホストI/Oが無いことを確実にするため、プロセッサ111は、OQ201で最も最近に処理されたホストI/Oコマンドに対応するエントリと、IQ202で最も最近に処理されたレスポンスに対応するエントリについて、それらに含まれるエクスチェンジIDが一致するかを調べてもよい。OQ201とIQ202が空であり、且つそれら2つのエクスチェンジIDが一致する場合、フロントエンドインターフェース113が受信したホストI/Oであって、プロセッサ111が処理すべき未完了のホストI/Oが無いことがわかる。
【0098】
次に、ストレージ装置100は、コントローラ110を閉塞し、OSのアップデート等の必要な処理を実施する。そして、ストレージ装置100は、片方のみのコントローラ120で動作を継続する。その後、ストレージ装置100は、コントローラ110を再起動する。それに伴いプロセッサ111が停止し、再起動する(ステップ907)。
【0099】
コントローラ110の再起動後、プロセッサ111は、フロントエンドインターフェース113のキュー切り換え設定状況を確認する(ステップ908)。
【0100】
次に、ステップ909において、ホストI/Oコマンドエンキュー先がOQ223である場合は、ステップ910に進む。そうでなければ、処理を終了する。
【0101】
次に、プロセッサ111は、フロントエンドインターフェース113の操作対象キューが切り換えられた状態でのコントローラ110再起動を、プロセッサ121へ通知する(ステップ910)。
【0102】
次に、プロセッサ111は、フロントエンドインターフェース113に、操作対象キューをOQ223、IQ224からOQ201、IQ202へ切り換える、キュー切り換えコマンドを送信する(ステップ911)。
【0103】
キュー切り換えコマンドを受信したフロントエンドインターフェース113は、その後新しいエクスチェンジIDで受信したホストI/Oコマンドを、OQ201へエンキューするようになる(ステップ912)。
【0104】
次に、プロセッサ111は、OQ223とIQ224が空になるのを待つ(ステップ913)。プロセッサ111は、OQ223のOQ_PIとOQ_CIが等しい場合に、OQ223が空であると判断することができる。同様に、プロセッサ111は、IQ224のIQ_PIとIQ_CIが等しい場合に、IQ224が空であると判断することができる。OQ223とIQ224が空ということは、プロセッサ121が処理すべきフロントエンドインターフェース113が受信した未完了のホストI/Oが無いことを意味する。
【0105】
さらに、OQ223に関連する未完了のホストI/Oが無いことを確実にするため、プロセッサ111は、OQ223で最も最近に処理されたホストI/Oコマンドに対応するエントリと、IQ224で最も最近に処理されたレスポンスに対応するエントリについて、それらに含まれるエクスチェンジIDが一致するかを調べてもよい。
【0106】
最後に、プロセッサ111はプロセッサ121へ、コントローラ110の再起動処理完了を通知する(ステップ914)。
【0107】
以上述べたように、実施例1に係るストレージ装置100は、フロントエンドインターフェースによるエンキュー先OQの切り換え処理が完了し、かつ、切り換え前に処理中であったホストI/Oが完了した後にコントローラを再起動することにより、片方のコントローラを再起動してもホストI/Oが途切れることがない。
【0108】
なお、実施例1に係るストレージ装置100では、各フロントエンドインターフェースがコントローラ毎に一対のOQとIQを配置する例を説明したが、ストレージ装置100は、2対以上のOQとIQを配置してもよい。例えば、各フロントエンドインターフェースがコントローラ毎に2対のOQとIQを配置する場合、その2対を切り換え処理の単位とする。
【0109】
また、例えば、コントローラ110のプロセッサ111やメモリ112等に故障が発生した場合を想定してもよい。そのような場合でも、NTB211、214、215によりその影響が、フロントエンドインターフェース113及びコントローラ120には伝わらない。ただし、プロセッサ111に故障が発生した場合にはプロセッサ111がフロントエンドインターフェース113に対してキュー切り換えコマンドを送信することができない。その場合、リンク140を介したハートビート等で、プロセッサ111の故障発生を検出したプロセッサ121が、フロントエンドインターフェース113に対して、ホストI/Oコマンドのエンキュー先を正常なコントローラ120側へ切り換える指示を、リンク128、NTB215及びPCIeスイッチ115を介して送信する。これにより、実施例1に係るストレージ装置100は動作を継続することができる。ただし、この場合は、ホスト装置が故障したコントローラ110で処理中であった未完了I/Oを再送する必要がある。
【実施例0110】
次に、図10から図11を参照して、実施例2に係るストレージ装置の説明を行う。実施例2に係るストレージ装置の構成は、以下に説明する相違点を除き、図1から図9に示された実施例1に係るストレージ装置と同様であるので、説明を省略する。
【0111】
実施例2に係るストレージ装置100は、正常時に、OQ201及びIQ202の組と、OQ223及びIQ224の組と、の両方を使用して、フロントエンドインターフェース113と、プロセッサ111、121との間のデータ転送を制御する。この場合、フロントエンドインターフェース113が受信したホストI/Oコマンドを、OQ201またはOQ223を介してプロセッサ111、121の何れかが受信する。そして、プロセッサ111からの指示により、データ転送に、OQ201及びIQ202の組を使用するか、OQ223及びIQ224の組を使用するか、を切り換えることができる。
【0112】
同様に、実施例2に係るストレージ装置100は、正常時に、OQ221及びIQ222の組と、OQ203及びIQ204の組と、の両方を使用して、フロントエンドインターフェース123と、プロセッサ111、121との間のデータ転送を制御する。この場合、フロントエンドインターフェース123が受信したホストI/Oコマンドを、OQ221またはOQ203を介してプロセッサ111、121の何れかが受信する。そして、プロセッサ121からの指示により、データ転送に、OQ221及びIQ222の組を使用するか、OQ203及びIQ204の組を使用するか、を切り換えることができる。
【0113】
なお、実施例2に係るストレージ装置におけるこれらの切り換え処理のことを、「キュー片寄せ」処理と呼ぶことにする。
【0114】
図10は、実施例2に係るストレージ装置における、フロントエンドインターフェースとメモリとの間の、正常時のデータ転送経路を説明する図である。
【0115】
ここでは、フロントエンドインターフェース113およびプロセッサ111は図2のOQ201およびIQ202を使用し、フロントエンドインターフェース113およびプロセッサ121は図2のOQ223およびIQ224を使用する場合を想定している。
【0116】
また、フロントエンドインターフェース123およびプロセッサ121は図2のOQ221およびIQ222を使用し、フロントエンドインターフェース123およびプロセッサ111は図2のOQ203およびIQ204を使用する場合を想定している。
【0117】
フロントエンドインターフェース113は、PCIeスイッチ115、NTB214、リンク117およびプロセッサ111を通るデータ転送経路400を介して、メモリ112にアクセスする。また、フロントエンドインターフェース113は、PCIeスイッチ115、NTB215、リンク128およびプロセッサ121を通るデータ転送経路1000を介して、メモリ122にアクセスする。
【0118】
フロントエンドインターフェース123は、PCIeスイッチ125、NTB234、リンク127およびプロセッサ121を通るデータ転送経路401を介して、メモリ122にアクセスする。また、フロントエンドインターフェース123は、PCIeスイッチ125、NTB235、リンク118およびプロセッサ111を通るデータ転送経路1001を介して、メモリ112にアクセスする。
【0119】
また、メモリ112とメモリ122との間は、プロセッサ111および121がリンク140を通るデータ転送経路402を介して、データを転送する。
【0120】
フロントエンドインターフェース113は、PCIeスイッチ115、NTB214およびリンク117を介して、プロセッサ111に割込みを送信する。フロントエンドインターフェース113は、PCIeスイッチ115、NTB215およびリンク128を介して、プロセッサ121に割込みを送信する。フロントエンドインターフェース123は、PCIeスイッチ125、NTB235およびリンク118を介して、プロセッサ111に割込みを送信する。フロントエンドインターフェース123は、PCIeスイッチ125、NTB234およびリンク127を介して、プロセッサ121に割込みを送信する。
【0121】
図11は、実施例2に係るストレージ装置において、片方のコントローラを再起動する場合のフローチャートを説明する図である。
【0122】
ここでは、例として、コントローラ110を再起動する場合に、フロントエンドインターフェース113が受信したホストI/Oの処理を、コントローラ120のプロセッサ121が引き継ぐ場合の処理フローを述べる。
【0123】
先ず、プロセッサ111が、コントローラ120が再起動中か否かを確認する(ステップ1101)。
【0124】
次に、ステップ1102において、コントローラ120が再起動中であれば、ステップ1101に戻る。再起動中でなければ、ステップ1103へ進む。
【0125】
次に、プロセッサ111は、プロセッサ121に、コントローラ110の再起動処理の開始を通知する(ステップ1103)。
【0126】
次に、プロセッサ111は、フロントエンドインターフェース113に、操作対象キューをOQ223およびIQ224のみに切り換えるための、キュー片寄せコマンドを送信する。プロセッサ121は、フロントエンドインターフェース123に、操作対象キューをOQ221およびIQ223のみに切り換えるための、キュー片寄せコマンドを送信する(ステップ1104)。
【0127】
キュー片寄せコマンドを受信したフロントエンドインターフェース113は、その後新しいエクスチェンジIDで受信したホストI/Oコマンドを、OQ223のみにエンキューするようになる。キュー片寄せコマンドを受信したフロントエンドインターフェース123は、その後新しいエクスチェンジIDで受信したホストI/Oコマンドを、OQ221のみにエンキューするようになる(ステップ1105)。
【0128】
次に、プロセッサ111は、OQ201、IQ202、OQ203およびIQ204が空になるのを待つ(ステップ1106)。プロセッサ111は、OQ201のOQ_PIとOQ_CIとが等しい場合に、OQ201が空であると判断することができる。同様に、プロセッサ111は、IQ202のIQ_PIとIQ_CIとが等しい場合に、IQ202が空であると判断することができる。OQ201およびIQ202が空であれば、フロントエンドインターフェース113が受信したホストI/Oであって、OQ201に関連してプロセッサ111が処理すべき未完了のホストI/Oが無いことがわかる。
【0129】
さらに、OQ201に関連する未完了のホストI/Oが無いことを確実にするため、プロセッサ111は、OQ201で最も最近に処理されたホストI/Oコマンドに対応するエントリと、IQ202で最も最近に処理されたレスポンスに対応するエントリについて、それらに含まれるエクスチェンジIDが一致するかを調べてもよい。OQ201およびIQ202が空であり、且つそれら2つのエクスチェンジIDが一致する場合、フロントエンドインターフェース113が受信したホストI/Oであって、OQ201およびIQ202に関連してプロセッサ111が処理すべき未完了のホストI/Oが無いことがわかる。
【0130】
また、プロセッサ111は、OQ203のOQ_PIとOQ_CIとが等しい場合に、OQ203が空であると判断することができる。同様に、プロセッサ111は、IQ204のIQ_PIとIQ_CIとが等しい場合に、IQ204が空であると判断することができる。OQ203およびIQ204が空であれば、フロントエンドインターフェース123が受信したホストI/Oであって、OQ203に関連してプロセッサ111が処理すべき未完了のホストI/Oが無いことがわかる。
【0131】
さらに、OQ203に関連する未完了のホストI/Oが無いことを確実にするため、プロセッサ111は、OQ203で最も最近に処理されたホストI/Oコマンドに対応するエントリと、IQ204で最も最近に処理されたレスポンスに対応するエントリについて、それらに含まれるエクスチェンジIDが一致するかを調べてもよい。OQ203およびIQ204が空であり、且つそれら2つのエクスチェンジIDが一致する場合、フロントエンドインターフェース123が受信したホストI/Oであって、OQ203およびIQ204に関連してプロセッサ111が処理すべき未完了のホストI/Oが無いことがわかる。
【0132】
次に、実施例2に係るストレージ装置100は、コントローラ110を閉塞し、OSのアップデート等の必要な処理を実施する。そして、実施例2に係るストレージ装置100は、片方のみのコントローラ120で動作を継続する。この閉塞処理に伴い、プロセッサ111が停止する。その後、ストレージ装置100は、コントローラ110を再起動する。それに伴いプロセッサ111が停止し、再起動する(ステップ1107)。
【0133】
コントローラ110の再起動後、プロセッサ111は、フロントエンドインターフェース113の片寄せ設定状況を確認する(ステップ1108)。
【0134】
次に、ステップ1109において、ホストI/Oコマンドエンキュー先がOQ223のみである場合は、ステップ1110に進む。そうでなければ、処理を終了する。
【0135】
次に、プロセッサ111は、フロントエンドインターフェース113の操作対象キューが片寄せされた状態でのコントローラ110再起動をプロセッサ121へ通知する(ステップ1110)。
【0136】
次に、プロセッサ111は、フロントエンドインターフェース113に、キュー片寄せ状態を解除するコマンドを送信する。プロセッサ121は、フロントエンドインターフェース123に、キュー片寄せ状態を解除するコマンドを送信する(ステップ1111)。
【0137】
キュー片寄せ解除コマンドを受信したフロントエンドインターフェース113は、その後新しいエクスチェンジIDで受信したホストI/Oコマンドを、OQ201またはOQ223へエンキューするようになる。キュー片寄せ解除コマンドを受信したフロントエンドインターフェース123は、その後新しいエクスチェンジIDで受信したホストI/Oコマンドを、OQ221またはOQ203へエンキューするようになる(ステップ1112)。
【0138】
最後に、プロセッサ111はプロセッサ121へ、コントローラ110の再起動処理完了を通知する(ステップ1113)。
【0139】
以上述べたように、実施例2に係るストレージ装置100は、フロントエンドインターフェースによるエンキュー先OQの片寄せ処理が完了し、かつ、片寄せ処理によるエンキュー先OQの切り換えの前に処理中であったホストI/Oが完了した後にコントローラを再起動することにより、コントローラを再起動してもホストI/Oが途切れることがない。
【0140】
なお、実施例2に係るストレージ装置100では、各フロントエンドインターフェースがコントローラ毎に一対のOQおよびIQを配置する例を説明したが、ストレージ装置100は、二対以上のOQおよびIQを配置してもよい。例えば、各フロントエンドインターフェースがコントローラ毎に二対のOQおよびIQを配置する場合、その二対を片寄せ処理の単位とする。
【実施例0141】
次に、図12から図15を参照して、実施例3に係るストレージ装置の説明を行う。実施例3に係るストレージ装置の構成は、以下に説明する相違点を除き、図1から図9に示された実施例1に係るストレージ装置と同様であるので、説明を省略する。
【0142】
図12は、実施例3に係るストレージ装置におけるコントローラの構成を説明する図である。
【0143】
図12では、説明を簡単にするため、図2と同様にバックエンドインターフェースは省略している。実施例3に係るストレージ装置は、図2のリンク140に相当するプロセッサ間をつなぐリンク(図2のリンク140)が無いことが特徴である。その替わり、プロセッサ111とプロセッサ121は、リンク118、128とPCIeスイッチ115、125とを通る経路で、プロセッサ間のデータ転送を行う。
【0144】
図13は、実施例3に係るストレージ装置における、フロントエンドインターフェースとメモリとの間の、正常時のデータ転送経路を説明する図である。
【0145】
正常時には、フロントエンドインターフェース113およびプロセッサ111は図12のOQ201およびIQ202を使用し、フロントエンドインターフェース113およびプロセッサ121は図12のOQ223およびIQ224を使用して、データ転送を制御する。
【0146】
フロントエンドインターフェース113は、PCIeスイッチ115、NTB214、リンク117およびプロセッサ111を通るデータ転送経路1300を介して、メモリ112にアクセスする。フロントエンドインターフェース123は、PCIeスイッチ125、NTB234、リンク127およびプロセッサ121を通るデータ転送経路1301を介して、メモリ122にアクセスする。また、メモリ112とメモリ122との間は、プロセッサ111とプロセッサ121とが、プロセッサ111、リンク117、NTB214、PCIeスイッチ115、NTB215、リンク128およびプロセッサ121を通るデータ転送経路1302を介して、データを転送する。また、メモリ112とメモリ122との間は、プロセッサ111とプロセッサ121とが、プロセッサ121、リンク127、NTB234、PCIeスイッチ125、NTB235、リンク118およびプロセッサ111を通るデータ転送経路1303を介して、データを転送する。プロセッサ間の2つのデータ転送経路1302および1303の使い方は、例えば、片方を転送データ量が大きいユーザーデータ転送に使用し、他方をストレージ装置の転送データ量が小さい制御データ転送に使用することが考えられる。これにより、制御データ転送時間が短縮する効果が期待できる。
【0147】
フロントエンドインターフェース113は、PCIeスイッチ115、NTB214およびリンク117を介して、プロセッサ111に割込みを送信する。フロントエンドインターフェース123は、PCIeスイッチ125、NTB234およびリンク127を介して、プロセッサ121に割込みを送信する。
【0148】
図14は、実施例3に係るストレージ装置における、フロントエンドインターフェースのエンキュー先キュー切り換え後のデータ転送経路を説明する図である。
【0149】
ここでは、フロントエンドインターフェース113およびプロセッサ121は図12のOQ223およびIQ224を使用し、フロントエンドインターフェース123およびプロセッサ121は図12のOQ221およびIQ222を使用する場合を想定している。
【0150】
フロントエンドインターフェース113は、PCIeスイッチ115、NTB215、リンク128およびプロセッサ121を通るデータ転送経路イッチ1400を介して、メモリ122にアクセスする。フロントエンドインターフェース123は、PCIeスイッチ125、NTB234、リンク127およびプロセッサ121を通るデータ転送経路1301を介して、メモリ122にアクセスする。また、メモリ112とメモリ122との間は、プロセッサ111とプロセッサ121とが、プロセッサ121、リンク127、NTB234、PCIeスイッチ125、NTB235、リンク118およびプロセッサ111を通るデータ転送経路1303を介して、データを転送する。また、メモリ112とメモリ122との間は、プロセッサ111とプロセッサ121とが、プロセッサ111、リンク117、NTB214、PCIeスイッチ115、NTB215、リンク128およびプロセッサ121を通るデータ転送経路1302(図13)を介して、データを転送してもよい。
【0151】
フロントエンドインターフェース113は、PCIeスイッチ115、NTB215およびリンク128を介して、プロセッサ121に割込みを送信する。フロントエンドインターフェース123は、PCIeスイッチ125、NTB234およびリンク127を介して、プロセッサ121に割込みを送信する。
【0152】
図15は、実施例3に係るストレージ装置における、フロントエンドインターフェースのエンキュー先キュー切り換え後のデータ転送経路を説明する図である。
【0153】
ここでは、フロントエンドインターフェース113およびプロセッサ111は図12のOQ201およびIQ202を使用し、フロントエンドインターフェース123およびプロセッサ111は図12のOQ203およびIQ204使用する場合を想定している。
【0154】
フロントエンドインターフェース113は、PCIeスイッチ115、NTB214、リンク117およびプロセッサ111を通るデータ転送経路1300を介して、メモリ112にアクセスする。フロントエンドインターフェース123は、PCIeスイッチ125、NTB235、リンク118およびプロセッサ111を通るデータ転送経路1500を介して、メモリ112にアクセスする。また、メモリ112とメモリ122との間は、プロセッサ111とプロセッサ121とが、プロセッサ111、リンク117、NTB214、PCIeスイッチ115、NTB215、リンク128およびプロセッサ121を通るデータ転送経路1302を介して、データを転送する。また、メモリ112とメモリ122との間は、プロセッサ111とプロセッサ121とが、プロセッサ121、リンク127、NTB234、PCIeスイッチ125、NTB235、リンク118およびプロセッサ111を通るデータ転送経路1303(図13)を介して、データを転送してもよい。
【0155】
フロントエンドインターフェース113は、PCIeスイッチ115、NTB214およびリンク117を介して、プロセッサ111に割込みを送信する。フロントエンドインターフェース123は、PCIeスイッチ125、NTB235およびリンク118を介して、プロセッサ111に割込みを送信する。
【0156】
実施例3に係るストレージ装置100は、実施例1に係るストレージ装置100と同様に、フロントエンドインターフェースによるエンキュー先OQの切り換え処理が完了し、かつ、切り換え前に処理中であったホストI/Oが完了した後にコントローラを再起動することにより、片方のコントローラを再起動してもホストI/Oが途切れることがない。また、実施例3に係るストレージ装置100は、実施例1に係るストレージ装置100よりもコントローラ間を接続するリンク数が少ないので、実装が容易となる。
【0157】
また、本発明の実施形態のシステムは次のように構成されてもよい。
【0158】
(1)ホスト装置からの要求を処理するストレージ装置(例えばストレージ装置100)であって、複数のストレージコントローラを含み、前記複数のストレージコントローラの内の第1のストレージコントローラ(例えばコントローラ110)は、前記ホスト装置との通信のプロトコルを制御する第1のフロントエンドインターフェース(例えばフロントエンドインターフェース113)と、前記ストレージ装置の制御を行う第1のプロセッサ(例えばプロセッサ111)と、を含み、前記複数のストレージコントローラの内の第2のストレージコントローラ(例えばコントローラ120)は、前記ストレージ装置の制御を行う第2のプロセッサ(例えばプロセッサ121)を含み、前記第1のストレージコントローラは、更に、前記第1のプロセッサが用いる第1のアドレスと、前記第1のフロントエンドインターフェースが用いる第2のアドレスとを変換する第1のアドレス変換部(例えばNTB214)と、前記第2のプロセッサが用いる第3のアドレスと、前記第1のフロントエンドインターフェースが用いる前記第2のアドレスとを変換する第2のアドレス変換部(例えばNTB215)と、前記第1のフロントエンドインターフェースから前記第1のアドレス変換部を通じた前記第1のプロセッサへのデータ転送を制御する第1のアウトバウンドキュー(例えばOQ201)と、前記第1のプロセッサから前記第1のアドレス変換部を通じた前記第1のフロントエンドインターフェースへのデータ転送を制御する第1のインバウンドキュー(例えばIQ202)と、を含み、前記第2のストレージコントローラは、更に、前記第1のフロントエンドインターフェースから前記第2のアドレス変換部を通じた前記第2のプロセッサへのデータ転送を制御する第2のアウトバウンドキュー(例えばOQ223)と、前記第2のプロセッサから前記第2のアドレス変換部を通じた前記第1のフロントエンドインターフェースへのデータ転送を制御する第2のインバウンドキュー(例えばIQ224)と、を含み、前記第1のフロントエンドインターフェースは、前記ホスト装置からの要求のエンキュー先として前記第2のアウトバウンドキューを指定する第1のエンキュー先切り換え指示を受信した後、次に受信する新しいホスト要求に関連する一連作業の識別子(例えばエクスチェンジID)が付与された前記ホスト装置からの要求から、エンキュー先を前記第2のアウトバウンドキューに切り換える(例えばステップ904、905、又は、ステップ1104、1105)。
【0159】
これによって、デュアルコントローラを構成する片方のコントローラのプロセッサが処理を停止しても、他方のコントローラのプロセッサがホスト装置からのI/O要求を引継いで、継続して応答することができる。
【0160】
(2)上記(1)において、前記第1のプロセッサは、処理を停止する前に、前記第1のエンキュー先切り換え指示を前記第1のフロントエンドインターフェースに送信し(例えばステップ904又はステップ1104)、前記第1のアウトバウンドキュー及び前記第1のインバウンドキューが空になった後に処理を停止する(例えばステップ906、907、又は、ステップ1106、1107)。
【0161】
これによって、OSのアップデート等を目的として片方のコントローラのプロセッサを計画的に停止するときに、他方のコントローラのプロセッサがホスト装置からのI/O要求を引継いで、継続して応答することができる。
【0162】
(3)上記(2)において、前記第1のアウトバウンドキューで最も最近に処理された前記ホスト装置からの要求に関連する一連作業の識別子と、前記ホスト装置からの要求に対する応答のうち前記第1のインバウンドキューで最も最近に処理された応答のホスト要求に関連する一連作業の識別子とが同じホスト要求を示す場合に、前記第1のプロセッサが処理を停止する(例えばステップ906、907、又は、ステップ1106、1107)。
【0163】
これによって、未完了のホストI/Oが無いことを確実に判断して、適切なタイミングでプロセッサを停止することができる。
【0164】
(4)上記(1)において、前記第1のフロントエンドインターフェースは、前記第1のアウトバウンドキューに関連する第1の割込みの送信先アドレスと、前記第2のアウトバウンドキューに関連する第2の割込みの送信先アドレスと、を個別に設定し、前記第1の割込みを、前記第1のアドレス変換部を通じて(例えばデータ転送経路400を介して)、前記第1のプロセッサに送信し、前記第2の割込みを、前記第2のアドレス変換部を通じて(例えばデータ転送経路500を介して)、前記第2のプロセッサに送信する。
【0165】
これによって、片方のコントローラのプロセッサが処理を停止するときに、他方のコントローラのプロセッサがホスト装置からのI/O要求を引継ぐことができる。
【0166】
(5)上記(1)において、前記第1のプロセッサは、前記第1のフロントエンドインターフェースのエンキュー先設定を読み出すことができる。
【0167】
これによって、現在のエンキュー先を確認することができる。
【0168】
(6)上記(1)において、前記第1のプロセッサは、再起動後に、前記第1のフロントエンドインターフェースから前記ホスト装置からの要求のエンキュー先設定を読み出した結果、エンキュー先が前記第2のアウトバウンドキューであった場合に、エンキュー先を前記第1のアウトバウンドキューに切り換える(例えばステップ909:Yes~ステップ912、又は、ステップ1109:Yes~ステップ1112)。
【0169】
これによって、再起動したプロセッサによるI/Oを再開することができる。
【0170】
(7)上記(1)において、更に、前記第1のプロセッサが用いる前記第1のアドレスと、第2のフロントエンドインターフェースが用いる第4のアドレスとを変換する第3のアドレス変換部(例えばNTB235)と、前記第2のプロセッサが用いる前記第3のアドレスと、前記第2のフロントエンドインターフェースが用いる前記第4のアドレスとを変換する第4のアドレス変換部(例えばNTB234)と、を含み、前記第3のアドレス変換部と、前記第4のアドレス変換部とを通じて(例えばデータ転送経路1303を介して)、前記第1のプロセッサと前記第2のプロセッサとが相互に通信する。
【0171】
これによって、コントローラ間を接続するリンク数を削減でき、実装が容易となる。
【0172】
(8)上記(1)において、更に、前記第1のアドレス変換部と前記第2のアドレス変換部とを含むスイッチ(例えばスイッチ115)を含み、前記スイッチを通じて(例えばデータ転送経路1302を介して)前記第1のプロセッサと前記第2のプロセッサとが相互に通信する。
【0173】
これによって、コントローラ間を接続するリンク数を削減でき、実装が容易となる。
【0174】
(9)上記(1)において、前記第1のフロントエンドインターフェースは、前記第1のエンキュー先切り換え指示を受信する前に、前記ホスト装置からの要求を、前記第1のアウトバウンドキューまたは前記第2のアウトバウンドキューにエンキューし(例えばデータ転送経路400または1000を介した転送)、前記第1のプロセッサは、処理を停止する前に、前記第1のエンキュー先切り換え指示を前記第1のフロントエンドインターフェースに送信し(例えばステップ1104)、前記第1のフロントエンドインターフェースは、前記第1のプロセッサから前記第1のエンキュー先切り換え指示を受信すると、次に受信する新しいホスト要求に関連する一連作業の識別子が付与された前記ホスト装置からの要求から、前記第2のアウトバウンドキューのみにエンキューし(例えばステップ1105)、前記第1のプロセッサは、前記第1のアウトバウンドキュー及び前記第1のインバウンドキューが空になった後に処理を停止する(例えばステップ1106、1107)。
【0175】
これによって、正常時に一つのフロントエンドインターフェースが複数のプロセッサに関連するキューに対してエンキューをしている場合に、片方のプロセッサを停止する前に他方のプロセッサに関連するキューに片寄せするため、当該片方のコントローラのプロセッサが処理を停止しても、他方のコントローラのプロセッサがホスト装置からのI/O要求を引継いで、継続して応答することができる。
【0176】
(10)上記(9)において、前記第2のストレージコントローラは、更に、前記ホスト装置との通信のプロトコルを制御する第2のフロントエンドインターフェース(例えばフロントエンドインターフェース123)と、前記第1のプロセッサが用いる前記第1のアドレスと、前記第2のフロントエンドインターフェースが用いる第4のアドレスとを変換する第3のアドレス変換部(例えばNTB235)と、前記第2のプロセッサが用いる前記第3のアドレスと、前記第2のフロントエンドインターフェースが用いる第4のアドレスとを変換する第4のアドレス変換部(例えばNTB234)と、前記第2のフロントエンドインターフェースから前記第4のアドレス変換部を通じた前記第2のプロセッサへのデータ転送を制御する第3のアウトバウンドキュー(例えばOQ221)と、前記第2のプロセッサから前記第4のアドレス変換部を通じた前記第2のフロントエンドインターフェースへのデータ転送を制御する第3のインバウンドキュー(例えばIQ222)と、を含み、前記第1のストレージコントローラは、更に、前記第2のフロントエンドインターフェースから前記第3のアドレス変換部を通じた前記第1のプロセッサへのデータ転送を制御する第4のアウトバウンドキュー(例えばOQ203)と、前記第1のプロセッサから前記第3のアドレス変換部を通じた前記第2のフロントエンドインターフェースへのデータ転送を制御する第4のインバウンドキュー(例えばIQ204)と、を含み、前記第2のフロントエンドインターフェースは、前記ホスト装置からの要求を、前記第3のアウトバウンドキューまたは前記第4のアウトバウンドキューにエンキューし、前記第2のプロセッサは、前記第1のプロセッサが処理を停止する前に、前記ホスト装置からの要求のエンキュー先として前記第3のアウトバウンドキューを指定する第2のエンキュー先切り換え指示を前記第2のフロントエンドインターフェースに送信し(例えばステップ1104)、前記第2のフロントエンドインターフェースは、前記第2のエンキュー先切り換え指示を受信すると、次に受信する新しいホスト要求に関連する一連作業の識別子が付与された前記ホスト装置からの要求から、前記第3のアウトバウンドキューのみにエンキューし(例えばステップ1105)、前記第1のプロセッサは、前記第1のアウトバウンドキュー、前記第1のインバウンドキュー、前記第4のアウトバウンドキュー及び前記第4のインバウンドキューが空になった後に処理を停止する(例えばステップ1106、1107)。
【0177】
これによって、正常時に一つのフロントエンドインターフェースが複数のプロセッサに関連するキューに対してエンキューをしている場合に、片方のプロセッサを停止する前に他方のプロセッサに関連するキューに片寄せするため、当該片方のコントローラのプロセッサが処理を停止しても、他方のコントローラのプロセッサがホスト装置からのI/O要求を引継いで、継続して応答することができる。
【0178】
(11)上記(10)において、前記第1のアウトバウンドキューで最も最近に処理された前記ホスト装置からの要求に関連する一連作業の識別子と、前記ホスト装置からの要求に対する応答のうち前記第1のインバウンドキューで最も最近に処理された応答のホスト要求に関連する一連作業の識別子とが同じホスト要求を示し、且つ、前記第4のアウトバウンドキューで最も最近に処理された前記ホスト装置からの要求に関連する一連作業の識別子と、前記ホスト装置からの要求に対する応答のうち前記第4のインバウンドキューで最も最近に処理された応答のホスト要求に関連する一連作業の識別子とが同じホスト要求を示す場合に、前記第1のプロセッサが処理を停止する(例えばステップ1106、1107)。
【0179】
これによって、未完了のホストI/Oが無いことを確実に判断して、適切なタイミングでプロセッサを停止することができる。
【0180】
(12)上記(1)において、前記第1のストレージコントローラに故障が発生したとき、前記故障を検出した前記第2のプロセッサが、前記第1のフロントエンドインターフェースに対して、前記第1のエンキュー先切り換え指示を送信する。
【0181】
これによって、片方のコントローラのプロセッサに故障が発生したときにも、他方のコントローラのプロセッサがホスト装置からのI/O要求を引継いで、継続して応答することができる。
【0182】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明のより良い理解のために詳細に説明したものであり、必ずしも説明の全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることが可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【0183】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によってハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによってソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、不揮発性半導体メモリ、ハードディスクドライブ、SSD(Solid State Drive)等の記憶デバイス、または、ICカード、SDカード、DVD等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
【0184】
また、制御線及び情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線及び情報線を示しているとは限らない。実際にはほとんど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【0185】
100:ストレージ装置
110、120:コントローラ
111、121:プロセッサ
112、122:メモリ
113、123:フロントエンドインターフェース
114、124:バックエンドインターフェース
115、125:PCIeスイッチ
116、126:管理プロセッサ
130:ドライブボックス
217、218、237、218:割込み設定レジスタ
211、214、215、231、234、235:非透過性ブリッジ
201、203、221、223:アウトバウンドキュー
202、204、222、224:インバウンドキュー
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
【手続補正書】
【提出日】2024-06-19
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】0150
【補正方法】変更
【補正の内容】
【0150】
フロントエンドインターフェース113は、PCIeスイッチ115、NTB215、リンク128およびプロセッサ121を通るデータ転送経路1400を介して、メモリ122にアクセスする。フロントエンドインターフェース123は、PCIeスイッチ125、NTB234、リンク127およびプロセッサ121を通るデータ転送経路1301を介して、メモリ122にアクセスする。また、メモリ112とメモリ122との間は、プロセッサ111とプロセッサ121とが、プロセッサ121、リンク127、NTB234、PCIeスイッチ125、NTB235、リンク118およびプロセッサ111を通るデータ転送経路1303を介して、データを転送する。また、メモリ112とメモリ122との間は、プロセッサ111とプロセッサ121とが、プロセッサ111、リンク117、NTB214、PCIeスイッチ115、NTB215、リンク128およびプロセッサ121を通るデータ転送経路1302(図13)を介して、データを転送してもよい。