以下図面について、本発明の一実施の形態を詳述する。
(1)第1の実施
(1−1)本実施の形態による情報システムの構成
図1において、1は全体として、第1の実施の形態による情報システムを示す。本情報システム1は、ストレージシステム100及びホスト110を備えて構成され、これらがSAN(Storage Area Network)などのネットワーク120を介して接続されている。
ホスト110は、ユーザアプリケーションが動作するコンピュータ装置(上位装置)であり、ネットワーク120を介してストレージシステム100に必要なデータを読み書きする。ネットワーク120を介したストレージシステム100及びホスト110間の通信は、例えば、ファイバーチャネル(FC:Fibre Channel)などのSCSI(Small Computer System Interface)コマンドが転送可能なプロトコルを用いて行われる。
なお、以下においては、容量仮想化機能がストレージシステム100に搭載されているものとして説明を進める。容量仮想化機能は、ホスト110に仮想的な論理ボリューム(以下、これを仮想ボリュームと呼ぶ)を提供し、ホスト110から当該仮想ボリュームに対するライト要求に応じて動的に「ページ」と呼ばれる所定大きさの容量単位で記憶領域を仮想ボリュームに割り当て、割り当てた記憶領域にライト対象のデータを書き込む機能である。ただし、本発明は、ストレージシステム100に容量仮想化機能が搭載されていない場合にも有効である。
また、通常、容量仮想化技術における制御単位は、上述のように「ページ」であるが、本実施の形態における「ページ」は、特許文献3に示される従来の容量仮想化技術で用いられるページに相当する。このため本実施の形態の「ページ」のサイズは、フラッシュメモリにおける消去単位である「ブロック」と呼ばれる記憶領域よりも大きい。
通常、フラッシュメモリの分野では、データをリード/ライトする記憶領域の単位をページと呼び、ページはブロックよりも容量小さいのが一般的である。しかしながら、上述のように本実施の形態における「ページ」は、容量仮想化技術におけるページを意味しており、そのサイズは「ブロック」よりも大きい。そこで以下においては、フラッシュメモリにおけるデータのリード/ライトの単位を、容量仮想化技術の制御単位であるページと区別するため、「セグメント」と呼ぶものとする。
図2は、本実施の形態によるストレージシステム100の構成例を示す。ストレージシステム100は、1つ以上のストレージコントローラ200、キャッシュメモリ210、共有メモリ220、フラッシュパッケージ230、タイマ240、及び、これらの構成要素を接続する1つ以上の接続装置250を備えて構成される。
ストレージコントローラ200は、ストレージシステム100全体の動作制御を司る制御装置であり、プロセッサ260及びメモリ270を備えて構成される。プロセッサ260は、メモリ270に格納されたプログラムに基づいて、ホスト110から発行されたリード/ライト要求に対するリード/ライト処理や、後述のような各種処理を実行する。またメモリ270は、例えば半導体メモリから構成され、必要なプログラムや情報を保持するために利用される。
キャッシュメモリ210及び共有メモリ220は、DRAM(Dynamic Random Access Memory)などの揮発性メモリから構成される。本実施の形態においては、これらキャッシュメモリ210及び共有メモリ220がバッテリなどでバックアップされることにより不揮発化されているものとする。ただし、本発明は、キャッシュメモリ210及び共有メモリ220が不揮発化されていなくても有効である。
キャッシュメモリ210は、フラッシュパッケージ230に読み書きされるデータを一時的に保持するために利用される。ただし、かかるデータのうち、ストレージコントローラ200からのアクセス頻度が高いデータについては、そのままキャッシュメモリ210に保持される。ストレージコントローラ200は、ホスト110からのライト要求及びライト対象のデータを受信した場合、そのデータをキャッシュメモリ210に書き込んだ段階でライト処理の完了通知をそのホスト110に送信する。ただし、ストレージコントローラ200がそのデータをフラッシュパッケージ230に格納し終えた段階でそのホスト110にライト処理の完了通知を送信するようにしてもよい。
共有メモリ220には、キャッシュメモリ210の制御情報や、ストレージシステム100内の重要な管理情報、ストレージコントローラ200間の連絡情報及び同期情報などが格納される。
フラッシュパッケージ230は、ホスト110からのデータを読み書きするための記憶領域を提供する記憶装置である。フラッシュパッケージ230の詳細については後述する。ストレージコントローラ200は、フラッシュパッケージ230を所定個数単位でRAID(Redundancy Array Independent Device)を構成するグループ(以下、これをフラッシュパッケージグループと呼ぶ)280として管理する。1又は複数のフラッシュパッケージグループ280が提供する記憶領域がプールとして管理され、当該プール上に1又は複数の論理ボリュームが定義される。そしてこれら論理ボリュームがデータをリード/ライトするための記憶領域としてホスト110に提供される。
なお1つのフラッシュパッケージグループ280を構成するフラッシュパッケージ230の個数は、そのフラッシュパッケージグループ280に設定されたRAIDレベルによって異なる。ただし、ストレージコントローラ200にRAID機能が搭載されていない場合においても本発明は有効である。
また以下においては、ストレージシステム100内の記憶媒体がすべてフラッシュパッケージ230であるものとするが、例えば、ハードディスク装置のようなフラッシュパッケージ230以外の他の記憶媒体がストレージシステム100に搭載されていてもよい。さらに以下においては、各フラッシュパッケージ230の容量はすべて等しいものとするが、本発明は、一部のフラッシュパッケージ230の容量が他のフラッシュパッケージ230の容量と異なっている場合でも有効である。
タイマ240は、現在時刻をカウントする時計であり、すべてのストレージコントローラ200から参照可能である。ただし、タイマ240が管理する時刻は絶対時刻である必要はなく、タイマ240がある時点からの経過時間に相当する値を示すカウンタのようなものであってもよい。
接続装置250は、例えばネットワークスイッチから構成され、ストレージシステム100内の各構成要素を接続する。なお本実施の形態では、高信頼化のために、各フラッシュパッケージ230がそれぞれ複数の接続装置250を介して複数のストレージコントローラ200と接続されているものとする。ただし、1つのフラッシュパッケージ230が1つの接続装置250にしか接続されていない場合であっても本発明は有効である。
図3は、フラッシュパッケージ230の構成例を示す。フラッシュパッケージ230は、複数のフラッシュチップ300、パッケージプロセッサ310、パッケージメモリ320、バッファ330、パッケージバス340及びパッケージバス転送装置350を備えて構成される。なお本発明は、フラッシュパッケージ230が圧縮・伸張回路360A又は360Bをもち、圧縮処理をフラッシュパッケージ230内で実行できる場合にも有効である。
ここで図3において、圧縮・伸長回路360Aは、バッファ330に格納されたデータを圧縮/伸長して再度バッファ330に書き戻す圧縮・伸長回路であり、圧縮・伸長回路360Bは、バッファ330及びパッケージバス転送装置350間でデータやり取りする際にそのタイミングでデータを圧縮/伸長する圧縮・伸長回路である。フラッシュパッケージ230にデータの圧縮・伸長機能を搭載する場合、かかる2つの圧縮・伸長回路360A,360Bのうちのいずれか一方をフラッシュパッケージ230に搭載するようにすればよい。
フラッシュチップ300は、QLC技術を用いたフラッシュメモリチップである。このフラッシュチップ300は、パッケージプロセッサ310の制御のもとに、セルモードをQLCモードからTLCモードに動的に変更することができる。
パッケージプロセッサ310は、パッケージメモリ320に格納されたプログラムに従って各種処理を実行するプロセッサである。例えば、パッケージプロセッサ310は、ストレージコントローラ200からのリード/ライト要求を受け付け、対応するプログラムに従って、受け付けたリード/ライト要求に応じたリード/ライト処理を実行する。
パッケージメモリ320は、例えば、揮発性の半導体メモリから構成され、パッケージプロセッサ310が実行するプログラムや、フラッシュチップ300の管理情報などを保持する。なお、フラッシュチップ300の管理情報は重要な情報であるので、計画停止時や突発的な障害の発生時に、管理情報を特定のフラッシュチップ300に退避できることが望ましい。そこでパッケージプロセッサ310及びパッケージメモリ320を一定時間バックアップするためのバッテリをパッケージメモリ320に搭載し、障害などが発生した場合に、パッケージプロセッサ310がパッケージメモリ320に格納されている管理情報を特定のフラッシュチップ300に退避するようにフラッシュパッケージ230を構築するようにしてもよい。
バッファ330は、フラッシュチップ300にリード/ライトされるデータを一時的に保持する半導体メモリ(例えば揮発性メモリ)である。本実施の形態の場合、パッケージプロセッサ310は、ストレージコントローラ200からライト要求が与えられた場合、ライト対象のデータをフラッシュチップ300に書き込んだ段階でそのライト要求に応じたライト処理の完了をストレージコントローラ200に通知する。ただし、本発明は、受け取ったライト対象のデータをバッファ330に書き込み終えた段階で、ライト処理の完了をストレージコントローラ200に通知する場合にも有効である。
パッケージバス340は、バッファ330及びフラッシュチップ300間でデータ転送を行うための内部バスであり、1本以上存在する。性能向上のために、複数のパッケージバス340を設けることが一般的であるが、パッケージバス340が1本しか存在しない場合でも本発明は有効である。
パッケージバス転送装置350は、パッケージバス340ごとに設けられ、パッケージプロセッサ310の指示に従って、対応するパッケージバス340を介してバッファ330及びフラッシュチップ300間でデータを転送する。
(1−2)共有メモリに格納される各種情報
図4は、本実施の形態におけるストレージシステム100の共有メモリ220に格納される各種情報の構成例を示す。この図4に示すように、共有メモリ220には、論理ボリューム情報2000、実ページ情報2100、空き実ページ情報ポインタ2200、フラッシュパッケージグループ情報2300、フラッシュパッケージ情報2500、仮想ページ容量情報2600、及び、使用不可実ページ情報ポインタ2700が格納される。
上述のように、本実施の形態のストレージシステム100には、容量仮想化機能が搭載されている。通常、容量仮想化機能において、記憶領域の割り当て単位は、ページと呼ばれる。本実施の形態においても、論理ボリュームの空間は「仮想ページ」という単位で管理され、フラッシュパッケージグループ280が提供する物理的な記憶領域は「実ページ」という単位で管理される。なお容量仮想化機能では、論理ボリュームの記憶容量を実際の記憶媒体の容量よりも大きく見せる。このため、仮想ページの数のほうが実ページの数より大きいのが一般的である。
ストレージシステム100は、かかる容量仮想化機能に基づいて、ストレージコントローラ200がホスト110からのライト要求においてデータのライト先として指示された仮想ページに実ページが割り当てていない場合には、その仮想ページに実ページを割り当て、割り当てた実ページにかかるデータを書き込む。図4の仮想ページ容量情報2600は、このような仮想ページの容量を示す情報である。
なお本実施の形態の場合、仮想ページ容量情報2600で示される仮想ページの容量と、実ページの容量は必ずしも同じではない。これは実ページに書き込まれるデータに、RAIDタイプによって大きさが異なる冗長データが含まれるためである。従って、実ページの容量は、その実ページを提供するフラッシュパッケージグループ280のRAIDタイプによって決まる。
例えば、「RAID1」のようにデータを2重に書き込むRAIDタイプの場合、実ページの容量は、仮想ページの容量の2倍になる。また「RAID5」のように、N台の記憶装置の容量に対し、1台分の記憶装置の容量の冗長データを生成するRAIDタイプの場合、仮想ページの容量の(N+1)/Nの容量が実ページの容量として確保される。当然ながら、「RAID0」のように、冗長性がないRAIDタイプの場合、仮想ページの容量と、実ページの容量とが等しくなる。なお、本実施の形態においては、仮想ページの容量はストレージシステム100の中で共通であるが、ストレージシステム100内で仮想ページの容量を共通としない場合においても本発明は有効である。
図5は、図4に示された論理ボリューム情報2000の具体的なデータ構成を示す。一般的に、ホスト110は、アクセス先の論理ボリュームのID及び当該論理ボリューム内のアドレスと、対象となるデータのデータ長とを指定して、リード要求やライト要求を発行する。論理ボリューム情報2000は、このようなホスト110からのリード/ライト要求に応じたリード/ライト処理を実行するために必要な情報であり、ストレージシステム100内に定義された論理ボリュームごとにそれぞれ存在する。
図5に示すように、1つの論理ボリューム情報2000は、論理ボリュームID欄2001、論理容量欄2002及び論理ボリュームRAIDタイプ欄2003と、複数の実ページポインタ欄2004とを備えて構成される。
そして論理ボリュームID欄2001には、対応する論理ボリュームに付与されたその論理ボリュームに固有の識別子(論理ボリュームID)が格納される。また論理容量欄2002には、ホスト110から見たその論理ボリュームの容量が格納される。
論理ボリュームRAIDタイプ欄2003には、対応する論理ボリュームのRAIDタイプ、例えば、「RAID0」又は「RAID1」などの情報が格納される。なお、対応する論理ボリュームを提供するフラッシュパッケージグループ280のRAIDタイプが、例えば「RAID5」のように、N台の記憶装置(ここではフラッシュパッケージ230)に対して冗長データを1台の記憶装置に格納するRAIDタイプの場合には、Nの具体的数値も論理ボリュームRAIDタイプ欄2003に格納される。ただし、任意のRAIDタイプが指定できるわけでなく、少なくとも1つのフラッシュパッケージグループ280がもつRAIDタイプである必要がある。
実ページポインタ欄2004は、その論理ボリューム内の各仮想ページにそれぞれ対応させて設けられる。最初の実ページポインタ欄2004が論理ボリュームの先頭の仮想ページに対応し、2番目、3番目、……の実ページポインタ欄2004は、それぞれ論理ボリュームの2番目、3番目、……の仮想ページにそれぞれ対応する。そして、これら実ページポインタ欄2004には、それぞれ対応する仮想ページに割り当てられた実ページの実ページ情報2100(図4、図6)へのポインタが格納される。なお、本実施の形態のストレージシステム100は、上述のように仮想容量機能をサポートしているため、仮想ページに実ページが割り当てられるのは、論理ボリュームを定義した契機ではなく、その仮想ページに実際にデータの書き込みが行われる契機である。従って、まだデータの書き込みが行われていない仮想ページの場合、対応する実ページポインタ欄2004には、情報が存在しないことを意味する「Null」が格納される。
図6は、図4に示された実ページ情報2100の具体的なデータ構成を示す。実ページ情報2100は、ストレージシステム100内のすべての実ページにそれぞれ対応させて設けられ、対応する実ページの管理情報が格納される。本実施の形態では、ライト頻度に応じて、フラッシュパッケージ230のセルモードをブロック単位でQLCモードからTLCモードへと動的に変更して、フラッシュパッケージ230の保証期間内の寿命を保証しようというものである。ブロックのセルモードを変更した場合、フラッシュパッケージ230に格納できるデータの容量も変化する。本実施の形態では、フラッシュパッケージグループ280を構成する各フラッシュパッケージ230において、すべてのブロックのセルが最も多いデータを格納できるモード(つまりQLCモード)に設定されている場合に、フラッシュパッケージグループ280に格納可能な容量を基準として、実ページの数が決まっているものとする。
図6に示すように、実ページ情報2100は、フラッシュパッケージグループID欄2101、実ページアドレス欄2102、空き実ページポインタ欄2103、ページ割当て時刻欄2104、ページ書込み量欄2105、移動中フラグ欄2106、移動先実ページ欄2107及び移動待ちフラグ欄2108を備えて構成される。
そしてフラッシュパッケージグループID欄2101には、該当する実ページを提供するフラッシュパッケージグループ280に付与されたそのフラッシュパッケージグループ280に固有の識別子(フラッシュパッケージグループID)が格納される。また実ページアドレス欄2102には、対応する実ページに対して割り当てられた、そのフラッシュパッケージグループ280内での相対的なアドレス(実ページアドレス)が格納される。
空き実ページポインタ欄2103には、対応する実ページに仮想ページが割り当てられていない場合に、次の仮想ページが割り当てられていない実ページの空き実ページ情報2100を指すポインタが格納される。ただし、対応する実ページに仮想ページが割り当てられている場合には、空き実ページポインタ欄2103には「Null」が格納される。
またページ割当て時刻欄2104には、その実ページを現在割り当てている仮想ページに対して当該実ページを割り当てた時刻が格納される。さらにページ書込み量欄2105には、例えばデータを更新するなどのために、対応する実ページ内に格納されたデータのデータ量(ページ書込み量)が格納される。ページ書込み量/(現在時刻−ページ割当て時刻欄2104に格納されたページ割当て時刻)により、その実ページに対するデータのライト頻度が算出される。なお、「ライト頻度」の詳細については、後述する。
本実施の形態では、実ページに格納されたデータの消去単位は、フラッシュメモリの消去単位であるブロックとする。また、本実施の形態の各フラッシュパッケージ230には、上述のようにブロックのセルモードをQLCモードからTLCモードへと動的に変更させる機能をもっている。従って、フラッシュパッケージ230の容量は、当該フラッシュパッケージ230内の各ブロックのセルモードに応じて変化することになる。
移動中フラグ欄2106、移動先実ページ欄2107及び移動待ちフラグ欄2108には、それぞれ対応する実ページのデータを別の実ページに移動するときに使用される情報が格納される。実際上、移動中フラグ欄2106には、対応する実ページのデータを別の実ページに移動中のときにオンに設定されるフラグ(以下、これを移動中フラグと呼ぶ)が格納される。また移動先実ページ欄2107には、対応する実ページのデータの移動先の実ページのアドレスが格納される。さらに移動待ちフラグ欄2108には、対応する実ページに格納されたデータを別の実ページに移動すると決定したときにオンに設定されるフラグ(以下、これを移動待ちフラグと呼ぶ)が格納される。
図7は、図4に示されたフラッシュパッケージ情報2500のデータ構成を示す。フラッシュパッケージ情報2500は、ストレージシステム100に搭載されたフラッシュパッケージ230にそれぞれ対応させて生成される。この図7に示すように、フラッシュパッケージ情報2500は、フラッシュパッケージID欄2501、フラッシュパッケージ容量欄2502及び仮想ブロック容量欄2503を備えて構成される。
そしてフラッシュパッケージID欄2501には、対応するフラッシュパッケージ230に付与されたそのフラッシュパッケージ230に固有の識別子(フラッシュパッケージID)が格納される。またフラッシュパッケージ容量欄2502には、そのフラッシュパッケージ230の容量(以下、これをフラッシュパッケージ容量と呼ぶ)が格納される。さらに仮想ブロック容量欄2503には、仮想ブロックの容量が格納される。
ただし、上述のように本発明は、寿命の尺度となるライト頻度又はフラッシュメモリの劣化度に応じてフラッシュパッケージ230内のブロックのセルモードを動的に変化させて、フラッシュパッケージ230の保証期間内の寿命を保証しようというものである。
ここで、本実施の形態における「ライト頻度」は、フラッシュパッケージ230の消去回数を推定可能な値である。「ライト頻度」は、時間当たりに書き込むデータ量であり、これと装置稼働時間との積を算出することにより、これまでのフラッシュパッケージ230への累積ライト量を算出することができる。すなわち、ライト頻度及び装置稼働時間と、フラッシュパッケージの累積消去回数との間には次式の関係がある。
この(1)式において、係数Aは、一般的にWA(Write Amplification)と呼ばれる値であり、フラッシュパッケージ230の設計や稼働しているアプリケーションのI/Oパターンにより変化する。「ライト頻度」は、ストレージコントローラ200が各フラッシュパッケージ230に書き込んだデータ量を管理することにより把握可能である。
また本実施の形態における「劣化度」は、フラッシュメモリの先天的な品質ばらつきを考慮した値である。フラッシュメモリは先天的な品質ばらつきが大きく、同一型番であっても、製品ロットの差異などにより許容可能な消去回数が異なる。このため、例えば300回の消去回数により劣化した状態であっても、さらに200回までしか消去を許容できない領域もあれば、さらに400回の消去が可能な領域もある。一般に、消去の繰返しにより劣化することでフラッシュメモリに生じるエラービットが増加するが、フラッシュメモリの許容消去回数は、そのエラービットによる信頼性が装置基準を満たす範囲に収まる回数である。
「劣化度」の算定方法としては、第1に、装置出荷前検査において測定されたエラービット数に基づいて消去回数カウントの初期値を設定する(品質が良い領域は負の消去回数を、品質が悪い領域には正の消去回数を消去カウントの初期値として設定する)方法、第2に、装置稼働中に領域に生じたエラービット数に基づいて、消去回数値に補正を加える(品質が良い領域は負の消去回数を、品質が悪い領域には正の消去回数を実際の消去回数に加算する)方法、第3に、装置稼働中の時間当たりのエラービットの増加数に基づき算出する(時間当たりのエラービットの増加数が大きければ実際の消去回数に加算し、時間当たりのエラービット増加数が小さければ実際の消去回数から減算する。時間経過中の温度補正を含む。)などがある。
なお、データ記憶領域に生じたエラービット数をカウント可能なフラッシュパッケージであれば、こうした劣化度の算出は容易である。当然ながら、先天的な品質差が少ない場合やそうした品質差の考慮が不要な場合には、劣化度として単に消去回数を用いても、本発明の効果は十分に果たされる。本実施の形態においては、ライト頻度又はフラッシュメモリの劣化度の指標として消去回数を用いるが、本発明はこの例に限定されるものではない。将来的なフラッシュメモリの許容消去回数を推定可能な値であればよい。劣化度は、ストレージコントローラ200がフラッシュパッケージ230から情報(ブロック単位の劣化度)を受け取ることで把握可能である。
ブロックのセルモードを変化させた場合、フラッシュパッケージ230のフラッシュパッケージ容量も変化する。従って、フラッシュパッケージ容量欄2502に格納されるフラッシュパッケージ容量は、そのフラッシュパッケージ230内の各ブロックのセルモードの変更によって変化する。この値は、ストレージコントローラ200が、フラッシュパッケージ230から受け取り、フラッシュパッケージ容量欄2502に設定する。フラッシュパッケージ容量の最大値は、フラッシュパッケージ230内のすべてのブロックのセルモードが、最も多くの値を格納できるセルモード(ここではQLCモード)で構成されている場合である。なお、本実施の形態では、当初は、フラッシュパッケージ230内のすべてのブロックのセルモードがQLCモードに設定されるものとする。
図8は、図4に示されたフラッシュパッケージグループ情報2300のデータ構成を示す。フラッシュパッケージグループ情報2300は、ストレージシステム100内で定義されたフラッシュパッケージグループ280にそれぞれ対応させて生成される。
この図8に示すように、フラッシュパッケージグループ情報2300は、フラッシュパッケージグループID欄2301、パッケージグループRAIDタイプ欄2302、実ページ数欄2303、空き実ページ数欄2304、フラッシュパッケージポインタ欄2305及び使用不可実ページ数欄2306を備えて構成される。
そしてフラッシュパッケージグループID欄2301には、対応するフラッシュパッケージグループ280に付与されたフラッシュパッケージグループIDが格納される。またパッケージグループRAIDタイプ欄2302には、そのフラッシュパッケージグループ280のRAIDタイプが格納される。本実施の形態におけるRAIDタイプは、図5の論理ボリュームRAIDタイプ欄2003について上述した通りである。
実ページ数欄2303、空き実ページ数欄2304及び使用不可実ページ数欄2306には、それぞれそのフラッシュパッケージグループ280内の実ページの数、未使用の実ページ(以下、これを空き実ページと呼ぶ)の数、又は、使用不可に設定された実ページ(以下、これを使用不可能実ページと呼ぶ)の数が格納される。上述のように本情報システム1(図1)の特徴は、フラッシュパッケージ230内の必要なブロックのセルモードを動的に変化させることであるが、これによってフラッシュパッケージ230の容量が変化する。そしてフラッシュパッケージ230の容量が変化すると、実ページの数、空き実ページの数も変化する。以下、これを説明する。
まず、フラッシュパッケージ230の容量が変化すると、そのフラッシュパッケージ230が属するフラッシュパッケージグループ280の実ページの数も変化することになる。これはRAIDの考え方から、同一フラッシュパッケージグループ280内のフラッシュパッケージ230では使用可能な容量は等しいことが前提となるからである。このため、本実施の形態では、あるフラッシュパッケージ230についてのセルモードの変更要求を受け取った場合、そのフラッシュパッケージ230が属するフラッシュパッケージグループ280を構成するすべてのフラッシュパッケージ230のセルモードも同様に変更する。
このとき、同様に、そのフラッシュパッケージグループ280を構成する各フラッシュパッケージ230内の空き実ページの数も変化する。逆に、これは、使用不可実ページの数も変化したことになるので、使用不可実ページの数も変化することになる。例えば、実ページの数が10増加した場合、空き実ページの数も10増加し、使用不可実ページの数は10減少する。なお、既に述べたが、本実施の形態においては、フラッシュパッケージ230自身が当該フラッシュパッケージ230内の必要なブロックのセルモードの変更を決定するが、本発明は、この決定をストレージコントローラ200が行うようにしてもよい。
フラッシュパッケージポインタ欄2305は、対応するフラッシュパッケージグループ280を構成する各フラッシュパッケージ230にそれぞれ対応させて設けられており、対応するフラッシュパッケージ230のフラッシュパッケージ情報2500(図4)へのポインタ(以下、これをフラッシュパッケージポインタと呼ぶ)が格納される。フラッシュパッケージポインタの数は、パッケージグループRAIDタイプ欄2302に格納されたそのフラッシュパッケージグループ280のRAIDタイプによって決まる。
図4に戻って、空き実ページ情報ポインタ2200は、フラッシュパッケージグループ280ごとに設けられる情報である。図9は、空き実ページ情報ポインタ2200によって管理される空き実ページの集合を表している。この構造を、空き実ページ情報管理キュー2201と呼ぶ。
空き実ページ情報ポインタ2200は、対応するフラッシュパッケージグループ280内の先頭の空き実ページに対応する実ページ情報2100のアドレスを指し示すポインタである。次に、その実ページ情報2100内の空き実ページポインタ欄2103に格納されたポインタが次の空き実ページに対応する実ページ情報2100を指す。図9の例では、最後の空き実ページに対応する実ページ情報2100の空き実ページポインタ欄2103に格納されたポインタが、空き実ページ情報ポインタ2200を指しているが、最後の空き実ページに対応する実ページ情報2100の空き実ページポインタ欄2103に「Null」を格納するようにしてもよい。
ストレージコントローラ200は、論理ボリューム内の実ページを割り当てていない仮想ページをライト先とするライト要求を受け付けると、その論理ボリュームのRAIDタイプをその論理ボリューム情報2000(図4、図5)の論理ボリュームRAIDタイプ欄2003(図5)から読み出し、そのRAIDタイプと同じRAIDタイプがフラッシュパッケージグループ情報2300(図4、図8)のパッケージグループRAIDタイプ欄2302(図8)に格納されたフラッシュパッケージグループ280のうちのいずれかのフラッシュパッケージグループ280、例えば、空き実ページ数の最も多いフラッシュパッケージグループ280内の空き実ページを探し出す。具体的には、そのフラッシュパッケージグループ280に対応する空き実ページ情報ポインタ2200が指し示す実ページ情報2100に対応する空き実ページを探し出し、これをその仮想ページに割り当てる。
図4に戻って、使用不可実ページ情報ポインタ2700は、フラッシュパッケージグループ280ごとに生成される情報である。図10は、使用不可実ページ情報ポインタ2700によって管理される使用不可実ページの集合を表している。この構造を、使用不可実ページ情報管理キュー2701と呼ぶ。その構造は、空き実ページ情報管理キュー2201(図9)と同じである。
フラッシュパッケージ230の容量が少なくなり、そのフラッシュパッケージ230が属するフラッシュパッケージグループ280に対応するフラッシュパッケージグループ情報2300(図4、図8)の実ページ数欄2303(図8)に格納された実ページの数が少なくなった場合、その数だけ、空き実ページ情報管理キュー2201(図9)で管理されている実ページ情報2100が、使用不可実ページ情報管理キュー2701(図10)に移される。逆に、フラッシュパッケージ230の容量が多くなり、かかる実ページ数欄2303(図8)に格納された実ページの数が多くなった場合、その数だけ、使用不可実ページ情報管理キュー2701で管理されている実ページ情報2100が、空き実ページ情報管理キュー2201に移される。
本実施の形態のストレージシステム100では、上述のようにストレージコントローラ200が容量仮想化機能をもつ。このため、フラッシュパッケージ230の容量を変化させても、実ページ情報2100を既に説明したような方法で移動させるだけで対応できる。実ページ情報2100を使用不可実ページ情報管理キュー2701に移した場合、その実ページ情報2100に対応する実ページを仮想ページに割り当てられなくなる。このときストレージコントローラ200は、フラッシュパッケージ230に実ページの領域の使用不可を通知することで、フラッシュパッケージ230は実ページと、その実ページに対応するブロックの対応関係を破棄し、実ブロックを他の領域に割り当てることが可能になり、実ブロックを有効に使用できる。
(1−3)フラッシュパッケージの管理情報
次に、各フラッシュパッケージ230(図3)がそれぞれパッケージメモリ320(図3)内に保持する管理情報について説明する。この管理情報は、図11に示すように、パッケージ情報3000、チップ情報3100、仮想ブロック情報3200、実ブロック情報3300、QLC空き実ブロック情報ポインタ3400及びTLC空き実ブロック情報ポインタ3500から構成される。これらの情報は、各ブロックのセルモードを動的に変化させる機能を実現するために必要な情報である。
図12は、図11に示されたパッケージ情報3000のデータ構成を示す。この図12に示すように、パッケージ情報3000は、パッケージID欄3001、パッケージ容量欄3002、実ブロック数欄3003、仮想ブロック数欄3004、仮想ブロック容量欄3005、ブロック消去回数欄3006、計測開始時刻欄3007、内部情報格納ブロック数欄3008及び内部情報格納アドレス欄3009を備えて構成される。
そしてパッケージID欄3001には、そのパッケージ情報3000を保持するフラッシュパッケージ230のフラッシュパッケージIDが格納される。またパッケージ容量欄3002には、ストレージコントローラ200から見たそのフラッシュパッケージ230全体の容量が格納される。ただし、フラッシュパッケージ230の容量は、そのフラッシュパッケージ230内の各ブロックのセルモードによって変化する。本実施の形態では、フラッシュパッケージグループ280に含まれるそれぞれのフラッシュパッケージ230内のブロック数は等しいとする。なお、本発明は、フラッシュパッケージグループ280に含まれるそれぞれのフラッシュパッケージ230のブロックの数は等しくなくとも有効である。
実ブロック数欄3003には、そのフラッシュパッケージ230内に存在するブロック(以下、これを実ブロックと呼ぶ)の数が格納される。また仮想ブロック数欄3004には、実ブロック数欄3003に格納された実ブロックの数に、(当該実ブロックが取り得るセルモードで格納可能な最多のデータ量」/(当該ブロックが取り得るセルモードで格納可能な最少のデータ量)を乗算した値が、対応する論理ボリューム内に存在する仮想的なブロック(以下、これを仮想ブロックと呼ぶ)の数として格納される。
従って、本実施の形態では、ストレージコントローラ200がデータのリード/ライト要求において指定するアクセス対象のアドレスは、まず、仮想ブロックにマッピングされ、次に、実ブロックの空間にマッピングされる。1つの実ブロックに割り当てられる仮想ブロックの数は、そのフラッシュパッケージ230内の各実ブロックのセルモードによって決まる。
なお本実施の形態では、変更可能なセルモードは、QLCモードからTLCモードへの変更だけであるものとする。また本実施の形態では、仮想ブロックの容量は、実ブロックのセルモードをSLC(Single-level Cell)モードとしたとき、実ブロックに格納できる容量とする。従って、セルモードがQLCモードの場合には、1つの実ブロックに4つの仮想ブロックが割り当てられ、セルモードがTLCモードの場合、1つの実ブロックに3つの仮想ブロックが割り当てられる。
ただし、本発明は、QLCモードからTLCモードへのモード変更以外のモード変更を行う場合も有効である。例えば、QLCモード、TLCモード及びMLC(Multi-level Cell)モードの間の相互変更や、QLCモード、TLCモード、MLCモード及びSLCモードの間の相互変更を行う場合も有効である。また本実施の形態においては、当初は、各実ブロックのセルモードがQLCモードであるものとする。さらに本実施の形態においては、仮想ブロックに実ブロックが割り当てられる契機は、実ブロックが割り当てられていない仮想ブロックに初めてライト要求を受け付けた契機であるものとする。
仮想ブロック容量欄3005には、1つの仮想ブロックの容量が格納される。フラッシュメモリはデータ単位での書換えができないため、実ブロックに空き領域をもたせておき、ライト対象のデータについてはその空き領域に書き込み、この空き領域が満杯になったときに、一度、その実ブロック(空き領域)に書き込んだデータを読み出し、当該実ブロックに格納されたデータを消去した後に、有効なデータを対応する実ブロックに書き込むという処理を行う。
ブロック消去回数欄3006には、そのフラッシュパッケージ230内のデータを消去した回数(以下、これをブロック消去回数と呼ぶ)がそれぞれ格納される。フラッシュメモリは書き換えができないため、実ブロック内に空き領域をもたせておき、ライト要求が与えられた場合にはこの空き領域にライト対象のデータを書き込み、この空き領域が満杯になったときには、一度、この実ブロック内のデータを読み込み、その実ブロックに格納されたデータをすべて消去し、この後、その実ブロックに有効なデータを書き込むということを行う。
計測開始時刻欄3007には、かかるブロック消去回数を計測し始めた時刻(以下、これを計測開始時刻と呼ぶ)がそれぞれ格納される。ある実ブロックについて、ブロック消去回数欄3006に格納されているブロック消去回数を(現在時刻−計測開始時刻欄3007に格納された計測開始時刻)で割った値が、その実ブロックの単位時間当たりのブロック消去回数となる。この値がこのまま変化しないと仮定すると、保証期間内に各実ブロックのブロック消去回数が上限に到達するか否かを予測することができる。勿論、本発明は、他の方法で、保証期間内に各実ブロックのブロック消去回数が上限に到達するか否かを予測するようにしても有効である。
本実施の形態では、ブロック消去回数欄3006に格納される実ブロックごとのブロック消去回数と、計測開始時刻欄3007に格納される実ブロックごとのブロック消去回数の計測開始時刻とは、フラッシュパッケージ230が動作を開始した時刻をゼロとしてカウントを開始するものとする。ただし、これらブロック消去回数及び計測開始時刻を適当な周期でリセットして、直近のライト頻度をベースに予測を行うようにしてもよい。
内部情報格納ブロック数欄3008には、図11について上述したパッケージメモリ320に格納されたそのフラッシュパッケージ230の管理情報(各パッケージ情報3000、各チップ情報3100、各仮想ブロック情報3200、各実ブロック情報3300、各QLC空き実ブロック情報ポインタ3400及び各TLC空き実ブロック情報ポインタ3500)を、そのフラッシュパッケージ230の電源OFF時や障害発生時に退避させる際に必要な実ブロックの数が格納され、内部情報格納アドレス欄3009には、これら各実ブロックのアドレスがそれぞれ格納される。
かかるフラッシュパッケージ230の管理情報(パッケージ情報3000等)は重要な情報なので、多重化して退避するようにしてもよい。また、退避される回数はそう多くはなく、退避先の実ブロックのブロック消去回数なども問題にならないと考えられるため、これらの実ブロックのセルモードをQLCモードとするようにしてもよい。
一方、低価格化やフラッシュパッケージ230の大容量化のため、パッケージメモリ320に格納する上述の管理情報(パッケージ情報3000等)の総データ量が大きくなる場合がある。このような場合、フラッシュパッケージ230の電源OFF時や障害発生時以外にも、かかる管理情報の実ブロックへの書き込みが発生する。この頻度によっては、これらの実ブロックのセルモードをTLCモードに設定しておくことも有効である。仮想ブロックに割当て可能な実ブロックの数、障害が発生した実ブロックの数、及び、内部情報が格納される実ブロックの数の合計が、このフラッシュパッケージ230がもつ実ブロックの総数となる。
図13は、図11に示されたチップ情報3100のデータ構成を示す。チップ情報3100は、そのフラッシュパッケージ230に収納されたフラッシュチップ300(図3)に関する情報であり、フラッシュチップ300ごとにそれぞれ生成される。このチップ情報3100は、図13に示すように、チップID欄3101、チップ内実ブロック数欄3102、チップ内空き実ブロック数欄3103及び接続バスID欄3104を備えて構成される。
そしてチップID欄3101には、対応するフラッシュチップ300に付与されたそのフラッシュチップに固有の識別子(フラッシュチップID)が格納される。またチップ内実ブロック数欄3102には、そのフラッシュチップ300が備える実ブロックの数が格納される。
さらにチップ内空き実ブロック数欄3103には、そのフラッシュチップ300内の実ブロックのうち、仮想ブロックに割り当てられていない実ブロック(以下、これを空き実ブロックと呼ぶ)の数が格納される。さらに各接続バスID欄3104には、そのフラッシュチップ300が接続されているパッケージバス340の識別子(パッケージバスID)がそれぞれ格納される。
図14は、図11に示された仮想ブロック情報3200のデータ構成を示す。仮想ブロック情報3200は、そのフラッシュパッケージ230が対応付けられた論理ボリューム内の各仮想ページをそれぞれ構成するすべての仮想ブロックごとにそれぞれ生成される情報である。以下においては、この仮想ブロック情報3200は、対応する仮想ブロックのアドレス順に並べられているものとする。
この仮想ブロック情報3200は、図14に示すように、仮想ブロックID欄3201、実ブロック情報ポインタ欄3202、空きセグメント容量3203、仮想ブロック消去回数欄3204、実ブロック割当て時刻3205、仮想ブロックセルモード欄3206、セルモード変更フラグ欄3207、実セグメントアドレスポインタ欄3208を備えて構成される。
上述のように、本実施の形態では、フラッシュメモリにおいてデータをリード/ライトする記憶領域の単位を「セグメント」と呼ぶ。通常、かかる単位はページと呼ばれるが、本実施の形態は、ストレージコントローラ200が行う容量仮想化の単位とするため、フラッシュメモリのかかる単位をセグメントと呼んでいる。本実施の形態では、セルモードが変わっても、セグメントの長さは変わらないものとする。従って、実ブロックのセルモードがQLCモードの場合には、セルモードがTLCモードの場合に比べてセグメントの数が4/3倍になることになる。
仮想ブロックID欄3201には、対応する仮想ブロックに付与されたその仮想ブロックに固有の識別子(仮想ブロックID)が格納される。また実ブロック情報ポインタ欄3202には、対応する仮想ブロックを割り当てた実ブロックの実ブロック情報3300(図11、図15)へのポインタが格納される。初期値は、「Null」となる。また空きセグメント容量欄3203には、その仮想ブロック内のデータが格納されていないセグメント(以下、これを仮想セグメントと呼ぶ)の合計容量が格納される。
さらに仮想ブロック消去回数欄3204には、対応する仮想ブロックに格納されたデータが消去された回数が格納され、実ブロック割当て時刻欄3205には、その仮想ブロックに現在割り当てられている実ブロックを割り当てた時刻が格納される。仮想ブロック消去回数欄3204に格納された消去回数を、(現在時刻−実ブロック割当て時刻欄3205に格納されている時刻)で割った値が、その仮想ブロックの単位時間当たりのデータ消去回数となる。
仮想ブロックセルモード欄3206には、その仮想ブロックに割り当てる実ブロックのセルモードが格納される。またセルモード変更フラグ欄3207には、その仮想ブロックに割り当てている実ブロックをこれまでと異なったセルモード(ここではTLCモード)に変更する必要があるか否かを表すフラグ(以下、これをセルモード変更フラグと呼ぶ)が格納される。セルモード変更フラグがオンに設定されている場合には、その仮想ブロックに割り当てている実ブロックのセルモードをTLCモードに変更すべきことを意味し、セルモード変更フラグがオフに設定されている場合には、その仮想ブロックに割り当てている実ブロックのセルモードをTLCモードに変更する必要がないことを意味する。
実セグメントアドレスポインタ欄3208は、対応する仮想ブロック内の仮想セグメントごとに設けられ、対応する仮想ブロックが割り当てられた実ブロック内のその仮想セグメントが割り当てられたセグメント(以下、これを実セグメントと呼ぶ)を指し示すポインタ(アドレス)が格納される。
図15は、図11に示された実ブロック情報3300のデータ構成を示す。実ブロック情報3300は、対応するフラッシュパッケージ320内に存在する実ブロックごとに生成される情報である。実ブロック情報3300は、図15に示すように、実ブロックID欄3301、空き実ブロックポインタ欄3302、セルモード欄3303及び実ブロック内空き容量欄3304を備えて構成される。
そして実ブロックID欄3301には、対応する実ブロックに付与されたその実ブロックに固有の識別子(実ブロックID)が格納される。この実ブロックIDが、どのフラッシュチップ300のどのアドレスに相当する実ブロックであるかを示す。また空き実ブロックポインタ欄3302には、対応する実ブロックが仮想ブロックに割り当てられていない(空き状態にある)ときに、次の空き状態にある実ブロックの実ブロック情報3300へのポインタが格納される。
セルモード欄3303には、その実ブロックのセルモードが格納される。その実ブロックのセルモードがQLCモードに設定されている場合には、これに応じた情報がセルモード欄3303に格納され、その実ブロックのセルモードがTLCモードに設定されている場合には、これに応じた情報がセルモード欄3303に格納される。
実ブロック内空き容量欄3304には、対応する実ブロックの現在の空き容量が格納される。パッケージプロセッサ310(図3)は、対応する実ブロックに対し、この空き容量以下のライト要求をストレージコントローラ200から受け付け、当該実ブロック内の空き領域に書込み対象のデータを格納できる。パッケージプロセッサ310は、このようにして実ブロックの空き領域にデータを格納した場合、格納したデータのデータサイズ分だけ、実ブロック内空き容量欄3304に格納された空き容量の値を減少させる。その実ブロックのセルモードがQLCモードの場合、実ブロック内空き容量欄3304に格納される値の初期値は、その実ブロックのセルモードがTLCモードである場合の4/3倍になる。
図11に戻って、QLC空き実ブロック情報ポインタ3400は、そのフラッシュパッケージ230内の各フラッシュチップ300にそれぞれ対応させて生成される。図16は、QLC空き実ブロック情報ポインタ3400によって管理される、セルモードがQLCモードに設定された空き実ブロックの集合を表している。この構造を、QLC空き実ブロック情報管理キュー3401と呼ぶ。QLC空きブロック情報ポインタ3400は、対応するフラッシュチップ300内の実ブロックのうち、セルモードがQLCモードに設定された空き実ブロック(以下、これをQLC空き実ブロックと呼ぶ)であって、そのうちの先頭のQLC空き実ブロックの実ブロック情報3300へのポインタである。
また、かかる先頭のQLC空き実ブロックの実ブロック情報3300の中の空き実ブロックポインタ欄3302には、次のQLC空き実ブロックの実ブロック情報3300へのポインタが格納される。図16では、最後のQLC空き実ブロックの実ブロック情報3300の空き実ブロックポインタ欄3302にQLC空き実ブロック情報ポインタ3400へのポインタが格納されている状態を示しているが、かかる最後のQLC空き実ブロックの実ブロック情報3300の空き実ブロックポインタ欄3302に格納する値を「Null」としてもよい。
またTLC空き実ブロック情報ポインタ3500も、そのフラッシュパッケージ230内の各フラッシュチップ300にそれぞれ対応させて生成される。図17は、TLC空き実ブロック情報ポインタ3500にそれぞれ格納されたポインタによって管理される、セルモードがTLCモードに設定された空き実ブロックの集合を表している。この構造を、TLC空き実ブロック情報管理キュー3501と呼ぶ。TLC空きブロック管理情報ポインタ3500は、対応するフラッシュチップ300内の実ブロックのうち、セルモードがTLCに設定された空き実ブロック(以下、これをTLC空き実ブロックと呼ぶ)であって、そのうちの先頭のTLC空き実ブロックの実ブロック情報3300へのポインタである。
また、かかる先頭のTLC空き実ブロックの実ブロック情報3300の中の空き実ブロックポインタ欄3302には、次のTLC空き実ブロックの実ブロック情報3300のポインタが格納される。図17では、最後のTLC空き実ブロックの実ブロック情報3300の空き実ブロックポインタ欄3302にTLC空き実ブロック情報ポインタ3500へのポインタが格納されている状態を示しているが、かかる最後のTLC空き実ブロックの実ブロック情報3300の空き実ブロックポインタ欄3302に格納する値を「Null」としてもよい。
(1−4)ストレージシステムにおいて実行される各種処理
次に、図4〜図17について上述した情報を用いてストレージコントローラ200のプロセッサ260(図2)や、フラッシュパッケージ230のパッケージプロセッサ310(図3)により実行される各種処理について説明する。なお以下においては、各種処理の処理主体をプログラムとして説明するが、実際上は、そのプログラムに基づいてストレージコントローラ200のプロセッサ260や、フラッシュパッケージ230のパッケージプロセッサ310がその処理を実行することは言うまでもない。
(1−4−1)ストレージコントローラにより実行される各種処理
まず、ストレージコントローラ200により実行させる各種処理の内容について説明する。ストレージコントローラ200の処理は、プロセッサ260(図2)がメモリ270(図2)に格納された対応するプログラムを実行することにより行われる。
図18は、かかるメモリ270に格納されたプログラム群の構成を示す。本実施の形態の場合、ストレージコントローラ200のメモリ270には、リード処理実行部4000、ライト要求受付け部4100、ライトアフタ処理実行部4200及び実ぺージ移動処理実行部4300が格納されている。これらは、容量仮想化技術を実現するプログラムである。
なお、本実施の形態では、ホスト110からのリード/ライト要求は、フラッシュメモリのリード/ライト単位であるセグメント(一般のフラッシュメモリの用語ではページ)単位で発行されるものとする。勿論、本発明は、ホスト110からのリード要求や、ライト要求がセグメントの一部のみを指定した場合にも有効である。なお、フラッシュメモリのセグメントの一部の領域がライト先として指定された場合、フラッシュパッケージ230が、セグメント全体を読み出し、指定された部分領域のデータのみを更新した上で、そのデータをそのセグメントに書き戻す。
(1−4−1−1)リード処理
まず、リード処理について説明する。図19は、ホスト110からのリード要求をストレージコントローラ200が受け付けた場合にリード処理実行部4000により実行されるリード処理の処理手順を示す。
ステップ5000:リード処理実行部4000は、受け付けたリード要求において指定されたリード対象のデータが格納されたアドレスから、対応する仮想ページと、その仮想ページ内のアクセス先の相対アドレスとを特定する。
ステップ5001:リード処理実行部4000は、リード対象となったデータが、キャッシュメモリ210に格納されているか否か(キャッシュヒットか否か)を判定する。これは、公知の技術である。リード処理実行部4000は、この判定で肯定結果を得た場合(キャッシュヒット、ステップ5001:YES)にはステップ5008に進み、否定結果を得た場合(キャッシュミス、ステップ5001:NO)にはステップ5002に進む。
ステップ5002:ステップ5001で否定結果を得た場合、リード対象のデータをキャッシュメモリ210にロードする必要がある。そこで、リード処理実行部4000は、ステップ5000で特定した仮想ページに割り当てた実ページに対応する実ページ情報2100(図4及び図6)を、論理ボリューム情報2000(図4及び図5)の対応する実ページポインタ欄2004(図5)に格納されたポインタを参照して取得する。
ステップ5003:リード処理実行部4000は、ステップ5002で取得した実ページ情報2100のフラッシュパッケージグループID欄2101(図6)に格納されたフラッシュパッケージグループIDと、実ページアドレス欄2102(図6)に格納された対応する実ページのアドレスとから、当該実ページが属するフラッシュパッケージグループ280(図2)と、当該実ページのフラッシュパッケージグループ280内の先頭アドレスとを取得する。
ステップ5004:リード処理実行部4000は、ステップ5000で特定したリード対象の相対アドレスと、ステップ5003で取得したフラッシュパッケージグループIDが付与されたフラッシュパッケージグループ280(図2)のフラッシュパッケージグループ情報2300(図8)のステップパッケージグループ内RAIDタイプ欄2302(図8)に格納されたRAIDタイプとから、リード対象のデータが格納されている実ページ内の相対アドレスを算出する。またリード処理実行部4000は、算出した実ページ内の相対アドレスと、上述のように取得したRAIDタイプと、かかるフラッシュパッケージグループ情報2300(図8)の対応するフラッシュパッケージポインタ欄2305(図8)に格納されたフラッシュパッケージポインタとから、どのフラッシュパッケージ230のどのアドレスをアクセスすべきかを特定する。
ステップ5005:リード処理実行部4000は、ステップ5004で特定したフラッシュパッケージ230に対し、ステップ5004で特定したアドレスに格納されたデータをリード対象とするリード要求を発行する。
ステップ5006:リード処理実行部4000は、ステップ5005でリード要求を発行したフラッシュパッケージ230からリード対象のデータが転送され終えるのを待つ。
ステップ5007:リード処理実行部4000は、ステップ5005でリード要求を発行したフラッシュパッケージ230から転送されてきたデータをキャッシュメモリ210(図2)に格納する。
ステップ5008:リード処理実行部4000は、今回のリード要求で指定されたキャッシュメモリ210上のデータを当該リード要求の送信元のホスト110に転送し、この後、このリード処理を終了する。
(1−4−1−2)ライト処理
図20は、ホスト110からのライト要求をストレージコントローラ200が受け付けた場合にライト要求受付け部4100により実行されるライト処理の処理手順を示す。
ステップ6000:ライト要求受付け部4100は、受け付けたライト要求において指定されたデータのライト先となるアドレスから、対応する仮想ページとアクセス先の仮想ページ内の相対アドレスとを特定する。
ステップ6001:ライト要求受付け部4100は、ステップ6000で特定した相対アドレスが付与された仮想ページに実ページが割り当てられているかを、ライト要求においてライト先として指定された論理ボリュームに対応する論理ボリューム情報2000(図5)内の対応する実ページポインタ欄2004(図5)に「Null」が格納されているか否かにより判定する。そしてライト要求受付け部4100は、かかる仮想ページに実ページが割り当てられていない場合には(ステップ6001:NO)、ステップ6002に進み、実ページが割り当てられている場合には(ステップ6001:YES)、ステップ6003に進む。
ステップ6002:ライト要求受付け部4100は、このステップ6002において、ライト要求においてデータのライト先として指定された仮想ページに実ページを割り当てる。具体的に、ライト要求受付け部4100は、ライト要求においてデータのライト先として指定された論理ボリュームに対応する論理ボリューム情報2000(図5)の論理ボリュームRAIDタイプ欄2003と、フラッシュパッケージグループ280(図2)ごとのフラッシュパッケージグループ情報2300(図8)のパッケージグループRAIDタイプ欄2302(図8)に格納されたRAIDタイプ、及び、空き実ページ数欄2304(図8)に格納された空き実ページ数となどを参照して、どのフラッシュパッケージグループ280の実ページを割り当てるかを決定する。その後、ライト要求受付け部4100は、このようにして決定したフラッシュパッケージグループ280に対応する空き実ページ情報ポインタ2200(図4)を参照して、先頭の空き実ページの実ページ情報2100(図4、図6)を、ライト要求においてデータのライト先として指定された論理ボリュームに対応する論理ボリューム情報2000(図4、図5)の実ページポインタ欄2004(図5)に格納されたポインタが示すようにする。これにより、かかる仮想ページに実ページを割り当てたことになる。
なおライト要求受付け部4100は、この後、空き実ページ情報ポインタ2200(図4)を、次の実ページ情報2100(仮想ページに割り当てた実ページの実ページ情報2100の中の空き実ページポインタ欄2103(図6)に格納されたポインタが示す実ページ情報2100)を示すように更新する。またライト要求受付け部4100は、ライト要求においてデータのライト先として指定された仮想ページに割り当てた実ページの実ページ情報2100の中の空き実ページポインタ欄2103の値を「Null」に更新する。さらにライト要求受付け部4100は、その実ページを提供するフラッシュパッケージグループ280に対応するフラッシュパッケージグループ情報2300(図4、図8)の空き実ページ数欄2304(図8)に格納されている値を1だけ減らす。さらにライト要求受付け部4100は、かかる実ページに対応する実ページ情報2100(図6)のページ割り当て時刻欄2104に、現在時刻を格納する。
なお本実施の形態においては、以上のような仮想ページを実ページに割り当てる一連の処理を、ライト要求を受け付けたときに実施する場合について説明したが、この一連の処理は、ライト対象のデータをフラッシュパッケージ230に格納するまでに実行すればよい。
ステップ6003:ライト要求受付け部4100は、ホスト110から転送されてきたライト対象のデータ(ライトデータ)を、キャッシュメモリ210(図2)に格納する。さらにライト要求受付け部4100は、かかるライト要求に対するライト処理の完了報告をホスト110に通知し、この後、このライト処理を終了する。
なおフラッシュパッケージグループ280は、RAID構成をとるため、キャッシュメモリ210上に格納したライトデータに対して冗長データを生成する必要がある。ただし、これは、公知の方法であるので、本実施の形態では詳細な説明はしない。また、実ページの中には、冗長データを格納する領域も含まれているため、ライト対象のデータに対応する冗長データの実ページ内の格納アドレスも一意に定まる。冗長データも、一度、キャッシュメモリ210に格納する。なお、キャッシュメモリ210上の冗長データも、ライト対象のデータと同様に、どのフラッシュパッケージ230のどのアドレスに書き込むべきかを示す情報を付けておく。ライト対象のデータ及びその冗長データは、後述のようにライトアフタ処理実行部5200によって、対応するフラッシュパッケージ160に書き込まれるが、ライトアフタ処理実行部5200から見ると、いずれもフラッシュパッケージ230へ書き込むデータなので、両者を区別する必要はない。同様に、フラッシュパッケージ230も、両者を区別する必要はない。
(1−4−1−3)ライトアフタ処理
図21は、ライトアフタ処理実行部4200により定期的又は不定期に実行されるライトアフタ処理の処理手順を示す。ライトアフタ処理実行部4200は、ホスト110からのライト要求に応じてキャッシュメモリ210に格納したライト対象のデータ及びその冗長データを、この図21に示す処理手順に従ってフラッシュパッケージ230に書き込む。この際、ライトアフタ処理実行部4200は、かかるライト対象のデータ及びその冗長データを区別することなく、これらフラッシュパッケージ230に書き込むべきデータとして取り扱う。
ステップ7000:ライトアフタ処理実行部4200は、キャッシュメモリ210をサーチして、ホスト110からのライト要求に応じて一時的にキャッシュメモリ210に格納したライト対象のデータであって、未だフラッシュパッケージ230に書き込んでいないデータ(以下、これをデステージ対象データと呼ぶ)があるか否かを判定する。かかるデステージ対象データが存在する場合、ライトアフタ処理実行部4200は、ステップ7001に進む。また、かかるデステージ対象データが存在しない場合、ライトアフタ処理実行部4200は、このライトアフタ処理を終了する。
ステップ7001:ライトアフタ処理実行部4200は、対応するフラッシュパッケージ230に書き込むべきデステージ対象データを決定する。
ステップ7002:ライトアフタ処理実行部4200は、そのデステージ対象データに付与されている、ライト先のフラッシュパッケージ230及び書込み先のアドレスに関する情報を取り出し、ライト先の実ページに対応する実ページ情報2100(図6)の移動中フラグ欄2106(図6)に格納されている移動中フラグをチェックする。この移動中フラグがオンに設定されている場合、この実ページは移動中であるため、ライトアフタ処理実行部4200は、そのデステージ対象データのフラッシュパッケージ230への書込みを中止し、ステップ7001に戻って別のデステージ対象データを探す。
ステップ7003:ライトアフタ処理実行部4200は、そのデステージ対象データのライト先のフラッシュパッケージ230に対して、ライト先のアドレスを指定したライト要求を発行すると共に、当該デステージ対象データを転送する。
ステップ7004:ライトアフタ処理実行部4200は、ライト要求及びデステージ対象データを転送したフラッシュパッケージ230から当該ライト要求に対するライト処理の完了報告が送信されてくるのを待つ。
ステップ7005:ライトアフタ処理実行部4200は、かかるライト処理の完了報告を受信すると、このライト処理に伴って、そのときデステージ対象データを書き込んだ実ページ内のいずれかの実ブロックにデータ消去が発生したか否かを確認する。そしてライトアフタ処理実行部4200は、いずれかの実ブロックにデータ消去が発生していた場合には、その実ブロックを含む実ページの実ページ情報2100(図6)のページ書込み量欄2105に格納されているページ書込み量から推測されるページの消去回数を1増加させる。
ステップ7006:ライトアフタ処理実行部4200は、かかるデステージ対象データを書き込んだフラッシュパッケージ230の容量が変化したか否かを判定する。ライトアフタ処理実行部4200は、かかる容量に変化がある場合にはステップ7007に進み(ステップ7006:YES)、かかる容量に変化がない場合にはこのライトアフタ処理を終了する(ステップ7006:NO)。
ステップ7007:ライトアフタ処理実行部4200は、フラッシュパッケージ230の容量に変化があった場合、そのフラッシュパッケージ230が属するフラッシュパッケージグループ280内のフラッシュパッケージ230の容量の最小値が変化したか否かを確認する。
ここで、同じフラッシュパッケージグループ280を構成する各フラッシュパッケージ230の容量は原則として同じにする必要がある。そこでライトアフタ処理実行部4200は、デステージ対象データの書き込みによりフラッシュパッケージグループ280内のフラッシュパッケージ230の容量の最小値が変化した場合(これは、かかるデステージ対象データが書き込まれたフラッシュパッケージ230の容量がそのフラッシュパッケージグループ280内で最小となったことを意味する)には、そのフラッシュパッケージグループ280を構成する他のフラッシュパッケージ230の容量もその最小値と同じ容量に合わせるため、これら他のフラッシュパッケージ230について、それぞれ必要な数の空き実ページを使用不可に設定する。
具体的に、ライトアフタ処理実行部4200は、これら他のフラッシュパッケージ230について、空き実ページ情報ポインタ2200(図4)により管理している空き実ページ情報管理キュー2201(図9)に格納されている実ページ情報2100の中から必要な数の実ページ情報2100を、使用不可実ページ情報ポインタ2700により管理している使用不可実ページ情報管理キュー2701(図10)に移す。
ステップ7008:空き実ページの数が予め設定された閾値以下になった場合、ライトアフタ処理実行部4200は、フラッシュパッケージグループ280内に常に一定数の空き実ページを確保するため、当該フラッシュパッケージグループ280から、幾つかの実ページにそれぞれ格納されているデータを、他のフラッシュパッケージグループ280に移動させる。
具体的に、ライトアフタ処理実行部4200は、デステージ対象データが書き込まれたフラッシュパッケージグループ280が提供するすべての実ページの中から、データが格納されている実ページの半分をデータの移動対象として決定する。この決定は、デステージ対象データが書き込まれたフラッシュパッケージグループ280が提供する各実ページの実ページ情報2100(図4、図6)におけるページ書込み量欄2105(図6)に格納されているページ書込み量や、ページ割当て時刻欄2104(図6)に格納されているページ割当て時刻などを参照する。そしてライトアフタ処理実行部4200は、決定した各実ページの実ページ情報2100における移動待ちフラグ欄2108(図6)に格納されている移動待ちフラグをオンに設定する。
ステップ7009:ライトアフタ処理実行部4200は、キャッシュメモリ210に格納されているすべてのデステージ対象データについてステップ7001〜ステップ7008の処理を実行し終えたか否かを判定する。ライトアフタ処理実行部4200は、この判定で否定結果を得ると(ステップ7009:NO)、ステップ7001に戻る。そしてライトアフタ処理実行部4200は、ステップ7001で決定するデステージ対象データを順次他のデステージ対象データに切り替えながらステップ7001〜ステップ7009の処理を繰り返す。そしてライトアフタ処理実行部4200は、やがてすべてのデステージ対象データについてステップ7001〜ステップ7008の処理を実行し終えると(ステップ7009:YES)、実ページ移動処理実行部4300(図18)をコールし、その後、このライトアフタ処理を終了する。
(1−4−1−4)実ページ移動処理
図22は、上述のようにライトアフタ処理実行部4200にコールされた実ページ移動処理実行部4300により実行される実ページ移動処理の処理手順を示す。
ステップ8000:実ページ移動処理実行部4300は、まず、図21について上述したライトアフタ処理のステップS7008においてライトアフタ処理実行部4200によりデータの移動対象として決定された各実ページ(以下、これらを移動対象実ページと呼ぶ)について、その移動対象実ページに格納されているデータの移動先の実ページ(以下、これらを移動先実ページと呼ぶ)をそれぞれ決定する。移動先実ページとして決定される実ページは、セルモードを変更するフラッシュパッケージグループ280以外のフラッシュパッケージグループ280が提供する実ページのうち、データが格納されていない実ページ(空き実ページ)である。そして実ページ移動処理実行部4300は、移動対象実ページごとに、その移動対象実ページの実ページ情報2100(図4、図6)の移動先実ページ欄2107(図6)に、その移動対象実ページのデータの移動先として決定した移動先実ページの実ページ情報2100を指すポインタをそれぞれ設定する。
ステップ8001:実ページ移動処理実行部4300は、未処理の移動対象実ページが存在するか否かを判定する。この判定は、いずれかの実ページ情報2100(図4、図6)の移動待ちフラグ欄2108(図6)に格納されている移動待ちフラグがオンに設定されているか否かを判定することにより行われる。そして実ページ移動処理実行部4300は、この判定で肯定結果を得た場合(ステップ8001:YES)にはステップ8002に進み、否定結果を得た場合(ステップ8001:NO)にはこの実ページ移動処理を終了する。
ステップ8002:実ページ移動処理実行部4300は、ステップ8001で検出した未処理の移動対象実ページの中から1つの移動対象実ページを選択し、その移動対象実ページに対応する実ページ情報2100(図4、図6)の移動待ちフラグ欄2108(図6)に格納された移動待ちフラグをオフに設定すると共に、その実ページ情報2100の移動中フラグ欄2106に格納されている移動中フラグをオンに設定する。
ステップ8003:実ページ移動処理実行部4300は、ステップ8002で選択した移動対象実ページが、どのフラッシュパッケージ230内のどのセグメントの集合となるかを算出する。ステップ8002で選択した移動対象実ページに対応する実ページ情報2100のフラッシュパッケージグループID欄2101に格納されているフラッシュパッケージグループIDが付与されたフラッシュパッケージグループ280のフラッシュパッケージグループ情報2300(図4、図8)の各フラッシュパッケージポインタ欄2305にそれぞれ格納されているポインタがそれぞれ指し示すフラッシュパッケージ情報2500(図4、図7)にそれぞれ対応するフラッシュパッケージ230が求めるフラッシュパッケージ230である。また実ページ移動処理実行部4300は、ステップ8002で選択した移動対象実ページの実ページ情報2100における実ページアドレス欄2102(図6)に格納されたその移動対象実ページのアドレスと、対応するフラッシュパッケージ情報2500(図7)の仮想ブロック容量欄2503(図7)に格納された仮想ブロックの容量とから、それぞれのフラッシュパッケージ230の中の移動対象となるセグメントの集合を、すべてのフラッシュパッケージ230について求める。
ステップ8004:実ページ移動処理実行部4300は、ステップ8002で選択した移動対象実ページを提供するフラッシュパッケージグループ280を構成する各フラッシュパッケージ230に対して、指定したセグメントの中で、データを格納したセグメントのデータを、キャッシュメモリ210に移動すべき旨のリード要求をそれぞれ送信する。
ステップ8005:実ページ移動処理実行部4300は、リード要求を送信したすべてのフラッシュパッケージ230から、そのリード要求に応じたリード処理の完了報告及びリードデータが送られてくるのを待つ。なお、この完了報告には、セグメントごとにデータが格納されていたか否かの情報が含まれる。
ステップ8006:実ページ移動処理実行部4300は、各フラッシュパッケージ230から転送されてくるリードデータを、どのセグメントに格納されていたかといった情報と共にキャッシュメモリ210に格納する。
ステップ8007:実ページ移動処理実行部4300は、ステップ8002で選択した移動対象実ページに格納されているデータの移動先である移動先実ページがどのフラッシュパッケージ230のどのセグメントの集合になるかを算出する。この場合、かかる移動対象実ページの実ページ情報2100(図4、図6)の移動先実ページ欄2107に格納されたポインタが指し示す実ページ情報2100がかかる移動先実ページの実ページ情報2100である。実ページ移動処理実行部4300は、この実ページ情報2100から、ステップ8003について上述した場合と同様にして、移動先実ページがどのフラッシュパッケージ230のどのセグメントの集合になるかを求める。
ステップ8008:実ページ移動処理実行部4300は、ステップ8007で求めた各フラッシュパッケージ230に対して、ステップ8007で求めたセグメントの集合に、移動対象実ページを構成する各セグメントに格納されていたデータを書き込むべき旨のライト要求及びライト対象のデータ(移動対象実ページの各セグメントに格納されていたデータ)を送信する。なお、かかるライト要求には、移動対象実ページのどのセグメントにデータが格納されていたかという情報が含まれる。
ステップ8009:実ページ移動処理実行部4300は、ライト要求を送信したすべてのフラッシュパッケージ230から、そのライト要求に応じたライト処理の完了報告が与えられるのを待つ。
ステップ8010:実ページ移動処理実行部4300は、移動対象実ページを空き実ページに設定すると共に、それまで移動対象実ページが割り当てられていた仮想ページに移動先実ページを割り当てる。具体的に、実ページ移動処理実行部4300は、移動対象実ページの実ページ情報2100を、対応する空き実ページ情報ポインタ2200(図4)により管理される空き実ページ情報管理キュー2201(図9)に格納し、さらにその仮想ページを含む論理ボリュームの論理ボリューム情報2000(図4、図5)の対応する実ページポインタ欄2004に格納されているポインタが移動先実ページを指し示すように、当該論理ボリューム情報2000を更新する。また実ページ移動処理実行部4300は、移動対象実ページの実ページ情報2100のページ割当て時刻欄2104に格納されている時刻を現在時刻に更新する。さらに実ページ移動処理実行部4300は、移動対象実ページ及び移動先実ページの双方について、その実ページ情報2100の移動中フラグ欄2106に格納された移動中フラグと、移動先実ページ欄2107に格納されたポインタと、移動待ちフラグ欄2108に格納された移動待ちフラグとをクリア(フラグはオフに設定し、ポインタは「Null」に更新)する。
ステップ8011:実ページ移動処理実行部4300は、移動対象実ページを提供するフラッシュパッケージグループ280のフラッシュパッケージグループ情報2300(図8)と、移動先実ページを提供するフラッシュパッケージグループ280のフラッシュパッケージグループ情報2300とを更新する。ここでは、移動対象実ページを提供するフラッシュパッケージグループ280内の実ブロック情報3300を、対応する使用不可実ブロック管理情報3500で管理されるTLC空き実ブロック情報管理キュー3501に移す。
実ページ移動処理実行部4300は、このステップ8011の処理が完了するとステップ8002に戻り、この後、すべての移動対象実ページに対するステップ8002〜ステップ8011の処理が完了することによりステップ8001で肯定結果を得るまで、ステップ8001〜ステップ8011の処理を繰り返す。そして実ページ移動処理実行部4300は、やがてすべての移動対象実ページに対するステップ8002〜ステップ8011の処理が完了することによりステップ8001で肯定結果を得ると、この実ページ移動処理を終了する。
(1−4−2)フラッシュパッケージにより実行される各種処理
次に、フラッシュパッケージ230により実行される各種処理の内容について説明をする。フラッシュパッケージ230の処理は、パッケージプロセッサ310(図3)がパッケージメモリ320(図3)に格納された対応するプログラムを実行することにより行われる。
図23は、かかるパッケージメモリ320に格納されたプログラム群の構成を示す。本実施の形態の場合、フラッシュパッケージ230のパッケージメモリ320には、データリード処理実行部9000、データライト要求受付け部9100、実ブロック解放処理実行部9200、仮想ブロック格納処理実行部9300、仮想容量判定処理部9400及び仮想ブロック移動処理部9500が格納されている。
(1−4−2−1)データリード処理
まず、データリード処理について説明する。図24は、フラッシュパッケージ230がストレージコントローラ200(図2)からのリード要求を受け取ったときに、データリード処理実行部9000により実行されるデータリード処理の処理手順を示す。なお、この図24は、1つのセグメントに格納されたデータをリードする際の処理手順を示している。ただし、本発明は、リード要求で複数のセグメント又はセグメントの一部に格納されたデータを読み出すようにした場合も有効である。
ステップ10000:データリード処理実行部9000は、受け取ったリード要求において指定されたリード対象のアドレスから、アクセス対象の仮想ブロックと、その仮想ブロック内のアクセス対象の相対アドレスとを算出する。そしてデータリード処理実行部9000は、かかる算出結果に基づいて、その仮想ブロックの仮想ブロック情報3200(図11、図14)を取得する。またデータリード処理実行部9000は、算出したかかる仮想ブロック内の相対アドレスから、当該仮想ブロック内のアクセス対象の仮想セグメントを認識し、その仮想セグメントに対応する実セグメントアドレスポインタ欄3208(図14)に格納されたポインタから、その仮想セグメントが割り当てられた実セグメントを認識する。
ステップ10001:データリード処理実行部9000は、ステップ10000で取得した仮想ブロック情報3200の実ブロック情報ポインタ欄3202に格納されているポインタに基づいて、かかるアクセス対象の仮想ブロックが割り当てられた実ブロックの実ブロック情報3300(図11、図15)を取得する。またデータリード処理実行部9000は、取得した実ブロック情報3300の実ブロックID欄3301に格納されている実ブロックIDに基づいて、対応する実ブロック(アクセス対象の仮想ブロックが割り当てられた実ブロック)を提供するフラッシュチップ300(図3)を検出する。さらにデータリード処理実行部9000は、ステップ10000で認識したアクセス対象の仮想セグメントが割り当てられた実セグメントが、そのフラッシュチップ300内のどのアドレスにあるかを、かかる仮想ブロック情報3200の対応する実セグメントアドレスポインタ3208に格納されたポインタに基づいて算出する。
ステップ10002:データリード処理実行部9000は、ステップ10001で算出したアクセス対象のフラッシュチップ300に対応するチップ情報3100(図11、図13)の接続バスID欄3104(図13)を参照して、そのフラッシュチップ300が接続されたパッケージバス340(図3)をすべて検出し、これらパッケージバス340が接続されたパッケージバス転送装置350(図3)をすべて検出する。
ステップ10003:データリード処理実行部9000は、ステップ10002で検出したパッケージバス転送装置350のうちのいずれか1つのパッケージバス転送装置350に対して、ステップ10001で検出したアクセス対象のフラッシュチップ300内のステップ10001で算出したアドレスからデータを読み出してバッファ330(図3)に格納するよう指示を与える。
ステップ10004:データリード処理実行部9000は、ステップ10003で指示を与えたパッケージバス転送装置350が、指示したフラッシュチップ300内の指示したアドレスからデータを読み出してバッファ330に格納し終えるのを待つ。
ステップ10005:データリード処理実行部9000は、パッケージバス転送装置350がかかるデータをバッファ330に格納し終えると、当該データをバッファ330から読み出し、読み出したデータをそのときリード要求を送信してきたストレージコントローラ200に転送する。そしてデータリード処理実行部9000は、この後、このデータリード処理を終了する。
(1−4−2−2)データライト処理
図25A及び図25Bは、フラッシュパッケージ230がストレージコントローラ200(図2)からのライト要求及びライト対象のデータを受け取ったときに、データライト要求受付け部9100により実行されるデータライト処理の処理手順を示す。なお、この図25A及び図25Bは、1つのセグメントにのみデータをライトする際の処理手順を示している。ただし、本発明は、ライト要求で複数のセグメント又はセグメントの一部にデータを書込む場合も有効である。
ステップ11000:データライト要求受付け部9100は、受け取ったライト要求において指定されたデータの書込み先となるアドレスと、書込み先のフラッシュパッケージ230のパッケージ情報3000(図11、図12)の仮想ブロック容量欄3005(図12)に格納された仮想ブロックの容量とから、データ書込み先の仮想ブロックと、その仮想ブロック内のデータ書込み先の相対アドレスとを算出する。本実施の形態では、ホスト110からのライト要求は、フラッシュメモリのリード/ライト単位であるセグメント(一般のフラッシュメモリの用語ではページ)ごとに発行されるものとする。勿論、本発明は、ホスト110からのライト要求が、仮想セグメントの一部のみを指定した場合にも有効である。
なお、ライト要求においてデータ書込み先として仮想セグメントの一部の領域が指定された場合、データライト要求受付け部9100は、仮想セグメントに格納されたデータ全体を読み出し、読み出したデータ内の指定された部分領域のみを更新し、その後、更新したデータを再度同じ仮想セグメント全体を書き込むように処理する。
ステップ11001:データライト要求受付け部9100は、ストレージコントローラ200から転送されてきた書込み対象のデータをバッファ330に格納する。
ステップ11002:データライト要求受付け部9100は、データ書込み先の仮想ブロックに実ページが割り当てられているか否かを判定する。この判定は、データ書込み先の仮想ブロックに対応する仮想ブロック情報3200(図11、図14)の実ブロック情報ポインタ欄3202に「Null」でない値が格納されているか否かを判断することにより行われる。データライト要求受付け部9100は、この判定で否定結果を得るとステップ11003に進み(ステップ11002:NO)、肯定結果を得るとステップ11006に進む(ステップ11002:YES)。
ステップ11003:データライト要求受付け部9100は、データ書込み先の仮想ブロックに実ブロックを割り当てる。本実施の形態では、仮想ブロックに実ブロックを割り当てる際にはQLCモードの実ブロックを割り当てる。具体的に、データライト要求受付け部9100は、データ書込み先の仮想ブロックを含む4nから4n+3(n>=0)の連続した4つの仮想ブロックを1つの実ブロックに割り当てる。この際、データライト要求受付け部9100は、4nから4n+3の連続した4つの仮想ブロックに対応するそれぞれの仮想ブロック情報3200(図11、図14)の実ブロック情報ポインタ欄3202(図14)に、対応するQLC空き実ブロック情報ポインタ3400によって管理されているQLC空き実ブロック情報管理キュー3401(図6)から取り出した同じ1つの実ブロック情報3300(図11、図15)を指し示すポインタをそれぞれ設定する。また、データライト要求受付け部9100は、かかる4つの仮想ブロック情報3200の実セグメント割り当て時刻欄3206にそれぞれ現在時刻を設定する。
ステップ11004:データライト要求受付け部9100は、データ書込み先の仮想ブロック内のデータ書込み先の相対アドレスに対応する仮想セグメントと対応付けられたセグメントアドレスポインタ欄3208(図14)に、その仮想ブロックに割り当てた実ブロックの先頭の実セグメントのアドレスを設定する。
ステップ11005:データライト要求受付け部9100は、データ書込み先の仮想ブロックに割り当てた実ブロックの実ブロック情報3300(図11、図15)の実ブロック内空き容量欄3304(図15)に、セルのモードがQLCモードのときの当該実ブロックの容量を格納する。そしてデータライト要求受付け部9100は、この後、ステップ11007に進む。
ステップ11006:データライト要求受付け部9100は、データ書込み先の仮想ブロックに割り当てた実ブロックの実ブロック情報3300(図11、図15)の実ブロック内空き容量欄3304を参照して、その実ブロック内で空いた状態にある実セグメントのアドレスを、データ書込み先の仮想ブロック内のデータ書込み先の相対アドレスに対応する仮想セグメントと対応付けられたセグメントアドレスポインタ欄3208(図14)に設定する。
ステップ11007:データライト要求受付け部9100は、ステップ11004又はステップ11006においてデータ書込み先の仮想ブロックの対応するセグメントアドレスポインタ欄3208(図14)に設定した実セグメントのアドレスが、どのフラッシュチップ300のどのアドレスに対応するかを確認する。
ステップ11008:データライト要求受付け部9100は、データ書込み対象の仮想ブロックに割り当てた実ブロックの実ブロック情報3300(図11、図15)の実ブロック内空き容量欄3304に格納された値(その実ブロック内の空き容量)を、その値から1つ分のセグメントの容量を減算した値に更新する。
ステップ11009:データライト要求受付け部9100は、ステップS11007で確認したデータ書込み先のフラッシュチップ300に対応したチップ情報3100(図11、図13)の接続バスID欄3104を参照して、当該フラッシュチップ300が接続されているパッケージバス340(図3)を検出し、そのパッケージバス340に接続されているパッケージバス転送装置350(図3)を検出する。
ステップ11010:データライト要求受付け部9100は、ステップ11009で検出したパッケージバス転送装置350に対して、バッファ330に格納されている書込み対象のデータをステップ11007で確認したフラッシュチップ300のステップ11007で確認したアドレスに書き込むよう指示を与える。
ステップ11011:データライト要求受付け部9100は、ステップ11010で指示を与えたパッケージバス転送装置350が、バッファ330に格納されている書込み対象のデータを、指示したフラッシュチップ300内の指示したアドレスに書込み終えるのを待つ。
ステップ11012:データライト要求受付け部9100は、ステップ11008で値を更新したデータ書込み対象の仮想ブロックに割り当てた実ブロックの実ブロック情報3300(図11、図15)の実ブロック内空き容量欄3304を参照して、その実ブロック内の空き容量が「0」となっているか否か(つまりその実ブロックに空がないか否か)を判断する。データライト要求受付け部9100は、この判断で否定結果を得た場合(ステップ11012:NO)にはステップ11013に進み、肯定結果を得た場合(ステップ11012:YES)にはステップ11014に進む。
ステップ11013:データライト要求受付け部9100は、ライト要求の送信元のストレージコントローラ200に、書込み対象のデータのライト処理が完了した旨を通知し、この後、このデータライト処理を終了する。
ステップ11014:データライト要求受付け部9100は、満杯になった実ブロックに対応する仮想ブロック(QLCは4つの仮想ブロック、TLCの場合は3つの仮想ブロック)に、別の実ブロックを割り当てる。別の実ブロックを割り当てる理由は、実ブロックの消去回数の偏りを少なくするためである。実際上、データライト要求受付け部9100は、図23において図示していないソフトウェアであるウエアレベリング処理部をコールして、その仮想ブロックに割り当てる実ブロックを決定させる。
本実施の形態では、QLCモードの実ブロックの集合と、TLCモードの実ブロックの集合とは、独立にウエアレベリングが実行されるものとする。すなわち、QLCモードの実ブロックの集合の消去回数と、TLCモードの実ブロックの集合の消去回数とは、それぞれ独立に均衡化されることになる。
データライト要求受付け部9100は、かかるウエアレベリング処理部から、新たに書込み対象のデータを格納する実ブロックの実ブロック情報3300のアドレスを受け取る。ここでは、かかる仮想ブロックの仮想ブロック情報3200(図14)におけるセルモード変更フラグ欄3207(図14)に格納されたセルモード変更フラグがオフの場合、これまでQLCモードで動作しているときや、QLCモードで動作する実ブロックをこれまでTLCモードで動作しているときには、TLCモードで動作する実ブロックの実ブロック情報3300を受け取る。
一方、セルモード変更フラグがオンの場合、これまで割り当てていたセルモードとは別のセルモードの実ブロックを割り当てる必要がある。ここでは、これまでQLCモードで動作していた場合には、3つのQLCモードの実ブロックに対応する12個の仮想ブロックのデータを、4つのTLCモードの実ブロックに格納する。このため、現在処理対象としているQLCモードの実ブロック以外で、セルモード変更フラグがオンになっている仮想ブロックを割り当てている2つのQLCモードの実ブロックと対応する仮想ブロック情報3200と、4つのTLCモードで動作している実ブロックの情報を受け取る。これまでTLCモードで動作していた場合、4つのTLCの実ブロックに対応する12個の仮想ブロックを、3つのQLCの実ブロックに格納する。このため、現在処理対象としているTLCの実ブロック以外で、セルモード変更フラグがオンになっている仮想ブロックを割り当てている3つのTLCの実ブロックと対応する仮想ブロック情報と、3つのQLCで動作している実ブロックの情報を受け取る。
またセルモード変更フラグがオンの場合、対応する仮想ブロック情報3200の仮想ブロックセルモード欄3207に格納されたその仮想ブロックのセルモードを、これまでQLCモードならTLCモードに、TLCモードならQLCモードに変更し、さらに、セルモード変更フラグをオフにする。また、データを格納する実ブロックは、消去された状態にあり、直接データを書き込めるような状態であるとする。
また本実施の形態では、ウエアレベリング処理部は、例えば、特許文献2のような公知の技術を前提とするので、ここでは、特に詳細に説明しない。なお、データライト要求受付け部9100は、ここで対応する仮想ブロック情報3200の仮想ブロック消去回数欄3204(図14)に格納された消去回数を増やす。実際上、データライト要求受付け部9100は、これまでTLCモードの実ページを割り当てていた仮想ブロックについては、かかる消去回数を元の値に「0.33」を加えた値に更新し、QLCモードの実ページを割り当てていた2つの仮想ブロックについては、かかる消去回数をそれぞれ「0.25」を加えた値に更新する。
ステップ11015:データライト要求受付け部9100は、セルモードを変更しない場合には、現在の仮想ブロックのセルモードがQLCモードのときには4つの仮想ブロックに格納されたデータ、現在の仮想ブロックのセルモードがTLCモードのときには3つの仮想ブロックに格納されたデータをバッファ330(図3)に読み出し、セルモードを変更する場合には、12個の仮想ブロックに格納されたデータをバッファ330に読み出す。このため、対応する仮想ブロック情報3200(図11、図14)のセグメントアドレスポインタ欄3208のうち、格納された値が「Null」となっていないセグメントアドレスポインタ欄3208に格納されたセグメントアドレスポインタで示されたアドレスから、どのフラッシュチップ300のどのアドレスから、どの長さのデータをバッファ330に転送するかを表すアドレスリストを生成する。
ステップ11016:データライト要求受付け部9100は、ステップ11007で認識したフラッシュチップ300に対応したチップ情報3100をアクセスして、当該フラッシュチップ300が接続されているパッケージバス340を識別し、対応するパッケージバス転送装置350を認識する。
ステップ11017:データライト要求受付け部9100は、ステップ11015で生成したアドレスリストに基づいて、ステップ11016で認識したパッケージバス転送装置350に対し、フラッシュチップ300及び当該フラッシュチップ300内のアドレスを指定して、そのアドレスに格納されたデータを読み出してバッファ330に転送するよう指示を与える。
ステップ11018:データライト要求受付け部9100は、ステップS11017で指示を与えたパッケージバス転送装置350が当該指示に従ってかかるデータをバッファ330に転送し終える(そのデータをバッファ330に書き込み終える)のを待つ。
ステップ11019:データライト要求受付け部9100は、セルモードを変更しない場合には、処理対象とした各仮想ブロックの仮想ブロック情報3200(QLCモードのときには4つの仮想ブロックの仮想ブロック情報3200、TLCのときには3つの仮想ブロックの仮想ブロック情報3200)の中で、「Null」になっていないセグメントアドレスポインタ3208を更新する。データライト要求受付け部9100は、最初の有効なセグメントアドレスポインタ3208に割り当てた実ブロックの先頭アドレスを設定し、これ以降の有効なセグメントアドレスポインタ3208には、当該先頭アドレスにセグメント長を順次加算した値をそれぞれ設定していく。QLCモードからTLCモードにセルモードを変更する場合、3つの仮想ブロックのデータを1つの実ブロックに格納する処理を行うため、このような処理を4回繰り返す。TLCモードからQLCモードにセルモードを変更する場合には、4つの仮想ブロックのデータを1つの実ブロックに格納する処理を行うため、このような処理を3回繰り返す。
ステップ11020:データライト要求受付け部9100は、新たに割り当てた実ブロックに対応する実ブロック情報3300(図15)の実ブロックID欄3301(図15)を参照して、この実ページがどのフラッシュチップ300のどのアドレスにあるかを検出し、ステップ11017でバッファ330に書き込まれたデータをその実ページに転送することを指示するためのアドレスリストを生成する。
ステップ11021:データライト要求受付け部9100は、ステップ11020で検出した、ライトデータを格納すべきフラッシュチップ300に対応したチップ情報3100(図13)にアクセスして、当該フラッシュチップ300が接続されているパッケージバス340を識別し、対応するパッケージバス転送装置350を検出する。
ステップ11022:データライト要求受付け部9100は、ステップ11021で認識したパッケージバス転送装置350に対して、ステップ11020で検出したフラッシュチップ300のステップ11020で検出したアドレスに、ステップ11017でバッファ330に格納したデータを当該バッファ330から読み出して書き込むよう指示を与える。
ステップ11023:データライト要求受付け部9100は、ステップS11022で指示を与えたパッケージバス転送装置350が当該指示に従ってかかるデータをバッファ330から指定したフラッシュチップ300の指定したアドレスに書き終えるのを待つ。
ステップ11024:データライト要求受付け部9100は、自フラッシュパッケージ230の仮想容量を変化させる必要があるかをチェックするために、仮想容量判定処理部9400(図23)をコールする。
ステップ11025:このステップは、ステップ11014で別の実ブロックを割り当てた仮想ブロックに元々割り当てられていた実ブロック(満杯になった実ブロック)を空いた状態にするステップである。データライト要求受付け部9100は、まず、かかる元々割り当てられていた実ブロックに格納されているすべてのデータを消去する。そしてデータライト要求受付け部9100は、このデータ消去処理が完了すると、次に、その実ブロックに対応する実ブロック情報3300(図15)の空き実ブロックポインタ欄3302(図15)に、QLC空き実ブロック情報ポインタ3400(図11)が示していた実ブロック情報3300のアドレスを設定し、QLC空き実ブロック管理情報ポインタ3400には、元々割り当てていた実ブロックに対応する実ブロック情報3300のアドレスを設定する。
ステップ11026:データライト要求受付け部9100は、満杯になった実ブロックに対応する仮想ブロック(QLCモードの場合は4つの仮想ブロック、TLCモードの場合は3つの仮想ブロック)に、別の実ブロックを割り当てる。具体的に、データライト要求受付け部9100は、対応する数だけの仮想ブロック情報3200(図14)の実ブロック情報ポインタ欄3202(図14)が、新しく割当てた実ブロックの実ブロック情報3300を示すように、これら仮想ブロック情報3200を更新する。
ステップ11027:データライト要求受付け部9100は、ストレージコントローラ200(図2)に対して、データライト処理が終了したことを報告する。この際、仮想ブロックに消去が発生しているので、データライト要求受付け部9100は、消去が発生したことを、ストレージコントローラ200に報告する。なお、当該フラッシュパッケージ230の仮想容量を変化させる場合、データライト要求受付け部9100は、新たな仮想容量と、これまでの容量(パッケージ容量欄3002(図12)に格納されていた値)とをストレージコントローラ200に報告する。またデータライト要求受付け部9100は、パッケージ容量欄3002には、新たな仮想容量を設定する。
(1−4−2−3)実ブロック解放処理
図26は、ストレージコントローラ200から、領域の範囲(仮想セグメントの集合)を指定して、その領域の範囲を解放せよという要求(以下、これをブロック解放要求と呼ぶ)がフラッシュパッケージ230(図3)に与えられたときに、実ブロック解放処理実行部9200(図23)により実行される実ブロック解放処理の処理手順を示す。なお、この場合、ストレージコントローラ200からは、解放すべき領域の範囲として、12の倍数の仮想ブロックが指定されるものとする。
ステップ12000:仮想ブロック解放処理実行部9200は、受信したブロック解放要求において指定された、対象とすべき領域の範囲と、各フラッシュパッケージ230のパッケージ情報3000(図12)のパッケージ容量欄3002に格納されたフラッシュパッケージ230の容量とから、解放を指示された仮想ブロックの集合を算出する。また仮想ブロック解放処理実行部9200は、この仮想ブロックごとに、その仮想ブロックの仮想ブロック情報3200にアクセスして、解放を指示された領域の範囲に含まれる各仮想セグメントのセグメントアドレスを、対応する実セグメントアドレスポインタ欄3208からそれぞれ取得する。
ステップ12001:仮想ブロック解放処理実行部9200は、解放すべき領域の範囲に含まれるすべての仮想セグメントについて、対応するセグメントアドレスポインタが「Null」のものと、そうでないものとに分類する。以下においては、セグメントアドレスポインタが「Null」でないものを「有効セグメントアドレスポインタ」と呼ぶものとする。
ステップ12002:実ブロック解放処理実行部9200は、有効セグメントアドレスポインタごとに、その有効セグメントアドレスポインタが指し示す実セグメントを含む実ブロックを提供するフラッシュチップ300を特定し、そのフラッシュチップ300に対応するチップ情報3100(図13)を参照してそのフラッシュチップ300が接続されているパッケージバス340(図3)を特定し、そのパッケージバス340に接続されたパッケージバス転送装置350(図3)を特定する。
ステップ12003:実ブロック解放処理実行部9200は、すべての有効な実セグメントアドレスポインタ3208に基づいて、アクセスすべきすべてのフラッシュチップ300と、これらフラッシュチップ300内のアクセスすべき相対アドレスとが掲載された情報リストを生成する。この後、生成した情報リストをステップ12002で特定した対応するパッケージバス転送装置350に渡し、この情報リストに従って、対応するフラッシュチップ300内の対応する相対アドレスの実セグメントからデータを読み出して、これをバッファ330に格納するよう指示を与える。
ステップ12004:実ブロック解放処理実行部9200は、ステップ12003で指示を与えたすべてのパッケージバス転送装置350が、指示したフラッシュチップ300内の指示した相対アドレスの実セグメントからデータを読み出してバッファ330に格納し終えるのを待つ。
ステップ12005:実ブロック解放処理実行部9200は、かかるデータのバッファ330への格納が完了した各仮想ブロックが割り当てられているすべての実ブロックを解放する。
具体的に、実ブロック解放処理実行部9200は、かかる仮想ブロックに対応する仮想ブロック情報3200(図14)の実ブロック情報ポインタ欄3202及び対応するセグメントアドレスポインタ欄3205の値を「Null」に更新する。
また実ブロック解放処理実行部9200は、対応するすべての実ブロック情報3300(図15)の実ブロック内空き容量欄3304(図15)に格納されている値を、セルモードがTLCモードである場合の空き容量に更新すると共に、これら実ブロック情報3300のセルモード欄3303に格納されている値をすべてTLCに更新する。
さらに実ブロック解放処理実行部9200は、対応するすべての実ブロックに格納されたデータを消去すると共に、これら実ブロックのセルモードをTLCに変更する。その後、実ブロック解放処理実行部9200は、対応するすべての実ブロック情報3300(図15)を、対応するTLC空き実ブロック情報ポインタ3500(図11)で管理されるTLC空き実ブロック情報管理キュー3501(図17)に接続する。
ステップ12006:実ブロック解放処理実行部9200は、ステップ12001の処理結果と、データをバッファ330に読み出した実セグメントの情報とを、ストレージコントローラ200に送信する。そして実ブロック解放処理実行部9200は、この後、この実ブロック解放処理を終了する。
(1−4−2−4)仮想ブロック格納処理
図27は、ストレージコントローラ200から、領域の範囲(仮想ブロックの集合)を指定して、その領域の範囲内の各仮想ブロックに実ブロックをそれぞれ割り当てて、当該ストレージコントローラ200から送信されるデータを格納せよという要求(以下、これを仮想ブロック格納要求と呼ぶ)がフラッシュパッケージ230(図3)に与えられたときに、仮想ブロック格納処理実行部9300により実行される仮想ブロック格納処理の処理手順を示す。なお、この場合、ストレージコントローラ200からは、かかる領域の範囲として、12の倍数の仮想ブロックが指定されるものとする。
ステップ13000:仮想ブロック格納処理実行部9300は、受信した仮想ブロック格納要求において指定された領域の範囲と、各フラッシュパッケージ230のパッケージ情報3000(図12)のパッケージ容量欄3002に格納されたフラッシュパッケージ230の容量とから、対象となる仮想ブロックの集合を算出する。本実施の形態では、4n(n>=0)の仮想ブロックから4n+3の仮想ブロックが指定されるものとする。また仮想ブロック格納処理実行部9300は、これら仮想ブロックごとに、その仮想ブロックの仮想ブロック情報3200にアクセスして、その仮想ブロックに含まれる各仮想セグメントとそれぞれ対応付けられた実セグメントのセグメントアドレスを、対応する仮想ブロック情報3200(図14)の各実セグメントアドレスポインタ欄3208からそれぞれ取得する。
ステップ13001:仮想ブロック格納処理実行部9300は、ストレージコントローラ200から、仮想ブロック格納要求において指定された領域の範囲内の各仮想セグメントうち、データを格納すべきすべての仮想セグメントの指定と、これら仮想セグメントに格納すべきデータとを取得し、取得したこれら仮想セグメントごとのデータをバッファ330(図3)に格納する。
ステップ13002:仮想ブロック格納処理実行部9300は、仮想ブロック格納要求において指定された領域の範囲内の各仮想ブロックに対して実ブロックを割り当てる。本実施の形態の場合、仮想ブロック格納処理実行部9300は、このときQLCモードの空き実ブロックを割り当てる。従って、このとき仮想ブロック格納処理実行部9300は、仮想ブロック格納要求において指定された領域の範囲に含まれる仮想ブロックの数の1/4の数の実ブロックを割り当てることになる。具体的に、仮想ブロック格納処理実行部9300は、仮想ブロック格納要求において指定された領域の範囲内の仮想ブロックの数の1/4の数の実ブロック情報3300(図15)を対応するQLC空き実ブロック情報ポインタ3400(図11)により管理されるQLC空き実ブロック情報管理キュー3401(図16)から取り出して、これら実ブロック情報3300にそれぞれ対応する実ブロックをかかる仮想ブロックに割り当てる。
この際、仮想ブロック格納処理実行部9300は、最初の4つの仮想ブロックについては同じ1つの実ブロックを割り当てる。具体的に、仮想ブロック格納処理実行部9300は、最初の4つの仮想ブロックにそれぞれ対応する仮想ブロック情報3200(図14)の実ブロック情報ポインタ欄3202(図14)に、かかるQLC空き実ブロック情報管理キュー3401から取り出した同一の実ブロック情報3300を指し示すポインタを格納する。以下、同様にして、仮想ブロック格納処理実行部9300は、指定された領域の範囲に含まれる残りのすべての仮想ブロックについて、その4つの連続する仮想ブロックごとに、これら仮想ブロックの仮想ブロック情報3200の実ブロック情報ポインタ欄3202に、かかるQLC空き実ブロック情報管理キュー3401から取り出した同一の実ブロック情報3300を指し示すポインタをそれぞれ格納する。
ステップ13003:仮想ブロック格納処理実行部9300は、仮想ブロック格納要求において指定された領域の範囲内の各仮想ブロック内のすべての仮想セグメントに実セグメントを割り当てる。具体的に、仮想ブロック格納処理実行部9300は、これら仮想ブロックにそれぞれ対応する仮想ブロック情報3200の各セグメントアドレスポインタ欄3208(図14)にそれぞれ値を設定する。この際、仮想ブロック格納処理実行部9300は、データを格納すべきでない仮想セグメントに対応するセグメントアドレスポインタ欄3208には「Null」を設定する。
また仮想ブロック格納処理実行部9300は、データを格納すべきでない仮想セグメントに対応するセグメントアドレスポインタ欄3208には、その仮想ブロックに割り当てる実ブロックに対応する実ブロック情報3300(図15)の空き実ブロック空き容量欄3304(図15)に格納された空き容量から算出される空き実セグメントの数から、その仮想セグメントに割り当てる実セグメントのアドレスを決定し、この値をその仮想セグメントに対応するセグメントアドレスポインタ欄3208に設定する。仮想ブロック格納処理実行部9300は、セグメントアドレスポインタ欄3208に実セグメントのアドレスを設定した場合、その実セグメントを含む実ブロックの実ブロック情報3300の実ブロック内空き容量欄3304に格納されているその実ブロック内の空き容量を、実セグメント1つ分の容量だけ減少させる。
ステップ13004:仮想ブロック格納処理実行部9300は、上述のようにして決定したデータを格納する各実セグメントを提供するフラッシュチップ300(図3)のチップ情報3100(図13)の接続バスID欄3104(図13)を参照してそのフラッシュチップ300が接続されているパッケージバス340を特定し、そのパッケージバス340に接続されているパッケージバス転送装置350(図3)を特定する。
ステップ13005:仮想ブロック格納処理実行部9300は、ステップ13004で特定したパッケージバス転送装置350に対して、バッファ330に格納されているストレージコントローラ200からのデータを、どのフラッシュチップ300のどのアドレスに格納すべきか指示を与える。
ステップ13006:仮想ブロック格納処理実行部9300は、ステップ13005で指示を与えたパッケージバス転送装置350が、指示したフラッシュチップ300内の指示したアドレスにデータを格納し終えるのを待つ。
ステップ13007:仮想ブロック格納処理実行部9300は、ステップ13006でデータを書き込んだフラッシュチップ300に対応するチップ情報3100(図13)のチップ内空き実ブロック数欄3103に格納された値を、ステップS13002で仮想ブロックに割り当てた実ブロックの数だけ減算した値に更新する。また仮想ブロック格納処理実行部9300は、仮想ブロック格納要求の送信元のストレージコントローラ200に当該仮想ブロック格納要求に対する処理の完了を報告し、この後、この仮想ブロック格納処理を終了する。
(1−4−2−5)仮想容量判定処理
図28は、仮想容量判定処理部9400により定期的又は不定期に実行される仮想容量判定処理の処理手順を示す。仮想容量判定処理部9400は、この図28に示す処理手順に従って、その仮想容量判定処理部9400が実装されたフラッシュパッケージ230(以下、これを自フラッシュパッケージ230と呼ぶ)の寿命を予測し、必要があれば、必要なセルのセルモードをQLCモードからTLCモードに、又は、TLCモードからQLCモードに変更する。
ステップ14000:仮想容量判定処理部9400は、自フラッシュパッケージ230内の実ブロックが割り当てられているすべての仮想ブロック(以下、これらを対象先仮想ブロックと呼ぶ)について、対応する仮想ブロック情報3200(図14)の仮想ブロック消去回数欄3204(図14)に格納されているその対象仮想ブロックにおけるデータの消去回数と、当該仮想ブロック情報3200の実ブロック割当て時刻欄3205(図14)に格納されている当該対象仮想ブロックに実ブロックを割り当てた時刻と、現在時刻とに基づいて、その対象仮想ブロックの単位時間当たりのデータ消去回数をそれぞれ算出する。また仮想容量判定処理部9400は、この算出結果に基づいて、かかる対象仮想ブロックを単位時間当たりのデータ消去回数が少ない順番に並べる。
ステップ14001:仮想容量判定処理部9400は、現在時刻から自フラッシュパッケージ230の保証期間が満了するまでの時間を算出する。
ステップ14002:仮想容量判定処理部9400は、これまでと同じペースで各対象仮想ブロックに対するデータの消去が行われた場合に、いずれかの対象仮想ブロックが「自フラッシュパッケージ230(図2)の保証期間が完了するまでの間に、いずれかの対象仮想ブロックの消去回数がQLCモードでのデータの消去回数の上限値に到達」するか否かをそれぞれ判定する。
具体的に、仮想容量判定処理部9400は、各対象仮想ブロックについて、ステップS14000で算出したその対象仮想ブロックの単位時間当たりのデータ消去回数と、ステップS14001で算出した自フラッシュパッケージ230の保証期間が完了するまでの時間とを乗算し、乗算結果にその対象仮想ブロックの現在までのデータ消去回数を加算することにより、自フラッシュパッケージ230の保証期間が満了するまでの間にその割当て対象の仮想ブロックにおいて実行されるデータ消去回数(以下、これを推定データ消去回数と呼ぶ)をそれぞれ推定する。そして仮想容量判定処理部9400は、このようにして推定した各対象仮想ブロックの推定データ消去回数を、並べられた対象仮想ブロックの順番で、QLCモードでのデータの消去回数の上限値として設定した閾値(以下、これをデータ消去回数閾値と呼ぶ)と順次比較する。
そして仮想容量判定処理部9400は、かかる推定データ消去回数がかかるデータ消去回数閾値以上の対象仮想ブロックについては、「自フラッシュパッケージ230の保証期間が完了するまでの間に、データ消去回数がQLCモードでのデータ消去回数の上限値に到達」すると予測し、かかる推定データ消去回数がかかるデータ消去回数閾値未満の対象仮想ブロックについては、「自フラッシュパッケージ230(図2)の保証期間が完了するまでの間に、データ消去回数がQLCモードでのデータ消去回数の上限値に到達」しないと予測する。
そして、すべての対象仮想ブロックについて、「自フラッシュパッケージ230の保証期間が完了するまでの間に、データ消去回数がQLCモードでのデータの消去回数の上限値に到達」しないと予測できた場合には(ステップ14002:NO)、すべての対象仮想ブロックをQLCモードで動作させても問題がないため、仮想容量判定処理部9400はこの仮想容量判定処理を終了する。これに対して仮想容量判定処理部9400は、いずれかの対象仮想ブロックについて、「自フラッシュパッケージ230の保証期間が完了するまでの間に、データ消去回数がQLCモードでのデータ消去回数の上限値に到達」すると予測した場合には(ステップ14002:YES)、ステップ14003に進む。
ステップ14003:ステップ14002で最初に「自フラッシュパッケージ230の保証期間が完了するまでの間に、データ消去回数がQLCモードでのデータ消去回数の上限値に到達」すると予測した対象仮想ブロック及び当該対象仮想ブロックよりも後に並べられている各対象仮想ブロックについては、その対象仮想ブロックに割り当てられている実ブロックを、QLCモードよりもデータ消去回数の上限値が高いTLCモードで動作させる必要がある。
そこで仮想容量判定処理部9400は、このステップ14003において、ステップ14002で最初に「自フラッシュパッケージ230の保証期間が完了するまでの間に、データ消去回数がQLCモードでのデータ消去回数の上限値に到達」すると予測された対象仮想ブロック及び当該対象仮想ブロックよりも後に並べられている各対象仮想ブロックのうち、現在、その対象仮想ブロックに割り当てられた実ブロックのセルモードがQLCモードに設定されている対象仮想ブロックをすべて特定する。この特定は、対応する仮想ブロック情報3200(図14)の仮想ブロックセルモード欄3206(図14)に格納されたセルモードがQLCモードの対象仮想ブロックを特定することにより行われる。
ステップ14004:仮想容量判定処理部9400は、このステップ14004において、ステップ14002で最初に「自フラッシュパッケージ230の保証期間が完了するまでの間に、データ消去回数がQLCモードでのデータ消去回数の上限値に到達」すると予測した対象仮想ブロックよりも前に並べられている各対象仮想ブロックのうち、現在、その対象仮想ブロックに割り当てられた実ブロックのセルモードがTLCモードに設定されている対象仮想ブロックをすべて特定する。この特定は、対応する仮想ブロック情報3200(図14)の仮想ブロックセルモード欄3206(図14)に格納されたセルモードがTLCモードの対象仮想ブロックを特定することにより行われる。
ステップ14005:仮想容量判定処理部9400は、ステップ14003で特定した各対象仮想ブロックにそれぞれ割り当てられている実ブロックを、セルモードをQLCモードからTLCモードに変更する実ブロックに決定すると共に、ステップ14004で特定した各対象仮想ブロックにそれぞれ割り当てられている実ブロックを、セルモードをTLCモードからQLCモードに変更する実ブロックに決定し、ステップ14003で特定した各対象仮想ブロックに割り当てられている実ブロックと、ステップ14004で特定した各対象仮想ブロックに割り当てられている実ブロックとを入れ替えるため、これらの実ブロックの仮想ブロック情報3200(図14)のセルモード変更フラグ欄3208に格納されているセルモード変更フラグをそれぞれオンに設定する。
ただし、QLCとTLCの容量比率は、4対3であるため、ステップ14003で特定した各対象仮想ブロックと、ステップ14004で特定した各対象仮想ブロックとを入れ替えるに際しては、QLCモードで動作している3つの実ブロックに格納されている対象仮想ブロック12個分と、TLCモードで動作している4つの実ブロックに格納されている対象仮想ブロック12個分との入れ替えを行うことになる。
ステップ14006:仮想容量判定処理部9400は、ステップ14003で特定した各対象仮想ブロックにそれぞれ割り当てられている実ブロックと、ステップ14004で特定した各対象仮想ブロックにそれぞれ割り当てられている実ブロックとの入れ替えだけでは不十分で、ステップS14003で特定した対象仮想ブロックにそれぞれ割り当てられている実ブロックの中に、セルモードがTLCモードに設定された実ブロックと入れ替えることができない実ブロック(以下、これを残り実ブロックと呼ぶ)が発生するか否かを判定する。そして仮想容量判定処理部9400は、この判定で否定結果を得た場合(ステップ14006:NO)にはステップS14008に進み、肯定結果を得た場合(ステップ14006:YES)にはステップ14007に進む。
ステップ14007:仮想容量判定処理部9400は、ステップ14006で肯定結果を得た場合、現在QLCモードに設定されている実ブロックを幾つTLCモードに変更すれば「自フラッシュパッケージ230の保証期間が完了するまでの間に、データ消去回数がQLCモードでのデータ消去回数の上限値に到達」すると予測した対象仮想ブロックに割り当てられている各実ブロックにそれぞれ格納されているデータをすべてTLCモードに設定された実ブロックに移動させられるかを計算(つまり、上述の残り実ブロックの数を計算)する。
そして仮想容量判定処理部9400は、算出した数と同じ数の実ブロック情報3300を、自フラッシュパッケージ230に対応するQLC空き実ブロック情報ポインタ3400(図11)で管理しているQLC空き実ブロック情報管理キュー3401(図16)から、自フラッシュパッケージ230に対応するTLC空き実ブロック情報ポインタ3500(図11)で管理しているTLC空き実ブロック情報管理キュー3501(図17)に移す。
この際、仮想容量判定処理部9400は、TLC空き実ブロック情報管理キュー3501に移した各実ブロック情報3300のセルモード欄3303に格納されている値をTLCモードに変更する。さらに、仮想容量判定処理部9400は、これら実ブロック情報3300の実ブロック空き容量欄3304に格納されている容量を、セルモードをTLCモードに変更した場合のブロックサイズに応じた容量に変更にする。
ステップ14008:仮想容量判定処理部9400は、「自フラッシュパッケージ230の保証期間が完了するまでの間に、データ消去回数がQLCモードでのデータ消去回数の上限値に到達」すると予測した対象仮想ブロックのうちの合計12個の対象仮想ブロックに割り当てられている3つの実ブロックに格納されているデータを、ステップ14004で特定した仮想ブロックに割り当てられている実ブロックや、ステップ14007で実ブロック情報3300をTLC空き実ブロック情報管理キュー3501に移した実ブロックからなる合計4つの実ブロックに移行させるため、仮想ブロック移動処理部9500(図23)をコールする。
ステップ14009:仮想容量判定処理部9400は、ステップ14003で特定した各仮想ブロックに割り当てられている実ブロックに格納されたデータをすべてTLCモードの実ブロックに移行し終えたか否かを判断する。そして仮想容量判定処理部9400は、この判断で否定結果を得た場合(ステップ14009:NO)にはステップ14008に戻る。このように仮想容量判定処理部9400は、ステップ14003で特定した各仮想ブロックに割り当てられている実ブロックに格納されたデータを、12個の仮想ブロック単位で、TLCモードの実ブロックに移行させる。そして仮想容量判定処理部9400は、ステップ14003で特定した各仮想ブロックに割り当てられている各実ブロックに格納されたデータをすべてTLCモードの実ブロックに移行し終えると(ステップ14009:YES)、ステップ14010に進む。
ステップ14010:仮想容量判定処理部9400は、自フラッシュパッケージ230の新たな容量をストレージコントローラ200に報告する。以上により、この仮想容量判定処理が終了する。
(1−4−2−6)仮想ブロック移動処理
次に、仮想ブロック移動処理部9500の処理内容について説明する。仮想ブロック移動処理実行部9500は、仮想容量判定処理部9400によりコールされると、そのとき仮想容量判定処理部9400により指定された12個の仮想ブロックに格納されているデータを、TLCモードで動作する実ブロックに移動させる仮想ブロック移動処理を実行する。
この場合、仮想ブロック移動処理実行部9500は、まず、仮想容量判定処理部9400により指定された12個の仮想ブロックに格納されているデータをバッファ330(図3)に読み出す。この処理の内容は、図26について上述した実ブロック解放処理のステップ12000〜ステップ12005と同じであるため、ここでの説明は省略する。
この後、仮想ブロック移動処理実行部9500は、バッファ330に読み出したデータを移動先の4つのTLCモードの実ブロックに書き込む。この処理の内容は、図27について上述した仮想ブロック格納処理のステップ13001〜ステップ13007とほぼ同様である。ただし、図27の仮想ブロック格納処理では、12個の仮想ブロックに対してQLCモードで動作している3個の実ブロックを割り当てているのに対し、本処理では、TLCモードで動作している4個の実ブロックを割り当てる点が異なる。これ以外は同じであるため、ここでの説明は省略する。
(1−5)本実施の形態の効果
以上のように本実施の形態のストレージシステム100では、仮想ブロックごとに、これまでと同じペースで各対象仮想ブロックに対するデータの消去が行われた場合に、いずれかの対象仮想ブロックが「自フラッシュパッケージ230(図2)の保証期間が完了するまでの間に、いずれかの対象仮想ブロックの消去回数がQLCモードでのデータの消去回数の上限値に到達」するか否かをそれぞれ判定する。
そして本ストレージシステム100では、いずれかの仮想ブロックについて、「自フラッシュパッケージ230の保証期間が完了するまでの間に、データ消去回数がQLCモードでのデータ消去回数の上限値に到達」すると予測した場合には、その仮想ブロックに割り当てられている実ブロックのセルモードを、QLCモードよりもデータ消去回数の上限値が高いTLCモードに変更する。
従って、本実施の形態によれば、各仮想ブロックについて、その仮想ブロックに割り当てられた実ブロックのセルモードをできる限りQLCモードで用いながら、自フラッシュパッケージ230(図2)の保証期間が完了するまでの間にデータ消去回数がQLCモードでのデータの消去回数の上限値に到達すると予測される仮想ブロックについては、その仮想ブロックに割り当てられた実ブロックのセルモードをTLCモードに変更するため、記憶資源を有効に活用しながら、保証期間内のフラッシュパッケージ230の性能維持をも行い得る信頼性の高いストレージシステムを実現することができる。
また本実施の形態によれば、各仮想ブロックにそれぞれ割り当てられた実ブロックをなるべく1つのセルに格納可能な情報量が多いQLCモードで動作させることができるため、ストレージシステム100全体の情報格納量も多くすることができ、その分、情報システム1全体を構築する際のコストを低減させることができる。
(2)第2の実施の形態
次に、第2の実施の形態について説明する。第2の実施の形態は、第1の実施の形態と異なる点のみ説明する。
図6との対応部分に同一符号を付して示す図29は、本実施の形態の実ページ情報15000のデータ構成を示す。本実施の形態の場合、ストレージコントローラ200は、セルモードを実ページ単位でQLCモード又はTLCモードに設定する。このため本実施の形態の実ページ情報15000には、ページセルモード欄15001が設けられており、対応する実ページに設定されたセルモードを表す情報がこのページセルモード欄15001に格納される。なお本実施の形態における実ページのセルモードの初期値は、QLCモードであるものとする。
図18との対応部分に同一符号を付して示す図30は、本実施の形態のストレージコントローラ200のメモリ270に格納されたプログラム群の構成を示す。本実施の形態は、ライトアフタ処理実行部15100の処理内容が第1の実施の形態のライトアフタ処理実行部4200(図18)と異なる点と、プログラムの1つとしてページセルモード選択実行部15200がメモリ270に格納されている点とが第1の実施の形態と相違する。
図31は、本実施の形態のライトアフタ処理実行部15100により実行される第2の実施の形態によるライトアフタ処理の処理手順を示す。ステップ16000〜ステップ16005及びステップ16008〜ステップ16011の処理内容は、図21について上述した第1の実施の形態のライトアフタ処理のステップ7000〜ステップ7005及びステップ7006〜ステップ7009と同様であるので、ここでの説明は省略する。
本実施の形態によるライトアフタ処理が第1の実施の形態によるライトアフタ処理と異なる点は、ステップ16005及びステップ16008の間に、ステップ16006及びステップ16007が入っている点である。
ステップ16006:ライトアフタ処理実行部15100は、ステップ16003で対応するフラッシュパッケージ230に転送したデータ(デステージ対象データ)が格納された実ページのセルモードの見直しが必要かをチェックする。そしてライトアフタ処理実行部15100は、例えば、ページの消去回数がある閾値以上になったときなどにこのステップ16006で肯定結果を得(ステップ16006:YES)、この場合にはステップ16007に進む。またライトアフタ処理実行部15100は、これ以外のときにはステップ16008に進む(ステップ16006:NO)。
ステップ16007:ライトアフタ処理実行部15100は、ページセルモード選択実行部15200(図30)をコールし、この後、ステップ16008に進む。
図32は、上述のライトアフタ処理のステップ16007においてライトアフタ処理実行部15100にコールされたページセルモード選択実行部15200により実行されるセルモード選択処理の処理手順を示す。
ステップ17000:ページセルモード選択実行部15200は、すべての実ページについて、その実ページの実ページ情報15000(図29)のページ書込み量欄2105に格納されているその実ページへのデータ書込み量と、当該実ページ情報15000のページ割当て時刻欄2104に格納されている当該実ページを仮想ページに割り当てた時刻とに基づいて、その実ページの単位時間当たりのデータ消去回数をそれぞれ算出する。またページセルモード選択実行部15200は、この算出結果に基づいて、単位時間当たりのデータ消去回数が小さい順番に実ページをソートする。
ステップ17001:ページセルモード選択実行部15200は、実ページごとに、現在時刻から保証期間が完了するまでの時間をそれぞれ算出する。
ステップ17002:ページセルモード選択実行部15200は、単位時間当たりのデータ消去回数の少ない実ページの順番で、これまでと同じペースでその実ページに対するデータの消去が行われた場合に、その実ページを提供するフラッシュパッケージ230(図2)の保証期間が完了するまでの間に、その実ページのデータ消去回数がQLCモードの上限値に到達するか否かをそれぞれ判定する。そしてページセルモード選択実行部15200は、すべての実ページについて否定結果を得た場合には(ステップ17002:NO)、すべての実ページをQLCモードで動作させても問題がないため、このセルモード選択処理を終了する。これに対してページセルモード選択実行部15200は、いずれかの実ページについて肯定結果を得た場合には(ステップ17002:YES)、ステップ17003に進む。
ステップ17003:ステップ17002で最初に肯定結果が得られた実ページ及び当該実ページよりも後に並べられている各実ページについては、その実ページのセルモードを、QLCモードよりもデータ消去回数の上限値が高いTLCモードで動作させる必要がある。そこでページセルモード選択実行部15200は、このステップ17003において、ステップ17002で最初に肯定結果が得られた実ページ及び当該実ページよりも後に並べられている各実ページのうち、現在、セルモードがQLCモードに設定されている実ページをすべて特定する。この特定は、対応する実ページの実ページ情報15000(図29)のページセルモード欄15001(図29)に格納されたセルモードがQLCモードの実ページを特定することにより行われる。
ステップ17004:ステップ17002で最初に肯定結果が得られた実ページよりも前に並べられた実ページについては、その実ページのセルモードがQLCモードであっても、その実ページを提供するフラッシュパッケージ230(図2)の保証期間が完了するまでの間に、その実ページのデータ消去回数がQLCモードのデータ消去回数の上限値に到達することはないと予測される。そこでページセルモード選択実行部15200は、このステップ17004において、ステップ17002で最初に肯定結果が得られた実ページよりも前に並べられている各実ページのうち、現在、セルモードがTLCモードに設定されている実ページをすべて特定する。この特定は、対応する実ページの実ページ情報15000(図29)のページセルモード欄15001(図29)に格納されたセルモードがTLCモードの実ページを特定することにより行われる。
ステップ17005:ページセルモード選択実行部15200は、ステップ17003で特定した実ページの集合と、ステップ17004で特定した実ページの集合との間で、セルモードを交換するようフラッシュパッケージ230に要求する。具体的に、ページセルモード選択実行部15200は、当該フラッシュパッケージグループ280のフラッシュパッケージ230のアドレスを変更する。この後、ページセルモード選択実行部15200は、それぞれのフラッシュパッケージに、セルモードの交換(QLCモードからTLCモードに変更するアドレス、TLCモードからQLCモードに変更するアドレス)を要求して、処理の完了を待つ。
なお、本実施の形態では、それぞれのフラッシュパッケージ230には、12の倍数の仮想ブロックを指定して上述のセルモードの交換を要求するものとする。すなわち、3個のQLCモードの実ブロックに割り当てられた12個の仮想ブロックと、4個のTLCモードの実ブロックに割り当てられた12個の仮想ブロックとのセルモードが交換されることになる。この後、ページセルモード選択実行部15200は、交換を行った実ページに対応する実ページ情報15000(図29)のページセルモード欄15001に格納されているセルモードを更新する。交換を行っているだけなので、フラッシュパッケージ230で、QLCモードで動作させる実ブロック、TLCモードで動作させる実ブロックの数は、変化しないことになる。
ステップ17006:ページセルモード選択実行部15200は、ステップ17005におけるセルモードの交換だけでは不十分で、新たにQLCモードで動作している実ページを、TLCモードで動作する実ページに変更する必要があるかをチェックする。そしてページセルモード選択実行部15200は、この判定で否定結果を得た場合にはこのセルモード選択処理を終了し(ステップ17006:NO)、この判定で肯定結果を得た場合にはステップ17007に進む(ステップ17006:YES)。
ステップ17007:ステップ17006で肯定結果を得た場合、一部の実ページをTLCモードで動作させる必要がある。このためページセルモード選択実行部15200は、TLCモードで動作させる必要がある実ページで、現在QLCモードで動作させている実ページを特定する。
ステップ17008:ページセルモード選択実行部15200は、ステップ17007で特定した実ページの集合のアドレスから、当該フラッシュパッケージグループ280のフラッシュパッケージ230のアドレスに変換する。
ステップ17009:ページセルモード選択実行部15200は、アドレスを指定して、そのアドレスのセルのセルモードをTLCモードに変更するよう対応するフラッシュパッケージ230に要求する。なお、本実施の形態では、それぞれのフラッシュパッケージ230には、12の倍数の仮想ブロックが指定されるものとする。
ステップ17010:ページセルモード選択実行部15200は、ステップ17009においてセルモードの変更を要求したフラッシュパッケージ230から処理が完了した旨の通知が与えられるのを待つ。
ステップ17011:ページセルモード選択実行部15200は、セルモードをTLCモードに変更した各実ページについて、これら実ページの実ページ情報15000(図29)のページセルモード欄15001(図29)に格納されているセルモードをTLCモードに変更する。またページセルモード選択実行部15200は、仮想容量を変化するよう要求があった場合には、これを記憶して、処理を完了させる。
図23との対応部分に同一符号を付して示す図33は、本実施の形態においてフラッシュパッケージ230のパッケージメモリ320(図3)に格納されたプログラム群の構成を示す。第1の実施の形態と異なるのは、データライト要求受付け部18200の処理内容が第1の実施の形態によるデータライト要求受付け部9100(図23)の処理内容と相違する点と、仮想容量判定処理部9400(図23)に代えて、セルモード変更処理実行部18000及びセルモード交換処理部18100が格納されている点である。
図34は、図25Bについて上述した第1の実施の形態のデータライト処理に代えて本実施の形態のデータライト要求受付け部18200により実行されるデータライト処理の一部を示す。図25Aについて上述したデータライト処理の他の部分については、本実施の形態のデータライト要求受付け部18200も第1の実施の形態のデータライト要求受付け部9100と同様に処理するため、ここでの説明は省略する。
図34について、本実施の形態のデータライト要求受付け部18200は、ステップ18001〜ステップ18010を、図25Bについて上述した第1の実施の形態のデータライト処理のステップ11014〜ステップ11023と同様に処理する。またデータライト要求受付け部18200は、この後、仮想容量変更判定実行部12500(図23)をコールすることなく、ステップ18011を図25Bのステップ11025と同様に処理し、この後、このデータライト処理を終了する。
セルモード交換処理部18100は、セルモードをQLCモードからTLCモードに変更されるよう要求された仮想ブロックと、セルモードをTLCモードからQLCモードに変更するよう要求された仮想ブロックとの各仮想ブロックについて、その仮想ブロック情報3200(図14)のセルモード変更フラグ欄3207(図14)に格納されたセルモード変更フラグをオンに設定する処理を実行するだけであるため、セルモード交換処理部18100の処理に関する詳細な説明については省略する。
図35は、図32について上述したライトアフタ処理のステップ17005においてページセルモード選択実行部15200からセルモードの交換を要求されたセルモード変更処理実行部18000により実行されるセルモード変更処理の処理手順を示す。ここでは、ページセルモード選択実行部15200から交換対象として12の倍数の仮想ブロックが指定されるものとする。
ステップ19000:セルモード変更処理実行部16000は、かかる要求において指定されたアドレスから、どの仮想ブロックのセルモードをQLCモードからTLCモードに変更する必要があるかを認識する。この場合、QLCモードで動作している3つの実ブロックが割り当てられた12個の仮想ブロックに格納されたデータをTLCモードで動作する4つの実ブロックに移動する処理を、1回以上実行することになる。
ステップ19001:必要な数のTLCモードで動作させる空き実ブロックを確保する必要がある。このためセルモード変更処理実行部16000は、データを移動させる仮想ブロックの集合から必要な実ページの数を算出する。この数の実ページ情報15000(図29)を、QLC空き実ブロック情報ポインタ3400(図11)で管理しているQLC空き実ブロック情報管理キュー3401(図16)から、TLC空き実ブロック情報ポインタ3500(図11)で管理しているTLC空き実ブロック情報管理キュー3501に移す。
またセルモード変更処理実行部16000は、このように実ページ情報15000を移動させた実ページのセルモードをQLCモードからTLCモードに変更する。加えて、セルモード変更処理実行部16000は、これらの実ページについて、その実ページ情報15000のページセルモード欄15001(図29)に格納されているセルモードをTLCモードに変更する。さらにセルモード変更処理実行部16000は、これら実ページを構成する各実ブロックについて、その実ブロック情報3300(図15)の実ブロック内空き容量欄3304に格納されている容量を、セルモードがTLCモードのときのブロックサイズに応じた容量に変更する。
ステップ19002:QLCモードで動作している12個の仮想ブロックのデータを、TLCモードの実ページに移すため、セルモード変更処理実行部16000は、仮想ブロック移動処理部9500(図33)をコールする。仮想ブロック移動処理部9500の処理については、第1の実施の形態について上述した通りであるので、ここでの説明は省略する。
ステップ19003:セルモード変更処理実行部16000は、移動対象のすべての仮想ブロックについて移動し終えたか否かを判定する。セルモード変更処理実行部16000は、この判定において肯定否定結果を得た場合には、ステップ19002に戻って、再度、仮想ブロック移動処理部9500をコールする(ステップ19003:NO)。またセルモード変更処理実行部16000は、この判定で肯定結果を得た場合にはステップS19004に進む(ステップ19003:YES)。
ステップ19004:セルモード変更処理実行部16000は、QLC空き実ブロック情報ポインタ3400(図11)で管理しているQLC空き実ブロック情報管理キュー3401(図16)から、TLC空き実ページ情報ポインタ3500(図11)で管理しているTLC空き実ブロック情報管理キュー3501(図17)で、空いた状態になる仮想ブロックの数を確認する。十分な数の仮想ブロックがない場合、セルモード変更処理実行部16000は、新たな仮想容量を設定する。なお、セルモード変更処理実行部16000は、そのフラッシュパッケージ230の仮想容量を変化させる場合、新たな仮想容量とこれまでの容量(対応するパッケージ情報3000(図12)のパッケージ容量欄3002(図12)に格納されていた値)を、ストレージコントローラ200に報告する。またセルモード変更処理実行部16000は、かかるパッケージ容量欄3002に新たな仮想容量を設定する。そしてセルモード変更処理実行部16000は、このセルモード変更処理を終了する。
本実施の形態によれば、各仮想ページにそれぞれ割り当てられた実ページをなるべく1つのセルに格納可能な情報量が多いQLCモードで動作させることができるため、第1の実施の形態により得られる効果と同様の効果を得ることができる。
(3)他の実施の形態
なお上述の第1の実施の形態においては、仮想ブロック(実ブロック)ごとに、当該仮想ブロック(実ブロック)の劣化の度合いでなる劣化度が現在のセルモードのままとした場合に目標期間内に劣化度の限界に到達するかを予測する予測部としての機能をフラッシュパッケージ230(図3)のパッケージプロセッサ310(図3)に搭載するようにした場合について述べたが、本発明はこれに限らず、かかる機能をストレージコントローラ200(図2)に搭載するようにしてもよい。また第2の実施の形態においては、仮想ページ(実ページ)ごとに、当該仮想ページ(実ページ)の劣化の度合いでなる劣化度が現在のセルモードのままとした場合に目標期間内に劣化度の限界に到達するかを予測する予測部としての機能をストレージコントローラ200に搭載するようにした場合について述べたが、本発明はこれに限らず、かかる機能をフラッシュパッケージ230のパッケージプロセッサ310に搭載するようにしてもよい。
また上述の第1及び第2の実施の形態においては、セルモードがQLCモードの実ブロック又は実ページをTLCモードに変更する際、変更前の実ブロック又は実ページに格納されていたデータを同一のフラッシュパッケージ230や同一のフラッシュパッケージグループ280(図2)内の他の実ブロック又は実ページに移動させるようにした場合について述べたが、本発明はこれに限らず、かかるデータを他のフラッシュパッケージ230内や他のフラッシュパッケージグループ280内の実ブロック又は実ページに移動させるようにしてもよい。
さらに上述の第1及び第2の実施の形態においては、ブロックやページに対するデータ書込み量に基づいて、フラッシュパッケージ230(図3)の保証期間内におけるブロックやページごとのデータ消去回数を推定するようにした場合について述べたが、本発明はこれに限らず、例えば、ブロックやページに対する単位時間当たりのデータ消去回数をカウントし、当該カウント結果に基づいてフラッシュパッケージ230の保証期間内におけるブロックやページごとのデータ消去回数を推定するようにしてもよい。
さらに上述の第1及び第2の実施の形態においては、仮想ブロックや仮想ページの劣化度をフラッシュパッケージ230の保証期間内における仮想ブロックや仮想ページに対するデータ書込み量に基づいて予測するようにした場合について述べたが、本発明はこれに限らず、例えば、フラッシュパッケージ230内で管理している各仮想ブロックに対する単位時間当たりのライト回数(ライト頻度)に基づいてこれら仮想ブロックや仮想ページの劣化度を予測するようにしてもよく、仮想ブロックや仮想ページの劣化度の予測方法としては、この他種々の方法を広く適用することができる。なおフラッシュパッケージ230内で管理している各仮想ブロックに対する単位時間当たりのライト回数(ライト頻度)に基づいてこれら仮想ブロックや仮想ページの劣化度を予測するようにしても第1及び第2の実施の形態と同様の効果を得ることができる。
この場合、「劣化度の限界」は、その劣化度の定義により決定される。例えば、「劣化度」をブロックやページに対するデータの上書き回数とする場合には、そのブロックやページについて予め測定等により決定された上書き回数の上限回数が「劣化度の限界」ということになる。従って、この場合、仮想容量判定処理部9400(図23)やページセルモード選択実行部15200(図30)は仮想ブロックや仮想ページに対するデータのライト回数(上書き回数)がかかる保証期間内に予め計測等により求めたライト回数(上書き回数)の限界に到達するか否かを予測することになる。
さらに上述の第1及び第2の実施の形態においては、フラッシュパッケージ230の保証期間を目標期間とするようにした場合について述べたが、本発明はこれに限らず、フラッシュパッケージ230の保証期間以外の期間を目標期間とするようにしてもよい。
さらに上述の第1及び第2の実施の形態においては、所定大きさの記憶領域ごとに、セルのモードを第1のモードのままで使用した場合に、当該記憶領域の劣化度が目標期間内に当該劣化度の限界に到達するか否かを予測する予測部と、予測部の予測結果に基づいて、セルのモードを前記第1のモードから第2のモードに変更する記憶領域を決定する決定部と、決定部の決定結果に従って、該当する記憶領域のセルのモードを第2のモードに変更するモード変更部との機能を仮想容量判定処理部9400(図23)やページセルモード選択実行部15200(図30)に持たせるようにした場合について述べたが、本発明はこれに限らず、これら予測部、決定部及びモード変更部の機能を持つプログラムをそれぞれ独立に設けるようにしてもよい。