以下の説明では、「AAAテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「AAAテーブル」を「AAA情報」と呼ぶことができる。
また、以下、「プログラム」を主語として処理を説明する場合があるが、プログラムは、コントローラ(ストレージコントローラ、又はSSDコントローラ)に含まれるプロセッサ(例えばCPU(Central Processing Unit))によって実行されることで、定められた処理を、適宜に記憶資源(例えばメモリ)及び/又は通信インタフェース装置(例えば通信ポート)を用いながら行うため、処理の主語がコントローラ或いはプロセッサとされてもよい。また、コントローラは、処理の一部又は全部を行うハードウェア回路を含んでもよい。コンピュータプログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ、又は、コンピュータで読取可能な記憶メディアであってもよい。
また、以下の説明では、物理記憶デバイスを「Disk」と便宜上表記することがあるが、この表記は、物理記憶デバイスが有する記憶媒体が必ずしも円盤状の記憶媒体であることを意味しない。物理記憶デバイスは、例えば、SSDでもよい。
また、以下の説明では、期間或いは時間を用いるが、期間或いは時間の単位は、以下の例に限定されない。例えば、期間或いは時間の単位は、年、月、日、時、分、秒のうちのいずれか1つ或いはいずれか2以上の組合せであってもよい。
また、以下の説明では、SSDに含まれる不揮発半導体記憶媒体は、フラッシュメモリ(FM)であるとする。そのフラッシュメモリは、ブロック単位で消去が行われ、ページ単位でR/Wが行われる種類のフラッシュメモリ、典型的にはNAND型のフラッシュメモリであるとする。しかし、フラッシュメモリは、NAND型に代えて他種のフラッシュメモリ(例えばNOR型)でもよい。また、フラッシュメモリに代えて、他種の不揮発半導体記憶媒体、例えば相変化メモリが採用されてもよい。
また、NAND型のフラッシュメモリは、一般に、複数のブロック(物理ブロック)で構成されている。各ブロックは、複数のページ(物理ページ)で構成されている。1以上のSSD(例えば後述のRAIDグループ)に基づく論理ページ群(論理的な記憶空間)が提供されてよい。何のデータも書き込まれていない物理ページを、「空きページ」と言うことができる。各論理ページについて、最近書き込まれたデータを「有効データ」と言い、有効データが書き込まれたことにより旧いデータとなったデータを「無効データ」と言うことができる。また、有効データが格納されている物理ページを「有効ページ」と言うことができ、無効データが格納されている物理ページを「無効ページ」と言うことができる。
ストレージ装置10は、ストレージコントローラ100と、複数の物理記憶デバイス(Disk)11を備える。複数の物理記憶デバイス11は、RAIDグループ(RG)50を構成する。RG50は、PG(Parity Group)であってもよい。RG50は、論理記憶領域の基になっている。論理記憶領域は、エクステント70でもよいし、ストレージ装置10に接続されている上位装置(例えばホスト計算機30)に提供される論理ボリューム(LU:Logical Unit)の全部或いは一部でもよい。なお、ストレージコントローラ100は、RGを論理ボリュームであるVDEV(Virtual Device)として管理してもよいし、一つのRGを複数のVDEVに分割して管理してもよい。
ストレージコントローラ100は、キャッシュメモリ130を含む。上位装置からのライトデータは、キャッシュメモリ130に格納され、その後、RG50へデステージされる。ストレージコントローラ100は、キャッシュメモリ130に格納されているデータのうち、デステージ前のデータをダーティデータとして管理する。
ストレージコントローラ100は、上位装置からライト要求を受信した場合、ライト要求のライト先であるRGのRG実空き容量が、当該RGのRG予定デステージ量より大きいか否かを判定する。RG実空き容量は、RGの物理的な空きスペースであり、RGの物理容量から、RGの物理的な使用量であるRG実使用量を減じて得られる値である。RG予定デステージ量は、当該RGへデステージされる可能性のあるデータの量である。RG予定デステージ量は、例えば、キャッシュメモリ130内で、当該RGに対応するダーティデータの量であるRGダーティデータ量と、それ以外にデステージ処理までに追加されるダーティデータの量の予測値であるデータ量であるマージンとの和である。なお、RG予定デステージ量は、ライト要求に示されたライトデータ量を含んでもよい。
当該RGのRG実空き容量がデステージに十分であると判定された場合、ストレージコントローラ100は、ライトデータ転送許可通知をホスト計算機30へ送信し、ホスト計算機30からライトデータを受信し、ライトデータをキャッシュメモリ130へ書き込む。その後、ストレージコントローラ100は、ライト要求と非同期で、キャッシュメモリ130からRG50へデステージを行う。
当該RGのRG実空き容量がデステージに十分でないと判定された場合、ストレージコントローラ100は、当該RGの空き待ちジョブを実行する。空き待ちジョブ中、ストレージコントローラ100は、上位装置からのライトデータのためのキャッシュメモリ130の領域を確保せず、当該RGへのライトデータを受信しない。その後、ストレージコントローラ100は、RG間でデータを移動するデータ配置制御処理を実行することにより、当該RGのRG実空き容量を増加させる。これに応じて、当該RGのRG実空き容量がRG予定デステージ量より大きいと判定された場合、ストレージコントローラ100は、当該RGの空き待ちジョブを解放し、上位装置からライトデータを受信し、ライトデータをキャッシュメモリへ書き込む。
なお、空き待ちジョブ中、管理者が当該RGに物理記憶デバイス11を追加することで、当該RGのRG実空き容量を増加させてもよい。この場合、ストレージコントローラ100は、データ配置制御処理を実行しなくてもよい。
ストレージコントローラ100は、上位装置からのI/O要求に伴う処理とは別に、RAIDグループ50間でデータを移動するデータ配置制御処理として、RAIDグループ50の枯渇回避処理、寿命平準化処理、I/O性能平準化(リバランス)処理(入出力平準化処理)、ストレージ階層仮想化における再配置処理等を行う。ここで、RAIDグループが半導体記憶ユニットの一例である。なお、半導体記憶ユニットを1つの物理記憶デバイス11としてもよい。
SSDは、HDDに比べI/O処理が非常に高速であるというメリットを有しているが、データの書き込み回数には上限があり、HDDに比べ寿命が短いというデメリットも有している。
フラッシュメモリ(典型的にはNAND型のフラッシュメモリ)は、データを書き換えようとしたとき、そのデータが格納されている物理領域上に、データを直接上書くことができない。その物理領域上のデータに対してデータの書き換えを行うためには、フラッシュメモリの消去単位であるブロックと呼ばれる単位で、その物理領域上のデータに対して消去処理(以下、ブロック消去)を実行した後、ブロック消去が実行された物理領域上にデータを書く必要がある。
しかしながら、各ブロックについてのブロック消去の回数(以下、消去回数)は、フラッシュメモリの物理的な制約から限界がある。そして、ブロックの消去回数がこの限界を超えると、そのブロックにはデータを格納することができなくなってしまう。つまり、SSDを構成する全ブロックの消去回数が限界を超えると、そのSSDの寿命となる。
そこで、一般のSSDでは、ウエアレベリング(以下、WL)とよばれる手法を用いて、SSDの長寿命化が図られている。WLでは、一般に、消去回数が多いブロックには、低頻度で更新されるデータが格納され、消去回数が少ないブロックには、高頻度で更新されるデータが格納される。これにより、ブロック間の消去回数を平準化し、特定のブロックのみが劣化することを抑えることができる。
ストレージ装置の物理記憶デバイスとしてSSDが採用される場合、複数のSSDがストレージ装置に搭載されることが一般的である。このようなストレージ装置においては、各SSDにおいて特定のブロックのみが劣化することを抑えられても、SSD間の負荷に不均衡が生じ、特定のSSDのみに負荷が集中することがある。そこで、SSD間にもWLを適用し、複数のSSD間の消去回数を平準化することで、ストレージ装置全体の長寿命化を実現する手法が、知られている。以下では、SSDなどの物理記憶デバイス間で行われるWLを、「寿命平準化」と言う。
データ配置制御処理において、ストレージコントローラ100は、各物理記憶デバイス11から各物理記憶デバイスに関する内部情報を取得する。例えば、物理記憶デバイス11がSSD(フラッシュメモリを有する記憶デバイス)であれば、内部情報は、各種容量情報(全体容量、実使用量、データ圧縮後にフラッシュメモリに書き込まれたデータの総量など)と寿命に関する情報などである。
ストレージコントローラ100は、これらの内部情報とI/O量に関する統計情報に基づいて、RGの枯渇リスクを算出し、枯渇回避処理の実行要否を判断する。枯渇リスクは、例えば、RGのライトI/O量(WRI/O量)÷RG実空き容量、で算出する。以後、書き込みをWRと呼び、読み出しをRDと呼ぶことがある。また、枯渇リスクは、RGに書き込まれた量であるRG実WR量(FMライト合計量の合計)÷RGの実容量(物理容量の合計)、であってもよい。枯渇回避処理では、まず、ストレージコントローラ100は、枯渇リスクが高く近い将来RG枯渇が発生しWRを受け付けられなくなってしまうRG50と、枯渇リスクが低くRG枯渇までの時間が長いと予想されるRG50とを特定する。
次に、ストレージコントローラ100は、枯渇リスクが高いRG50から枯渇リスクが低いRG50へ移動するデータ量(移動データ量)を決定する。移動データ量はユーザが設定する枯渇リスクに関する閾値(たとえばRG使用量90%など)を下回るだけの移動データ量でもよいし、RG50間で枯渇リスクを平準化することのできる移動量でもよい。
次に、ストレージコントローラ100は、決定した移動データ量だけデータを移動する。ここで、データを移動させる際の記憶領域の範囲を「エクステント」と呼ぶ。エクステントは、参照符号70に示すように、複数の物理記憶デバイス11(例えば、SSD)にまたがったアドレス範囲(論理領域)である。フラッシュメモリのブロック単位や、ページ単位という小さい単位では、データ移動のための負荷が大きくなる。これに対して、ブロック及びページよりも大きい単位であって、複数のRG50にまたがったエクステントという単位でデータ移動を行うことでストレージコントローラ100のデータ移動のための負荷を抑えることができる。
ストレージコントローラ100は枯渇回避処理実行後、または枯渇回避処理が不要だと判断した場合、RG50の残寿命を算出し、寿命平準化処理の実行要否を判断する。RG50の残寿命としては、例えば、RG50を構成する物理記憶デバイス11(ここでは、SSD)の残寿命情報の最小値をRG50の残寿命とする。または、RG50の残寿命としては、RG50を構成する物理記憶デバイス11(SSD)の残寿命の平均値としてもよい。寿命平準化処理では、まず、ストレージコントローラ100は、残寿命が短く、近い将来寿命を迎え、使用不可となってしまうSSDで構成されたRGと、残寿命が長いSSDで構成されたRGとを特定する。
次に、ストレージコントローラ100は、残寿命の短いRGの中でWR負荷が高いエクステントと、残寿命の長いRGの中でWR負荷が低いエクステントとを決定し、それらのエクステントのデータを交換する。
具体的には、WR負荷を判断するために、ストレージコントローラ100は、エクステント毎にWRデータ量を計測する。例えば、SSDへのWRデータ量が多いと、ブロックの書き換えが頻繁に発生し、それに伴ってブロックの消去回数が増加する。ブロックの消去回数が増加すると、そのブロックの消去回数が限界(上限値)に達して、そのブロックへのリードはできるが、WRが不可能となる。そして、このようなブロックが増加したSSDは、使用不可能となる。このため、ストレージコントローラ100が、WRデータ量が多いエクステントを見つけ、そのエクステントに含まれるデータを、短寿命のSSDのRGから、長寿命のSSDのRGへ移動する。
これにより、ストレージコントローラ100の負荷を高くすることなく、SSD間で消去回数を平準化することができる。また、短寿命のSSDのRGにおけるWR I/O量が多いエクステントと、長寿命のSSDのRGにおけるWR I/O量が少ないエクステントとのデータを交換することで、最小の移動データ量で寿命平準化を実現することができる。
ストレージコントローラ100は寿命平準化処理実行後、または寿命平準化処理が不要だと判断された場合、RG50のI/O量を算出し、I/O性能リバランス処理の実行要否を判断する。I/O性能リバランス処理では、まず、ストレージコントローラ100は、I/O量が多く、且つI/O負荷が高いRGと、I/O量が少なく、且つI/O負荷が低いRGを特定する。
次にストレージコントローラ100は、I/O負荷が高いRGの中でI/O負荷が高いエクステントと、I/O負荷が低いRGの中でI/O負荷が低いエクステントとを決定し、それらのエクステントのデータを交換する。
図2は、実施例1に係るストレージ装置10を含むストレージシステム10000の構成例を示す図である。
ストレージシステム10000は、ストレージ装置10、及びホスト計算機30を備える。ホスト計算機30は、ストレージ装置10を利用する上位装置の一例である。ホスト計算機30は、例えばアプリケーションサーバである。ホスト計算機30と、ストレージ装置10とは、例えば、SAN(Storage Area Network)20を経由して通信可能に接続されている。SAN20としては、例えば、ファイバチャネル、SCSI(Small Computer System Interface)、iSCSI(internet Small Computer System Interface)、USB(Universal Serial Bus)、IEEE1394バス、SAS(Serial Attached SCSI)等を用いることが可能である。また、SAN20に代えて、他種の通信ネットワーク(例えばLAN(Local Area Network))が採用されてもよい。なお、この図の例では、ストレージシステム10000は、ホスト計算機30及びストレージ装置10をそれぞれ1つ備えているが、それらのうちの少なくとも一方を複数備えてもよい。
ホスト計算機30は、ストレージ装置10に対して制御コマンド等を発行する制御ソフトウェア(図示省略)を実行することにより、制御コマンド等をストレージ装置10に発行してストレージ装置10の保守管理をする。この制御コマンドに基づく処理がストレージ装置10で実行されることにより、ストレージ装置10が有するRGのRAIDレベルの変更や、枯渇回避処理、寿命平準化処理、及びI/O性能リバランス処理の各種起動閾値の調整、及び、Pool単位又はRG単位での圧縮機能のON/OFF設定等の種々の作業を行うことができる。なお、RG50は、複数のSSD(又はHDD)で構成され所定のRAIDレベルに従いデータを記憶する物理記憶デバイスグループである。ストレージ装置10に対して制御コマンドを発行する計算機として、ホスト計算機30とは別の計算機が使用されもよい。
ストレージ装置10は、ホスト計算機30に接続されたストレージコントローラ(Storage CTL)100と、ストレージコントローラ100に接続されたDisk Box110とを有する。
ストレージコントローラ100は、ストレージ装置10の動作を制御する。ストレージコントローラ100は、通信インタフェースデバイスと、メモリと、それらに接続された制御デバイスとを有する。通信インタフェースデバイスとして、フロントエンドの通信インタフェースデバイスであるHost I/F101と、バックエンドの通信インタフェースデバイスであるDisk I/F107とがある。メモリとして、キャッシュメモリ103がある。制御デバイスとして、プロセッサ(例えばCPU(Central Processing Unit))104がある。Host I/F101と、キャッシュメモリ103と、プロセッサ104と、Disk I/F107とは、例えばPCI(Peripheral Component Interconnect)のような専用の接続バスで、内部ネットワーク102に接続されており、内部ネットワーク102を介して通信可能である。
キャッシュメモリ103は、例えばDDR3(Double Data Rate3)のようなDRAMである。Host I/F101は、ストレージ装置10をSAN20と接続するためのインタフェースである。内部ネットワーク102は、ストレージ装置10の内部に存在するデバイス同士を接続するためのネットワークである。内部ネットワーク102は、スイッチを含む。内部ネットワーク102に代えて、スイッチ機能やDMA転送、RAID演算等のアシスト機能を有するASIC(Application Specific Integrated Circuit)を用いてもよい。プロセッサ104は、ストレージ装置10の全体を制御する。プロセッサ104は、複数存在してもよい。この場合、複数のプロセッサ104が協調または分担してストレージ装置10を制御するようにしてもよい。キャッシュメモリ103は、プロセッサ104がストレージ装置10を制御するために必要なコンピュータプログラムやデータを記憶する領域を有する。Disk I/F107は、ストレージコントローラ100とDisk Box110とを接続するためのインタフェースである。Disk Box110は、種類の異なるDisk11(例えば、HDD111、SSD700といった不揮発物理記憶デバイス)を複数台備える。Disk Box110において、同じ種類の複数のDiskでRGが構成される。各RGから、ユーザデータの格納空間としての論理ボリュームが提供される。なお、この図の例では、Disk Box110を構成するDisk11として、HDD111及びSSD700としているが、SSD700のみとしてもよい。
なお、ストレージ装置10の各部の数や、ストレージコントローラ100の各部の数は、この図の例に限られない。
図3は、SSD700の構成例を示す図である。
SSD700は、複数のフラッシュメモリ780と、それらに接続されたSSDコントローラ710とを有する。SSDコントローラ710は、SSD700の動作を制御する。SSDコントローラ710は、通信インタフェースデバイスと、メモリと、それらに接続された制御デバイス、およびデータの圧縮・伸長を実行するハードウェアデバイスとを有する。通信インタフェースデバイスとしては、フロントエンドの通信インタフェースデバイスであるDisk I/F711と、バックエンドの通信インタフェースデバイスであるFlash I/F717とがある。メモリとしては、キャッシュメモリ716がある。制御デバイスとしては、プロセッサ713がある。データの圧縮・伸長を実行するハードウェアデバイスとして、圧縮・伸長回路718がある。なお、データの圧縮・伸長を実行する機能を、プロセッサ713が専用のプログラムを実行することで、ソフトウェア的に実現してもよい。Disk I/F711と、プロセッサ713と、キャッシュメモリ716と、Flash I/F717と、圧縮・伸長回路718とは、内部ネットワーク712を介してそれぞれ接続されている。
Disk I/F711は、ストレージコントローラ100のDisk I/F107と専用の接続バスで接続されている。内部ネットワーク712は、デバイス同士を接続するためのネットワークである。内部ネットワーク712は、スイッチを含んでもよい。また、内部ネットワーク712をスイッチ機能を有したASICで代用してもよい。プロセッサ713は、SSD700全体を制御する。キャッシュメモリ716は、プロセッサ713がSSD700を制御するために必要なコンピュータプログラムやデータを記憶する領域を有する。Flash I/F717は、SSDコントローラ710とフラッシュメモリ780とを接続するためのインタフェースである。
本実施例において、SSD700は、複数のフラッシュメモリ780と、それらを制御するコントローラ710とを備える半導体記憶デバイスであり、外観形状等がフォームファクタに限定されるものではない。また、フラッシュメモリ780には、NORやNANDといった不揮発性の半導体メモリが使用されてよい。また、フラッシュメモリ780に代えて、磁気抵抗メモリであるMRAM(Magnetoresistive random access memory)や、抵抗変化型メモリであるReRAM(resistance random access memory)、強誘電体メモリであるFeRAM(Ferroelectric random access memory)等の各種半導体メモリが使用されてもよい。
図4は、フラッシュメモリ780の構成例を示す図である。
フラッシュメモリ780は、複数のブロック782と、それらに接続されたフラッシュメモリコントローラ(以下、フラッシュコントローラ)781とを有する。フラッシュコントローラ781は、フラッシュメモリ780を制御する。各ブロック782は、複数のページ783により構成される。フラッシュメモリ780からのデータのRD、及びフラッシュメモリ780へのデータのWRは、ページ単位で実行される。データ消去は、ブロック単位で実行される。ページ783は、複数のCode word784により構成されており、Code word784には、ホスト計算機30により格納されたデータと、そのデータを保護するためのエラー訂正符号であるECCとが格納されている。
フラッシュメモリ780は、例えば、NAND型のフラッシュメモリである。NAND型のフラッシュメモリでは、データを上書きすることができない。そのため、フラッシュメモリ780では、データがWRされているページ783に新たなデータをWRする際は、データを消去し、データが消去された消去済みのページ783に対してWRする。
SSDコントローラ710は、SSD700内の複数のブロック782に対して、消去回数の平準化処理を行う。SSDコントローラ710は、更新頻度が小さいデータを消去回数の多いブロック782に格納し、更新頻度が大きいデータを消去回数の少ないブロック782に格納することで、SSD700内のブロック782の消去回数を平準化する。なお、SSDコントローラ710は、WRの際に、消去回数の少ない空きブロック782を選択してデータを格納することで、消去回数の平準化を行ってもよい。この際、複数のブロック782を消去回数に応じて複数のグループに分けて、消去回数が少ないグループからデータを格納するブロック782を選択するようにしてもよい。このように、SSD700内の複数のブロック782の消去回数が平準化されることで、SSD700の長寿命化が達成される。
図5は、SSDのアドレス空間の構成例を示す図である。
SSD700に関して、物理アドレス空間800と、物理アドレス空間800より大きい論理アドレス空間900とが存在する。物理アドレス空間800は、実際のデータが格納される物理記憶領域のアドレス空間である。一方、論理アドレス空間900は、SSD700がストレージコントローラ100に対して提供する一意なアドレス空間である。
SSDコントローラ710は、論理アドレス空間900を、例えば物理ページサイズと同じ大きさを持つ複数個の領域(以下、論理ページ)901、902、903、904等に分割する。ここで、本実施例ではSSD700は、データ圧縮機能を有しているため、論理ページ901のデータは圧縮データ911に、論理ページ902のデータは圧縮データ912に、論理ページ903のデータは圧縮データ913に、論理ページ904のデータは圧縮データ914にそれぞれ変換(圧縮)される。データパターン等によって、圧縮率が変化するため、論理ページを変換した各圧縮データのサイズは一定とは限らず、任意のサイズとなる。各圧縮データは、それぞれCode word(CW)単位で物理ページに格納される。この図の例では、圧縮データ911はCW7841に、圧縮データ912はCW7842に、圧縮データ913はCW7843とCW7844とに、圧縮データ914はCW7900に格納される。
このように、データ圧縮機能を有しているSSD700では、論理ページと物理ページとは一対一の関係ではなく、実際にFM780に格納される圧縮後の圧縮データに対して物理ページが動的に割り当てられる。また、このSSD700では、論理アドレス空間900を物理アドレス空間800より大きくすることで、ストレージコントローラ100はSSD700が搭載する物理記憶容量以上のデータを書き込むことができる。
ここで、論理アドレス空間900をどの程度の大きさとするかを考える。本実施例では全書き込みデータが圧縮・伸長回路718で圧縮できる最良の圧縮率(たとえば8分の1)で圧縮されることを想定して、論理アドレス空間900の大きさを決定する。この場合には、SSD700は自身が搭載する物理容量の8倍の大きさを持つ論理容量の論理アドレス空間900をストレージコントローラ100に提供する。例えば、物理的に1TBの容量を搭載するSSD700は、例えば最良の圧縮率8分の1だとすると、8TBの論理容量をストレージコントローラ100に提供する。これにより、ストレージコントローラ100は圧縮機能を持たないHDDやSSDと同様に単にデータをライトするだけで、SSD700の実際の物理容量以上のデータを格納することができる。この場合、書き込まれたデータの圧縮率は、データパターン等によって変化するため、実際には8分の1より圧縮率が悪く(高く)なることがあり、ストレージコントローラ100からSSD700に対して必ずしも8TBのデータを格納することができない。このように、SSD700の論理容量が満杯になる前に、物理容量が満杯になる状態を枯渇状態と呼ぶ。
ストレージコントローラ100は枯渇状態になったSSD700に対しては、一切データをWRすることができない。枯渇状態のSSD700に対するWRコマンドはエラー応答となる。なぜなら、前述のとおり、NAND型のFM780では、単純にデータを上書きすることができず、データが格納されているページに新たなデータをWRする際は、データを消去し、データが消去された消去済みのページに対してWRする必要があり、枯渇状態のSSD700では、消去済みのページを用意することができないためである。
逆に、非枯渇状態のSSD700に対しては、WRの制限はなく、論理アドレス空間900全面に対してWRすることができる。
そこで、ストレージコントローラ100は、SSD700を枯渇状態にしないよう、後述の枯渇回避処理を実行し、SSD700を常に非枯渇状態に保つようにする。
SSDコントローラ710は、論理アドレス空間900を構成するアドレス範囲(論理記憶領域)と物理アドレス空間800を構成するアドレス範囲(物理記憶領域)とのマッピングを動的に変更することで、SSD700内のWL等を実現することができる。なお、論理アドレス空間900と物理アドレス空間800との対応は、プロセッサ713が後述の論物変換テーブル23100を用いて管理している。本実施例では、ストレージコントローラ100は、SSD700内の論物変換テーブルを直接管理していない。ゆえに、SSD700のプロセッサ713がストレージコントローラ100に対して、SSD内部情報等で通知を行わない限り、ストレージコントローラ100は、論理アドレス空間900と物理アドレス空間800との対応関係を把握することはできない。
次に、容量仮想化技術について説明する。
容量仮想化技術(例えば、Thin Provisioning)とは、ストレージ装置10が有している物理的な容量より大きな仮想的な容量をホスト計算機30側に提供する技術である。ホスト計算機30は、仮想的な論理ボリューム(仮想ボリューム)に対してアクセスする。容量仮想化技術では、ストレージ装置10がWR要求を受けた場合に、WR要求のデータのWR先の仮想的な記憶領域(仮想エクステント)に、物理的な記憶領域が割り当てられる。本実施例では、容量仮想化技術において割り当てられる物理的な記憶領域の単位をエクステント単位とする。また、エクステントのサイズは、数MBから数GBと多様性に富んでいてよい。
図6は、容量仮想化技術の概要説明図である。
同一種類のDisk11(例えばSSD700)でRG(200、300、400)が構成される。1以上のRGを基にPool500が構成される。
エクステント(240、241、241、340、440等)は、Pool500を分割することにより得られた記憶領域(部分記憶領域)、つまり、Pool500の一部である。この図の例では、Pool500は、RG200、RG300、及びRG400の3つのRGに基づいて構成されている。以下、RG200を例に説明する。
RG200は、Disk210、Disk220、及びDisk230により構成されている。RG200は、RAID5を構築しており、Data(この図中のD)及びParity(この図中のP)がDisk(210〜230)に格納される。
RG200に基づく記憶領域が複数のエクステント(240、241、242)に分割される。RG200に基づく記憶領域は、複数のSSD700によって提供される論理アドレス空間900に対応する。
エクステントは、SSD700のブロック782よりも大きいサイズの記憶領域である。エクステントのサイズは、例えば、ブロックのN倍(Nは2以上の整数)である。エクステントは、各Diskに存在する論理アドレス空間であるエントリ(例えば、エントリ251、252、253、254、255、256)により構成される。エントリには、複数個のData及びParityが格納される。この図の例では、例えばエントリ251には、データ211、データ212、パリティ213等が格納され、エントリ252には、データ221、データ223、パリティ222等が格納され、エントリ253には、データ232、データ233、パリティ231等が格納されている。エントリ254、255、及び256も同様に複数個のDataとParityとが格納されている。また、エントリ251及び254は、Disk210内に、エントリ252及び255は、Disk220内に、エントリ253及び256は、Disk230内にそれぞれ構築されている。
この図の例では、RG200の記憶領域から、エクステント240、エクステント241、及びエクステント242が作成されている。RG300の記憶領域から、エクステント340、エクステント341、及びエクステント342が作成されている。RG400の記憶領域から、エクステント440、エクステント441、及びエクステント442が作成されている。
仮想ボリューム600は、ホスト計算機30がユーザデータを格納するための仮想的な論理ボリュームである。仮想ボリューム600の容量として定義される容量は、ストレージ装置10が有する物理記憶デバイスの容量の合計よりも大きな記憶容量とすることができる。なお、仮想ボリューム600は、任意の数の仮想エクステント(601〜607等)によって構成されている。仮想ボリューム600の記憶領域は、仮想アドレス(仮想ボリュームを構成する論理アドレス)で管理されており、所定の範囲に区切られた仮想アドレスの記憶領域により、仮想エクステントが構成される。この図の例では、1つの仮想エクステントに対して1つのエクステントが対応付けられているが、1つの仮想エクステントに対して複数のエクステントが対応付けられてもよい。
この図の例において、実線で示されている仮想エクステント601〜604は、RG200、300、及び400からエクステントが割当てられている仮想エクステントである。すなわち、仮想エクステント601に対してはエクステント341が、仮想エクステント602に対してはエクステント242が、仮想エクステント603に対してはエクステント442が、仮想エクステント604に対してはエクステント240がそれぞれ割当てられている。また、この図の例において、破線で示されている仮想エクステント605〜607は、データのWR先として指定されたアドレスが属している仮想エクステントではなく、このため、これら仮想エクステント605〜607にはエクステントが未割当てとなっている。
図7は、データ移動処理によりRG間でデータが移動された場合におけるデータアクセスの概要を説明する図である。データ移動処理は、SSD向け非同期処理(後述)において実行される。
RG間でデータが移動されると、ホスト計算機30は、データへのアクセス先を移動先のRGへ変更しなければならない。しかし、仮想ボリューム600を用いてアドレスが変換されることで、ホスト計算機30は、アクセス先を変更することなく、移動先のデータへアクセスできる。つまり、ストレージコントローラ100によって、仮想エクステント610の仮想アドレスに対する関連付けが、移動元のエクステント70の論理アドレスから、移動先のエクステント80の論理アドレスへ変更される。従って、SSD向け非同期処理を実行しても、ホスト計算機30は、仮想ボリューム600にアクセスすることで、アクセス先のアドレスを変更する必要はない。なお、本実施例では、アドレス変換に仮想ボリュームを用いているが、これに限られず、仮想ボリュームを用いずにアドレス変換を行うようにしてもよい。
図8は、キャッシュメモリ103の構成例を示す図である。
ストレージコントローラ100のキャッシュメモリ103は、プログラムエリア12000、テーブルエリア13000、及びデータキャッシュエリア14000を有する。プログラムエリア12000及びテーブルエリア13000は、ストレージ装置10を制御するためのプログラムや各種テーブルが格納される領域である。データキャッシュエリア14000は、ユーザデータを一時的に格納するために使用される領域である。
プログラムエリア12000は、Write I/O プログラム12100、Read I/O プログラム12200、寿命管理プログラム12300、SSD情報取得プログラム12400、寿命平準化プログラム12500、枯渇回避プログラム12600、I/O性能リバランスプログラム12700、及び流入制御プログラム31100を記憶する。
Write I/O プログラム12100は、ホスト計算機30からのWR要求を処理するプログラムである。Read I/O プログラム12200は、ホスト計算機30からのRD要求を処理するプログラムである。寿命管理プログラム12300は、プロセッサ104がSSD700などの各種Diskの寿命を管理するためのプログラムである。SSD情報取得プログラム12400は、SSD700の内部情報を取得するためのプログラムである。寿命平準化プログラム12500は、SSD700の寿命をRG単位に換算し、RGの寿命平準化を実行するためのプログラムである。枯渇回避プログラム12600は、SSD700の容量情報から、RGの枯渇リスクを計算し、枯渇の可能性が高いRGの枯渇回避を実行するプログラムである。I/O性能リバランスプログラム12700は、RGのI/O統計情報から、特定RGが性能ボトルネックとなっていることを検出し、性能平準化を実行するプログラムである。流入制御プログラム31100は、デステージ不可能であることを判定した場合、ホスト計算機30からのWRデータを制限するプログラムである。
テーブルエリア13000は、Disk管理テーブル(テーブルをTBLと表記することもある)13100、RG管理テーブル13200、Pool管理テーブル13300、エクステント管理テーブル13400、仮想ボリューム管理テーブル13500、統計情報管理テーブル13600、FMライト量予想テーブル13700、エントリ管理テーブル13800、キャッシュ管理テーブル32100、RG判定管理テーブル32200、及び判定結果管理テーブル32300を有する。
Disk管理TBL13100は、Disk Box110に格納されているDiskに関する情報を格納するテーブルである。RG管理TBL13200は、RAIDグループに関する情報を格納するテーブルである。Pool管理TBL13300は、Poolの情報を格納するテーブルである。エクステント管理TBL13400は、エクステントに関する情報を格納するテーブルである。仮想ボリューム管理TBL13500は、仮想ボリュームに関する情報を格納するテーブルである。統計情報管理TBL13600は、ストレージ装置10のI/O性能に関する各種情報を格納するテーブルである。FMライト量予想TBL13700は、プロセッサ104が寿命平準化処理を実行する際の移動対象データを決定するために、SSD内部のデータ書き込み量を予想する際に使用するテーブルである。キャッシュ管理テーブル32100は、データキャッシュエリア14000に関する情報を格納するテーブルである。RG判定管理テーブル32200は、RGの判定に関する情報を格納するテーブルである。判定結果管理テーブル32300は、RGの判定結果を格納するテーブルである。
データキャッシュエリア14000には、WR要求及びRD要求に従うユーザデータ14100が一時記憶される。ユーザデータ14100は、ホスト計算機30が使用するデータである。
図9は、Disk管理テーブル13100の構成例を示す図である。
Disk管理TBL13100は、主にストレージコントローラ100が管理する各Diskの枯渇管理および寿命管理を行うための情報(枯渇関連情報、残寿命情報)を管理する。Disk管理TBL13100は、Disk毎に、Disk#13101、Disk Type13102、情報更新日13103、残保証期間13104、予想残寿命13105、圧縮設定13106、FMリード合計量13107、FMライト合計量13108、平均圧縮率13109、残消去回数13110、FM使用量13111、物理容量13112、及び論理容量13113を有する。
Disk#13101は、Diskの識別子であり、ユニークな番号である。Disk Type13102は、Diskの種別を表す。Diskの種別としては、例えば、SSD(SLC)、SSD(MLC)、HDDなどがある。ここで、SSDは、使用するNANDフラッシュメモリの種類により、SLC(Single Level Cell)タイプ、MLC(Multi Level Cell)タイプ、及びTLC(Triple Level Cell)タイプの3種類が存在する。SLCは、高速、長寿命、低容量なフラッシュメモリであり、数十万から数万回オーダーのブロック消去が可能である。MLCは、低速、短寿命、及び大容量なフラッシュメモリであり、数万から数千回オーダーのブロック消去が可能である。TLCはMLCに比べ、さらに、低速、短寿命であるが、大容量なフラッシュメモリであり数千から数百回オーダーのブロック消去が可能である。
情報更新日13103は、Diskに関する情報が更新された最近の日付(例えば、寿命情報等を更新した日付)を表す。残保証期間13104は、ベンダが定めるDiskの保証期間があとどれだけ残っているかを示す。この図の例では、残保証期間13104は、日数として示されている。ここで、Diskの保証期間とは、Diskが正常に動作することが保証された期間(例えば、5年)である。フラッシュメモリは、データの書き込みによる消去回数の増加により劣化し、寿命に到達すると、データのR/Wが不可能、または、データ保持特性が著しく悪化する。よって、Diskを正常に使用可能な期間として、予め消去回数や総WR量等に基づいて閾値が設定される。Diskの使用期間が保証期間を超えた場合は、そのDiskを交換することとなる。
予想残寿命13105は、SSDの残消去回数13110がゼロに到達すると予想される残りの期間を示す。予想残寿命13105は、プロセッサ104(寿命管理プログラム12300)が予想した数値である。ここでは、予想残寿命13105は、日数として示されている。ここで、予想残寿命13105が残保証期間13104を下回るということは、例えばI/Oのばらつきなどにより、特定のSSDに負荷が集中することで、このSSDがベンダの想定よりも高負荷な状態となってしまい、ベンダが保証する使用期限よりも前に、SSDが寿命に到達するということを意味している。寿命平準化処理を実行することで、特定のSSDを含むRGへのWRの集中を回避することができ、SSDの長寿命化を図ることができる。予想残寿命13105は、情報更新日時13103、FMリード合計量13107、FMライト合計量13108、及び残消去回数13110等を基に算出することができる。残寿命期間の算出方法については後述する。
圧縮設定13106は、対象Diskがデータ圧縮機能を有効にしているか否かを示す。圧縮設定13106は、有効(使用)中の場合はON(又はONに相当する数値(例えば「1」))となり、無効(未使用)中の場合はOFF(又はOFFに相当する数値(例えば「0」))となっている。なお、データ圧縮機能のON/OFFの設定については、ストレージ装置10の管理者がホスト計算機30にインストールされた制御ソフトウェア等を介して設定できるようにしてもよい。
FMリード合計量13107は、SSD内に発生したリード量(SSD内のフラッシュメモリから読み出されたデータの量)の積算値であり、SSD内部情報を基に更新される。FMライト合計量13108は、SSD内に発生したWR量(SSD内のフラッシュメモリに書き込まれたデータの量)の積算値であり、SSD内部情報を基に更新される。平均圧縮率13109は、SSD内部でデータが圧縮されることにより、元のサイズに比べて何パーセントのサイズになったかを示す数値である。なお平均圧縮率13109は、各SSDの圧縮率の平均値であり、SSD内部情報を基に更新される。
残消去回数13110は、SSDにおいて実行可能なブロック消去の回数に従う値を示す。本実施例では、残消去回数13110は、予め決まっている消去可能回数に対する残消去回数についての割合(パーセンテージ)となっており、SSD内部情報を基に更新される。残消去回数13110の値がゼロになったとき、フラッシュメモリ内の全てのブロックの消去回数が上限に達したことを示す。
FMリード合計量13107、FMライト合計量13108、平均圧縮率13109及び残消去回数13110は、ストレージコントローラ100が各SSDから取得した情報に基づいて更新される。ストレージコントローラ100は、例えば、S.M.A.R.T.(Self−Monitoring Analysis and Reporting Technology)等の汎用インタフェースを用いて各SSDから情報を取得する。
FM使用量13111は、SSD内に格納されているデータ量を表し、SSD内部情報を基に更新される。物理容量13112は、SSDが搭載する物理容量を表す。論理容量13113は、SSDに対する論理容量を示す。この論理容量は、圧縮・伸長回路718で可能な最良の圧縮率を前提とした容量であって、物理容量より大きな容量である。ストレージコントローラ100は圧縮設定13106がONの場合は、論理容量13113をSSDの容量と認識し、圧縮設定13106がOFFの場合は、物理容量13112をSSDの容量と認識する。
なお、Disk管理TBL13100において、枯渇管理が必要ないDisk(たとえば圧縮設定13106がOFFのSSD)については、平均圧縮率13109、FM使用量13111、及び論理容量13113を、プロセッサ104による取得対象としなくてもよい。また、Disk管理TBL13100において、寿命管理が必要ないDisk(例えば、HDD)については、残保証期間13104、予想残寿命13105、残消去回数13110、及びFM使用量13111を、プロセッサ104による取得対象としなくてもよい。
図10は、RG管理テーブル13200の構成例を示す図である。
RG管理TBL13200は、RG毎に、RG#13201、Disk Type13202、RAID Level13203、RAID構成13204、圧縮設定13205、及びDisk#13206を有する。
RG#13201は、RGの識別子であり、ユニークな番号である。Disk Type13202は、RGを構成するDiskの種別を表す。RGは、同一種類のDiskから構成される。
RAID Level13203は、RGのRAIDレベルを表す。RAIDレベルは、例えば、RAID 1+0、1、3、4、5、6といった種々の値である。RAID構成13204は、RAIDを構成するデータDisk(データを格納するDisk)の数、及びパリティDisk(パリティを格納するDisk)の数を表す。圧縮設定13205は、RGを構成するDiskに対する圧縮機能の設定状況を示す。圧縮設定13205がONである場合には、このRGを構成する全Diskの圧縮設定がONであることを表す。また、圧縮設定13205がOFFである場合には、このRGを構成する全Diskの圧縮設定がOFFであることを表す。Disk#13206は、RGを構成するDiskの番号(Disk#)を表す。Disk#13206は、RAID構成13204が示すDiskの数と同数の有効なDisk#を含む。
図11は、Pool管理テーブル13300の構成例を示す図である。
Pool管理TBL13300は、Pool毎に、Pool#13301、RG#13302、RG残容量13303、及びPool残容量13304を有する。
Pool#13301は、Poolの識別子であり、ユニークな番号である。RG#13302は、Poolを構成する全てのRGのRG番号を表す。RG残容量13303は、RG毎の残容量を表す。Pool残容量13304は、Poolの残容量を表し、Poolを構成するRGのRG残容量13303の合計値に等しい。RG残容量13303及びPool残容量13304は、仮想ボリュームのエクステント未割当領域にデータの書き込みが発生した際に、プロセッサ104(Write I/O プログラム12100)によりデータの書き込みにより減少した値に更新される。
図12は、エントリ管理テーブル13800の構成例を示す図である。
エントリ管理TBL13800は、Disk毎に、Disk#13801、エントリ#13802、サイズ13803、Start−LBA13804、Last−LBA13805、及び割当先エクステント#13806を有する。
Disk#13801は、Diskの識別子(Disk#)であり、ユニークな番号である。エントリ#13802はDisk内に作成されたエントリの識別子(エントリ#)であり、Disk毎にユニークな識別子である。サイズ13803は、エントリの容量(例えばByte単位)を示す。
Start−LBA13804及びLast−LBA13805は、エントリが、何番のLBAから何番のLBAまでのアドレス空間を使用して作成されているかを示す。具体的には、Start−LBA13804は、エントリのアドレス空間の先頭のLBAの番号であり、Last−LBA13805は、エントリのアドレス空間の最後尾のLBAの番号である。
割当先エクステント#13807は、このエントリがエクステントに割当済みであるか否かを示す。具体的には、割当先エクステント#13807は、エクステントに割当済みのエントリである場合に、その割当先のエクステント#であり、エクステントに未割当てのエントリである場合には、未割当てであることを示す「N/A」となる。
図13は、エクステント管理テーブル13400の構成例を示す図である。
エクステント管理TBL13400は、エクステント毎に、エクステント#13401、サイズ13402、Disk#13403、及び割当てエントリ#13404を有する。
エクステント#13401は、エクステントの識別子であり、ユニークな番号である。サイズ13402は、エクステントの容量(例えばByte単位)を表す。Disk#13403、及び割当てエントリ#13404は、エクステントを構築するDiskのDisk#と、エントリのエントリ#とを表す。
図14は、仮想ボリューム管理テーブル13500の構成例を示す図である。
仮想ボリューム管理TBL13500は、仮想ボリューム毎に、LU#13501、仮想容量13502、実使用容量13503、仮想エクステント#13504、及び割当てエクステント#13505を有する。
LU#13501は、仮想ボリュームの識別子(LU#)であり、ユニークな番号である。仮想容量13502は、仮想ボリュームの仮想的な容量である。仮想容量13502に対応する仮想的な容量がホスト計算機30に提供される。実使用容量13503は、仮想ボリュームに実際に割当てられているエクステントの容量の合計値である。
仮想エクステント#13504は、仮想ボリュームに含まれる仮想エクステントの識別子である。この図の例では、LU#0の仮想ボリュームには、仮想エクステント#0〜nが含まれることを示している。仮想エクステント#13504は昇順に並んでおり、ホスト計算機30から発行されるR/Wコマンドで指定されるLBA(Logical Block Address)がどの仮想エクステント#に対応するかを計算によって求めることができる。割当てエクステント#13505は、仮想ボリュームに割り当てられているエクステントの識別子(番号)である。ストレージコントローラ100は、仮想エクステント毎に、エクステントの割当て状態を管理する。この図の例では、仮想エクステント#0には、エクステント#0が割当てられ、仮想エクステント#1には、エクステント#100が割当てられて管理されている。なお、物理的な記憶領域であるエクステントが未割当ての仮想エクステントの仮想エクステント#13504に対応するエクステント#13505は、エクステントが割当てられていないことを示す「−」となる。この図の例では、仮想エクステント#nの仮想エクステントには、エクステントが割当てられていないことを示している。
図15は、統計情報管理テーブル13600の構成例を示す図である。
統計情報管理TBL13600は、各エントリ及び/又はエクステントへのR/W等のアクセス状況に関する情報(入出力量情報)である。ストレージコントローラ100は、エントリ単位でR/W状況を監視しており、統計情報管理TBL13600を構成する。なお、エクステントへのR/Wのアクセス状況は、統計情報管理TBL13600の内容を基に、ストレージコントローラ100が各エクステントに属するエントリの各情報の値を加算することにより、取得することができる。
統計情報管理TBL13600は、Disk毎に、Disk#13601、エントリ#13602、平均WR I/O Size13603、平均RD I/O Size13604、WR比率13605、WR量13606、及びRD量13607を有する。なお、情報項目13601〜13607の少なくとも1つを統計情報と呼ぶ場合がある。
Disk#13601は、Diskの識別子であり、ユニークな番号である。エクステント#13602は、Diskに基づくエクステントの識別子であり、ユニークな番号である。
平均WR I/O Size13603及び平均RD I/O Size13604は、このエントリに発生したWR I/O、及びRD I/OのI/Oサイズの平均値である。WR比率13605は、このエントリに発生したI/O要求のうち、その要求がWRコマンドであった比率である。WR量13606及びRD量13607は、このエントリに発生したWRデータの総量及びRDデータの総量を示す。なお、WR量13606及びRD量13607は、ストレージコントローラ100がSSDに対して依頼したI/O内容を記録した数値であるため、これら数値は圧縮前の値である。本実施例では、統計情報の監視を、エントリ及び/又はエクステント単位とすることで、フラッシュメモリのブロックやページ単位で監視するよりも、監視負荷を低減することができる。
ストレージコントローラ100は、仮想ボリューム管理TBL13500に基づいて、割当て中のエクステントについて、アクセス状況を監視する。統計情報は、仮想ボリュームにエクステントが割当てられた後からの累積値、及びR/Wの傾向である。なお、統計情報は、単位時間当たりの累積値としてもよい。
また、枯渇回避処理、寿命平準化処理、又はI/O性能リバランス処理の実行後、各処理の対象のエクステントの統計情報を、リセットするようにしてもよい。例えば、ストレージコントローラ100は、寿命平準化処理において、移動されたエクステントに関する統計情報のみをリセットしてもよい。
図16は、実施例1におけるFM WR量予想テーブル13700の構成例を示す図である。
FM WR量予想TBL13700は、Disk管理TBL13100及び統計情報管理TBL13600を基に構成される。FM WR量予想TBL13700は、Disk毎に、Disk#13701、エントリ#13702、WR量13703、圧縮率13704、及びFM WR予想量13705を有している。
Disk#13701は、Diskの識別子であり、ユニークな番号である。エントリ#13702は、エントリの識別子であり、ユニークな番号である。
WR量13703は、エントリを書込み先としたWRデータの総量を示す。WR量13703は、FM WR量の予想の際に、統計情報管理TBL13600のWR量13606の値を基に更新される。圧縮率13704は、このDiskにおける圧縮率の平均値であり、SSDから取得した内部情報を基に設定される。圧縮率13704は、FM WR量の予想の際に、Disk管理TBL13100の平均圧縮率13109の値がコピーされて設定される。なお、本実施例では、Disk単位の圧縮率の平均値を使用するため、全エントリの数値はすべて同じ値としている。
FM WR予想量13705は、フラッシュメモリに実際に書き込まれるデータの予想量(FM WR予想量)を示す。本実施例では、或るエントリのWR量13703と、そのエントリが属するDisk全体の平均圧縮率13704とを乗算した値を、このエントリに発生したFM WR予想量とみなす。また、エクステント単位のFM WR予想量は、そのエクステントを構成する1以上のエントリのFM WR予想量の合計をとることで取得することができる。
例えば、或るエクステントへのWR予想量が多いと、そのエクステントの基になっているSSDにおいてブロックに対するデータの書き換えが頻繁に発生し、ブロックの消去回数が増加する。ブロックの消去回数が増加すると、そのブロックを有するSSDの寿命が短くなる。寿命平準化を行う際に、エクステントのWR予想量を基に、移動対象のエクステントを決めることで、精度高くSSD寿命を平準化することができる。なお、移動対象のデータはエントリとしてもよい。
図17は、キャッシュ管理テーブル32200の構成例を示す図である。
ストレージコントローラ100は、データキャッシュエリア14000を複数のキャッシュ領域に分割して管理する。キャッシュ領域は、予め設定されたサイズを有する。
キャッシュ管理テーブル32100の一つのレコードは、仮想ボリュームにおける仮想アドレス32101と、当該仮想アドレスに対応するキャッシュ領域を示すキャッシュ領域#32102と、当該キャッシュ領域がダーティであるか否かを示すフラグであるステータス32103と、を含む。
キャッシュ領域は、スロットであってもよいし、スロットより小さいセグメントであってもよい。また、ストレージコントローラ100は、セグメント単位で領域を確保し、スロット単位でステータス32103を管理してもよい。
図18は、RG判定管理テーブル32200の構成例を示す図である。
RG判定管理テーブル32200の一つのレコードは、RGを示すRG#32201と、当該RGのRG実空き容量#32202と、当該RGのマージン32203と、当該RGのダーティデータ量32204と、当該RGが属するプールを示すプール#32205と、を含む。
図19は、判定結果管理テーブル32300の構成例を示す図である。
判定結果管理テーブル32300は、後述のストレージ状態更新処理によるストレージ装置10全体の判定結果を示すシステムフラグ32301と、各プールを示すプール#32302と、ストレージ状態更新処理による各プールの判定結果を示すプールフラグ32303と、プールに属する各RGを示すRG#32304と、ストレージ状態更新処理による各RGの判定結果を示すRGフラグ32305と、を含む。
システムフラグ32301は、ストレージ状態更新処理時に、ストレージ装置10内で少なくとも一つのRGフラグ32305がONであればONに設定され、そうでなければOFFに設定される。一つのプールのプールフラグ32303は、ストレージ状態更新処理時に、当該プール内の少なくとも一つのRGフラグ32305がONであればONに設定され、そうでなければOFFに設定される。一つのRGのRGフラグ32305は、ストレージ状態更新処理時に、当該RGが空き条件を満たせばONに設定され、そうでなければOFFに設定される。
図20は、SSD700におけるキャッシュメモリ716の構成例を示す図である。
キャッシュメモリ716は、プログラムエリア22000、テーブルエリア23000、及びデータキャッシュエリア24000を有する。
プログラムエリア22000及びテーブルエリア23000は、SSD700を制御するためのプログラムや各種テーブルが格納される領域である。データキャッシュエリア24000は、ユーザデータを一時的に格納するための領域である。
プログラムエリア22000は、Write I/O プログラム22100、Read I/O プログラム22200、SSD内WL プログラム22300、空き容量生成プログラム22400、SSD内部情報通信プログラム22500、及び、圧縮・伸長プログラム22600を有する。
Write I/O プログラム22100は、ストレージコントローラ100からのWR要求を処理するプログラムである。Read I/O プログラム22200は、ストレージコントローラ100からのRD要求を処理するプログラムである。SSD内WL プログラム22300は、SSD内部でのWLを実行するためのプログラムである。空き容量生成プログラム22400は、SSD700の空き容量の枯渇を回避するために行われるリクラメーション処理を実行するプログラムである。
SSD内部情報通信プログラム22500は、ストレージコントローラ100の要求に従ってSSDの内部情報を作成し、そのSSD内部情報をストレージコントローラ100に通知するためのプログラムである。圧縮・伸長プログラム22600は、SSDコントローラ710が、プロセッサ713を用いてデータの圧縮・伸長を実行するためのプログラムである。なお、圧縮・伸長プログラム22600を、圧縮・伸長回路718を制御することによってデータの圧縮・伸長を実行するようにしてもよい。
テーブルエリア23000は、論物変換テーブル23100、統計情報管理テーブル23200、及び圧縮設定フラグ23300を有する。
論物変換TBL23100は、SSD700の論理アドレス空間と物理アドレス空間との対応を管理するためのテーブルである。統計情報管理TBL23200は、SSDの統計情報を管理するためのテーブルである。圧縮設定フラグ23300は、SSD700の圧縮設定がONであるか、OFFであるかを示すフラグである。
データキャッシュエリア24000は、ユーザデータ24100を格納する領域である。ここで、ユーザデータ24100は、ブロックに書き込まれるデータ及びブロックから読み出されたデータである。
図21は、論物変換テーブル23100の構成例を示す図である。
論物変換テーブル23100は、Start−LBA23101、Block#23102、Page#23103、及びCord Word(CW)#23104を有する。
Start−LBA23101は、ストレージコントローラ100に提供するLBAの開始位置を示す。なお、フラッシュメモリのI/O単位はページであるため、Start−LBA23101の数値は、ページサイズの倍数で管理されている。Block#23102、Page#23103、及びCW#23104は、Start−LBA23101に対応する物理アドレス空間の情報(ブロック#、ページ#、CW#)を示している。なお、本実施例では、SSDがデータ圧縮機能を有するため、2ページ以上にわたる論理アドレス空間が、1ページの物理ページにマッピングされることがあり得る。この図の例では、LBA0からLBA8191に対応する論理アドレス空間と、LBA8192からLBA16383に対応する論理アドレス空間が同一の物理ページ(Block#0のPage#0)に格納されていることを示している。また、Start−LBA23101は、論理アドレス空間900に対応しているため、ストレージコントローラ100からのWRが無く実際に物理ページが割り当てられていないものも存在する。この場合には、Start−LBAに対応する物理空間アドレス空間を示すBlock#23102、Page#23103、及びCW#23104は無効な情報である。
図22は、SSD内の統計情報管理テーブル23200の構成例を示す図である。
統計情報管理TBL23200には、ストレージコントローラ100からの要求に応じてプロセッサ713が通知した情報が格納される。統計情報管理TBL23200は、ライト要求合計量23211、リード要求合計量23212、FMライト合計量23213、平均圧縮率23214、FMリード合計量23215、及び残消去回数23216を有する。
ライト要求合計量23211とリード要求合計量23212とは、ストレージコントローラ100がSSD700に対してWR要求したデータと、リード要求したデータとのそれぞれの総量であり、それぞれが、統計情報管理TBL13600内のWR量13606の合計と、RD量13607の合計と同じ値となる。FMライト合計量23213及びFMリード合計量23215は、FM780に実際にWRされたデータの総量及びFM780から実際にRDされたデータの総量である。なお、これらの値には、リクラメーション等、ストレージコントローラ100からのR/W要求以外の処理においてSSD内部で発生するR/W量を含んでいる。FMライト合計量23213は、Disk管理TBL13100のFM使用量13111と同じ値となる。
平均圧縮率23213は、SSD内部でのデータ圧縮処理により得られた圧縮データの、圧縮率の平均値である。残消去回数23216は、FMにデータがWRされることにより発生したFMの消去回数の合計値をベンダがサポートする最大消去回数から引いた値である。統計情報管理TBL23200の数値は、データのR/W、又は消去が発生した際に更新される。
以下、ストレージコントローラ100の動作について説明する。
図23は、ホスト計算機30からのライト要求に関わるライト処理を示す。
なお、この図の例における、ストレージコントローラ100の処理は、Write I/O プログラム12100が実行されることにより実現され、SSDコントローラ710の処理は、Write I/O プログラム22100が実行されることにより実現される。
ホスト計算機30は、WR要求をストレージコントローラ100に送信する(S10)。ストレージコントローラ100は、WR要求を受信すると、後述のWR要求受領処理を実行する(S20)。
その後、ストレージコントローラ100は、WR要求が表すWR先範囲(仮想ボリュームのアドレス範囲)にエクステントが割当済みか否かを、仮想ボリューム管理テーブル13500を基に判定する(S30)。
この判断の結果、エクステントが既に割当済みである場合(S30:Yes)は、ストレージコントローラ100は、処理をS50へ移行させる。エクステントが未割当である場合(S30:No)は、ストレージコントローラ100は、未割当てのエクステントを見つけて、そのエクステントをWR先範囲の仮想エクステントに割り当てる(S40)。なお、ストレージコントローラ100は、キャッシュメモリ103からSSD700にデータを転送する際に、エクステントを割当ててもよい。
その後、ストレージコントローラ100は、WR先範囲にキャッシュ領域が割当済み(キャッシュ領域確保要求がある)か否かを判定する(S50)。
この判断の結果、キャッシュ領域が既に割当済みである場合(S50:Yes)は、ストレージコントローラ100は、処理をS70へ移行させる。キャッシュ領域が未割当である場合(S50:No)は、ストレージコントローラ100は、未割当てのキャッシュ領域を見つけて、そのキャッシュ領域をWR先範囲に割り当てる(S60)。
その後、ストレージコントローラ100は、ホスト計算機30へWRデータ転送許可通知を送信することで、WRデータ送付を促す(S70)。
次に、ホスト計算機30はWRデータ転送許可通知に応じてWRデータを送付し(S80)、ストレージコントローラ100は、WRデータを受信し、受信されたWRデータをキャッシュメモリ103に格納する(S85)。その後、ストレージコントローラ100は、WRデータ転送許可通知をホスト計算機30へ送信する(S90)。
ホスト計算機30は、ストレージコントローラ100から転送完了応答を受信すると、ライト処理を終了する(S95)。
図24は、デステージ処理を示す。
割当済みのキャッシュ領域数が予め設定されたキャッシュ領域数閾値を超える等の条件が成立した場合、ストレージコントローラ100は、デステージ処理を実行する。
ストレージコントローラ100は、データの格納先となるSSD700のSSDコントローラ710に、キャッシュメモリ103に記憶されたデータと、そのデータについてのWR要求とを送信する(S105)。
SSDコントローラ710は、ストレージコントローラ100からデータ及びWR要求を受信し、自身の圧縮設定フラグ23100を参照して、データ圧縮が有効になっているか否かを判断する(S106)。この結果、データ圧縮が有効となっている場合(S106:Yes)は、SSDコントローラ710は、データを圧縮し(S107)、論物変換TBL23100を参照し、データの格納先のFM位置(Block#、Page#、及びCW#)を決定し、決定したFM位置にそのデータを格納する(S108)。
一方、データ圧縮設定が無効である場合(S106:No)は、SSDコントローラ710は、データ圧縮は行わず、論物変換TBL23100を基に、データの格納先のFM位置を決定し、決定したFM位置にそのデータを格納する(S108)。
S108を実行した後、SSDコントローラ710は、受信したデータに関する統計情報管理TBL23200のライト要求合計量23211、FMライト合計量23213、平均圧縮率23214、及び残消去回数23216を更新する(S109)。次に、SSDコントローラ710は、ストレージコントローラ100に対して、S106で受信したWR要求の応答として、転送完了応答を送信する(S110)。
ストレージコントローラ100は、SSDコントローラ710から転送完了応答を受信すると、統計情報管理TBL13600の平均WR I/O Size13603、WR比率13605、及びWR量13606を更新し(S111)、このシーケンスを終了する。
図25は、ホスト計算機30からのリード要求に関わるリード処理を示す。
なお、この図の例における、ストレージコントローラ100の処理は、Read I/O プログラム12200が実行されることにより実現され、SSDコントローラ710の処理は、Read I/O プログラム22200が実行されることにより実現される。
ホスト計算機30は、ストレージコントローラ100に対して、データのRD要求を送信する(S180)。
ストレージコントローラ100は、データのRD要求を受信し、そのRD要求に示されたRD範囲(仮想ボリュームのアドレス範囲)に割り当てられているキャッシュ領域がある(要求されたデータがキャッシュ領域にある)か否かを判定する(S190)。
当該キャッシュ領域が割り当てられていない場合(S190:Y)、ストレージコントローラ100は、処理をS208へ移行させる。当該キャッシュ領域が割り当てられていない場合(S190:N)、ストレージコントローラ100は、当該キャッシュ領域を割り当て、エクステントの基となるSSD710を特定し、特定したSSD710のSSDコントローラ710に対して、データのRD要求(ステージング要求)を送信する(S201)。
SSDコントローラ710は、データのRD要求を受信し、論物変換TBL23100を基に、RD要求に従う論理アドレス範囲に対応する物理アドレス範囲を特定し、この物理アドレス範囲(1以上のページ)からデータを読み出す処理を行う。この処理では、SSDコントローラ710は、データ圧縮が有効となっているか否かを確認し(S202)、データ圧縮が有効である場合(S202:Yes)は、読み出したデータに対して伸長を行い(S203)、伸長したデータをストレージコントローラ100に送信する(S204)。一方、データ圧縮が有効でない場合(S202:No)は、SSDコントローラ710は、読み出したデータを伸張することなくストレージコントローラ100に送信する(S204)。
S204の次に、SSDコントローラ710は、統計情報管理TBL23200のリード要求合計量23212、及びFMリード合計量23215を更新する(S205)。
ストレージコントローラ100は、S201で送信したRD要求の応答として、SSDコントローラ710からデータを受信すると、受信したデータをキャッシュメモリ103に格納し(S206)、統計情報管理TBL13600の平均RD I/O Size13604、WR比率13605、及びRD量13607を更新する(S207)。その後、ストレージコントローラ100は、S206でキャッシュメモリ103に格納したデータをホスト計算機30に送信する(S208)。
ホスト計算機30は、S200で送信したRD要求の応答として、ストレージコントローラ100からデータを受信すると、リード処理を終了する(S209)。
なお、ストレージコントローラ100は、ライト処理のS85において、データをキャッシュメモリ103に格納した後、デステージ処理を行い、デステージ処理後に転送完了応答をホスト計算機30へ送信してもよい。この場合、ストレージコントローラ100は、マージンを用いなくてもよいし、予め設定された値をマージンとして用いてもよい。
図26は、SSD向け非同期処理を示す。
ストレージコントローラ100は、I/O要求とは非同期で、予め設定されたSSD内部情報取得周期毎に、各SSDコントローラ710に対して、SSD内部情報取得処理(後述)を実行する(S300)。ここでストレージコントローラ100は、SSD内部情報取得コマンドをSSDコントローラ710へ送信し、その応答である実行結果通知コマンドをSSDコントローラ710から受信する。S300の処理で取得する情報は例えば、統計情報管理TBL23200に保存されているデータ(FMライト合計量23213、平均圧縮率23214、FMリード合計量23215、及び残消去回数23216)である。
ストレージコントローラ100は、取得した内部情報を基に、Disk管理TBL13100を更新する(S301)。具体的には、ストレージコントローラ100は、FMライト合計量23213に基づいて、FMライト合計量13108及びFM使用量13111を更新し、FMリード合計量23215に基づいて、FMリード合計量13107を更新し、平均圧縮率23214に基づいて、平均圧縮率13109を更新し、残消去回数23216に基づいて、残消去回数13110を更新する。
次に、ストレージコントローラ100はDisk管理TBL13100の情報を基に、このDiskの枯渇リスクを計算する(S302)。ここで、枯渇リスクとは、Diskの枯渇しやすさを判断するための指標であり、本実施例では、数値が高いほうが枯渇し易いことを示す。枯渇リスクは、例えば、DiskへのWR量×平均圧縮率÷空き容量、で算出される。つまり、WR頻度が高く、圧縮率が悪く、空き容量が少ないほど枯渇リスクが高くなる。DiskへのWR量は、統計情報管理TBL13600のWR量13606のDisk単位の合計であり、平均圧縮率は、Disk管理TBL13100の平均圧縮率13109であり、空き容量は、Disk管理TBL13100の物理容量13112からFM使用量13111を引くことにより算出できる。
次に、ストレージコントローラ100は、枯渇リスクが閾値以上か否かを判断し、枯渇回避処理を実行するか否かを判断する(S303)。なお、閾値は、ストレージ装置10の管理者により、ホスト計算機30にインストールされた制御ソフトウェア等を介して設定されるようにしてもよい。枯渇リスクが閾値以上であって、枯渇回避処理が必要であると判断された場合(S303:Yes)は、ストレージコントローラ100は、枯渇回避処理(後述)を実行し(S304)、枯渇回避処理の終了後に、処理をS305に進める。一方、枯渇リスクが閾値以上でなくて、枯渇回避処理が不要であると判断された場合(S303:No)は、ストレージコントローラ100は、処理をS305に進める。
S305では、ストレージコントローラ100は、寿命平準化処理の要否判断を行うため、RG単位の残寿命を計算する(S305)。ここで、RG単位の残寿命は、RGを構成する各SSDの残寿命のうち最悪値としてもよいし、各SSDの残寿命の平均値としてもよい。各SSDの残寿命を計算する方法については、後述する。ストレージコントローラ100は、計算された各SSDの残寿命を、Disk管理TBLの予想残寿命13105に格納する。
次に、ストレージコントローラ100は、RG間での残寿命の差分を求め、差分が閾値以上か否かを判断し、寿命平準化処理を実行するか否かを判断する(S306)。なお、閾値は、ストレージ装置10の管理者により、ホスト計算機30にインストールされた制御ソフトウェア等を介して設定されるようにしてもよい。なお、寿命平準化処理を実行するか否かについては、例えば、保証期間よりも先に寿命に到達するSSDがあるか否か(残保証期間13104よりも予想残寿命13105の方が少ないSSDがあるか否か)により判断するようにしてもよい。
この結果、差分が閾値以上であり、寿命平準化処理が必要であると判断された場合(S306:Yes)は、ストレージコントローラ100は、寿命平準化処理(後述)を実行する(S307)。この寿命平準化処理が終了すると、再度S305に進む。これにより、寿命平準化処理後の状態についての再びSSD RGの残寿命が算出され、S306で残寿命の差分が閾値以上であるか否かの判断が行われることとなる。
一方、差分が閾値以上でなく、寿命平準化処理が不要であると判断された場合(S306:No)は、ストレージコントローラ100は、I/O性能リバランス処理の要否判断を行うため、RG物理容量当たりのI/O量を算出する(S308)。ここで、RG物理容量当たりのI/O量は、例えば、RGのI/O量×平均圧縮率÷RG物理容量で計算される。RGのI/O量は、統計情報管理TBL13600のWR量13600及びRD量13607から各SSDのI/O量を算出し、RGを構成しているSSD分のI/O量を加算することにより算出することができる。平均圧縮率は、例えば、Disk管理TBL13100の平均圧縮率13109からRGの中で最も圧縮率の悪い数値とする。RG物理容量は、Disk管理TBL13100の物理容量13112からRGを構成しているSSD分の物理容量を加算することにより算出することができる。
次に、ストレージコントローラ100は、RG間で物理容量当たりのI/O量の差分を求め、この差分が閾値以上であるか否かを判断して、I/O性能リバランス処理を実行するか否かを判断する(S309)。この結果、差分が閾値以上の場合(S309:Yes)は、ストレージコントローラ100は、I/O性能リバランス処理(後述)を実行し(S310)、I/O性能リバランス処理終了後に、SSD向け非同期処理を終了する。一方、差分が閾値未満の場合(S309:No)は、ストレージコントローラ100は、SSD向け非同期処理を終了する。
なお、SSD向け非同期処理は、任意のタイミングで実行されても良く、一定の間隔(例えば一日おき)で実行されても良く、また、特定のコマンドを受け取ったタイミングで実行されてもよい。更に、SSD向け非同期処理は、ホスト計算機30の制御ソフトウェアからユーザが本処理の実行契機を指示することで実行されてもよい。
また、この図の例によれば、枯渇回避処理の優先度が最も高く、寿命平準化処理の優先度が2番目に高く、IO性能理バランス処理の優先度が最も低く、このような優先度が高い順に処理が行われるが、これらの処理のそれぞれの優先度は、この図の優先度と違っていてもよい。例えば、IO性能理バランス処理の優先度が寿命平準化処理の優先度より高くてもよい。
また、枯渇回避処理、寿命平準化処理及びIO性能理バランス処理のような複数のデータ配置制御処理(記憶デバイス間でのデータ移動が生じる処理)がある。ストレージコントローラ100は、いずれかのデータ配置制御処理(対象のデータ配置制御処理)を行う前に、対象のデータ配置制御処理を行っても対象のデータ配置制御処理より優先度が高いデータ配置制御処理(先に行われたデータ配置制御処理)がスキップされるための条件が満たされたままとなるか否かを判断してもよい。「より優先度が高いデータ配置制御処理がスキップされるための条件が満たされたまま」とは、より優先度が高いデータ配置制御処理によって満たされるべき条件が満たされたままとなることであり、例えば、枯渇リスクがそれの閾値未満のままである、RG間残寿命差がそれの閾値未満のままである、又は、RG間IO量差がそれの閾値未満のままである、ということである。この判断の結果が肯定的の場合に、ストレージコントローラ100は、対象のデータ配置制御処理を行ってよい。また、この判断の結果が否定的の場合には、ストレージコントローラ100は、対象のデータ配置制御処理をスキップしてよい(行わないでよい)。
図27は、SSD内部情報取得処理を示す。
前述のS300においてストレージコントローラ100は、SSD内部情報取得処理を実行する。この図は、SSD内部情報取得コマンド25000と、その応答である実行結果通知コマンド25100の構成例を示す。
SSD内部情報取得コマンド25000は、ストレージコントローラ100がSSD700に対して送信するコマンドである。
SSD内部情報取得コマンド25000は、例えば、コマンド#25001及び取得対象25002を有している。コマンド#25001はコマンドの識別子(コマンド#)である。取得対象25002は、ストレージコントローラ100がSSDからの取得を希望する対象である項目である。具体的には、取得対象25002は、SSD780の統計情報管理TBL23200に含まれる項目のうち、どの項目の値を必要としているのかを示す。
実行結果通知コマンド25100は、SSD700がストレージコントローラ100に対して送付するコマンドであり、SSD内部情報取得コマンド25000に対する応答内容を含んでいる。実行結果通知コマンド25100は、例えば、コマンド#25101及びDisk内部情報25102を含む。コマンド#25101は、どの要求コマンドに対する応答なのかを示し、要求コマンドに対応するコマンド#25001となっている。Disk内部情報25102は、取得対象25002で指定された内容に対する回答値であり、この値は、SSDの統計情報管理TBL23200から計算、もしくはコピーされた値となっている。
SSD内部情報取得処理において、ストレージコントローラ100は、各SSD700にSSD内部情報取得コマンド25000を送信することで、FM使用量13111、物理容量13112等を取得し、物理容量13112からFM使用量13111を減ずることにより、SSD700毎の物理的な空き容量サイズであるSSD実空き容量を算出し、RG管理テーブル13200に基づいて、RG毎のSSD実空き容量の合計であるRG実空き容量を算出し、RG判定管理テーブル32200へ格納する。なお、SSD700がSSD実空き容量を管理し、ストレージコントローラ100がSSD700からSSD実空き容量を取得してもよい。
SSD内部情報取得処理によれば、ストレージコントローラ100は、定期的に、各SSD700の状態を取得することができる。これにより、SSD700により圧縮されてSSD700に格納されているデータ量や、SSD700を空き物理容量(実空き容量)を取得することができる。
図28は、ストレージ状態更新処理を示す。
ストレージコントローラ100は、流入制御プログラム31100に従って、I/O要求とは非同期で、予め設定されたストレージ状態更新周期が経過する度に、ストレージ状態更新処理を実行する。ストレージ状態更新周期は、前述のSSD内部情報取得周期より短くてもよい。
まず、ストレージコントローラ100は、キャッシュ管理テーブル32100から、各RGに対し、当該RGに対応するキャッシュ領域のうちステータスがダーティであるキャッシュ領域数を取得し、そのキャッシュ領域数に基づいて、当該RGに対応するキャッシュ領域のダーティデータ量であるRGダーティデータ量Aを算出し、RG判定管理テーブル32200へ格納する(S4110)。
その後、ストレージコントローラ100は、各RGに対し、RGダーティデータ量A以外で当該RGにデステージされる可能性のあるデータ量を示すマージンBを計算し、RG判定管理テーブル32200へ格納する(S4120)。キャッシュメモリへのデータの書き込みと、デステージとが、非同期で行われる場合、当該RGに対するデステージが追加で発生する可能性がある。マージンBは、このように追加で発生する最大のデステージ量の予測値である。例えば、マージンBは、基準マージン×経過時間、で表される。基準マージン[GB/s]は、流入制限を行っていないときの最大WR量に基づいて予め決定される。なお、基準マージンは、ストレージ装置10の機種毎に決定されてもよいし、Write Pend率(以下、WP率)に応じて決定されてもよい。WP率は、データキャッシュエリア14000における、ダーティデータ量/全容量(ダーティであるキャッシュ領域数/全キャッシュ領域数)、で表される。経過時間[s]は、現在時刻から最新のRG実空き容量の更新時刻を減じた時間であり、RG実空き容量の更新時間間隔を示す。RG実空き容量の更新は、前述のSSD内部情報取得処理により行われる。ストレージコントローラ100の負荷が比較的低い場合、経過時間は、SSD内部情報取得周期に等しくなる。ストレージコントローラ100の負荷が比較的高い場合、経過時間は、SSD内部情報取得周期より長くなる。
その後、ストレージコントローラ100は、RG判定管理テーブル32200に基づいて、各RGに対し、流入制限条件が成立するか否かを判定する(S4130)。流入制限条件は例えば、当該RGに関する、RGダーティデータ量Aと、マージンBと、RG実空き容量Cとを用いて、A+B≧C、で表される。この流入制限条件は、RGダーティデータ量AとマージンBの和のサイズの全てのデータを、非圧縮で当該RGに書き込むことができないことを示す。なお、ストレージコントローラ100は、RG管理テーブル13200の圧縮設定13205の有無によってRGの流入制限条件を切り替えてもよい。
その後、ストレージコントローラ100は、S4130の結果において、少なくとも一つのRGにおいて流入制限条件が成立したか否かを判定する(S4140)。
少なくとも一つのRGにおいて流入制限条件が成立したと判定された場合(S4140:Y)、ストレージコントローラ100は、判定結果管理テーブル32300において、システムフラグをONに設定する(S4210)。
その後、ストレージコントローラ100は、判定結果管理テーブル32300において、各プールのプールフラグを更新する(S4220)。ここでストレージコントローラ100は、各プールに対し、プールフラグ条件が成立すれば、当該プールのプールフラグをONに設定し、そうでなければ、当該プールのプールフラグをOFFに設定する。プールフラグ条件は例えば、S4130の結果、対象RGが属するプール内の少なくとも一つのRGの流入制限条件が成立することである。
その後、ストレージコントローラ100は、判定結果管理テーブル32300において、RGフラグを更新し(S4230)、このフローを終了する。ここでストレージコントローラ100は、各RGに対し、RGフラグ条件が成立すれば、当該RGのRGフラグをONに設定し、そうでなければ当該RGのRGフラグをOFFに設定する。RGフラグ条件は例えば、S4130の結果、当該RGのRG流入制限条件が成立すること、又は当該RGのRG流入制限条件が成立せず且つ当該RGに対する空き待ちジョブがあることである。
S4140において全てのRGにおいて流入制限条件が成立しないと判定された場合(S4140:N)、ストレージコントローラ100は、判定結果管理テーブル32300において、全てのRGのRGフラグをOFFに設定する(S4240)。その後、ストレージコントローラ100は、全てのプールのプールフラグをOFFに設定する(S4250)。その後、ストレージコントローラ100は、システムフラグをOFFに設定し(S4260)、このフローを終了する。
このストレージ状態更新処理によれば、ストレージコントローラ100が、RG実空き容量と、RG予定デステージ量を算出することにより、各RGへのデステージが可能か否かを判定することができる。ストレージコントローラ100は、定期的に各RGへのデステージが可能か否かを判定し、判定結果管理テーブル32300を更新することにより、WR要求の受信時にその判定結果を用いることができる。ストレージコントローラ100が対象RGのRGダーティデータ量とマージンを算出することで、対象RGへデステージされる可能性のあるデータ量を算出することができる。
図29は、WR要求受領処理を示す。
ストレージコントローラ100は、流入制御プログラム31100に従って、WR要求受領処理を実行する。
ストレージコントローラ100は、ホスト計算機30からWR要求を受信すると(S5110)、キャッシュ管理テーブル32100に基づいて、WR要求に示されたWR先範囲に対応するキャッシュ領域の確保が必要であるか否かを判定する(S5120)。ここでストレージコントローラ100は、データキャッシュエリア14000内に当該キャッシュ領域が存在しない(キャッシュミス)場合、当該キャッシュ領域の確保が必要であると判定する。
当該キャッシュ領域の確保が必要でないと判定された場合(S5120:N)、ストレージコントローラ100は、処理をS5140へ移行させる。
当該キャッシュ領域の確保が必要であると判定された場合(S5120:Y)、ストレージコントローラ100は、当該キャッシュ領域を確保するためのキャッシュ領域確保要求を設定する(S5130)。
その後、ストレージコントローラ100は、後述する流入制限判定処理を実行し(S5140)、流入制限すると判定されたか否かを判定する(S5150)。流入制限しないと判定された場合(S5150:N)、ストレージコントローラ100は、このフローを終了する。
流入制限すると判定された場合(S5150:Y)、ストレージコントローラ100は、空き待ち処理を行う(S5160)。この空き待ち処理においてストレージコントローラ100は、対象RGの空き待ちジョブを開始し、その後、後述する空き待ちジョブ解放処理により空き待ちジョブが解放されるまで、空き待ちジョブが解放されたか否かを繰り返し判定する。空き待ちジョブが解放されたと判定された場合、ストレージコントローラ100は、空き待ち処理を終了し、処理をS5110へ移行させる。空き待ち処理中、ストレージコントローラ100は、キャッシュ領域を確保せず、WRデータ転送許可通知をホスト計算機30へ送信しない。
このWR要求受領処理によれば、ストレージコントローラ100は、WR要求受領時、対象RGの流入制限を行うと判定した場合、ライトデータのためのキャッシュ領域を確保せずに待機し、RGダーティデータ量及びWP率の増加を防ぐことができる。また、対象RGの流入制限を行わないと判定した場合、ホスト計算機30からライトデータを受信することができる。
図30は、流入制限判定処理を示す。
前述のS5140においてストレージコントローラ100は、流入制御プログラム31100に従って、流入制限判定処理を実行する。ストレージコントローラ100は、キャッシュ領域の確保が必要である(キャッシュ領域確保要求が設定されている)か否かを判定する(S5210)。キャッシュ領域の確保が必要でないと判定された場合(S5210:N)、ストレージコントローラ100は、対象RGの流入制限を行わないと判定し(S5320)、このフローを終了する。
キャッシュ領域の確保が必要であると判定された場合(S5210:Y)、ストレージコントローラ100は、判定結果管理テーブル32300に基づいて、システムフラグがONであるか否かを判定する(S5220)。システムフラグがOFFであると判定された場合(S5210:N)、ストレージコントローラ100は、処理を前述のS5320へ移行させる。
システムフラグがONであると判定された場合(S5220:Y)、ストレージコントローラ100は、判定結果管理テーブル32300に基づいて、WR先範囲に対応する対象RGが属するプールのプールフラグがONであるか否かを判定する(S5230)。プールフラグがOFFであると判定された場合(S5220:N)、ストレージコントローラ100は、処理を前述のS5320へ移行させる。
プールフラグがONであると判定された場合(S5230:Y)、ストレージコントローラ100は、判定結果管理テーブル32300に基づいて、対象RGのRGフラグがONであるか否かを判定する(S5240)。RGフラグがOFFであると判定された場合(S5230:N)、ストレージコントローラ100は、処理を前述のS5320へ移行させる。
RGフラグがONであると判定された場合(S5240:Y)、ストレージコントローラ100は、対象RGの流入制限を行うと判定し(S5310)、このフローを終了する。
なお、RGフラグがONであると判定された場合(S5240:Y)、ストレージコントローラ100は、対象RGが空き容量不足条件を満たすか否かを判定し、対象RGが空き容量不足条件を満たすと判定された場合に処理をS5310へ移行させ、対象RGが空き容量不足条件を満たさないと判定された場合に処理をS5320へ移行させてもよい。空き容量不足条件は例えば、A+B≧C、である。この場合、ストレージコントローラ100は、実行中のI/O処理の種類を判定し、その種類に応じてマージンBを変化させる。例えば、実行中のI/O処理がホスト計算機30からキャッシュへのライトである場合のマージンBaと、実行中のI/O処理がデステージである場合のマージンBbが予め設定される。Baは、Bbより大きい。
なお、ストレージ状態更新処理によりパラメータエラーが発生した場合、ストレージコントローラ100は、安全のため、対象RGの流入制限を行うと判定する。
この流入制限判定処理によれば、ストレージコントローラ100は、WR要求時に、判定結果管理テーブル32300を参照することにより、対象RGに対して流入制限を行うか否かを迅速に判定することができる。例えば、ストレージコントローラ100は、対象RGに関する何れかのフラグがOFFであれば、流入制限を行わないと判定する。また、ストレージコントローラ100は、対象RGに関する全てのフラグがONであれば、流入制限を行うと判定する。
図31は、空き待ちジョブ解放処理を示す。
ストレージコントローラ100は、I/O要求とは非同期で、予め設定された空き待ちジョブ判定周期が経過する度に、RG毎の空き待ちジョブ解放処理を実行する。空き待ちジョブ判定周期は、ストレージ状態収集周期より短くてもよい。
ストレージコントローラ100は、対象RGに空き待ちジョブがあるか否かを判定する(S5410)。対象RGに空き待ちジョブがないと判定された場合(S5410:N)、ストレージコントローラ100は、このフローを終了する。
対象RGに空き待ちジョブがあると判定された場合(S4510:Y)、ストレージコントローラ100は、対象RGが流入許可条件を満たすか否かを判定する(S4520)。流入許可条件は例えば、当該RGに関する、RGダーティデータ量Aと、マージンBと、RG実空き容量Cとを用いて、A+B<C、で表される。この流入許可条件は、RGダーティデータ量AとマージンBの和のサイズの全てのデータを、非圧縮で当該RGに書き込むことができることを示す。対象RGが流入許可条件を満たすと判定された場合(S4520:Y)、ストレージコントローラ100は、当該空き待ちジョブを解放し(S4530)、このフローを終了する。対象RGが流入許可条件を満たさないと判定された場合(S4520:N)、ストレージコントローラ100は、このフローを終了し、当該空き待ちジョブを継続させる。
この空き待ちジョブ解放処理によれば、対象RGのRG空き容量が増加した場合や、対象RGのダーティデータ量が減少した場合等において、ストレージコントローラ100は、対象RGの空き待ちジョブを解放することができる。例えば、後述の枯渇回避処理により対象RGのRG空き容量が増加し、対象RGが流入許可条件を満たすことにより、空き待ちジョブが解放され、ホスト計算機30は対象RGへのWRデータをストレージ装置10へ送信できるようになる。また、ホスト計算機30は、WR要求から、予め設定されたWR待機時間の経過までに、ストレージ装置10からWRデータ転送許可通知を受信できない場合、タイムアウトと判定し、WR要求に関する処理を中断する。
図32は、SSDの寿命予想の概要説明図である。SSDの寿命予想は、前述のS305に実行される処理である。この図は、横軸に時間を取り、縦軸にSSDの残消去回数を取っている。
SSDの寿命予想の方法の一例として、残消去回数の減少速度から、SSDの寿命の終期への到達時刻を予想する方法について説明する。ここで、SSDの寿命とは、SSDを実際に使用可能な期間とする。或るSSDにWRが集中している場合、このSSDの寿命が短くなる。従って、寿命の長い他のSSDが積極的に使用されるように、寿命平準化処理(具体的には、エクステントやエントリに格納されているデータをSSD間で交換する処理)を行う必要がある。なお、寿命平準化処理では、残りの寿命が短い(残寿命が閾値以下の)SSDを検出する。
この図の例において、t(前回)30000は、前回に寿命予想を行った時点(前回寿命予想時)を示し、Disk管理TBL13100の情報更新日時13103の値に対応する時点である。EZ(前回)30003は、前回寿命予想時における残消去回数であり、残消去回数13106の回数である。また、t(現在)30001は、今回の寿命予想を行う時点であり、EZ(現在)30002は現在の残消去回数であり、今回取得しているSSD内部情報から取得できる値である。
まず、以下の数式(1)により、傾き(I)を算出する。
傾き(I)=(EZ(現在)− EZ(前回))÷ (t(現在)− t(前回)) ・・・(1)
ここで、傾き(I)30004が大きいほど、残消去回数の減少速度が速いことを示す。
次に、傾き(I)30004と、現時点の残消去回数であるEZ(現在)30001とを用いて、以下の数式(2)により、t(寿命到達)を算出する。
t(寿命到達)=−(EZ(現在)÷傾き(I)) ・・・(2)
t(寿命到達)30005は、残消去回数がゼロとなる時間、すなわち、寿命到達時間である。このようにして、残消去回数と、残消去回数の減少速度とから、残寿命期間を算出することができる。残寿命期間は、Disk管理TBL13100の予想残寿命13105に格納される。
記憶デバイスやストレージ装置は、所定の期間(保証期間、例えば5年)は使用し続けられ、データが保証されることが重要である。よって、保証期間を一つの指標として寿命平準化処理を実行することで、複数の記憶デバイス(例えばSSD)を保証期間以上使用することができるようになる。なお、SSDが寿命に到達するまでに書き込めるデータの全Write総量が分かっている場合は、この図の縦軸を残Write量(全Write総量からFMライト合計量13108を引いた値)として、t(寿命到達)を算出するようにしてもよい。
図33は、実施例1に係る枯渇回避処理の一例を示すフローチャートである。枯渇回避処理は、前述のS304の処理に対応する。
ストレージコントローラ100は、プール500内の全RGにおけるRG単位の枯渇リスクを算出する(S500)。RG単位の枯渇リスクは、RGを構成するSSD700の中で、前述のS302で算出したSSD単位の枯渇リスクの最悪値としてもよいし、RGを構成するSSDの枯渇リスクの平均値としてもよい。
次に、ストレージコントローラ100は、枯渇リスクが最も高いRGと、枯渇リスクが最も低いRGとを特定する(S501)。次に、ストレージコントローラ100は、統計情報管理TBL13600と、SSD700の統計情報管理TBL23200とを基に、エントリやエクステント毎のFM WR量を予想するFM WR量予想処理(後述)を行う(S505)。
次に、ストレージコントローラ100は、移動するデータ量を算出する(S502)。移動データ量は、閾値を下回る分を移動量としてもよいし、対象RG間(枯渇リスクが最大のRGと最小のRGとの間)で枯渇リスクを平準化する分を移動量としてもよい。閾値はストレージ装置10の管理者により、ホスト計算機30にインストールされた制御ソフトウェア等を介して設定されるようにしてもよい。
次に、ストレージコントローラ100は、決定した量だけデータを移動するデータ移動処理(後述)を実行する(S503)。最後に、ストレージコントローラ100は、各種TBLの情報を更新して(S504)、枯渇回避処理を終了する。
この枯渇回避処理によると、枯渇リスクの高いRGから低いRGへFM WR量が大きいデータをエクステント単位で移動させることによって、最小のエクステント移動回数でSSD枯渇の危険性を低減させることができる。
なお、枯渇回避処理において、ストレージコントローラ100は、各RGのRG実使用率(当該RGの物理容量に対するRG実使用量の割合)が予め設定されたRG実使用率閾値を上回るか否かを判定し、RG実使用率がRG実使用率閾値を上回る場合、当該RGから他のRGへデータ移動処理を行ってもよい。
また、ストレージコントローラ100は、枯渇回避処理により、空き待ちジョブの対象RGから他のRGへデータを移動することで、対象RGの実空き容量を増加させ、前述の空き待ちジョブ解放処理により空き待ちジョブを解放することができる。
図34は、実施例1に係るFM WR量予想処理の一例を示すフローチャートである。FM WR量予想処理は、前述のS505の処理に対応する。FM WR量予想処理は、ストレージコントローラ100がFM WR量予想TBL13700のFM WR予想量13705を算出する処理である。
ストレージコントローラ100は、FMライト量の予想の計算対象となるエントリを選択する(S3031)。次に、ストレージコントローラ100は、選択したエントリの圧縮率13704に、Disk管理TBL13100の平均圧縮率13109から取得した値を格納(コピー)する(S3032)。続いて、ストレージコントローラ100は、このエントリのWR量13703に、統計情報管理TBL13600からこのエントリに対応するWR量13606を取得し、その値を格納(コピー)する(S3033)。
続いて、ストレージコントローラ100は、WR量13703と圧縮率13704とを乗算することで、このエントリのFM WR予想量13705を算出する(S3034)。次に、ストレージコントローラ100は、計算対象のエントリが残っているか否かを判断し(S3035)、計算対象エントリが残っている場合(S3035:No)は、次のエントリを選択し、S3032からS3035の処理を繰り返す。一方、S3035で、計算対象エントリが残っていないと判断した場合(S3035:Yes)には、ストレージコントローラ100は、エクステント毎のFM WR予想量を算出する(S3036)。具体的には、ストレージコントローラ100は、エクステント管理TBL13400を参照することで、各エクステントに属するエントリを特定し、特定したエントリのFM WR予想量13705の合計値を算出する。この後、ストレージコントローラ100は、FM WR量予想処理を終了する。
図35は、実施例1に係る枯渇回避処理におけるデータ移動処理の一例を示すフローチャートである。このデータ移動処理は、前述のS503の処理に対応する。
ストレージコントローラ100は、前述のS501で特定した枯渇リスク最大のRGの中で、S505のFM WR量予想処理で算出したFM WR予想量が大きいエクステントを選択する(S5031)。FM WR予想量が大きいエクステントとは、複数のエクステントの中で最もFM WR予想量が大きいエクステントとする。
次に、ストレージコントローラ100は、選択したエクステントを、前述のS501で特定した枯渇リスク最小のRGへマイグレーションする(S5032)。次に、ストレージコントローラ100は、枯渇リスク最大のRGから枯渇リスク最小のRGへ移動したデータ量が、前述のS502で算出した移動データ量に達したか否かを判断する(S5033)。
この結果、否定的(S5033:No)であれば、ストレージコントローラ100は、S5031の処理から繰り返す。一方、結果が肯定的(S5033:Yes)であれば、ストレージコントローラ100は、データ移動処理を終了する。
この処理によると、枯渇リスクの高いRGのFM WR予想量が多いエクステントを枯渇リスクの低いRGへ移動することにより、最小のエクステント移動回数でSSD枯渇の危険性を低減させることができる。
図36は、実施例1に係る寿命平準化処理の一例を示すフローチャートである。寿命平準化処理は、前述のS307の処理に対応する。
ストレージコントローラ100は、残寿命が最大のRGと残寿命が最小のRGとを特定し(S601)、統計情報管理TBL13600と、SSD700の統計情報管理TBL23200とに基づいて、エントリやエクステント毎のFM WR量を予想するFM WR量予想処理(後述)を実行する(S602)。
その後、ストレージコントローラ100は、データ移動を実行するデータ移動処理(後述)を実行し(S603)、各種テーブルを更新し(S604)、寿命平準化処理を終了する。
図37は、実施例1に係る寿命平準化処理におけるデータ移動処理の一例を示すフローチャートである。このデータ移動処理は、前述のS603に対応する処理である。
ストレージコントローラ100は、前述のS601で特定した、寿命平準化処理のデータの移動元となる短寿命のRGの中で、FM WR予想量が大きいエクステント(A1)を選択する(S30410)。ここで、FM WR予想量が大きいエクステントとは、複数のエクステントの中で最もFM WR予想量が大きいエクステントとする。
次に、ストレージコントローラ100は、前述のS601で特定した、寿命平準化処理の移動先となる長寿命のRGの中で、FM WR予想量が小さいエクステント(B1)を選択する(S30411)。FM WR予想量が小さいエクステントとは、複数のエクステントの中で最もFM WR予想量が小さいエクステントとする。なお、FM WR予想量が閾値以下のエクステントをグループ化し、その中から一つのエクステントを選択するようにしてもよい。
そして、ストレージコントローラ100は、エクステント(A1)のFM WR予想量がエクステント(B1)のFM WR予想量よりも大きいか否かを判断する(S30412)。エクステント(B1)のFM WR予想量がエクステント(A1)のFM WR予想量より大きい場合、エクステント(B1)のデータを残寿命が短いRGに移動すると、そのRGへのWRデータ量がさらに増加し、デバイス間で消去回数を平準化することにならない。よって、この判断を行って、データ交換を中止することにより、不要なデータ移動をすることなく、適切にデバイス間で消去回数の平準化を行うことができる。
この判断の結果が肯定的(S30412:Yes)であれば、プロセッサ104は、エクステント(A1)内のデータとエクステント(B1)内のデータとを交換し(S30413)、データ移動処理を終了する。一方、この判断の結果が否定的(S30412:No)であれば、プロセッサ104は、データ交換を中止し(S30414)、本処理を終了する。
残寿命の短いRGのFM WR予想量が多いエクステントと、残寿命が長いRGのFM WR予想量が少ないエクステントとを交換することにより、残寿命が短いRGを構成するSSDへのWRデータ量が減少する。従って、残寿命の減少を抑えることができる。一方、残寿命の長いRGはWRデータ量が増大する。よって、このデータ交換により、RG間の残寿命の乖離を小さくすることができる。つまり、SSD寿命を平準化することができる。
図38は、実施例1に係るI/O性能リバランス処理の一例を示すフローチャートである。I/O性能リバランス処理は、前述のS310の処理に対応する。
ストレージコントローラ100は、RG物理容量あたりのI/O量が最大のRGと、最小のRGとを特定し(S901)、統計情報管理TBL13600と、SSD700の統計情報管理TBL23200とに基づいて、エントリやエクステント毎のFM RD/WR予想量(FM RD予想量及びFM WR予想量)を予想する(S902)。具体的には、前述のFM WR量予想処理と同様な処理により、FM RD予想量に関しても予想する処理である。
その後、ストレージコントローラ100は、データ移動を実行し(S903)、各種テーブルを更新し(S904)、性能I/Oリバランス処理を終了する。S903では、ストレージコントローラ100は、前述のS603のデータ移動処理と同様な処理により、RG物理容量あたりのI/O量(FM RD/WR予想量)が大きいRGのI/O量が大きいエクステントと、RG物理容量あたりのI/O量が小さいRGのI/O量が小さいエクステントとのデータを交換することによって、I/O量が大きいRGへのI/O量を減少させる一方、I/O量が小さいRGのI/O量を増加させる。このデータ交換により、RG間のI/O量の乖離を小さくすることができる。つまり、I/O性能を平準化することができる。このI/O性能リバランス処理により、I/O量が多いRGからI/O量が少ないRGへ格納データをエクステント単位で移動させることによって、性能ボトルネックを回避することができる。
ストレージコントローラ100は、ストレージ階層仮想化の機能を有していてもよい。この場合、ストレージコントローラ100は、RGを複数の階層(Tier)の何れかに設定し、仮想エクステント等の仮想記憶領域毎にアクセス頻度を測定し、アクセス頻度に基づいて仮想記憶領域を複数のTierの何れかに配置する。ストレージコントローラ100は、仮想記憶領域の再配置を、定期的に実行してもよいし、I/O要求に応じて実行してもよい。また、ストレージコントローラ100は、Tier間でデータを移動するIO性能リバランス処理を実行してもよい。
枯渇回避処理時、ストレージコントローラ100は、IO性能リバランス処理、Tier間のIO性能リバランス処理、ストレージ階層仮想化の再配置等を中止する。これにより、ストレージコントローラ100は、対象RGの実空き容量の増加を優先して実行する。RGが枯渇すると、割当済みページへの上書きのWR要求がエラーになり、ホスト計算機30のシステムダウンを誘発する可能性があるため、このように枯渇回避処理が優先される。
これらのデータ移動制御処理によれば、ストレージコントローラ100は、RG内のエクステントを仮想エクステントに割り当て、エクステント内のデータを別のRG内のエクステントへ移動させ、移動元のエクステントを割り当てられている仮想エクステントに、移動先のエクステントを割り当てることにより、RGの実空き容量を調整することができる。