以下、図面を参照して、実施形態を説明する。
まず、図1を参照して、一実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。
このメモリシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)3として実現されている。
情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。ホスト2は、サーバ、パーソナルコンピュータのような情報処理装置である。
SSD3は、ホスト2として機能する情報処理装置のメインストレージとして使用され得る。SSD3は、情報処理装置に内蔵されてもよいし、情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
ホスト2とSSD3とを相互接続するためのインタフェースとしては、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)、Ethernet(登録商標),Fibre channel等が使用し得る。
SSD3は、コントローラ4、不揮発性メモリ(NANDメモリ)5、およびDRAM6を備える。NANDメモリ5は、限定されないが、複数のNANDフラッシュメモリチップを含んでいてもよい。
NANDメモリ5は、多数のNANDブロック(物理ブロック)B0〜Bm−1を含む。物理ブロックB0〜Bm−1は、消去単位として機能する。物理ブロックは「ブロック」または「消去ブロック」と称されることもある。
物理ブロックB0〜Bm−1は多数のページ(物理ページ)を含む。つまり、物理ブロックB0〜Bm−1の各々は、ページP0〜Pn−1を含む。NANDメモリ5においては、データのリードおよびデータのライトはページ単位で実行される。データの消去は物理ブロック単位で実行される。
コントローラ4は、Toggle、ONFIのようなNANDインタフェース13を介して、不揮発性メモリであるNANDメモリ5に電気的に結合されている。コントローラ4は、NANDメモリ5のデータ管理とNANDメモリ5のブロック管理とを実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。
データ管理には、(1)論理ブロックアドレス(LBA)と物理アドレスとの間の対応関係を示すマッピング情報の管理、(2)ページ単位のリード/ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。LBAと物理アドレスとの間のマッピングの管理は、ルックアップテーブル(LUT)33を用いて実行される。あるLBAに対応する物理アドレスは、このLBAのデータがライトされたNANDメモリ5内の記憶位置を示す。物理アドレスは、物理ページアドレスと物理ブロックアドレスとを含む。物理ページアドレスは全てのページに割り当てられており、また物理ブロックアドレスは全ての物理ブロックに割り当てられている。
ページへのデータ書き込みは、1消去サイクル当たり1回のみ可能である。
このため、コントローラ4は、同じLBAへのライト(上書き)を、NANDメモリ5上の別のページにマッピングする。つまり、コントローラ4は、この別のページにデータをライトする。そして、コントローラ4は、ルックアップテーブル(LUT)33を更新して、このLBAをこの別のページに関連付けると共に、元のページ(つまりこのLBAが関連付けられていた古いデータ)を無効化する。
ブロック管理には、不良ブロックの管理と、ウェアレベリングと、ガベージコレクション等が含まれる。ウェアレベリングは、物理ブロックそれぞれのプログラム/イレーズ回数を平準化するための動作である。
ガベージコレクションは、NANDメモリ5内のフリースペースを作り出すための動作である。このガベージコレクション動作は、NANDメモリ5のフリーブロックの個数を増やすため、有効データと無効データとが混在する幾つかの対象ブロック内の全ての有効データを別のブロック(例えばフリーブロック)にコピーする。そして、ガベージコレクション動作は、ルックアップテーブル(LUT)33を更新して、コピーされた有効データのLBAそれぞれを正しい物理アドレスにマッピングする。有効データが別のブロックにコピーされることによって無効データのみなったブロックはフリーブロックとして開放される。これによって、このブロックは消去後に再利用することが可能となる。
ホスト2は、ライトコマンドをSSD3に送出する。このライトコマンドは、ライトデータ(つまり書き込むべきデータ)の論理アドレス(開始論理アドレス)と、転送長とを含む。この実施形態においては、LBAが論理アドレスとして使用されるが、他の実施形態においてはオブジェクトIDが論理アドレスとして使用されても良い。LBAは、論理セクタ(サイズ: 例えば512バイト)に付与されるシリアル番号によって表現される。シリアル番号はゼロから始まる。SSD3のコントローラ4は、ライトコマンド内の開始論理アドレス(Starting LBA)と転送長とによって指定されるライトデータを、NANDメモリ5内の物理ブロックの物理ページにライトする。さらに、コントローラ4は、ルックアップテーブル(LUT)33を更新することによって、ライトされたデータに対応するLBAを、このデータがライトされた物理記憶位置に対応する物理アドレスにマッピングする。
次に、コントローラ4の構成について説明する。
コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、SRAM15等を含む。これらCPU12、NANDインタフェース13、DRAMインタフェース14、SRAM15は、バス10を介して相互接続される。
ホストインタフェース11は、ホスト2から様々なコマンド(ライトコマンド、リードコマンド、拡張ネームスペース管理コマンド、拡張ガベージコレクション制御コマンド、アンマップ(UNMAP)コマンド、等)を受信する。
ライトコマンドは、SSD3に対し、このライトコマンドによって指定されたデータをライトするように要求する。ライトコマンドは、先頭の論理ブロックのLBAと、転送長(論理ブロックの数)とを含む。リードコマンドは、SSD3に対し、このリードコマンドによって指定されたデータをリードするように要求する。リードコマンドは、先頭の論理ブロックのLBAと、転送長(論理ブロックの数)とを含む。
拡張ネームスペース管理コマンドは、通常のネームスペース管理コマンドの拡張コマンドである。
一般に、ホストソフトウェアが指定できるのは、ネームスペース用の論理ブロックアドレス(LBA)の数のみであり、実際にこのネームスペース用に割り当てられるべき物理ブロックの個数(不揮発性メモリ容量)を指定することはできない。すなわち、通常、ネームスペースのサイズはそのネームスペース作成動作において要求されたLBAの数に基づく。通常のSSDでは、このネームスペース用に割り当てられる物理ブロックの個数はSSD内のコントローラによって決定されてしまう。例えば、ネームスペース用に要求されたLBAの数に対応するサイズが90Mバイトであり、1つの物理ブロックの容量が100Mバイトであるならば、通常のSSDのコントローラは、1つの物理ブロックをこのネームスペース用に割り当てるかもしれない。あるいは、ネームスペース用に要求されたLBAの数に対応するサイズが120Mバイトであり、1つの物理ブロックの容量が100Mバイトであるならば、通常のSSDのコントローラは、2つの物理ブロックをこのネームスペース用に割り当てるかもしれない。しかし、このようなSSD依存の物理ブロック割り当て方法では、ホストソフトウェアが、異なる特徴(耐久性)を備えたネームスペースそれぞれの作成をSSDに要求することはできない。
拡張ネームスペース管理コマンドは、SSD3に対し、ネームスペース用の論理ブロックアドレス(LBA)の数を指定できるだけでなく、SSD3に対し、このネームスペースのために割り当てるべき物理ブロックの個数を指定することができる。つまり、拡張ネームスペース管理コマンドは、作成されるべきネームスペース用に確保されるべき物理リソースの量(物理ブロックの個数)を示すパラメータを含む。拡張ネームスペース管理コマンドは、ホスト2(ホストソフトウェア)が、ホスト2内のワークロードに適した個数の物理ブロックをネームスペースそれぞれのために確保することを可能にする。通常、ネームスペースに割り当てられる物理ブロックの数が増えるほど、そのネームスペースの耐久性を高めることができる。したがって、ホストソフトウェアは、拡張ネームスペース管理コマンドを使用することにより、異なる特徴(耐久性)を備えたネームスペースそれぞれを作成することができる。
拡張ガベージコレクション制御コマンドは、ホスト2によってSSD3のガベージコレクション動作を制御するためのホスト・イニシエーティッド・ガベージコレクションコマンドの拡張コマンドである。拡張ガベージコレクション制御コマンドは、SSD3に対し、ガベージコレクションの対象とすべきネームスペースを指定することができる。つまり、拡張ガベージコレクション制御コマンドは、ガベージコレクションが実行されるべき対象ネームスペースを示すパラメータを含む。
CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14、SRAM15を制御するように構成されたプロセッサである。CPU12は、上述のFTLレイヤの処理に加え、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行する。
これらFTLレイヤ処理およびコマンド処理は、CPU12によって実行されるファームウェアによって制御されてもよい。このファームウェアは、CPU12を、ネームスペース制御部21、ライトアンプリフィケーション算出部22、ガベージコレクション動作制御部23、および消耗/リテンション制御部24として機能させる。
ネームスペース制御部21は、複数のネームスペースを管理するためのマルチネームスペース管理機能を有する。ネームスペースは、不揮発性メモリであるNANDメモリ5内の一種の領域に相当する。ネームスペース制御部21は、ホスト2からのネームスペースそれぞれの作成要求に基づいて、複数のネームスペースを作成する。換言すれば、ネームスペース制御部21は、ホスト2からのネームスペースそれぞれの作成要求に基づいて、NANDメモリ5を複数の領域(ネームスペース)に論理的に分割する。ホスト2は、上述の拡張ネームスペース管理コマンドを使用してネームスペースそれぞれの作成をSSD3に要求することができる。ネームスペース制御部21は、これら個々の領域(ネームスペース)に対して、ホスト2によって指定された個数の物理ブロックを割り当てる。これら複数の領域(ネームスペース)は、異なる更新頻度を有する複数種のデータをそれぞれ格納するために使用される。
例えば、頻繁に更新されるタイプのデータ(Hotデータ)は、Hotデータを格納するための特定の領域にライトされる。Hotデータはダイナミックデータと称されることもある。更新の頻度が低いタイプのデータ(Coldデータ)は、Coldデータを格納するための特定の別の領域(tier)にライトされる。Coldデータは非ダイナミックデータまたはスタティックデータと称されることもある。
つまり、SSD3は物理的には一つのストレージデバイスであるが、SSD3内の複数の領域は異なる階層(tier)ストレージとして機能する。
これら複数の領域は、複数のネームスペースにそれぞれ関連付けられている。これにより、ホストソフトウェアは、Hotデータを特定のネームスペースのIDに関連付け、且つColdデータを特定の別のネームスペースのIDに関連付けるだけで、これらデータがライトされるべき領域(tier)を容易に指定することができる。
もしHotデータとColdデータとが同じ物理ブロックに混在される環境であったならば、ライトアンプリフィケーションは著しく増加する可能性がある。
なぜなら、HotデータとColdデータとが混在する物理ブロックにおいては、Hotデータの更新によって物理ブロック内の一部のデータだけが早いタイミングで無効化される一方、この物理ブロック内の残りのデータ部(Coldデータ)は有効状態に長い間維持される可能性があるためである。
ライトアンプリフィケーション(WA)は、以下のように定義される。
WA=「SSDにライトされたデータの総量」 / 「ホストからSSDにライトされたデータの総量」
「SSDにライトされたデータの総量」は、ホストからSSDにライトされたデータの総量とガベージコレクション等によって内部的にSSDにライトされたデータの総量との和に相当する。
ライトアンプリフィケーション(WA)の増加は、SSD3内の物理ブロックそれぞれの書き換え回数(プログラム/イレーズ回数)の増加を引き起こす。つまり、ライトアンプリフィケーション(WA)が大きい程、物理ブロックのプログラム/イレーズ回数が、そのプログラム/イレーズ回数の上限値に速く達しやすくなる。この結果、SSD3の耐久性および寿命の劣化が引き起こされる。
もしHotデータのみによって物理ブロックが満たされていたならば、このブロック内の全てのデータがそれらデータの更新によって、比較的速いタイミングで無効化される可能性が高い。したがって、このブロックは、ガベージコレクションを実行すること無しで、このブロックを消去することのみによって、再利用することが可能となる。
一方、Coldデータのみによって物理ブロックが満たされているならば、このブロック内の全てのデータは、長い間、有効状態に維持される。したがって、このブロックは、ガベージコレクションの対象とならない可能性が高い。
本実施形態では、異なる更新頻度を有する複数種のデータは、異なる領域(異なるネームスペース)にライトされる。例えば、Hotデータは、ある特定のネームスペース(NS#1)に関連付けられた領域にライトされ、Coldデータは、別の特定のネームスペース(NS#n)に関連付けられた別の領域にライトされる。したがって、HotデータとColdデータとが同じ物理ブロックに混在するという状況の発生を防止することができる。このことは、ガベージコレクション動作が実行される頻度を減少させることを可能とし、この結果、ライトアンプリフィケーションを低下させることができる。
さらに、本実施形態では、ネームスペース制御部21は、確保すべき物理ブロックの個数をネームスペース毎に指定するホスト2からの要求に基づいて、所望の個数の物理ブロックを領域(ネームスペース)それぞれに個別に割り当てる。
例えば、ホスト2が新たなネームスペースを作成したい時、ホスト2は、対象ネームスペース用に確保すべき物理ブロックの個数を示すパラメータを含む拡張ネームスペース管理コマンドをSSD3に送出する。ネームスペース制御部21は、ネームスペース(NS#1)を作成し、このネームスペース(このネームスペースに関連付けられた領域)に、パラメータによって指定される個数の物理ブロックを割り当てる。
ホスト2は、対象ネームスペース用に確保すべき物理ブロックの個数を示すパラメータの値を変更しながら、SSD3に拡張ネームスペース管理コマンドを繰り返し送出する。この結果、複数のネームスペース(領域)が作成され、NANDメモリ5はこれら複数の領域に論理的に分割される。
したがって、個々の領域のサイズ(LBAの数)と個々の領域に設定すべき耐久性とに基づいて、複数の領域(複数のtier)にNANDメモリ5の物理リソース(物理ブロックの個数)を最適に配分することができる。
ライトアンプリフィケーション算出部22は、SSD3全体のライトアンプリフィケーションではなく、個々のネームスペース(個々の領域)のライトアンプリフィケーションを算出する。これにより、ライトアンプリフィケーション算出部22は、各ネームスペース(各領域)に対応するライトアンプリフィケーションをホスト2に提供することができる。
ガベージコレクション動作制御部23は、ネームスペース単位(領域単位)で、ガベージコレクション動作を実行し、これによってHotデータとColdデータとが同じ物理ブロックに混在してしまうことを防止する。より詳しくは、ガベージコレクション動作制御部23が拡張ガベージコレクション制御コマンドをホスト2から受信した時、ガベージコレクション動作制御部23は、拡張ガベージコレクション制御コマンドによって指定される対象ネームスペースに割り当てられている物理ブロック群から、ガベージコレクションの対象物理ブロック群を選択する。そして、ガベージコレクション動作制御部23は、有効データを対象物理ブロック群からコピー先フリーブロックにコピーするガベージコレクション動作を実行する。
さらに、ガベージコレクション動作制御部23は、ネームスペース毎に実行されるガベージコレクション動作によって作り出されたフリーブロック群を、これらネームスペースによって共有される共有フリーブロック群として管理する。つまり、これらフリーブロック群は、ネームスペース間で共有される。ガベージコレクション動作制御部23は、最小のプログラム/イレーズ回数のフリーブロックをフリーブロック群から選択する。そして、ガベージコレクション動作制御部23は、選択されたフリーブロックを、上述の対象ネームスペースに対応する領域のコピー先フリーブロックとして割り当てる。
通常、Coldデータ用の領域のガベージコレクション動作によって作り出されたフリーブロックのプログラム/イレーズ回数は、Hotデータ用の領域のガベージコレクション動作によって作り出されたフリーブロックのプログラム/イレーズ回数よりも遙かに少ない。なぜなら、ある量のColdデータがColdデータ用の領域に一旦ライトされた後は、このColdデータは頻繁には更新されないか、あるいは、滅多に更新されない場合が多いからである。一方、Hotデータ用の領域のガベージコレクション動作によって作り出されたフリーブロックのプログラム/イレーズ回数は、通常、比較的多い。したがって、最小のプログラム/イレーズ回数のフリーブロックをコピー先フリーブロックとして割り当てる上述の動作は、Coldデータ用の領域において使用されていたプログラム/イレーズ回数の少ないブロックを、Hotデータ用の領域に自動的に割り当てることを可能にする。
消耗/リテンション制御部24は、メモリセルの消耗を抑えるためのコードとエラー訂正コード(ECC)との比率を制御することによって信頼性(データリテンション)と耐久性(DWPD値)との間のトレードオフを最適化するための動作を実行する。これにより、Hotデータ用の領域の耐久性を高めることができ、またColdデータ用の領域のデータリテンション(ライトされたデータのリテンション時間)を延ばすことができる。
NANDインタフェース13は、CPU12の制御の下、NANDメモリ5を制御するように構成されたNANDコントローラである。
DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御するように構成されたDRAMコントローラである。
DRAM6の記憶領域の一部は、NANDメモリ5にライトすべきデータを一時的に格納するためのライトバッファ(WB)31として利用されてもよい。また、DRAM6の記憶領域は、ガベージコレクション(GC)動作中に移動されるデータを一時的に格納するためのGCバッファ32として利用されてもよい。また、DRAM6の記憶領域は、上述のルックアップテーブル33の格納のために用いられてもよい。ルックアップテーブル33は、ネームスペース毎に独立したガベージコレクション(GC)動作を実行できるようにするために、複数のネームスペースにそれぞれ対応する複数のルックアップテーブル(LUT#1、LUT#2、…)に分割されていてもよい。
次に、ホスト2の構成について説明する。
ホスト2は、様々なプログラムを実行する情報処理装置である。情報処理装置によって実行されるプログラムには、アプリケーションソフトウェアレイヤ41、オペレーティングシステム42、ファイルシステム43が含まれる。
一般に知られているように、オペレーティングシステム42は、ホスト2全体を管理し、ホスト2内のハードウェアを制御し、アプリケーションがハードウェアおよびSSD3を使用することを可能にするための制御を実行するように構成されたソフトウェアである。
ファイルシステム43は、ファイルの操作(作成、保存、更新、削除等)のための制御を行うために使用される。例えば、ZFS、Btrfs、XFS、ext4、NTFSなどがファイルシステム42として使用されても良い。あるいは、ファイルオブジェクトシステム(例えば、Ceph Object Storage Daemon)、Key Value Store System (例えば、Rocks DB) がファイルシステム42として使用されても良い。
様々なアプリケーションソフトウェアスレッドがアプリケーションソフトウェアレイヤ41上で走る。アプリケーションソフトウェアスレッドの例としては、クライアントソフトウェア、データベースソフトウェア、仮想マシン等がある。
アプリケーションソフトウェアレイヤ13がリードコマンドまたはライトコマンドのようなリクエストをSSD3に送出することが必要な時、アプリケーションソフトウェアレイヤ41は、OS42にそのリクエストを送出する。OS42はそのリクエストをファイルシステム43に送出する。ファイルシステム43は、そのリクエストを、コマンド(リードコマンド、ライトコマンド等)にトランスレートする。ファイルシステム43は、コマンドを、SSD3に送出する。SSD3からのレスポンスが受信された際、ファイルシステム43は、そのレスポンスをOS42に送出する。OS42は、そのレスポンスをアプリケーションソフトウェアレイヤ41に送出する。
本実施形態では、ホスト2は、上述の拡張ネームスペース管理コマンド、拡張ガベージコレクション制御コマンド等を使用することによって、SSD3を賢く管理、制御する。例えば、ファイルシステム43の階層管理部44がHotデータ用のネームスペース(領域)とColdデータ用のネームスペース(領域)の作成が必要な場合を想定する。階層管理部44は、Hotデータ用のネームスペース(領域)に割り当てるべき物理ブロックの個数を示すパラメータを含む拡張ネームスペース管理コマンドをSSD3に送出する。SSD3からこのネームスペースのIDを含むレスポンスが受信された際、階層管理部44は、このネームスペースのIDをHotデータ用のネームスペースIDとして管理する。次いで、階層管理部44は、Coldデータ用のネームスペース(領域)に割り当てるべき物理ブロックの個数を示すパラメータを含む拡張ネームスペース管理コマンドをSSD3に送出する。SSD3からこのネームスペースのIDを含むレスポンスが受信された際、階層管理部44は、このネームスペースのIDをColdデータ用のネームスペースIDとして管理する。
あるHotデータをSSD3にライトすることが必要な時、階層管理部44は、Hotデータ用のネームスペースIDを含むライトコマンドをSSD3に送出する。あるColdデータをSSD3にライトすることが必要な時、階層管理部44は、Coldデータ用のネームスペースIDを含むライトコマンドをSSD3に送出する。
あるHotデータをリードすることが必要な時、階層管理部44は、Hotデータ用のネームスペースIDを含むリードコマンドをSSD3に送出する。あるColdデータをリードすることが必要な時、階層管理部44は、Coldデータ用のネームスペースIDを含むリードコマンドをSSD3に送出する。
図2は、通常の階層化ストレージシステムと単一階層ストレージシステムとの関係を示す。
図2の左部に示される階層化ストレージシステムでは、3種類のSSDが用途に応じて使い分けられている。階層(T1)用のSSDは、小容量・高速SSDである。小容量・高速SSDは、例えば、メモリセル当たりに1ビットの情報を格納するSLC−SSDであってもよい。このため、階層(T1)用のSSDは、高価格SSDである。
階層(T1)用のSSDは、アクセス(リード/ライト)の頻度の高いデータ、例えば頻繁に更新されるデータのストレージとして使用される。アクセス頻度の高いデータの例には、ファイルシステムのメタデータが含まれる。メタデータは、ファイル内のデータの記憶位置、このデータの作成日時、このデータが更新された日時、このデータがリードされた日時、等の様々な管理情報を含む。このため、メタデータに対するアクセスの頻度(ライトアクセスの頻度、リードアクセスの頻度)は非常に高い。したがって、メタデータの格納に使用される階層(T1)用のSSDには、高い耐久性が必要とされる。
SSDの耐久性を示す指標の一つに、DWPD(Drive Write Per Day)がある。例えば、DWPD=10は、1Tバイトの総容量を有するSSDに関しては、1日当たり10Tバイト(=10×1Tバイト)のデータのライトを5年間に渡って毎日実行することができることを意味する。階層(T1)用のSSDには、DWPD=10の耐久性が要求される場合がある。
階層化ストレージシステム全体の容量に対する階層(T1)の容量の割合は、例えば、1パーセントである。メタデータのサイズはファイルの中身のサイズよりも極めて小さいからである。
階層(T2)用のSSDは、中容量SSDである。中容量SSDは、例えば、メモリセル当たりに2ビットの情報を格納するMLC−SSDであってもよい。階層(T2)用のSSDは、メタデータよりも、更新の頻度が低いデータのストレージとして使用される。階層(T2)用のSSDには、DWPD=1が要求される場合がある。階層化ストレージシステム全体の容量に対する階層(T2)の容量の割合は、例えば、4パーセントである。
階層(T3)用のSSDは、低価格の大容量SSDである。この大容量SSDは、例えば、MLC−SSDまたはTLC−SSDであってもよい。階層(T3)用のSSDは、滅多に更新されないデータのストレージとして使用される。階層(T3)用のSSDにおいては、DWPD=0.1程度の低い耐久性で十分な場合がある。階層化ストレージシステム全体の容量に対する階層(T3)の容量の割合は、例えば、95パーセントである。
図2の右部は、一台のSSDに3つの階層T1〜T3の全てのデータを格納する単一階層ストレージシステムの例を示す。単一階層ストレージシステム全体に要求されるDWPDは、次のように求めることができる。
DWPD=(10×0.01) + (1×0.04) + (0.1×0.95) =0.235
したがって、単一階層ストレージシステムを適用すれば、SSDに必要とされる容量は大幅に増加するものの、SSDに必要とされる耐久性は低下される。低価格・大容量のSSDの実現には、MLC−SSDまたはTLC−SSDが好適である。MLC−SSD/TLC−SSDのライト速度は、SLC−SSDのライト速度よりも遅いが、MLC−SSD/TLC−SSDのリード速度はSLC−SSDと同程度である。したがって、低価格・大容量のSSDを使用する単一階層ストレージシステムであっても、複数の階層間の耐久性の関係を最適化するための機能を追加することによって、階層化ストレージシステムとほぼ同等の耐久性・性能を得ることができる。
図3は、本実施形態のSSD3(SSD#1)にける複数の領域(ネームスペース)間の物理リソースの配分の例を示す。
SSD#1のストレージスペースは、例えば、異なる更新頻度を有する複数種のデータ(Hotデータ、Warmデータ、Middleデータ、Coolデータ、Coldデータ)をそれぞれ格納するための領域51、52、53、54、55に論理的に分割される。
データは、その更新の頻度に応じて5つのデータグループ(Hotデータ、Warmデータ、Middleデータ、Coolデータ、Coldデータ)に分類される。Hotデータ、Warmデータ、Middleデータ、Coolデータ、Coldデータの順に、データの更新頻度は減少される。Warmデータ、Middleデータ、Coolデータは、HotデータとColdデータの中間の更新頻度を有するデータである。
領域51は、Hotデータを格納するための階層ストレージ(tier#1)として使用される。領域51には、ネームスペース(NS#1)が関連付けられている。領域51は、小容量・高更新頻度のHotデータ(アクティブデータ)を格納するために利用される。SSD#1の総容量に対する領域51の容量の割合の例は、1パーセントであってもよい。領域51に要求されるDWPDの例は、10であってもよい。
領域52は、Warmデータを格納するための階層ストレージ(tier#2)として使用される。領域52には、ネームスペース(NS#2)が関連付けられている。SSD#1の総容量に対する領域52の容量の割合の例は、2パーセントであってもよい。領域52に要求されるDWPDの例は、3であってもよい。
領域53は、Middleデータを格納するための階層ストレージ(tier#3)として使用される。領域53には、ネームスペース(NS#3)が関連付けられている。SSD#1の総容量に対する領域53の容量の割合の例は、3パーセントであってもよい。領域53に要求されるDWPDの例は、1であってもよい。
領域54は、Coolデータを格納するための階層ストレージ(tier#4)として使用される。領域54には、ネームスペース(NS#4)が関連付けられている。SSD#1の総容量に対する領域54の容量の割合の例は、14パーセントであってもよい。領域54に要求されるDWPDの例は、0.3でであってもよい。
領域55は、Coldデータを格納するための階層ストレージ(tier#n)として使用される。領域55には、ネームスペース(NS#n)が関連付けられている。領域55は、大容量・低更新頻度のColdデータ(非アクティブデータ)を格納するために利用される。SSD#1の総容量に対する領域55の容量の割合の例は、80パーセントであってもよい。例えば、領域55の更新の頻度は、領域51の更新の頻度の1/100程度である。したがって、領域55に要求されるDWPDの例は、0.1であってもよい。
このように、Hotデータ、Warmデータ、Middleデータ、Coolデータ、Coldデータは異なる領域にそれぞれ格納される。よって、更新頻度が異なるデータ、例えばHotデータとColdデータとが同じブロックに混在するという状況の発生を防止することができる。この結果、SSD3のライトアンプリフィケーションを低下させることができる。
図3のような比率で物理リソースが複数の領域51〜55に配分された場合、SSD3(SSD#1)全体に要求されるDWPDは、次のように求めることができる。
DWPD=(10×0.01) + (3×0.02) + (1×0.03) + (0.3×0.14) + (0.1×0.8)=0.312 このことは、原理的には、領域51〜55に論理的に分割されたSSD3(SSD#1)は、大容量・低価格のSSDによって実現可能であることを意味する。
本実施形態では、上述したように、ホスト2は、確保すべき物理ブロックの個数をネームスペース毎に指定することするができ、SSD3は、指定された個数の物理ブロックを個々の領域(tier)に個別に割り当てることができる。
もし複数のtierが異なるSSDによって実現されているならば、使用されるSSD自体を交換しないかぎり、個々のtierのサイズを変えることはできない。本実施形態では、同じ一つのSSDが複数のtier(領域)に論理的に分割されている。したがって、個々のtierのサイズをワークロードおよび各tier(領域)に設定すべき耐久性に合わせて最適化することができる。
つまり、本実施形態では、領域51〜55に対して幾つの物理ブロックを割り当てるかをホスト2の制御によって領域毎に決定することができる。
例えば、ホストソフトウェアは、Hotデータ用の領域51(tier#1)に関しては、Hotデータの予期される総量(ユーザデータ容量)を超える十分な個数の物理ブロックの割り当てをSSD3に要求してもよい。この要求に応答して、SSD3のコントローラ4は、Hotデータ用の領域51(tier#1)に専用の、指定された個数の物理ブロックを、このHotデータ用の領域51(tier#1)に割り当てる。例えば、Hotデータの予期される総量(ユーザデータ容量)が100Gバイトである場合、ホストソフトウェアは、200Gバイトに相当する個数の物理ブロックの割り当てを要求してもよい。この場合、コントローラ4は、200Gバイトに相当する個数の物理ブロックを領域51(tier#1)に割り当てる。この結果、領域51(tier#1)のユーザ領域の2倍の容量に相当する個数の物理ブロックが領域51(tier#1)用に割り当てられる。200Gバイトからユーザ領域の容量を引いた残りの100GBの物理リソースは、領域51(tier#1)のオーバープロビジョン領域として機能する。
ここで、オーバープロビジョン領域について説明する。
オーバープロビジョニングは、ホスト2には利用可能なユーザスペース(ユーザアクセス可能LBAスペース)として見えないSSD3内のストレージ容量を割り当てることを意味する。ホスト2にユーザアクセス可能LBAスペースとして見えないストレージ容量が割り当てられたスペースが、オーバープロビジョン領域である。オーバープロビジョニングにより、ユーザアクセス可能LBAスペース(ユーザ領域の容量)を超える容量の物理ブロック群が割り当てられる。
通常のSSDにおいては、ホストはあるネームスペース用のLBAの数を指定することはできても、このネームスペース用に幾つの物理ブロックを割り当てるべきかを指定することはできない。また、通常は、ただ一つのオーバープロビジョン領域のみが、1台のSSD内に設定される。
これに対し、本実施形態では、ホスト2によって指定された個数の物理ブロックを個々のネームスペース(領域)に割り当てることができ、さらに、この結果、所望の容量のオーバープロビジョン領域を領域毎に個別に設定することができる。
例えば、領域51の総容量(総NS#1容量)は、領域51に割り当てられた物理ブロックの総数によって決定される。領域51は、ユーザ領域51aとオーバープロビジョン領域51bとを含む。領域51の総容量からユーザ領域51aの容量を引いた残りの容量が、オーバープロビジョン領域51bとして機能する。ユーザ領域51aは、LBAに割り当てられた物理ブロック群である。オーバープロビジョン領域51bの存在によって、領域51内のユーザ領域51aの耐久性・性能が改善される。
他の各領域に関しても、この領域に割り当てられた物理ブロックの総数によって決定される容量からこの領域内のユーザ領域の容量を引いた残りの容量が、この領域内のオーバープロビジョン領域として機能する。
Hotデータ用の領域51と同様に、ホストソフトウェアは、Warmデータ用の領域52(tier#2)に関しても、Warmデータの予期される総量(ユーザ領域の容量)を超える個数の物理ブロックの割り当てをSSD3に要求してもよい。この要求に応答して、SSD3のコントローラ4は、Warmデータ用の領域52に専用の、指定された個数の物理ブロックを、このWarmデータ用の領域52(tier#2)に割り当てる。例えば、Warmデータの予期される総量(ユーザデータ容量)が200Gバイトであり、ホストソフトウェアによって250Gバイトに相当する個数の物理ブロックの割り当てが要求されたならば、コントローラ4は、250Gバイトに相当する個数の物理ブロックを領域52(tier#2)に割り当てる。この結果、領域52(tier#2)のユーザ領域の容量よりも50GBだけ大きい物理リソースが領域52(tier#2)に割り当てられる。250Gバイトの物理リソースからユーザ領域の容量を引いた残りの50GBの物理リソースは、領域52(tier#2)のオーバープロビジョン領域として機能する。
同様にして、ホストソフトウェアは、残りの全ての領域の各々について、割り当てるべき物理ブロックの量を指定する。
例えば、ホストソフトウェアは、Coldデータ用の領域55(tier#n)に関しては、Coldデータの予期される総量(ユーザデータの容量)を考慮して決定される最小個数の物理ブロックの割り当てをSSD3に要求してもよい。この要求に応答して、コントローラ4は、Coldデータ用の領域55(tier#n)に専用の、指定された個数の物理ブロックを、このColdデータ用の領域55(tier#n)に割り当てる。例えば、Coldデータの予期される総量(ユーザデータ容量)が8000Gバイトであり、ホストソフトウェアによって8001Gバイトに相当する個数の物理ブロックの割り当てが要求されたならば、コントローラ4は、8001Gバイトに相当する個数の物理ブロックを領域55(tier#n)に割り当てる。この結果、領域55(tier#n)のユーザ領域の容量よりも1GBだけ大きい物理リソースが領域55(tier#n)に割り当てられる。8001Gバイトの物理リソースからユーザデータ容量を引いた残りの1GBの物理リソースは、領域55(tier#n)のオーバープロビジョン領域として機能する。
このように、SSD3は、確保すべき物理ブロックの個数をネームスペース毎に指定するホスト2からの要求に基づいて、個々の領域に対して、指定された個数の物理ブロックを割り当てる。この結果、個々の領域について、ユーザ領域の容量に対するオーバープロビジョン領域の容量の比率を最適化することが可能となる。例えば、上の階層になるほど、割り当てられるオーバープロビジョン領域の量が多くなるように、個々の領域に割り当てられる物理ブロックの個数が調整されても良い。この場合、例えば、領域55内のユーザ領域の容量に対する領域55内のオーバープロビジョン領域の容量の比率は、領域51内のユーザ領域の容量に対する領域51内のオーバープロビジョン領域の容量の比率よりも小さくなる。
領域51においては、大きなサイズのオーバープロビジョン領域の活用によって、領域51のライトアンプリフィケーションを効率よく減少することができる。なぜなら、たとえ領域51のユーザ領域51aの物理ブロック群が100Mバイトのデータで満たされ、この結果、これら各物理ブロックがそのブロックの消去無しで利用可能ページを含まない状態になっても、これら物理ブロックの代わりにオーバープロビジョン領域51bの物理ブロック群をデータのライトに使用することができるからである。よって、領域51のガベージコレクション動作が実行されるタイミングを十分に遅らせることができる。オーバープロビジョン領域51bの物理ブロック群にデータがライトされるにつれ、ユーザ領域51aの物理ブロック群内のデータはその更新によって無効化される。全てのデータが無効化された物理ブロックはそのガベージコレクションなしで再利用することができる。したがって、領域51のライトアンプリフィケーションを効率よく減少することができるので、領域51の物理ブロック群のライト/イレーズ回数を低く抑えることができる。このことは、領域51の耐久性を向上させることできることを意味している。
領域55のオーバープロビジョン領域は小さいので、領域55のライトアンプリフィケーションは増加する。しかし、Coldデータ用の領域55の更新頻度は、Hotデータ用の領域51の更新頻度に比べて、遙かに低い。例えば、Coldデータ用の領域55の更新頻度は、Hotデータ用の領域51の更新頻度の100分の1である。つまり、領域51が100回書き換えられる間に、領域55は1回しか書き換えられないので、Coldデータの領域55の物理ブロックそれぞれのプログラム/イレーズ回数は非常に少ない。したがって、Coldデータの領域55に関しては、たとえそのライトアンプリフィケーションが大きくても、Coldデータの領域55の物理ブロック群のプログラム/イレーズ回数が、SSD3のプログラム/イレーズ回数上限値にすぐに達してしまうという現象は発生しない。
図4は、複数の領域51〜55とこれら領域51〜55にライトされるデータとの関係を示す。
NANDメモリ5は、ネームスペースNS#1〜NS#5に対応する領域51〜55に論理的に分割されている。ネームスペースNS#1のID(NSID=1)に関連付けられたライトデータ、つまり、Hotデータは、領域51にライトされる。ネームスペースNS#2のID(NSID=2)に関連付けられたライトデータ、つまり、Warmデータは、領域52にライトされる。同様にして、ネームスペースNS#nのID(NSID=n)に関連付けられたライトデータ、つまり、Coldデータは、領域55にライトされる。
図5は、SSD3によるネームスペース管理を示す。
ここでは、複数のネームスペースNS#1〜NS#nが作成されている場合を想定する。ネームスペースNS#1には、0〜E0の論理アドレス空間(LBA空間)A1が割り当てられている。ネームスペースNS#2には、0〜E1の論理アドレス空間(LBA空間)A2が割り当てられている。同様に、ネームスペースNS#nには、0〜Enの論理アドレス空間(LBA空間)Anが割り当てられている。
本実施形態では、ルックアップテーブルLUTは、ネームスペース毎に分割されている。つまり、ネームスペースNS#1〜NS#nに対応するn個のルックアップテーブルLUT#1〜LUT#nがSSD3のコントローラ4によって管理される。
ルックアップテーブルLUT#1は、ネームスペースNS#1のLBA空間A1とNANDメモリ5の物理アドレスとの間のマッピングを管理する。ルックアップテーブルLUT#2は、ネームスペースNS#2のLBA空間A2とNANDメモリ5の物理アドレスとの間のマッピングを管理する。ルックアップテーブルLUT#nは、ネームスペースNS#nのLBA空間AnとNANDメモリ5の物理アドレスとの間のマッピングを管理する。
コントローラ14は、ルックアップテーブルLUT#1〜LUT#nを使用することによって、ネームスペース(領域)毎に独立してガベージコレクション動作を行う事ができる。
管理データ100は、ネームスペースNS#1〜NS#nとこれらネームスペースNS#1〜NS#nに割り当てられた物理ブロックの個数との間の関係を示す情報を保持しても良い。
本実施形態においては、ガベージコレクションによって生成されたフリーブロックは、ネームスペースNS#1〜NS#n間で共有することができる。
図6は、拡張ネームスペース管理コマンドを示す。
拡張ネームスペース管理コマンドは、ネームスペースの作成および削除を含むネームスペース管理のために使用される。拡張ネームスペース管理コマンドは、以下のパラメータを含む。
(1)作成/削除
(2)LBA範囲
(3)物理リソースサイズ
(4)tier属性(オプショナル)
作成/削除のパラメータの値0hは、ネームスペースの作成をSSD3に要求する。作成/削除のパラメータの値1hは、ネームスペースの削除をSSD3に要求する。ネームスペースの削除を要求する場合には、削除対象のネームスペースのIDを示すパラメータが拡張ネームスペース管理コマンドに設定される。
LBA範囲のパラメータは、ネームスペースのLBA範囲(LBA0〜n−1)を示す。このLBA範囲は、このネームスペースのユーザ領域にマッピングされる。
物理リソースサイズのパラメータは、ネームスペース用に確保されるべき物理ブロックの個数を示す。
別の実施形態では、拡張ネームスペース管理コマンドは、物理リソースサイズのパラメータ代わりに、オーバープロビジョンのサイズを示すパラメータを含んでいてもよい。
オーバープロビジョンのサイズのパラメータは、ネームスペースに関連付けられた領域内のオーバープロビジョン領域用に確保されるべき物理ブロックの個数を示す。もし拡張ネームスペース管理コマンドがオーバープロビジョンのサイズのパラメータを含むならば、SSD3は、ネームスペースを作成し、且つこのネームスペースに関連付けられた領域内のオーバープロビジョン領域に、このパラメータによって指定された個数の物理ブロックを割り当ててもよい。
tier属性のパラメータは、このネームスペースに対応する階層属性を示す。tier属性のパラメータの値とtier属性との関係は、次の通りである。
000: Hot
001: Warm
010: Middle
011: Cool
100: Cold
図7は、ホスト2とSSD3とによって実行される物理リソース割り当て処理のシーケンスを示す。
ホスト2は、ネームスペース(Hotデータ用の領域)の作成を要求する拡張ネームスペース管理コマンドをSSD3に送出する。この拡張ネームスペース管理コマンドは、Hotデータ用の領域用に確保すべき物理ブロックの個数を指定する物理リソースサイズパラメータを含む。SSD3内の一つの物理ブロックの容量はSSD3からホスト2に報告されているので、ホスト2は、Hotデータ用の領域に適した個数の物理ブロックを要求することができる。この拡張ネームスペース管理コマンドの受信に応答して、SSD3のコントローラ4は、ネームスペース(NS#1)を作成し、このネームスペース(NS#1)に、指定された個数の物理ブロックを割り当てる(ステップS11)。コントローラ4は、コマンド完了を示すレスポンスをホスト2に送出する。このレスポンスは、作成されたネームスペースのIDを含んでいてもよい。
ホスト2は、次のネームスペース(Warmデータ用の領域)の作成を要求する拡張ネームスペース管理コマンドをSSD3に送出する。この拡張ネームスペース管理コマンドは、Warmデータ用の領域用に確保すべき物理ブロックの個数を指定する物理リソースサイズパラメータを含む。この拡張ネームスペース管理コマンドの受信に応答して、SSD3のコントローラ4は、ネームスペース(NS#2)を作成し、このネームスペース(NS#2)に、指定された個数の物理ブロックを割り当てる(ステップS12)。コントローラ4は、コマンド完了を示すレスポンスをホスト2に送出する。このレスポンスは、作成されたネームスペースのIDを含んでいてもよい。
同様にして、ネームスペース(Middleデータ用の領域)、ネームスペース(Coolデータ用の領域)が作成される。
そして、ホスト2は、次のネームスペース(Coldデータ用の領域)の作成を要求する拡張ネームスペース管理コマンドをSSD3に送出する。この拡張ネームスペース管理コマンドは、Coldデータ用の領域用に確保すべき物理ブロックの個数を指定する物理リソースサイズパラメータを含む。この拡張ネームスペース管理コマンドの受信に応答して、SSD3のコントローラ4は、ネームスペース(NS#n)を作成し、このネームスペース(NS#n)に、指定された個数の物理ブロックを割り当てる(ステップS13)。コントローラ4は、コマンド完了を示すレスポンスをホスト2に送出する。このレスポンスは、作成されたネームスペースのIDを含んでいてもよい。
このようにして、指定された個数の物理ブロックをネームスペースに割り当てながらネームスペースを作成する処理が繰り返されることによって、NANDメモリ5は複数の領域に論理的に分割され、さらに領域毎に、指定された個数の物理ブロックが割り当てられる。
図8のフローチャートは、SSD3によって実行される物理リソース割り当て処理の手順を示す。
SSD3のコントローラ4は、拡張ネームスペース管理コマンドをホスト2から受信する(ステップS21)。コントローラ4は、拡張ネームスペース管理コマンド内の作成/削除パラメータに基づいて、拡張ネームスペース管理コマンドがネームスペースの作成を要求しているか否かを判定する(ステップS22)。
拡張ネームスペース管理コマンドがネームスペースの作成を要求しているならば(ステップS22のYES)、コントローラ4は、拡張ネームスペース管理コマンド内の物理リソースパラメータによって指定された個数の物理ブロックを確保可能か否かを、フリーブロック群内の残り物理ブロックの個数に基づいて判定する(ステップS23)。
残り物理ブロックの個数が、指定された個数以上であるならば(ステップS23のYES)、コントローラ4は、ネームスペースを作成し、指定された個数の物理ブロックを、このネームスペースに関連付けられた領域に割り当てる(ステップS24)。コントローラ4は、コマンド完了をホスト2に通知する(ステップS25)。
残り物理ブロックの個数が、指定された個数よりも少ないならば(ステップS23のNO)、コントローラ4は、エラーをホスト2に通知する(ステップS26)。エラーが報告されたホスト2は、確保すべき物理ブロックの個数を変更してもよい。あるいは、エラーのレスポスが通知されたホスト2は、各ネームスペース用に確保すべき物理ブロックの個数を指定しながらネームスペースそれぞれを作成する処理を、最初からやり直しても良い。
図9のフローチャートは、ホスト2よって実行されるライトコマンド送出処理の手順を示す。
ホスト2は、データをライトする要求が発生した時(ステップS31のYES)、このライトデータ(書き込むべきデータ)を、Hotデータ、Warmデータ、Middleデータ、Coolデータ、またはColdデータとして分類する(ステップS32)。ホスト2は、例えば、メタデータ、ファイルの中身(コンテンツ)といったデータ種別に応じて、ライトデータ(書き込むべきデータ)を、Hotデータ、Warmデータ、Middleデータ、Coolデータ、またはColdデータとして分類してもよい。
ライトデータがHotデータであるならば(ステップS33のYES)、ホスト2は、Hotデータ用のネームスペースのID(NSID#1)を含むライトコマンドをSSD3に送出する(ステップS36)。
ライトデータがWarmデータであるならば(ステップS34のYES)、ホスト2は、Warmデータ用のネームスペースのID(NSID#2)を含むライトコマンドをSSD3に送出する(ステップS37)。
ライトデータがColdデータであるならば(ステップS35のYES)、ホスト2は、Coldデータ用のネームスペースのID(NSID#n)を含むライトコマンドをSSD3に送出する(ステップS38)。
図10は、ライトコマンドを示す。
ライトコマンドは、以下のパラメータを含む。
(1)先頭LBA
(2)論理ブロックの数
(3)ネームスペースID
先頭LBAのパラメータは、書き込まれるべきデータの先頭LBAを示す。
論理ブロックの数のパラメータは、書き込まれるべきデータに対応する論理ブロックの数(つまり、転送長)を示す。
ネームスペースIDのパラメータは、データがライトされるべきネームスペースのIDを示す。
図11は、ホスト2とSSD3とによって実行されるライト動作の処理シーケンスを示す。
ホスト2は、ライトコマンドをSSD3に送出し、ライトデータをSSD3に送出する。SSD3のコントローラ4は、ライトデータをライトバッファ(WB)31にライトし(ステップS41)、そしてコマンド完了command completionのレスポンスをホスト2に通知する。この後、コントローラ4は、ライトデータを、ライトコマンド内のネームスペースIDによって指定されるネームスペースに関連付けられた領域内の利用可能ブロックにライトする(ステップS42)。
図12は、データがライトされるべきネームスペース(領域)に応じて、メモリセルの消耗を抑えるためのコードとエラー訂正コード(ECC)との比率を制御する処理を示す。
本実施形態においては、メモリセルの消耗を抑えるためのコードとエラー訂正コード(ECC)との比率を制御することによって信頼性(データリテンション)と耐久性(DWPD値)との間のトレードオフが最適化される。
ここで、1回の書き込み当たりのメモリセルの消耗を抑えるためのコード(コーディング)を使用して、ライトデータをエンコードする動作の概要について説明する。
SSD3のコントローラ4は、まず、メモリセルの消耗を抑制するためのコード(コーディング)を使用してライトデータをエンコードして、第1符号化データ(図20において“endurance code”と書かれている部分)を生成する。このコード(コーディング)は、メモリセルを激しく消耗させる特定の符号(高閾値電圧に対応する高プログラムレベルの符号)の出現頻度を下げために使用される。このコード(コーディング)としては、例えば、上述のendurance code(endurance coding)等がある。
例えば、MLCにおいては、メモリセルは、プログラムによって、2ビットに対応する4つのレベル(“E”レベル、“A”レベル、“B”レベル、“C”レベル)のいずれかに対応する状態(プログラムレベル)に設定される。“E”レベルは消去状態である。メモリセルの閾値電圧分布は、“E”レベル、“A”レベル、“B”レベル、“C”レベルの順で高くなる。“C”レベルの状態は、メモリセルを激しく消耗させる状態(プログラムレベル)である。
メモリセルの消耗を抑制するためのコード(コーディング)を使用したエンコードにおいては、例えば、メモリセルの消耗が大きい特定のレベル(例えば“C”レベル)に対応する符号が、別の符号(例えば、2つの“B”レベルが連続した“B−B”に対応した長いビットパターン)に変換されてもよい。
このように、エンコードにおいては、メモリセルを消耗させる特定の符号(ビットパターン)が別の長い符号(ビットパターン)に置き換えられるので、ライトデータの符号語が延びる。このため、エンコードにおいては、コントローラ4は、まず、ライトデータを可逆圧縮してもよい。そして、コントローラ4は、圧縮されたライトデータ内の各特定のビットパターンを、メモリセルの消耗の少ない別の長いビットパターンに置き換えてもよい。
コントローラ4は、エンコードによって得られる第1符号化データ(図20における“endurance code”)にエラー訂正コード(ECC)を付加し、これによって第2符号化データ(図20における“endurance code”と“ECC”とを含むデータ)を生成し、この第2符号化データを物理ブロック内の利用可能ページにライトする。各ページはデータ領域と冗長領域とを含む。第2符号化データのビット長は、データ領域と冗長領域とを含むページのサイズにマッチする。
さらに、コントローラ4は、第1符号化データとエラー訂正コード(ECC)の比率を、ライトデータがどの領域(ネームスペース)にライトされるかに応じて、自動的に変更する。
第1符号化データ(endurance code)が長くなるほど、メモリセルを激しく消耗させる特定の符号の出現頻度が減少される。したがって、第1符号化データ(endurance code)が長くなるほど、1回の書き込み当たりのメモリセルの消耗を抑制することができる。
例えば、ライトデータがHotデータ用の領域にライトされるべきライトデータである場合、コントローラ4は、Hotデータ用の領域の耐久性(DWPD)を高めるために、より長い第1符号化データとより短いエラー訂正コードの組み合わせを含む第2符号化データが得られるように第1符号化データとエラー訂正コードの比率を制御する。つまり、Hotデータのライトにおいては、信頼性(データリテンション)よりも耐久性を優先するエンコード方法が利用される。
一方、ライトデータがColdデータ用の領域にライトされるべきライトデータである場合、コントローラ4は、Coldデータ用の領域にライトされるデータのデータリテンションを伸ばすために、より短い第1符号化データとより長いエラー訂正コードの組み合わせを含む第2符号化データが得られるように第1符号化データとエラー訂正コードの比率を制御する。つまり、Coldデータのライトにおいては、耐久性よりも信頼性(データリテンション)を優先するエンコード方法が利用される。
本実施形態では、図12に示されているように、書き換え頻度(更新の頻度)が高いネームスペース(領域)ほど、ECCのビット長が短くなり、代わりに第1符号化データ(エンデュランスコード)のビット長が長くなる。また、書き換え頻度(更新の頻度)が低いネームスペース(領域)ほど、ECCのビット長が長くなり、代わりに第1符号化データ(エンデュランスコード)のビット長が短くなる。
ECCのビット長が長くなるほど、訂正可能なビットの数が増えるので、信頼性(データリテンション)が改善される。通常、時間の経過とともに、ビットエラーレートは増加する。したがって、訂正可能なビットの数の増加は、データリテンションを改善することができる。
一方、上述したように、エンデュランスコードのビット長が長くなるほど、ページ内のメモリセル群の消耗を抑えることができるので、耐久性が改善される。
図13は、SSD3によって実行されるエンコード処理およびデコード処理を示す。
SSD3のコントローラ4は、エンデュランスコードエンコーダ91、ECCエンコーダ92、エンデュランスコードデコーダ93、およびECCデコーダ94を含む。
ECCエンコーダ92およびECCデコーダ94は、ECCを生成するECCエンコード処理およびエラー訂正のためのECCデコード処理をそれぞれ実行する。ECCエンコーダ92においては、ECCを生成するために組織符号が使用される。組織符号としては、例えば、ハミング符号、BHC符号、リードソロモン符号、等がある。
エンデュランスコードエンコーダ91およびエンデュランスコードデコーダ93は、メモリセルの消耗を抑制するためのエンコード処理およびこのエンコード処理に対応するデコード処理を実行する。エンデュランスコードエンコーダ91においては、第1符号化データ(エンデュランスコード)を生成するために、非組織符号であるエンデュランスコードが使用される。エンデュランスコードエンコーダ91においては、上述したように、メモリセルを激しく消耗させる特定の符号(例えば“C”レベルに対応するビットパターン)が、別の長い符号(例えば、“B−B”に対応した長いビットパターン、等)に変換される。つまり、このエンコード処理は、符号語を伸張する伸張処理である。
図14は、エンデュランスコードエンコーダ91の構成例を示す。
エンデュランスコードエンコーダ91は、エントロピー解析部911、圧縮部912、探索部914、置き換え部915、符号長チェック部916、及び出力部917等を含む。
エントロピー解析部911は、ライトデータ内に出現するビットパターンそれぞれの出現回数(または出現確率)を求める。圧縮部912は、エントロピー解析部911の解析結果に基づきコードブック913を生成し、コードブック913を使用して、ライトデータを可逆圧縮する。コードブック913は、ライトデータ内に出現するビットパターンそれぞれとこれらビットパターンに対応する変換コードとの間の対応関係を示す。圧縮部912は、出現回数の多いビットパターンに短い変換コードを割り当てる。
探索部914は、メモリセルを激しく消耗させる特定の符号を求めて、圧縮データ(圧縮されたライトデータ)を例えばその最上位ビットから探索する。特定の符号は、例えば“C”レベルに対応するビットパターンであってもよい。置き換え部915は、探索部914によって探索された特定の符号を、別の長い符号(例えば、“B−B”に対応した長いビットパターン、等)に置き換える。これによって、圧縮データ内の特定の符号が、メモリセルの消耗が少ない別の長い符号に変換される。置き換え部915は、コードブック913を更新し、これによって、上述の特定の符号に対応するコードブック913内の特定の変換コードを、上述の別の長い符号に置き換える。
符号長チェック部916は、現在の圧縮データの符号長(ビット長)をチェックする。現在の圧縮データの符号長(ビット長)が予め決められた閾値(ターゲットビット長)よりも短い場合、探索および置き換えの処理が繰り返される。これにより、現在の圧縮データの符号長が最適化される。
ターゲットビット長は、ライトデータがライトされるべきネームスペース(領域)に応じて適応的に変更される。したがって、書き換え頻度(更新の頻度)が高いネームスペース(領域)ほど、符号化データ(エンデュランスコード)のビット長が長くなる。換言すれば、書き換え頻度(更新の頻度)が低いネームスペース(領域)ほど、符号化データ(エンデュランスコード)のビット長が短くなる。
出力部917は、最適化されたビット長の圧縮データを第1符号化データ(エンデュランスコード)として出力する。第1符号化データにはコードブック913が付加されても良い。
図15のフローチャートは、メモリセルの消耗を抑制するためのエンコード処理の手順を示す。
コントローラ4は、ライトデータ内の幾つかのビットパターンの出現回数を求め、これらビットパターンを出現回数の大きい順にソートする(ステップS1)。コントローラ4は、エントロピー解析の結果に基づき、各ビットパターンを圧縮するための変換コードを含むコードブック913を生成し、そしてコードブック913を使用してライトデータを可逆圧縮する(ステップS2)。
コントローラ4は、この圧縮データをメモリセルの消耗を抑制するためのコードを使用してエンコードして、符号化データを生成する。
この場合、コントローラ4は、まず、圧縮データから、メモリセルを消耗させるある特定の符号(特定のビットパターン)を探索する(ステップS3)。コントローラ4は、探索されたこの符号(ビットパターン)をメモリセルの消耗の小さな長い別の符号(ビットパターン)に変換する(ステップS4)。コントローラ4は、探索されたこの特定の符号に対応するコードブック内の変換コードを更新する(ステップS5)。
コントローラ4は、現在の圧縮データ(符号化データ)のビット長がターゲットビット長よりも長いか否かを判定する(ステップS6)。ターゲットビット長は、データがライトされるべきネームスペース(領域)に応じて予め決定される。例えば、ネームスペースNS#1にライトされるデータ(Hotデータ)に関しては長いターゲットビット長が使用され、ネームスペースNS#nにライトされるデータ(Coldデータ)に関しては短いターゲットビット長が使用される。
現在の圧縮データ(符号化データ)のビット長がターゲットビット長よりも短いならば、ステップS3〜S5の処理が再度実行される。ステップS3〜S5の処理が多く繰り返されるほど、メモリセルを激しく消耗させる特定の符号(例えば“C”レベルに対応するビットパターン)の出現頻度を下げることができる。その分、符号化データのビット長はより長くなる。
現在の圧縮データ(符号化データ)のビット長がターゲットビット長よりも長くなったならば(ステップS6のYES)、コントローラ4は、符号化データの例えば末尾にコードブックを付加する(ステップS7)。
図16のフローチャートは、SSD3によって実行されるライト制御処理の手順を示す。
SSD3のコントローラ4は、受信されたライトデータがどの階層属性のネームスペース(領域)にライトされるべきライトデータであるかを判定し、この判定結果にしたがって、ライトデータをエンコードするためのエンコード方法を変更する。エンコード方法の変更は、エンデュランスコードとECCとの比率を変更することによって実行される。
すなわち、SSD3のコントローラ4がライトコマンドをホスト2から受信した時(ステップS101のYES)、コントローラ4は、ライトコマンド内のネームスペースIDによって指定される対象ネームスペース(領域)の階層属性(Hot/Warm/Middle/Cool/Cold)を判定する(ステップS102)。対象ネームスペース(領域)の階層属性は、対象ネームスペース(領域)のオーバープロビジョン領域のサイズ(ユーザ領域とオーバープロビジョン領域との比率等)に基づいて決定されてもよい。あるいは、もし対象ネームスペースの作成を要求した拡張ネームスペース管理コマンドがtier属性パラメータを含んでいたならば、コントローラ4は、このtier属性パラメータによって示される階層属性を、対象ネームスペースの階層属性であると判定しても良い。あるいは、ライトコマンドが、対象ネームスペースのIDに加え、対象ネームスペースの階層属性を示すパラメータを含んでいてもよい。
例えば、対象ネームスペースの階層属性がHotならば(ステップS103のYES)、つまりライトデータがネームスペースNS#1のIDに関連付けられていたならば、コントローラ4は、エンデュランスコードとECCとの比率を制御することによって信頼性よりも耐久性を優先するエンコード方法を使用して、ライトデータをエンコードする(ステップS104)。ここでのエンコード方法によれば、ライトデータは、より長いエンデュランスコードとより短いECCとの組み合わせを含むデータにエンコードされる。コントローラ4は、エンコードされたデータを、領域51内の物理ブロックの利用可能ページにライトする(ステップS105)。
例えば、対象ネームスペースの階層属性がColdならば(ステップS106のYES)、つまりライトデータがネームスペースNS#nのIDに関連付けられていたならば、コントローラ4は、エンデュランスコードとECCとの比率を制御することによって耐久性よりも信頼性を優先するエンコード方法を使用して、ライトデータをエンコードする(ステップS107)。ここでのエンコード方法によれば、ライトデータは、より短いエンデュランスコードとより長いECCとの組み合わせを含むデータにエンコードされる。コントローラ4は、エンコードされたデータを、領域55内の物理ブロックの利用可能ページにライトする(ステップS108)。
図17は、SSD3によって実行されるガベージコレクション動作およびコピー先フリーブロック割り当て動作を示す。
上述したように、ガベージコレクション動作はネームスペース毎に実行される。ネームスペース(NS#1)のガベージコレクション動作においては、SSD3のコントローラ4は、ネームスペース(NS#1)に関連付けられた領域51内の物理ブロック(アクティブブロック)から、ガベージコレクションの対象物理ブロックを選択する。例えば、コントローラ4は、ルックアップテーブルLUT#1を参照することによって無効データの比率が最も大きい上位幾つかの物理ブロックを特定し、この物理ブロックをガベージコレクションの対象物理ブロックとして選択してもよい。
コントローラ4は、ネームスペース間で共有されるフリーブロック群を含むフリーブロックプール(フリーブロックリスト)60を管理する。コントローラ4は、フリーブロック群から、最小のプログラム/イレーズ回数のフリーブロックを選択する。コントローラ4は、選択されたフリーブロックを、ネームスペース(NS#1)に、コピー先フリーブロックB1000として割り当てる。コントローラ4は、ガベージコレクションの対象物理ブロック群(ここでは、ブロックB0〜B3)からコピー先フリーブロックB1000に全ての有効データをコピーする。そして、コントローラ4は、ルックアップテーブルLUT#1を更新して、有効データをコピー先フリーブロックB1000にマッピングする。ガベージコレクションの対象物理ブロック群B0〜B3は、有効データを含まないフリーブロックとなる。これらフリーブロックは、フリーブロックプール60に移動される。
他のネームスペース(NS#2〜NS#n)についても同様にしてガベージコレクション動作が実行される。
例えば、ネームスペース(NS#n)のガベージコレクション動作においては、コントローラ4は、ネームスペース(NS#n)に関連付けられた領域55内の物理ブロック(アクティブブロック)から、ガベージコレクションの対象物理ブロックを選択する。例えば、コントローラ4は、ルックアップテーブルLUT#nを参照することによって無効データの比率が最も大きい上位幾つかの物理ブロックを特定し、この物理ブロックをガベージコレクションの対象物理ブロックとして選択してもよい。
コントローラ4は、フリーブロック群から、最小のプログラム/イレーズ回数のフリーブロックを選択する。コントローラ4は、選択されたフリーブロックを、ネームスペース(NS#n)に、コピー先フリーブロックB1001として割り当てる。コントローラ4は、ガベージコレクションの対象物理ブロック群(ここでは、ブロックB2000〜B2003)からコピー先フリーブロックB1001に全ての有効データをコピーする。そして、コントローラ4は、ルックアップテーブルLUT#nを更新して、有効データをコピー先フリーブロックB1001にマッピングする。ガベージコレクションの対象物理ブロック群B2000〜B2003は、有効データを含まないフリーブロックとなる。これらフリーブロックは、フリーブロックプール60に移動される。
上述したように、ネームスペース(NS#n)の更新の頻度はネームスペース(NS#1)の更新の頻度よりも遙かに低いので、ネームスペース(NS#n)のガベージコレクションによって作り出されたフリーブロックのプログラム/イレーズ回数は少ない。本実施形態のガベージコレクション動作においては、ネームスペース(NS#1)のガベージコレクションが実行される度に、ネームスペース(NS#n)で過去に使用されていた物理ブロックがネームスペース(NS#1)のコピー先フリーブロックとして割り当てられる。したがって、ネームスペース(NS#n)で使用されていた、プログラム/イレーズ回数の少ない物理ブロックを、ネームスペース(NS#1)において有効に再利用することが可能となる。この結果、ネームスペース(NS#1)の耐久性を改善することができる。
さらに、コントローラ4は、ネームスペース(NS#1)の耐久性を改善するために、ネームスペース(NS#1)とネームスペース(NS#n)との間で物理ブロックを入れ替えるウェアレベリング処理を実行することもできる。例えば、ネームスペース(NS#1)で使用されている物理ブロックのいずれかの物理ブロックのプログラム/イレーズ回数が閾回数(閾回数はプログラム/イレーズ回数の上限よりも少ない値に設定されている)に達したならば、コントローラ4は、この物理ブロックを、ネームスペース(NS#n)内の最小プログラム/イレーズ回数の物理ブロックと入れ替えてもよい。
図18は、SSD3によって実行されるライトデータ量カウント処理を示す。
SSD3のコントローラ4は、SSD3全体のライトアンプリフィケーションではなく、ネームスペース毎のライトアンプリフィケーションを算出することができる。このために、コントローラ4は、ホスト2によってライトされたデータの量をカウントするためのカウンタとガベージコレクション動作によってライトされたデータの量をカウントするためのカウンタとの2種類のカウンタを、ネームスペース毎に備える。
カウンタ61およびカウンタ62は、ネームスペース(NS#1)のライトアンプリフィケーションを算出するために使用される。カウンタ61は、ホスト2によってネームスペース(NS#1)、つまり領域51、にライトされたデータの量をカウントする。カウンタ62は、ネームスペース(NS#1)のガベージコレクションによってネームスペース(NS#1)、つまり領域51、にライトされたデータの量をカウントする。
カウンタ63およびカウンタ64は、ネームスペース(NS#2)のライトアンプリフィケーションを算出するために使用される。カウンタ63は、ホスト2によってネームスペース(NS#2)、つまり領域52、にライトされたデータの量をカウントする。カウンタ64は、ネームスペース(NS#2)のガベージコレクションによってネームスペース(NS#2)、つまり領域52、にライトされたデータの量をカウントする。
カウンタ65およびカウンタ66は、ネームスペース(NS#n)のライトアンプリフィケーションを算出するために使用される。カウンタ65は、ホスト2によってネームスペース(NS#n)、つまり領域55、にライトされたデータの量をカウントする。カウンタ66は、ネームスペース(NS#n)のガベージコレクションによってネームスペース(NS#n)、つまり領域55、にライトされたデータの量をカウントする。
図19のフローチャートは、SSD3によって実行されるライトデータ量カウント処理の手順を示す。
SSD3のコントローラ4がホスト2からライトコマンドを受信した時、コントローラ4は、ライトコマンド内に含まれるネームスペースIDに基づいて、ライトデータがライトされるべき対象ネームスペース(領域)を決定する(ステップS41〜S43)。そして、コントローラ4は、ライトデータを対象ネームスペース(領域)にライトすると共に、ライトされるデータの量をカウントする(ステップS44〜S46)。
例えば、対象ネームスペース(領域)がネームスペース(NS#1)であれば(ステップS41のYES)、コントローラ4は、カウンタ61を使用して、ネームスペース(NS#1)にライトされるデータの量をカウントする(ステップS44)。ステップS44では、カウンタ61の現在のカウント値が、ライトデータの転送長だけ増加されてもよい。
対象ネームスペース(領域)がネームスペース(NS#2)であれば(ステップS42のYES)、コントローラ4は、カウンタ63を使用して、ネームスペース(NS#2)にライトされるデータの量をカウントする(ステップS45)。ステップS45では、カウンタ63の現在のカウント値が、ライトデータの転送長だけ増加されてもよい。
対象ネームスペース(領域)がネームスペース(NS#n)であれば(ステップS43のYES)、コントローラ4は、カウンタ65を使用して、ネームスペース(NS#n)にライトされるデータの量をカウントする(ステップS46)。ステップS46では、カウンタ65の現在のカウント値が、ライトデータの転送長だけ増加されてもよい。
ネームスペース(NS#1)のガベージコレクション動作が実行される時(ステップS51のYES)、コントローラ4は、カウンタ62を使用して、このガベージコレクション動作によってネームスペース(NS#1)にライトされるデータの量をカウントする(ステップS54)。ステップS54では、カウンタ62のカウント値が、ガベージコレクション動作の対象ブロック群内の全有効データの総量だけ増加されてもよい。
ネームスペース(NS#2)のガベージコレクション動作が実行される時(ステップS52のYES)、コントローラ4は、カウンタ64を使用して、このガベージコレクション動作によってネームスペース(NS#2)にライトされるデータの量をカウントする(ステップS55)。ステップS55では、カウンタ64のカウント値が、ガベージコレクション動作の対象ブロック群内の全有効データの総量だけ増加されてもよい。
ネームスペース(NS#n)のガベージコレクション動作が実行される時(ステップS53のYES)、コントローラ4は、カウンタ66を使用して、このガベージコレクション動作によってネームスペース(NS#n)にライトされるデータの量をカウントする(ステップS56)。ステップS56では、カウンタ66のカウント値が、ガベージコレクション動作の対象ブロック群内の全有効データの総量だけ増加されてもよい。
図20のフローチャートは、SSD3によって実行されるライトアンプリフィケーション(WA)算出処理の手順を示す。
SSD3のコントローラ4は、ホスト2によってネームスペース(NS#1)にライトされたデータの量(カウンタ61のカウント値)を取得する(ステップS61)。コントローラ4は、ネームスペース(NS#1)のガベージコレクション動作によってネームスペース(NS#1)にライトされたデータの量(カウンタ62のカウント値)を取得する(ステップS62)。コントローラ4は、カウンタ61のカウント値とカウンタ62のカウント値とに基づいて、ネームスペース(NS#1)のライトアンプリフィケーションを算出する(ステップS63)。ネームスペース(NS#1)のライトアンプリフィケーション(NS#1−WA)は、次のように得られる。
NS#1−WA=「カウンタ61のカウント値+カウンタ62のカウント値」/「カウンタ61のカウント値」
コントローラ4は、ホスト2によってネームスペース(NS#2)にライトされたデータの量(カウンタ63のカウント値)を取得する(ステップS64)。コントローラ4は、ネームスペース(NS#2)のガベージコレクション動作によってネームスペース(NS#2)にライトされたデータの量(カウンタ64のカウント値)を取得する(ステップS65)。コントローラ4は、カウンタ63のカウント値とカウンタ64のカウント値とに基づいて、ネームスペース(NS#2)のライトアンプリフィケーションを算出する(ステップS66)。ネームスペース(NS#2)のライトアンプリフィケーション(NS#2−WA)は、次のように得られる。
NS#2−WA=「カウンタ63のカウント値+カウンタ64のカウント値」/「カウンタ63のカウント値」
コントローラ4は、ホスト2によってネームスペース(NS#n)にライトされたデータの量(カウンタ65のカウント値)を取得する(ステップS67)。コントローラ4は、ネームスペース(NS#n)のガベージコレクション動作によってネームスペース(NS#n)にライトされたデータの量(カウンタ66のカウント値)を取得する(ステップS68)。コントローラ4は、カウンタ65のカウント値とカウンタ66のカウント値とに基づいて、ネームスペース(NS#n)のライトアンプリフィケーションを算出する(ステップS69)。ネームスペース(NS#n)のライトアンプリフィケーション(NS#n−WA)は、次のように得られる。
NS#n−WA=「カウンタ65のカウント値+カウンタ66のカウント値」/「カウンタ65のカウント値」
ネームスペースそれぞれのライトアンプリフィケーションを要求するWAゲットコマンドがホスト2から受信された時(ステップS70のYES)、コントローラ4は、ホスト2に図21に示すリターンデータを送出して、ネームスペースそれぞれのライトアンプリフィケーションをホスト2に通知する(ステップS71)。
ステップS61〜S69の処理は、WAゲットコマンドの受信に応答して実行されても良い。
図22のフローチャートは、SSD3よって実行されるカウンタリセット処理の手順を示す。
このカウンタリセット処理は、SSD3の設定の変更のような特定のリセットイベントが発生した後のSSD3の各ネームスペースのライトアンプリフィケーションを、ホスト2に提供するために利用される。SSD3の設定の変更の例は、あるネームスペースの設定の変更であってもよいし、あるネームスペースの削除であってもよい。あるいは、SSD3の設定の変更の例は、SSD3全体の設定の変更であってもよい。
SSD3は、ホスト2からの要求に応じて、カウンタリセット処理を実行する。
この要求は、カウンタをリセットすることを要求するコマンドであってもよい。このコマンドの受信に応答して、SSD3は、全てのネームスペースに対応するカウンタ61〜66をリセットしてもよい。このコマンドがネームスペースIDを含む場合には、SSD3は、ネームスペースIDに対応するネームスペースに関連付けられた2つのカウンタだけをリセットしてもよい。
あるいは、あるネームスペースの設定またはSSD3全体の設定を変更するためのコントロールコマンドを、この要求として取り扱っても良い。あるネームスペースの設定の変更は、このネームスペースのサイズ(LBA範囲)の変更であってもよいし、このネームスペース用の物理ブロックの個数の変更であってもよい。
以下では、限定されないが、あるネームスペースの設定の変更に応答してカウンタリセット処理が実行される場合を例示してカウンタリセット処理の手順を説明する。
コントローラ4がネームスペースの設定の変更を要求するコントロールコマンドをホスト2から受信した時、コントローラ4は、コントロールコマンド内のネームスペースIDに基づいて、設定変更の対象ネームスペースを決定する。
対象ネームスペースがネームスペース(NS#1)ならば(ステップS81のYES)、コントローラ4は、コントロールコマンド内のパラメータに従ってネームスペース(NS#1)の設定を変更する(ステップS82)。コントローラ4は、ネームスペース(NS#1)に対応するカウンタ61、62のカウント値をゼロにクリアする(ステップS83)。
対象ネームスペースがネームスペース(NS#2)ならば(ステップS84のYES)、コントローラ4は、コントロールコマンド内のパラメータに従ってネームスペース(NS#2)の設定を変更する(ステップS85)。コントローラ4は、ネームスペース(NS#2)に対応するカウンタ63、64のカウント値をゼロにクリアする(ステップS86)。
対象ネームスペースがネームスペース(NS#n)ならば(ステップS87のYES)、コントローラ4は、コントロールコマンド内のパラメータに従ってネームスペース(NS#n)の設定を変更する(ステップS88)。コントローラ4は、ネームスペース(NS#n)に対応するカウンタ65、66のカウント値をゼロにクリアする(ステップS89)。
図23は、拡張ガベージコレクション(GC)制御コマンドを示す。
上述したように、拡張ガベージコレクション(GC)制御コマンドは、ホスト2によってSSD3の任意のネームスペースのガベージコレクション動作を制御するためのホスト・イニシエーティッド・ガベージコレクションコマンドとして使用される。
この拡張ガベージコレクション(GC)制御コマンドは、以下のパラメータを含む。
(1)ネームスペースID
(2)フリーブロックの量
(3)タイマ
ネームスペースIDのパラメータは、ガベージコレクションが実行されるべき対象ネームスペースのIDを示す。
フリーブロックの量のパラメータは、対象ネームスペースのために確保されるべきフリーブロックの量(例えば、フリーブロックの個数)を示す。
タイマのパラメータは、ガベージコレクション動作の最大時間を指定する。
ホスト2は、拡張ガベージコレクション(GC)制御コマンドを使用することによって、ネームスペース(NS#1)〜ネームスペース(NS#n)内の任意のネームスペースのガベージコレクションの実行をSSD3に要求することができる。
例えば、ホスト2は、WAゲットコマンドをSSD3に定期的に送信することによって個々のネームスペース(領域)のライトアンプリフィケーションを監視してもよい。あるネームスペース(領域)のライトアンプリフィケーションがこのネームスペースに対応するライトアンプリフィケーション閾値に達した時、ホスト2は、このネームスペースのネームスペースIDを含む拡張ガベージコレクション(GC)制御コマンドをSSD3に送出してもよい。
あるいは、ホスト2があるネームスペース(領域)へのデータのライトを良好なレイテンシで行うことを望む場合に、ホスト2は、このネームスペースのネームスペースIDを含む拡張ガベージコレクション(GC)制御コマンドをSSD3に送出してもよい。
ホスト2からの拡張ガベージコレクション(GC)制御コマンドの受信に応答して、SSD3のコントローラ4は、対象ネームスペースのための専用の、指定された量のフリースペースを確保するためのガベージコレクション動作を実行する。コントローラ4は、指定された量のフリースペースが確保された時点または最大時間が経過する時点のいずれか早いほうの時点で、ガベージコレクション動作を終了する。
図24のフローチャートは、SSD3によって実行されるガベージコレクション動作の手順を示す。
SSD3のコントローラ4が拡張ガベージコレクション(GC)制御コマンドをホスト2から受信した時(ステップS91のYES)、コントローラ4は、拡張ガベージコレクション(GC)制御コマンド内のネームスペースIDによって指定される対象ネームスペースのガベージコレクション動作を実行する(ステップS92)。ステップS92では、コントローラ4は、対象ネームスペースのアクティブブロック群からガベージコレクション対象の幾つかの物理ブロックを選択し、これら物理ブロックの有効データをコピー先物理ブロックにコピーする。
ガベージコレクション動作は、指定された量のフリースペースが確保された時点または最大時間が経過する時点のいずれか早いほうの時点で、終了される(ステップS93、S94)。
図25は、本実施形態のフラッシュアレイストレージの構成を示す。
このフラッシュアレイストレージは、ホスト2からは1台のストレージデバイスとして認識される。このフラッシュアレイストレージは、大容量化および高速化を実現するために、ストライピング制御される、複数のSSD、つまりSSD#1、SSD#2、SSD#3、…SSD#nを含む。
SSD#1、SSD#2、SSD#3、…SSD#nの各々は、不揮発性メモリを含む。さらに、SSD#1、SSD#2、SSD#3、…SSD#nの各々は、本実施形態のSSD3と同様のネームスペース管理機能を有している。
このフラッシュアレイにおいては、領域51(NS#1)は、SSD#1、SSD#2、SSD#3、…SSD#nに跨がって配置される。つまり、領域51は、SSD#1のネームスペース(NS#1)用に確保された幾つかの物理ブロックと、SSD#2のネームスペース(NS#1)用に確保された幾つかの物理ブロックと、SSD#3のネームスペース(NS#1)用に確保された幾つかの物理ブロックと、SSD#nのネームスペース(NS#1)用に確保された幾つかの物理ブロックとを含む。
領域52(NS#2)も、SSD#1、SSD#2、SSD#3、…SSD#nに跨がって配置される。つまり、領域52は、SSD#1のネームスペース(NS#2)用に確保された幾つかの物理ブロックと、SSD#2のネームスペース(NS#2)用に確保された幾つかの物理ブロックと、SSD#3のネームスペース(NS#2)用に確保された幾つかの物理ブロックと、SSD#nのネームスペース(NS#2)用に確保された幾つかの物理ブロックとを含む。
領域53(NS#3)も、SSD#1、SSD#2、SSD#3、…SSD#nに跨がって配置される。つまり、領域53は、SSD#1のネームスペース(NS#3)用に確保された幾つかの物理ブロックと、SSD#2のネームスペース(NS#3)用に確保された幾つかの物理ブロックと、SSD#3のネームスペース(NS#3)用に確保された幾つかの物理ブロックと、SSD#nのネームスペース(NS#3)用に確保された幾つかの物理ブロックとを含む。
領域54(NS#4)も、SSD#1、SSD#2、SSD#3、…SSD#nに跨がって配置される。つまり、領域54は、SSD#1のネームスペース(NS#4)用に確保された幾つかの物理ブロックと、SSD#2のネームスペース(NS#4)用に確保された幾つかの物理ブロックと、SSD#3のネームスペース(NS#4)用に確保された幾つかの物理ブロックと、SSD#nのネームスペース(NS#4)用に確保された幾つかの物理ブロックとを含む。
領域55(NS#n)も、SSD#1、SSD#2、SSD#3、…SSD#nに跨がって配置される。つまり、領域55は、SSD#1のネームスペース(NS#n)用に確保された幾つかの物理ブロックと、SSD#2のネームスペース(NS#n)用に確保された幾つかの物理ブロックと、SSD#3のネームスペース(NS#n)用に確保された幾つかの物理ブロックと、SSD#nのネームスペース(NS#n)用に確保された幾つかの物理ブロックとを含む。
図26は、図25のフラッシュアレイストレージのハードウェア構成を示す。
フラッシュアレイストレージ80は、上述のSSD#1、SSD#2、SSD#3、…SSD#nに加え、フラッシュアレイコントローラ81を含む。フラッシュアレイコントローラ81は、データを、SSD#1、SSD#2、SSD#3、…SSD#nに分散させるためのストライピング制御を実行するように構成されている。例えば、領域51(NS#1)にデータをライトする場合においては、例えば、最初の4KバイトのデータD1はNS#1に対応するSSD#1内の領域にライトされ、次の4KバイトのデータD2はNS#1に対応するSSD#2内の領域にライトされ、続く4KバイトのデータD3はNS#1に対応するSSD#3内の領域にライトされ、続く4KバイトのデータDnはNS#1に対応するSSD#n内の領域にライトされ、続く4KバイトのデータDn+1はNS#1に対応するSSD#1内の領域にライトされる。
このように、ライトデータは所定データサイズ(4Kバイト)単位でSSD#1、SSD#2、SSD#3、…SSD#nに分散される。例えば、ホスト2によってNS#1への1Mバイトのデータをライトすることが要求され場合、1Mバイトのデータは各々が所定データサイズ(4Kバイト)を有する複数のデータ部分に分割され、これらデータ部分がSSD#1、SSD#2、SSD#3、…SSD#nに並行してライトされてもよい。
このように、SSD#1、SSD#2、SSD#3、…SSD#nは並行にして動作するので、データライトのための性能を高めることができる。
フラッシュアレイコントローラ81は、図27に示されるように、フラッシュアレイストレージ80内ではなく、ホスト2内に設けられていてもよい。
図28は、フラッシュアレイストレージ80内のSSDそれぞれの容量とこれらSSDからある階層のために配分される容量の割合との関係を示す。
ここでは、tier#1(NS#1)を例示して説明する。ホスト2は、拡張ネームスペース管理コマンドをフラッシュアレイコントローラ81に送出して、フラッシュアレイストレージ80全体の総容量の1パーセントに相当する個数の物理ブロックをtier#1(NS#1)用に確保すべきことを要求する。フラッシュアレイコントローラ81は、SSD#1、SSD#2、SSD#3、…SSD#nのそれぞれの容量に基づいて、各SSD内においてtier#1(NS#1)用に確保されるべき物理ブロックの個数を決定する。
ここでは、SSD#1の容量が100GB、SSD#2の容量が200GB、SSD#3の容量が1TB、SSD#nの容量が100GBである場合を想定する。
フラッシュアレイコントローラ81は、拡張ネームスペース管理コマンドをSSD#1に送出して、100GBの1パーセントの容量(1GB)に相当する個数の物理ブロックをNS#1用に確保すべきことをSSD#1に要求する。フラッシュアレイコントローラ81は、拡張ネームスペース管理コマンドをSSD#2に送出して、200GBの1パーセントの容量(2GB)に相当する個数の物理ブロックをNS#1用に確保すべきことをSSD#2に要求する。フラッシュアレイコントローラ81は、拡張ネームスペース管理コマンドをSSD#3に送出して、1TBの1パーセントの容量(10GB)に相当する個数の物理ブロックをNS#1用に確保すべきことをSSD#3に要求する。フラッシュアレイコントローラ81は、拡張ネームスペース管理コマンドをSSD#nに送出して、100GBの1パーセントの容量(1GB)に相当する個数の物理ブロックをNS#1用に確保すべきことをSSD#nに要求する。
図29は、図28の容量割り当てに対応するライト動作の例を示す。
ストライピング制御によって領域51(NS#1)にデータをライトする場合においては、例えば、最初の4KバイトのデータD1はNS#1に対応するSSD#1内の領域にライトされる。次の4KバイトのデータD2と続く4KバイトのデータD3は、NS#1に対応するSSD#2内の領域にライトされる。続くデータD3〜D13は、NS#1に対応するSSD#3内の領域にライトされる。続く4KバイトのデータD14はNS#1に対応するSSD#n内の領域にライトされ、続く4KバイトのデータD15はNS#1に対応するSSD#1内の領域にライトされる。
図30は、ホスト2として機能する情報処理装置のハードウェア構成例を示す。
この情報処理装置は、サーバコンピュータ、またはパーソナルコンピュータとして実現される。この情報処理装置は、プロセッサ(CPU)101、メインメモリ102、BIOS−ROM103、ネットワークコントローラ105、周辺インタフェースコントローラ106、コントローラ107、およびエンベデッドコントローラ(EC)108等を含む。
プロセッサ101は、この情報処理装置の各コンポーネントの動作を制御するように構成されたCPUである。このプロセッサ101は、複数のSSD3のいずれか1つからメインメモリ102にロードされる様々なプログラムを実行する。メインメモリ102は、DRAMのようなランダムアクセスメモリから構成される。プロセッサ101によって実行されるプログラムは、上述のアプリケーションソフトウェアレイヤ41、OS42およびファイルシステム43を含む。ファイルシステム43は、上述の階層管理部44として機能する。
また、プロセッサ101は、不揮発性メモリであるBIOS−ROM103に格納された基本入出力システム(BIOS)も実行する。BIOSはハードウェア制御のためのシステムプログラムである。
ネットワークコントローラ105は、有線LANコントローラ、無線LANコントローラのような通信デバイスである。周辺インタフェースコントローラ106は、USBデバイスのような周辺デバイスとの通信を実行するように構成されている。
コントローラ107は、複数のコネクタ107Aにそれぞれ接続されるデバイスとの通信を実行するように構成されている。本実施形態では、複数のSSD3が複数のコネクタ107Aにそれぞれ接続される。コントローラ107は、SAS expander、PCIe Switch、PCIe expander、フラッシュアレイコントローラ、またはRAIDコントローラ等である。
EC108は、情報処理装置の電力管理を実行するように構成されたシステムコントローラとして機能する。EC108は、ユーザによる電源スイッチの操作に応じて情報処理装置をパワーオンおよびパワーオフする。EC108はワンチップマイクロコントローラのような処理回路として実現されている。EC108は、キーボード(KB)などの入力デバイスを制御するキーボードコントローラを内蔵していてもよい。
この情報処理装置においては、ホストソフトウェア(アプリケーションソフトウェアレイヤ41、OS42およびファイルシステム43)の制御の下、プロセッサ101は、以下の処理を実行する。
プロセッサ101は、拡張ネームスペース管理コマンドをSSD3に送出して、Hotデータ用のネームスペースNS#1(領域51)をSSD3内に作成する。拡張ネームスペース管理コマンドは、Hotデータ用のネームスペースNS#1(領域51)に割り当てるべき物理ブロックの個数を示すパラメータを含む。
プロセッサ101は、拡張ネームスペース管理コマンドをSSD3に送出して、Warmデータ用のネームスペースNS#2(領域52)をSSD3内に作成する。拡張ネームスペース管理コマンドは、Warmデータ用のネームスペースNS#2(領域52)に割り当てるべき物理ブロックの個数を示すパラメータを含む。
同様にして、プロセッサ101は、拡張ネームスペース管理コマンドをSSD3に送出して、Coldデータ用のネームスペースNS#n(領域55)をSSD3内に作成する。拡張ネームスペース管理コマンドは、Cold用のネームスペースNS#n(領域55)に割り当てるべき物理ブロックの個数を示すパラメータを含む。
プロセッサ101は、ネームスペースNS#1のネームスペースIDをHotデータ用のネームスペースIDとして管理し、ネームスペースNS#2のネームスペースIDをWarmデータ用のネームスペースIDとして管理し、そしてネームスペースNS#nのネームスペースIDをColdデータ用のネームスペースIDとして管理する。
あるHotデータをSSD3にライトすることが必要な時、プロセッサ101は、ネームスペースNS#1のネームスペースIDを含むライトコマンドをSSD3に送出する。あるColdデータをSSD3にライトすることが必要な時、プロセッサ101は、ネームスペースNS#nのネームスペースIDを含むライトコマンドをSSD3に送出する。
図31は、複数のSSD3とホスト2とを含む情報処理装置の構成例を示す。
この情報処理装置は、ラックに収容可能な薄い箱形の筐体201を備える。多数のSSD3は筐体201内に配置されても良い。この場合、各SSD3は筐体201の前面201Aに設けられたストロットに取り外し可能に挿入されてもよい。
システムボード(マザーボード)202は筐体201内に配置される。システムボード(マザーボード)202上においては、CPU101、メモリ102、ネットワークコントローラ105、コントローラ107を含む様々な電子部品が実装されている。これら電子部品がホスト2として機能する。
以上説明したように、本実施形態によれば、異なる更新頻度を有する複数種のデータをそれぞれ格納するための複数のネームスペース(領域51〜55)が管理される。コントローラ4は、メモリセルの消耗を抑制するための第1のコードを使用してライトデータをエンコードして第1符号化データを生成し、第1符号化データにエラー訂正コードを付加することによってNANDメモリ5にライトされるべき第2符号化データを生成する。さらに、コントローラ4は、ライトデータがライトされるべきネームスペースに基づいて、第1符号化データとエラー訂正コードの比率を変更する。したがって、ネームスペース毎に信頼性(データリテンション)と耐久性(DWPD値)との間のトレードオフを最適化することが可能となり、様々な種類のデータの記憶に有用なメモリシステムを実現できる。
なお、本実施形態では、不揮発性メモリとしてNANDメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。