以下の説明では、記憶デバイスがSSDであるとの前提に基づいた説明を行う。SSDに含まれる不揮発半導体記憶媒体は、フラッシュメモリ(FM)であるとする。そのフラッシュメモリは、ページ単位でリード/ライトが行われる種類のフラッシュメモリ、典型的にはNAND型のフラッシュメモリであるとする。しかし、フラッシュメモリは、NAND型に代えて他種のフラッシュメモリでも良い。また、フラッシュメモリに代えて、他種の不揮発半導体記憶媒体、例えば相変化メモリなどが採用されても良い。
「ページ」とは、フラッシュメモリにおけるリード/ライトの最小単位であり、ページのサイズは一例として8KBである。本明細書では、「物理ページ」と「論理ページ」という2つの概念が用いられる。物理ページはフラッシュメモリチップ上の物理記憶領域を意味する語として用いられる。また論理ページは、フラッシュメモリを用いた記憶デバイス(SSD等)がストレージコントローラなどに提供する記憶空間を、所定のサイズで分割することで形成される論理的記憶領域を意味する。また単に「ページ」と記載されている語は、「物理ページ」のことを意味する。
「リクラメーション」とは、フラッシュメモリの一度使用したブロックを再度利用可能にするための処理である。リクラメーション処理では、1以上のブロックの消去を行うことで、再度利用可能なブロックを生成する。またブロックの消去の際、使用中のページのデータは、別のブロックに移動される。
「リフレッシュ」とは、本明細書においては、物理ページ(またはブロック)に格納されているデータを読み出して、別の物理ページ(ブロック)に移動する処理のことを意味する。
まず、図1を用いて実施例1の概要を説明する。
ストレージ装置1は、記憶デバイス(典型的には不揮発記憶デバイス)の一例であるSSD21−1〜21−3と、それらの記憶デバイスを制御するストレージコントローラ10とを備える。
SSD21−1は、ストレージコントローラ10に提示する、論理アドレス空間(LBA空間)と、実際のデータを格納する物理アドレス空間(PBA空間)をそれぞれ有している。なお、本明細書では、論理アドレス空間のサイズを論理容量、物理アドレス空間のサイズを物理容量とそれぞれ定義する。SSD21−1の物理アドレス空間は、FMチップにより構成されている。図には、複数のブロック211が描かれている。なお、SSDはブロック(正しくはページ)に格納されたデータを上書くことは出来ず、データは消去済みの別のブロックに書き込む必要があるため、LBA空間よりも大きなPBA空間を有している。LBA空間とPBA空間の対応付けは動的に変更が可能で、後述する論理物理変換テーブル1100にて管理されている。
次にストレージコントローラ10は、SSD21−1〜21−3(厳密には、SSD21−1〜21−3より提供された論理容量20−1〜20−3)をまとめて、RAIDグループ(RG)30−1を構成している。図示はしていないが、別のSSDをまとめて、RAIDグループ30−2を構成している。さらに、ストレージコントローラ10は、2つのRAIDグループ30−1と30−2をまとめて、プール35を構成している。なお、ストレージコントローラ10は、RAIDグループの記憶領域を、所定サイズの区画に分割して管理する。この区画を「チャンク」と呼ぶ。なお、図1に記載の例では、RAIDグループ30−1にはチャンク31が、RAIDグループ30−2にはチャンク32がそれぞれ作成されている。
ストレージ装置1は、ホスト計算機(ホスト)2に接続されており、ホスト計算機2に対して仮想ボリューム40を提供する。仮想ボリューム40は、例えば、シンプロビジョニング技術(容量仮想化機能)を用いて構成される仮想的なボリュームである。ストレージコントローラ10は、ホスト計算機2から仮想ボリューム40に対するライト要求を受信すると、RAIDグループ内の任意のチャンクを、仮想ボリューム40の仮想チャンク41に割り当て、ライト要求に伴うデータをチャンクに書き込む。
ストレージコントローラ10は、必要に応じて、例えば、RAIDグループ30−1内のチャンク31のデータを、RAIDグループ30−2内のチャンク32に移動させるチャンク移動処理を実行する。このとき、ストレージコントローラ10は、仮想チャンク41に割り当てられるチャンクを、チャンク31からチャンク32へと変更する。
SSD21−1は、FMチップのページからデータをリードした際に、エラービット数や消去回数を検出し、その結果に基づいて、FMチップの劣化状態を把握する機能を有している。なおブロックは、劣化の具合に応じて、以下3種の状態で管理されている。(1)劣化が少なく、寿命到達まで余裕があると予想されるブロック(図1では、Nと表記されているブロック)、(2)劣化が進んでおり、寿命到達が間近であると予想されるブロック(図1では、Wと表記されているブロック)、(3)寿命に到達した、もしくは、寿命到達の危険性が高いため、SSD21−1が使用を停止した(すなわち、閉塞させた)ブロック(図1では、Xと表記されているブロック)である。
SSD21−1は、ブロックを閉塞させた際に論理容量20−1を縮小させる。そのため、SSD21−1は、ストレージコントローラ10に対して、論理容量20−1の変更要求を通知する。SSD21−1からの通知を受け取ったストレージコントローラ10は、SSD21−1が所属するRAIDグループ30−1とプール35の容量を縮小させる。なお、RAIDグループ30−1は、チャンク単位でデータを格納するため、RAIDグループ30−1の容量は、論理容量が最小のSSDの容量のN倍(Nは、RAIDグループを構築するSSDの台数)となる。また、RAIDグループ30−1の容量が小さくなると、これまでRAIDグループ30−1に格納されていたデータの一部が溢れる場合がある。そのため、ストレージコントローラ10は、チャンク内のデータを別のRAIDグループ30−2に移動させることで、RAIDグループ30−1のデータ溢れを防止する。なおチャンク内のデータを移動させる際に、ストレージコントローラ10は、移動対象として、任意のチャンクを選択できる。
次に、実施例1に係るストレージ装置1で行われる処理の流れを説明する。(なお、説明の都合上、図2以降で述べる詳細説明と、処理の実行タイミングが異なる部分がある)。
SSD21−1は、定期的にブロックの劣化状態を監視し、寿命到達が間近であると予想されるブロック(ブロックの状態が△)を検出すると(S1)、そのブロックのデータを、寿命に余裕がある別のブロック(ブロックの状態が○)に移動させ、そのブロックを閉塞させる(S2)。次にSSD21−1は、ストレージコントローラ10に対して、論理容量20−1の削減を通知する(S3)。SSD21−1からの通知を受け取ったストレージコントローラ10は、論理容量20−1の削減量をもとに、RAIDグループ30−1とプール35の容量の変更処理を行う(S4)。このとき、RAIDグループ30−1からデータが溢れると予想される場合は、容量に余裕のある別のRAIDグループ30−2に、チャンクのデータを移動し(S5)、RAIDグループ30−1のデータ溢れを防止する。このとき、ストレージコントローラ10は、ホスト計算機2に提供する仮想ボリューム40の容量を維持し続けるため、ホスト計算機2が一連の処理を検知することはない。
このように、本発明の一実施形態に係るストレージ装置では、従来の容量縮退処理で必要としていた、リビルド処理の発生を抑止できるため、リビルド処理によるストレージ装置の性能劣化を抑えることが出来る。
図2は、第1の実施例に係るストレージ装置1を含むストレージシステム10000の構成例を示す図である。
ストレージ装置1は、ストレージコントローラ10と、ストレージコントローラ10に接続された複数のSSD21を有する。
SSD21は、ホスト2などの上位装置からのライトデータを格納するための記憶デバイスで、フラッシュメモリ等の不揮発性半導体メモリを記憶媒体として採用した記憶デバイスである。SSD21の内部構成は後述する。SSD21は一例として、SAS(Serial Attached SCSI)規格に従う伝送線(SASリンク)や、PCI (Peripheral Component Interconnect)規格に従う伝送線(PCIリンク)などによって、ストレージコントローラ10と接続される。
また、図2に示されているように、本実施例のストレージ装置1にはSSD21の他、HDD(Hard Disk Drive)25も搭載可能である。HDD25は、磁気ディスクを記録媒体とする記憶デバイスである。HDD25もSSD21と同様、ストレージコントローラ10に接続される。またSSD21と同様、HDD25もSASリンクなどによってストレージコントローラ10に接続される。ただし以下では、本実施例のストレージ装置1には、記憶デバイスとしてSSD21のみが接続されている構成について中心に説明する。
ストレージコントローラ10には、1以上のホスト2が接続される。またストレージコントローラ10には、管理ホスト5が接続される。ストレージコントローラ10とホスト2とは、一例としてファイバチャネルを用いて形成されるSAN(Storage Area Network)3を介して接続される。ストレージコントローラ10と管理ホスト5とは、一例としてイーサネットを用いて形成されるLAN(Local Area Network)6を介して接続される
ストレージコントローラ10は少なくとも、プロセッサ(CPU)11、ホストインタフェース(図中では「ホストI/F」と表記)12、デバイスインタフェース(図中では「デバイスI/F」と表記)13、メモリ14、管理用I/F15を有する。そしてプロセッサ11、ホストI/F12、デバイスI/F13、メモリ14、管理用I/F15は、内部スイッチ(内部SW)16を介して相互接続されている。図2ではこれらの構成要素がそれぞれ1つだけ示されているが、高性能化及び高可用性の確保のため、これらの構成要素のそれぞれがストレージコントローラ10内に複数搭載されていてもよい。また内部SW16ではなく、共通バスを介して各構成要素が相互接続された構成にしてもよい。
デバイスI/F13は少なくとも、インタフェースコントローラと転送回路を有する。インタフェースコントローラは、SSD21の用いているプロトコル(一例ではSAS)をストレージコントローラ10内部で用いられている通信プロトコル(一例としてPCI−Express)に変換するためのコンポーネントである。転送回路は、ストレージコントローラ10が、SSD21に対してデータの転送(リード、ライト)を行う際に用いられる。
ホストI/F12は、デバイスI/F13と同様に、少なくともインタフェースコントローラと転送回路を有する。ホストI/F12が有するインタフェースコントローラは、ホスト2とストレージコントローラ10間のデータ転送経路で用いられている通信プロトコル(たとえばファイバチャネル)と、ストレージコントローラ10内部で用いられている通信プロトコルを変換するためのものである。
プロセッサ11は、ストレージ装置1の各種制御を行う。メモリ14は、プロセッサ11が実行するプログラムや、プロセッサ11が使用するストレージ装置1の各種管理情報を記憶するために用いられる。またメモリ14は、SSD21に対するI/O対象データを一時的に記憶するためにも用いられる。以下、SSD21に対するI/O対象データを一時的に記憶するために用いられる、メモリ14中の記憶領域を、「キャッシュ」と呼ぶ。メモリ14はDRAM、SRAM等の揮発性記憶媒体で構成されるが、別の実施形態として、不揮発性メモリを用いてメモリ14を構成してもよい。
管理ホスト5は、ストレージ装置1の管理操作を行うための計算機である。管理ホスト5は、キーボードやディスプレイ等の入出力デバイス(非図示)を備え、ユーザ(管理者)は入出力デバイスを用いてストレージ装置1に対する設定指示を行うことができる。また管理ホスト5は、ストレージ装置1の状態等の情報をディスプレイ等の出力デバイスに表示することもできる。
図3は、SSD21の構成例を示す図である。
SSD21は、SSDコントローラ200と複数のFMチップ210から構成される。SSDコントローラ200は、プロセッサ(CPU)201、上流I/F(upstream I/F)202、下流I/F(downstream I/F)203、メモリ204、パリティ演算回路206を有し、これらは内部接続スイッチ(内部接続SW)205を介して相互接続されている。
上流I/F202は、SSD21とストレージコントローラ10間の通信を行うためのインタフェースコントローラである。上流I/Fは、伝送線(SASリンクや、PCIリンク)を介してストレージコントローラ10のデバイスIF13に接続される。一方下流I/F203は、SSDコントローラ200とFMチップ210間の通信を行うためのインタフェースコントローラである。
また下流I/F203は、ECC(Error Correcting Code)の生成、ECCを用いたエラー検出及びエラー訂正を行う機能を有している。なおECCの一例として、BCH符号やLDPC(Low Density Parity Check)符号などが用いられても良い。SSDコントローラ200からFMチップ210にデータが送信(書き込み)される際、下流I/F203はECCを生成する。そして下流I/F203はデータに対し、生成されたECCを付加し、FMチップ210にはECCの付加されたデータを書き込む。SSDコントローラ200がFMチップ210からデータを読み出す際、FMチップ210からはECCの付加されたデータが読み出され、下流I/F203にはこのECCの付加されたデータが到来する。下流I/F203はECCを用いてデータエラーチェック(データからECCを生成し、この生成されたECCと、データに付加されているECCが一致するかチェック)を行い、データエラーが検出された場合、ECCを用いてデータ訂正を行う。またデータエラーが発生した場合、データエラーの発生数をCPU201に通知する機能も備えている。
CPU201は、ストレージコントローラ10から到来する各種コマンドに係る処理等を行う。メモリ204は、プロセッサ201が実行するプログラムや、各種管理情報が記憶される。またメモリ204の一部の領域は、ストレージコントローラ10からライトコマンドと共に送信されてくるライトデータや、FMチップ210から読み出されたデータを一次的に格納するためのバッファとしても用いられる。メモリ204には、DRAM等の揮発性メモリが用いられる。ただしメモリ204に不揮発性メモリが使用されても良い。
パリティ演算回路206は、SSD21内でパリティデータを作成するための回路である。ただし実施例1に係るSSD21では、パリティ演算回路206は必須ではない。なお、パリティ演算回路206の使用例については、実施例2で述べる。
FMチップ210は、たとえばNAND型フラッシュメモリ等の不揮発性半導体メモリチップである。フラッシュメモリは周知のとおり、ページ212の単位でデータの読み出し・書き込みが行われ、またデータ消去は、複数ページ212の集合であるブロック211の単位で行われる。そして一度書き込みが行われたページは上書きが出来ず、一度書き込みが行われたページに対して再度書き込みを行うためには、当該ページを含むブロック全体を消去する必要がある。FMチップ210内には、ブロック211の集合体であるダイ213が複数個存在しており、さらにブロック211には複数のページ212が存在している。
本実施例におけるSSD21は、複数の不揮発性記憶媒体(フラッシュメモリ等)と、それらを制御するデバイスコントローラとを備える記憶デバイスであればよく、フォームファクタが公知のHDDやSSD等のものに限定されるものではない。また、不揮発性記憶媒体には、NOR型またはNAND型フラッシュメモリの他、磁気抵抗メモリであるMRAM(Magnetoresistive random access memory)や、抵抗変化型メモリであるReRAM(resistance random access memory)、強誘電体メモリであるFeRAM(Ferroelectric random access memory)等の各種半導体メモリが使用されても良い。
続いて、本明細書における、SSD21の論理容量と物理容量、およびブロック閉塞に伴う各容量の変化について説明する。
図4は、SSDの論理容量と、物理容量との関係を示す概念図である。図4の上段に記載されている円柱は、SSD21がストレージコントローラ10に提供する論理アドレス空間を表している。そしてこの円柱の高さが、論理アドレス空間の論理容量(図1の論理容量20−1〜20−3に相当)を表している。例えばSSD21の論理容量が1.0TBの時、ストレージコントローラ10は、そのSSD21に合計1.0TB分のデータを格納できると認識する。
次に、図4の下段に記載されている長方形は、SSD21が有する物理アドレス空間を表し、長方形の高さがその物理容量を示している。SSD21の物理容量は、ユーザデータ容量51と予備容量52に大別され、その合計値は、SSD21に搭載されたFMチップ210の合計容量に等しい。
ユーザデータ容量51は、論理容量50に対応しており、ユーザやストレージコントローラ10から書き込まれたデータを格納するために確保される記憶領域の量である。そのため、ユーザデータ容量51と、論理容量50のサイズは等しい。
一方、予備容量は、SSD21が消去済みのブロックを生成する、リクラメーション処理を実行するために必要な容量である。一般に、SSDは予備容量52が枯渇すると、消去ブロックを生成することが出来なくなるため、予備容量52はSSDにとって必須の容量である。本実施例では、SSD21がリクラメーション処理実行に要する、予備容量の最小値を「最小予備容量」と呼ぶ。ただし予備容量52を大きくとることで、リクラメーション処理を効率的に行えるため、一般的なSSDは予備容量52に余裕を設けている。また本実施例に係るSSD21でも、予備容量52の初期値は最小予備容量よりも大きい。
またSSD21の内部では、ブロック211やページ212を、ユーザデータの格納用や予備用に、役割を分担して使用する。ただし、各ブロック211やページ212の役割は固定的ではなく、動的に変更できる。
次に、ブロックを閉塞させた際の、論理容量と物理容量の管理方法について説明する。図4の横軸は時間の経過を示している。(a)はSSD21の初期状態を示しており、いずれのFMチップ210にも故障は発生していない。(b)は、いくつかのブロックが閉塞した状態を示している。SSD21はブロック閉塞時に、まず予備容量52を縮小させていく。ただし、(b)の状態ではそのサイズは最小予備容量に到達している。(b)の状態まで、ユーザデータ容量51は維持されるため、論理容量50の変動は生じない。次に(c)は、(b)の状態から、さらなるブロックの閉塞が発生した際の状態を示している。このときSSD21は、予備容量52を縮小することは出来ないので、ユーザデータ容量51を縮小する。そのため、論理容量50の縮小が発生する。これ以降、SSD21内でブロックの閉塞が発生するたびに、SSD21は論理容量50を縮小させ続けていく。
次に、RAIDグループ内の記憶領域について、図5を用いて説明する。ストレージ装置1は、複数のSSD21を1つのRAIDグループとして管理する。そしてRAIDグループ内で1つ(あるいは2つ)のSSD21に障害が発生してデータアクセスできなくなった場合に、残りのSSD21内のデータを用いて、障害が発生したSSD21に格納されていたデータを復旧できるようにしている。
図5において、SSD#0(20−0)〜SSD#3(20−3)はそれぞれ、SSD21がストレージコントローラ10に提供している論理アドレス空間(LBA空間)を表している。SSD#0(20−0)〜SSD#3(20−3)の上端が、論理アドレス空間の先頭アドレス(LBA=0)を表し、下端が論理アドレス空間の終端である。ストレージコントローラ10は、複数(図5の例では4つ)のSSD20から1つのRAIDグループ30を構成し、RAIDグループ30に所属する各SSD21の論理アドレス空間(SSD#0(20−0)〜SSD#3(20−3))を、ストライプブロック(301)と呼ぶ複数の固定サイズの記憶領域に分割して管理している。
また図5では、RAIDグループ30のRAIDレベル(RAID技術におけるデータ冗長化方式を表すもので、一般的にはRAID1〜RAID6のRAIDレベルがある)がRAID5である場合の例を表している。図5において、RAIDグループ30内の、「0」、「1」、「P」などのボックスがストライプブロックを表しており、ストライプブロックのサイズはたとえば、64KB、256KB、512KBなどである。また、各ストライプブロックに付されている、「1」等の番号のことを、「ストライプブロック番号」と呼ぶ。
図5で、ストライプブロックのうち、「P」と記載されているストライプブロックは、冗長データ(パリティ)の格納されるストライプブロックであり、これを「パリティストライプ」と呼ぶ。一方、数字(0、1等)が記載されているストライプブロックは、ホスト2などの上位装置から書き込まれるデータ(冗長データではないデータ)が格納されるストライプブロックである。このストライプブロックのことは、「データストライプ」と呼ばれる。パリティストライプには、複数のデータストライプを用いて生成される冗長データが格納される。
以下、パリティストライプと、当該パリティストライプに格納される冗長データを生成するために用いられるデータストライプのセット(たとえば図5中の要素300)のことを、「ストライプライン」と呼ぶ。本実施例に係るストレージ装置1の場合、図5に示されているストライプライン300のように、1つのストライプラインに属する各ストライプブロックは、SSD#0(20−0)〜SSD#3(20−3)上の同じ位置(アドレス)に存在するという規則で、ストライプラインが構成される。
さらにストレージコントローラ10は、RAIDグループ内に連続配置される複数のストライプラインを「チャンク」と呼ばれる管理単位で管理する。図5に示されているように、1つのチャンク31は、複数のストライプラインを有する。ただし1つのチャンク31が1つのストライプラインのみを有する構成でもよい。
またストレージコントローラ10は、ホスト2にはRAIDグループの記憶領域とは異なる、1以上の仮想的な記憶空間を提供する。この仮想的な記憶空間を「仮想ボリューム」と呼ぶ。仮想ボリュームの記憶空間も、所定サイズの領域ごとに分割管理される。この所定サイズの領域は「仮想チャンク」と呼ばれる。仮想チャンクとは、仮想ボリュームの記憶領域の割り当て単位である。
1つの仮想チャンクには1つのチャンクがマップされ、ホスト2から仮想チャンクに対するデータライトがあった時、マップされたチャンクにデータが格納される。ただし、仮想チャンクにチャンクがマップされる時、チャンク内のデータストライプのみがマップされる。そのため、仮想チャンクのサイズは、チャンクに含まれる全データストライプの合計サイズに等しい。ストレージコントローラ10は、後述する仮想ボリューム管理テーブル500に、仮想チャンクとチャンクのマッピングを記録することで、仮想チャンクに割り当てられる記憶領域(チャンク)を管理している
仮想ボリュームが定義された直後は、仮想ボリュームの各仮想チャンクには、チャンクがマップされていない。ストレージコントローラ10は、ホスト2から仮想チャンク上の領域に対するライト要求を受信した時にはじめて、当該領域に対してライトされたデータの書き込まれるべき、SSD21の論理アドレス空間上の記憶領域(チャンク)を決定する。ここで決定されるチャンクは、まだどの仮想チャンクにも割り当てられていないチャンク(未使用チャンク)のなかから1つのチャンクが決定される。
図6は、仮想ボリュームとRAIDグループ、プールの関係を表す図である。
本実施例に係るストレージ装置1では、ある仮想ボリュームの仮想チャンクに割り当て可能なチャンクには、所定の制約がある。仮想チャンクに割り当て(マップ)可能な記憶領域(チャンク)を有する1または複数のRAIDグループは、プールという管理単位で管理される。ストレージ装置1は1以上のプールを管理可能であり、ストレージ装置1が複数のプールを管理する場合、仮想チャンクに割り当て可能な記憶領域を有する1または複数のRAIDグループは、複数のプールのうちいずれか1つのプールで管理される。以下、あるプール(仮にプールXと呼ぶ)で管理されるRAIDグループ(及びこのRAIDグループ内のチャンク)のことを、「プールXに属するRAIDグループ(及びチャンク)」と呼ぶ。また、各仮想ボリューム(の仮想チャンク)にチャンクが割り当てられる場合、割り当て可能なチャンクが属するプールは、あらかじめ仮想ボリュームごとに1つに定められている。
図7は、ストレージコントローラのメモリに格納される管理情報の内容を表す図である。
ストレージコントローラ10のメモリ14には、少なくとも仮想ボリューム管理テーブル500、プール管理テーブル550、RAIDグループ管理テーブル650が存在する。以下で、これらの管理テーブルの内容について説明していく。
図8は、仮想ボリューム管理テーブルの構成を説明する図である。
仮想ボリューム管理テーブル500は、ストレージ装置1内に定義された各仮想ボリューム内の仮想チャンクと、チャンクとのマッピング関係を管理するためのテーブルである。仮想ボリューム管理テーブル500は仮想ボリューム#501、プール#502、仮想ボリュームLBA範囲503、仮想チャンク番号504、RAIDグループ番号505、チャンク番号506のカラムを有する。仮想ボリューム管理テーブル500の各行(レコード)は、仮想ボリューム#501及び仮想チャンク番号504により特定される仮想チャンクに対し、RAIDグループ番号505及びチャンク番号506で特定されるチャンクがマッピングされていることを表す。なお、以降では、仮想ボリューム管理テーブル500に限らず、各種情報を管理するテーブルの各行のことを「レコード」と呼ぶ。
また初期状態では、仮想チャンクにチャンクはマッピングされていない。仮想チャンクに対するライト要求をホスト2から受け付けた時点で、仮想チャンクにチャンクがマッピングされる。仮想チャンク番号504で特定される仮想チャンクに対してチャンクがマッピングされていない場合、当該レコードのRAIDグループ番号505及びチャンク番号506には無効値(NULL)が格納される。
またプール#502は、仮想ボリュームに割り当て可能なチャンクの属するプールの識別番号が格納される。つまり、仮想ボリューム#501で特定される仮想ボリュームの仮想チャンクに割り当て可能なチャンクは原則として、プール#502に属するチャンク(またはRAIDグループ)に限定される。また仮想ボリュームLBA範囲503は、仮想チャンク番号504で特定される仮想チャンクが、仮想ボリューム上のどの範囲に相当する領域であるかを表す情報である。一例として、図8の行(レコード)500−1では、仮想ボリュームLBA範囲503は“0x0500〜0x09FF”、仮想チャンク番号504は“2”であるから、仮想ボリューム#0の仮想チャンク#2は、仮想ボリューム#0のLBAが0x0500〜0x09FFの領域に相当することを表している。
図9は、プール管理テーブルの構成を説明する図である。
プールは、プール管理テーブル550によって管理される。プール管理テーブル550は、プール#551、RG#552、チャンク#553、RAIDグループLBA554、ステータス555、プール残容量556のカラムを有する。プール管理テーブル550において、各レコードはチャンクについての情報を格納するためのものである。各レコードのRG#552は、チャンクの属しているRAIDグループのRAIDグループ番号を表し、プール#551は、チャンクの属しているプールのプール番号を表す。さらにプール#551は、RG#552で特定されるRAIDグループの属するプール番号を表しているともいえる。
また、各レコードのRAIDグループLBA554は、チャンクがRAIDグループ上のどの範囲に位置づけられているかを表す情報である。ステータス555は、チャンクが仮想チャンクに割り当てられているか(マップされているか)否かを表す情報である。ステータス555に「割当済」が格納されている場合、チャンクが仮想チャンクに割り当てられていることを表す。逆にステータス555に「未割当」が格納されている場合、チャンクが仮想チャンクに割り当てられていないことを意味する。また、ステータス555に「割当不可」が格納されている場合、チャンクを仮想チャンクに割り当てることが出来ないことを意味する。具体的には、SSDの容量縮退にともない、データの格納が出来なくなった(もしくは、ストレージコントローラ10がデータの格納をやめた)チャンクである。プール残容量556は、ステータス555が「未割当」のチャンクの合計サイズである。プール残容量556はまた、プールの未使用容量とも呼ばれる。
図10は、RAIDグループ管理テーブルの構成を説明する図である。
RAIDグループは、RAIDグループ管理テーブル650によって管理される。RAIDグループ管理テーブル650は、RG#651、ドライブ番号652、RAIDグループLBA653、RAIDレベル654、ドライブ容量655、RAIDグループ残容量656のカラムを有する。RG#651にはRAIDグループのRAIDグループ番号が格納され、ドライブ番号652には、RG#651で特定されるRAIDグループに属するSSD21の識別子が格納される。RAIDグループLBA653には、ドライブ番号652で特定されるSSD21の各領域が、RAIDグループ上のどの領域に位置づけられるかを表す情報である。
RAIDレベル654は、当該のRAIDグループのRAID構成を示している。ドライブ容量655には、ドライブ番号652で特定される記憶デバイス(SSD21)の論理容量が格納される。なお、ドライブ容量655は、容量縮退により変化し得る。RAIDグループ残容量656は、RAIDグループの未使用部分の合計値、つまりRAIDグループの領域のうち仮想チャンクにマップされていない部分の合計値である。
図11は、SSDコントローラのメモリに格納される管理情報の内容を表す図である。
SSD21のメモリ204には少なくとも、論理物理変換テーブル1100、ブロック管理テーブル1150、FMエラー特性テーブル1200、構成情報管理テーブル1300、FM寿命特性テーブル1400が格納される。
図12は、構成情報管理テーブルの構成を説明する図である。
構成情報管理テーブル1300は、SSD21の容量に関する情報を格納している。構成情報管理テーブル1300は、総物理容量1301、論理容量1302、予備容量1303、閉塞済容量1304、最小予備容量1305のカラムを有する。総物理容量1301は、SSD21が有するFMチップの合計容量である。論理容量1302は、SSD21がユーザやストレージコントローラ10に対して現在提供している論理容量である。予備容量1303は、SSD21の現時点の予備容量のサイズである。閉塞済容量1304は、現時点で閉塞状態となっているFMチップのブロックの合計サイズである。最小予備容量1305は、SSD21がリクラメーションを実行するために最低限必要な予備容量のサイズである。すなわち、図12では、当該のSSDは合計3.0TB分の物理容量を有しており、現時点で、1.6TBの容量を論理容量としてユーザやストレージコントローラ10に提供していることを示している。さらに当該のSSDは、現時点で1.0TBの予備容量を有しており、既に0.4TBのブロックが閉塞状態にあることを示している。
図13は、論理物理変換テーブルの構成を説明する図である。本実施例に係るSSD21は、複数のFMチップ210を有する。SSD21は全FMチップ210内の各ブロックに対し、SSD21内で一意な識別番号を付して管理しており、この識別番号はブロック番号(ブロック#)と呼ばれる。また、ブロック内の各ページには、ブロック内で一意な番号を付して管理しており、この番号は物理ページ番号(または物理ページ#)と呼ばれる。ブロック#と物理ページ#が特定されることにより、SSD21内の物理ページが一意に特定される。
またSSD21は、SSD21が有する論理アドレス空間を、所定のサイズの領域に分割して管理している。この領域のことを、「論理ページ」と呼ぶ。各論理ページは、SSD内で一意な識別番号が付されている。この識別番号は論理ページ番号(論理ページ#)と呼ばれる。論理物理変換テーブル1100は、SSD21の管理する論理ページと物理ページのマッピングを管理するためのテーブルで、論理物理変換テーブル1100には、論理ページにマッピングされる物理ページの、ブロック#と物理ページ#の情報が、論理ページごとに格納されている。
論理物理変換テーブル1100は、図13に示されているように、SSD LBA1101、論理ページ#1102、ステータス1103、ブロック#1104、物理ページ#1105のカラムを有する。論理物理変換テーブル1100の各レコードには、論理ページ#1102で特定される論理ページについての情報が格納される。SSD LBA1101には、論理ページに対応する、SSD21がストレージコントローラ10に提供している論理アドレス空間上のLBA(の範囲)が格納される。SSD21がストレージコントローラ10からアクセス要求を受信すると、SSD21は、SSD LBA1101と論理ページ#1102を用いて、アクセス要求に含まれているLBAを、論理ページ#に変換することができる。そして、ブロック#1104、物理ページ#1105にはそれぞれ、論理ページにマッピングされる物理ページを特定するための情報(つまりブロック#と物理ページ#)が格納される。
ステータス1103は、論理ページに物理ページがマッピングされているか否かを表す情報が格納される。SSD21の論理ページには、初期状態では物理ページはマッピングされていない。ストレージコントローラ10からライト要求を受信した時点で、ライト要求でライト対象となる論理ページに対して物理ページがマッピングされる。ステータス1103に「割当」が格納されている場合、物理ページが論理ページにマッピングされていることを表す。逆にステータス1103に「未割当」が格納されている場合、物理ページが論理ページにマッピングされていないことを意味する(この時、論理ページに対応するブロック#1104と物理ページ#1105にはNULL(無効値)が格納される)。
良く知られているように、一旦書き込みが行われた物理ページは上書きが不可能である(物理ページの上書きをしたい場合、物理ページの属するブロック全体を一度消去する必要がある)。そのためSSD21では、ある論理ページに対する更新(上書き)要求をストレージコントローラ10から受信すると、更新データを、更新前データの書き込まれている物理ページ(旧物理ページと呼ぶ)とは異なる物理ページ(新物理ページと呼ぶ)に格納する。そして更新対象となる論理ページに対応する、ブロック#1104と物理ページ#1105に、新物理ページのブロック#、物理ページ#を格納する。
図14は、ブロック管理テーブルの構成を説明する図である。
ブロック管理テーブル1150は、ブロック/物理ページの状態を管理するためのテーブルである。ブロック管理テーブル1150内の各レコードには、SSD21内の物理ページについての情報が格納される。ブロック管理テーブル1150は、ブロック#1151、物理ページ#1152、ステータス1153、エラービット数1154、WR時刻1155、WR後経過時間1156、消去回数1157のカラムを有する。
ブロック#1151、物理ページ#1152は、ステータス1153はそれぞれ、論理物理変換テーブル1100の、ブロック#1104、物理ページ#1105、ステータス1103と同じ情報である。つまりある物理ページが論理ページに割り当てられると、割り当てられた物理ページのブロック#、物理ページ#が、論理物理変換テーブル1100のブロック#1104及び物理ページ#1105に格納され、ステータス1103に「割当」が格納される。そして同時に、割り当てられた物理ページのステータス1153(ブロック管理テーブル1105内の)にも、「割当」が格納される。論理ページに割り当てられていない物理ページのステータス1153には「未割当」または「未使用」が格納される。
物理ページは、論理ページに割り当てられてデータの書き込みが行われた後、論理ページへの割り当てが解除されることがある。たとえばSSDコントローラ200が論理ページに対する上書きを行った場合である。その場合、上書き対象の論理ページに割り当てられていた物理ページは、論理ページへの割り当てが解除され、ステータス1153には「未割当」が設定される。
一方論理ページに割り当てられておらず、かつ未書き込みの物理ページのステータス1153には「未使用」が設定される。ステータス1153が「未使用」の物理ページはデータの書き込みが可能な状態にあるが、ステータス1153が「未割当」の物理ページはデータの書き込み(上書き)はできない状態にある。ステータス1153が「未割当」の物理ページをデータの書き込みが可能な状態にするためには、リクラメーション処理により、その物理ページが属するブロックの消去を行う必要がある。消去が行われたブロック内の全物理ページのステータス1153は、「未使用」に変更される。
また、ブロック管理テーブル1150のステータス1153には、「閉塞」と「閉塞(予約)」という状態が存在する。「閉塞」とは、当該のブロックまたは物理ページが閉塞状態にあり、現在使用されていない状態であることを示している。「閉塞(予約)」とは、当該ブロックまたは物理ページに閉塞処理が必要で、処理の実行待ちの状態であることを示している。具体的には、後述のFM診断処理にて、当該のブロックが寿命到達間近と判断された場合に、SSDコントローラ200は、当該のブロックのステータスを「閉塞(予約)」に変更し、実際の閉塞処理を実施した後に、ステータスを「閉塞」へ変更する。
エラービット数1154には、後述するFM診断処理が実行された時に発生したエラービット数が格納される。詳細はFM診断処理の説明の際に説明する。WR時刻1155は、物理ページに対してライト(あるいは消去)が行われた最新の時刻が格納される(以下、「WR」とは、「ライト」を意味する)。またWR後経過時間1156には、後述するFM診断処理が実行された時に、物理ページが最後にライト(または消去)されてからの経過時間が格納される。消去回数1157には、ブロック消去の累積回数が格納される。
図15と図16を用いて、FMの特性について説明する。
SSD21が物理ページにデータを格納する際、データからECC(Error Correcting Code)を算出し、データとともにECCも物理ページに格納する。フラッシュメモリの特性として、物理ページへのデータの格納後、時間が経つにつれ、格納されたデータに含まれるエラーが増加する傾向がある。なお、ここでの「エラー」の意味を簡単に説明しておく。たとえばSSD21がFMチップ上のある領域(1ビット領域とする)に“0”を格納したとしても、時間が経つにつれ、データ内容が“0”から“1”に変化してしまうことがある。本明細書ではこの現象を「エラーが発生した」と呼んでいる。また、エラーの発生した1ビット領域(またはエラーの発生した1ビット領域から読み出された1ビットのデータ)のことを「エラービット」と呼ぶ。エラーの発生する原因は、その領域が多数回書き替えられて劣化した、あるいはその領域の品質(格納されたデータ内容を維持する能力)が先天的に悪かった場合などがある。ただし物理ページに格納されるデータにはECCが付加されているため、データ読み出し時にエラーが含まれていても、読み出し対象領域に含まれているエラービットの数が所定数以下であれば、ECCを用いたデータ訂正が可能である。
訂正可能なビット数の上限は、付加されるECCの強度(エラー訂正能力)に依存する。物理ページに格納されたデータに、ECCによる訂正が可能なビット数の上限(以下、これを「訂正限界閾値」と呼ぶ)を超える数のエラービットが含まれるようになると、そのデータは読み出し不可能になる。SSDコントローラ200は、ある物理ページに格納されたデータに、あらかじめ定められた閾値以上のエラービットが含まれていた場合、その物理ページを含むブロックに格納されていたデータを、別のブロックに移動させる。本明細書では、この処理を「リフレッシュ処理」と呼ぶ。また、このあらかじめ定められた閾値のことを「リフレッシュ閾値」と呼ぶ。リフレッシュ閾値は、訂正限界閾値よりも小さい。
リフレッシュ処理では、リフレッシュが必要と判断されたブロック(「移動元ブロック」と呼ぶ)からデータを読み出し、別のブロック(「移動先ブロック」と呼ぶ)にそのデータを書き込む。移動元ブロックからデータを読み出す際に、エラービットはECCを用いて訂正されるため、移動先ブロックにデータを書き込む際には、エラービットの発生数はリセットされる。これにより、データがSSD21から読み出し不可能になる事態(アンコレクタブルエラーが発生する事態)を極力避けることができる。
図15は、FMのライト後経過時間とエラービット数との関係を説明する図である。
一般的なFMの特性として、物理ページに格納されたデータに含まれるエラービットの数は、ライト後の経過時間とともに増加する傾向がある。図15は、FMの記憶領域(たとえば物理ページ)から読み出されたデータに含まれるエラービット数と、ライト後経過時間との関係を表したグラフの一例を示している。図15の曲線は、ある2つのFMチップの物理ページに対してデータをライトして、時間tが経過した後、それぞれのページをリードした際に、検出されたエラービットの数をプロットしたグラフの一例である。グラフの横軸は、物理ページへのライト後の経過時間を表し、縦軸は物理ページのリードを行った際に検出されたエラービットの数(以下では、「エラービット検出数」と呼ぶ)を表す。
図15から分かる通り、ライト後の経過時間が長くなるほど、リード時に検出されるエラービット数は単調増加する傾向がある。ただしこの特性は、FMの品質や、消去回数などによって変化する。
図15では、点線で示した(a)と(a)’のグラフは、高品質なFM(仮に、FMサンプル#1とする)の特性例を示しており、一点鎖線で示した(b)と(b)’のグラフは、低品質なFM(仮にFMサンプル#2とする)の特性例を示している。(a)と(b)は、消去回数がN回の状態であり、(a)’と(b)’はより消去回数が進んだM回(M>N)の状態を示している。
まず、品質の差について述べる。同じ消去回数N回の状態である、(a)と(b)を比べると、同じ経過時間(t1またはt2)で、低品質なFM#2(b)には高品質なFM#1(a)よりも多くのエラービットが発生している。さらに、(a)は、t1とt2のいずれの時刻においても、訂正限界閾値60とリフレッシュ閾値61を下回っているため、アンコレクタブルエラー発生の危険性は低い。しかし一方の(b)は、時刻t1の時点でリフレッシュ閾値61を超過しており、さらに時刻t2の時点では訂正限界閾値60も超過しているため、時刻t1の時点で、リフレッシュ処理を実施しなければ、(b)はアンコレクタブルエラーが生じる可能性が大である。
次に、消去回数の影響について述べる。(b)と(b)’に着目すると、時刻t1の時点で、(b)’には(b)よりも多くのエラービットが発生していることが判る。さらに、(b)’は時刻t1の時点で訂正限界閾値60を超過しており、アンコレクタブルエラーの状態となることも判る。
このように、一般的に品質の悪いFMチップは、ライト後の経過時間に対するエラービットの検出数が多く(すなわち、エラー特性が悪い)、反対に、品質のよいFMチップは、ライト後の経過時間に対するエラービットの検出数が少ない(すなわち、エラー特性が良い)という傾向がある。また、ブロックの消去回数に対しては、消去回数が多くなるほど、エラー特性が悪化する傾向にある。
次に、FMの消去回数とエラービット数の関係について説明する。図16は、FMの物理ページのリードを行った際に検出されたエラービット数と、その物理ページの属するブロックの消去回数の関係を表したグラフの一例である。
グラフの横軸は、ブロックの消去回数を表し、縦軸はエラービット検出数を表す。寿命閾値61’は、SSDコントローラ200が、ブロックが寿命に到達したと判断する閾値で、訂正限界閾値60と等しい。また、閉塞閾値62’は、SSDコントローラ200が、当該のブロックが寿命間近であると判断する閾値であり、この閾値を超過したブロックは、閉塞されることとなる。本実施例に係るSSD21では、リフレッシュ閾値61と閉塞閾値62’は等しい。
点線で示した(c)のグラフは、高品質なFMであるFMサンプル#1の特性例を示しており、一点鎖線でしめした(d)のグラフは、低品質なFMであるFMサンプル#2の特性例を示している。このように低品質なFMは高品質なFMに比べて、実際の消去回数が劣ることが判る。すなわち、低品質なFM(d)は、N回の消去で寿命に到達するものの、高品質なFM(c)はM回(M>N)まで消去が可能である。
本実施例に係るSSD21には、その特性を事前に把握済みのFMチップが用いられる。ただし各FMチップ(またはブロック、ダイ)は、それらが同種(同一型番)のFMチップであったとしても同一の特性を有するわけではなく、FMチップ(またはブロック、ダイ)ごとに特性のばらつきがある。そのため、本実施例に係るSSD21では、その製造時(あるいは出荷時)に、いくつかのFMチップについて収集された特性情報を保持している。具体的には、本実施例に係るSSD21の開発者・製造者は、SSD21に使用されるFMチップと同種(同一型番)のチップのうち、品質の異なるいくつかのFMチップを選択し、選択されたFMチップの特性(エラービット数とWR後経過時間と消去回数の関係等)を事前に計測する(以下、ここで選択されたFMチップのことを「サンプルFM」と呼ぶ)。そして各SSD21のFMエラー特性テーブル1200やFM寿命特性テーブル1400に、事前に計測したサンプルFMの特性の情報を記録しておく。SSD21は運用が開始されると(ストレージコントローラ10からのI/Oが開始されると)、検出したエラービットの数と、FMエラー特性テーブル1200の情報を比べることで、各ブロックの特性が、事前評価したどのサンプルFMの特性に近いかを判定し、各ブロックの品質を推定する。さらに、推定されたブロックの品質とFM寿命特性テーブル1400の情報に基づいて、ブロックの劣化具合を把握し、残寿命を予想することが出来る。
図17は、FMエラービット特性テーブルの構成を説明する図である。
FMエラー特性テーブル1200は、図15のグラフに相当する情報を保持するためのテーブルであり、ブロック消去回数1201、サンプル#1202、WR後の経過時間におけるエラービット数を格納する1203〜1205のカラムを有する。ブロック消去回数1201は、ブロックの消去回数を示している。サンプル#1202は、SSD21が保持する、サンプルFMの特性情報の識別番号(サンプルナンバー)を示している。なお、図では、#1から#Nの、N個のサンプルデータを保持していることを示している。また、サンプル#1202の値は、1が最も高品質なサンプルFMであり、Nが最も低品質なサンプルFMであることを示している。エラービット数1203は、WR後の経過時間が0秒から1秒未満の物理ページをリードした時に、各サンプルFMで発生したエラービット数を示している。同様にエラービット数1204はWR後の経過時間が1秒からk秒未満の、エラービット数1205はWR後の経過時間がk秒以上の場合における、各サンプルFMで発生したエラービット数をそれぞれ示している。なお、1203〜1205のWR後経過時間の単位は秒でなくても良い。
なお、図17では、エラー特性のパラメータとして、消去回数とWR後の経過時間を用いたが、この他にもエラービット発生数に影響を及ぼす要因がある。たとえばFMチップの温度や、ページの種別(MSBページやLSBページ)、または、FMへデータの読み書きや消去を指示する際のパラメータ(例えば、ページアクセス時の低速/高速モードの指定(チップビジー時間が変化)や、ページリード時の読み出し電圧)などによっても、エラービット発生数は異なり得る。そのため別の実施形態として、エラービット検出数と、これらの情報(FMチップの温度や、ページの種別、または、FMへデータの読み書きや消去を指示する際のパラメータ等)の関係が、FMエラー特性テーブル1200に追加されても良い。
図18は、FM寿命特性テーブルの構成を説明する図である。
FM寿命特性テーブルは、図16のグラフに相当する情報を保持するためのテーブルであり、サンプル#1401と、寿命判定閾値1402と、閉塞判定閾値1403のカラムを有する。サンプル#1401は、SSD21が保持しているサンプルFMの特性情報のサンプルナンバーを示しており、FMエラー特性テーブル1200の、サンプル#1202と対応している。寿命判定閾値1402は、各サンプルFMのブロックが寿命に到達した際のブロック消去回数である。つまり、ブロック内の物理ページのリード時に発生したエラービット数が図16の寿命閾値61’であった時のブロック消去回数である。閉塞判定閾値1403は、各サンプルでブロックの閉塞処理が必要と判断する際の消去回数であり、つまりブロック内の物理ページのリード時に発生したエラービット数が図16の閉塞閾値62’であった時のブロック消去回数である。
これ以降では、各処理のフローについて説明する。
図19は、ストレージコントローラタスクのフローチャートである。ストレージコントローラ10のCPU11は、定期的にこのストレージコントローラタスクを実行する。以下では、ストレージコントローラ10を主語として各処理の説明を行うが、特に断りのない限り、各処理はCPU11で実行されることを意味する。
ストレージコントローラ10は、ホスト計算機2からリード又はライトの要求を受信済みであるか否かを判定する(S10)。何れの要求も受けていない場合(S10:No)、ストレージコントローラ10は、S20へ進む。
リード又はライトの要求を受信済みの場合(S10:Yes)、ストレージコントローラ10は、この要求がリードコマンド又はライトコマンドの何れであるかを判定する(S40)。この要求がリードコマンドであった場合(S40:リードコマンド)、ストレージコントローラ10は、リード処理を実行する(S50)。この要求がライトコマンドであった場合(S40:ライトコマンド)、ストレージコントローラ10は、ライト処理を実行する(S60)。リード処理、ライト処理の詳細については後述する(図21、図20参照)。またS50またはS60の処理の後、ストレージコントローラ10はS20の処理を行う。
S20において、ストレージコントローラ10は、SSD21からの容量縮退要求を受領しているか否かを判定する(S20)。容量縮退要求なしと判断した場合(S20:No)は、ストレージコントローラ10は次にS30の処理を行う。容量縮退要求ありと判断した場合(S20:Yes)は、ストレージコントローラ10は容量縮退処理を実行(S70)した後、S30の処理を行う。容量縮退処理の詳細については後述する(図25参照)。
S30において、ストレージコントローラ10は、ストレージ装置1の停止要求を受信済みであるか否かを判定する(S30)。ストレージ装置1の停止要求は、ユーザが管理ホスト5を用いて停止指示を発行することで、管理ホスト5から通知される。
停止の要求を受信済みの場合(S30:Yes)、ストレージコントローラ10は、ストレージ装置1の停止処理を実行し、処理を終了する。停止の要求を未受信の場合(S30:No)、ストレージコントローラ10は、S10から処理を繰り返す。
図20は、ストレージコントローラのライト処理のフローチャートである。この処理は図19のS60に相当する処理である。
ホスト2は、ストレージコントローラ10に、ライト要求及びライトデータを送信する(S61)。ストレージコントローラ10は、ホスト2からライト要求を受信すると、仮想ボリューム管理テーブル500及びプール管理テーブル550を参照し、そのライト要求が指定する仮想ボリュームのライト先のアドレスを含む仮想チャンクに、チャンクが割り当て済みであるか否かを判定する(S62)。
そのライト先の仮想チャンクにチャンクが未割り当ての場合(S62:No)、ストレージコントローラ10は、プール管理テーブル550の中から、ステータス555が「未割当」のチャンク(未使用チャンク)を選択し、ライト先の仮想チャンクに選択された未使用チャンクを割り当てる。そしてストレージコントローラ10は、仮想ボリューム管理テーブル500とプール管理テーブル550の内容を更新する(S63)。ライト先の仮想チャンクにチャンクが割り当て済みである場合(S62:Yes)、ストレージコントローラ10は、S63は実行しない。
S62、S63の後、ストレージコントローラ10は、ライトデータをキャッシュに格納し(S64)、ライト先の記憶デバイスへライトコマンド及びライトデータを送信する(S65)。なお、ここではライト要求で指定されているアドレスを、ライト先の記憶デバイス及びライト先のSSD21内アドレスに変換する処理が必要だが、これは従来のストレージ装置で行われているアドレス変換と同様のため、説明を略す。そして、ストレージコントローラ10は、ライト先の記憶デバイスからライト完了通知を受信する(S66)。ストレージコントローラ10は、ホスト2に、ライト要求に対する完了応答を送信する(S67)。ホスト2は、ストレージコントローラ10からライト要求に対する完了応答を受信し(S68)、処理を終了する。
図21は、ストレージコントローラのデータリード処理のフローチャートである。この処理は図19のS50に相当する処理である。ホスト2は、ストレージコントローラ10に、リード要求を送信する(S51)。ストレージコントローラ10は、ホスト2からリード要求を受信すると、そのリード要求が指定する仮想ボリュームのアドレスを含む仮想チャンクを特定する。さらにストレージコントローラ10は、仮想ボリューム管理テーブル500を用いて、仮想チャンクに割り当てられているチャンクを特定し、またプール管理テーブル550、RAIDグループ管理テーブル650を用いることにより、チャンクを構成する記憶デバイスの中から、リード先の記憶デバイスを特定する(S52)。ストレージコントローラ10は、その特定した記憶デバイスにリードコマンドを送信する(S53)。
S53の後、ストレージコントローラ10は、その記憶デバイスからリードデータを受信し(S54)、そのリードデータをキャッシュに格納する(S55)。ストレージコントローラ10は、ホスト2に、リード要求に対する完了応答及びリードデータを送信する(S56)。ホスト2は、ストレージコントローラ10から完了応答及びリードデータを受信し(S57)、処理を終了する。
図22は、SSDコントローラタスクのフローチャートである。SSDコントローラ200のCPU201は、定期的にこのSSDコントローラタスクを実行する。以下では、SSDコントローラ200を主語として各処理の説明を行うが、特に断りのない限り、各処理はCPU201で実行されることを意味する。
SSDコントローラ200は、上位装置であるストレージコントローラ10からリードやライトの要求を受領したか否かを判定する(S100)。要求を受領していない場合(S100:No)、SSDコントローラ200は、S120へ進む。上位装置からの要求を受領した場合(S100:Yes)、SSDコントローラ200は、要求の内容を判定する(S220)。
この要求がリードコマンドであった場合(S220:リードコマンド)、SSDコントローラ200は、論理物理変換テーブル1100の情報をもとに、リード対象のデータを格納する物理ページから、バッファにデータを転送し(S240)、次にバッファに格納したデータと、リードコマンドに係る処理の完了の通知(応答)を上位装置に転送する(S260)。その後、SSDコントローラ200はS120に進む。この要求がライトコマンドであった場合(S220:ライトコマンド)、SSDコントローラ200は、先ずライト対象のデータをバッファに格納し(S280)、次に、ブロック管理テーブル1150の情報をもとに、未使用の物理ページ(ステータス1153が「未使用」の物理ページ)を特定し、バッファに格納したデータを特定された物理ページに格納し、ライトコマンドに係る処理の完了の通知(応答)を上位装置に返送する(S300)。ここでSSDコントローラ200は、論理物理変換テーブル1100の内容の更新も行う。さらにSSDコントローラ200は、ブロック管理テーブル1150で管理されている物理ページのうち、今回データを格納した物理ページのステータス1153を「割当」に変更し、WR時刻1155(ブロック管理テーブル1150内にある)に、現在時刻(S300実行時の時刻)を格納する。またSSDコントローラ200は、これまで論理ページにマッピングされていた物理ページのステータス1153を、「未割当」に変更する。その後、SSDコントローラ200はS120以降の処理を実施する。
S120では、SSDコントローラ200は、リクラメーション処理が必要か否かを判断する(S120)。リクラメーション処理の必要がない場合(S120:No)は、SSDコントローラ200はS160へ進む。リクラメーション処理の必要がある場合(S120:Yes)、SSDコントローラ200はリクラメーション処理を実行する(S140)。リクラメーション処理により消去が行われたブロックは、その消去回数1157に1が加算される。またリクラメーション処理は、未使用の物理ページ(またはブロック)が不足してきた時に行われる。そのためS120では、SSDコントローラ200は未使用の物理ページ(またはブロック)の数が所定数を下回ったか否かの判定を行うことで、リクラメーション処理の要否を判定する。
S160では、SSDコントローラ200はFMの診断処理を実行する(S160)。FM診断処理の詳細については後述する(図23)。S180では、SSDコントローラ200は、容量の縮退処理を実行する(S180)。容量の縮退処理については後述する(図24)。
S200において、SSDコントローラ200は、SSD21の停止の要求を受信済みであるか否かを判定する(S200)。SSD21の停止要求は、ストレージコントローラ10から通知される。たとえばストレージコントローラ10が管理ホスト5からストレージ装置1の停止要求を受信した時、ストレージコントローラ10は各SSD21に停止要求を発行する。停止の要求を受信済みの場合(S200:Yes)、SSDコントローラ200は、SSD21の停止処理を実行し、処理を終了する。停止の要求を未受信の場合(S200:No)、SSDコントローラ200は、S100から処理を繰り返す。
以上の処理により、SSD21は、ストレージコントローラ10から送信されたライトデータの格納や、リードデータの読み出しをすることができる。また、FMチップ210の状態を監視し、その結果に応じて、容量の縮退処理を実行することが出来る。
図23は、FM診断処理(図22 S160)のフローチャートである。
SSDコントローラ200は、診断が必要なブロックが存在するか否かを判断する(S161)。例えば、前回FM診断処理を実行してから所定の時間が経過した場合に、診断が必要なブロックが存在すると判断してもよい。あるいは、ストレージコントローラ10から、診断実行の指示などの特定のコマンドを受領した場合に、診断が必要なブロックが存在すると判断しても良い。さらに、ブロックの消去回数やページのアクセス回数がN回に到達したブロック(またはページ)が存在する場合など、特定のイベントが発生した場合に、診断が必要なブロックが存在すると判断しても良い。
診断が不要と判断した場合(S161:No)、SSDコントローラ200は処理を終了する。診断が必要と判断した場合(S161:Yes)は、SSDコントローラ200は診断が必要なブロックを1つずつ選択し、各ブロックについてS162以降の処理を繰り返し実施する。S162でSSDコントローラ200は、診断対象のブロックを選択し(S162)、診断対象ブロック内の物理ページのデータをリードする(S163)。S163で行われる物理ページのリード処理を、「検査読込」と呼ぶ。なお、S163では全ての物理ページをリードしてもよいが、一部のページのみをリードするようにしてもよい。一部のページのみをリードする場合には例えば、データを保持している物理ページ(ステータス1153が「割当」の物理ページ)のみ、または物理ページ番号が偶数や奇数などの特定のページのみを対象にするようにしても良い。また、検査読込の過程で、CPU201は下流I/F203から、検査読込を行った物理ページにおいて発生したエラービット数、アンコレクタブルエラーの発生有無についての情報を通知される。
S164でSSDコントローラ200は、S163の検査読込によってアンコレクタブルエラーが発生した物理ページが存在するか否かを判断する。アンコレクタブルエラーは、ハードウェアの偶発的な故障等の要因で発生し得る。アンコレクタブルエラーが発生した物理ページが存在する場合には(S164:Yes)、SSDコントローラ200はS169を実行する。S169でSSDコントローラ200は、論理物理変換テーブル1100を参照することで、その物理ページは論理ページにマッピングされているか、つまりその物理ページにユーザデータが格納済みであるか判断する(S169)。
ユーザデータが格納済みでない場合(S169:No)、S170の処理は行われない。一方、S169でユーザデータが格納済みの場合(S169:Yes)、SSDコントローラ200はストレージコントローラ10に、アンコレクタブルエラーが発生した物理ページにマッピングされている論理ページのアドレス(SSD LBA1101)を通知する(S170)。
またS170でSSDコントローラ200は、アンコレクタブルエラーが発生した物理ページを含むブロックの中に、論理ページにマッピングされている物理ページがある場合、その物理ページのデータを別のブロックの未使用物理ページに移動し、論理物理変換テーブル1100、ブロック管理テーブル1150を更新する。ただしこの時、アンコレクタブルエラーが発生した物理ページについては、データ移動が行われない。アンコレクタブルエラーが発生した論理ページのアドレスを通知されたストレージコントローラ10は、RAID技術によるリビルド処理を実施することでその論理ページのデータを復旧し、復旧されたデータを論理ページに書き戻す。
S170の後、SSDコントローラ200はS171の処理を行う。S171の処理は後述する。
S164でアンコレクタブルエラーが発生した物理ページが存在しない場合には(S164:No)、SSDコントローラ200はS165以降の処理を実行する。S165では、SSDコントローラ200は、検査対象の物理ページに発生していたエラービットの数と、その物理ページのデータライト後の経過時間、および、その物理ページが所属するブロックの消去回数などの統計的な情報と、メモリ204内に保持するFMエラー特性テーブル1200、FM寿命特性テーブル1400の情報をもとに、当該のブロックの品質と、劣化度を予想する(S165)。
ブロックの品質と劣化度の予測方法を説明する。まずSSDコントローラ200はブロック管理テーブル1150を参照することで、検査対象の物理ページのWR時刻1155と現在時刻からライト後経過時間を算出する。続いてSSDコントローラ200は、検査対象の物理ページが属するブロックの消去回数1157を特定する。続いてSSDコントローラ200は、ブロックの消去回数とライト後経過時間と、物理ページのエラービット数をもとに、検査対象の物理ページ(が属するブロック)の特性が、FMエラー特性テーブル1200に格納されているどのサンプルデータに最も近いか判定する。たとえば検査対象の物理ページのライト後経過時間が0.5秒、エラービット数が20回、そしてその物理ページが属するブロックの消去回数が1回の場合、この物理ページ(の属するブロック)の特性は、サンプル#1202が“2”のサンプルデータ(行1200−2)に最も近い。そのためこの場合には、SSDコントローラ200は検査対象の物理ページは、サンプル#1202が“2”のサンプルFMと同種の品質(特性)を持つと推定する。なお、S163にて複数の物理ページを検査対象とした場合には、例えばエラービット数の最悪値や平均値などを用いて、当該FMの品質を推定しても良い。
続いてSSDコントローラ200は、FM寿命特性テーブル1400を参照し、サンプル#1401の値が先に特定されたサンプル#1202と等しい行の閉塞判定閾値1403と、検査対象の物理ページが属するブロックの消去回数を用いることで、劣化度を算出する。本実施例において劣化度とは、
検査対象の物理ページが属するブロックの消去回数 ÷ 閉塞判定閾値1403
で算出される値である。
そしてSSDコントローラ200は、S165の結果を元に、検査対象ブロックの劣化が進行しており寿命間近の状態にあるか否かを判断する(S166)。例えば、寿命間近の状態とは、検査対象ブロックの劣化度が1を超過する場合、つまり検査対象ブロックの消去回数が、閉塞判定閾値1403を上回っている場合である。S166にて、当該のブロックが寿命到達間近ではない(劣化度が1以下)と判断した場合(S166:No)、SSDコントローラ200は、ブロック管理テーブル1150の、エラービット数1154やWR後経過時間1156などのパラメータを更新した後(S168)、S161に戻る。S166にて、当該のブロックが寿命到達間近であると判断した場合(S166:Yes)、SSDコントローラ200は当該のブロックに対して、データのリフレッシュ処理を行う(S167)。リフレッシュ処理に伴い、当該ブロックに格納されていたデータは別のブロックに移動される。もし当該ブロック内の物理ページのうち、論理ページにマッピングされている物理ページがあった時には、SSDコントローラ200は、データ移動先の物理ページが論理ページにマッピングされるように、論理物理変換テーブル1100、ブロック管理テーブル1150の内容の更新を行う。
S171では、SSDコントローラ200は、S164にてアンコレクタブルエラーが発生していた物理ページを含むブロック、またはS166にて寿命到達間近と判断されたブロックに対して、ブロックの閉塞処理を予約する。具体的にはSSDコントローラ200は、閉塞対象のブロックについて、ブロック管理テーブル1150のステータス1153を「閉塞(予約)」に変更する。なお、本実施例に係るSSD21では、閉塞はブロック単位に行われる。そのため、たとえばS164でアンコレクタブルエラーの発生した物理ページが検出された場合、その物理ページを含むブロック内の全物理ページについて、ステータス1153が「閉塞(予約)」に変更される。また、実際の閉塞処理は、後述の容量縮退処理(図24)にて実施される。
SSDコントローラ200は、S171の処理を実行した後、再びS161から処理を繰り返す。診断が必要なブロックがなくなるまで、この処理が実行される。
図24は、SSDコントローラの容量縮退処理のフローチャートである。なお、以下では、SSD21の論理空間が縮退される場合、SSD21の論理アドレス空間の終端の領域から順に使用停止される例を説明する。たとえばSSD21の論理容量がDページ縮退される時、論理アドレス空間の終端の領域からDページ分の領域が使用停止される。ここでの「使用停止」の意味は、使用停止対象の論理ページに物理ページがマッピングされている場合に、物理ページのマッピングを解除することである。
SSDコントローラ200は、まず、閉塞が必要なブロックの有無を確認する(S181)。この確認は、ブロック管理テーブル1150のステータス1153が「閉塞(予約)」となっているブロックの有無を確認することで実施される。
S181にて、閉塞が必要なブロックがないと判断した場合(S181:No)、SSDコントローラ200は、処理を終了する。閉塞が必要なブロックが存在すると判断した場合(S181:Yes)、SSDコントローラ200はS182の処理を行う。S182でSSDコントローラ200は、当該ブロックの閉塞により、ブロックが枯渇するか否かを判断する(S182)。例えばブロックが枯渇する状態とは、予備容量はすでに最小予備容量にまで削減されている状態(たとえば図4の(c)の状態)で、かつブロックをこれ以上閉塞させると、論理容量が完全にゼロとなる場合や、論理容量の残量が特定の閾値を下回る場合などである。
S182にて、ブロックが枯渇すると判断した場合(S182:Yes)、SSDコントローラ200は、これ以上の容量の縮小は困難であると判断し、ストレージコントローラ10に対して、当該SSDの交換が必要な旨を通知する(S183)。この通知を受けたストレージコントローラ10は、管理ホスト5の画面に、SSD21の交換が必要である旨のメッセージと交換対象のSSD21の識別子等の情報を出力する等を行うことで、ストレージ装置1のユーザ(管理者)に当該SSDの交換を促す。その後、SSDコントローラ200は、処理を終了する。一方、S182にて、ブロックが枯渇しないと判断した場合(S182:No)、SSDコントローラ200は、ブロックの閉塞が可能であると判断し、S184以降の処理を行う。
S184では、SSDコントローラ200は、論理容量の縮退が必要であるか(すなわち、予備容量がすでに最小予備容量にまで到達しているか)否かを、構成情報管理テーブル1300の情報をもとに判断する(S184)。S184にて、論理容量の縮退は必要ない(すなわち、予備容量が最小予備容量に到達していない)と判断した場合(S184:No)、SSDコントローラ200は当該のブロックを閉塞し、予備容量の縮退を実行する(S185)。なお、S185では、S171で閉塞の予約が行われたブロックのステータス1153が、「閉塞(予約)」から「閉塞」に変更される。以下では、S185(あるいはS188)でステータス1153が「閉塞」に変更されるブロックを、閉塞対象ブロックと呼ぶ。さらにS185では、予備容量1303から、閉塞対象ブロックの合計サイズが減算され、また閉塞済容量1304には閉塞対象ブロックの合計サイズが加算される。その後、SSDコントローラ200は、処理を終了する。
S184にて、論理容量の縮退が必要である(すなわち、予備容量がすでに最小予備容量に到達している)と判断した場合(S184:Yes)、SSDコントローラ200は、ストレージコントローラ10に、容量縮退要求を通知する(S186)。このとき、SSDコントローラ200は、ストレージコントローラ10に対して、論理容量の変更予定サイズ(現在の論理容量から閉塞対象ブロックの合計サイズを減じた値)、または使用を制限するLBAの範囲などを通知する。なお、図19の説明の際に述べたとおり、容量縮退要求を受領したストレージコントローラ10は、図25に示す処理を実行することで、その可否を判断し、判断結果を含んだメッセージをSSDコントローラ200に返送する。SSDコントローラ200は、ストレージコントローラ10からメッセージが返送されて来るのを待つ。
ストレージコントローラ10からのメッセージを受け取ったSSDコントローラ200は、S187にて、論理容量の縮退の実行可否を判断する(S187)。S187にて、ストレージコントローラ10から縮退OKのメッセージを受け取った場合(S187:Yes)、SSDコントローラ200は、閉塞対象ブロックを閉塞し、さらに論理容量の縮退処理を実行する(S188)。S188の処理はS185と類似しているが、予備容量1303ではなく、論理容量1302が減算される点が、S185で行われる処理と異なる。また、論理容量1302の減算される量は、閉塞対象ブロックの合計サイズである。
また、論理容量の縮退に伴い、論理アドレス空間の終端のブロック(1または複数)が使用できなくなる。そのためSSDコントローラ200は、論理物理変換テーブル1100で管理されている論理ページのうち、論理容量を超過する部分には物理ページがマッピングされていない状態に変更する。たとえば論理容量縮退後の論理容量が、Kページになる場合、SSDコントローラ200は論理物理変換テーブル1100の論理ページ#1101がK以上の論理ページについて、そのステータス1103を「未割当」に変更し、ブロック#1104、物理ページ#1105をNULLにする。また、ステータス1103が「未割当」に変更された論理ページに物理ページがマッピングされていた場合、SSDコントローラ200はその物理ページについて、ブロック管理テーブル1150のステータス1153を「未割当」に変更する。その後、SSDコントローラ200は処理を終了する。
S187にて、ストレージコントローラ10から縮退NGのメッセージを受け取った場合(S187:No)、SSDコントローラ200は、当該ブロックの閉塞と、論理容量の縮退処理を中断し(S189)、処理を終了する。
図25は、ストレージコントローラ10で実施される容量縮退処理のフローチャートである。この処理は、SSD21から容量縮退要求を受領した時(図19 S20:Yes)に実施される。実施例1に係るSSD21が通知する容量縮退要求には、論理容量縮退を実施した場合の論理容量の情報が含まれる。論理容量縮退を実施した場合の論理容量とは上で述べたとおり、現在のSSD21の論理容量から閉塞対象ブロックの合計サイズを減じた値である。以下ではこの量を「縮退後論理容量」と呼ぶ。
なお、本実施例では、SSD21の論理容量がnページ縮退されると、そのSSD21の論理アドレス空間の終端の領域からnページが使用停止される例を説明している。RAIDグループについても同様で、RAIDグループの終端領域から順に使用不可になる。
ストレージコントローラ10は、まず、容量縮退要求を通知してきたSSD21の縮退後論理容量を取得する(S71)。以下、容量縮退要求を通知してきたSSD21を「対象SSD」と呼ぶ。続いてストレージコントローラ10は、縮退後論理容量を元に対象SSDの属するRAIDグループの容量及び残容量と、使用不可となるチャンクの数(仮想チャンクに割り当てることができなくなるチャンク数)を算出する(S72)。以下では、対象SSDの属するRAIDグループのことを「対象RAIDグループ」と呼ぶ。
RAIDグループの容量は、RAIDグループを構成するSSD21のうち、論理容量が最小のSSD21の論理容量にN(NはRAIDグループを構成するSSD21の数)を乗じることで算出される。またRAIDグループの容量を、1チャンクのサイズで割ることで、RAIDグループ内で使用可能なチャンク数が算出できる(以下では、対象SSDの論理容量縮退後の、対象RAIDグループ内で使用可能なチャンク数を“C”と表記する)。ストレージコントローラ10は、現在対象RAIDグループに定義されているチャンク数とCの差を算出することで、削減が必要なチャンク数(仮想チャンクに割り当てることができなくなったチャンク数)を求めることができる。以下、仮想チャンクに割り当てることができなくなったチャンク数をDと表記する。
さらに、仮想チャンクに割り当てることができなくなったチャンク数(D)を用いて、仮想チャンクに割り当てることができなくなったチャンクも求めることができる。論理容量縮退前に、対象RAIDグループのチャンク#553が1〜kのチャンクが使用可能(チャンクのステータス555が「割当済」または「未割当」)の状態にある場合、チャンク#553が(k−(D−1))〜kのチャンクが、仮想チャンクに割り当てることができなくなったチャンクである。以下ではこれらのチャンクを「移動対象チャンク」と呼ぶ。
S73でストレージコントローラ10は、仮想チャンクに割り当てることができなくなったチャンクがあるか判定する。S73で、仮想チャンクに割り当てることができなくなったチャンクがあると判断された場合(S73:Yes)、ストレージコントローラ10はS74に進み、対象RAIDグループと同一のプールに存在する別のRAIDグループに十分な残容量があるか(所定の閾値以上の残容量、たとえば移動対象チャンク以上の残容量があるか)を判断する(S74)。
S74の判断にて、別のRAIDグループに、十分な残容量がないと判断した場合(S74:No)、ストレージコントローラ10はユーザにプールの容量追加を要求する(S81)。具体的には、ストレージコントローラ10は管理ホスト5の画面に、プールに新たなRAIDグループを追加する必要がある旨のメッセージを出力する等を行うことで、ストレージ装置1のユーザ(管理者)に、RAIDグループの追加を促す。その後、ストレージコントローラ10はS82に進み、論理容量の縮退要求を通知してきたSSD21に対して、縮退NGのメッセージを送信する(S82)。その後、ストレージコントローラ10は処理を終了する。
一方、S74にて、対象RAIDグループと同一プールに属する別のRAIDグループに、十分な残容量があると判断した場合(S74:Yes)、ストレージコントローラ10は移動対象チャンクからデータを読み出して、別のRAIDグループの未使用チャンク(これを「移動先チャンク」と呼ぶ)にデータを移動する(S75)。移動対象チャンクが仮想チャンクにマッピングされていた場合には、ストレージコントローラ10は同時に、移動先チャンクが仮想チャンクにマッピングされるように、仮想ボリューム管理テーブル500の内容を更新する。なお、移動対象チャンクの属しているRAIDグループのRAIDレベル654と、移動先チャンクの属しているRAIDグループのRAIDレベル654とは、同じでも良いし異なっていてもよい。両者のRAIDレベル654が異なっている場合には、データ移動の際に、パリティの再計算などが必要になる。
その後、ストレージコントローラ10は移動対象チャンクが使用していた記憶領域を解放する。具体的には、ストレージコントローラ10は、プール管理テーブル550中の、移動対象チャンクのステータス555を「割当不可」に変更する(S76)。その後、ストレージコントローラ10は、S78へ進む。
S76の終了後、またはS73で仮想チャンクに割り当てることができなくなったチャンクはないと判断された場合(S73:No)、ストレージコントローラ10は、対象SSDのドライブ容量655を、S71で取得した論理容量に更新する(S77)。またストレージコントローラ10は、RAIDグループ残容量656をS72で求めた値に更新する(S78)。その後、ストレージコントローラ10は、仮想チャンクに割り当てることができなくなったチャンクのステータス555を「割当不可」にするとともに、プール残容量556を更新し(S79)、また論理容量の縮退要求を通知してきたSSD21に対して、縮退OKのメッセージを送信する(S80)。その後、ストレージコントローラ10は処理を終了する。
上で説明したように、実施例1に係るストレージ装置1は、寿命到達間近のブロックを検出し、アンコレクタブルエラーが発生する前にそのブロックのデータを別のブロックに移動して、容量縮退処理を行う。従来の容量縮退処理では、ブロックが読み出せなくなってから縮退が行われていたため、リビルド処理を行うことが必要であったが、実施例1に係るストレージ装置1では寿命到達間近のブロックを検出するため、リビルド処理の実行を不要にしている。
また、フラッシュメモリ等の記憶媒体は、必ずしも品質が均一ではないため、消去回数のみに基づいた寿命の判定を行うと、正確な寿命の判定ができないことがある。そのために、本実施例に係るSSDでは、あらかじめ評価した、品質の異なる複数のサンプルFMのエラー特性情報(FMエラー特性テーブル1200)と寿命特性情報(FM寿命特性テーブル1400)をSSD内に記録している。そしてSSDが、SSD内の各記憶領域(ブロック、物理ページ)の品質を判定する際、記憶領域を診断した時のエラー特性(エラービット数とWR後経過時間)とサンプルFMのエラー特性とを比較することで、記憶領域の品質がどのサンプルFMの品質に近いか決定し、推定されたサンプルFMの寿命特性情報を用いて、診断対象の記憶領域の寿命を判定する。これにより、SSD内に異なる品質の記憶媒体(FMチップ)が混在している場合でも、正確に寿命を推定することができる。
また、SSD21の論理容量が縮小される時、当該SSDが属するRAIDグループの容量も削減される。RAIDグループの容量を削減すると、そのRAIDグループは、削減された領域に存在していたデータを保持できなくなる。そのため、ストレージコントローラ10は、SSD21の論理容量縮退の前に、縮退後論理容量に基づいて、当該SSDの属するRAIDグループから削減が必要となるチャンクを決定し、そのチャンクのデータを別のRAIDグループに移動する。つまりストレージコントローラ10は、論理容量縮退が行われるSSDから、論理容量縮退のために必要な量のデータ(少なくとも削減される論理容量以上のデータである)を別のRAIDグループのSSDに移動することで、データ消失を防いでいる。
なお、上では、削減の必要なチャンク(仮想チャンクに割り当てることができなくなったチャンク)が存在し(S73:Yes)、別のRAIDグループに空きがある場合(S74:Yes)、削減の必要なチャンクのデータを全て別のRAIDグループに移動する例を説明した。ただし、S73の判定において、ストレージコントローラ10は、削減の必要なチャンクのうち、仮想チャンクに割り当てられているチャンク(ステータス555が「割当済」のチャンク)が存在するか否かを判定し、S75で仮想チャンクに割り当てられているチャンクのみを、別のRAIDグループに移動するようにしてもよい。
なお、上で説明した容量縮退処理の例では、SSD21の容量を縮退させる際、SSD21の論理アドレス空間の終端領域から順に縮退させる例を説明した。そしてそれに伴い、SSD21の属するRAIDグループのチャンクも、RAIDグループの終端領域にあるチャンクから順に使用不可(仮想チャンクへの割り当て不可)になった。ただし容量縮退の方法は、必ずしもこれに限定されない。容量縮退の際、SSD21の論理アドレス空間の任意の領域を縮退させてもよい。
たとえばSSD21は容量縮退要求を行う時、縮退後論理容量に代えて、縮退対象となる論理アドレス空間の範囲をストレージコントローラ10に通知する。ここで通知される論理アドレス空間の範囲は、任意の領域が通知されてよい。ストレージコントローラ10は、SSD21から受領したアドレス範囲を含むチャンクを使用不可(仮想チャンクへの割り当て不可)にし、必要に応じてそのチャンクのデータを別のRAIDグループに移動すればよい。
また別の実施形態として、ストレージコントローラ10が縮退対象の領域を決定してもよい。この場合、ストレージコントローラ10はSSD21から通知された縮退後論理容量をもとに、削除が必要なチャンク数を求め、その後削除対象のチャンクを決定する。このとき、任意のチャンクを削除対象としてよいが、仮想チャンクにマッピングされていないチャンクを削除対象とすることが望ましい。これはデータの移動が不要になるからである。削除対象のチャンク決定後、ストレージコントローラ10は削除対象のチャンクに対応するSSD21のLBAの範囲を特定し、SSD21に対し、このLBAの範囲を通知すればよい。