以下、図面を参照して本発明の実施の形態を説明する。ただし、以下に説明する実施形態は、あくまでも例示であり、以下に明示しない種々の変形や技術の適用を排除する意図等はない。例えば、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。なお、以下の実施形態で用いる図面において、同一符号を付した部分は、特に断らない限り、同一若しくは同様の部分を表す。
〔1〕比較例に係る異なるドメイン間での記憶装置へのアクセスについて
はじめに、図16を用いて、一実施形態の比較例に係るストレージ制御装置間でのドメインを跨ったアクセス、すなわち、異なるドメイン間での記憶装置へのアクセスについて説明する。なお、以下の処理は、例えば、コンピュータにより実施されてよい。
図16は、ストレージ制御装置間でのドメインを跨ったアクセスを例示するものである。
この図16に例示するストレージシステム100は、スケールアウト型のストレージ制御装置であるコントローラモジュール(Controller Module; CM)を1つ以上(CM101-0,・・・,CM101-n;nは0以上の整数)備える。また、CM101-0,・・・,CM101-nは、それぞれ、CM#0,・・・,CM#nとも表される。以下、CMを示す符号としては、複数のCMのうち1つを特定する必要があるときには符号101-0,・・・,101-nを用いるが、任意のCMを指すときには符号101を用いる。
さらに、このストレージシステム100は、これら複数のCM101にそれぞれ接続されるFRT103を備える。
この図16は、CM#0とCM#1、CM#4とCM#5、CM#8とCM#9とでペアを構成することで本システム100を冗長化することを例示する。
そして、CM#0,CM#4,CM#8をプライマリ(現用系)のストレージ制御装置、CM#1,CM#5,CM#9をセカンダリ(予備系)のストレージ制御装置として機能させる。例えば、プライマリのCM#4が故障した場合には、CM#4のセカンダリのストレージ制御装置であるCM#5がCM#4の業務を引き継ぐ。これらセカンダリのストレージ制御装置を、ミラーCM(Mirror Controller Module; MCM)ともいう。
また、このストレージシステム100では、記憶装置であるSSD(Solid State Drive)を1つ以上備え、このSSDは、NVMe(Non-Volatile Memory express;登録商標)のインタフェースを用いるものとする。なお、このNVMeインタフェースを用いるSSDをNVMe-SSDと表す。
図16に例示するように、ストレージシステム100は1つ以上のNVMe-SSD(NVMe-SSD102-0,・・・,NVMe-SSD102-m;mは0以上の整数)を備える。また、NVMe-SSD102-0,・・・,NVMe-SSD102-mは、それぞれ、NVMe-SSD#1,・・・,NVMe-SSD#mとも表される。以下、NVMe-SSDを示す符号としては、複数のNVMe-SSDのうち1つを特定する必要があるときには符号102-1,・・・,102-mを用いるが、任意のNVMe-SSDを指すときには符号102を用いる。
図16に例示するように、ストレージシステム100では、プライマリのCM#0とセカンダリCM#1とのペアに対して、NVMe-SSD#0を割り当て、プライマリのCM#4とセカンダリCM#5とのペアに対して、NVMe-SSD#2を割り当てる。また、プライマリのCM#8とセカンダリCM#9とのペアに対して、NVMe-SSD#4を割り当てる。すなわち、NVMe-SSD#0,NVMe-SSD#2,NVMe-SSD#4を、それぞれ、CM#0,CM#4,CM#8の配下とする。
この割り当ては、NVMe-SSD102へのアクセス制御を担当するプライマリのCM101を決定するものである。図16に示す例において、NVMe-SSD#0へのアクセス制御を担当するCM101は、CM#0であり、NVMe-SSD#2へのアクセス制御を担当するCM101は、CM#4である。また、NVMe-SSD#4へのアクセス制御を担当するCM101は、CM#8である。なお、これら各NVMe-SSD102へのアクセス制御を担当するCMを、担当CMともいう。
このようなストレージシステム100では、NVMe-SSD102に対して、当該NVMe-SSD102の担当CMからアクセスする場合、担当CMはNVMe-SSD102に直接アクセスできる。
また、このようなストレージシステム100に備えられるCM101がスケールアウト型のストレージ制御装置である以上、一のCM101から、他のCM101が担当CMとなるNVMe-SSD102へのアクセスが発生する場合がある。
ここで、図16に例示するように、CM#8が担当CMであるNVMe-SSD#4に対して、CM#4がアクセスする場合を例にとる。図16において、アクセス先であるNVMe-SSD#4の担当CMであるCM#8をドライブコントローラモジュール(Drive Controller Module; DCM)ともいう。また、アクセス元のCMであるCM#4をローカルコントローラモジュール(Local Controller Module; LCM)ともいう。
CM#4がNVMe-SSD#4にアクセスしようとしても、CM#8が担当CMであるため、CM#4はNVMe-SSD#4に直接アクセスすることができない。そこで、CM#8は、自身のメモリ104上に備えたBECバッファ105に、NVMe-SSD#4のデータを移動させる。そして、CM#4は、FRT103を介してBECバッファ105内のデータを受信することにより当該データにアクセスする。
図17は、同一ドメイン間での記憶装置へのアクセスを説明するためのシーケンスチャートである。具体的に、この図17は、図16に例示するストレージシステム100において、CM#4から自身の配下にあるNVMe-SSD#2に対して読み出し(READ)によるアクセスを実施した場合のシーケンスチャートである。この図17に例示する詳細なステップや、各ステップにおいて送受信されるコマンドについては後述する。
この図17に例示するように、CM#4のCPUは、NVMe-SSD#2に対してREADコマンド(“SQ_Bell”コマンド,“SQ”コマンド)を送信する。そして、NVMe-SSD#2は、CM#4のCPUに対して、READデータ(“RD”コマンド)を受信する。その後、NVMe-SSD#2は、CM#4のCPUに対して、READデータを送信した後、READコマンドの完了応答(“CQ”コマンド,“MSI-X”コマンド)を送信する。図17に例示する、これらの各コマンドについては後述する。
次に、図18は、異なるドメイン間での記憶装置へのアクセスを説明するためのシーケンスチャートである。具体的に、この図18は、図17に例示するストレージシステム100において、CM#4から、CM#8の配下にあるNVMe-SSD#4に対して読み出しによるアクセスを実行した場合のシーケンスチャートである。この図18に例示する詳細なステップと、各ステップにおいて送受信されるコマンドについても後述する。
この図18に例示する一連の処理を、図19を参照しながら説明する。図19は、異なるドメイン間での記憶装置へのアクセスの概要を説明するための図であり、図18のシーケンスチャートに例示する処理を模式的に示したものである。この図19に例示する詳細なステップ、各ステップにおいて送受信されるコマンド、CM#8のメモリ104の構成についても後述する。
この図18に例示するように、CM#4のCPUは、まず、FRT103を介してCM#8のCPUに対しNVMe-SSD#4へのREADアクセス(“Rd req”コマンド)を依頼する。この処理を、図19における矢印W1に示す。
続いて、CM#8のCPUが、NVMe-SSD#4に対して、READコマンド(“SQ_Bell”コマンド,“SQ”コマンド)を送信すると、NVMe-SSD#4はこのREADコマンドを受信する。この処理を、図19における矢印W2に示す。
続いて、NVMe-SSD#4は、CM#8のCPUに対して、READデータを送信した後、READコマンドの完了応答を送信する。そして、CM#8のCPUは、自身のメモリ上に備えたBECバッファ105に、NVMe-SSD#4に格納されるデータを移動させる。この処理を、図19における矢印W3に示す。
その後、CM#8のCPUは、CM#4のCPUに対して、メモリへの書き込みコマンド(“RD”コマンド)を送信することにより、BECバッファ105に格納されたデータが、FRT103を介してCM#4のCPUに移動される。これにより、CM#4は、BECバッファ内105のデータにアクセスすることになる。この処理を、図19における矢印W4に示す。
図17に例示するシーケンスチャートに比べ、図18に例示するシーケンスチャートでは、CM#4のCPUがCM#8のCPUに対してREADアクセスを依頼するステップ(図19における矢印W1参照)が必要となる。さらに、CM#8のCPUが、CM#4のCPUに対して、メモリへの書き込みコマンドを送信して、BECバッファ105に格納されたデータをCM#4のCPUに移動させるステップ(図19における矢印W4参照)も必要となる。
これらの結果、ドメインを跨った記憶装置へのアクセスを実行する場合には、同一のドメイン間でのアクセスを実行するのに比べて、当該アクセスに要する時間が長くなる(レスポンスが遅くなる)。
〔2〕一実施形態
一実施形態に係るストレージシステム1では、ドメインを跨った記憶装置へのアクセスに要する時間を短縮させる。
〔2-1〕一実施形態に係るストレージシステムのハードウェア構成例
図1は、実施形態の一例としてのストレージシステム1のハードウェア構成を例示する図である。
この図1に例示するように、ストレージシステム1は、スケールアウト型のストレージ制御装置であるCMを1つ以上(CM10-0,・・・,CM10-n;nは0以上の整数)備える。また、CM10-0,・・・,CM10-nは、それぞれ、CM#0,・・・,CM#nとも表される。以下、CMを示す符号としては、複数のCMのうち1つを特定する必要があるときには符号10-0,・・・,10-nを用いるが、任意のCMを指すときには符号10を用いる。なお、“#”に続く数字(0,・・・,n)は、識別子(ID)ともいい、CM10の特定に用いる。
さらに、このストレージシステム1は、これら各CM10に接続されるFRT30を備える。
CM10は、FRT30と接続され、種々の制御を行なうサーバである。このCM10は、図示しない管理装置に接続され、当該管理装置から記憶装置(後述するNVMe-SSD20)のデータに対するアクセス要求を処理する。
NVMe-SSD20は、NVMeインタフェースを用いるSSDであり、種々のデータやプログラム等を格納するハードウェアの一例である。このNVMe-SSD20は、トランザクション層のパケット(Transaction Layer Packet;TLP)を生成する。なお、このTLPは公知であるため、ここでの説明を省略する。
FRT30は、複数のCM10の各々を相互に通信可能にし、複数のCM10間で相互に送受信される情報を中継する、ルータ等の中継装置である。
この図1では、CM#0とCM#1、CM#4とCM#5、CM#8とCM#9とでペアを構成することで本システム1を冗長化することを例示している。
そして、CM#0,CM#4,CM#8をプライマリのストレージ制御装置、CM#1,CM#5,CM#9をセカンダリのストレージ制御装置として機能させる。
また、図1に例示するストレージシステム1は、記憶装置として1つ以上のNVMe-SSD(NVMe-SSD20-0,・・・,NVMe-SSD20-m;mは0以上の整数)を備える。また、NVMe-SSD20-0,・・・,NVMe-SSD20-mは、それぞれ、NVMe-SSD#0,・・・,NVMe-SSD#mとも表される。以下、NVMe-SSDを示す符号としては、複数のNVMe-SSDのうち1つを特定する必要があるときには符号20-0,・・・,20-mを用いるが、任意のNVMe-SSDを指すときには符号20を用いる。
図1に例示するように、ストレージシステム1では、プライマリのCM#0とセカンダリCM#1とのペアに対して、NVMe-SSD#0を割り当て、プライマリのCM#4とセカンダリCM#5とのペアに対して、NVMe-SSD#2を割り当てる。また、プライマリのCM#8とセカンダリCM#9とのペアに対して、NVMe-SSD#4を割り当てる。
なお、図1では、CM10のペアが、それぞれ1つのNVMe-SSD20を備える場合を例示したが、複数のNVMe-SSD20を備えてもよい。
〔2-2〕一実施形態に係るストレージシステムにおけるCMのハードウェア構成例
図2は、実施形態の一例としてのストレージシステム1におけるCM10のハードウェア構成を例示する図である。
この図2を用いて、図1に示すCM10のハードウェア構成を説明する。
CM10は、例示的に、CPU(Central Processing Unit)11、記憶部12、メモリ13、IF部14、入出力部15、スイッチ16、及び、変換部17を備えてよい。また、この変換部17は、変換部メモリ18を備えてよい。
CPU11は、後述する記憶部12に格納されるOS(Operating System)やプログラムを実行し、例えば、図示しない管理装置から入力された要求に応じ、例えば、NVMe-SSD20へのアクセスを実行すべくCM10を制御する。本実施形態では、CPU11は、後述する制御プログラム90を実行する。
記憶部12は、種々のデータやプログラム等を格納するハードウェアの一例である。例えば、記憶部12は、CM10の二次記憶装置として使用されてよく、OSやファームウェア、アプリケーション等のプログラム、及び各種データが格納されてよい。この記憶部12としては、例えば、HDD(Hard Disk Drive)の磁気ディスク装置の他、SSDやSCM(Storage Class Memories)が挙げられる。記憶部12は、CM10の各種機能の全部若しくは一部を実現するプログラム(後述する制御プログラム90)を格納してもよい。
メモリ13は、種々のデータやプログラム等を格納するハードウェアの一例である。メモリ13としては、RAM(Random Access Memory)等の揮発性メモリや、フラッシュメモリ、SCM、ROM(Read Only Memory)等の不揮発性メモリが挙げられる。また、メモリ13は、制御プログラム90を格納してもよい。なお、メモリ13の一例として、後述する、DCM10が備えるDCMメモリ、LCM10が備えるLCMメモリ、及び、MCM10が備えるMCMメモリがある。以下、LCMが備えるメモリ13をLCMメモリ13Lといい、DCM10が備えるメモリ13をDCMメモリ13Dという場合がある。
IF部14は、他のCM10、NVMe-SSD20、FRT30、及び、図示しない管理装置との間の接続及び通信の制御等を行なう通信インタフェースの一例である。例えば、IF部14は、図示しない管理装置を接続するためのアダプタ(ポート)を備えてもよい。なお、制御プログラム90は、図示しないネットワークから当該IF部14を介してダウンロードされてもよい。
入出力部15は、例えば、マウス、キーボード、タッチパネル、操作ボタン等の入力装置、の少なくともいずれか一つを含んでよい。
スイッチ16は、CM10、NVMe-SSD20、及び、FRT30との間の通信を制御する。このスイッチ16は、CPU11が接続されるポートを1つ備え、NVMe-SSD20やFRT30が接続されるポートを複数備えるものとする。また、スイッチ16は、FRT30を介してLCM10と通信する。なお、このスイッチ16は、PCIe(PCI Express)のインタフェースを用いるものとする。
変換部17は、DCM10において用いられるものであり、LCM10がNVMe-SSD20に対してアクセスした場合に、情報(パケット)が含まれるTLPの送信先アドレスをLCM10側のアドレスに変換する。なお、この変換部17はチップ化(FPGA等で集積回路化)することにより実現されてもよい。なお、FPGAはField-Programmable Gate Arrayの略称である。また、DCM10が自身の配下にあるNVMe-SSD20に対してアクセスした場合、アドレスの変換を行なわないものとする。
また、変換部17が備える変換部メモリ18は、種々のデータやプログラム等を格納するハードウェアの一例である。変換部メモリ18としては、RAM等の揮発性メモリや、フラッシュメモリ、SCM、ROM等の不揮発性メモリが挙げられる。
上述したCM10のハードウェア構成は例示である。したがって、CM10内でのハードウェアの増減(例えば、任意のブロックの追加や省略)、分割、任意の組み合わせでの統合等は適宜行なわれてもよい。
〔2-3〕一実施形態にストレージシステムにおける機能構成例
本ストレージシステムに係るCM10の機能構成について、図3を用いて説明する。
図3は、図2に示す実施形態の一例としてのCM10の機能構成を例示する図である。
この図3では、LCM10がCM#4であり、DCM10がCM#8である場合の各機能構成を例示する。このDCM10を第一のストレージ制御装置ともいい、LCM10を第二のストレージ制御装置ともいう。
図3に例示するように、LCM10(CM#4)は、例示的に、解析部40、及び、変換情報作成部41を備えてもよい。そして、LCMメモリ13Lは、例示的に、LCM設定情報50L、LCM割り込み通知情報51L、LCMアクセス情報52L、及び、対DCM領域53を備えてもよい。また、この対DCM領域53は、例示的に、対DCMアクセス情報54、アクセス用アドレス変換情報55、及び、割り込み通知用アドレス変換情報56を備えてもよい。
また、図3に例示するように、DCM10(CM#8)は、例示的に、送受信部60、及び、アドレス変換部61を備えてもよい。そして、このアドレス変換部61は、CMアドレス情報62を備えてもよい。さらに、DCMメモリ13Dは、例示的に、DCM設定情報50D、DCM割り込み通知情報51D、及び、DCMアクセス情報52Dを備えてもよい。
まず、LCM(CM#4)の機能構成について説明する。
LCMの解析部40は、DCM10に対して、DCM設定情報50DとDCM割り込み通知情報51Dとを含む設定情報の送信を依頼する。また、解析部40は、DCM10の送受信部60から設定情報を受信し、受信した設定情報を解析する。解析部40は、受信した設定情報を解析して、例えば、DCM10のアドレスや、DCM10の配下にあるNVMe-SSD20のアドレスを抽出する。なお、これらのDCM設定情報50D、及び、DCM割り込み通知情報51Dについては、後述する。
LCMの変換情報作成部41は、LCMメモリ13L上に、変換情報(後述する、アクセス用アドレス変換情報55と割り込み通知用アドレス変換情報56)の領域を作成し、当該変換情報を作成する。また、このLCMの変換情報作成部41は、作成した変換情報を、後述するDCM10のアドレス変換部61に送信する。
次に、LCMメモリ13Lが備える、LCM設定情報50L、LCM割り込み通知情報51L、LCMアクセス情報52L、及び、対DCMアクセス情報54について、図4の(a)を用いて説明する。
この図4の(a)は、LCMメモリ13Lの記憶領域の使用例を示す図である。
この図4の(a)に例示するように、LCMメモリ13Lには、一例として、LCM設定情報50L、LCM割り込み通知情報51L、LCMアクセス情報52L、及び、対DCMアクセス情報54がそれぞれ格納される。そのため、LCMメモリ13L上には、図4の(a)に例示するような、これら各種情報の記憶領域が備えられるものとする。
LCM設定情報50Lは、LCM10の配下にあるNVMe-SSD20の設定情報(PCIeコンフィグ(config)情報)であり、例えば、配下のNVMe-SSD20のアドレスを含む。図3に示す例において、CM#4(LCM10)の備えるメモリ13のLCM設定情報50Lには、例えば、自身が担当CMであるNVMe-SSD#2の設定情報が格納される。なお、この設定情報には、他のドメインに属するNVMe-SSD20の設定情報は含まれない。
LCM割り込み通知情報51Lは、LCM10が、自身の配下にあるNVMe-SSD20から通知される割り込み(後述する“MSI-X”コマンド)に関する情報である。例えば、図3の場合、CM#4(LCM10)の備えるメモリ13のLCM割り込み通知情報51Lには、DCM10からLCM10に対して送信される完了の通知が格納される。
LCMアクセス情報52Lは、LCM10と、当該LCM10が担当CMであるNVMe-SSD20との間で送受信されるコマンド(例えば、“SQ”コマンドや“CQ”コマンド)を含む。このコマンドについては後述する。
このように、上述した、LCM設定情報50L、LCM割り込み通知情報51L、及び、LCMアクセス情報52Lは、LCM10が、自身の配下にあるNVMe-SSD20との間で送受信する情報や、当該送受信に必要な設定情報を格納するものである。一方、LCMメモリ13Lにおける、対DCM領域53は、LCM10が、DCM10との間で送受信する情報や、当該送受信に必要な設定情報を格納するものである。この対DCM領域53について以下に説明する。
対DCM領域53は、上述したように、LCM10が、DCM10との間で送受信する情報や、当該送受信に必要な設定情報を格納するものである。
この対DCM領域53は、図3に例示するように、対DCMアクセス情報54、アクセス用アドレス変換情報55、及び、割り込み通知用アドレス変換情報56を備える。図5,図6を参照しながら、これらの各情報について説明する。なお、図4の(a)中の「BAR(α’)」は、LCMメモリ13Lにおいて、対DCM領域53内に対DCMアクセス情報54が格納される領域の先頭アドレスを示すものである。
対DCMアクセス情報54は、LCM10が、DCM配下のNVMe-SSD20に対してアクセスした場合に、LCM10とDCM配下のNVMe-SSD20との間で送受信されるコマンド(例えば、“SQ”コマンド)を含む。例えば、図2に示す例の場合、CM#4(LCM10)と、CM#8(DCM10)が担当CMであるNVMe-SSD#4との間で送受信されるコマンド(例えば、“SQ”コマンド)が格納される。このコマンドについては後述する。
図5は、アクセス用アドレス変換情報55を例示するものである。また、図6は、割り込み通知用アドレス変換情報56を例示するものである。なお、本実施形態では、図5,図6に示すように、アクセス用アドレス変換情報55、及び、割り込み通知用アドレス変換情報56をテーブル形式で表現している。しかしながら、アクセス用アドレス変換情報55、及び、割り込み通知用アドレス変換情報56に格納される情報の表現形式はテーブルに限られるものではなく、種々変形して実施することができる。
なお、図5に例示するこれらのアクセス用アドレス変換情報55、及び、図6に例示する割り込み通知用アドレス変換情報56では、DCM10(CM#8),LCM10(CM#4)に関する情報を取り上げて例示するが、これに限られるものではない。また、これらのアクセス用アドレス変換情報55と割り込み通知用アドレス変換情報56とを総称して、変換情報ともいう。
図5に例示するアクセス用アドレス変換情報55は、“CM_ID”、及び、“アクセス用アドレス”の各フィールドを備える。
アクセス用アドレス変換情報55のフィールド“CM_ID”は、CM10を一意に特定するためのIDを格納するものである。なお、本実施形態において、この“CM_ID”に格納される値は、管理者によって付与されるものとする。
アクセス用アドレス変換情報55のフィールド“アクセス用アドレス”は、フィールド“CM_ID”に格納される値により特定されるCM10の備えるメモリ13において、コマンドを格納する領域の先頭アドレスである。このフィールド“アクセス用アドレス”に格納される値を、アドレス情報ともいう。
図5は、CM#8(DCM10)が、自メモリ(DCMメモリ)13上のアドレス「BAR(α)」で始まる領域に、配下のNVMe-SSD20に対するコマンド(DCMアクセス情報52D)を格納することを示す(図4の(b)参照)。
また、CM#4(LCM10)が自メモリ(LCMメモリ)13上のアドレス「BAR(α’)」で始まる領域に、他CM10配下のNVMe-SSD20に対するコマンド(対DCMアクセス情報54)を格納することを示す(図4の(a)参照)。
次に、図6に例示する割り込み通知用アドレス変換情報56は、“CM_ID”、及び、“割り込み通知用アドレス”の各フィールドを備える。
割り込み通知用アドレス変換情報56のフィールド“CM_ID”は、CM10を一意に特定するためのIDを格納するものである。なお、本実施形態において、この“CM_ID”に格納される値は、管理者によって付与されるものとする。
割り込み通知用アドレス変換情報56のフィールド“割り込み通知用アドレス”は、フィールド“CM_ID”に格納される値により特定されるCM10の備えるメモリ13において、割り込み通知情報を格納する領域の先頭アドレスである。
図6は、CM#8(DCM10)が、自メモリ(DCMメモリ)13上のアドレス「BAR(β)」で始まる領域に、配下のNVMe-SSD20からのに対する割り込み通知情報を格納することを示す(図4の(b)参照)。なお、このアドレス「BAR(β)」については図示を省略する。
また、CM#4(LCM10)が自メモリ(LCMメモリ)13上のアドレス「BAR(β’)」で始まる領域に、他CM10配下のNVMe-SSD20からの割り込み通知情報を格納することを示す(図4の(a)参照)。なお、このアドレス「BAR(β’)」については図示を省略する。
次に、図3に例示するCM10の機能構成に関する説明に戻り、DCM10(CM#8)の機能構成について説明する。
DCM10の送受信部60は、DCM10だけでなく、LCM10に対してもFRT30を介して情報を送受信できる機能を備える。この送受信部60は、図2に例示するスイッチ16によって実現されるものとする。また、LCM10によるアクセス要求の送信は、LCM10のCPU11(データアクセス要求発行部)によって実行される。
この送受信部60は、LCM10からのアクセス要求をFRT30を介して受信し、受信したアクセス要求をアドレス変換部61を介してNVMe-SSD20に渡す。なお、本実施形態では、後述する、アクセス開始の通知(“SQ_Bell”コマンドの送信)や、フェッチしたコマンド(“SQ”コマンド)の送信を総称してアクセス要求、又は、データアクセス要求ともいう。また、このアクセス要求には、読み出し要求と書き込み要求とが含まれるものとする。
また、送受信部60は、LCM10からのアクセス要求に対するライトデータやリードデータをアドレス変換部61を介してNVMe-SSD20から受信し、要求元のLCM10にFRT30を介して送信する。
また、送受信部60は、LCM10への指示や通知、及び、完了応答をアドレス変換部61を介してNVMe-SSD20から受信し、要求元のLCM10にFRT30を介して送信する。なお、本実施形態では、後述する、コマンドフェッチの指示(“MRd”(TLP)コマンドの送信)、完了応答(“CQ”コマンドの送信)、及び、割り込み通知(“MSI-X”コマンド)の送信を総称して応答データともいう。
また、送受信部60は、LCM10の解析部40から、DCM設定情報50DとDCM割り込み通知情報51Dとの送信の依頼を受け、FRT30を介してLCM10に対してこれらの情報を送信する。なお、これらのDCM設定情報50DとDCM割り込み通知情報51Dとを総称して、設定情報ともいう。
DCM10のアドレス変換部61は、NVMe-SSD20に対するアクセス要求元がLCM10である場合、当該アクセス要求に対する情報の送信先(返信先)を、要求元であるLCM10(側)のアドレスに変換する機能を備える。そのために、アドレス変換部61は、LCM10の変換情報作成部41から、変換情報(アクセス用アドレス変換情報55、及び、割り込み通知用アドレス変換情報56)を受信し、後述するCMアドレス情報62を設定(更新)する。そして、変換部17は、設定したCMアドレス情報62を用いて、応答データが含まれるTLPの送信先アドレスをLCM10(側)のアドレスに変換する。
なお、このアドレス変換部61は、図2に例示する変換部17によって実現されるものであり、また、CPU11が制御プログラム90を実行することにより実現されるものとする。
また、アドレス変換部61は、後述するCMアドレス情報62を備える。このCMアドレス情報62は、図2に例示する変換部メモリ18に格納されてもよい。
CMアドレス情報62は、LCM10(側)とDCM10とのアドレス情報であり、一例として、図5に例示するアクセス用アドレス変換情報55、及び、図6例示する割り込み通知用アドレス変換情報56と同等の情報を同形式で備えてもよい。具体的には、DCM10が、自身の配下であるNVMe-SSD20に対するコマンドを格納する領域の先頭アドレスを備えてもよい。また、LCM10からDCM10の配下のNVMe-SSD20に対するコマンドを格納する領域の先頭アドレスを備えてもよい。
次に、DCMメモリ13Dが備える、DCM設定情報50D、DCM割り込み通知情報51D、及び、DCMアクセス情報52Dについて図4の(b)を用いて説明する。
この図4の(b)は、DCMメモリ13Dの記憶領域の使用例を示す図である。
この図4の(b)に例示するように、DCMメモリ13Dには、DCM設定情報50D、DCM割り込み通知情報51D、及び、DCMアクセス情報52Dが格納される。そのため、DCMメモリ13D上には、図4の(b)に例示するようなこれらの各種情報のための記憶領域がそれぞれ備えられるものとする。
DCM設定情報50Dは、DCM10の配下にあるNVMe-SSD20の設定情報(PCIeコンフィグ(config)情報)であり、例えば、配下のNVMe-SSD20のアドレスを含む。図2の場合、CM#8(DCM10)の備えるメモリ13の設定情報50には、例えば、自身が担当CMであるNVMe-SSD#4の設定情報が格納される。なお、この設定情報には、他のドメインに属するNVMe-SSD20の設定情報は含まれない。
DCM割り込み通知情報51Dは、DCM10が、自身の配下にあるNVMe-SSD20から通知される割り込み(後述する“MSI-X”コマンド)に関する情報である。例えば、図2に示す例の場合、CM#8(DCM10)の備えるメモリ13のDCM割り込み通知情報52Dには、DCM10の割り込み通知に関する情報が格納される。
また、DCMアクセス情報52Dは、DCM10配下のNVMe-SSD20に対するコマンドが格納される。例えば、図2に示す例の場合、CM#8(DCM10)が、自身が担当CMであるNVMe-SSD#4に対するコマンドが格納される。なお、図4の(b)に示す「BAR(α)」は、DCMメモリ13D上に当該コマンドが格納される領域の開始アドレスを示す。
なお、本実施形態では、上述したLCMメモリ13L内のLCM設定情報50L,LCM割り込み通知情報51L,LCMアクセス情報52Lに格納される情報は、ストレージシステム1の起動時に書き込まれるか、又は、当該情報が更新されるものとする。同様に、上述したLCMメモリ13Lの対DCM領域53内の情報(対DCMアクセス情報54,アクセス用アドレス変換情報55,割り込み通知用アドレス変換情報56)は、本システム1の起動時に書き込まれるか、又は、当該情報が更新されるものとする。
また、本実施形態では、変換部メモリ18内のCMアドレス情報62に格納される情報は、ストレージシステム1の起動時に当該情報が書き込まれるか、又は、当該情報が更新されるものとする。これは、CPU11が制御プログラム90を実行することにより実現されるものとする。
〔2-4〕一実施形態に係るストレージシステムにおける起動時の処理
上述の如く構成された実施形態の一例として、ストレージシステム1における起動時の処理を、図7に示すシーケンスチャート(ステップS1~S9)に従って説明する。
この図7は、一実施形態に係るストレージシステム1における起動時の処理を説明するためのシーケンスチャートである。図7では、CM#4がLCM10であり、CM#8がDCM10であり、CM#8(DCM10)がNVMe-SSD#4の担当CMである場合のストレージシステム1における起動時の処理を例示する。
なお、図7のステップS1に示す処理は、ストレージシステム1の起動を起点として開始するものとする。
ステップS1において、DCM10は、自身が担当CMであるNVMe-SSD20を設定する。図7の例では、ステップS1において、CM#8(DCM10)がNVMe-SSD#4を設定する。
続くステップS2において、LCM(CM#4)の解析部40は、DCM10(CM#8)に対して設定情報を依頼する。
続くステップS3において、DCM10(CM#8)の送受信部60は、LCM10(CM#4)に対して設定情報を送信する。具体的には、DCM10(CM#8)の送受信部60は、DCM設定情報50DとDCM割り込み通知情報51DとをLCM10(CM#4)に対して送信する。
続くステップS4において、LCM10(CM#4)の解析部40は、上記ステップS5にてDCM10(CM#8)が送信した設定情報を受信する。
続くステップS5において、LCM10(CM#4)の解析部40は、上記ステップS4にて受信した設定情報を解析する。解析部40は、受信した設定情報を解析して、例えば、DCM10のアドレスや、DCM10の配下にあるNVMe-SSD20のアドレスを抽出する。
続くステップS6において、LCM10(CM#4)の変換情報作成部41は、LCMメモリ13L上に対DCM領域53を作成する。
続くステップS7において、LCM10(CM#4)の変換情報作成部41は、例えば、上記ステップS5にて抽出した情報(DCM10のアドレス等)に基づき、変換情報を作成し、対DCM領域53に格納する。具体的に、変換情報作成部41は、アクセス用アドレス変換情報55(図5参照)、及び、割り込み通知用アドレス変換情報56(図6参照)を生成し対DCM領域53に格納する。すなわち、ステップS7では、図5,図6に示すような、LCM10(CM#4)とDCM10(CM#8)とのアドレスの対応情報を作成する。
続くステップS8において、LCM10(CM#4)の変換情報作成部41は、上記ステップS7にて生成した変換情報をDCM10(CM#8)に対して送信する。
続くステップS9において、DCM10(CM#8)の送受信部60は、上記ステップS8にて送信された変換情報を受信する。そして、DCM10(CM#8)のアドレス変換部61は、この受信した変換情報に基づき変換部メモリ18上のCMアドレス情報62を設定する。なお、この処理は、CPU11が制御プログラム90を実行することにより実現されるものとする。そして、処理を終了する。
上述したステップS1~S9に示す処理を経て、DCM10(CM#8)のアドレス変換部61(変換部17)は、DCM10のアドレスだけでなく、LCM10(側)のアドレスをも取得することができる。これにより、LCM10から、DCM10が担当CMであるNVMe-SSD20に対するアクセス要求があった場合にも、DCM10(CM#8)のアドレス変換部61(変換部17)により、TLPの送信先をLCM10(側)宛に変更できる。そして、DCM10側では、DCMメモリ13Dを介さずに、DCM10のスイッチ16がFRT30を介してLCM10へ応答データを送受信することが可能となる。
なお、図7に例示した起動処理では、LCM10(CM#4)とDCM10(CM#8)との間で上記のような起動時の処理を行なう場合を例示したが、これに限られない。また、当該ストレージシステム1に上記以外のCM10も備えられる場合には、すべての又は一部のCM10の組み合わせについて図9に例示する起動時の処理を行なってもよい。
また、上記図7のステップS1に示す処理は、ストレージシステム1の起動を起点として開始するものとしたが、当該ストレージシステム1に備える各種装置(例えば、CM10やNVMe-SSD20)の増減が発生したタイミングで開始するものとしてもよい。
〔2-5〕一実施形態に係るストレージシステムにおけるドメインを跨ったアクセスの処理
上述の如く構成された実施形態の一例として、ストレージシステム1におけるドメインを跨ったアクセスの処理を、図9~12を参照しながら、図8に示すシーケンスチャート(ステップT1~T6)に従って説明する。
図8は、本実施形態におけるドメインを跨ったアクセスの処理を説明するためのシーケンスチャートである。具体的に、この図8は、図1に例示するストレージシステム1において、LCM10(CM#4)から、DCM10(CM#8)の配下にあるNVMe-SSD#4に対して読み出しによるアクセスを実行した場合のシーケンスチャートである。
図9は、本実施形態におけるドメインを跨ったアクセスの処理を模式的に説明するための図である。
図10は、本実施形態におけるドメインを跨ったアクセスの処理と比較例とを比較するための図である。
図11は、本実施形態における書き込み要求時に送受信される情報を例示する図である。この図11は、LCM10であるCM#4からDCM10であるCM#8配下のNVMe-SSD#4に対してデータの読み出しを要求した際に、CM#4とNVMe-SSD#4との間で送受信される各情報を例示したものである。
図8のステップT1において、LCM10(CM#4)のCPU11は、FRT103を介してNVMe-SSD#4に対してアクセス開始を通知する(“SQ_Bell”コマンドを送信する)。なお、この“SQ”は“Submission Queue”を表す。
このステップT1に示す処理を、図9における矢印P1に示す。この矢印P1に示すように、LCM10(CM#4)から送信されたアクセス開始の通知は、DCM10(CM#8)の送受信部60(スイッチ16)で受信され、当該要求がNVMe-SSD#4に送信される。なお、本実施形態では、LCM10(CM#4)側での情報の送受信の処理は、当該LCM10(CM#4)が備える送受信部60(スイッチ16)が行なうものとする。
続くステップT2において、NVMe-SSD#4は、LCM10(CM#4)のCPU11に対して、コマンドフェッチを指示する(“MRd(SQ)”コマンドを送信する)。なお、この“MRd”は“Memory Read”(メモリリード)を表す。
このステップT2に示す処理を、図9における矢印P2に示す。この矢印P2に示すように、NVMe-SSD#4から送信されたコマンドフェッチの指示は、TLPにてDCM10(CM#8)のアドレス変換部61(変換部17)に送信される。そして、このアドレス変換部61(変換部17)がCMアドレス情報62を参照し、当該TLPの送信先アドレスを、当該要求元であるCM(CM#4)側のアドレスに変換する。そして、変換したアドレスが送信先アドレスとなったTLPがDCM10(CM#8)の送受信部60(スイッチ16)へ送信され、送受信部60(スイッチ16)は、LCM10(CM#4)のCPU11に対してコマンドフェッチの指示を送信する。
図5に示す例の場合、ステップT2において、アドレス変換部61(変換部17)は、READアクセス要求に対する返信の宛先アドレス(送信先アドレス)を、「BAR(α)」から「BAR(α’)」に変更する。
このステップT2においてNVMe-SSD#4から送信された情報を図11の矢印C1で示す。この矢印C1で示す情報は、NVMe-SSD#4からSQ宛に発行されたコマンド“MRd”(TLP)を表す。なお、図11の矢印C2に示す、送信先アドレス(「0x0000E23C0」)は、DCMメモリ13DにおけるDCMアクセス情報52Dの領域内でSQコマンド用データが格納されるアドレスを示す。また、変換後の送信先アドレス(「0x0000E23C0’」)は、LCMメモリ13Lにおける対DCM領域53の対DCMアクセス情報54領域内でSQコマンド用データが格納されるアドレスを示す。このようにして、コマンド“MRd”(TLP)の送信先がDCM10(CM#8)からLCM10(#4)に変換されたことがわかる。
続くステップT3において、LCM10(CM#4)のCPU11は、上記ステップT2にて受信したコマンドフェッチの指示を受けて、当該LCMメモリ13Lからコマンドをフェッチする。そして、LCM10(CM#4)のCPU11は、フェッチしたコマンドを、FRT103を介してNVMe-SSD#4に対して送信する(“SQ”コマンドを送信する)。また、このコマンドには、LCM(CM#4)のアドレスが含まれる。このように、NVMe-SSD#4は、LCM10(CM#4)から“SQ”コマンドを受信してはじめて、LCM10(CM#4)が自身に対してどのようなコマンド(例えば、リードコマンドやライトコマンド)を送信したのかがわかる。
続くステップT4において、NVMe-SSD#4は、リードデータを読み出して、LCM10(CM#4)のCPU11に対し、読み出した情報を送信する(“RD”コマンドを送信する)。なお、この“RD”は“Read Data”を表す。
このステップT4に示す処理を、図9における矢印P2に示す。この矢印P2に示すように、NVMe-SSD#4で読み出された情報は、TLPにてDCM10(CM#8)の送受信部60(スイッチ16)へ送信される。そして、送受信部60(スイッチ16)は、LCM10(CM#4)のCPU11に対してリードデータを送信する。このステップT4では、上述したステップT3において受信したLCM(CM#4)のアドレスを用いてLCM(CM#4)に対してリードデータを送信するため、アドレス変換部61(変換部17)においてはアドレス変換の処理は行なわない。
続くステップT5において、NVMe-SSD#4は、LCM10(CM#4)のCPU11に対して、READコマンドの完了応答(“CQ”コマンド)を送信する。なお、この“CQ”は“Completion Queue”を表す。
このステップT5に示す処理も、上記ステップT2における処理と同様に、図9における矢印P2の流れとなる。すなわち、矢印P2に示すように、NVMe-SSD#4が送信した完了応答(“CQ”コマンド)は、TLPにてDCM10(CM#8)のアドレス変換部61(変換部17)に送信される。そして、このアドレス変換部61(変換部17)がCMアドレス情報62を参照し、当該TLPの送信先アドレスを、当該要求元であるCM(CM#4)のアドレスに変換する。そして、変換したアドレスが送信先アドレスとなったTLPがDCM10(CM#8)の送受信部60(スイッチ16)へ送信され、送受信部60(スイッチ16)は、LCM10(CM#4)のCPU11に対してREADコマンドの完了応答を送信する。
このステップT5においてNVMe-SSD#4から送信された情報を図11の矢印C3で示す。この矢印C3で示す情報は、NVMe-SSD#4からSQ宛に発行されたコマンド“CplQ”(“MWr”;TLP)を表す。なお、図11の矢印C4に示す、送信先アドレス(「0x0000F20F0」)は、DCMメモリ13DにおけるDCMアクセス情報52Dの領域内でCQコマンド用データが格納されるアドレスを示す。また、変換後の送信先アドレス(「0x0000F20F0’」)は、LCMメモリ13Lにおける対DCM領域53の対DCMアクセス情報54の領域内でCQコマンド用データが格納されるアドレスを示す。このようにして、コマンド“MRd”(TLP)の送信先がDCM10(CM#8)からLCM10(#4)に変換されたことがわかる。
続くステップT6において、NVMe-SSD#4は、LCM10(CM#4)のCPU11に対して、割り込み通知(“MSI-X”コマンド)を送信する。なお、この“MSI-X”は“Message Signaled Interrupts”を表す。
このステップT6に示す処理も、上記ステップT2,T5における処理と同様に、図9における矢印P2の流れとなる。すなわち、矢印P2に示すように、NVMe-SSD#4が送信した割り込み通知(“MSI-X”コマンド)は、TLPにてDCM10(CM#8)のアドレス変換部61(変換部17)に送信される。そして、このアドレス変換部61(変換部17)がCMアドレス情報62を参照し、当該TLPの送信先アドレスを、当該要求元であるCM(CM#4)側のアドレスに変換する。そして、変換したアドレスが送信先アドレスとなったTLPがDCM10(CM#8)の送受信部60(スイッチ16)へ送信される。そして、送受信部60(スイッチ16)は、LCM10(CM#4)のCPU11に対して割り込み通知(“MSI-X”コマンド)を送信する。そして、処理を終了する。
このステップT6においてNVMe-SSD#4から送信された情報を図11の矢印C5で示す。この矢印C5で示す情報は、NVMe-SSD#4からSQ宛に発行されたコマンド“MSI-X Interrupt”(“MWr”;TLP)を表す。なお、図11の矢印C6に示す、送信先アドレス(「0xFEE00000」)は、DCMメモリ13DにおけるDCM割り込み通知情報51Dの領域内でMSI-Xコマンド用データが格納されるアドレスを示す。また、変換後の送信先アドレス(「0xFEE00000’」)は、LCMメモリ13Lにおける対DCM領域53の対DCMアクセス情報54領域内でMSI-X用データが格納されるアドレスを示す。このようにして、コマンド“MRd”(TLP)の送信先がDCM10(CM#8)からLCM10(#4)に変換されたことがわかる。
上記ステップT1~T6に示す処理を経ることにより、LCM10(CM#4)のCPU11は、DCM10(CM#8)のCPU11やBECバッファ(105)を介さず、リクエストの送受信を行なうことができる。
図10には、本実施形態におけるドメインを跨ったアクセス処理(右図)と、比較例におけるドメインを跨ったアクセス処理(左図)とを例示する。
図10を参照すると、本実施形態(右図)では、ステップT2のコマンドフェッチの指示、ステップT5のREADコマンドの完了応答、及び、ステップT6の割り込み通知が、NVMe-SSD#4からLCM10(CM#4のCPU11)に送信される。これは、これらのメッセージ(TLP)の送信先が、アドレス変換部61(変換部17)によってLCM10(CM#4)側のアドレスに変換されるからである。
比較例(左図)では、以上のメッセージの送受信においてCM#8のCPU11やBECバッファ(105)が介在することになる。これに対し、本実施形態では、CM#8のCPU11やBECバッファ(105)への通信を回避することができる。
一方、比較例(左図)では、DCM10(CM#8)のCPU11がLCM10(CM#4)のCPU11に対して、メモリ書き込み(“Mem Wr”)コマンドを送信することにより、BECバッファ105のデータがLCM10(CM#4)のCPU11に移動される。これに対し、本実施形態では、BECバッファ(105)を用いずに情報をLCM10(CM#4)へ送信できる。
したがって、本実施形態におけるドメインを跨った記憶装置(NVMe-SSD20)へのアクセス時間を短縮することができる。
また、図8~図11を用いてLCM10(#4)から読み出し要求を受信した場合を上述したが、書き込み要求を受信した場合においても、TLPの送信先アドレスは同様に変換される。この書き込み要求時に送受信される情報について図12に例示する。図12に例示する要求時に送受信される情報(コマンド(TLP))は、図11に例示した読み出し要求時に送受信される情報と概ね同様であるため説明を省略する。
〔3〕実施形態の変形例
上記図1~図12ではドメインを跨った記憶装置(NVMe-SSD20)へのアクセス処理を説明したが、本変形例では、プライマリのLCM10が故障した場合の切り替え処理について説明する。
なお、本変形例に係るストレージシステム1やCM10のハードウェア構成(図1,図2参照)、及び、CM10の機能構成(図3参照)については、上述した一実施形態と同様のため、説明を省略する。
〔3-1〕実施形態の変形例に係るストレージシステムにおける切り替え処理の概要
本変形例に係るストレージシステム1における切り替え処理の概要について、図14を参照しながら、図13を用いて説明する。
図13は、本変形例に係るストレージシステム1における切り替え処理を説明する例示する図である。
この図13は、プライマリのCM10であるCM#4と、セカンダリのCM10であるCM#5(MCM10)とがペアを構成しており、CM#4がLCM10として、DCM10(CM#8)配下のNVMe-SSD#4にアクセスする場合を例示している。
ここで、図13に例示するように、LCM10(CM#4)が、DCM10(CM#8)配下のNVMe-SSD#4に対してアクセス要求を送信した後にLCM10(CM#4)に故障が発生した場合を想定する。この場合、DCM10(CM#8)のアドレス変換部61(変換部17)で、応答データの送信先をLCM10(CM#4)側のアドレスに変換したとしても、LCM10(CM#4)にて当該情報を受信することができないという課題が発生する。
そこで、本変形例では、上述したような場合に、MCM10(#5)がLCM10(CM#4)の代わりに処理を実行(代行)する。これを、切り替えともいう。この切り替えのために、LCM10(CM#4)にて故障が発生していない間は、随時、LCM10(CM#4)のCPU11が、LCMメモリ13Lの対DCM領域53の情報を、MCM10(CM#5)のメモリ13にコピーする(ミラーリング;図13参照)。なお、このMCM10(CM#5)のメモリ13をMCMメモリ13Mともいう。
また、変換部メモリ18に備えるCMアドレス情報62に、MCM10(#5)のアドレスに関する情報をさらに備える。そして、DCM10(CM#8)のCPU11が、例えば、当該システム1の起動時に当該情報を取得して、変換部メモリ18のCMアドレス情報62に書き込んでもよい(更新してもよい)。このMCM10(#5)のアドレスに関する情報について、図14を用いて説明する。
図14は、本変形例に係るストレージシステム1における切り替え用情報63を説明する例示する図である。この図14は、図13に例示するように、プライマリのCM10としてCM#4を、MCM10としてCM#5を、そして、DCM10としてCM#8を設定した場合の切り替え用情報63を例示する。なお、図14は、CM#4とCM#5とのペア(プライマリのCMがCM#4,MCM10がCM#5)に関する情報を例示したが、他のCMのペア毎に、図14に例示する切り替え用情報63を備えてもよい。
この図14に例示する切り替え用情報63は、“プライマリのCMの状態”、“切り替え前アドレス”及び、“切り替え後アドレス”の各フィールドを備える。
切り替え用情報63のフィールド“プライマリのCMの状態”は、プライマリのCM10(CM#4)の状態が、「生存状態」であるか、又は、「故障状態」であるかを示すものである。本変形例において、このフィールド“プライマリのCMの状態”に示す状態は、後述するアドレス変換部61による生存確認により判断できる。
切り替え用情報63のフィールド“切り替え前アドレス”は、DCM10(CM#8)メモリ13における、DCMアクセス情報52Dを格納する領域の先頭アドレス(「BAR(α)」)を格納するものである。
切り替え用情報63のフィールド“切り替え後アドレス”は、LCMメモリ13Lにおける、対DCMアクセス情報54を格納する領域の先頭アドレスを格納する。プライマリのCM10(CM#4)が「生存状態」である場合、DCM10との間で情報の送受信が可能であるため、“切り替え後アドレス”にはLCMメモリ13L上の対DCMアクセス情報54が格納される領域の先頭アドレス(「BAR(α’)」)を格納する。
また、プライマリのCM(LCM10;CM#4)が「故障状態」である場合には、DCM10との間で情報の送受信が不可能である。したがって、フィールド“切り替え後アドレス”には、MCMメモリ13M上の対DCMアクセス情報54が格納される領域の先頭アドレス(「BAR(α’’)」)を格納する。
この図14に例示した切り替え用情報63に格納される各種情報は、図7に例示した起動時の処理と同様に、当該システム1の起動時に、LCM10(CM#4)からDCM10(#8)に送信されてもよい。
また、図14は、対DCMアクセス情報54を格納する領域の先頭アドレスの切り替えについて例示したが、割り込み通知情報を格納する領域の先頭アドレスの切り替えについても、同様に制御されてもよい。
なお、図13に例示するように、DCMメモリ13D上には、LCMメモリ13L上の対DCMアクセス情報54を格納する領域の先頭アドレス(「BAR(α’)」)が管理されてもよい。また、DCMメモリ13Dにおいて、MCMメモリ13M上の対DCMアクセス情報54を格納する領域の先頭アドレス(「BAR(α’’)」)も管理されてもよい。
さらに、DCM10(CM#8)のアドレス変換部61は、所定の間隔でCM10の故障の有無を検出すべく、CM10に対してポーリングを行なう。このポーリングのことを生存確認ともいう。
また、アドレス変換部61は、生存確認の結果、プライマリのCM10から応答を受信しなかった場合には、このプライマリのCM10が故障状態(故障が発生している状態)であると判定する。そして、アドレス変換部61は、TLPの送信先をMCM10(側)に切り替える。
一方、アドレス変換部61は、プライマリのCM10から応答を受信した場合には、このプライマリのCM10が生存状態(故障が発生している状態ではない)であると判定する。そして、アドレス変換部61は、引き続き、TLPの送信先をプライマリのCM10とする(に変換する)。
このようにして、プライマリのCM10(CM#4)において故障が発生した場合においても、セカンダリのCM10(CM#5)に切り替えられるようになる。
〔3-2〕実施形態の変形例に係るストレージシステムにおける切り替え処理
本変形例に係るストレージシステム1における切り替え処理について、図15に例示するシーケンスチャート(B1~B6)に従って説明する。
図15は、変形例に係るストレージシステム1における切り替え処理を説明するためのシーケンスチャートである。具体的に、この図15は、図1に例示するストレージシステム1において、DCM10(CM#8)によって、配下のNVMe-SSD#4からの情報をLCM10(CM#4)に対して送信された後、切り替え処理を行なう場合のシーケンスチャートである。
図15のステップB1において、DCM10(CM#8)のアドレス変換部61は、LCM10(CM#4)のCPU11に対して“メモリリード”(MRd)コマンドを送信する。そして、処理がステップB2とステップB4とに進む。
ステップB2において、LCM10(CM#4)のCPU11は、故障していない(生存している)場合、上記ステップB2にて受信した情報を読み出す。
ステップB3において、LCM10(CM#4)のCPU11は、故障していない(生存している)場合、上記ステップB3にて行なった読み出しの処理が終了すると、DCM10(CM#8)に対して完了応答を送信する。そして、処理がステップB4に進む。
ステップB4において、DCM10(CM#8)の送受信部60は、LCM10(CM#4)から完了応答を受信したか否かを判定する。ここで、DCM10(CM#8)の送受信部60は、所定時間の間に完了応答を受信したか否かを判定してもよい。完了応答を受信したと判定した場合(ステップB4における“Yes”ルート)、処理がステップB1に戻る。一方、完了応答を受信しなかったと判定した場合(ステップB4における“No”ルート)、処理がステップB5に移行する。
ステップB5において、DCM10(CM#8)のアドレス変換部61は、図14に例示する切り替え用情報63に基づき、TLPの送信先をMCMメモリ上の対DCMアクセス情報54のアドレス(「BAR(α’’)」)に切り替える。そして、切り替え処理を終了する。
また、MCM10(M#8)のCPU11は、LCM10が故障したことを検知し、自身がLCM10の処理を代行できるよう、LCM10の処理を切り替える(ステップB6参照)。そして、切り替え処理を終了する。
以上のステップB1~B6に示す処理を経ることにより、LCM(CM#4)に故障等の問題が発生して情報の送受信ができなくなった場合においても、DCM10(CM#8)とMCM10(M#8)との間で情報の送受信が可能となる。
〔4〕効果
上述のように、一実施形態及び変形例に係るストレージシステム1では、DCM10にアドレス変換部61(変換部17)を設け、さらに、変換部メモリ18にCMアドレス情報62を備え、当該CMアドレス情報62にてLCM10側のアドレスを管理する。これにより、LCM10からDCM10配下のNVMe-SSD20に対してアクセス要求があった場合においても、アドレス変換部61(変換部17)において、CMアドレス情報62を参照してTLPの送信先をLCM10側のアドレスに変換する。そして、DCM10のスイッチ16は、DCMメモリ13Dを用いずに、変換したアドレスに基づき、FRT30を介してLCM10に応答データを送信できる。
したがって、ドメインを跨った記憶装置(NVMe-SSD20)へのアクセスに要する時間を短縮させることができる。
また、変形例に係るストレージシステム1において、プライマリのLCM10が故障した場合、DCM10のアドレス変換部61(変換部17)では、TLPの送信先をMCM10側のアドレスに切り替える。これにより、プライマリのLCM10が故障した場合にも、MCM10がLCM10の処理を代行できると共に、DCM10とMCM10との間で確実に情報の送受信を行なうことができる。
また、一実施形態及び変形例に係るストレージシステム1において、DCM10のアドレス変換部61(変換部17)が、当該システムの起動時に変換部メモリ18内のCMアドレス情報62を生成する。これにより、新たにストレージ制御装置が追加された場合においても自動的にCMアドレス情報62が更新される。したがって、工場出荷時の設定情報に限定されることなく、柔軟なスケールアウトが実現できる。
〔5〕その他
上述した一実施形態及び変形例に係る技術は、以下のように変形、変更して実施することができる。
上述した一実施形態及び変形例では、CM10のペアが、それぞれ1つの記憶装置であるNVMe-SSD20を備えるものとしたが、各ペアが複数のNVMe-SSD20を備えてもよい。
上述した一実施形態及び変形例では、アクセス要求として読み出しの処理を例示したが、アクセス要求は読み出し要求に限られず、例えば、書き込み要求を含んでもよい。
〔6〕付記
以上の実施形態に関し、さらに以下の付記を開示する。
(付記1)
第一のストレージ制御装置と、
前記第一のストレージ制御装置にインタフェースを介して接続され、前記第一のストレージ制御装置による制御下で動作する記憶装置と、
前記第一のストレージ制御装置と通信可能に接続される第二のストレージ制御装置とを備えるストレージシステムであって、
前記第二のストレージ制御装置が、
当該第二のストレージ制御装置に備えられたメモリにおけるアドレス情報を前記第一のストレージ制御装置に通知する通知部と、
前記記憶装置に対するデータアクセス要求を発行するデータアクセス要求発行部と
を備え、
前記第一のストレージ制御装置が、
前記データアクセス要求発行部からの前記記憶装置に対する前記データアクセス要求に応じて作成される応答データの送信先アドレスに、前記通知部によって通知された前記アドレス情報を用いて前記第二のストレージ制御装置の前記メモリにおけるアドレスを設定する宛先設定部と、
前記宛先設定部によって設定された前記送信先アドレスを指定して、前記応答データを、前記第二のストレージ制御装置の前記メモリに送信する送信部と
を備えることを特徴とする、ストレージシステム。
(付記2)
前記宛先設定部が、
前記応答データに送信先アドレスとして設定された前記第一のストレージ制御装置のメモリにおけるアドレスを、前記通知部によって通知された前記アドレス情報を用いて前記第二のストレージ制御装置の前記メモリにおけるアドレスに書き換える
ことを特徴とする付記1記載のストレージシステム。
(付記3)
前記第一のストレージ制御装置が、
前記第二のストレージ制御装置の生存確認を行なう確認部を備え、
前記第二のストレージ制御装置の生存を確認できない場合に、
前記宛先設定部が、におけるアドレス情報を、前記第二のストレージ制御装置を代行する第三のストレージ制御装置のメモリにおけるアドレス情報に置き書き換える
ことを特徴とする付記1または2記載のストレージシステム。
(付記4)
インタフェースを介して接続される記憶装置を制御するとともに、第二のストレージ制御装置と通信可能に接続される第一のストレージ制御装置であって、
前記第二のストレージ制御装置から、当該第二のストレージ制御装置に備えられたメモリにおけるアドレス情報を受信する通信部と、
前記第二のストレージ制御装置からの前記記憶装置に対するデータアクセス要求に応じて作成される応答データの送信先アドレスに、前記第二のストレージ制御装置から通知されたアドレス情報を用いて前記メモリにおけるアドレスを設定する宛先設定部と、
前記宛先設定部によって設定された前記送信先アドレスを指定して前記応答データを、前記第二のストレージ制御装置の前記メモリに送信する送信部と
を備えることを特徴とする、ストレージ制御装置。
(付記5)
前記宛先設定部が、
前記第二のストレージ制御装置からの前記データアクセス要求に応じて前記記憶装置から読み出して作成された応答データに送信先アドレスとして設定された前記第一のストレージ制御装置のメモリにおけるアドレス情報を、前記通知部によって通知された前記アドレス情報を用いて書き換える
ことを特徴とする付記4記載のストレージ制御装置。
(付記6)
前記第二のストレージ制御装置の生存確認を行なう確認部を備え、
前記第二のストレージ制御装置の生存を確認できない場合に、
前記宛先設定部が、
前記応答データの送信先アドレスにおけるアドレス情報を、前記第二のストレージ制御装置を代行する第三のストレージ制御装置のメモリにおけるアドレス情報を用いて書き換える
ことを特徴とする付記4または5記載のストレージ制御装置。