(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023085874
(43)【公開日】2023-06-21
(54)【発明の名称】ストレージシステムおよびデータ管理方法
(51)【国際特許分類】
G06F 16/13 20190101AFI20230614BHJP
G06F 16/17 20190101ALI20230614BHJP
【FI】
G06F16/13 100
G06F16/17
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2021200165
(22)【出願日】2021-12-09
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】小川 周吾
(72)【発明者】
【氏名】達見 良介
(72)【発明者】
【氏名】大平 良徳
(72)【発明者】
【氏名】江原 寛人
(72)【発明者】
【氏名】小川 純司
(57)【要約】 (修正有)
【課題】マッピング情報を適切に管理するストレージシステム及びデータ管理方法を提供する。
【解決手段】ストレージシステムにおいて、第1のコントローラは、自コントローラに管理が割り当てられている記憶領域に記憶したデータにアクセスするための第1のマッピング情報と、第2のコントローラに管理が割り当てられている所定の記憶領域に記憶されたデータにアクセスするための第2のマッピング情報とを管理する。第2のコントローラはガベージコレクション時に自身のマッピング情報を変更する。第1のコントローラは、ガベージコレクション後に所定の記憶領域のデータに第2のマッピング情報を用いてアクセスする際、第2のマッピング情報のうち、アクセスに使用する情報が更新されている場合、第2のコントローラからマッピング情報を取得し第2のマッピング情報を更新する。
【選択図】
図5
【特許請求の範囲】
【請求項1】
複数のコントローラと、前記複数のコントローラがアクセスする記憶装置と、を備え、前記記憶装置の記憶領域に対するデータの管理が前記複数のコントローラの何れかのコントローラに割り当てられているストレージシステムであって、
第1のコントローラは、自コントローラに管理が割り当てられている記憶領域に記憶したデータにアクセスするための第1のマッピング情報と、第2のコントローラに管理が割り当てられている所定の記憶領域に記憶されたデータにアクセスするための第2のマッピング情報とを管理し、
前記第2のコントローラは、前記所定の記憶領域についてガベージコレクションを実施した場合、前記所定の記憶領域に記憶したデータにアクセスするためのマッピング情報を、前記ガベージコレクションによる移動後のデータにアクセスするための移動後のマッピング情報に変更し、
前記第1のコントローラは、前記ガベージコレクション後に前記所定の記憶領域のデータに前記第2のマッピング情報を用いてアクセスする際、前記第2のマッピング情報のうち、アクセスに使用する情報がガベージコレクションに伴い更新されている場合、前記第2のコントローラから前記移動後のマッピング情報を取得し、前記移動後のマッピング情報を用いて前記第2のマッピング情報を更新する、
ストレージシステム。
【請求項2】
前記記憶装置は、前記所定の記憶領域のデータの読み出し要求と、前記第2のマッピング情報が登録されたときの前記所定の記憶領域のバージョンを示す所定のバージョン情報とを前記第1のコントローラから受信した場合、前記所定の記憶領域の最新のバージョンのバージョン情報と、前記所定のバージョン情報とが一致するか否かを判定し、一致しないときは、前記所定のバージョン情報が更新されていることを示す応答情報を前記第1のコントローラに送信し、
前記第1のコントローラは、前記応答情報を受信した場合、前記第2のコントローラから前記移動後のマッピング情報を取得し、前記移動後のマッピング情報を用いて前記第2のマッピング情報を更新する、
請求項1に記載のストレージシステム。
【請求項3】
前記第2のコントローラは、前記ガベージコレクションを実施した場合、前記所定の記憶領域のバージョンを更新したことを示す更新済のバージョン情報を前記記憶装置に送信し、
前記記憶装置は、前記第2のコントローラから前記更新済のバージョン情報を受信した場合、前記更新済のバージョン情報を前記所定の記憶領域の最新のバージョン情報として管理し、
前記第1のコントローラは、前記応答情報を受信した場合、前記移動後のマッピング情報と前記ガベージコレクションによる移動後のデータが記憶されている移動後の記憶領域のバージョンを示す移動後のバージョン情報とを前記第2のコントローラから取得し、前記移動後のマッピング情報を用いて前記第2のマッピング情報を更新し、前記所定の記憶領域の前記所定のバージョン情報を前記移動後の記憶領域の前記移動後のバージョン情報に変更する、
請求項2に記載のストレージシステム。
【請求項4】
前記記憶装置は、前記応答情報として、前記所定の記憶領域のデータの読み出しに失敗したことを示すエラー情報を前記第1のコントローラに送信する、
請求項2に記載のストレージシステム。
【請求項5】
前記第1のコントローラは、前記所定の記憶領域のデータの読み出し要求に基づいて、前記所定の記憶領域の最新のバージョンのバージョン情報と、前記第2のマッピング情報が登録されたときの前記所定の記憶領域のバージョンを示す所定のバージョン情報とが一致するか否かを判定し、一致しないときは、前記第2のコントローラから前記移動後のマッピング情報を取得し、前記移動後のマッピング情報を用いて前記第2のマッピング情報を更新する、
請求項1に記載のストレージシステム。
【請求項6】
前記第2のコントローラは、前記ガベージコレクションを実施した場合、前記所定の記憶領域のバージョンを更新したことを示す更新済のバージョン情報を他の全てのコントローラに送信し、
前記更新済のバージョン情報を受信したコントローラは、前記更新済のバージョン情報を前記所定の記憶領域の最新のバージョン情報として管理し、
前記第1のコントローラは、前記最新のバージョンのバージョン情報と前記所定のバージョン情報とが一致しない場合、前記移動後のマッピング情報と前記ガベージコレクションによる移動後のデータが記憶されている移動後の記憶領域のバージョンを示す移動後のバージョン情報とを前記第2のコントローラから取得し、前記移動後のマッピング情報を用いて前記第2のマッピング情報を更新し、前記所定の記憶領域の前記所定のバージョン情報を前記移動後の記憶領域の前記移動後のバージョン情報に変更する、
請求項5に記載のストレージシステム。
【請求項7】
複数のコントローラと、前記複数のコントローラがアクセスする記憶装置と、を備え、前記記憶装置の記憶領域に対するデータの管理が前記複数のコントローラの何れかのコントローラに割り当てられているストレージシステムにおけるデータ管理方法であって、
第1のコントローラが、自コントローラに管理が割り当てられている記憶領域に記憶したデータにアクセスするための第1のマッピング情報と、第2のコントローラに管理が割り当てられている所定の記憶領域に記憶されたデータにアクセスするための第2のマッピング情報とを管理することと、
前記第2のコントローラが、前記所定の記憶領域についてガベージコレクションを実施した場合、前記所定の記憶領域に記憶したデータにアクセスするためのマッピング情報を、前記ガベージコレクションによる移動後のデータにアクセスするための移動後のマッピング情報に変更することと、
前記第1のコントローラが、前記ガベージコレクション後に前記所定の記憶領域のデータに前記第2のマッピング情報を用いてアクセスする際、前記第2のマッピング情報のうち、アクセスに使用する情報がガベージコレクションに伴い更新されている場合、前記第2のコントローラから前記移動後のマッピング情報を取得し、前記移動後のマッピング情報を用いて前記第2のマッピング情報を更新することと、
を含むデータ管理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、複数のノードがアクセスする記憶領域のデータを管理するストレージシステムに関する。
【背景技術】
【0002】
ホストに対して高いI/O性能を提供するストレージシステムでは、記憶媒体を共有する複数のコントローラに対してアクセス処理を分散することで、性能向上を図ることが可能である。このようなストレージシステムでは、アクセス処理のオーバーヘッドを削減するために、コントローラ間の通信を排除して各コントローラ内でアクセス処理を完結させることで、コントローラの処理性能を高めることが好ましい。
【0003】
そのために、まず各コントローラに対してアクセス処理を分散する際に、例えば論理ユニット(LU)のように、アクセス処理が互いに非依存となる単位(以下、総称して「LU」と記述)でアクセス処理を割り当てることが必要である。また、複数のコントローラ間の負荷の偏りを防いで資源利用効率を高めるために、LUのアクセス処理を割り当てるコントローラを変更し、LUをコントローラ間で移動できることが併せて求められる。各LUは、アクセス元であるホストから独立したデバイス、記憶領域等として認識されるため、各LUのアクセス処理を割り当てるコントローラを1つに限定することで、コントローラ間の通信を排除可能である(特許文献1参照)。
【0004】
そして、各コントローラが他コントローラと通信せずに割り当てられたLUのアクセス処理を行えるように、LUに格納されたデータについて、記憶媒体上の格納先の記憶領域を示すマッピング情報(以下、「マッピング情報」と記述)をメタデータとして持つことが必要である。LUのアクセス処理が割り当てられたコントローラが当該LUに格納されたデータに関するマッピング情報を用いてアクセスを行う。つまり、各LUのアクセス処理を割り当てるコントローラが単一である場合、各LUのマッピング情報の共有に伴うコントローラ間の通信は不要である。
【0005】
一方で、記憶領域の管理においてコントローラ間でマッピング情報を共有する場合は、各コントローラがマッピング情報のコピーを持つと共に、各コントローラ内でマッピング情報に更新が発生した場合、更新内容を他コントローラに通知するための通信が発生する。例えば、ストレージシステムがデータの重複排除機能を持つ場合、データ削減による記憶容量の節約の効果を高めるために、異なるLU間で重複排除を行う必要が生じる。つまり、複数のLUが記憶領域を共有して格納されたデータを参照するため、コントローラ間で対応するマッピング情報の共有が必要である。
【0006】
LU間でマッピング情報を共有する場合、マッピング情報の更新に伴うコントローラ間の通知頻度を削減し、アクセス処理における通信によるオーバーヘッドを低減することが好ましい。マッピング情報の更新は、LUに対する書き込み、または記憶領域のガベージコレクション(GC)によって発生する。重複排除を行う場合に用いられる、ログ構造のような記憶領域管理では、LUに対する書き込み処理はGCに比べて高い頻度で発生する。そのため、LUの書き込み処理によるコントローラ間の通知を回避可能な記憶領域の管理が求められる。
【0007】
特許文献2では、複数のコントローラが記憶媒体を共有し、LU間の重複排除を行うストレージシステムにおいて、各コントローラに対して個別に管理および更新を行う記憶領域を割り当て、LUに対して書き込まれたデータを、当該LUのアクセス処理を行うコントローラが管理する記憶領域に格納する技術が開示されている。この技術によって、LUに対する書き込み処理におけるマッピングの更新に伴う影響を各コントローラ内の範囲に抑えて、コントローラ間の通知を回避可能となる。また、特許文献2では、LUのアクセス処理を行うコントローラを変更した場合に、他コントローラが管理する記憶領域に格納されたデータを参照できるように、マッピング情報をコントローラ間でコピーし、GCに伴うマッピングの更新を通知、反映するための技術が開示されている。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特許第6114397号公報
【特許文献2】特願2020-141524号
【発明の概要】
【発明が解決しようとする課題】
【0009】
記憶領域に対するGCでは、有効なデータの退避に伴ってマッピング情報の更新が発生するため、複数のコントローラが記憶領域を共有する場合に、コントローラ間の通知が必要である。このとき、退避する各データの参照元となるLUのアドレス(論理アドレス)から、マッピング情報の更新対象であるLU、および通知先のコントローラを特定する。その際に、退避の対象となるデータが格納された記憶領域のアドレスと、LUのアドレスとの対応関係を管理するマッピング情報の参照が発生する。ログ構造のような記憶領域の管理では、LUにWriteされたデータに対して例えば4KiBのような、ホストからのWriteと同等の粒度でマッピングを管理する。そのため、データの退避におけるマッピング情報の参照回数が増加する。また、各LUのマッピングを細粒度で管理することから、記憶領域の管理に必要なマッピング情報の容量が増加し、コントローラのメモリに収まらないマッピング情報は、より低速な記憶媒体に格納される。この場合、マッピング情報の参照に伴うオーバーヘッドは更に増加する。
【0010】
よって、GCを必要とする記憶領域を複数のコントローラが共有するストレージシステムにおいて、GCによるデータの退避に伴うマッピング情報の更新をコントローラ間で通知するために、多数のマッピング情報の参照が発生する。つまり、マッピング情報の参照に伴うオーバーヘッドを削減し、コントローラのGCおよびWrite処理の性能低下を避けることが求められている。
【0011】
特許文献2では、GCに伴うデータの退避処理において、他コントローラにマッピング情報の更新を通知する代わりに、マッピング情報を持つノードにGCの処理を引き継ぐ技術を開示している。しかしながら、GCの処理の引き継ぎ先であるコントローラを特定するために、退避するデータの参照元であるLUのアドレスとの対応関係を示すマッピング情報を参照しており、マッピング情報の参照オーバーヘッドを減らす方法は開示されていない。
【0012】
本発明は、以上の点を考慮してなされたもので、マッピング情報を適切に管理し得るストレージシステム等を提案しようとするものである。
【課題を解決するための手段】
【0013】
かかる課題を解決するため本発明においては、複数のコントローラと、前記複数のコントローラがアクセスする記憶装置と、を備え、前記記憶装置の記憶領域に対するデータの管理が前記複数のコントローラの何れかのコントローラに割り当てられているストレージシステムであって、第1のコントローラは、自コントローラに管理が割り当てられている記憶領域に記憶したデータにアクセスするための第1のマッピング情報と、第2のコントローラに管理が割り当てられている所定の記憶領域に記憶されたデータにアクセスするための第2のマッピング情報とを管理し、前記第2のコントローラは、前記所定の記憶領域についてガベージコレクションを実施した場合、前記所定の記憶領域に記憶したデータにアクセスするためのマッピング情報を、前記ガベージコレクションによる移動後のデータにアクセスするための移動後のマッピング情報に変更し、前記第1のコントローラは、前記ガベージコレクション後に前記所定の記憶領域のデータに前記第2のマッピング情報を用いてアクセスする際、前記第2のマッピング情報のうち、アクセスに使用する情報がガベージコレクションに伴い更新されている場合、前記第2のコントローラから前記移動後のマッピング情報を取得し、前記移動後のマッピング情報を用いて前記第2のマッピング情報を更新する、ようにした。
【0014】
上記構成では、例えば、ガベージコレクションが実施された記憶領域のデータにマッピング情報を用いてアクセスする際に、ガベージコレクションに伴うマッピング情報の更新を実行することで、コントローラ間で更新通知を行うことを目的としたマッピング情報の参照を回避する。上記構成によれば、例えば、ガベージコレクションにおけるマッピング情報の参照に伴うオーバーヘッドの発生を抑制し、ガベージコレクションの性能低下を抑制することが可能である。
【発明の効果】
【0015】
本発明によれば、マッピング情報を適切に管理することができる。上記以外の課題、構成、および効果は、以下の実施の形態の説明により明らかにされる。
【図面の簡単な説明】
【0016】
【
図1】第1の実施の形態によるストレージシステムに係る構成の一例を示す図である。
【
図2】第1の実施の形態によるコントローラに係る構成の一例を示す図である。
【
図3】第1の実施の形態による記憶媒体ノードに係る構成の一例を示す図である。
【
図4】第1の実施の形態によるコントローラに含まれるメモリの領域の一例を示す図である。
【
図5】第1の実施の形態によるコントローラのメモリに含まれるプログラム領域の構成の一例を示す図である。
【
図6】第1の実施の形態によるコントローラのメモリに含まれるメタデータ領域の構成の一例を示す図である。
【
図7】第1の実施の形態による記憶媒体ノードに含まれるメモリの領域の一例を示す図である。
【
図8】第1の実施の形態による記憶媒体ノードのメモリに含まれるプログラム領域の構成の一例を示す図である。
【
図9】第1の実施の形態による記憶媒体ノードのメモリに含まれるメタデータ領域の構成の一例を示す図である。
【
図10A】第1の実施の形態によるコントローラRead処理の一例を示す図である。
【
図10B】第1の実施の形態によるコントローラRead処理の一例を示す図である。
【
図11】第1の実施の形態による問い合わせ処理の一例を示す図である。
【
図12】第1の実施の形態による記憶媒体Read処理の一例を示す図である。
【
図13】第1の実施の形態によるコントローラWrite処理の一例を示す図である。
【
図14】第1の実施の形態によるバージョン管理処理の一例を示す図である。
【
図15】第1の実施の形態によるLU移動処理の一例を示す図である。
【
図16】第2の実施の形態によるコントローラのメモリに含まれるプログラム領域の構成の一例を示す図である。
【
図17】第2の実施の形態によるコントローラのメモリに含まれるメタデータ領域の構成の一例を示す図である。
【
図18】第2の実施の形態による記憶媒体ノードに含まれるメモリの領域の一例を示す図である。
【
図19】第2の実施の形態による記憶媒体ノードのメモリに含まれるプログラム領域の構成の一例を示す図である。
【
図20A】第2の実施の形態によるコントローラRead処理の一例を示す図である。
【
図20B】第2の実施の形態によるコントローラRead処理の一例を示す図である。
【
図21】第2の実施の形態による記憶媒体Read処理の一例を示す図である。
【
図22】第2の実施の形態によるバージョン管理処理の一例を示す図である。
【発明を実施するための形態】
【0017】
以下、本発明の実施の形態を詳述する。ただし、本発明は、実施の形態に限定されるものではない。
【0018】
本実施の形態に係るストレージシステムは、マッピング情報の参照に伴うオーバーヘッドを減らすために、コントローラ間のマッピング情報の更新通知を行う代わりに、各コントローラが共有の記憶領域にアクセスする際にマッピング情報の更新有無を確認する。これにより、マッピング情報の更新対象であるLUおよび通知先のコントローラの特定に必要なマッピング情報の参照を回避する。
【0019】
より具体的には、本ストレージシステムは、ストレージシステムの各記憶領域について、いずれかのコントローラに管理を割り当てる。各記憶領域の管理を割り当てられたコントローラのみが、その記憶領域に対する書き込みとGCとを行い、格納されたデータに関するマッピング情報を管理する。本ストレージシステムでは、各コントローラは、他コントローラが管理する記憶領域のデータにアクセスする場合は、当該他コントローラからマッピング情報を取得し、当該記憶領域に対するアクセスに対してはReadのみを行う。また、LUにWriteされたデータに対しては、格納済のデータの更新を含めて全て、当該LUのアクセス処理を行うコントローラが管理する記憶領域に格納される。
【0020】
各コントローラは、管理する記憶領域に対してホストからのWriteよりも大きな、一定のサイズの記憶領域(以下、「ページ」と記述)を単位としてGCの対象となる記憶領域を選択し、有効なデータの退避処理を行う。また、コントローラは、管理する記憶領域の各ページにバージョン番号を付与し、GCを実施する毎に更新する。
【0021】
各コントローラは、LUのアクセス処理において他コントローラが管理する記憶領域のデータのReadを要求され、対応するマッピング情報を持っていない場合は、当該記憶領域を管理するコントローラからマッピング情報を取得する。マッピング情報を要求されたコントローラは、当該記憶領域のデータを含むページのバージョン番号を、要求されたマッピング情報と共に通知する。
【0022】
また、各コントローラは、管理する記憶領域に含まれるページのバージョン番号がGCにより更新されると、記憶領域に対応する記憶媒体を持つノードまたは他の全コントローラに対して、GCを実施したページのバージョン番号の更新を通知する。バージョン番号の更新を通知されたノードまたはコントローラは、記憶領域の各ページのバージョン番号を保持し、通知に応じてバージョン番号を更新する。
【0023】
そして、各コントローラは、自身が持つマッピング情報を参照してLUに対するアクセス要求(Read要求、Write要求等)を処理し、他コントローラが管理する記憶領域に格納されたデータをReadする場合に、自身が持つマッピング情報に対応するバージョン番号を参照し、マッピング情報が更新されているかどうかを確認する。マッピング情報の更新有無の確認は、上記バージョン番号の更新の通知先である、記憶媒体を持つノードまたは自コントローラ内で行われる。
【0024】
記憶媒体を持つノードでマッピング情報の更新の有無を確認する場合、コントローラは自身が持つマッピング情報からアクセス先の記憶領域のアドレスを特定して、記憶媒体を持つノードに対してRead要求を行う。このとき、コントローラは、上記アドレスと共に、マッピング情報に対応するバージョン番号をRead要求に含める。記憶媒体を持つノードは、Readを要求されたアドレスに対応するページを特定し、特定したページのバージョン番号を参照し、当該ページのバージョン番号とRead要求に含まれるバージョン番号とが一致するかを確認する。バージョン番号が不一致である場合は、上記ノードは、コントローラのRead要求に対してエラーを返すことで、コントローラが参照したマッピング情報が更新されたことを通知する。コントローラは、記憶媒体を持つノードからエラーを受け取ると、記憶領域を管理するコントローラに最新のマッピング情報を問い合わせて自身が持つマッピング情報を更新した後に、再度、記憶媒体のRead要求を行う。
【0025】
各コントローラでマッピング情報の更新の有無を確認する場合、コントローラは、自身が持つマッピング情報からアクセス先の記憶領域のアドレスを特定し、記憶媒体を持つノードに対してRead要求を行う前に、参照したマッピング情報に対応するバージョン番号と、コントローラ内で保持する各ページの最新のバージョン番号とを比較する。バージョン番号が不一致の場合は、コントローラは、記憶領域を管理するコントローラに最新のマッピング情報を問い合わせてマッピング情報を更新した後に、記憶媒体のRead要求を行う。
【0026】
上記構成によれば、GCに伴うマッピング情報の更新有無を、各コントローラにおけるマッピング情報を参照したアクセス処理の際に行うようにすることで、コントローラ間で更新通知を行うことを目的としたマッピング情報の参照を回避する。その結果、アクセス処理におけるマッピング情報の参照に伴うオーバーヘッドの発生を抑制し、コントローラのGCおよびWrite処理の性能低下を抑制することが可能である。
【0027】
本明細書等における「第1」、「第2」、「第3」等の表記は、構成要素を識別するために付するものであり、必ずしも、数または順序を限定するものではない。また、構成要素の識別のための番号は、文脈毎に用いられ、1つの文脈で用いた番号が、他の文脈で必ずしも同一の構成を示すとは限らない。また、ある番号で識別された構成要素が、他の番号で識別された構成要素の機能を兼ねることを妨げるものではない。
【0028】
(I)第1の実施の形態
本実施の形態では、複数のコントローラが記憶媒体を共有するストレージシステムにおいて、記憶媒体を持つノード(以下、「記憶媒体ノード」と記述)がコントローラからのRead要求を受けた際に、コントローラが参照したマッピング情報が更新されているかを記憶媒体ノードが確認する例を説明する。なお、本実施の形態は、本発明における請求の範囲を限定するものではなく、実施の形態において説明を行う要素の全てが本発明における課題の解決に必要であるとは限らない。
【0029】
次に、本実施の形態を図面に基づいて説明する。以下の記載および図面は、本発明を説明するための例示であって、説明の明確化のため、適宜、省略および簡略化がなされている。本発明は、他の種々の形態でも実施することが可能である。特に限定しない限り、各構成要素は、単数でも複数でも構わない。
【0030】
なお、以下の説明では、図面において同一要素については、同じ番号を付し、説明を適宜省略する。また、同種の要素を区別しないで説明する場合には、枝番を含む参照符号のうちの共通部分(枝番を除く部分)を使用し、同種の要素を区別して説明する場合は、枝番を含む参照符号を使用することがある。例えば、コントローラを特に区別しないで説明する場合には、「コントローラ101」と記載し、個々のコントローラを区別して説明する場合には、「コントローラ101A」、「コントローラ101B」のように記述することがある。
【0031】
図1は、本実施の形態に係るストレージシステム100に係る構成の一例を示す図である。
【0032】
ストレージシステム100は、複数のコントローラ101(コントローラノード)と、記憶媒体ノード102と、記憶媒体ノード102に接続された記憶媒体103と、コントローラ101および記憶媒体ノード102を接続するネットワーク104とを含んで構成される。また、コントローラ101は、ストレージシステム100にアクセス要求を行うホスト110と接続される。
【0033】
コントローラ101は、ホスト110に対してストレージへのアクセスを提供する。ストレージは、記憶媒体103の記憶領域にマッピングされたLUの形でホスト110に提供される。コントローラ101は、ホスト110に対して複数のLUを提供してもよい。また、各LUに対するアクセスは、同時に単一のコントローラ101のみが提供する。
【0034】
記憶媒体ノード102は、記憶装置の一例であり、LUの記憶領域のマッピング先である記憶媒体103を持ち、コントローラ101に対してアクセスを提供する。複数のコントローラ101は、記憶媒体ノード102の記憶媒体103を共有し、いずれのコントローラ101からも他コントローラ101を経由せずに、記憶媒体103に対して直接アクセスが可能である。
【0035】
記憶媒体103は、コントローラ101が構築するLUに割り当てる記憶領域を提供する。記憶媒体103は、コントローラ101から共有されており、ネットワーク104を経由してアクセスされる。
【0036】
ネットワーク104は、コントローラ101および記憶媒体ノード102を互いに接続し、コントローラ101と通信し、コントローラ101から記憶媒体ノード102に接続される記憶媒体103に対するアクセス要求、アクセス要求に係る各データ等の転送を行う。
【0037】
ホスト110は、コントローラ101が提供するLUに対するアクセス要求を行う。
【0038】
以下では、複数のコントローラ101としてコントローラ101Aおよびコントローラ101Bを例に挙げて説明するが、コントローラ101Aおよびコントローラ101B以外に、追加のコントローラ101をネットワーク104に接続し、記憶媒体ノード102の記憶媒体103を共有してもよい。また、記憶媒体ノード102は、同時に複数の記憶媒体103に対するアクセスを提供してもよい。加えて、ネットワーク104は、
図1の構成に限定されず、例えばホスト110がネットワーク104に接続され、当該ホスト110がコントローラ101にアクセス要求を行う構成でもよい。
【0039】
図2は、コントローラ101に係る構成の一例を示す図である。なお、コントローラ101Aおよびコントローラ101Bは、同様の構成を持つため、それぞれの図示および説明については省略する。
【0040】
コントローラ101は、1つ以上のプロセッサ201と、1つ以上のメモリ202と、1つ以上の通信I/F203と、1つ以上のホストI/F204と、1つ以上のLU205と、1つ以上のボリューム206とを備える。
【0041】
プロセッサ201は、メモリ202を用いてコントローラ機能を実現するプログラムを実行し、ホスト110に対してLU205へのアクセスを提供する。
【0042】
メモリ202は、プロセッサ201上で動作するプログラム、プログラムが利用するメタデータ、一時的に保存が必要なデータ等を格納する。
【0043】
通信I/F203は、ネットワーク104に接続されており、コントローラ101から記憶媒体ノード102に接続された記憶媒体103に対するアクセス要求の送信と、応答の受信と、アクセス要求の処理に伴うReadデータ(記憶媒体103からReadされたデータ)およびWriteデータ(記憶媒体103にWriteするデータ)等のデータの転送とを行う。
【0044】
通信I/F203とネットワーク104との接続における通信規格は、上記アクセス要求および応答の送受信、およびデータの転送が可能である限り、特に限定されない。また、コントローラ101と記憶媒体ノード102との間で行われるアクセス要求、応答、およびデータの送受信で用いられるプロトコルも同様に限定されない。
【0045】
ホストI/F204は、ホスト110からのLU205に対するアクセス要求の受信と、応答の送信と、ホスト110との間でアクセス要求の処理に伴うReadデータまたはWriteデータ等のデータの転送とを行う。
【0046】
ホストI/F204を介した、コントローラ101とホスト110との接続における通信規格およびプロトコルは、上記アクセス要求、応答の送受信、およびデータの転送が可能である限り、特に限定されない。また、ホスト110がネットワーク104に接続されている場合に、ホストI/F204が通信I/F203と共通の構成を用いてもよい。
【0047】
LU205は、プロセッサ201で動作するプログラムによって制御され、ボリューム206のアドレスに対応付けられた仮想的な記憶領域であり、ホストI/F204を通じてホスト110からアクセスが可能な記憶媒体として提供される。また、LU205については、ボリューム206に対するマッピング情報が事前にコントローラ101間で変換されることで、コントローラ101間で制御の移動が可能である。
【0048】
ボリューム206は、プロセッサ201で動作するプログラムによって制御され、記憶媒体103の記憶領域のうち、自コントローラ101に割り当てられた記憶領域から構築される仮想的な記憶領域である。ボリューム206の各アドレスは、記憶媒体103の記憶領域に対応付けられており、LU205のアドレスがボリューム206のアドレスに変換された後に、記憶媒体103の記憶領域のアドレスに変換されることでホスト110からのアクセスが行われる。
【0049】
図3は、記憶媒体ノード102に係る構成の一例を示す図である。記憶媒体ノード102は、接続された1つ以上の記憶媒体103以外に、1つ以上のプロセッサ301と、1つ以上のメモリ302と、1つ以上の通信I/F303とを備える。
【0050】
プロセッサ301は、メモリ302を用いて記憶媒体103に対するアクセス機能を実現するプログラムを実行し、コントローラ101からのアクセス要求に応じて記憶媒体103のアクセスを行う。
【0051】
メモリ302は、プロセッサ301上で動作するプログラム、プログラムが利用するメタデータ、一時的に保存が必要なデータ等を格納する。
【0052】
通信I/F303は、ネットワーク104に接続されており、コントローラ101からの記憶媒体103に対するアクセス要求の受信と、応答の送信と、アクセス要求の処理に伴うReadデータまたはWriteデータ等のデータの転送とを行う。
【0053】
通信I/F303とネットワーク104との接続における通信規格は、上記アクセス要求、応答の送受信、およびデータの転送が可能である限り、特に限定されない。また、コントローラ101と記憶媒体ノード102との間で行われるアクセス要求、応答、およびデータの送受信で用いられるプロトコルも同様に限定されない。
【0054】
図4は、コントローラ101に含まれるメモリ202の領域(格納データの構成)の一例を示す図である。メモリ202は、プログラム領域401と、バッファ領域402と、メタデータ領域403とを備える。
【0055】
プログラム領域401には、プロセッサ201が実行する、ストレージシステム100のコントローラ機能を実施するプログラムが格納される。
【0056】
バッファ領域402には、記憶媒体ノード102に接続された記憶媒体103からのReadデータ、または記憶媒体103に対するWriteデータが一時的に格納される。
【0057】
メタデータ領域403には、コントローラ101がホスト110に対してアクセスを提供する各LU205の処理に関連した管理情報が格納される。
【0058】
図5は、コントローラ101のメモリ202に含まれるプログラム領域401の構成の一例を示す図である。
【0059】
プログラム領域401には、コマンド処理プログラム501と、I/O制御プログラム502と、LU制御プログラム503と、ボリューム制御プログラム504と、GCプログラム505と、バージョン管理プログラム506と、マッピング問い合わせプログラム507と、マッピング応答プログラム508とが格納される。
【0060】
コマンド処理プログラム501は、ホストI/F204を介して、ホスト110からのLU205に対するアクセス要求の受信と、当該アクセス要求に対応する結果の応答とを行う。例えば、コマンド処理プログラム501は、Read要求に対応した処理を開始し、ホストI/F204を介してホスト110との間でRead要求に対応するデータ(結果のデータ)をホスト110に送信する。また、例えば、コマンド処理プログラム501は、Write要求に対応した処理を開始し、ホストI/F204を介してホスト110との間でWrite要求に対応するデータ(結果のデータ)をホスト110に送信する。
【0061】
I/O制御プログラム502は、通信I/F203を介して記憶媒体ノード102に接続された記憶媒体103に対するRead要求およびWrite要求を実行する。また、I/O制御プログラム502は、記憶媒体103のRead要求を行う際に、参照したマッピング情報に関するページのバージョン番号を記憶媒体ノード102に併せて通知する。I/O制御プログラム502から記憶媒体103に対するアクセスで使用されるプロトコルは、指定されたアドレスに対するReadアクセスおよびWriteアクセスが可能である限り、特に限定されない。
【0062】
LU制御プログラム503は、コントローラ101がホスト110に対してアクセスを提供するLU205のアドレス空間について、ボリューム206のアドレス空間との間でマッピングを管理し、LU205のアドレスからボリューム206のアドレスへの変換を行う。また、LU制御プログラム503は、LU205の各アドレスに関するマッピング情報について、マッピングの問い合わせ時のページのバージョン番号を対応付けて管理する。
【0063】
ボリューム制御プログラム504は、LU205のアドレス空間が対応付けられる仮想的な記憶領域であるボリューム206のアドレス空間と、記憶媒体ノード102に接続された記憶媒体103の記憶領域との間のマッピングを管理する。ボリューム制御プログラム504は、ボリューム206のアドレスと、記憶媒体103の記憶領域を示すアドレスとの間で、相互にアドレス変換を行う。
【0064】
GCプログラム505は、記憶媒体ノード102に接続された記憶媒体103から構成される記憶領域のうち、自コントローラ101が管理する記憶領域内のページに含まれる有効なデータを他のページに移動することで退避処理を行う。このときGCプログラム505は、退避を行ったデータの退避元の記憶領域に対応付けられていたボリューム206のアドレスのマッピングを更新し、退避先の記憶領域に対応付けられるようにする。また、GCプログラム505は、バージョン管理プログラム506に対して処理対象としたページのバージョン番号の更新を指示する。
【0065】
バージョン管理プログラム506は、GCプログラム505から指示されたページのバージョン番号を更新し、通信I/F203を介して記憶媒体ノード102に対して当該ページのバージョン番号の更新を通知する。
【0066】
マッピング問い合わせプログラム507は、LU制御プログラム503から、他コントローラ101が管理するボリューム206のアドレスを受け取り、通信I/F203を介してマッピング情報に対応する記憶領域を管理するコントローラ101に問い合わせる。そして、マッピング問い合わせプログラム507は、問い合わせ先のコントローラ101から通信I/F203を介して受け取ったマッピング情報と、マッピング情報に対応するページのバージョン番号とをLU制御プログラム503に応答する。
【0067】
マッピング応答プログラム508は、通信I/F203を介して他コントローラ101から自コントローラ101に対するマッピング情報の問い合わせ要求を受け取り、要求されたボリューム206のアドレスに対応する記憶媒体103の記憶領域のアドレスを取得する。また、マッピング応答プログラム508は、バージョン管理プログラム506を通じて、上記記憶領域のアドレスが含まれるページのバージョン番号を取得する。そして、マッピング応答プログラム508は、取得した記憶媒体103の記憶領域のアドレスと、ページのバージョン番号とを通信I/F203を介して問い合わせ要求元のコントローラ101に応答する。
【0068】
図6は、コントローラ101のメモリ202に含まれるメタデータ領域403の構成の一例を示す図である。
【0069】
メタデータ領域403は、LUマッピングテーブル610と、ボリュームマッピングテーブル620と、バージョンテーブル630と、ボリューム逆引きテーブル640とを備える。
【0070】
LUマッピングテーブル610は、LU205の各アドレスに対応する、ボリューム206のアドレスを格納する。また、LUマッピングテーブル610は、LU205のアドレスが、他コントローラ101によって管理されるボリューム206のアドレスに対応する場合に、マッピング情報の問い合わせ結果として記憶媒体103の記憶領域のアドレスを格納する。上記2種類のアドレスを格納するために、LUマッピングテーブル610は、LU205の各アドレスに対応するエントリを持つ。当該エントリは、各エントリ内に対応するボリューム206を示すボリュームID611(ボリューム番号)と、ボリューム206のアドレスを格納するボリュームアドレス612と、マッピング情報の問い合わせ結果である記憶媒体103の記憶領域のアドレスを格納する記憶領域アドレス613と、記憶領域アドレス613に問い合わせ結果のアドレスが格納されているか否かを示す問い合わせ済フラグ614を持つ。また、上記エントリは、他コントローラ101にマッピングを問い合わせた際に取得した、ページのバージョン番号を示すバージョン番号615を持つ。
【0071】
LUマッピングテーブル610は、
図6に示した形式に限らず、例えば問い合わせ済フラグ614は、「0」、「1」以外の値を用いてもよい。また、問い合わせ済フラグ614を省略する代わりに記憶領域アドレス613に無効を示す特定のアドレス値を格納することで、マッピング情報の問い合わせ結果のアドレスが格納されているかどうかを表してもよい。
【0072】
ボリュームマッピングテーブル620は、コントローラ101がアクセス処理を行うボリューム206毎に設けられ、自コントローラ101が持つボリューム206の各アドレスに対応する、記憶媒体103の記憶領域のアドレスを格納する。
【0073】
バージョンテーブル630は、自コントローラ101が管理する記憶媒体103の記憶領域に含まれる各ページのバージョン番号を格納する。
【0074】
ボリューム逆引きテーブル640は、コントローラ101がアクセス処理を行うボリューム206毎に設けられ、自コントローラ101が管理する記憶媒体103の記憶領域の各アドレスに対応する、ボリューム206のアドレスを格納する。
【0075】
図7は、記憶媒体ノード102に含まれるメモリ302の領域(格納データの構成)の一例を示す図である。メモリ302は、プログラム領域701と、バッファ領域702と、メタデータ領域703とを備える。
【0076】
プログラム領域701には、プロセッサ301が実行する、ストレージシステム100のコントローラ機能を実施するプログラムが格納される。
【0077】
バッファ領域702には、記憶媒体103からのReadデータまたは記憶媒体103に対するWriteデータが一時的に格納される。
【0078】
メタデータ領域703には、記憶媒体103の記憶領域に含まれる各ページのバージョン番号が格納される。
【0079】
図8は、記憶媒体ノード102のメモリ302に含まれるプログラム領域701の構成の一例を示す図である。
【0080】
プログラム領域701には、コマンド処理プログラム801と、I/O制御プログラム802と、バージョン番号確認プログラム803と、バージョン番号更新プログラム804とが格納される。
【0081】
コマンド処理プログラム801は、通信I/F303を介してコントローラ101からの記憶媒体103に対するRead要求およびWrite要求を受信し、結果の応答を行う。また、コマンド処理プログラム801は、コントローラ101からRead要求を受け取る際に、当該コントローラ101が参照したマッピング情報に関するバージョン番号を併せて受け取る。
【0082】
I/O制御プログラム802は、記憶媒体103に対するRead要求およびWrite要求を実行する。
【0083】
バージョン番号確認プログラム803は、コマンド処理プログラム801から指定された、アクセス先のアドレスに対応するページを特定し、特定したページの現在のバージョン番号と、Read要求と併せてコントローラ101から受け取ったマッピング情報に関するバージョン番号と、を比較する。バージョン番号確認プログラム803は、Read要求のバージョン番号がページの現在のバージョン番号と一致しない場合、コントローラ101が更新前のマッピング情報を用いてRead要求を行ったと判定し、コマンド処理プログラム801に対してRead要求元のコントローラ101に対して、当該コントローラ101が参照したマッピング情報が更新されたことをエラーとして応答するように通知する。
【0084】
バージョン番号更新プログラム804は、通信I/F303を介してコントローラ101からページのアドレスと、新しいバージョン番号とを受け取り、記憶媒体ノード102が持つ、各ページのバージョン番号の情報を更新する。バージョン番号更新プログラム804がコントローラ101から受け取る、ページのバージョン番号の更新に関する通知は、上記形式に限定されない。例えば、各ページのバージョン番号が「0」から始まり、更新時に必ず「1」ずつ加算される場合は、記憶媒体ノード102が持つ各ページのバージョン番号を「0」で予め初期化しておき、コントローラ101からバージョン番号が変更されたページのアドレスのみを受け取る形式であってもよい。
【0085】
コントローラ101からコマンド処理プログラム801が受け取るRead要求およびWrite要求の規格は、上記動作が可能な限り特に限定されない。例えば、Read要求と併せて受け取るマッピング情報に関するバージョン番号について、Read要求にバージョン番号を格納する専用のフィールドを持たず、アドレスの上位ビットをバージョン番号として利用する方式等を用いてもよい。
【0086】
図9は、記憶媒体ノード102のメモリ302に含まれるメタデータ領域703の構成の一例を示す図である。
【0087】
メタデータ領域703は、バージョンテーブル901を備える。バージョンテーブル901は、記憶媒体103の記憶領域に含まれる各ページの現在のバージョン番号を格納する。
【0088】
図10Aおよび
図10Bは、ホスト110からLU205へのRead要求に関する、コントローラ101Aにおける一連の流れを示すフローチャート(コントローラRead処理)の一例を示す図である。
図10Aおよび
図10Bのフローチャートに基づく動作は以下の通りである。
【0089】
ステップS1001:コントローラ101Aのコマンド処理プログラム501は、ホストI/F204を介して、ホスト110からLU205に対するRead要求を受信する。続けてステップS1002が実施される。
【0090】
ステップS1002:LU制御プログラム503は、コマンド処理プログラム501からRead先のアドレス(例えば、LU205のアドレス)を受け取り、メモリ202上のメタデータ領域403から、LUマッピングテーブル610のRead先のアドレスに対応するエントリを参照する。続けてステップS1003が実施される。
【0091】
ステップS1003:LU制御プログラム503は、ステップS1002で参照したエントリのボリュームID611およびボリュームマッピングテーブル620を参照し、コントローラ101Aが参照先のボリューム206を持つかを確認する。その結果、参照先のボリューム206を自コントローラ101Aが管理している場合は、ステップS1004が実施され、それ以外、即ち他コントローラ101Bが管理する場合は、ステップS1006が実施される。
【0092】
ステップS1004:ボリューム制御プログラム504は、ステップS1002で参照されたエントリに含まれるボリュームID611に対応するボリュームマッピングテーブル620を参照する。そして、ボリューム制御プログラム504は、ステップS1002で参照されたエントリに含まれるボリュームアドレス612に対応する当該ボリュームマッピングテーブル620のエントリを参照し、Read先のLU205のアドレスに対応する、記憶媒体103の記憶領域のアドレスを取得する。続けてステップS1005が実施される。
【0093】
ステップS1005:ボリューム制御プログラム504は、ステップS1004で取得した記憶媒体103の記憶領域のアドレスを含むページのアドレスを特定する。そして、ボリューム制御プログラム504は、メモリ202のメタデータ領域403に格納されたバージョンテーブル630を参照し、特定したページのアドレスから、特定したページの現在のバージョン番号を取得する。続けてステップS1009が実施される。
【0094】
ステップS1006:LU制御プログラム503は、ステップS1002で参照したエントリに含まれる問い合わせ済フラグ614を参照し、マッピングを問い合わせ済であるかを確認する。マッピングを問い合わせ済である場合はステップS1007が実施され、マッピングを問い合わせ済でない場合(問い合わせが未実施である場合)はステップS1008が実施される。
【0095】
ステップS1007:LU制御プログラム503は、LUマッピングテーブル610を参照し、ステップS1002で参照したエントリに含まれる記憶領域アドレス613およびバージョン番号615を、Read先のLU205のアドレスに対応する記憶媒体103の記憶領域のアドレスおよびRead先のLU205のアドレスに対応するページのバージョン番号として取得する。続けてステップS1009が実施される。
【0096】
ステップS1008:マッピング問い合わせプログラム507は、ステップS1002で参照されたエントリに含まれるボリュームID611およびボリュームアドレス612に関するマッピング情報を、ボリューム206を管理するコントローラ101Bに問い合わせる。そして、マッピング問い合わせプログラム507は、コントローラ101Bから問い合わせ結果として、上記ボリュームID611およびボリュームアドレス612に対応する記憶媒体103の記憶領域のアドレスと当該アドレスを含むページのバージョン番号とを取得する。マッピング問い合わせプログラム507は、ステップS1002で参照されたLUマッピングテーブル610のエントリに含まれる記憶領域アドレス613とバージョン番号615とに、取得したアドレスとバージョン番号とを格納し、当該エントリの問い合わせ済フラグ614を「1」にセットする。続けてステップS1009が実施される。
【0097】
ステップS1009:I/O制御プログラム502は、通信I/F203を介して記憶媒体ノード102に対して、記憶媒体103の記憶領域における、取得したアドレスのRead要求を行う。また、I/O制御プログラム502は、取得したページのバージョン番号を上記Read要求に格納し、Read先のアドレスと共に記憶媒体ノード102に送信する。続けてステップS1010が実施される。
【0098】
ステップS1010:I/O制御プログラム502は、通信I/F203を介して記憶媒体ノード102からステップS1009のRead要求に対する応答を受け取る。記憶媒体ノード102から正常にRead結果のデータをI/O制御プログラム502が受信した場合はステップS1011が実施され、バージョン番号が不一致、即ちマッピング情報が更新済であることを示すエラーをI/O制御プログラム502が受信した場合はステップS1008が実施される。
【0099】
ステップS1011:I/O制御プログラム502は、記憶媒体ノード102から受信したRead結果のデータを、メモリ202のバッファ領域402に格納する。続けてステップS1012が実施される。
【0100】
ステップS1012:コマンド処理プログラム501は、バッファ領域402に格納されたRead結果のデータを、ホストI/F204を介してホスト110にRead要求の結果として転送し、一連の動作を終了する。
【0101】
図11は、
図10BのフローチャートのステップS1008において、コントローラ101Bがコントローラ101Aからのマッピングの問い合わせに応答する、一連の流れを示すフローチャート(問い合わせ処理)の一例を示す図である。
図11のフローチャートに基づく動作は以下の通りである。
【0102】
ステップS1101:コントローラ101Bのマッピング応答プログラム508は、通信I/F203を介して他コントローラ101Aからマッピングの問い合わせ対象のボリュームIDおよびボリュームアドレスを受信する。続けてステップS1102が実施される。
【0103】
ステップS1102:マッピング応答プログラム508は、自コントローラ101Bのメモリ202のメタデータ領域403に格納されているボリュームマッピングテーブル620のうち、マッピングの問い合わせ対象としてボリュームIDで指定されたボリューム206に対応するボリュームマッピングテーブル620を参照する。そして、マッピング応答プログラム508は、当該ボリュームマッピングテーブル620におけるエントリであって、問い合わせ対象として指定されたボリュームアドレスに対応するエントリを参照し、当該エントリに含まれる記憶領域アドレス(記憶媒体103の記憶領域のアドレス)を取得する。続けてステップS1103が実施される。
【0104】
ステップS1103:マッピング応答プログラム508は、ステップS1102で取得した記憶媒体103の記憶領域のアドレスを含むページのアドレスを特定し、メモリ202のメタデータ領域403に格納されたバージョンテーブル630を参照する。そして、マッピング応答プログラム508は、バージョンテーブル630から、特定したページの現在のバージョン番号を取得する。続けてステップS1104が実施される。
【0105】
ステップS1104:マッピング応答プログラム508は、ステップS1102およびステップS1103のそれぞれにおいて取得した記憶媒体103の記憶領域のアドレスおよびページのバージョン番号を、通信I/F203を介してマッピングの問い合わせ元であるコントローラ101Aに応答し、一連の動作を終了する。
【0106】
図12は、コントローラ101AからのRead要求を、記憶媒体ノード102が処理する一連の流れを示すフローチャート(記憶媒体Read処理)の一例を示す図である。
図12のフローチャートに基づく動作は以下の通りである。
【0107】
ステップS1201:コマンド処理プログラム801は、通信I/F303を介してコントローラ101Aから記憶媒体103の記憶領域に関するRead要求を受信する。続けてステップS1202が実施される。
【0108】
ステップS1202:バージョン番号確認プログラム803は、ステップS1201で受信したRead要求から、Read先のアドレス(記憶媒体103の記憶領域のアドレス)を含むページのアドレスを計算(特定)する。続けてステップS1203が実施される。
【0109】
ステップS1203:バージョン番号確認プログラム803は、メモリ302のメタデータ領域703に格納されたバージョンテーブル901を参照する。そして、バージョン番号確認プログラム803は、ステップS1202で計算したページのアドレスに対応する現在のバージョン番号を取得する。続けてステップS1204が実施される。
【0110】
ステップS1204:バージョン番号確認プログラム803は、ステップS1201で受信したRead要求に含まれるバージョン番号と、ステップS1203で取得したバージョン番号とを比較する。バージョン番号が一致する場合はステップS1205が実施され、バージョン番号が一致しない場合はステップS1207が実施される。
【0111】
ステップS1205:I/O制御プログラム802は、記憶媒体103に対してRead要求を行い、ステップS1201で受信されたRead先のアドレスのデータを記憶媒体103から取得する。I/O制御プログラム802は、記憶媒体103から取得したデータをメモリ302のバッファ領域702に格納する。続けてステップS1206が実施される。
【0112】
ステップS1206:コマンド処理プログラム801は、バッファ領域702に格納されたRead結果のデータを、通信I/F303を介してコントローラ101AにRead要求の結果として転送し、一連の動作を終了する。
【0113】
ステップS1207:コマンド処理プログラム801は、通信I/F303を介してコントローラ101Aに、Read要求の結果としてバージョン番号の不一致、即ちページ内のデータのマッピング情報が更新されたことを示すエラーを転送し、一連の動作を終了する。
【0114】
図13は、ホスト110からLU205へのWrite要求に関する、コントローラ101Aにおける一連の流れを示すフローチャート(コントローラWrite処理)の一例を示す図である。
図13のフローチャートに基づく動作は以下の通りである。
【0115】
ステップS1301:コントローラ101Aのコマンド処理プログラム501は、ホストI/F204を介して、ホスト110からLU205に対するWrite要求と、Writeデータとを受信する。また、コマンド処理プログラム501は、受信したWriteデータをメモリ202のバッファ領域402に格納する。続けてステップS1302が実施される。
【0116】
ステップS1302:コマンド処理プログラム501は、自コントローラ101Aが管理するボリューム206から、Writeデータを格納するボリューム206を選択する。続けてステップS1303が実施される。
【0117】
ステップS1303:ボリューム制御プログラム504は、メモリ202のメタデータ領域403に格納されたボリュームマッピングテーブル620を参照し、Writeデータの格納先とする記憶媒体103の記憶領域のアドレスを決定する。続けてステップS1304が実施される。
【0118】
ステップS1304:I/O制御プログラム502は、通信I/F203を介して記憶媒体ノード102に対して、ステップS1303で決定した記憶媒体103の記憶領域のアドレスへのWrite要求を送信する。また、I/O制御プログラム502は、メモリ202のバッファ領域402からステップS1301で格納されたWriteデータを読み出し、通信I/F203を介して記憶媒体ノード102にWriteデータとして送信する。続けてステップS1305が実施される。
【0119】
ステップS1305:ボリューム制御プログラム504は、Writeデータの格納先の記憶領域と関連付ける、ボリューム206のアドレスを決定する。そして、ボリュームマッピングテーブル620およびボリューム逆引きテーブル640に、関連付けるボリューム206のアドレスと、記憶媒体103の記憶領域のアドレスとを登録する。続けてステップS1306が実施される。
【0120】
ステップS1306:LU制御プログラム503は、メモリ202のメタデータ領域403に格納されたLUマッピングテーブル610における、LU205のWrite先のアドレスに対応するエントリに着目する。そして、LU制御プログラム503は、ステップS1302でWriteデータの格納先に選択されたボリューム206を示すボリュームIDを当該エントリのボリュームID611に格納し、Write先の記憶領域に関連付けられたボリューム206のアドレスを当該エントリのボリュームアドレス612に格納する。続けてステップS1307が実施される。
【0121】
ステップS1307:コマンド処理プログラム501は、ホストI/F204を介して、Write要求の処理が完了したことをホスト110に応答し、一連の動作を終了する。
【0122】
図14は、GCに伴うページのバージョン番号更新に関するコントローラ101Aおよび記憶媒体ノード102における一連の流れを示すフローチャート(バージョン管理処理)の一例を示す図である。
図14のフローチャートに基づく動作は以下の通りである。
【0123】
ステップS1401:コントローラ101Aのバージョン管理プログラム506は、メモリ202のメタデータ領域403に格納されたバージョンテーブル630を参照し、GCプログラム505によりデータの退避処理の対象となったページのバージョン番号を取得する。続けてステップS1402が実施される。
【0124】
ステップS1402:コントローラ101Aのバージョン管理プログラム506は、ステップS1401で取得したページのバージョン番号を「1」加算してバージョンテーブル630を更新する。続けてステップS1403が実施される。
【0125】
ステップS1403:コントローラ101Aのバージョン管理プログラム506は、GCプログラム505によりデータの退避処理の対象となったページに関する記憶媒体103の記憶領域のアドレスと、更新したページのバージョン番号とを、通信I/F203を介して記憶媒体ノード102に送信することでページのバージョン番号が更新されたことを通知する。続けてステップS1404が実施される。
【0126】
ステップS1404:記憶媒体ノード102のバージョン番号更新プログラム804は、通信I/F303を介してコントローラ101Aからページのバージョン番号の更新通知を受信する。そして、バージョン番号更新プログラム804は、メモリ302のメタデータ領域703に格納されたバージョンテーブル901において、通知を受けたページのバージョン番号を更新し、一連の動作を終了する。
【0127】
なお、ステップS1403の動作において、バージョン番号の更新は「1」を加算する方法に限定されない。また、ステップS1403の動作における、コントローラ101Aから記憶媒体ノード102に対するページのバージョン番号の更新通知は、ページのアドレスを含み、更新したページのバージョン番号を含まない構成としてもよい。この場合、記憶媒体ノード102のバージョン番号更新プログラム804は、ステップS1404の動作においてバージョンテーブル901を参照して更新前のページのバージョン番号を取得し、バージョン番号を更新してバージョンテーブル901に格納する必要がある。
【0128】
図15は、コントローラ101Bが制御(管理)していたLU205をコントローラ101Aに移動してコントローラ101Aで制御する初期化処理の一連の流れを示すフローチャート(LU移動処理)の一例を示す図である。
図15のフローチャートに基づく動作は以下の通りである。
【0129】
ステップS1501:LU205の移動先であるコントローラ101Aにおいて、LU制御プログラム503は、移動対象のLU205に対応するエントリを、自コントローラ101Aのメモリ202のメタデータ領域403に格納されているLUマッピングテーブル610に作成する。続けてステップS1502が実施される。
【0130】
ステップS1502:LU205の移動元であるコントローラ101Bにおいて、LU制御プログラム503は、自コントローラ101Bのメモリ202のメタデータ領域403に格納されているLUマッピングテーブル610から、移動対象のLU205に対応する各エントリのボリュームID611およびボリュームアドレス612を取得し、通信I/F203を介してコントローラ101Aに転送する。続けてステップS1503が実施される。
【0131】
ステップS1503:コントローラ101AのLU制御プログラム503は、通信I/F203を介してコントローラ101Bから移動対象のLU205に対応する各エントリのボリュームID611およびボリュームアドレス612を受信する。そして、LU制御プログラム503は、ステップS1501で作成したLUマッピングテーブル610の各エントリに格納する。続けてステップS1504が実施される。
【0132】
ステップS1504:コントローラ101AのLU制御プログラム503は、ステップS1503でボリュームID611およびボリュームアドレス612を格納した、LUマッピングテーブル610の各エントリについて問い合わせ済フラグ614を「0」にリセットする。続けてステップS1505が実施される。
【0133】
ステップS1505:コントローラ101BのLU制御プログラム503は、LUマッピングテーブル610から移動対象のLU205に対応するエントリを削除し、一連の動作を終了する。
【0134】
本実施の形態によれば、複数のコントローラが記憶媒体を共有するストレージシステムにおいて、コントローラ間で更新の通知先を特定することを目的としたマッピング情報の参照を回避しつつ、コントローラ間のマッピング情報の同期が可能である。マッピング情報の参照を回避しつつコントローラ間でマッピング情報の同期を行うことで、コントローラのGCおよびWrite処理におけるオーバーヘッドの発生を回避し、性能低下の発生を抑制する。
【0135】
(2)第2の実施の形態
本実施の形態では、複数のコントローラが記憶媒体を共有するストレージシステムにおいて、各コントローラが記憶媒体ノードに対してRead要求を行う際に、コントローラ内で事前に参照したマッピング情報が更新されているかを確認する例を説明する。なお、本実施の形態は、本発明における請求の範囲を限定するものではなく、実施の形態において説明を行う要素の全てが本発明における課題の解決に必要であるとは限らない。また、本実施の形態の説明では、第1の実施の形態における構成および動作の差分を説明し、説明を行わない構成および動作については第1の実施の形態と同一としてよい。
【0136】
図16は、コントローラ101のメモリ202に含まれるプログラム領域401の構成の一例を示す図である。
【0137】
プログラム領域401には、コマンド処理プログラム501と、I/O制御プログラム502と、LU制御プログラム503と、ボリューム制御プログラム504と、GCプログラム505と、バージョン管理プログラム1606と、マッピング問い合わせプログラム507と、マッピング応答プログラム508と、バージョン番号確認プログラム1609と、バージョン番号更新プログラム1610とが格納される。
【0138】
バージョン管理プログラム1606は、GCプログラム505から指示されたページのバージョン番号を更新し、通信I/F203を介して他コントローラ101に対して当該ページのバージョン番号の更新を通知する。
【0139】
バージョン番号確認プログラム1609は、記憶媒体103の記憶領域におけるRead予定のアドレスに対応するページを特定し、特定したページのバージョン番号と、参照したボリューム206のマッピング情報に対応付けられたバージョン番号とを比較し、参照したマッピング情報に対応付けられたバージョン番号がページのバージョン番号と一致するか否かを判定する。
【0140】
バージョン番号更新プログラム1610は、通信I/F203を介して他コントローラ101からページのアドレスと、新しいバージョン番号とを受け取り、記憶媒体ノード102が持つ、各ページのバージョン番号の情報を更新する。なお、バージョン番号更新プログラム1610がコントローラ101から受け取る、ページのバージョン番号の更新に関する通知は、上記形式に限定されない。例えば、各ページのバージョン番号が「0」から始まり、更新時に必ず「1」ずつ加算される場合は、各ページのバージョン番号を「0」で予め初期化しておき、コントローラ101からバージョン番号が変更されたページのアドレスのみを受け取る形式であってもよい。
【0141】
図17は、コントローラ101のメモリ202に含まれるメタデータ領域403の構成の一例を示す図である。
【0142】
メタデータ領域403は、LUマッピングテーブル610と、ボリュームマッピングテーブル620と、バージョンテーブル630と、ボリューム逆引きテーブル640と、外部バージョンテーブル1750とを備える。
【0143】
外部バージョンテーブル1750は、記憶媒体103の記憶領域に含まれる他コントローラ101が管理する各ページの現在のバージョン番号を格納する。
【0144】
図18は、記憶媒体ノード102に含まれるメモリ302の領域(格納データの構成)の一例を示す図である。メモリ302は、プログラム領域701と、バッファ領域702とを備える。
【0145】
図19は、記憶媒体ノード102のメモリ302に含まれるプログラム領域701の構成の一例を示す図である。プログラム領域701には、コマンド処理プログラム801と、I/O制御プログラム802とが格納される。
【0146】
図20Aおよび
図20Bは、ホスト110からLU205へのRead要求に関する、コントローラ101Aにおける一連の流れを示すフローチャート(コントローラRead処理)の一例を示す図である。
図20Aおよび
図20Bのフローチャートに基づく動作は以下の通りである。
【0147】
ステップS2001:コントローラ101Aのコマンド処理プログラム501は、ホストI/F204を介して、ホスト110からLU205に対するRead要求を受信する。続けてステップS2002が実施される。
【0148】
ステップS2002:LU制御プログラム503は、コマンド処理プログラム501からRead先のアドレス(例えば、LU205のアドレス)を受け取り、メモリ202上のメタデータ領域403から、LUマッピングテーブル610のRead先のアドレスに対応するエントリを参照する。続けてステップS2003が実施される。
【0149】
ステップS2003:LU制御プログラム503は、ステップS2002で参照したエントリのボリュームID611およびボリュームマッピングテーブル620を参照し、コントローラ101Aが参照先のボリューム206を持つかを確認する。その結果、参照先のボリューム206を自コントローラ101Aが管理している場合は、ステップS2004が実施され、それ以外、即ち他コントローラ101Bが管理する場合は、ステップS2006が実施される。なお、LU制御プログラム503は、アクセス先が自コントローラ101Aのボリューム206である場合は、エントリが初期化済みであるか確認する処理を行い、初期化済でない場合はRead先の記憶領域のアドレスおよびバージョン番号を取得することで、バージョン番号の比較処理を省略できる。
【0150】
ステップS2004:ボリューム制御プログラム504は、ステップS2002で参照されたエントリに含まれるボリュームID611に対応するボリュームマッピングテーブル620を参照する。そして、ボリューム制御プログラム504は、ステップS2002で参照されたエントリに含まれるボリュームアドレス612に対応する当該ボリュームマッピングテーブル620のエントリを参照し、Read先のLU205のアドレスに対応する、記憶媒体103の記憶領域のアドレスを取得する。続けてステップS2005が実施される。
【0151】
ステップS2005:LU制御プログラム503は、ステップS2002で参照したエントリに含まれる問い合わせ済フラグ614を参照し、マッピングを問い合わせ済であるかを確認する。マッピングを問い合わせ済である場合はステップS2006が実施され、マッピングを問い合わせ済でない場合はステップS2010が実施される。
【0152】
ステップS2006:LU制御プログラム503は、LUマッピングテーブル610を参照し、ステップS2002で参照したエントリに含まれる記憶領域アドレス613およびバージョン番号615を、Read先のLU205のアドレスに対応する記憶媒体103の記憶領域のアドレスおよびRead先のLU205のアドレスに対応するページのバージョン番号として取得する。続けてステップS2007が実施される。
【0153】
ステップS2007:バージョン番号確認プログラム1609は、ステップS2006で取得された記憶媒体103の記憶領域のアドレスを含むページのアドレスを計算する。続けてステップS2008が実施される。
【0154】
ステップS2008:バージョン番号確認プログラム1609は、メモリ202のメタデータ領域403に格納された、外部バージョンテーブル1750を参照する。そして、バージョン番号確認プログラム1609は、ステップS2007で計算したページのアドレスに関する現在のバージョン番号を取得する。続けてステップS2009が実施される。
【0155】
ステップS2009:バージョン番号確認プログラム1609は、ステップS2006でLUマッピングテーブル610のエントリから取得されたバージョン番号と、ステップS2008で外部バージョンテーブル1750から取得したページのバージョン番号とを比較する。そして、バージョン番号が一致する場合は、ステップS2011が実施され、バージョン番号が一致しない場合はステップS2010が実施される。
【0156】
ステップS2010:マッピング問い合わせプログラム507は、ステップS2002で参照されたエントリに含まれるボリュームID611およびボリュームアドレス612に関するマッピング情報を、ボリューム206を管理するコントローラ101Bに問い合わせる。そして、マッピング問い合わせプログラム507は、コントローラ101Bから問い合わせ結果として、上記ボリュームID611およびボリュームアドレス612に対応する記憶媒体103の記憶領域のアドレスと当該アドレスを含むページのバージョン番号とを取得する。マッピング問い合わせプログラム507は、ステップS2002で参照されたLUマッピングテーブル610のエントリに含まれる記憶領域アドレス613とバージョン番号615とに、取得したアドレスとバージョン番号とを格納し、当該エントリの問い合わせ済フラグ614を「1」にセットする。続けてステップS2012が実施される。
【0157】
ステップS2011:I/O制御プログラム502は、通信I/F203を介して記憶媒体ノード102に対して、記憶媒体103の記憶領域における、取得したアドレスのRead要求を行う。続けてステップS2012が実施される。
【0158】
ステップS2012:I/O制御プログラム502は、通信I/F203を介して記憶媒体ノード102からステップS2011のRead要求に関する応答を受信すると共に、Read結果のデータをメモリ202のバッファ領域402に格納する。続けてステップS2013が実施される。
【0159】
ステップS2013:コマンド処理プログラム501は、バッファ領域402に格納されたRead結果のデータを、ホストI/F204を介してホスト110にRead要求の結果として転送し、一連の動作を終了する。
【0160】
図21は、コントローラ101AからのRead要求を、記憶媒体ノード102が処理する一連の流れを示すフローチャート(記憶媒体Read処理)の一例を示す図である。
図21のフローチャートに基づく動作は以下の通りである。
【0161】
ステップS2101:コマンド処理プログラム801は、通信I/F303を介してコントローラ101Aから記憶媒体103の記憶領域に関するRead要求を受信する。続けてステップS2102が実施される。
【0162】
ステップS2102:I/O制御プログラム802は、記憶媒体103に対してRead要求を行い、ステップS2101で受信されたRead先のアドレスのデータを記憶媒体103から取得する。I/O制御プログラム802は、記憶媒体103から取得したデータをメモリ302のバッファ領域702に格納する。続けてステップS2103が実施される。
【0163】
ステップS2103:コマンド処理プログラム801は、バッファ領域702に格納されたRead結果のデータを、通信I/F303を介してコントローラ101AにRead要求の結果として転送し、一連の動作を終了する。
【0164】
図22は、コントローラ101Aで実施したGCに伴うページのバージョン番号更新について、コントローラ101Aにおける一連の流れを示すフローチャート(バージョン管理処理)の一例を示す図である。
図22のフローチャートに基づく動作は以下の通りである。
【0165】
ステップS2201:コントローラ101Aのバージョン管理プログラム1606は、メモリ202のメタデータ領域403に格納されたバージョンテーブル630を参照し、GCプログラム505によりデータの退避処理の対象となったページのバージョン番号を取得する。続けてステップS2202が実施される。
【0166】
ステップS2202:コントローラ101Aのバージョン管理プログラム1606は、ステップS2201で取得したページのバージョン番号を「1」加算してバージョンテーブル630を更新する。続けてステップS2203が実施される。
【0167】
ステップS2203:コントローラ101Aのバージョン管理プログラム1606は、GCプログラム505によりデータの退避処理の対象となったページに関する、記憶媒体103の記憶領域のアドレスと、更新したページのバージョン番号とを、通信I/F203を介して他の全てのコントローラ101、即ちコントローラ101Bに送信することでページのバージョン番号が更新されたことを通知する。続けてステップS2204が実施される。
【0168】
ステップS2204:他コントローラ101Bのバージョン番号更新プログラム1610は、通信I/F203を介してコントローラ101Aからページのバージョン番号の更新通知を受信する。そして、バージョン番号更新プログラム1610は、メモリ202のメタデータ領域403に格納された外部バージョンテーブル1750において、通知を受けたページのバージョン番号を更新し、一連の動作を終了する。
【0169】
本実施の形態によれば、複数のコントローラが記憶媒体を共有するストレージシステムにおいて、コントローラ間で更新の通知先を特定することを目的としたマッピング情報の参照を回避しつつ、コントローラ間のマッピング情報の同期が可能であることに加え、マッピング情報が更新されていた場合に、記憶媒体ノードに対するRead要求を回避できる。マッピング情報の参照を回避しつつコントローラ間でマッピング情報の同期を行うことで、コントローラのGCおよびWrite処理におけるオーバーヘッドの発生を回避し、性能低下の発生を抑制する。
【0170】
(III)付記
本発明は、上述の実施の形態に限定されず、様々な派生形が含まれる。例えば、上述の実施の形態では、コントローラ101の各機能がプロセッサ201で動作するソフトウェアとされているが、機能の一部または全てはハードウェアによる実装であってもよい。また、上述の実施の形態において、コントローラ101、記憶媒体ノード102は、ネットワーク104で接続されているが、これらは同一筐体、同一ハードウェア内のバス、バックプレーン等による接続であってもよい。加えて、上述の実施の形態において、コントローラ101のLUマッピングテーブル610、ボリュームマッピングテーブル620、バージョンテーブル630、ボリューム逆引きテーブル640は、メモリ202のメタデータ領域403に格納されているが、一部または全てが記憶媒体ノード102に接続された記憶媒体103から構成される記憶領域に格納されていてもよい。
【0171】
上述の実施の形態においては、本発明をストレージシステムに適用するようにした場合について述べたが、本発明はこれに限らず、この他種々のシステム、装置、方法、プログラムに広く適用することができる。
【0172】
また、上述の実施の形態において、各テーブルの構成は一例であり、1つのテーブルは、2以上のテーブルに分割されてもよいし、2以上のテーブルの全部または一部が1つのテーブルであってもよい。
【0173】
また、上記の説明において、各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記憶装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
【0174】
上述した実施の形態は、例えば、以下の特徴的な構成を備える。
【0175】
(1)
複数のコントローラ(例えば、コントローラ101)と、上記複数のコントローラがアクセスする記憶装置(例えば、記憶媒体ノード102)と、を備え、上記記憶装置の記憶領域(例えば、ページであってもよいし、記憶媒体103であってもよい)に対するデータの管理が上記複数のコントローラの何れかのコントローラに割り当てられているストレージシステム(例えば、ストレージシステム100)であって、第1のコントローラ(例えば、LU205の移動先のコントローラ101)は、自コントローラに管理が割り当てられている記憶領域に記憶したデータにアクセスするための第1のマッピング情報(例えば、LUマッピングテーブル610およびボリュームマッピングテーブル620、または、LUアドレス、ボリュームID、ボリュームアドレス、記憶領域アドレス等)と、第2のコントローラに管理が割り当てられている所定の記憶領域(例えば、所定のLUに対応するページ)に記憶されたデータにアクセスするための第2のマッピング情報(例えば、LUマッピングテーブル610、または、ボリュームID、ボリュームアドレス、記憶領域アドレス等)とを管理し、上記第2のコントローラは、上記所定の記憶領域についてガベージコレクション(例えば、GC)を実施した場合、上記所定の記憶領域に記憶したデータにアクセスするためのマッピング情報を、上記ガベージコレクションによる移動後のデータにアクセスするための移動後のマッピング情報に変更し、上記第1のコントローラは、上記ガベージコレクション後に上記所定の記憶領域のデータに上記第2のマッピング情報を用いてアクセスする際(例えば、所定の記憶領域のデータのRead要求の際、問い合わせ済フラグが「0」であるデータであって、他コントローラにより管理されている記憶領域のデータのRead要求を所定のタイミングで実行する際)、上記第2のマッピング情報のうち、アクセスに使用する情報がガベージコレクションに伴い更新されている場合、上記第2のコントローラから上記移動後のマッピング情報を取得し、上記移動後のマッピング情報を用いて上記第2のマッピング情報を更新する。
【0176】
上記構成では、例えば、ガベージコレクションが実施された記憶領域のデータにマッピング情報を用いてアクセスする際に、ガベージコレクションに伴うマッピング情報の更新を実行することで、コントローラ間で更新通知を行うことを目的としたマッピング情報の参照を回避する。上記構成によれば、例えば、ガベージコレクションにおけるマッピング情報の参照に伴うオーバーヘッドの発生を抑制し、ガベージコレクションの性能低下を抑制することが可能である。
【0177】
(2)
上記記憶装置は、上記所定の記憶領域のデータの読み出し要求と、上記第2のマッピング情報が登録されたとき(例えば、マッピングの問い合わせ時)の上記所定の記憶領域のバージョンを示す所定のバージョン情報とを上記第1のコントローラから受信した場合、上記所定の記憶領域の最新のバージョンのバージョン情報と、上記所定のバージョン情報とが一致するか否かを判定し(例えば、ステップS1204参照)、一致しないときは、上記所定のバージョン情報が更新されていることを示す応答情報を上記第1のコントローラに送信し(例えば、ステップS1207参照)、上記第1のコントローラは、上記応答情報を受信した場合、上記第2のコントローラから上記移動後のマッピング情報を取得し、上記移動後のマッピング情報を用いて上記第2のマッピング情報を更新する(例えば、ステップS1010およびステップS1008参照)。
【0178】
上記構成では、例えば、各コントローラにおけるマッピング情報を用いた読み出し要求の際に、ガベージコレクションに伴うマッピング情報の更新を実行することで、コントローラ間で更新通知を行うことを目的としたマッピング情報の参照を回避する。また、上記構成では、例えば、記憶装置においてマッピング情報の更新の必要性の判断が行われるので、コントローラが増減する場合でも、各記憶領域の最新のバージョンの管理が容易となる。
【0179】
(3)
上記第2のコントローラは、上記ガベージコレクションを実施した場合、上記所定の記憶領域のバージョンを更新したことを示す更新済のバージョン情報(例えば、バージョン番号であってもよいし、現在のバージョンとは異なるバージョンであってもよい)を上記記憶装置に送信し(例えば、ステップS1403参照)、上記記憶装置は、上記第2のコントローラから上記更新済のバージョン情報を受信した場合、上記更新済のバージョン情報を上記所定の記憶領域の最新のバージョン情報として管理し(例えば、ステップS1404参照)、上記第1のコントローラは、上記応答情報を受信した場合、上記移動後のマッピング情報と上記ガベージコレクションによる移動後のデータが記憶されている移動後の記憶領域のバージョンを示す移動後のバージョン情報とを上記第2のコントローラから取得し、上記移動後のマッピング情報を用いて上記第2のマッピング情報を更新し、上記所定の記憶領域の上記所定のバージョン情報を上記移動後の記憶領域の上記移動後のバージョン情報に変更する(例えば、ステップS1008参照)。
【0180】
(4)
上記記憶装置は、上記応答情報として、上記所定の記憶領域のデータの読み出しに失敗したことを示すエラー情報を上記第1のコントローラに送信する(例えば、ステップS1207参照)。
【0181】
(5)
上記第1のコントローラは、上記所定の記憶領域のデータの読み出し要求に基づいて、上記所定の記憶領域の最新のバージョンのバージョン情報と、上記第2のマッピング情報が登録されたときの上記所定の記憶領域のバージョンを示す所定のバージョン情報とが一致するか否かを判定し(例えば、ステップS2009参照)、一致しないときは、上記第2のコントローラから上記移動後のマッピング情報を取得し、上記移動後のマッピング情報を用いて上記第2のマッピング情報を更新する(例えば、ステップS2010参照)。
【0182】
上記構成では、例えば、各コントローラにおけるマッピング情報を用いた読み出し要求の際に、ガベージコレクションに伴うマッピング情報の更新を実行することで、コントローラ間で更新通知を行うことを目的としたマッピング情報の参照を回避する。また、上記構成では、例えば、各コントローラにおいてマッピング情報の更新の必要性の判断が行われるので、マッピング情報の更新の必要性の判断が記憶装置で行われる場合と比べて、記憶領域のデータの読み出しにおけるコントローラおよび記憶装置間の通信を抑制することができる。
【0183】
(6)
上記第2のコントローラは、上記ガベージコレクションを実施した場合、上記所定の記憶領域のバージョンを更新したことを示す更新済のバージョン情報を他の全てのコントローラに送信し(例えば、ステップS2203参照)、上記更新済のバージョン情報を受信したコントローラは、上記更新済のバージョン情報を上記所定の記憶領域の最新のバージョン情報として管理し(例えば、ステップS2204参照)、上記第1のコントローラは、上記最新のバージョンのバージョン情報と上記所定のバージョン情報とが一致しない場合、上記移動後のマッピング情報と上記ガベージコレクションによる移動後のデータが記憶されている移動後の記憶領域のバージョンを示す移動後のバージョン情報とを上記第2のコントローラから取得し、上記移動後のマッピング情報を用いて上記第2のマッピング情報を更新し、上記所定の記憶領域の上記所定のバージョン情報を上記移動後の記憶領域の上記移動後のバージョン情報に変更する(例えば、ステップS2010参照)。
【0184】
また上述した構成については、本発明の要旨を超えない範囲において、適宜に、変更したり、組み替えたり、組み合わせたり、省略したりしてもよい。
【符号の説明】
【0185】
100……ストレージシステム、101……コントローラ、102……記憶媒体ノード。