(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-10
(45)【発行日】2024-09-19
(54)【発明の名称】ストレージシステムおよびストレージ制御方法
(51)【国際特許分類】
G06F 3/06 20060101AFI20240911BHJP
【FI】
G06F3/06 301T
(21)【出願番号】P 2022101368
(22)【出願日】2022-06-23
【審査請求日】2023-02-27
(31)【優先権主張番号】P 2022059010
(32)【優先日】2022-03-31
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】524132520
【氏名又は名称】日立ヴァンタラ株式会社
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】伊藤 晋太郎
(72)【発明者】
【氏名】大平 良徳
(72)【発明者】
【氏名】江原 寛人
【審査官】北村 学
(56)【参考文献】
【文献】特開2019-192004(JP,A)
【文献】特開2006-106868(JP,A)
【文献】特開2016-133976(JP,A)
【文献】特開2017-162288(JP,A)
【文献】特表2013-517537(JP,A)
【文献】米国特許出願公開第2014/0310499(US,A1)
【文献】米国特許出願公開第2019/0114093(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06
(57)【特許請求の範囲】
【請求項1】
不揮発性の記憶デバイスと、
前記記憶デバイスへの読み書きするデータ
を処理するストレージコントローラと、
揮発性のメモリと、
を備えたストレージシステムであって、
前記ストレージコントローラは、データの書き込み要求を受信した場合に、
受信した書き込み要求にかかるデータを前記メモリに格納し、
前記メモリに格納したデータにかかる
複数のログを
複数の前記記憶デバイスに
並行して格納し、
前記ログを記憶デバイスに格納したら、前記データの書き込みの要求元に完了応答を行い、
前記メモリに格納したデータ
を前記記憶デバイスにデステージする
ことを特徴とするストレージシステム。
【請求項2】
不揮発性の記憶デバイスと、
前記記憶デバイスへの読み書きするデータ
を処理するストレージコントローラと、
揮発性のメモリと、
を備えたストレージシステムであって、
前記ストレージコントローラは、データの書き込み要求を受信した場合に、
受信した書き込み要求にかかるデータを前記メモリに格納し、
前記メモリに格納したデータにかかるログを前記記憶デバイスに格納し、
前記ログを記憶デバイスに格納したら、前記データの書き込みの要求元に完了応答を行い、
前記メモリに格納したデータ
を前記記憶デバイスにデステージ
し、
前記データをデステージした場合に、前記デステージしたデータにかかる前記記憶デバイス内のログを無効化し、
前記ストレージコントローラは、前記ログにかかるデータを更新するデータが書き込まれた場合に、更新前の当該データにかかる前記記憶デバイス内のログを無効化し、
前記ストレージコントローラは、
制御情報のログとユーザデータのログに対して処理の順序を示す順序制御情報を付して管理することで、前記制御情報のログと前記ユーザデータのログの順序について整合性を確保する
ことを特徴とするストレージシステム。
【請求項3】
不揮発性の記憶デバイスと、
前記記憶デバイスへの読み書きするデータ
を処理するストレージコントローラと、
揮発性のメモリと、
を備えたストレージシステムであって、
前記ストレージコントローラは、データの書き込み要求を受信した場合に、
受信した書き込み要求にかかるデータを
圧縮して前記メモリに格納し、
圧縮されたデータにかかる圧縮されたログを前記記憶デバイスに格納し、
前記ログを記憶デバイスに格納したら、前記データの書き込みの要求元に完了応答を行い、
前記
圧縮されたデータを前記記憶デバイスにデステージ
し、
前記データをデステージした場合に、前記デステージしたデータにかかる前記記憶デバイス内のログを無効化し、
前記ストレージコントローラは、前記ログにかかるデータを更新するデータが書き込まれた場合に、更新前の当該データにかかる前記記憶デバイス内のログを無効化する
ことを特徴とするストレージシステム。
【請求項4】
不揮発性の記憶デバイスと、
前記記憶デバイスへの読み書きするデータ
を処理するストレージコントローラと、
揮発性のメモリと、
を備えたストレージシステムであって、
前記ストレージコントローラは、データの書き込み要求を受信した場合に、
受信した書き込み要求にかかるデータを前記メモリに格納し、
前記メモリに格納したデータにかかるログを前記記憶デバイスに格納し、
前記ログを記憶デバイスに格納したら、前記データの書き込みの要求元に完了応答を行い、
前記メモリに格納したデータ
を前記記憶デバイスにデステージする
ものであり、
前記ログには、制御情報ログとキャッシュデータログとが含まれており、前記キャッシュデータログは前記制御情報ログよりもサイズが大きく、
前記ストレージコントローラは、前記制御情報ログと前記キャッシュデータログとを別々にまとめて、複数の前記制御情報ログごと、複数の前記キャッシュデータログごとに、まとめて前記記憶デバイスに格納するものであり、前記キャッシュデータログを圧縮して前記記憶デバイスに格納し、前記制御情報ログを圧縮せずに前記記憶デバイスに格納する
ことを特徴とするストレージシステム。
【請求項5】
不揮発性の記憶デバイスと、
前記記憶デバイスへの読み書きするデータ
を処理するストレージコントローラと、
揮発性のメモリと、
を備えたストレージシステムであって、
前記ストレージコントローラは、データの書き込み要求を受信した場合に、
受信した書き込み要求にかかるデータを前記メモリに格納し、
前記メモリに格納したデータにかかるログを前記記憶デバイスに格納し、
前記ログを記憶デバイスに格納したら、前記データの書き込みの要求元に完了応答を行い、
前記メモリに格納したデータ
を前記記憶デバイスにデステージする
ものであり、
前記ログには、制御情報ログとキャッシュデータログとが含まれており、
前記ストレージコントローラは、前記制御情報ログと前記キャッシュデータログとを別々にまとめて、複数の前記制御情報ログごと、複数の前記キャッシュデータログごとに、まとめて前記記憶デバイスに格納し、
前記ストレージコントローラは、前記記憶デバイスに書き出したログを格納していたメモリの記憶領域にかかる容量の回収に際し、前記制御情報ログについては、一定の対象領域全体を前記記憶デバイスに書き出して空き領域を回収するベースイメージ退避方式を行い、前記キャッシュデータログについては、ログ単位で前記記憶デバイスに書き出して空き領域を回収するガベージコレクション方式を行う
ことを特徴とするストレージシステム。
【請求項6】
請求項5に記載のストレージシステムであって、
前記ストレージコントローラは、
前記ログを更新する場合に、更新前ログが格納された記憶領域とは別の記憶領域に更新後ログを格納するとともに、更新前ログを無効化し、
前記ベースイメージ退避方式では、その記憶領域の無効化されていない複数のログを前記記憶デバイスに格納するとともに、その記憶領域を空き領域として回収し、
前記ガベージコレクション方式では、前記無効化されたログの記憶領域を空き領域として回収する処理と、無効化されていないログを前記記憶デバイスに格納するとともにそのログが格納されていた記憶領域のログを無効化する処理と、を非同期で行う
ことを特徴とするストレージシステム。
【請求項7】
請求項1~5のいずれか一つに記載のストレージシステムであって、
前記データにかかるログの前記記憶デバイスへの格納は、前記データのデステージよりも
処理が少ない
ことを特徴とするストレージシステム。
【請求項8】
請求項7に記載のストレージシステムであって、
前記記憶デバイスに格納するログは、メモリ内のデータを復元するためのログであり、
前記記憶デバイスへのデータのデステージ
は前記ストレージシステムが格納するデータを書き込む/更新するためである
ことを特徴とするストレージシステム。
【請求項9】
不揮発性の記憶デバイスと、前記記憶デバイスへの読み書きするデータ
を処理するストレージコントローラと、揮発性のメモリと、を備えたストレージシステムにおけるストレージ制御方法であって、
前記ストレージコントローラが、
データの書き込み要求を受信した場合に、
受信した書き込み要求にかかるデータを前記メモリに格納し、
前記メモリに格納したデータにかかる
複数のログを
複数の前記記憶デバイスに
並行して格納し、
前記ログを記憶デバイスに格納したら、前記データの書き込みの要求元に完了応答を行い、
前記メモリに格納したデータ
を前記記憶デバイスにデステージする
ことを特徴とするストレージ制御方法。
【請求項10】
不揮発性の記憶デバイスと、前記記憶デバイスへの読み書きするデータ
を処理するストレージコントローラと、揮発性のメモリと、を備えたストレージシステムにおけるストレージ制御方法であって、
前記ストレージコントローラが、
データの書き込み要求を受信した場合に、
受信した書き込み要求にかかるデータを前記メモリに格納し、
前記メモリに格納したデータにかかるログを前記記憶デバイスに格納し、
前記ログを記憶デバイスに格納したら、前記データの書き込みの要求元に完了応答を行い、
前記メモリに格納したデータ
を前記記憶デバイスにデステージ
し、
前記データをデステージした場合に、前記デステージしたデータにかかる前記記憶デバイス内のログを無効化し、
前記ストレージコントローラは、前記ログにかかるデータを更新するデータが書き込まれた場合に、更新前の当該データにかかる前記記憶デバイス内のログを無効化し、
前記ストレージコントローラは、
制御情報のログとユーザデータのログに対して処理の順序を示す順序制御情報を付して管理することで、前記制御情報のログと前記ユーザデータのログの順序について整合性を確保する
ことを特徴とするストレージ制御方法。
【請求項11】
不揮発性の記憶デバイスと、前記記憶デバイスへの読み書きするデータ
を処理するストレージコントローラと、揮発性のメモリと、を備えたストレージシステムにおけるストレージ制御方法であって、
前記ストレージコントローラが、
データの書き込み要求を受信した場合に、
受信した書き込み要求にかかるデータを
圧縮して前記メモリに格納し、
圧縮されたデータにかかる圧縮されたログを前記記憶デバイスに格納し、
前記ログを記憶デバイスに格納したら、前記データの書き込みの要求元に完了応答を行い、
前記
圧縮されたデータを前記記憶デバイスにデステージ
し、
前記データをデステージした場合に、前記デステージしたデータにかかる前記記憶デバイス内のログを無効化し、
前記ストレージコントローラは、前記ログにかかるデータを更新するデータが書き込まれた場合に、更新前の当該データにかかる前記記憶デバイス内のログを無効化する
ことを特徴とするストレージ制御方法。
【請求項12】
不揮発性の記憶デバイスと、前記記憶デバイスへの読み書きするデータ
を処理するストレージコントローラと、揮発性のメモリと、を備えたストレージシステムにおけるストレージ制御方法であって、
前記ストレージコントローラが、
データの書き込み要求を受信した場合に、
受信した書き込み要求にかかるデータを前記メモリに格納し、
前記メモリに格納したデータにかかるログを前記記憶デバイスに格納し、
前記ログを記憶デバイスに格納したら、前記データの書き込みの要求元に完了応答を行い、
前記メモリに格納したデータ
を前記記憶デバイスにデステージする
ものであり、
前記ログには、制御情報ログとキャッシュデータログとが含まれており、前記キャッシュデータログは前記制御情報ログよりもサイズが大きく、
前記ストレージコントローラは、前記制御情報ログと前記キャッシュデータログとを別々にまとめて、複数の前記制御情報ログごと、複数の前記キャッシュデータログごとに、まとめて前記記憶デバイスに格納するものであり、前記キャッシュデータログを圧縮して前記記憶デバイスに格納し、前記制御情報ログを圧縮せずに前記記憶デバイスに格納する
ことを特徴とするストレージ制御方法。
【請求項13】
不揮発性の記憶デバイスと、前記記憶デバイスへの読み書きするデータ
を処理するストレージコントローラと、揮発性のメモリと、を備えたストレージシステムにおけるストレージ制御方法であって、
前記ストレージコントローラが、
データの書き込み要求を受信した場合に、
受信した書き込み要求にかかるデータを前記メモリに格納し、
前記メモリに格納したデータにかかるログを前記記憶デバイスに格納し、
前記ログを記憶デバイスに格納したら、前記データの書き込みの要求元に完了応答を行い、
前記メモリに格納したデータ
を前記記憶デバイスにデステージする
ものであり、
前記ログには、制御情報ログとキャッシュデータログとが含まれており、
前記ストレージコントローラは、前記制御情報ログと前記キャッシュデータログとを別々にまとめて、複数の前記制御情報ログごと、複数の前記キャッシュデータログごとに、まとめて前記記憶デバイスに格納し、
前記ストレージコントローラは、前記記憶デバイスに書き出したログを格納していたメモリの記憶領域にかかる容量の回収に際し、前記制御情報ログについては、一定の対象領域全体を前記記憶デバイスに書き出して空き領域を回収するベースイメージ退避方式を行い、前記キャッシュデータログについては、ログ単位で前記記憶デバイスに書き出して空き領域を回収するガベージコレクション方式を行う
ことを特徴とするストレージ制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステムおよびストレージ制御方法に関する。
【背景技術】
【0002】
従来、ストレージシステムにおいて、可用性及び信頼性向上のために冗長化構成が採用されている。
例えば、特許文献1にて、次のようなストレージシステムが提案されている。
複数のストレージノードを有する記憶システムにおいて、ストレージノードが、それぞれ記憶領域を提供する1又は複数の記憶装置と、上位装置からの要求に応じて、要求されたデータを対応する記憶装置に読み書きする1又は複数のストレージ制御部を設けている。各ストレージ制御部は、それぞれ上位装置からの要求に応じて要求されたデータを対応する記憶装置に読み書きするために必要な所定の構成情報を保持し、複数の制御ソフトウェアが冗長化グループとして管理され、同一の冗長化グループに属する各制御ソフトウェアがそれぞれ保持する構成情報は同期して更新され、冗長化グループを構成する複数の制御ソフトウェアを、各ストレージノードの負荷を分散するように、それぞれ異なる前記ストレージノードに配置する。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1によれば、ソフトウェアによりストレージシステムを構築する技術(ソフトウェアデファインドストレージ:SDS)を用い、ノード障害時にも読み書きを継続できるストレージシステムを構築できる。このようなストレージシステムで性能と信頼性を向上するためには、各種データを効率的に不揮発化することが求められる。本発明は、ストレージシステムにおける制御情報やキャッシュデータ等を記憶装置へと効率的に格納する方式を提案しようとするものである。
【課題を解決するための手段】
【0005】
上記目的を達成するために、代表的な本発明ストレージシステムの一つは、不揮発性の記憶デバイスと、前記記憶デバイスへの読み書きするデータを、ストレージ機能を用いて処理するストレージコントローラと、揮発性のメモリと、を備えたストレージシステムであって、前記ストレージコントローラは、データの書き込み要求を受信した場合に、受信した書き込み要求にかかるデータを前記メモリに格納し、前記メモリに格納したデータにかかるログを前記記憶デバイスに格納し、前記ログを記憶デバイスに格納したら、前記データの書き込みの要求元に完了応答を行い、前記メモリに格納したデータを、前記ストレージ機能を用いて処理して前記記憶デバイスにデステージすることを特徴とする。
また、代表的な本発明のストレージ制御方法の一つは、不揮発性の記憶デバイスと、前記記憶デバイスへの読み書きするデータを、ストレージ機能を用いて処理するストレージコントローラと、揮発性のメモリと、を備えたストレージシステムにおけるストレージ制御方法であって、前記ストレージコントローラが、データの書き込み要求を受信した場合に、受信した書き込み要求にかかるデータを前記メモリに格納し、前記メモリに格納したデータにかかるログを前記記憶デバイスに格納し、前記ログを記憶デバイスに格納したら、前記データの書き込みの要求元に完了応答を行い、前記メモリに格納したデータを、前記ストレージ機能を用いて処理して前記記憶デバイスにデステージすることを特徴とする。
【発明の効果】
【0006】
本発明によれば、性能と信頼性の高さを兼ね備えたストレージシステムを実現することができる。
【図面の簡単な説明】
【0007】
【
図4】開示のストレージシステム及びストレージ制御方法の概要を説明する図
【
図7】ストレージ制御部のソフトウェアモジュール構造の一例を示す図
【
図14】キャッシュデータ更新処理のフローチャート
【
図19】キャッシュデータログガベージコレクション処理のフローチャート
【
図23】実施例2のベースイメージ退避処理のフローチャート
【発明を実施するための形態】
【0008】
以下、図面について、本発明の実施の形態を詳述する。実施の形態は、例えば、1以上のSDSが実装された複数のストレージノードを備えるストレージシステムに関するものである。
開示する実施の形態においては、ストレージノードはメモリ上に制御情報やキャッシュデータを格納する。そしてストレージノードは不揮発デバイスを備える。ホストからの書き込み要求に応じて制御情報やデータを更新する際に、更新データをログ形式でこの不揮発デバイスに格納する。これによって、更新データの不揮発化が可能になる。その後、ホストに応答する。そして、これとは非同期に、メモリ内のデータを記憶デバイスにデステージする。デステージは、ストレージシステムに書き込んだデータを反映して記憶デバイスに書き込む処理を行う。デステージにおいてはシンプロビジョニングやスナップショット、データの冗長化等の各種ストレージ機能が提供され、データを検索したり、ランダムにアクセスしたりできるようにするため、論物変換アドレスを作成するなどの処理がある。対して、ログ形式での不揮発デバイス格納は、メモリ内のデータを失った場合に復元することを目的とするため、格納のための処理が軽くて速い。そのため、揮発性メモリを用いた場合に、データを不揮発性の記憶デバイスにログ形式で素早く格納してホスト装置に完了応答することで、レスポンス性能を高めることができる。
ログ形式での格納の時、制御情報やデータを追記書き形式で格納する。追記書きで格納するため空き領域の回収が必要である。空き領域回収のためにベースイメージ退避方式とガベージコレクション方式の二種類の方式を使い分ける。ベースイメージ退避方式は制御情報やキャッシュデータの一定の対象領域全体を不揮発デバイスに書き出し、その間の更新ログを全て破棄(空き領域として回収)する方式である。ガベージコレクション方式は、更新ログのうち最新ではない不要なログを識別し、不要なログ以外のログを別領域に書き移すことでログ領域を回収する方式である。電断時にはこのベースイメージ退避およびログを用いて制御情報やキャッシュデータをメモリに復元することで失わずに済む。両方式を使い分けて空き領域回収を行うことにより、空き管理のための管理情報を小さくでき、かつ空き領域回収のためのオーバヘッドを小さくすることができ、ストレージの性能を向上させることができる。
【実施例1】
【0009】
(1)実施例1
(1-1)実施例1のストレージシステムの構成
図1において、全体として実施例1のストレージシステムを示す。
ストレージシステム100は、例えば、複数のホスト装置101(Host)と、複数のストレージノード103(Storage Node)と、管理ノード104(Management Node)とを備える。ホスト装置101とストレージノード103と管理ノード104とは、ファイバーチャネル(Fibre Channel)、イーサネット(登録商標)、LAN(Local Area Network)等から構成されるネットワーク102を介して相互に接続される。
【0010】
ホスト装置101は、ユーザ操作、実装されたアプリケーションプログラム等からの要求に応じて、ストレージノード103に対してリード要求またはライト要求(以下、適宜、これらをまとめてI/O(Input/Output)要求と呼ぶ)を送信する汎用のコンピュータ装置である。なお、ホスト装置101は、仮想マシンのような仮想的なコンピュータ装置であってもよい。
【0011】
ストレージノード103は、データを読み書きするための記憶領域をホスト装置101に対して提供するコンピュータ装置である。ストレージノード103は、例えば、汎用のサーバ装置である。
管理ノード104は、システム管理者が本ストレージシステム100全体を管理するために利用するコンピュータ装置である。管理ノード104は、複数のストレージノード103をクラスタと呼ぶグループとして管理する。なお、
図1では、クラスタが1つのみ設けられた例を示しているが、ストレージシステム100内に複数のクラスタを設けるようにしてもよい。
【0012】
図2は、ストレージノード103の物理構成の一例を示す図である。
ストレージノード103は、CPU(Central Processing Unit)1031、メモリ1032、複数の記憶デバイス1033(Drive)および通信装置1034(NIC:Network Interface Card)を備える。
【0013】
CPU1031は、ストレージノード全体の動作制御を司るプロセッサである。メモリ1032は、SRAM(Static RAM(Random Access Memory))、DRAM(Dynamic RAM)等の半導体メモリから構成される。メモリ1032は、各種のプログラム、必要なデータを一時的に保持するために利用される。揮発性メモリ1032に格納されたプログラムをCPU1031が実行することにより、後述のようなストレージノード103全体としての各種の処理が実行される。
【0014】
記憶デバイス1033は、SSD(Solid State Drive)、SAS(Serial Attached SCSI(Small Computer System Interface))ハードディスクドライブ、SATA(Serial ATA(Advanced Technology Attachment))ハードディスクドライブ等の1または複数種類の大容量の不揮発性の記憶装置から構成される。記憶デバイス1033は、ホスト装置101からのI/O要求に応じてデータをリードまたはライトするための物理的な記憶領域を提供する。
【0015】
通信装置1034は、ストレージノード103がネットワーク102を介してホスト装置101、他のストレージノード103または管理ノード104と通信を行うためのインターフェースである。通信装置1034は、例えば、NIC、FCカード等から構成される。通信装置1034は、ホスト装置101、他のストレージノード103または管理ノード104との通信時におけるプロトコル制御を行う。
【0016】
図3は、ストレージノード103の論理構成の一例を示す図である。
ストレージノード103は、フロントエンドドライバ1081(Front-end driver)と、バックエンドドライバ1087(Back-end driver)と、1または複数のストレージ制御部1083(Storage Controller)と、データ保護制御部1086(Data Protection Controller)と、を備える。
【0017】
フロントエンドドライバ1081は、通信装置1034を制御し、ストレージ制御部1083に対してホスト装置101、他のストレージノード103または管理ノード104との通信時における抽象化したインターフェースをCPU1031に提供する機能を有するソフトウェアである。
【0018】
バックエンドドライバ1087は、自ストレージノード103内の各記憶デバイス1033を制御し、各記憶デバイス1033との通信時における抽象化したインターフェースをCPU1031に提供する機能を有するソフトウェアである。
【0019】
ストレージ制御部1083は、SDSのコントローラとして機能するソフトウェアである。ストレージ制御部1083は、ホスト装置101からのI/O要求を受け付け、当該I/O要求に応じたI/Oコマンドをデータ保護制御部1086に発行する。また、ストレージ制御部1083は、論理ボリューム構成機能を有する。論理ボリューム構成機能は、データ保護制御部が構成した論理チャンクとホストに提供する論理ボリュームを対応付ける。例えばストレートマッピング(論理チャンクと論理ボリュームを1:1で対応付け、論理チャンクのアドレスと論理ボリュームのアドレスを同じとする)方式でも良いし、仮想ボリューム機能(ThinProvisioning)方式(論理ボリュームと論理チャンクを小サイズの領域(ページ)に分け、ページ単位で論理ボリュームと論理チャンクのアドレス同士を対応付ける方式)を採っても良い。
【0020】
実施例1の場合、ストレージノード103に実装された各ストレージ制御部1083は、別のストレージノード103に配置された他のストレージ制御部1083と共に冗長構成を構成するペアとして管理される。以下においては、このペアをストレージ制御部グループ1085と呼ぶものとする。
なお、
図3では、2つのストレージ制御部1083により1つのストレージ制御部グループ1085が構成される場合を示している。以下においても、2つのストレージ制御部1083によりストレージ制御部グループ1085が構成されるものとして説明を進めるが、3つ以上のストレージ制御部1083により1つの冗長構成を構成するようにしてもよい。
【0021】
ストレージ制御部グループ1085では、一方のストレージ制御部1083がホスト装置101からのI/O要求を受け付けることができる状態(現用系の状態であり、以下、アクティブモードと呼ぶ)に設定される。また、ストレージ制御部グループ1085では、他方のストレージ制御部1083がホスト装置101からのI/O要求を受け付けない状態(待機系の状態であり、以下、スタンバイモードと呼ぶ)に設定される。
そして、ストレージ制御部グループ1085では、アクティブモードに設定されたストレージ制御部1083(以下、アクティブストレージ制御部と呼ぶ)、アクティブストレージ制御部が配置されたストレージノード103に障害が発生した場合等に、それまでスタンバイモードに設定されていたストレージ制御部1083(以下、スタンバイストレージ制御部と呼ぶ)の状態がアクティブモードに切り替えられる。これにより、アクティブストレージ制御部が稼働し得なくなった場合に、当該アクティブストレージ制御部が実行していたI/O処理を、スタンバイストレージ制御部により引き継ぐことができる。
【0022】
データ保護制御部1086は、各ストレージ制御部グループ1085に対して自ストレージノード103内または他のストレージノード103内の記憶デバイス1033が提供する物理的な記憶領域を割り当てると共に、ストレージ制御部1083から与えられる上述のI/Oコマンドに従って、指定されたデータを対応する記憶デバイス1033にリードまたはライトする機能を有するソフトウェアである。
この場合、データ保護制御部1086は、ストレージ制御部グループ1085に対して他のストレージノード103内の記憶デバイス1033が提供する物理的な記憶領域を割り当てたときには、当該他のストレージノード103に実装されたデータ保護制御部1086と協働して、そのデータ保護制御部1086との間でネットワーク102を介してデータをやり取りすることにより、そのストレージ制御部グループ1085のアクティブストレージ制御部から与えられたI/Oコマンドに従ってそのデータをその記憶領域にリードまたはライトする。
【0023】
図4は、開示のストレージシステム及びストレージ制御方法の概要を説明する図である。
ホストからのI/O処理や、その他様々な処理のためにストレージ制御部は制御情報やキャッシュデータの更新を行う。この際、メモリ上の制御情報/キャッシュデータを更新するとともに、そのログを記憶デバイスに格納して不揮発化させる。そのために、制御情報ログバッファまたはキャッシュログバッファに更新ログを作成する。ログとは、更新データそれ自体とログヘッダからなり、メモリ上の制御情報やキャッシュデータがどのように更新されたかを示す情報である。ログヘッダには
図9に示すように更新位置や更新サイズ、更新同士の順序関係を示す情報が含まれている。
【0024】
ログバッファ上の更新ログは、記憶デバイス上のログ領域に追記書き形式で書き込まれる。この書き込みは即時に行っても良いし、非同期に書き出しても良い。
追記書きを行うため、各デバイス上のログ領域は次第に空き領域が減っていき書き込めなくなってしまう。これを避けるため空き領域の回収が必要である。制御情報用のログ領域とキャッシュデータ用ログ領域でそれぞれ異なる方式を用いる。
【0025】
制御情報に対してはベースイメージ退避方式を用いる。ベースイメージ退避方式では、制御情報全体を記憶デバイス上のベースイメージ領域に丸ごとコピーする。コピーが完了したら、コピー開始時点より前の更新ログは全て無効化(空き領域として回収)する。
一方キャッシュデータ用ログ領域の空き領域回収にはガベージコレクション方式を用いる。キャッシュデータは、上書きされたり(後述する非同期デステージによって)キャッシュから削除された場合にそのキャッシュデータのログは無効になる。ガベージコレクション方式は、無効になっているログを除いて、有効な古いログをログ領域の末尾に新規ログとしてコピーすることで、ログ領域を空き領域として回収する。
【0026】
図5は、メモリの構成図の一例である。メモリ内には、ストレージ制御情報10321、キャッシュデータ領域10323、キャッシュデータログヘッダ管理テーブル10324、制御情報ログバッファ10325、キャッシュデータログバッファ10326が格納される。
【0027】
ストレージ制御情報10321は、様々なストレージ機能を実現するための制御情報が格納される領域であり、一例として、キャッシュディレクトリ10322がある。キャッシュディレクトリは
図8にて説明する。
キャッシュデータログヘッダ管理テーブル10324は、ディスク上の全キャッシュデータログのログヘッダを格納しているテーブルである。
制御情報ログバッファ10325は、制御情報のログを一時的に保持する。キャッシュデータログバッファ10326は、キャッシュデータのログを一時的に保持する。
【0028】
図6は、記憶デバイスの構成図の一例である。記憶デバイス上には、制御情報ベースイメージ領域10332、制御情報ログ領域10333、キャッシュデータログ領域10334、永続化領域10335が存在する。
制御情報ベースイメージ領域は後述するベースイメージ退避処理において制御情報全体をコピーする領域である。制御情報ログ領域10333、キャッシュデータログ領域10334はそれぞれ後述のログ退避処理においてログを退避する先の領域である。永続化領域10335はデータ保護制御部1086によって管理される、ユーザデータを格納する領域である。
それぞれについては後述の各処理フローの中で説明する。
【0029】
図7は、ストレージ制御部1083のソフトウェアモジュール構造の一例を示す図である。
ストレージ制御部1083は、ログ作成処理、ログ退避処理、制御情報更新処理、キャッシュデータ更新処理、ベースイメージ退避処理、ユーザデータキャッシュ領域回収処理、リード処理およびライト処理、非同期デステージ処理を実行する。各処理の詳細については後述する。
【0030】
以下、制御情報について説明する。
図8は、キャッシュディレクトリの一例を示す図である。キャッシュディレクトリはキャッシュエリアを細分化した領域(キャッシュセグメント)の管理情報であり、キャッシュセグメントそれぞれに対応するエントリを持つ。
【0031】
各エントリには、キャッシュアドレス、論理ボリューム番号、論理ボリュームアドレス、属性エントリがある。キャッシュアドレスは各エントリが対応するキャッシュセグメントのメモリ上のアドレスを指し、論理ボリューム番号と論理ボリュームアドレスは、当該キャッシュセグメントに格納されているデータが、どの論理ボリュームのどのアドレスのものであるかを指し示す。キャッシュセグメントにデータが格納されていない場合は「値無し」を示す「-」が格納される。キャッシュセグメントにデータが格納されている場合、属性フィールドにDirtyまたはCleanの値を持つ。Dirtyとは、当該データがまだデステージされておらず、記憶デバイスに書き込まれていないことを示し、Cleanは当該データがデステージ済であり記憶デバイスに書き込まれた値と一致することを示す。
【0032】
図9は、ログヘッダの構造を示す。ログヘッダはメモリ上のログバッファ領域や、記憶デバイス上のログ領域に格納される各ログに含まれるテーブルである。
各ログヘッダにはログシーケンス番号、更新アドレス、更新サイズ、領域種別、有効フラグのフィールドがある。
【0033】
ログシーケンス番号フィールドには、各ログに一意に付与されるログシーケンス番号が格納される。更新アドレスフィールドには各ログの更新対象の制御情報またはキャッシュデータのアドレスが格納される。更新サイズフィールドには更新するサイズが格納される。領域種別フィールドには制御情報かキャッシュデータのいずれかを識別するための値が格納される。ここでは「制御情報」または「キャッシュデータ」の文字列が格納されるものとする。有効フラグフィールドには「有効」または「無効」の値が設定される。
【0034】
図10はリード処理のフローチャートの例である。リード処理はホストからリードI/Oコマンドを受領した際に呼び出され、ストレージ制御部が実行する。まずフロントエンドドライバを介してホストから送信されたリードコマンドを受け取り、これを解釈してリード対象の論理ボリューム番号と論理ボリュームアドレスを得る(ステップ4001)。次に、キャッシュヒットかどうかを判定する(ステップ4002)。具体的には、キャッシュディレクトリを参照し、キャッシュディレクトリに当該論理ボリューム番号と論理ボリュームアドレスに対応するエントリを探し、ある場合は(ヒット)、当該エントリからキャッシュアドレスを参照し、分岐をYesに進んでキャッシュエリアからデータをリードして(ステップ4006)、ホストにデータを応答する(ステップ4007)。キャッシュディレクトリに当該論理ボリューム番号と論理ボリュームアドレスに対応するエントリが無い場合(ミス)、分岐をNoへ進み、ステージング処理を呼び出す(ステップ4003)。ステージング処理はデータ保護制御部によって実行される処理であり、記憶デバイス上の永続化領域から当該論理ボリューム番号/論理ボリュームアドレスに対応するデータを読み出す。読み出したデータはメモリ上のキャッシュデータ領域に格納する(ステップ4004)。この際、後述のキャッシュデータ更新処理を、不揮発化要否を「不要」と設定して呼び出す。キャッシュディレクトリを更新する(ステップ4005)。この際、キャッシュディレクトリは制御情報の一つであるため、後述の制御情報更新処理を呼び出す。この時キャッシュデータ更新同様に不揮発化要否を「不要」に設定して呼び出す。そしてキャッシュヒットした場合と同様にキャッシュからデータをリードし(ステップ4006)、ホストにデータを応答する(ステップ4007)。
【0035】
図11はライト処理を示すフローチャートの例である。ライト処理はストレージ制御部が実行する。まずフロントエンドドライバを介してホストから送信されたライトコマンドを受け取り、これを解釈してライト対象の論理ボリューム番号と論理ボリュームアドレスを得る(ステップ4101)。次に、キャッシュヒットかどうかを判定する(ステップ4102)。具体的には、キャッシュディレクトリを参照し、キャッシュディレクトリに当該論理ボリューム番号と論理ボリュームアドレスに対応するエントリを探し、ある場合は(ヒット)、当該エントリからキャッシュアドレスを参照し、分岐をYesに進み、キャッシュにデータを格納する(ステップ4104)。この際、後述のキャッシュデータ更新処理を、不揮発化要否を「要」と設定して呼び出す。次にそれぞれに対応するキャッシュディレクトリを更新する(ステップ4105)。この際、キャッシュディレクトリは制御情報の一つであるため、後述の制御情報更新処理を呼び出す。この時キャッシュデータ更新同様に不揮発化要否を「要」に設定して呼び出す。次に後述の制御情報確定処理を呼び出す(ステップ4106)。そして最後にホストにライト成功を応答する(ステップ4107)。
【0036】
キャッシュミスの場合は分岐をNoに進み、キャッシュセグメントを確保する(4103)、キャッシュセグメント確保も制御情報更新処理を呼び出して行う。この際不揮発化要否は要を設定する。その後はステップ4104に進み、以降はヒットした場合と同様である。
【0037】
図12は非同期デステージ処理のフローチャートである。非同期デステージ処理は、キャッシュディレクトリから属性が「ダーティ」であるエントリを探し(ステップ4201)、このようなエントリが無ければ終了する(分岐No)。ダーティであるようなエントリがあれば(分岐Yes)、そのキャッシュセグメントを対象にデステージ処理を実行(ステップ4203)する。
デステージ処理はストレージ制御部およびデータ保護制御部によって実行される処理であり、記憶デバイス上の永続化領域に当該論理ボリューム番号/論理ボリュームアドレスに対応するデータを書き出す。
このデステージにおいては、各種ストレージ機能すなわちシンプロビジョニング機能やスナップショット機能、データ冗長化機能等が提供される。例えばシンプロビジョニング機能は書き込みに応じて一定サイズで動的に容量を割り当てる機能であり、論理空間と物理空間を対応付ける論物変換アドレスを生成する。またスナップショット機能はある時点のデータを仮想的に保存(これをスナップショットイメージという)しておき、更新があった場合に更新された領域のみ別領域に格納し、スナップショットイメージの参照のための、スナップショットイメージの論理空間から当該別領域の物理空間への論物変換アドレスを生成する。またデータ冗長化機能では、ミラーリングやEC(Erasure Coding)といった技術によりデータを冗長化するため、データの複製を作成して他のノードに格納したり、データから冗長コード(パリティ)を作成して他のノードに格納することによってデータを保護する。シンプロビジョニングやスナップショット機能はストレージ制御部が提供する。データ冗長化機能はデータ保護部が提供する。
デステージ処理の後、キャッシュディレクトリから当該エントリを削除する(ステップ4204)。この際、キャッシュディレクトリ更新であるため制御情報更新処理を不揮発化要否を要に設定して呼び出して更新する。次にユーザデータキャッシュログを無効化する(ステップ4205)。この処理は、キャッシュデータログヘッダ管理テーブルをサーチして、本処理でデステージしたデータと同じアドレス範囲のユーザデータキャッシュログを無効化する処理である。
【0038】
図13は制御情報更新処理のフローチャートである。制御情報更新処理は、メモリ上の制御情報を更新する際に呼び出される。呼び出される際に、更新対象の制御情報を特定するためのメモリアドレスとサイズ、更新値、および不揮発化要否を示す情報が渡される。
【0039】
まず、メモリ上の制御情報を更新する(ステップ4301)。次に渡された不揮発化要否を参照し要否を判定する(ステップ4302)。要の場合のみ、ログ作成処理を呼び出す(4303)。
【0040】
図14はキャッシュデータ更新処理のフローチャートである。更新対象が制御情報ではなくキャッシュデータである点を除いて、ステップ4401~4403はステップ4301~4303と同じである。キャッシュデータ更新処理では制御情報更新処理と異なり、ステップ4402で不揮発化要と判定された時にステップ4404~ステップ4406の処理が加わる。まず上書きかどうかを判定する(ステップ4404)。すなわち、キャッシュデータログヘッダ管理テーブルを参照し、同アドレスのログが無いかを検索し、あれば上書きと判定する。上書きだった場合のみログヘッダ管理テーブルの同アドレスのログを無効化する(有効フラグを「無効」に設定する)。最後に、ステップ4403で作成したログのログヘッダをログヘッダ管理テーブルに追加する(ステップ4406)。
【0041】
図15はログ作成処理のフローチャートである。なお、この処理において「ログバッファ」は、更新対象が制御情報の場合は制御情報ログバッファを、ユーザデータキャッシュの場合はユーザデータキャッシュログバッファを指し示している。
【0042】
まず、ログシーケンス番号を決定する(ステップ4501)。ログシーケンス番号は、ログの作成順に付与され、必ず一つのログシーケンス番号に対して一つのログが対応する番号である。次にログバッファにおいて次にログを書き込む領域を確保する(ステップ4502)。
【0043】
ログ作成処理は並行動作する複数のプロセスによって実行されても良いがその場合には、同じログシーケンス番号が別プロセスによって取得されないこと、および同じログバッファ領域が別プロセスによって確保されないように排他処理を行う必要がある。
【0044】
次にログヘッダを作成する(ステップ4503)。ログヘッダのシーケンス番号フィールドに上述のログシーケンス番号を格納し、更新アドレスフィールドと更新サイズフィールドに、このログ作成処理に渡されたメモリ上の更新対象アドレスと更新サイズの値を格納する。情報種別フィールドには制御情報更新時は「制御情報」を、キャッシュデータ更新時は「キャッシュデータ」を格納する。
【0045】
次にログバッファにログを格納する(ステップ4504)。ログは、ログヘッダと更新対象データ自体からなり、ログバッファ上で先ほど確保した確保領域の先頭にログヘッダを、確保領域にログヘッダサイズを加算したメモリアドレスに更新データ自体を格納する。
最後にログヘッダ内のログ有効フラグを「有効」にして(ステップ4505)、本処理は終了する。
【0046】
図16に制御情報確定処理を示す。この処理はログ退避処理を呼び出すのみ(ステップ4601)である。
図17にログ退避処理の処理フローを示す。まずログバッファを参照し、未退避のログを読み出す(ステップ4701)。次に未退避ログを記憶デバイス上のログ領域に格納する(ステップ4702)。その書き込み位置は、最後に書き込んだログの直後である。
書き込みが完了したらメモリ上のログバッファからログを削除する(ステップ4703)。
【0047】
図18にベースイメージ退避処理の処理シーケンスを示す。本処理は非同期に実行される。また、制御情報ログ領域の空きが少なくなってきたことを検出して呼び出しても良い。まず、シーケンス番号を参照する(ステップ4801)。この処理はログ作成処理におけるシーケンス番号確保と同じである。次に、制御情報全体を記憶デバイス上のベースイメージ領域に書き出す(ステップ4802)。これが完了したら古いログを無効化する(ステップ4803)。古いログとは、ステップ4801で参照したシーケンス番号より若いシーケンス番号のログである。具体的には、記憶デバイス上のそれらのログの「有効フラグ」を「無効」にセットしても良いし、または記憶デバイス上に「ベースイメージ退避時シーケンス番号」としてステップ4801で参照した番号を記憶しておいても良い。
【0048】
図19はキャッシュデータログガベージコレクション処理である。まず、キャッシュデータログの空き領域が閾値以下かどうか判定し(ステップ4901)、閾値以下でなければ何もせず終了する。閾値以下だった場合、メモリ上のキャッシュログヘッダ管理テーブルを参照し、キャッシュログヘッダのうちで最も古い(ログシーケンス番号の若い)ものから前方向に検索し、有効フラグ値が「有効」である最古の有効ログを求める(ステップ4902)。キャッシュデータログ領域の中で最も古い有効ログを特定したら、当該ログの指し示すデータのログを新たに作成する(ステップ4903)。この時、新たなシーケンス番号を確保して付け直しても良い。次に退避処理を呼び出してこのログを記憶デバイスに書き込んだら(ステップ4904)、ログ領域上でこのログを含むこのログよりアドレスの若い領域を、ログ空き領域として回収する(ステップ4905)。
【0049】
図20はログ回復処理のフローチャートである。本機能は、電断後の再起動時に、ストレージ制御部が起動する前に呼び出される。まず記憶デバイス上のベースイメージ領域からベースイメージを読み出す(ステップ41001)。次に、制御情報ログとキャッシュデータログをシーケンス番号に従ってソートし、最も古いログ(最もシーケンス番号が若いログ)から最も新しいログ(最もシーケンス番号が大きいログ)までを並べる(ステップ41002)。そうした後、最古ログから最新ログまでをその順番どおりにメモリ上の制御情報、およびキャッシュデータのそれぞれの領域にログのアドレスを元に反映する(ステップ41003)。こうして制御情報/キャッシュデータの電断後の回復が完了する。
【0050】
本実施例では制御情報を対象としてベースイメージ退避方式を適用し、キャッシュデータ領域に対してキャッシュデータガベージコレクション方式を適用する形で両方式を使い分けている。
ベースイメージ退避方式は、各ログ単位での有効/無効を管理する必要が無い代わりに、更新の有無にかかわらずその対象領域を全て退避するため、一度退避する際のコピー量が大きい。従い、ログ領域の空き容量が埋まるまでの時間が比較的長い、つまり更新ログのサイズがそれぞれ小さいような情報に適する。
【0051】
一方、ガベージコレクション方式は、古い有効ログのみを選んでコピーするため、コピー量が小さい。反面、ログ単位で有効/無効を管理しなければならないため、ログの個数が少ない、すなわち更新頻度が比較的小さい情報に適する。
【0052】
この観点で、制御情報は更新粒度が小さく更新頻度が大きい特徴があるため、ベースイメージ退避方式が適している。一方で、キャッシュデータ領域は、その更新頻度は小さい(多くの場合は1回のI/Oにつきキャッシュデータ更新は1回である)ものの一回の更新サイズが大きい。従いキャッシュデータに関してはガベージコレクション方式が適する。両者を使い分けることにより、ログの管理情報サイズを小さくしつつ、空き回収のためのコピー量を低減し、低オーバヘッドで実現できる。
【0053】
また、本実施例ではキャッシュデータやキャッシュディレクトリの更新の際に、リード処理では不揮発化要否を「不要」に、ライト処理では不揮発化要否を「要」に設定してログ作成処理を呼び出す。リード処理におけるキャッシュデータへ格納するデータは記憶デバイス上に同じデータがあるため電断で失っても再度ステージング可能であり、問題ない。そしてリード処理においてはログ作成・退避のオーバヘッドが生じないため、性能が向上する。
【実施例2】
【0054】
次に、実施例2を説明する。
図21は実施例2の記憶デバイスおよびベースイメージ領域、ログ領域の構成図である。
本実施例は記憶デバイス上に制御情報ログ領域、キャッシュデータログ領域がそれぞれ複数ある例である。例えば、制御情報ログ領域が記憶デバイスのうち複数台に、キャッシュデータ用ログ領域が残りの記憶デバイスにあっても良いし、両方が前記憶デバイスにあっても良い。
【0055】
図22は本実施例におけるログ退避処理を示す。
図17と異なるのはステップ4701の後にステップ4711が加わっている点である。
ステップ4711は、退避先記憶デバイスの決定である。複数ある記憶デバイスの中からログ退避する記憶デバイスを選択する。ラウンドロビンに選択しても良いし、記憶デバイスごとの負荷をモニタして最も負荷の小さい記憶デバイスを選択しても良い。複数の記憶デバイスに並行してログを書き出すことで、記憶デバイスの書き込み性能を有効活用して書き込みを速くすることができる。制御情報ログとキャッシュデータログと別々の記憶デバイスに書き込んでもよいし、さらに、制御情報ログを書き込む記憶デバイス、キャッシュデータログを書き込む記憶デバイスを、それぞれ複数にしてもよい。
【0056】
図23は本実施例におけるベースイメージ退避処理である。
図18と異なるのはステップ4801の後にステップ4811/ステップ4812が追加されている点である。すなわち、ベースイメージを、複数の記憶デバイス上のベースイメージ領域に分割して格納する。単純にサイズで分割(固定長や均等サイズへの分割)でも良いし、負荷や空き容量に応じて分割するそれぞれのサイズを変えても良い。
【0057】
図24は本実施例におけるログ回復処理である。
図20とは、ステップ41001がステップ41011に、ステップ41002がステップ41012に、それぞれ読み出し先の記憶デバイスが複数あるように変わっている点が異なる。
ステップ41011では複数のデバイスから読み出したベースイメージは結合されて一つのベースイメージとして処理する。ステップ41012では複数記憶デバイスから読み出したログを、制御情報ログ/キャッシュデータログをそうするのと同様にマージ/ソートする。
【実施例3】
【0058】
図25は、本発明の実施例3を示している。
本実施例3は、圧縮機能をサポートした例である。
圧縮機能はストレージ制御部によってサポートされる各種機能の一例である。圧縮機能とは、ホストより受領したデータをLZ4等のデータ圧縮アルゴリズムによって圧縮して格納することで容量の消費を抑え、ディスクの容量を節約し、ディスクのコストを抑えることができる機能である。また、圧縮処理の時間が増えるが、圧縮後は縮小したサイズでデータ処理をおこなうため、全体として処理時間の短縮が期待できる。
【0059】
図25で示すように、ホストから受領したデータはキャッシュデータ領域に格納される。この時の処理は
図11で示したライト処理によるが、メモリに書き込むデータを圧縮する点と、圧縮データとその位置を示すメタデータの書き込みを伴う点が異なる。
この際、圧縮データおよびメタデータはキャッシュデータ領域に追記書き形式で書きこまれる。なぜならば圧縮機能においては、ホストから受領したデータの圧縮後のサイズは不定である(圧縮効果に依存する)ため、圧縮データを旧データに上書きしようとしても旧データよりもサイズが大きく入れ替えられないことがあるためである。
ゆえに常に新しい領域を確保して書き込み、旧データの領域を空き領域として解放する追記書き方式が適する。また、追記書き形式であるため、圧縮データの格納位置を示す情報(メタデータ)が必要である。このメタデータもキャッシュデータ領域に格納される。
キャッシュデータ領域に格納された圧縮データおよびメタデータは、ホストI/Oに同期して(つまりホストに応答を返す前に)ディスク上のキャッシュデータログ領域に格納される。
【0060】
なお、キャッシュデータや制御情報のログ領域への格納の際には、ログバッファに溜まっている複数のログをまとめて一度のディスクライト処理で書き込む動作(「まとめ書き」)を採ることで処理効率を高め、またディスクライト回数を削減し、性能を向上させることができる。また、制御情報はデータに比べてサイズが小さいため、圧縮されていなくてもよい。
【0061】
このまとめ書きにおいてより多くのログをまとめようとすると、より多くのログがログバッファに溜まるのを待ってログ退避を行うことも考えられるが、そうするとI/Oの応答前に実行する制御情報確定処理の応答が遅れることでホストI/Oへの応答が遅れることになる。これを防ぐため、ログ退避処理は呼び出された時点でログバッファに溜まっている分を全てまとめ、ログ退避処理を遅らせることはしない。この方法によりストレージへのI/O負荷が高く同時に多くのログがログバッファに溜まっている時は自然にまとめ書き効率が高まるが、低負荷では必要以上にホストI/Oへの応答を遅らせず、高負荷時に求められる高スループット性能の実現と低負荷時に求められるレスポンス低減が両立できる。
【0062】
ホストI/Oとは非同期に、キャッシュデータ領域上の圧縮データおよびメタデータは、ディスク上の永続化領域に書き出される。この処理は
図12で示した非同期デステージ処理である。この際、キャッシュデータ領域への書き込み同様にデステージ処理においても追記書き形式で書きこまれる。非同期デステージにおいては、近接データをまとめて一度のディスクライト処理で書き込むまとめ書きを行うことで処理効率を高め、またディスクライト回数を削減し、性能を向上させることができる。特に追記書き形式を採る圧縮データに関してはこのまとめ書きをしやすい。この点は前述のキャッシュデータログ領域の格納時と同様である。デステージは、ログ退避処理に比べて処理が多い。
図12の説明で示した通り、その処理の中でデータ保護部によって実行されるデステージ処理では、ミラーリングやEC(Erasure Coding)によってデータを冗長化することができる。
【0063】
図25ではECの例を示しており、他のデータとの間で計算されたParityデータが他ノードに格納されることで冗長化されている。本実施例3では、制御情報およびキャッシュデータのログをログ領域にまとめ書きすることで処理効率を高めると同時にディスクライト回数を減らし性能を向上できること、またデステージにおいても特に圧縮機能においてはまとめ書き効果が高まり処理効率が高まりディスクライト回数を減らし性能を向上できることを示した。また、圧縮機能により、ディスクに流れるデータの流量も非圧縮時に比べて減るため、ディスクへのデータ流量が減ることで効率的にディスクを使うことができ性能が向上する効果もある。
【0064】
上述してきたように、開示のストレージシステム100は、不揮発性の記憶デバイスを有するストレージとしてのドライブ1033に対し、読み書きを制御するストレージコントローラとしてのストレージ制御部1083を備え、前記ストレージコントローラは、前記読み書きに際して、ログを生成してログメモリであるメモリ1032に格納するとともに、メモリに格納したログを前記記憶デバイスに書き出し、前記ログには、制御情報ログとキャッシュデータログとが含まれており、前記ログを生成した場合に、生成した前記制御情報ログを前記ログメモリに格納して複数の制御情報ログを有する記憶領域単位で前記記憶デバイスにまとめて書き出し、生成したキャッシュデータログを前記ログメモリに格納し、前記ログメモリ内のキャッシュデータを圧縮して前記記憶デバイスに書き出す。
また、ストレージコントローラは、前記メモリの空き領域の回収に際し、複数のログを有する記憶領域単位で前記記憶デバイスに書き出して空き領域を回収するベースイメージ退避方式と、ログ単位で前記記憶デバイス書き出して空き領域を回収するガベージコレクション方式とを行う。
かかる構成及び動作により、性能と信頼性の高さを兼ね備えたストレージシステムを実現することができる。
【0065】
一例として、前記ストレージコントローラは、前記メモリに格納されたログを更新する場合に、更新前ログが格納された記憶領域とは別の記憶領域に更新後ログを格納するとともに、更新前ログを無効化し、前記ベースイメージ退避方式では、その記憶領域の無効化されていない複数のログを前記記憶デバイスに格納するとともに、その記憶領域を空き領域として回収し、前記ガベージコレクション方式では、前記無効化されたログの記憶領域を空き領域として回収する処理と、無効化されていないログを前記記憶デバイスに格納するとともにそのログが格納されていた記憶領域のログを無効化する処理と、を非同期で行う。
また、前記ログは、ストレージ制御に関する制御情報のログと、前記読み書きに関するユーザデータのログと、を含み、前記制御情報のログは、前記ユーザデータのログよりも、更新の粒度が小さく、前記制御情報のログには前記ベースイメージ退避方式を適用し、前記ユーザデータのログには、前記ガベージコレクション方式を適用する。
このため、ストレージシステム100における制御情報やキャッシュデータ等を記憶装置へと効率的に格納し、性能と信頼性の高さを実現できる。
【0066】
また、前記ストレージコントローラは、前記制御情報のログと前記ユーザデータのログに対して処理の順序を示す順序制御情報を付して管理することで、前記制御情報のログと前記ユーザデータのログの順序について整合性を確保する。
このため、制御情報のログとユーザデータのログとで管理方式を異ならせても、整合性を容易に確保できる。
【0067】
また、前記ストレージコントローラは、前記制御情報のログと前記ユーザデータのログからデータを復旧するログ回復処理において、前記制御情報について前記ベースイメージ退避方式を用いて復旧を行い、前記ユーザデータについては予め領域の確保を行った上で復旧を行う。
このため、データの復旧を効率的に行うことができる。
【0068】
また、前記ストレージコントローラは、更新サイズが所定値未満のデータに関しては前記ベースイメージ退避方式を用い、前記更新サイズが前記所定値以上のデータに関しては前記ガベージコレクション方式を用いる。
かかる動作を採用すれば、データの更新サイズに合わせ、空き領域を効率的に管理できる。
【0069】
また、開示のストレージシステム100は、前記ストレージコントローラを複数備え、前記ストレージコントローラを冗長化した構成を有する。
すなわち、ストレージコントローラを冗長化したストレージシステムにおいて、制御情報やキャッシュデータ等を記憶装置へと効率的に格納し、性能と信頼性の高さを実現できる。
【0070】
なお、本発明は上記の実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、かかる構成の削除に限らず、構成の置き換えや追加も可能である。
例えば、上記の実施例では、順序制御情報としてシーケンス番号を用いる構成を例示したが、ログにタイムスタンプを付与し、タイムスタンプを順序制御情報として用いてもよい。また、次のログへのポインタを付与し、順序制御情報として用いてもよい。また、順序制御情報は、ログごとに付与する構成に限定されず、ある程度まとまった範囲のログに付与してもよい。
【符号の説明】
【0071】
100:ストレージシステム、101:ホスト装置、102:ネットワーク、103:ストレージノード、104:管理ノード、1031:CPU、1032:メモリ、1033:ドライブ、1083:ストレージコントローラ