以下、図面を参照して、実施形態を説明する。
[システム構成]
まず、図1を参照して、一実施形態に係るストレージシステムを含む情報処理システム1の構成を説明する。
情報処理システム1においては、このストレージシステムは、この情報処理システム1のメインストレージ(外部ストレージデバイス)として機能し得る。このストレージシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成されている。このストレージシステムは、例えば、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)3として実現されていてもよい。SSD3は、不揮発性メモリであるNANDフラッシュを備えたストレージデバイスである。
情報処理システム1は、様々なファイルのようなデータを、ストレージシステムであるSSD3を使用して管理する。この情報処理システム1は、SSD3内の不揮発性メモリのリード動作、ライト動作、消去動作を制御するように構成されたコンピュータシステムとして機能し得る。
この情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。ホスト2は、SSD3にデータに保存するように構成された情報処理装置である。この情報処理装置の例には、サーバコンピュータ、パーソナルコンピュータ等が含まれる。
SSD3は、ホスト2として機能する情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
ホスト2とSSD3とを相互接続するためのインタフェースとしては、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)、NVM Express(NVMe)、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は、SSD3の物理リソース、つまりNANDメモリ5、を管理するための物理リソース管理機能を有していてもよい。コントローラ4の物理リソース管理機能は、ホスト2がSSD3の物理リソースを直接的にアクセスするのを助けるために使用し得る。
ホスト2がSSD3の物理リソースを直接的に制御およびアクセスするのを可能にするために、ホスト2においては、フラッシュトランスレーション層(FTL)43が実行されてもよい。ホスト2がフラッシュトランスレーション層(FTL)43を有するシステム構成は、ホスト2がSSD3の物理リソースを直接的に制御およびアクセスするのを可能にし、またSSD3の処理負荷を低減することを可能にする。
フラッシュトランスレーション層(FTL)43は、データ管理とNANDメモリ5のブロック管理とを実行してもよい。
データ管理は、(1)論理ブロックアドレス(LBA)それぞれとNANDメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)ページ単位で実行されるリード/ライトとブロック単位で実行される消去動作とを隠蔽するための処理、等を含み得る。LBAそれぞれと物理アドレスそれぞれとの間のマッピングの管理は、論理物理アドレス変換テーブルとして機能するルックアップテーブル(LUT)45を用いて実行される。
FTL44は、複数のネームスペースを管理するマルチネームスペース機能をサポートしてもよい。マルチネームスペース機能は、一つのストレージデバイス(ここではSSD3)をあたかも複数のドライブであるかのように扱うことを可能にするために、複数のネームスペースそれぞれに対応する複数の論理アドレス空間(LBA空間)を管理することができる。各ネームスペースには、LBA範囲(LBA0〜LBAn−1)が割り当てられる。LBA範囲のサイズ(つまりLBAの数)はネームスペース毎に可変であってもよい。各LBA範囲は、LBA0から始まる。
FTL44は、クリエートされたネームスペースの数と同数のルックアップテーブル(LUT)45を使用することによって、ネームスペース毎に、LBAそれぞれと物理アドレスそれぞれとの間のマッピングを管理してもよい。
ある特定のネームスペースに対応するルックアップテーブル(LUT)45においては、特定のネームスペースに関連づけられたLAB範囲内のLBAそれぞれと物理アドレスそれぞれとの間のマッピングが管理されてもよい。LBAと物理アドレスとの間のマッピングの管理は、特定の管理サイズ単位で行われる。特定の管理サイズ単位としてはシステム設計に応じた様々なサイズを使用することができる。特定の管理サイズ単位の例は、制限されないが、例えば、4Kバイトであってもよい。
ある特定のLBAに対応する物理アドレスは、この特定のLBAのデータが格納されているNANDメモリ5内の位置(物理記憶位置)を示す。物理アドレスは、ブロックアドレスとページアドレスとの組み合わせによって表現されてもよい。ブロックアドレスは、個々のブロックを指定するアドレスであり、「物理ブロックアドレス」または「ブロック番号」とも称される。ページアドレスは一つのブロック内の個々のページを指定するアドレスであり、「物理ページアドレス」または「ページ番号」とも称される。
ページへのデータ書き込みは、1消去サイクル当たり1回のみ可能である。換言すれば、データは、消去状態のページ(利用可能ページ)に対してのみ書き込むことができる。データが書き込まれたページは有効ページとなる。
一方、データの最少消去単位は、複数ページを含むブロックである。
このため、FTL44は、同じLBAへのライト(上書き)を、NANDメモリ5上の異なるページにマッピングする。つまり、FTL44は、データ(ライトデータ)を、このデータのLBAとは無関係に、次の利用可能ページにライトする。そして、FTL44は、ルックアップテーブル(LUT)45を更新して、このLBAを、このデータが実際にライトされたこのページに対応する物理アドレスに関連付ける。元のページ(つまりこのLBAが関連付けられていた古いデータ)は、無効化される。
FTL44は、有効データと無効データとを管理することができる。有効/無効データは、物理アドレスそれぞれに対応する有効/無効フラグを保持するページ管理テーブルを使用して管理してもよい。各有効/無効フラグは、特定の管理サイズ単位(例えば、4Kバイト)で、物理アドレスそれぞれに対応するデータが有効であるか無効であるかを示してもよい。データが有効であるとは、そのデータが最新のデータであることを意味する。データが無効であるとは、そのデータが更新(書き替え)によってもはや利用されないことを意味する。
FTL44によって実行されるブロック管理の例には、ウェアレベリングと、ガベージコレクション等が含まれていてもよい。ウェアレベリングは、ブロックそれぞれの消去回数を平準化するための動作である。ガベージコレクションは、NANDメモリ5内のフリースペースを作り出すための動作である。このガベージコレクションは、有効データと無効データとが混在する幾つかのブロック内の全ての有効データを別のブロック(コピー先フリーブロック)にコピーする。そして、ガベージコレクションは、ルックアップテーブル(LUT)45を更新して、コピーされた有効データのLBAそれぞれを正しい物理アドレスにマッピングする。有効データが別のブロックにコピーされることによって無効データのみなったブロックはフリーブロックとして解放される。これによって、このブロックは消去後に再利用することが可能となる。
ホスト2は、ライトコマンド、リードコマンド、消去コマンドのような様々なコマンド(アクセス要求)をSSD3に送出する。上述したように、この情報処理システム1においては、FTL44がホスト2上で実行されるので、これらコマンドの各々は、LBAではなく、NANDメモリ5上の位置を指定する物理アドレス(ブロックアドレス、ページアドレス)を含むことができる。
次に、コントローラ4の構成について説明する。
コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14等を含む。これらCPU12、NANDインタフェース13、DRAMインタフェース14は、バス10を介して相互接続される。
ホストインタフェース11は、ホスト2から様々なコマンド(ライトコマンド、リードコマンド、消去コマンド、等)を受信する。
CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14を制御するように構成されたプロセッサである。CPU12は、NANDメモリ5を管理する物理リソース管理処理、ホスト2から受信される様々なコマンドを処理するためのコマンド処理等を実行する。物理リソース管理処理およびコマンド処理は、CPU12によって実行されるファームウェアによって制御されてもよい。
このファームウェアは、ホスト2がNANDメモリ5を制御するのを助けるための処理を実行することができる。
このファームウェアは、CPU12を、物理NANDアクセス管理アプリケーションプログラムインタフェース(API)21、仮想NANDアクセス管理アプリケーションプログラムインタフェース(API)22、ブロック情報管理部23、バッドブロック管理部24、ブロック割り当て・消去制御部25、ライト制御部26、リード制御部27、データコピー制御部28、ネームスペース制御部29として機能させる。
<物理NANDアクセス管理APIと仮想NANDアクセス管理API>
これら物理NANDアクセス管理API21および仮想NANDアクセス管理API22の各々は、ホスト2とSSD3との間の通信に関するソフトウェアインタフェースであり、ホスト2がNANDメモリ5内のブロックを直接的に制御することを可能にする。物理NANDアクセス管理API21においては、ホスト2によるNANDメモリ5内のブロックの制御は、個々のブロックの単位で、つまり、物理ブロックの単位で実行される。一方、仮想NANDアクセス管理API22においては、ホスト2によるNANDメモリ5内のブロックの制御は、基本的には、複数個のブロック(複数個の物理ブロック)を纏めことによって得られるブロックグループの単位で実行される。複数個のブロックを含むブロックグループは、以下では、「仮想ブロック」とも称する。
物理NANDアクセス管理API21、仮想NANDアクセス管理API22のどちらにおいても、アクセスされるべきNANDメモリ5上の位置は、ホスト2からのコマンドに含まれる物理アドレス(ブロックアドレス、ページアドレス)によって指定され得る。
CPU12は、NANDメモリ5内の複数のブロック(物理ブロック)を、複数の第1ブロックと、複数の第2ブロックとに分類する。
複数の第1ブロックは、物理NANDアクセス管理API21用のブロックであり、これらブロックはブロック単独(単一の物理ブロック)の単位でNANDメモリ5をアクセスするためのブロックとして使用される。
複数の第2ブロックは、仮想NANDアクセス管理API22用のブロックであり、複数個のブロックを各々が含む複数のブロックグループ(複数の仮想ブロック)として編成されるブロックである。これら第2ブロックは、複数個のブロック(複数個の物理ブロック)を纏めることによって得られるブロックグループの単位でNANDメモリ5をアクセスするためのブロックとして使用される。
ホスト2が物理NANDアクセス管理API21を使用してSSD3をアクセスするケースにおいては、CPU12は、ホスト2からの、複数の第1ブロック内の一つのブロック(物理ブロック)を指定する物理アドレスを含む第1のリード、ライトまたは消去のコマンドの受信に応答して、この第1ブロックに対するリード動作、ライト動作、または消去動作を実行する。
ホスト2が仮想NANDアクセス管理API22を使用してSSD3をアクセスするケースにおいては、CPU12は、複数の仮想ブロック内の一つの仮想ブロックを指定する物理アドレスを含む第2のリード、ライトまたは消去のコマンドの受信に応答して、一つの仮想ブロックに対するリード動作、ライト動作、または消去動作を実行する。
この仮想NANDアクセス管理API22においては、単一のブロックの単位では無く、仮想ブロックを構成する複数個のブロックの纏まりの単位でリード動作、ライト動作、または消去動作を実行することができる。よって、仮想NANDアクセス管理API22は、ユーザデータのような比較的大きいサイズのデータを高速にリード/ライト/消去可能なインタフェースとして利用することができる。例えば、ページサイズが16Kバイトであり、一つの仮想ブロックが4個のブロック(4個の物理ブロック)から構成されているケースにおいては、最大で64Kバイトのバンド幅を実現することができる。また、例えば、ページサイズが16Kバイトであり、一つの仮想ブロックが8個のブロックから構成されているケースにおいては、最大で128Kバイトのバンド幅を実現することができる。
一方、物理NANDアクセス管理API21では、単一のブロックに対するリード動作、ライト動作、または消去動作が実行される。物理NANDアクセス管理API21において保証される最大バンド幅は、仮想NANDアクセス管理API2において保証される最大バンド幅よりも狭い。その反面、物理NANDアクセス管理API21は、仮想NANDアクセス管理API22よりも小さい粒度でリード/ライト/消去を制御することができる。よって、物理NANDアクセス管理API21は、例えば、メタデータのような比較的小さいサイズのデータをNANDメモリ5上の所望の位置に配置するというデータ配置制御、および小さなデータサイズの粒度でアクセス(リード/ライト/消去)するためのインタフェースとして有用である。
ホスト2は、物理NANDアクセス管理API21用のブロックそれぞれを指定する物理アドレス、および仮想NANDアクセス管理API22用の仮想ブロックそれぞれを指定する物理アドレスを、SSD3から予め取得してよいし、あるいは、ある一つのブロックまたはある一つの仮想ブロックの割り当てをSSD3に要求することによってある一つのブロックを指定する物理アドレスまたはある一つの仮想ブロックを指定する物理アドレスをSSD3から取得してもよい。
一つの仮想ブロックに含まれる複数個のブロックの組み合わせは、限定されないが、例えば、並列(同時)アクセス可能な複数個のブロック(複数個の物理ブロック)によって一つの仮想ブロックが形成されてもよい。
例えば、NANDインタフェース13が複数のチャンネルを有しており、且つ各チャンネルに1つ以上のNANDフラッシュチップが接続されている場合には、異なるチャンネルにそれぞれ接続されたNANDフラッシュチップから一つずつ選択された、チャンネル数分のブロックによって一つの仮想ブロックが構成されてもよい。これにより、NANDメモリ5の構造上の最大バンド幅に対応するアクセス速度を保証することができる。
メタデータは、ファイル管理情報であってもよい。ファイル管理情報は、ファイル内のデータの記憶位置を示すデータ、このファイルの作成日時を示すデータ、このファイルが更新された日時を示すデータ、またはこのファイルが最後にリードされた日時を示すデータ、の少なくとも一つを含んでいてもよい。
物理NANDアクセス管理API21用のリードコマンド、ライトコマンド、消去コマンドは、仮想NANDアクセス管理API22用のリードコマンド、ライトコマンド、消去コマンドと異なるオペレーションコードを有していてもよい。
<ブロック情報管理>
ブロック情報管理部23は、NANDメモリ5内の個々のブロックおよび個々の仮想ブロックに関する情報を管理し、個々のブロックおよび個々の仮想ブロックに関する情報をホスト2に提供することができる。個々のブロックおよび個々の仮想ブロックに関する情報は、個々のブロックそれぞれの消去回数、個々の仮想ブロックそれぞれの消去回数を含んでいてもよい。
データセンタ等においては、あるサーバコンピュータに接続されているSSDが、別のサーバコンピュータ等において過去に使用されていた別のSSDに交換されるというケースがあり得る。
SSD3があるサーバコンピュータから別のサーバコンピュータに移設された場合、SSD3のブロック情報管理部23は、NANDメモリ5内の個々のブロックおよび個々の仮想ブロックの使用履歴に関する情報(現在の消去回数、等)を、この別のサーバコンピュータに提供することができる。よって、この別のサーバコンピュータは、SSD3の過去の使用履歴をも考慮した状態で個々のブロックまたは個々の仮想ブロックの実際の消去回数を正しく理解できるので、例えば、SSD3から取得した消去回数の情報に基づいてウェアレベリングのための処理等を精度良く行うことができる。
<バッドブロック管理>
バッドブロック管理部24は、プライマリー欠陥リスト(「工場出荷欠陥リスト」とも云う)によって指定される使用できない不良ブロック(プライマリーバッドブロック)、およびシステム稼動中にホスト2によって指定される不良ブロック(グロウンバッドブロック)を管理するための処理を実行することができる。
例えば、プライマリー欠陥リストによってまたはホスト2によってある仮想ブロック内の一つのブロックが使用できない不良ブロック(バッドブロック)として指定された場合、バッドブロック管理部24は、仮想ブロック内のバッドブロックを仮想NANDアクセス管理API22用の別のブロックに置き換える処理を実行してもよい。この別のブロックは、バッドブロック以外のこの仮想ブロック内の他の全てのブロックと並列アクセス可能なブロック群の中から選択されてもよい。
<ブロック割り当て・消去>
ブロック割り当て・消去制御部25は、有効データを含むブロックそれぞれと有効データを含まないブロック(フリーブロック)それぞれとを管理することができる。有効データを含むブロックとは、ホスト2を介してSSD3を利用するユーザによって使用されているブロックを意味する。幾つかのクライアント端末51がネットワーク50を介してホスト2に接続されている場合には、これらクライアント端末51のユーザがホスト2を介してSSD3を利用するユーザであってもよい。有効データを含まないブロックとは、どのユーザによっても使用されていないブロックを意味する。
さらに、ブロック割り当て・消去制御部25は、有効データを含む仮想ブロックそれぞれと有効データを含まない仮想ブロック(フリー仮想ブロック)それぞれとを管理することもできる。
ホスト2から一つのブロックの割り当てが要求された場合、ブロック割り当て・消去制御部25は、フリーブロックの中から一つのブロック(物理ブロック)をホスト2に割り当ててもよく、そしてこの割り当てられたブロックを指定する物理アドレス(ブロックアドレス)をホスト2に通知してもよい。以降、ホスト2は、この通知された物理アドレスを使用することによって、この割り当てられたブロックをアクセス(リード/ライト/消去)することができる。
ホスト2から一つの仮想ブロックの割り当てが要求された場合、ブロック割り当て・消去制御部25は、フリー仮想ブロックの中から一つの仮想ブロックをホスト2に割り当ててもよく、そしてこの割り当てられた仮想ブロックを指定する物理アドレス(仮想ブロックアドレス)をホスト2に通知してもよい。以降、ホスト2は、この通知された物理アドレスを使用することによって、この割り当てられた仮想ブロックをアクセス(リード/ライト/消去)することができる。
仮想ブロックをアクセスするための物理アドレスは、仮想ブロックアドレス、仮想ブロック内ブロック番号、およびページアドレスを含んでいてもよい。仮想ブロックアドレスは仮想ブロックそれぞれに割り当てられた仮想ブロック番号のいずれかを指定する。仮想ブロック内ブロック番号は、アクセス対象ブロックが仮想ブロック内の何番目のブロックであるかを指定する。ページアドレスはアクセス対象ブロック内のページ番号を示す。
このブロック割り当て・消去制御部25は、ホスト2自身が有効データを含むブロックと有効データを含まないブロックとを管理すること無く、有効データを含まないブロックをホスト2が取得することを可能にする。よって、ホスト2によるNANDメモリ5の管理コストを低減することができる。
ブロック(または仮想ブロック)の割り当て要求は、ブロック(または仮想ブロック)の割り当てのみを要求するコマンドであってもよい。あるいは、ブロック(または仮想ブロック)の割り当てとブロック(または仮想ブロック)の消去との双方を要求するコマンド、つまりブロック割り当て・消去コマンド、または仮想ブロック割り当て・消去コマンド、が使用されてもよい。
ブロック割り当て・消去コマンドは、ブロックの割り当てを要求するコマンドの機能とブロックの消去を要求するコマンドの機能とを組み合わせた一つのコマンドである。同様に、仮想ブロック割り当て・消去コマンドは、仮想ブロックの割り当てを要求するコマンドの機能と仮想ブロックの消去を要求するコマンドの機能とを組み合わせた一つのコマンドである。
ホスト2からのブロック割り当て・消去コマンドの受信に応答して、ブロック割り当て・消去制御部25は、フリーブロックの中から一つのブロックをホスト2に割り当て、そしてこの割り当てられたブロックを自動的に消去し、そしてこの割り当ておよび消去されたブロックを指定する物理アドレス(ブロックアドレス)をホスト2に通知する。
各フリーブロックは有効データを含まないが、いずれかのユーザが過去に書き込んだ古いデータを保持している場合がある。したがって、割り当てられたブロックを自動的に消去する上述の機能により、ユーザデータの漏洩を未然に防止することができる。また、ホスト2は、割り当てられたブロックを消去するための消去コマンドをSSD3に送信すること無く、この割り当てられたブロックへのデータの書き込みを即座に開始することができる。
ホスト2からの仮想ブロック割り当て・消去コマンドの受信に応答して、ブロック割り当て・消去制御部25は、フリー仮想ブロックの中から一つの仮想ブロックをホスト2に割り当て、この割り当てられた仮想ブロックを自動的に消去し、そしてこの割り当ておよび消去された仮想ブロックを指定する物理アドレス(仮想ブロックアドレス)をホスト2に通知する。
<ライト制御>
ライト制御部26は、ある特定のブロックを指定するブロックアドレスとこの特定のブロック内の複数ページ内のある特定のページを指定するページアドレスとを含むライトコマンドを受信し、このライトコマンドによって指定されるデータを、特定のブロック内の特定のページに書き込む(直接アドレス指定モード)。ライト制御部26は、物理NANDアクセス管理API21および仮想NANDアクセス管理API22の双方をサポートする。物理NANDアクセス管理API21においては、特定のブロックは特定の物理ブロックであり、仮想NANDアクセス管理API22においては、特定のブロックは、特定の仮想ブロック内のアクセス対象ブロックである。
ライト制御部26は、読み出し可能なデータを保持するブロック内の最新のページをホスト2に通知する「読み出し可能ページ通知機能」を有している。NANDメモリ5として使用されるNANDメモリの種類によっては、たとえあるブロックの最初のページにデータが書かれても、このブロック内の後続する幾つかのページにデータがさらに書き込まれるまでは、このブロックの最初のページからデータを正常に読み出すことができない場合がある。もし最初のページに後続する幾つかのページにデータが書き込まれる前にこの最初のページがホスト2によってリードアクセスされたならば、ECCによって訂正不能な誤ったデータが最初のページから読み出されてしまい、ホスト2にリードエラーを示すステータスが返されてしまう場合がある。最初のページのデータは後続する幾つかのページへのデータ書き込み後に正常にリードできるにもかかわらず、ホスト2は、このリードエラーを物理的なメモリ欠陥によるものと誤って認識してしまうかもしれない。
同様に、このブロックの2番目のページに書かれたデータも、この2番目のページに後続する幾つかのページにデータが書き込まれるまでは、正常に読み出すことができない場合がある。各ページのデータが読み出し可能となるタイミングはNANDメモリによって異なる。
ライト制御部26は、読み出し可能なデータを保持するブロック内の最新のページをホスト2に通知することができる。例えば、書き込み対象ブロック内の幾つかのページにデータが書かれることによって書き込み対象ブロック内の最初のページが読み出し可能となった時には、ライト制御部26は、最初のページのページアドレスを読み出し可能なデータを保持する最新のページとしてホスト2に通知してもよい。書き込み対象ブロックへのさらなる書き込みによって書き込み対象ブロック内の2番目のページが読み出し可能となった時には、ライト制御部26は、2番目のページのページアドレスを読み出し可能なデータを保持する最新のページとしてホスト2に通知してもよい。
より詳しくは、ライト制御部26は、以下の動作を実行する。
ライト制御部26は、ホスト2から、NANDメモリ5の複数のブロック内の第1ブロックを指定するブロックアドレスとこの第1ブロック内の複数ページ内の第1ページを指定するページアドレスとを含むライトコマンドを受信する。ライト制御部26は、このライトコマンドによって指定されるデータを、第1ブロック内の第1ページに書き込む。そして、ライト制御部26は、第1ページへのデータの書き込みの前にホスト2によってデータが書き込まれた第1ブロック内のページ群の中で、第1ページへのデータの書き込みによって読み出し可能となった最新のページを示すページアドレスを、ホスト2に通知する。
ホスト2は、この通知に基づいて、データをライトしたブロック内のどのページまでがリード可能状態であるかを認識することができる。よって、この「読み出し可能ページ通知機能」により、ホスト2がNANDメモリ5を直接アクセスするのを助けることができる。
ライト制御部26は、さらに、「不正書き込み順序警告」機能を有している。「不正書き込み順序警告」機能は、ブロック内では最初のページから最後のページに向けてシーケンシャルにデータを書き込むことが必要とされるという書き込み順序の制約がホスト2によって守られなかった場合に不正書き込み順序の警告をホスト2に返す機能である。
ホスト2はデータが書き込まれるべき物理アドレス(ブロックアドレスおよびページアドレス)を指定することができる。このことは、ホスト2が、誤った書き込み順序でライトアクセスを実行する可能性があることを意味する。この「不正書き込み順序警告」機能により、ホスト2がNANDメモリ5へのライトを直接コントロールするのを支援することができる。
より詳しくは、ライト制御部26は、以下の動作を実行する。
ライト制御部26は、ホスト2から、NANDメモリ5の複数のブロック内の第1ブロックを指定するブロックアドレスと第1ブロック内の複数ページ内の第1ページを指定するページアドレスとを含むライトコマンドを受信する。ライト制御部26は、このライトコマンド内のページアドレスに基づいて、このライトコマンドが、第1ブロック内の複数ページ内の最初のページから最後のページの順でデータを書き込むという書き込み順序に関する制約を満たしているか否かを判定する。このライトコマンドが書き込み順序に関する制約を満たしている場合、ライト制御部26は、このライトコマンドによって指定されるデータを、第1ブロック内の第1ページにデータを書き込む。このライトコマンドが書き込み順序に関する制約を満たしていない場合、ライト制御部26は、このライトコマンドによって指定されるデータを、第1ブロック内の第1ページにデータを書き込まずに、不正書き込み順序の警告を含むコマンド完了レスポンスをホスト2に通知する。
ライト制御部26は、さらに、上述の「直接アドレス指定モード」に加え、「自動アドレス生成モード」をサポートしてもよい。
直接アドレス指定モードは、ホスト2が、データがライトされるべきNANDメモリ5内のブロックとこのブロック内のページとの双方を直接的に指定するライトモードである。この直接アドレス指定モードにおいては、ホスト2は、ブロックアドレスおよびページアドレスの双方を含むライトコマンドをSSD3に送信する。
一方、自動アドレス生成モードは、ホスト2が、データがライトされるべきNANDメモリ5上のブロックのみを指定するライトモードである。この指定されるブロックは物理ブロックであってもよいし、仮想ブロック内のアクセス対象ブロックであってもよい。
自動アドレス生成モードにおいて利用されるライトコマンドは、ブロックアドレスのみを含み、ページアドレスを含まない。この指定されたブロック内の書き込み対象ページのページアドレスは、SSD3によって自動的に発行される。データが書き込まれたページを示すページアドレス、つまり自動発行されたページアドレスは、SSD3からホスト2に通知される。
上述の「読み出し可能ページ通知機能」は、自動アドレス生成モードにおいて利用可能である。自動アドレス生成モードにおいては、ライト制御部26は、以下の動作を実行することができる。
ライト制御部26は、ホスト2から、ブロックアドレスを含み、ページアドレスを含まないライトコマンドを受信する。ライト制御部26は、ブロックアドレスによって指定される第1ブロック内の複数のページ内の最初のページから最後のページの順でデータを書き込むという書き込み順序に従って、第1ブロック内の複数のページ内の次の利用可能ページを指定するページアドレスを自動発行する。ライト制御部26は、ライトコマンドによって指定されるデータを、第1ブロック内の次の利用可能ページ(自動発行されたページアドレスによって指定されるページ)に書き込む。ライト制御部26は、次の利用可能ページへのデータの書き込みの前にホスト2によってデータが書き込まれた第1ブロック内のページ群の中で、次の利用可能ページへのデータの書き込みによって読み出し可能となった最新のページを示すページアドレスを、ホスト2に通知する。
ライト制御部26は、さらに、データが書き込まれたページが現在の書き込み対象ブロックの最後のページに達したことをホスト2に通知する機能を有している。この通知に応じて、ホスト2は、新たなブロックの割り当てが必要なことを認識することができる。
ライト制御部26は、さらに、データが書き込まれた現在の書き込み対象ブロック内のページ数が特定ページ数に達したことをホスト2に通知する機能を有している。ホスト2は、各ブロック内の特定のページ、例えば最後のページ、に特定の管理情報(例えばメタデータ)を書き込むことを望む場合がある。したがって、現在の書き込み対象ブロック内においてデータが書き込まれたページ数が「特定ページ数」に達したことをホスト2に通知することにより、この書き込み対象ブロックの最後のページなどに特定の管理情報を書き込むというホスト2の作業を助けることができる。「特定ページ数」は、ホスト2からのライトコマンドによって指定できる。
<リード制御>
リード制御部27がホスト2からリードコマンドを受信した時、リード制御部27は、このリードコマンド内のブロックアドレスおよびページアドレスによって指定されるブロック内のページからデータをリードする。この指定されるブロックは、物理NANDアクセス管理API21用の物理ブロックであってもよいし、仮想NANDアクセス管理API22用の仮想ブロック内のアクセス対象ブロックであってもよい。
<データコピー制御>
データコピー制御部28は、ホスト2がガベージコレクションを実行するのを支援するためのデータコピー動作を実行する。データコピー動作は、ホスト2から受信されるデータコピーコマンドに基づいて、SSD3においてローカルに実行される。つまり、NANDメモリ5の特定のコピー元ブロックから特定のコピー先ブロックへデータをコピーするためのデータ転送動作は、ホスト2を経由せずに、SSD3内において実行される。
このため、NANDメモリ5の特定のコピー元ブロックからリードされるデータをホスト2のメモリに転送し、且つこのデータ内の有効データをホスト2のメモリからNANDメモリ5の特定のコピー先ブロックに書き込むという処理を行わずとも、ガベージコレクションのために必要な有効データをNANDメモリ5内の特定のブロックに集める動作をSSD3内でローカルに実行することができる。
データコピーコマンドは、コピー元ブロック、コピー元ブロック内のコピー開始ページ、コピー先ブロック、コピー先ブロック内の転送開始ページ、コピー終了条件(コピー先ブロックにコピーすべき有効データ数、またはコピー終了までに検出すべき無効データ数)を指定することができる。ここで、有効データ数は有効ページ数であってもよく、また無効データ数は無効ページ数であってよい。コピー元ブロックは、物理NANDアクセス管理API21用の物理ブロックであってもよいし、仮想NANDアクセス管理API22用の仮想ブロック内の一つのブロックであってもよい。同様に、コピー先ブロックも、物理NANDアクセス管理API21用の物理ブロックであってもよいし、仮想NANDアクセス管理API22用の仮想ブロック内の一つのブロックであってもよい。
コピー開始ページは、コピー元ブロック内のコピー対象の最初のページを示す。転送開始ページは、コピー先ブロック内の転送対象の最初のページを示す。これらコピー開始ページおよび転送開始ページの指定により、コピー元ブロック内の任意のページ範囲内の有効データを、コピー先ブロック内の任意のページ範囲内にコピー(移動)するというきめ細かなコピー動作を実行することができる。
また、データコピー動作においては、データコピー制御部28は、無効データのコピーを自動的にスキップし、特定のページ範囲内の有効データのみをコピー先ブロックにコピーする。これにより、ホスト2がどのデータをどこにコピーすべきかを指定することなく、ガベージコレクションのために必要な有効データのコピーを実行することができる。
<ネームスペース制御>
ネームスペース制御部29は、複数のネームスペースを個別に扱うためのマルチネームスペース機能をサポートすることができる。マルチネームスペース機能は、NANDメモリ5を複数の領域に論理的に分割すること可能にするために、複数の論理アドレス空間(LBA空間)がそれぞれ割り当てられた複数のネームスペースを管理することができる。各ネームスペースはNANDメモリ5内の一つの領域として機能する。ある特定のネームスペースに関連づけられたデータは、この特定のネームスペースに割り当てられたブロック群に書き込まれる。
ネームスペース制御部29は、ネームスペース割り当てコマンド等をサポートする。
ネームスペース割り当てコマンドは、SSD3に対して、個々のネームスペースのために確保すべきブロックの個数を要求する。確保すべきブロックの個数は、物理NANDアクセス管理API21用の物理ブロックの個数であってもよいし、仮想NANDアクセス管理API22用の仮想ブロックの個数であってもよい。
ホスト2からのネームスペース割り当てコマンドの受信に応答して、ネームスペース制御部29は、特定のネームスペースに対して、ホスト2によって指定された個数のブロックを確保(割り当て)することができる。
ネームスペース割り当てコマンドは、ホスト2(ホストソフトウェア)が、ホスト2内のワークロードに適した個数のブロックを個々のネームスペースのために確保することを可能にする。例えば、ランダムライトアクセスを多く使用するワークロードに関連づけられたネームスペースに関しては、このネームスペース用の論理ブロックアドレス(LBA)の数に対応する容量よりも多くの容量に相当する個数のブロックを確保してもよい。例えば、あるネームスペース用の論理ブロックアドレス(LBA)の数(LBA範囲)に対応する容量が100Gバイトであり、このネームスペース用に150Gバイトに相当する個数のブロックが確保されたならば、LBA範囲に対応する容量(ユーザスペースの容量)の50パーセント分のサイズを有するオーバープロビジョン領域を確保することができる。
オーバープロビジョニングは、ホスト2からはその利用可能ユーザスペース(ユーザアクセス可能LBAスペース)として見えないストレージ容量を、ホスト2に割り当てることを意味する。ホスト2からはユーザアクセス可能LBAスペースとして見えないストレージ容量が割り当てられたスペースが、オーバープロビジョン領域である。オーバープロビジョニングにより、ユーザアクセス可能LBAスペース(ユーザ領域の容量)を超える容量のブロック群を特定のネームスペースに割り当てることができる。
更新頻度の高いデータを扱うネームスペースに関しては、データの書き替えが多発するため、多くのブロックがフラグメント化される場合がある。この結果、ガベージコレクションの実行回数が増加され、これによってライトアンプリフィケーションが増加されるので、ブロックそれぞれの消去回数も増加する。消去回数の増加は、SSD3の耐久性および寿命の劣化を引き起こす要因となる。
多くのオーバープロビジョン領域が割り当てられたネームスペースに関しては、ガベージコレクションの開始タイミングを遅らせることができる。例えば、100Gバイトのユーザスペース(LBA範囲)を有する特定のネームスペースに150Gバイトに相当する個数のブロック(または仮想ブロック)が確保されているケースを想定する。この場合、たとえ100Gバイト分の個数のブロックがデータで満たされて、この結果、たとえ、これらブロックがそのブロックの消去無しでは利用可能ページを含まない状態になっても、これらブロックの代わりにオーバープロビジョン領域に対応するブロックそれぞれをデータのライトに使用することができる。よって、この特定のネームスペース用のガベージコレクション動作が実行されるタイミングを遅らせることができる。オーバープロビジョン領域のブロック群にデータがライトされるにつれ、ユーザスペースのブロック群内のデータはその更新によって無効化されるかもしれない。全てのデータが無効化されたブロックはそのガベージコレクションなしで再利用することができる。よって、オーバープロビジョン領域のサイズを最適化することにより、消去回数の増加を抑制することができる。
さらに、ネームスペース制御部29は、個々のネームスペース毎に消去回数(合計消去回数ともいう)をカウントし、カウントされたネームスペース毎の消去回数をホスト2に通知することができる。
ホスト2(ホスト2の管理者)は、特定のネームスペースに対応する合計消去回数を、この特定のネームスペース(このネームスペースを使用しているユーザ)によってNANDメモリ5がどのくらい消耗されているかを判定するための指標として利用することができる。ホスト2は、ネームスペースそれぞれに対応する合計消去回数を、これらネームスペースの管理に活用することができる。
例えば、合計消去回数が多いネームスペースに関しては、ホスト2は、このネームスペース用に確保すべきブロックの数を追加してもよい。この場合、ホスト2は、ネームスペース割り当てコマンドをSSD3に送信することによって、特定の数のブロックの追加をSSD3に要求してもよい。このネームスペースに特定の数のブロックが追加されることによってこのネームスペースのオーバープロビジョン領域の量が増加されるので、このネームスペースに対応するライトアンプリフィケーションを抑制することができ、結果としてSSD3の寿命を最大化することができる。
データセンタ等においては、ストレージスペースそれぞれをユーザに有料で貸し出すというレンタルサービスが行われるケースがある。この場合、NANDメモリ5は複数のネームスペースにそれぞれ対応する複数の領域(ストレージスペース)に論理的に分割される。あるユーザは、あるネームスペースの識別子に関連づけられたストレージスペースをアクセスし、別のユーザは、別のネームスペースの識別子に関連づけられた別のストレージスペースをアクセスする。データセンタ事業者は、個々のネームスペースの合計消去回数、つまり個々のネームスペースの消耗度を、個々のストレージスペースの使用料(レンタル料)に反映させても良い。例えば、合計消去回数が非常に多いネームスペースを使用しているユーザについては、このネームスペースの容量(このネームスペースのために確保されたブロックの数に相当する容量)から決定される基本使用料に加え、消耗度に応じた追加料金を課金してもよい。
次に、コントローラ4内の他のコンポーネントについて説明する。
NANDインタフェース13は、CPU12の制御の下、NANDメモリ5を制御するように構成されたNANDコントローラである。NANDインタフェース13は、複数のチャンネルを有していてもよい。各チャンネルには、幾つかのNANDメモリチップが接続される。コントローラ4は、NANDインタフェース13の異なるチャンネルに接続された複数のNANDメモリチップを並列にアクセスすることができる。
DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御するように構成されたDRAMコントローラである。
DRAM6の記憶領域の一部は、NANDメモリ5にライトすべきデータを一時的に格納するためのライトバッファ(WB)31として利用されてもよい。また、DRAM6の記憶領域は、データコピー動作中にコピー元ブロックからリードされたデータを一時的に格納するためのコピーバッファ32として利用されてもよい。また、DRAM6の記憶領域は、様々な管理テーブルを含むシステム管理情報33の格納のために用いられてもよい。システム管理情報33は、SSD3の電源のオン時にNANDメモリ5からDRAM6にロードされてもよい。SSD3の電源がオフされるべき時、更新されたシステム管理情報33は、NANDメモリ5に保存されてもよい。システム管理情報33は、NANDメモリ5のブロック構造(または仮想ブロック構造)と、消去回数のようなNANDメモリ5の使用履歴情報とを含んでいてもよい。
次に、ホスト2の構成について説明する。
ホスト2は、様々なプログラムを実行可能な情報処理装置である。ホスト2によって実行されるプログラムには、アプリケーションソフトウェアレイヤ41、オペレーティングシステム(OS)42、ファイルシステム43、および上述のFTL44が含まれる。
一般に知られているように、オペレーティングシステム(OS)42は、ホスト2全体を管理し、ホスト2内のハードウェアを制御し、アプリケーションおよび各クライアント端末51が、ホスト2のハードウェアおよびSSD3を使用することを可能にするための制御を実行するように構成されたソフトウェアである。
ファイルシステム43は、ファイルの操作(作成、保存、更新、削除等)のための制御を行うために使用される。例えば、ZFS、Btrfs、XFS、ext4、NTFSなどがファイルシステム43として使用されても良い。あるいは、ファイルオブジェクトシステム、Key Value Store Systemがファイルシステム43として使用されても良い。
様々なアプリケーションソフトウェアスレッドがアプリケーションソフトウェアレイヤ41上で走る。アプリケーションソフトウェアスレッドの例としては、クライアントソフトウェア、データベースソフトウェア、仮想マシン等がある。
アプリケーションソフトウェアレイヤ41がリード要求、ライト要求、消去要求のようなリクエストをSSD3に送出することが必要な時、アプリケーションソフトウェアレイヤ41は、OS42にそのリクエストを送信する。OS42はそのリクエストをファイルシステム43を介してFTL44に送信する。FTL44は、そのリクエストを、コマンド(リードコマンド、ライトコマンド、消去コマンド、等)にトランスレートする。この場合、FTL44は、リクエストに含まれるLBAをNANDメモリ5の物理アドレスに変換する論理物理アドレス変換を行う。複数のネームスペースそれぞれに対応する複数のFTL44が実行されてもよい。この場合、論理アドレス(LBA)それぞれと物理アドレスそれぞれとの間のマッピングの管理は、ネームスペース毎に異なるLUT45を使用して実行されてもよい。
FTL44は、コマンドを、SSD3に送出する。SSD3からのレスポンスが受信された際、FTL44は、そのレスポンスをファイルシステム43を介してOS42に送出する。OS42は、そのレスポンスをアプリケーションソフトウェアレイヤ41に送出する。
[ホストソフトウェア]
図2は、ホスト2上で実行されるソフトウェア(ホストソフトウェア)の例を示す。
あるアプリケーションは複数のファイルを取り扱う場合がある。個々のファイルに関しては、データを書き込むためのライトアクセスはシーケンシャルライトによって実行される。もしこれらファイルそれぞれに対応するシーケンシャルライトが一つのFTL44によってマージされたならば、これらシーケンシャルライトそれぞれの書き込み先LBAが混ざり合う。このため、マージされたシーケンシャルライトは、ランダムライトとしてSSD3に送られる結果となり得る。ランダムライトの増加はSSD3のライトアンプリフィケーションを増加させる要因となり得る。
図2に示されているように、ホスト2においては、これらファイルそれぞれに対応する幾つかのFTL44が同時に実行され得る。
図2の例では、4つのFTL44A、FTL44B、FTL44C、FTL44Dが実行される場合が想定されている。これらFTL44A、FTL44B、FTL44C、FTL44Dは、互いに独立して動作することができる。例えば、FTL44Aは、NSID#1に対応するLBAそれぞれと物理アドレスそれぞれとの間のマッピングを管理し、FTL44Bは、NSID#2に対応するLBAそれぞれと物理アドレスそれぞれとの間のマッピングを管理し、FTL44Cは、NSID#3に対応するLBAそれぞれと物理アドレスそれぞれとの間のマッピングを管理し、FTL44Dは、NSID#4に対応するLBAそれぞれと物理アドレスそれぞれとの間のマッピングを管理してもよい。
NSID#1に関連付けられたデータ(例えば、ファイル“A”のデータ)を書き込むための幾つかのライト要求は、ファイルシステム43Aを介してFTL44Aに送られる。このFTL44Aは、これら幾つかのライト要求に対応する幾つかのライトコマンドをSSD3に送出する。SSD3は、これらライトコマンドによって指定されたデータを、NSID#1に割り当てられたブロックに書き込むことができる。これにより、あるLBA範囲に関連づけられたファイル“A”のデータを、NSID#1に割り当てられたブロックにシーケンシャルに書き込むことができる。
同様に、NSID#2に関連付けられたデータ(例えば、ファイル“B”のデータ)を書き込むための幾つかのライト要求は、ファイルシステム43Bを介してFTL44Bに送られる。このFTL44Bは、これら幾つかのライト要求に対応する幾つかのライトコマンドをSSD3に送出する。SSD3は、これらライトコマンドによって指定されたデータを、NSID#2用に割り当てられたブロックに書き込むことができる。
したがって、ファイル“A”のデータを書き込むためのシーケンシャルライトとファイル“B”のデータを書き込むためのシーケンシャルライトとがマージされることを防止できるので、SSD3のライトアンプリフィケーションの増加を抑制することができる。
[チャンネル]
図3は、NANDインタフェース13と複数のNANDメモリチップとの関係を示す。
図3においては、NANDインタフェース13が有する8個のチャンネル(Ch#1〜Ch#8)の各々に4つのNANDメモリチップが接続されている場合が例示されている。コントローラ4の制御の下、NANDインタフェース13は、8個のチャンネル(Ch#1〜Ch#8)に接続された8個のNANDメモリチップを同時駆動することによって、8個のブロックに対するリード、ライト、消去を並列(同時)に実行することができる。
[物理ブロックと仮想ブロック]
図4は、SSD3によって管理される、物理NANDアクセス管理API21用のブロック群と仮想NANDアクセス管理API22用のブロック群とを示す。
ここでは、NANDインタフェース13が4個のチャンネル(Ch.A〜Ch.D)を有する場合が想定されている。
Ch.A〜Ch.Bの各々には、一つ以上のNANDメモリチップが接続されている。各チャンネルに接続された一つ以上のNANDメモリチップは、複数個のブロック、例えば、111個のブロック(ブロックアドレス0〜110)を含む。
SSD3のコントローラ4は、NANDメモリ5内の複数のブロック(物理ブロック)を、仮想NANDアクセス管理API22用のブロックのグループ#Xと物理NANDアクセス管理API21用のブロックのグループ#Yとに分類する。ブロックのグループ#Xは、チャンネル当たり、例えば101個のブロック(ブロックアドレス0〜100)を含んでもよい。ブロックのグループ#Yは、チャンネル当たり、例えば10個のブロック(ブロックアドレス101〜110)を含んでもよい。
グループ#X内のブロックは、複数の仮想ブロックとして編成される。複数の仮想ブロックの各々は、複数個のブロックを含む。複数の仮想ブロックの各々は、並列アクセス可能な複数のブロックの組み合わせを含んでもよい。
より詳しくは、一つの仮想ブロックは、Ch.Aを介してアクセス可能なブロックと、Ch.Bを介してアクセス可能なブロックと、Ch.Cを介してアクセス可能なブロックと、Ch.Dを介してアクセス可能なブロックとを含んでもよい。図5に示されているように、NANDメモリチップ#0〜#3がチャンネルCh.A〜Ch.Dに接続されている場合には、一つの仮想ブロックは、チップ#0内の一つのブロックと、チップ#1内の一つのブロックと、チップ#2内の一つのブロックと、チップ#3内の一つのブロックとを含んでもよい。この仮想ブロックへのデータの書き込み順序は、チップ#0内のブロック内のページP0、チップ#1内のブロック内のページP0、チップ#2内のブロック内のページP0、チップ#3内のブロック内のページP0、チップ#0内のブロック内のページP1、チップ#1内のブロック内のページP1、チップ#2内のブロック内のページP1、チップ#3内のブロック内のページP1…となる。
64Kバイトのライトデータがライトされるケースにおいては、このライトデータを構成する各16Kバイトの4つのデータ部を、例えば、チップ#0内のブロック内のページP0、チップ#1内のブロック内のページP0、チップ#2内のブロック内のページP0、チップ#3内のブロック内のページP0に並列に書き込むことができる。
図4に示されるグループ#Y内のブロックそれぞれは、物理NANDアクセス管理API21用のブロック、つまりブロック単独でアクセスされるブロック(物理ブロック)として使用される。
このように、NANDメモリ5内の複数のブロックは、仮想NANDアクセス管理API22用のブロックのグループ#Xと物理NANDアクセス管理API21用のブロックのグループ#Yとに分類されているので、同じ一つのブロックが、物理NANDアクセス管理API21用のブロックと仮想NANDアクセス管理API22用のブロックとに共用されてしまうことを防止することができる。つまり、物理NANDアクセス管理API21用の各ブロックは、どの仮想ブロックにも属さない。この結果、物理NANDアクセス管理API21用のある特定のブロックが、仮想ブロックに向けられたアクセスによって誤ってアクセス(リード、ライト、消去)されてしまうことを防止できるので、安全性を高めることができる。
[物理ブロック情報、仮想ブロック情報、ネームスペース情報]
図6は、SSD3内に維持される消去回数管理テーブル33Aを示す。
消去回数管理テーブル33Aは、グループ#Y内のブロック(物理ブロック)それぞれの消去回数を管理する。例えば、物理NANDアクセス管理API21用の特定のブロック(例えばブロックアドレス0)がホスト2からのコマンド(消去コマンド、ブロック割り当て・消去コマンド)によって消去された時、SSD3内のコントローラ4は、この特定のブロック(例えばブロックアドレス0)の消去回数を+1インクリメントする。
図7は、SSD3内に維持される別の消去回数管理テーブル33Bを示す。
消去回数管理テーブル33Bは、グループ#X内の仮想ブロックそれぞれの消去回数を管理する。例えば、仮想NANDアクセス管理API22用の特定の仮想ブロック(例えば仮想ブロックアドレス0)がホスト2からのコマンド(消去コマンド、仮想ブロック割り当て・消去コマンド)によって消去された時、SSD3内のコントローラ4は、この特定の仮想ブロック(例えば仮想ブロックアドレス0)の消去回数を+1インクリメントする。仮想NANDアクセス管理API22においては、一つの仮想ブロックに含まれる複数個のブロックが同時に消去される。したがって、消去回数は仮想ブロックの単位で管理される。
図8は、SSD3内に維持されるさらに別の消去回数管理テーブル33Cを示す。
消去回数管理テーブル33Cは、ネームスペースID(NSID)それぞれに対応する合計消去回数を管理する。あるNSIDの合計消去回数は、このNSIDのネームスペース(領域)に対して実行された消去動作の累積値であり、合計消去回数は、このNSIDのネームスペースに割り当てられたブロック中のいずれかに対して消去動作が実行される度に1だけ増やされる。このNSIDに割り当てられたブロックは、物理NANDアクセス管理API21においては物理ブロックであり、仮想NANDアクセス管理API22においては仮想ブロックである。
例えば、特定のブロック(例えばブロックアドレス0)がホスト2からのコマンド(消去コマンド、またはブロック割り当て・消去コマンド)によって消去された時、SSD3内のコントローラ4は、この特定のブロック(例えばブロックアドレス0)が割り当てられているNSIDを特定し、特定されたNSIDの消去回数を+1インクリメントする。同様に、特定の仮想ブロック(例えば仮想ブロックアドレス0)がホスト2からのコマンド(消去コマンド、または仮想ブロック割り当て・消去コマンド)によって消去された時、SSD3内のコントローラ4は、この特定の仮想ブロック(例えば仮想ブロックアドレス0)が割り当てられているNSIDを特定し、特定されたNSIDの消去回数を+1インクリメントする。
図9は、SSD3内に維持される物理ブロック構造情報テーブル33Dを示す。
物理ブロック構造情報テーブル33Dは、NANDメモリ5内の各ブロック(物理ブロック)の構造を示す情報である。物理ブロック構造情報テーブル33Dは、ブロックサイズ、ページサイズ、推定書き込み時間、消去時間、等を含む。ブロックサイズは、一つのブロックのサイズ(容量)を示す。ページサイズは、一つのページのサイズ(容量)を示す。推定書き込み時間は、データをページバッファからメモリセルにプログラムするのに要する時間(tProg)を示す。
図10は、SSD3内に維持される仮想ブロック構造情報テーブル33Eを示す。
仮想ブロック構造情報テーブル33Eは、各仮想ブロックの構造を示す情報である。仮想ブロック構造情報テーブル33Eは、等価的なブロックサイズ、ページサイズ、推定書き込み時間、消去時間、一つの仮想ブロックに含まれるブロックの数等を含む。等価的なブロックサイズは、一つの仮想ブロックに含まれるブロックそれぞれの容量の合計であってもよい。
図11は、SSD3内に維持される、物理NANDアクセス管理API21用のネームスペース情報テーブル33Fを示す。
ネームスペース情報テーブル33Fは、(1)存在するネームスペースの総数、(2)ネームスペース毎のブロック割り当て数、(3)ネームスペース毎のブロックアドレスのリスト、(4)ネームスペース毎の合計消去回数を管理する。
例えば、NSID#1に関しては、NSID#1に対応するブロック割り当て数は、NSID#1用に確保されたブロック(物理ブロック)の総数を示してもよい。NSID#1に対応するブロックアドレスのリストは、NSID#1に割り当てられて実際に使用されているブロックそれぞれのブロックアドレスを示す。
図12は、SSD3内に維持される、仮想NANDアクセス管理API22用のネームスペース情報テーブル33Gを示す。
ネームスペース情報テーブル33Gは、(1)存在するネームスペースの総数、(2)ネームスペース毎の仮想ブロック割り当て数、(3)ネームスペース毎の仮想ブロックアドレスのリスト、(4)ネームスペース毎の合計消去回数を管理する。
例えば、NSID#1に関しては、NSID#1に対応する仮想ブロック割り当て数は、NSID#1用に確保された仮想ブロックの総数を示してもよい。NSID#1に対応する仮想ブロックアドレスのリストは、NSID#1に割り当てられて実際に使用されている仮想ブロックそれぞれの仮想ブロックアドレスを示す。
[仮想ブロック管理]
図13は、SSD3内の複数の仮想ブロックとこれら仮想ブロックを構成するブロック(物理ブロック)それぞれのブロックアドレスとの関係を示す。
各仮想ブロックに属する複数個のブロック(物理ブロック)それぞれのブロックアドレスの組み合わせは、各仮想ブロックの仮想ブロックアドレスから数学的規則に基づいて一意に決定される。仮想ブロックアドレスから数学的規則に基づいて一意にブロックアドレスの組み合わせを決定するという方法を使用することにより、仮想ブロック毎にこの仮想ブロックに属するブロックアドレスを保持する専用の管理テーブルを使用することなく、各仮想ブロックアドレスのみからこの仮想ブロックに属するブロックアドレスの組み合わせを容易に特定することができる。
数学的規則としては、仮想ブロックアドレスから一意にブロックアドレスの組み合わせを決定することが可能な任意の規則を使用し得る。
図13においては、Ch.Aに関連付けられたブロックアドレス0〜100については昇順に仮想ブロックアドレスVB0〜VB100に割り当て、Ch.Bに関連付けられたブロックアドレス0〜100については降順に仮想ブロックアドレスVB0〜VB100に割り当て、Ch.Cに関連付けられたブロックアドレス0〜100については昇順に仮想ブロックアドレスVB0〜VB100に割り当て、Ch.Dに関連付けられたブロックアドレス0〜100については降順に仮想ブロックアドレスVB0〜VB100に割り当てるという数学的規則が適用された場合が例示されている。
この場合、例えば、仮想ブロックアドレスVB0を有する仮想ブロックに属する複数個のブロックそれぞれのブロックアドレスの組み合わせは、Ch.Aのブロックアドレス0、Ch.Bのブロックアドレス100、Ch.Cのブロックアドレス0、およびCh.Dのブロックアドレス100として決定される。同様に、仮想ブロックアドレスVB1の仮想ブロックに属する複数個のブロックそれぞれのブロックアドレスの組み合わせは、Ch.Aのブロックアドレス1、Ch.Bのブロックアドレス99、Ch.Cのブロックアドレス1、およびCh.Dのブロックアドレス99として決定される。
適用可能な数学的規則の例はこれに限定されず、例えば、仮想ブロックアドレスの値と同じ値のブロックアドレスを各チャンネルから選択するという数学的規則を適用してもよい。この場合、例えば、仮想ブロックアドレスVB0の仮想ブロックに属する複数個のブロックそれぞれのブロックアドレスの組み合わせは、Ch.Aのブロックアドレス0、Ch.Bのブロックアドレス0、Ch.Cのブロックアドレス0、およびCh.Dのブロックアドレス0として決定される。同様に、仮想ブロックアドレスVB1の仮想ブロックに属する複数個のブロックそれぞれのブロックアドレスの組み合わせは、Ch.Aのブロックアドレス1、Ch.Bのブロックアドレス1、Ch.Cのブロックアドレス1、およびCh.Dのブロックアドレス1として決定される。
ホスト2は、個々の仮想ブロックを指定可能な物理アドレス(仮想ブロックアドレス)のみを認識すれば良く、各仮想ブロックに含まれるブロックそれぞれのブロックアドレス自体を認識する必要は無い。
例えば、仮想ブロックアドレスVB0の仮想ブロックにおいては、VB0−0は、仮想ブロックアドレス(VB0)とこの仮想ブロック内の最初のブロックのブロック番号(0)との組合わせを示す。ホスト2によってVB0−0が指定された場合には、SSD3は、VB0−0をCh.Aのブロックアドレス0に変換し、このCh.Aのブロックアドレス0をアクセスすることができる。
[仮想ブロックのバッドブロック管理]
図14は、SSD3によって実行される不良ブロック(バッドブロック)置き換え動作を示す。
例えば、仮想ブロック(仮想ブロックアドレスVB2)内のチャンネルCh.Cのブロック(VB2−2)が使用できない不良ブロック(バッドブロック)として指定された場合、SSD3のコントローラ4は、数学的規則に基づいて、VB2−2から、チャンネルCh.Cのブロックアドレス(=2)を特定することができる。そして、コントローラ4は、このブロックアドレス(=2)のブロックをバッドブロックリストに登録する。そして、コントローラ4は、ブロックアドレス(=2)のブロックを、仮想ブロック(仮想ブロックアドレスVB2)内の他の全てのブロック(ここでは、Ch.Aのブロックアドレス2のブロック、Ch.Bのブロックアドレス98のブロック、Ch.Dのブロックアドレス98のブロック)と並列アクセス可能な別のブロックに置換する。例えば、Ch.Cのブロック群の内で、物理NANDアクセスおよび仮想NANDアクセスのどちらにも現在使用されていないブロック、例えば、Ch.Cのブロックアドレス102のブロックが、この別のブロックとして選択され得る。
コントローラ4は、仮想ブロックアドレスVB2のチャンネルCh.Cのブロックアドレス2がCh.Cの別のブロックアドレス102に置換されたことだけを管理しておけばよい。
[バッドブロック化コマンド]
図15は、SSD3に適用される、物理NANDアクセス管理API21用のバッドブロック化コマンドを示す。
物理NANDアクセス管理API21用のバッドブロック化コマンドは、SSD3に対して、特定のブロックをバッドブロックとすべきことを要求する。ホスト2は、リードエラーの回数等に基づいて、バッドブロック化すべきブロックを特定してもよい。バッドブロック化コマンドは、以下の入力パラメータを含む。
(1)ブロックアドレス: このブロックアドレスは、バッドブロック化すべきブロック(物理ブロック)を指定する。
バッドブロック化コマンドは、以下の出力パラメータを含む。
(1)終了ステータス: バッドブロック化コマンドの成功またはエラーを示す終了ステータスがホスト2に返される。
図16は、SSD3に適用される、仮想NANDアクセス管理API22用のバッドブロック化コマンドを示す。
仮想NANDアクセス管理API22用のバッドブロック化コマンドは、SSD3に対して、特定の仮想ブロック内ブロックをバッドブロックとすべきことを要求する。ホスト2は、リードエラーの回数等に基づいて、特定の仮想ブロック内の何番目のブロックをバッドブロック化すべきかを決定してもよい。バッドブロック化コマンドは、以下の入力パラメータを含む。
(1)仮想ブロックアドレスと仮想ブロック内ブロック番号
仮想ブロックアドレスと仮想ブロック内ブロック番号は、どの仮想ブロック内の何番目のブロックをバッドブロック化すべきかを指定する。仮想ブロック内ブロック番号は、チャンネル番号を指定する値であってもよい。
バッドブロック化コマンドは、以下の出力パラメータを含む。
(1)終了ステータス
バッドブロック化コマンドの成功またはエラーを示す終了ステータスがホスト2に返される。
[バッドブロック化処理の手順]
図17のフローチャートは、SSD3によって実行される、仮想NANDアクセス管理API22用の処理とバッドブロック化処理の手順を示す。
SSD3のコントローラ4は、NANDメモリ5内のブロック群を2つのグループ(グループ#X、グループ#Y)に分類し(ステップS1)、グループ#Xのブロック群を複数の仮想ブロックとして編成する(ステップS2)。
ステップS2では、コントローラ4は、数学的規則に基づいて、各仮想ブロックに属するべきブロックアドレスの組み合わせを決定する。もし上述のプライマリー欠陥リストによってある仮想ブロック内のブロックがバッドブロックとして指定されているならば、コントローラ4は、このバッドブロックと同じチャンネルに接続されている別のブロックをグループ#Yから選択し、このバッドブロックを、選択したブロックで置き換えても良い。グループ#Y内の残りのブロックが、物理NANDアクセス管理API21用のブロックとして使用される。
そして、コントローラ4は、ホスト2からの、ある仮想ブロックを指定する物理アドレス(仮想ブロックアドレス、仮想ブロック内ブロック番号、ページアドレス)を含むリード、ライトまたは消去のコマンドの受信に応答して、この仮想ブロックに対するリード動作、ライト動作、または消去動作を実行する(ステップS3)。ステップS3では、コントローラ4は、数学的規則に基づいて物理アドレス(仮想ブロックアドレス、仮想ブロック内ブロック番号)からアクセス対象の仮想ブロック内のアクセス対象ブロックのブロックアドレスを決定し、このブロックに対するリード動作、ライト動作、または消去動作を実行する。
コントローラ4がホスト2からのバッドブロック化コマンドを受信したならば、コントローラ4は、バッドブロック化コマンドが仮想NANDアクセス管理API22用のバッドブロック化コマンドまたは物理NANDアクセス管理API21用のバッドブロック化コマンドのいずれであるかを判定する(ステップS4、S5)。仮想NANDアクセス管理API22用のバッドブロック化コマンドと物理NANDアクセス管理API21用のバッドブロック化コマンドとが異なるオペレーションコードを有している場合には、この判定はオペレーションコードに基づいて実行される。仮想NANDアクセス管理API22用のバッドブロック化コマンドと物理NANDアクセス管理API21用のバッドブロック化コマンドとが同じオペレーションコードを有する場合には、この判定は、バッドブロック化コマンドに含まれるアドレスの種類(ブロックアドレス/仮想ブロックアドレスと仮想ブロック内ブロック番号)に基づいて行われてもよい。
バッドブロック化コマンドが物理NANDアクセス管理API21用のバッドブロック化コマンドであるならば(ステップS5のYES)、コントローラ4は、バッドブロック化コマンドによって指定されるブロックアドレスのブロックをバッドブロックリストに登録して、このブロックアドレスのブロックをバッドブロックとして管理する(ステップS6)。このバッドブロックを別のブロックに置き換える処理は実行されない。
バッドブロック化コマンドが仮想NANDアクセス管理API22用のバッドブロック化コマンドであるならば(ステップS4のYES)、コントローラ4は、ステップS2で使用された数学的規則に基づいて、仮想ブロックアドレスと仮想ブロック内ブロック番号から、バッドブロック化すべきブロックのブロックアドレスを特定する(ステップS7)。
コントローラ4は、特定されたブロックアドレスのブロックをバッドブロックリストに登録して、この特定されたブロックアドレスのブロックをバッドブロックとして管理する(ステップS8)。
そして、コントローラ4は、この特定されたブロックアドレスのブロック(バッドブロック)と同じチャンネルに接続されているブロックの中から、物理NANDアクセスおよび仮想NANDアクセスのどちらにも現在使用されていないブロックを選択し(ステップS9)、この特定されたブロックアドレスのブロック(バッドブロック)を、選択されたブロックで置き換える(ステップS10)。
[物理NANDアクセスおよび仮想NANDアクセスのための処理シーケンス]
図18は、SSD3とホスト2とによって実行される、物理NANDアクセスおよび仮想NANDアクセスのための処理シーケンスを示す。
ホスト2が物理NANDアクセス管理API21を使用してSSD3をアクセスすることを望む場合、ホスト2は、一つのブロックの割り当てをSSD3に要求してもよい。この要求は、上述のブロック割り当て・消去コマンドであってもよい。SSD3のコントローラ4は、グループ#Y内のブロック中から有効データを含まないブロック(現在使用されていないブロック)を選択し、この選択したブロックをホスト2に割り当て、この割り当てたブロックの物理アドレス(ブロックアドレス)をホスト2に通知する。
ホスト2が仮想NANDアクセス管理API22を使用してSSD3をアクセスすることを望む場合、ホスト2は、一つの仮想ブロックの割り当てをSSD3に要求してもよい。この要求は、上述の仮想ブロック割り当て・消去コマンドであってもよい。SSD3のコントローラ4は、複数の仮想ブロックから有効データを含まない仮想ブロック(現在使用されていない仮想ブロック)を選択し、この選択した仮想ブロックをホスト2に割り当て、この割り当てた仮想ブロックの物理アドレス(仮想ブロックアドレス)をホスト2に通知する。
ホスト2は、通知されたブロックアドレスを含むリード、ライトまたは消去のコマンド、つまり物理NANDアクセス管理API21用のリード、ライトまたは消去のコマンドを、SSD3に送信する。ブロックアドレスを含むリード、ライトまたは消去のコマンド、つまり物理NANDアクセス管理API21用のリード、ライトまたは消去のコマンド、の受信に応答して、コントローラ4は、このブロックアドレスによって指定される特定の単一のブロックに対するリード動作、ライト動作、または消去動作を実行する(ステップS11)。
ホスト2は、通知された仮想ブロックアドレスを含むリード、ライトまたは消去のコマンドをSSD3に送信する。仮想ブロックアドレスを含むリード、ライトまたは消去のコマンド、つまり仮想NANDアクセス管理API22用のリード、ライトまたは消去のコマンド、の受信に応答して、コントローラ4は、この仮想ブロックアドレスによって指定される特定の仮想ブロックに含まれるブロックの纏まりに対するリード動作、ライト動作、または消去動作を実行する(ステップS12)。
[ライト処理]
図19は、SSD3とホスト2とによって実行される、単一の物理ブロックをアクセスする物理NANDアクセスのためのライト処理の処理シーケンスを示す。
ホスト2は、物理NANDアクセス管理API21用のライトコマンドをSSD3に送信する。このライトコマンドは、データがライトされるべきブロックを指定するブロックアドレスを含む。上述の直接アドレス指定モードの場合は、ライトコマンドは、ブロックアドレスとページアドレスの双方を含む。物理NANDアクセス管理API21用のライトコマンドの受信に応答して、SSD3のコントローラ4は、このライトコマンドによって指定されるデータを、ライトコマンド内のブロックアドレスによって指定されるブロック内の書き込み対象ページに書き込む(ステップS13)。直接アドレス指定モードの場合は、書き込み対象のページはライトコマンド内のページアドレスによって指定される。上述の自動アドレス生成モードの場合は、書き込み対象のページは、コントローラ4によって自動生成されるページアドレスによって指定される。
そして、コントローラ4は、ライトコマンドのコマンド完了レスポンスをホスト2に送信する。
図20は、SSD3とホスト2とによって実行される、複数の物理ブロックを含む仮想ブロックをアクセスする仮想NANDアクセスのためのライト処理の処理シーケンスを示す。
ホスト2は、仮想NANDアクセス管理API22用のライトコマンドをSSD3に送信する。このライトコマンドは、データがライトされるべき仮想ブロックを指定する仮想ブロックアドレスを含む。上述の直接アドレス指定モードの場合は、ライトコマンドは、仮想ブロックアドレスとページアドレスの双方を含む。上述したように、このライトコマンドは、仮想ブロックアドレスと、仮想ブロック内ブロック番号と、ページアドレスとを含んでもよい。
仮想NANDアクセス管理API22用のライトコマンドの受信に応答して、SSD3のコントローラ4は、このライトコマンドによって指定されるデータを、ライトコマンド内の仮想ブロックアドレスによって指定される仮想ブロック内の書き込み対象ページに書き込む(ステップS14)。直接アドレス指定モードの場合は、書き込み対象のページはライトコマンド内のページアドレスによって指定される。上述の自動アドレス生成モードの場合は、書き込み対象のページは、コントローラ4によって自動生成されるページアドレスによって指定される。また、上述の自動アドレス生成モードでは、仮想ブロック内ブロック番号と、ページアドレスの双方が自動生成されてもよい。
そして、コントローラ4は、ライトコマンドのコマンド完了レスポンスをホスト2に送信する。
[リード処理]
図21は、SSD3とホスト2とによって実行される、物理NANDアクセスのためのリード処理の処理シーケンスを示す。
ホスト2は、物理NANDアクセス管理API21用のリードコマンドをSSD3に送信する。このリードコマンドは、ブロックアドレスとページアドレスとを含む。物理NANDアクセス管理API21用のリードコマンドの受信に応答して、SSD3のコントローラ4は、リードコマンド内のブロックアドレスおよびページアドレスによって指定されるブロック内のリード対象ページからデータをリードする(ステップS15)。そして、コントローラ4は、リードされたデータと、リードコマンドのコマンド完了レスポンスとをホスト2に送信する。
図22は、SSD3とホスト2とによって実行される、仮想NANDアクセスのためのリード処理の処理シーケンスを示す。
ホスト2は、仮想NANDアクセス管理API22用のリードコマンドをSSD3に送信する。このリードコマンドは、仮想ブロックアドレスとページアドレスとを含む。リードコマンドは、仮想ブロックアドレスと、仮想ブロック内ブロック番号と、ページアドレスとを含んでもよい。
仮想NANDアクセス管理API22用のリードコマンドの受信に応答して、SSD3のコントローラ4は、リードコマンド内の仮想ブロックアドレス、仮想ブロック内ブロック番号、およびページアドレスによって指定される仮想ブロック内のリード対象ページからデータをリードする(ステップS16)。そして、コントローラ4は、リードされたデータと、リードコマンドのコマンド完了レスポンスとをホスト2に送信する。
[消去処理]
図23は、SSD3とホスト2とによって実行される、物理NANDアクセスのための消去処理の処理シーケンスを示す。
ホスト2は、物理NANDアクセス管理API21用の消去コマンドをSSD3に送信する。この消去コマンドは、ブロックアドレスを含む。物理NANDアクセス管理API21用の消去コマンドの受信に応答して、SSD3のコントローラ4は、消去コマンド内のブロックアドレスによって指定されるブロックを消去して、このブロック内の全てのページを消去状態にする(ステップS17)。そして、コントローラ4は、消去コマンドのコマンド完了レスポンスをホスト2に送信する。
図24は、SSD3とホスト2とによって実行される、仮想NANDアクセスのための消去処理の処理シーケンスを示す。
ホスト2は、仮想NANDアクセス管理API22用の消去コマンドをSSD3に送信する。この消去コマンドは、仮想ブロックアドレスを含む。仮想NANDアクセス管理API22用の消去コマンドの受信に応答して、SSD3のコントローラ4は、消去コマンド内の仮想ブロックアドレスによって指定される仮想ブロック内の複数個のブロックを同時に消去して、これらブロック内の全てのページを消去状態にする(ステップS18)。そして、コントローラ4は、消去コマンドのコマンド完了レスポンスをホスト2に送信する。
[優先度管理]
図25は、コントローラ4によるコマンド優先度の管理動作を示す。
ホスト2から受信される全てのコマンドには、それらコマンドの実行の優先順位(優先クラス)を示す値(優先度)がホスト2によって付与されてもよい。各コマンドは、その優先度を示す入力パラメータを有していてもよい。
優先順位(優先クラス)の種類の数は2以上の任意の数であってもよい。優先クラスの種類には、例えば、最も高い優先度を示す「High」、最も低い優先度を示す「Low」、中間の優先度を示す「Medium」が含まれていてもよい。
コントローラ4によって実行される優先度管理においては、優先度の高いコマンドは優先度の低いコマンドよりも先に実行されることができる。同一優先度を有するコマンド間の実行順序は、先入れ先出し方式によって決定されてもよい。消去コマンドのようにコマンドの処理の完了までに多くの時間がかかるコマンドについては、そのコマンド(例えば消去コマンド)の実行を中断し、優先順位の高いコマンドを先に実行し、優先順位の高いコマンドの完了後に、中断されたコマンド(例えば消去コマンド)の処理を続行してもよい。
優先度管理のために、NANDチップ毎に優先度付キュー61、62、63を設けてもよい。どのコマンドが実行されたかを識別できるようにするために全てのコマンドと全てのコマンド完了レスポンスにキューIDが付与されてもよい。ホスト2が全てのコマンドにキューIDを付与してもよい。
「High」の優先度が付与された各コマンドは、優先度付キュー61に格納(キューイング)される。「Medium」の優先度が付与された各コマンドは、優先度付キュー62に格納される。「Low」の優先度が付与された各コマンドは、優先度付キュー63に格納される。優先度付キュー61からのコマンドの取り出しは、優先度付キュー62からのコマンドの取り出しおよび優先度付キュー63からのコマンドの取り出しよりも優先的に実行される。優先度付キュー62からのコマンドの取り出しは、優先度付キュー63からのコマンドの取り出しよりも優先的に実行される。
[ブロック割り当て・消去コマンド]
図26を参照して、物理NANDアクセス管理API21用のブロック割り当て・消去コマンドと、仮想NANDアクセス管理API22用のブロック割り当て・消去コマンドとを説明する。
物理NANDアクセス管理API21用のブロック割り当て・消去コマンドは、以下の入力パラメータを含む。
(1)ブロックタイプ=ブロック: ブロックタイプは、割り当てられるべきブロックのタイプを示す。物理NANDアクセス管理API21用のブロック割り当て・消去コマンドのブロックタイプは、ブロック(物理ブロック)である。フリーブロックから一つのブロックがホスト2用に割り当てられ、且つこのブロックが自動消去される。
(2)処理優先度: 処理優先度はこのコマンドの優先度を示す。
(3)NSID(オプショナル): NSIDはブロックが割り当てられるべきネームスペースのIDを示す。
物理NANDアクセス管理API21用のブロック割り当て・消去コマンドは、以下の出力パラメータを含む。
(1)終了ステータス: ブロック割り当て・消去コマンドの成功またはエラーを示す終了ステータスがホスト2に返される。
(2)ブロックアドレス: 割り当てられたブロックのブロックアドレスがホスト2に返される。
(3)残りブロック数: NSIDが指定された場合にのみ、このNSID用に確保された残りブロックの数がホスト2に返される。
仮想NANDアクセス管理API22用のブロック割り当て・消去コマンド(「仮想ブロック割り当て・消去コマンド」とも云う)は、以下の入力パラメータを含む。
(1)ブロックタイプ=仮想ブロック: 仮想NANDアクセス管理API22用のブロック割り当て・消去コマンドのブロックタイプは、仮想ブロックである。フリー仮想ブロックから一つの仮想ブロックがホスト2用に割り当てられ、且つこの仮想ブロック内の複数個のブロックが自動消去される。
(2)処理優先度: 処理優先度はこのコマンドの優先度を示す。
(3)NSID(オプショナル): NSIDは仮想ブロックが割り当てられるべきネームスペースのIDを示す。
仮想NANDアクセス管理API22用のブロック割り当て・消去コマンドは、以下の出力パラメータを含む。
(1)終了ステータス: ブロック割り当て・消去コマンドの成功またはエラーを示す終了ステータスがホスト2に返される。
(2)仮想ブロックアドレス: 割り当てられた仮想ブロックの仮想ブロックアドレスがホスト2に返される。
(3)残りブロック数: NSIDが指定された場合にのみ、このNSID用に確保された残り仮想ブロックの数がホスト2に返される。
[物理ブロック管理と仮想ブロック管理]
図27は、SSD3のコントローラ4によって管理される使用中ブロックリスト71A、フリーブロックリスト71B、使用中仮想ブロックリスト72A、およびフリー仮想ブロックリスト72Bを示す。
使用中ブロックリスト71Aは、グループ#Yのブロック群の中で有効データを保持しているブロック(物理ブロック)のリスト、つまりホスト2によって使用されている使用中ブロックのリストを示す。フリーブロックリスト71Bは、グループ#Yのブロック群の中で有効データを保持していないブロック(物理ブロック)のリスト、つまりホスト2によって使用されていないフリーブロックのリストを示す。
使用中仮想ブロックリスト72Aは、グループ#Xの仮想ブロック群の中で有効データを保持している仮想ブロックのリスト、つまりホスト2によって使用されている使用中仮想ブロックのリストを示す。フリー仮想ブロックリスト72Bは、グループ#Xの仮想ブロック群の中で有効データを保持していない仮想ブロックのリスト、つまりホスト2によって使用されていないフリー仮想ブロックのリストを示す。
[ブロック割り当て・消去処理]
図28は、SSD3とホスト2とによって実行されるブロック割り当て・消去処理の処理シーケンスを示す。
最初に、物理NANDアクセス管理API21用のブロック割り当て・消去処理について説明する。
ホスト2のために現在割り当てられているブロック(物理ブロック)がホスト2からのデータで満たされた場合、ホスト2は、物理NANDアクセス管理API21用のブロック割り当て・消去コマンドをSSD3に送信してもよい。
SSD3のコントローラ4がこのブロック割り当て・消去コマンドをホスト2から受信した時、コントローラ4は、フリーブロックリスト71Bから一つのブロック(物理ブロック)を選択し、選択したブロック(物理ブロック)をホスト2に書き込み対象ブロックとして割り当てる(ステップS21)。フリーブロックリスト71Bからのブロック(書き込み対象ブロック)の選択の権限はコントローラ4が保有している。したがって、コントローラ4は、信頼性の高いブロックを書き込み対象ブロックとしてホスト2に割り当てる事ができる。ステップS21では、コントローラ4は、最少消去回数のブロックをフリーブロックリスト71Bから選択し、この最少消去回数のブロックを書き込み対象ブロックとしてホスト2に割り当ててもよい。
コントローラ4は、この割り当てたブロックを消去し、この割り当てたブロックの消去回数を更新する(ステップS22)。コントローラ4は、この割り当てたブロックのブロックアドレスをホスト2に通知する(ステップS23)。このブロックアドレスは、ブロック割り当て・消去コマンドに対するコマンド完了レスポンス内の返り値としてホスト2に通知されてもよい。
次に、仮想NANDアクセス管理API22用のブロック割り当て・消去処理について説明する。
ホスト2のために現在割り当てられている仮想ブロックがホスト2からのデータで満たされた場合、ホスト2は、仮想NANDアクセス管理API22用のブロック割り当て・消去コマンドをSSD3に送信してもよい。
SSD3のコントローラ4がこのブロック割り当て・消去コマンドをホスト2から受信した時、コントローラ4は、フリー仮想ブロックリスト72Bから一つの仮想ブロックを選択し、選択した仮想ブロックをホスト2に書き込み対象仮想ブロックとして割り当てる(ステップS21)。フリー仮想ブロックリスト72Bからの仮想ブロック(書き込み対象仮想ブロック)の選択の権限はコントローラ4が保有しているので、コントローラ4は、信頼性の高い仮想ブロックを書き込み対象仮想ブロックとしてホスト2に割り当てる事ができる。ステップS21では、コントローラ4は、最少消去回数の仮想ブロックをフリー仮想ブロックリスト72Bから選択し、この最少消去回数の仮想ブロックを書き込み対象仮想ブロックとしてホスト2に割り当ててもよい。
コントローラ4は、この割り当てた仮想ブロックに含まれる複数個のブロックを同時に消去し、この割り当てた仮想ブロックの消去回数を更新する(ステップS22)。コントローラ4は、この割り当てた仮想ブロックの仮想ブロックアドレスをホスト2に通知する(ステップS23)。この仮想ブロックアドレスは、ブロック割り当て・消去コマンドに対するコマンド完了レスポンス内の返り値としてホスト2に通知されてもよい。
[ライトコマンド]
図29は、SSD3に適用される物理NANDアクセス管理API21用のライトコマンドを示す。
ライトコマンドは、以下の入力パラメータを含む。
(1)ブロックアドレス、またはブロックアドレスとページアドレス: この入力パラメータ値は、データがライトされるべきNANDメモリ5上の位置を指定する物理アドレスである。ブロックアドレスのみが指定された場合には、書き込み対象ページはSSD3によって自動更新される。
(2)NSID(オプショナル): ブロックアドレスが指定されない場合は、NSIDが指定される。NSIDが指定された場合、ブロックアドレスとページアドレスがSSD3によって自動発行される。データはNSIDに最後に割り当てられたブロック(現在の書き込み対象ブロック)にライトされる。
(3)処理優先度: 処理優先度はこのライトコマンドの優先度を示す。
(4)書き込みデータの先頭アドレス: 書き込みデータの先頭アドレスは、書き込みデータが格納されている出力バッファ(ホストのメモリ)上の先頭アドレスを示す。
(5)書き込むページ数: 書き込むページ数は、データが書き込まれるべきページの数、つまり上述の「特定ページ数」を示す。データが書き込まれたブロック内のページ数が書き込むページ数(「特定ページ数」)に達した場合、その旨がホスト2に通知される。
(6)NANDモード(オプショナル): NANDモードには、SLC/MLC/TLC等が含まれる。
ライトコマンドは、以下の出力パラメータを含む。
(1)終了ステータス: ライトコマンドの成功またはエラーを示す終了ステータスがホスト2に返される。
(2)ブロックアドレスとページアドレス: ブロックアドレスとページアドレスは、データが書き込まれたNANDメモリ5上の位置を示す。ライトコマンドが、ブロックアドレスのみを含む場合、またはNSIDのみを含む場合、ホスト2は、この返り値に基づいてデータが書き込まれたNANDメモリ5上の位置を知ることができる。
(3)書き込んだページ数: この値は、データが書き込まれたページの数を示す。
(4)不正書き込み順序警告: 不正書き込み順序が検出された場合、ホスト2に警告またはエラーが返される。
(5)リード可能最新ページアドレス: 読み出し可能なデータを保持する最新ページアドレスがホスト2に返される。ホスト2は、このブロック内のどのページまでがリード可能であるかを知ることができる。
図30は、SSD3に適用される仮想NANDアクセス管理API22用のライトコマンドを示す。
このライトコマンドは、以下の入力パラメータを含む。
(1)仮想ブロックアドレス、または仮想ブロックアドレスとページアドレス: これは、データがライトされるべきNANDメモリ5上の位置を指定する物理アドレスである。この物理アドレスは、仮想ブロックアドレス、仮想ブロック内ブロック番号、ページアドレスによって表現されてもよい。仮想ブロックアドレスのみが指定された場合には、仮想ブロック内ブロック番号、ページアドレスがSSD3によって自動更新されてもよい。
(2)NSID(オプショナル): 仮想ブロックアドレスが指定されない場合は、NSIDが指定される。NSIDが指定された場合、仮想ブロックアドレス、仮想ブロック内ブロック番号、ページアドレスがSSD3によって自動発行される。データはNSIDに割り当てられた仮想ブロックにライトされる。
(3)処理優先度: 処理優先度はこのライトコマンドの優先度を示す。
(4)書き込みデータの先頭アドレス: 書き込みデータの先頭アドレスは、書き込みデータが格納されている出力バッファ(ホストのメモリ)上の先頭アドレスを示す。
(5)書き込むページ数: 書き込むページ数は、データが書き込まれるべきページの数を示す。データが書き込まれたブロック内のページ数が書き込むページ数に達した場合、その旨がホスト2に通知される。
(6)NANDモード(オプショナル): NANDモードには、SLC/MLC/TLC等が含まれる。
ライトコマンドは、以下の出力パラメータを含む。
(1)終了ステータス: ライトコマンドの成功またはエラーを示す終了ステータスがホスト2に返される。
(2)仮想ブロックアドレスとページアドレス: この値は、データが書き込まれたNANDメモリ5上の位置を示す物理アドレスである。この物理アドレスは、仮想ブロックアドレス、仮想ブロック内ブロック番号、ページアドレスによって表現されてもよい。ライトコマンドが仮想ブロックアドレスのみまたはNSIDのみを含む場合、ホスト2は、この返り値に基づいてデータが書き込まれたNANDメモリ5上の位置を知ることができる。
(3)書き込んだページ数: この値は、データが書き込まれたページの数を示す。
(4)不正書き込み順序警告: 不正書き込み順序が検出された場合、ホスト2に警告またはエラーが返される。
(5)リード可能最新ページアドレス: 読み出し可能なデータを保持する最新ページアドレスがホスト2に返される。ホスト2は、仮想ブロック内アクセス対象ブロック内のどのページまでがリード可能であるかを知ることができる。
[書き込み順序制約]
図31は、ブロック内の多数のページへのデータ書き込み順序に関する制約を示す。
ここでは、一つのブロックがページ0〜ページ255を含む場合を想定する。データリードに関しては、ブロック内の任意の幾つかのページを任意の順序でリードすることができる。一方、データ書き込みに関しては、ある一つのブロック内においては、データはページ0、ページ1、ページ2、ページ3、…ページ254、ページ255の順序でシーケンシャルに書き込まれることが必要とされる。したがって、「不正書き込み順序警告」機能は、ホスト2が、直接アドレス指定モードを使用することを、つまりデータが書き込まれるべきブロックアドレスおよびページアドレスをコントロールすることを、助けることができる。
[ページからのデータ読み出しのタイミングに関する制約]
NANDメモリによっては、たとえブロック内のあるページにデータが書き込まれても、このページに書き込まれたデータは、書き込み直後には読み出すことができず、このページに書き込まれたデータは、このページに後続する1以上のページへのデータ書き込み完了後に可能となるケースがある。
図32は、ページからのデータ読み出しのタイミングに関する制約を示す。
ここでは、ページP0〜P3へのデータ書き込み後にページP0が読み出し可能なデータを保持する状態となる場合が例示されている。このように、たとえある特定のページ(例えばページP0)への書き込みが完了しても、後続する幾つかのページ(例えばページP1〜P3)への書き込みが完了するまでは、この特定のページ(例えばページP0)からデータを正しくリードできない場合がある。
このような、ページからのデータ読み出しのタイミングに関する制約は、NANDメモリ内で実行されるプログラム動作に起因する。
すなわち、NANDメモリにおいては、セルの微細化が進んでおり、セルへのデータ書き込みによって隣接するセルの閾値レベルが変動するというプログラムディスターブが起こり得る。このため、NANDメモリにおいては、プログラムディスターブによる影響を考慮して、あるページ内の各セルへのデータの書き込みによって、その直前の一つ以上のページ内の各セルの閾値レベルを補正するといったプログラム動作が実行される場合がある。補正が完了する前のページからデータをリードすると、本来のデータとは異なる誤ったデータがリードされてしまう。補正を完了するタイミングは使用されるNANDメモリのタイプによって異なる。
コントローラ4は、補正が完了するタイミングをホスト2に通知することができる。換言すれば、コントローラ4は、書き込んだデータが読めるブロック内の最後のページをホスト2に通知することができる。
より詳しくは、コントローラ4は、以下の処理を実行する。
コントローラ4は、ホスト2から、ある特定のブロックを指定するブロックアドレスとこの特定のブロック内の書き込み対象ページを指定するページアドレスとを含むライトコマンドを受信する。コントローラ4は、ライトコマンドに従って、特定のブロック内の書き込み対象ページにデータを書き込む。そして、コントローラ4は、この特定のブロック内の書き込み対象ページへのデータの書き込みによって読み出し可能状態となったこの特定のブロック内の最新ページ(この特定のブロック内のページ群の中で、最後に読み出し可能となったページ)を示すページアドレスを、ホスト2に通知する。
ホスト2は、この通知に応じて、書き込んだデータが読めるページを示すホスト2上のリード可能ページアドレス管理情報を更新してもよい。あるページのデータがリード可能であることを示す通知を受信した後、ホスト2は、このページのデータを保持しているホスト2のメモリ領域(ライトバッファ)を解放してもよい。換言すれば、ホスト2は、まず、SSD3のNANDメモリ5に書き込むべきデータをホスト2のメモリ内に一時的に格納し、そして、この書き込むべきデータを書き込むためのライトコマンドをSSD3に送信する。そして、ホスト2は、このデータが不揮発性メモリ5から読み出し可能になるまで、このデータをホスト2のメモリに維持する。
また、プログラムディスターブによる影響を低減するために、NANDメモリは、図33に示されているようなプログラム順序でプログラム動作を実行するケースもある。図33では、各ページへデータを書き込むためのプログラム動作が、複数回の書き込みステージを含む。各ページへの複数回の書き込みステージの内の少なくとも最後の書き込みステージは、後続する1以上のページへの1以上の書き込みステージの完了後に実行される。この場合においても、たとえある特定のページ(例えばページP0)へ書き込むべきデータをNANDメモリに転送することによってこの特定のページへの書き込みが完了しても、他の1以上のページへ書き込むべきデータをNANDメモリに転送することによってこの1以上のページへの書き込みが完了するまでは、この特定のページからデータを正しくリードすることができない場合がある。
セル当たりに3ビットのデータを書き込むTLC書き込みにおいては、以下のプログラム順序でプログラム動作が実行されてもよい。
(1)ページ0への第1書き込みステージ(ページ0への下位ページデータのライト)
(2)ページ1への第1書き込みステージ(ページ1への下位ページデータのライト)
(3)ページ0への第2書き込みステージ(ページ0への中位ページデータのライト)
(4)ページ2への第1書き込みステージ(ページ2への下位ページデータのライト)
(5)ページ1への第2書き込みステージ(ページ1への中位ページデータのライト)
(6)ページ0への第3書き込みステージ(ページ0への上位ページデータのライト)
(7)ページ3への第1書き込みステージ(ページ3への下位ページデータのライト)
(8)ページ2への第2書き込みステージ(ページ2への中位ページデータのライト)
(9)ページ1への第3書き込みステージ(ページ1への上位ページデータのライト)
使用可能なプログラム順序はこの例に限定されず、NANDメモリ毎に異なる様々なプログラム順序が使用され得る。
[ライト処理の手順]
図34のフローチャートは、SSD3によって実行されるデータライト処理の手順を示す。
SSD3のコントローラ4は、ブロック割り当て・消去コマンドの受信に応答して書き込み対象ブロックをホスト2に割り当て、そして、書き込み対象ページを初期値(ページ0)に設定する(ステップS31)。コントローラ4がホスト2からライトコマンドを受信したならば(ステップS32のYES)、コントローラ4は、受信されたライトコマンドが、ページアドレスを含む直接アドレス指定モードのライトコマンドであるか否かを判定する(ステップS33)。
受信されたライトコマンドが直接アドレス指定モードのライトコマンドであるならば(ステップS33のYES)、コントローラ4は、このライトコマンドによって指定されるページアドレスが現在の書き込み対象ページ(ここではページ0)に一致するか否かを判定する(ステップS34)。
ライトコマンドによって指定されるページアドレスが現在の書き込み対象ページに一致しないならば(ステップS34のNO)、コントローラ4は、不正書き込み順序が発生したことを検出し、不正書き込み順序の警告を含むコマンド完了レスポンスをホスト2に通知する(ステップS35)。ステップS35では、コントローラ4は、ライトコマンドによって指定されるページアドレスにデータを書き込まずに、不正書き込み順序の警告を含むコマンド完了レスポンスをホスト2に通知する。
一方、ライトコマンドによって指定されるページアドレスが現在の書き込み対象ページに一致するならば(ステップS34のYES)、コントローラ4は、ライトコマンドによって指定されるデータをNANDメモリ5に転送し、データをライトコマンドのページアドレスによって指定される書き込み対象ブロック内のページに書き込む(ステップS36)。コントローラ4は、最初のページから最後のページの順でデータを書き込むという書き込み順序に関する制約に基づいて、書き込み対象ページを更新する(ここでは、ページ0からページ1に更新される)(ステップS37)。
受信されたライトコマンドが直接アドレス指定モードのライトコマンドでないならば(ステップS33のNO)、コントローラ4は、現在の書き込み対象ページのページアドレス(ここではページ0)を自動発行し、ライトコマンドによって指定されるデータをNANDメモリ5に転送し、データを書き込み対象ブロック内の現在の書き込み対象ページに書き込む(ステップS38)。コントローラ4は、上述の書き込み順序に関する制約に基づいて、書き込み対象ページを更新する(ここでは、ページ0からページ1に更新される)(ステップS39)。
ステップS37またはS39の後、コントローラ4は、リード可能なデータを保持する最新のページアドレスを特定する(ステップS40)。
そして、コントローラ4は、今回の書き込みによって書き込み対象ブロック内の最後のページまでデータが書き込まれたか否か、およびデータが書き込まれたページ数が「書き込むページ数」(上述の「特定ページ数」)に達したか否かを判定する(ステップS41、S42)。
そして、コントローラ4は、返り値を作成し、返り値を含むコマンド完了レスポンスをホスト2に送信する。
書き込み対象ブロック内の最後のページまでデータが書き込まれたならば(ステップS41のYES)、コントローラ4は、終了ステータスと、返り値とを含むコマンド完了レスポンスをホスト2に送信する(ステップS43)。返り値は、以下の値を含む。
(1)データが書き込まれたNANDメモリ5上の位置を示す物理アドレス(この物理アドレスは、ブロックアドレスとページアドレスであってもよく、または仮想ブロックアドレスとページアドレスであってもよい)
(2)リード可能最新ページアドレス
(3)ブロック内の全ページの書き込み完了を示すステータス
データが書き込まれたページ数が「書き込むページ数」(上述の「特定ページ数」)に達したならば(ステップS42のYES)、コントローラ4は、終了ステータスと返り値とを含むコマンド完了レスポンスをホスト2に送信する(ステップS44)。返り値は、以下の値を含む。
(1)データが書き込まれたNANDメモリ5上の位置を示す物理アドレス(この物理アドレスは、ブロックアドレスとページアドレスであってもよく、または仮想ブロックアドレスとページアドレスであってもよい)
(2)リード可能最新ページアドレス
(3)特定ページ数の書き込み完了を示すステータス
図35のフローチャートは、ライトコマンドのコマンド完了レスポンスの受信に応答してホスト2によって実行される処理の手順を示す。
SSD3からのライトコマンドのコマンド完了レスポンスの受信に応答して、ホスト2は、このライトコマンドのコマンド処理が成功したか否かを判定する(ステップS51)。
ライトコマンドのコマンド処理が成功したならば(ステップS51のYES)、ホスト2は、コマンド完了レスポンスに含まれるブロックアドレスとページアドレスを使用することによって、アドレス変換テーブル(つまりルックアップテーブルLUT45)を更新し、これによってこのライトコマンドによって書き込まれたデータに対応するLBAに正しい物理アドレスをマッピングする(ステップS52)。そして、ホスト2は、リード可能最新ページアドレスに基づいて上述のリード可能ページアドレス管理情報を更新し、このリード可能最新ページアドレスへライトされたデータを保持しているホスト2のメモリ領域(ライトバッファ)を解放する(ステップS53)。
つまり、このライトコマンドによって書き込まれたデータのSSD3からの読み出しが可能になるまでは、このライトコマンドによって書き込まれたデータはホスト2のメモリ領域(ライトバッファ)に維持される。このライトコマンドによって書き込まれたデータのSSD3からの読み出しが可能になった後は、このデータに対するリード要求のアクセス先は、ライトバッファからSSD3に切り換えられる。
そして、ホスト2は、特定ページ数の書き込みが完了したか否か、ブロックの最後のページまで書き込みが完了したか否かを判定する(ステップS54、S56)。
特定ページ数の書き込みが完了したならば(ステップS54のYES)、ホスト2は、メタデータのような管理情報の書き込みを要求するライトコマンドをSSD3に送信する(ステップ55)。これにより、各ブロックの最終ページなどにメタデータのような管理情報を書き込むことができる。
ブロックの最後のページまで書き込みが完了したならば(ステップS56のYES)、ホスト2は、ブロック割り当て・消去コマンドをSSD3に送信する(ステップ57)。
ライトコマンドのコマンド処理がエラーしたならば(ステップS51のNO)、ホスト2は、不正書き込み順によるエラーであるか否かを判定する(ステップS58)。
不正書き込み順によるエラーであるならば(ステップS58のYES)、ホスト2は、不正書き込み順の原因を特定するための処理を含むエラー処理を実行する(ステップS59)。
図36のフローチャートは、NSIDを含むライトコマンドのコマンド完了レスポンスの受信に応答してホスト2によって実行される処理の手順を示す。
SSD3からのライトコマンドのコマンド完了レスポンスの受信に応答して、ホスト2は、ライトコマンドのコマンド処理が成功したか否かを判定する(ステップS61)。
ライトコマンドのコマンド処理が成功したならば(ステップS61のYES)、ホスト2は、このライトコマンドによって書き込まれたデータに関連づけられたNSIDを特定する(ステップS62)。コマンド完了レスポンスが、ライトコマンド内のNSIDと同じNSIDを含んでいてもよい。
ホスト2は、コマンド完了レスポンスに含まれるブロックアドレスとページアドレスを使用することによって、特定されたNSIDに対応するアドレス変換テーブル(つまりルックアップテーブルLUT45)を更新し、これによって書き込まれたデータに対応するLBAに正しい物理アドレスをマッピングする(ステップS63)。そして、ホスト2は、リード可能最新ページアドレスを上述のリード可能ページアドレス管理情報に保存することによってリード可能ページアドレス管理情報を更新し、このリード可能最新ページアドレスへライトされたデータを保持しているホスト2のメモリ領域(ライトバッファ)を解放する(ステップS64)。
そして、ホスト2は、特定ページ数の書き込みが完了したか否か、ブロックの最後のページまで書き込みが完了したか否かを判定する(ステップS65、S67)。
特定ページ数の書き込みが完了したならば(ステップS65のYES)、ホスト2は、メタデータのような管理情報の書き込みを要求するライトコマンドをSSD3に送信する(ステップ66)。
ブロックの最後のページまで書き込みが完了したならば(ステップS67のYES)、ホスト2は、ブロック割り当て・消去コマンドをSSD3に送信する(ステップ68)。
ライトコマンドのコマンド処理がエラーしたならば(ステップS61のNO)、ホスト2は、不正書き込み順によるエラーであるか否かを判定する(ステップS69)。
不正書き込み順によるエラーであるならば(ステップS69のYES)、ホスト2は、このライトコマンドによって書き込まれるべきデータに関連づけられたNSIDを特定する処理、不正書き込み順の原因を特定するための処理等を含むエラー処理を実行する(ステップS70)。
[リードコマンド]
図37は、SSD3に適用される物理NANDアクセス管理API21用のリードコマンドを示す。
リードコマンドは、以下の入力パラメータを含む。
(1)ブロックアドレスとページアドレス: これは、データがリードされるべきNANDメモリ5上の位置を指定する物理アドレスである。
(2)処理優先度: 処理優先度はこのリードコマンドの優先度を示す。
(3)読み出しデータの転送先アドレス: 読み出しデータの転送先アドレスは、読み出しデータが転送されるべき入力バッファ(ホストのメモリ)上の位置を示す。
(4)読み出しページ数: 読み出しページ数は、読み出すべきページの数を示す。
(5)許容レイテンシー: 許容レイテンシーは、最少レイテンシー、通常レイテンシー、または長レイテンシーのいずれかを指定する。
リードコマンドは、以下の出力パラメータを含む。
(1)終了ステータス: リードコマンドの成功またはエラーを示す終了ステータスがホスト2に返される。
(2)ブロックアドレスとページアドレス: ブロックアドレスとページアドレスは、データが読み出されたNANDメモリ5上の位置を示す。
(3)ページ数: この値は、データが読み出されたページの数を示す。
(4)先頭アドレス: これは、読み出しデータの先頭アドレスを示す。
図38は、SSD3に適用される仮想NANDアクセス管理API22用のリードコマンドを示す。
このリードコマンドは、以下の入力パラメータを含む。
(1)仮想ブロックアドレスとページアドレス: これは、データがリードされるべきNANDメモリ5上の位置を指定する物理アドレスである。
(2)処理優先度: 処理優先度はこのリードコマンドの優先度を示す。
(3)読み出しデータの転送先アドレス: 読み出しデータの転送先アドレスは、読み出しデータが転送されるべき入力バッファ(ホストのメモリ)上の位置を示す。
(4)読み出しページ数: 読み出しページ数は、読み出すべきページの数を示す。
(5)許容レイテンシー: 許容レイテンシーは、最少レイテンシー、通常レイテンシー、または長レイテンシーのいずれかを指定する。
リードコマンドは、以下の出力パラメータを含む。
(1)終了ステータス: リードコマンドの成功またはエラーを示す終了ステータスがホスト2に返される。
(2)仮想ブロックアドレスとページアドレス: 仮想ブロックアドレスとページアドレスは、データが読み出されたNANDメモリ5上の位置を示す。
(3)ページ数: この値は、データが読み出されたページの数を示す。
(4)先頭アドレス: これは、読み出しデータの先頭アドレスを示す。
[リード処理の手順]
図39と図40を参照して、SSD3とホスト2とによって実行されるデータリード処理の手順を示す。
図39に示されているように、ホスト2は、アドレス変換テーブル(つまりルックアップテーブルLUT45)を参照して、リード対象のデータのLBAをNANDメモリ5の物理アドレスに変換する(ステップS71)。そして、ホスト2は、この物理アドレスを含むリードコマンドをSSD3に送信する。
SSD3のコントローラ4は、この物理アドレスによって指定されるブロック内のページからデータを読み出す(ステップS72)。このステップS72では、コントローラ4は、図40に示されている処理を実行する。
すなわち、図40に示されているように、コントローラ4は、物理アドレスによって指定される物理位置(あるブロック内のあるページ)からデータを読み出す動作と、読み出されたデータのエラー訂正動作とを実行する(ステップS51)。そして、コントローラ4は、読み出されたデータがECCによって訂正不能なエラーを含むか否かを判定する(ステップS82)。もし、まだリード可能な状態になっていないページがリードされたならば、読み出されたデータはECCによって訂正不能な多くのエラーを含む。
読み出されたデータが訂正不能なエラーを含まない場合には(ステップS82のNO)、コントローラ4は、この読み出されたデータをホスト2に転送し、且つ成功を示すコマンド完了レスポンスをホスト2に転送する(ステップS83)。
一方、読み出されたデータが訂正不能なエラーを含む場合には(ステップS82のYES)、コントローラ4は、エラーを示すコマンド完了レスポンスをホスト2に転送する(ステップS84)。
[データコピー]
図41は、SSD3によって実行されるデータコピー動作の例を示す。
SSD3のコントローラ4は、コピー元ブロック内の全てのテータをコピー先ブロックにコピーするのではなく、コピー元ブロック内の指定されたページ範囲内の無効データをスキップし、このページ範囲内の有効データのみをコピー先ブロック内の指定されたページ範囲にコピーする。このデータコピー動作は、上述したようにガベージコレクションの目的で実行される。
データコピー動作においては、上述したように、コントローラ4は、有効データを含まない無効ページのコピーを自動的にスキップする。これにより、ホスト2がコピーすべきページをページ単位で個別に指定せずとも、有効ページのみをコピー先ブロックにコピーすることができる。
また、ホスト2は、コピーコマンドによってコピー元ブロックとコピー先ブロックだけでなく、コピー元ブロック内のコピー開始ページおよびコピー先ブロック内の転送開始ページを指定することができる。これにより、コピー元ブロック内の特定のページ群を、コピー先ブロック内の特定のページ群にコピーするというきめ細かなコピー動作を実行することができる。なお、複数個のコピー元ブロックが指定されてもよい。
さらに、ホスト2は、データコピーの終了条件として、「コピー終了までにコピーすべき有効データ数」、または「コピー終了までに検出すべき無効データ数」のどちらを指定してもよい。
「コピー終了までにコピーすべき有効データ数」がデータコピー動作の終了条件として指定された場合には、コピー先ブロックに所望の数の有効データがコピーされるまでデータコピー動作が継続される。コピー先ブロックに所望の数の有効データがコピーされた時に、データコピー動作が終了される。例えば、「コピー終了までにコピーすべき有効データ数」として一つのブロック分のデータ数が指定されたならば、幾つかのコピー元ブロックからコピーされた有効データでコピー先ブロックを満たすことができ、また幾つかのコピー元ブロックを無効データのみを含むフリーブロックにすることができる。なお、必ずしも一回のデータコピー動作でフリーブロック数を一つ増やす必要は無く、何回かのデータコピー動作によってフリーブロック数を一つ増やしてもよい。このため、「コピー終了までにコピーすべき有効データ数」は、どのような数であってもよい。
「コピー終了までに検出すべき無効データ数」がデータコピー動作の終了条件として指定された場合には、無効データのコピーがスキップされた回数が所望の回数になるまでデータコピー動作が継続される。無効データのコピーがスキップされた回数が所望の回数になった時に、データコピー動作が終了される。通常、選択された幾つかのコピー元ブロックそれぞれは有効データと無効データとが混在するブロックである。また、これら選択された幾つかのコピー元ブロックに含まれる無効データ数の合計は、少なくとも、一つのブロック分のデータ数以上である。このため、例えば、「コピー終了までに検出すべき無効データ数」として一つのブロック分のデータ数が指定されたならば、コピー動作が終了されるまでに、少なくとも一つのコピー元ブロックを無効データのみを含むフリーブロックにすることができる。上述したように、何回かのデータコピー動作によってフリーブロック数を一つ増やしてもよいので、「コピー終了までに検出すべき無効データ数」も、どのような数であってもよい。
図41では、説明を簡単にするために、ホスト2からのデータコピーコマンドによって以下のパラメータが指定された場合を想定する。
(1)コピー元ブロック=ブロックB0
(2)コピー元開始ページ=P31
(3)コピー先ブロック=ブロックB10
(4)転送先開始ページ=P11
(5)有効/無効ビットマップ=ビットマップデータ81
(6)コピー終了までにコピーすべき有効データ数=3
ビットマップデータ81は、コピー対象範囲内の各ページのデータの有効/無効を示す。コントローラ4は、まず、コピー元ブロックB0のコピー開始ページP31のデータの有効/無効を判定する。図41のケースでは、ページP31のデータは有効である。このため、コントローラ4は、ページP31からデータをリードし、このリードしたデータをコピー先ブロックB10の転送先開始ページP11にコピーする。コピー先ブロックB10にコピーされた有効データ数は1となる。
コントローラ4は、コピー元ブロックB0のページP32のデータの有効/無効を判定する。図41のケースでは、ページP32のデータは無効である。このため、コントローラ4は、ページP32のデータのコピーをスキップする。コピー先ブロックB10にコピーされた有効データ数は1のまま維持される。
コントローラ4は、コピー元ブロックB0のページP33のデータの有効/無効を判定する。図41のケースでは、ページP33のデータは有効である。このため、コントローラ4は、ページP33からデータをリードし、このリードしたデータをコピー先ブロックB10のページP12にコピーする。コピー先ブロックB10にコピーされた有効データ数は2となる。
コントローラ4は、コピー元ブロックB0のページP34のデータの有効/無効を判定する。図41のケースでは、ページP34のデータは無効である。このため、コントローラ4は、ページP34のデータのコピーをスキップする。コピー先ブロックB10にコピーされた有効データ数は2のまま維持される。
コントローラ4は、コピー元ブロックB0のページP35のデータの有効/無効を判定する。図41のケースでは、ページP35のデータは有効である。このため、コントローラ4は、ページP35からデータをリードし、このリードしたデータをコピー先ブロックB10のページP13にコピーする。コピー先ブロックB10にコピーされた有効データ数は3となる。コピー先ブロックB10にコピーされた有効データ数が、終了条件(コピー終了までにコピーすべき有効データ数)に達したため、コピー動作は終了される。
図42は、検出すべき無効データ数が終了条件として指定された場合におけるデータコピー動作の例を示す。
図42では、ホスト2からのデータコピーコマンドによって以下のパラメータが指定された場合を想定する。
(1)コピー元ブロック=ブロックB0
(2)コピー元開始ページ=P31
(3)コピー先ブロック=ブロックB10
(4)転送先開始ページ=P11
(5)有効/無効ビットマップ=ビットマップデータ81
(6)コピー終了までに検出すべき無効データ数=3
コントローラ4は、まず、コピー元ブロックB0のコピー開始ページP31のデータの有効/無効を判定する。図42のケースでは、ページP31のデータは有効である。このため、コントローラ4は、ページP31からデータをリードし、このリードしたデータをコピー先ブロックB10の転送先開始ページP11にコピーする。
コントローラ4は、コピー元ブロックB0のページP32のデータの有効/無効を判定する。図42のケースでは、ページP32のデータは無効である。このため、コントローラ4は、ページP32のデータのコピーをスキップする。検出された無効データ数(つまりコピーがスキップされたデータの数)は、1となる。
コントローラ4は、コピー元ブロックB0のページP33のデータの有効/無効を判定する。図42のケースでは、ページP33のデータは有効である。このため、コントローラ4は、ページP33からデータをリードし、このリードしたデータをコピー先ブロックB10のページP12にコピーする。検出された無効データ数は1に維持される。
コントローラ4は、コピー元ブロックB0のページP34のデータの有効/無効を判定する。図42のケースでは、ページP34のデータは無効である。このため、コントローラ4は、ページP34のデータのコピーをスキップする。検出された無効データ数は2となる。
コントローラ4は、コピー元ブロックB0のページP35のデータの有効/無効を判定する。図42のケースでは、ページP35のデータは有効である。このため、コントローラ4は、ページP35からデータをリードし、このリードしたデータをコピー先ブロックB10のページP13にコピーする。検出された無効データ数は2に維持される。
コントローラ4は、コピー元ブロックB0のページP36のデータの有効/無効を判定する。図42のケースでは、ページP36のデータは有効である。このため、コントローラ4は、ページP36からデータをリードし、このリードしたデータをコピー先ブロックB10のページP14にコピーする。検出された無効データ数は2に維持される。
コントローラ4は、コピー元ブロックB0のページP37のデータの有効/無効を判定する。図42のケースでは、ページP37のデータは無効である。このため、コントローラ4は、ページP37のデータのコピーをスキップする。検出された無効データ数は3となる。検出された無効データ数が、終了条件(コピー終了までに検出すべき無効データ数)に達したため、コピー動作は終了される。
図43は、複数のコピー元ブロックが指定され且つコピーすべき有効データ数が終了条件として指定された場合におけるデータコピー動作の例を示す。
ここでは、図示の簡単化のために、1ブロックに含まれるページ数が3、コピー終了までにコピーすべき有効データ数が3、である場合を想定する。ビットマップデータ81A、81BはブロックB11、B20にそれぞれ対応する有効/無効ビットマップである。
ブロックB11、B20はホスト2からのコピーコマンドによって指定されたコピー元ブロック、ブロックB30はコピーコマンドによって指定されたコピー先ブロックである。
コントローラ4は、まず、コピー元ブロックB11のコピー開始ページP0のデータの有効/無効を判定する。図43のケースでは、ページP0のデータは有効である。このため、コントローラ4は、ページP0からデータをリードし、このリードしたデータをコピー先ブロックB30の転送先開始ページP0にコピーする。コピー先ブロックB30にコピーされた有効データ数は1となる。
コントローラ4は、コピー元ブロックB11のページP1のデータの有効/無効を判定する。図43のケースでは、ページP1のデータは有効である。このため、コントローラ4は、ページP1からデータをリードし、このリードしたデータをコピー先ブロックB30のページP1にコピーする。コピー先ブロックB30にコピーされた有効データ数は2となる。
コントローラ4は、コピー元ブロックB11のページP2のデータの有効/無効を判定する。図43のケースでは、ページP2のデータは無効である。このため、コントローラ4は、ページP2のデータのコピーをスキップする。コピー先ブロックB30にコピーされた有効データ数は2に維持される。
コントローラ4は、次のコピー元ブロックB20のページP0のデータの有効/無効を判定する。図43のケースでは、コピー元ブロックB20のページP0のデータは有効である。このため、コントローラ4は、コピー元ブロックB20のページP0からデータをリードし、このリードしたデータをコピー先ブロックB30のページP2にコピーする。コピー先ブロックB30にコピーされた有効データ数は3となる。コピー先ブロックB30にコピーされた有効データ数が、終了条件(コピー終了までにコピーすべき有効データ数)に達したため、コピー動作は終了される。
コントローラ4は、コピーコマンドのコマンド完了レスポンスとして、コピーされた有効データ毎に有効データIDとこの有効データが格納されているコピー先ブロック内の位置(コピー先位置)とを示すデータコピー情報をホスト2に通知する。このデータコピー情報に基づき、ホスト2は、アドレス変換テーブル(LUT45)を更新して個々のコピーされたデータを正しい物理アドレスにマッピングする。ブロックB11のページP0のデータ、ページP1のデータは無効化される。これにより、ブロックB11は有効データを含まないフリーブロックとなる。同様に、ブロックB20のページP0のデータも無効化される。
さらに、コントローラ4は、コピー元ブロックB20のページP1を次回のコピー元開始ページとして決定し、そして、次回のコピー元開始ページの物理アドレス(コピー元ブロックB20のブロックアドレス、ページP1のページアドレス)をホスト2に通知する。
さらに、コントローラ4は、データコピー動作によって有効データがコピーされたコピー先ブロックのページ群の中で、読み出し可能なデータを保持する最新のページを示すページアドレス(最新ページアドレス)を特定し、特定された最新ページアドレスホスト2に通知する。これにより、ホスト2は、コピー先ブロックB30内のページ群中の読み出し可能な最後のページを知ることができる。
図44は、複数のコピー元ブロックが指定され且つ検出すべき無効データ数が終了条件として指定された場合におけるデータコピー動作の例を示す。
ここでは、図示の簡単化のために、1ブロックに含まれるページ数が3、コピー終了までに検出すべき無効データ数が3、である場合を想定する。ビットマップデータ81A、81B、81CはブロックB11、B20、B25にそれぞれ対応する有効/無効ビットマップである。
ブロックB11、B20、B25はホスト2からのコピーコマンドによって指定されたコピー元ブロック、ブロックB30、B31はコピーコマンドによって指定されたコピー先ブロックである。
コントローラ4は、まず、コピー元ブロックB11のコピー開始ページP0のデータの有効/無効を判定する。図44のケースでは、ページP0のデータは有効である。このため、コントローラ4は、ページP0からデータをリードし、このリードしたデータをコピー先ブロックB30の転送先開始ページP0にコピーする。
コントローラ4は、コピー元ブロックB11のページP1のデータの有効/無効を判定する。図44のケースでは、ページP1のデータは有効である。このため、コントローラ4は、ページP1からデータをリードし、このリードしたデータをコピー先ブロックB30のページP1にコピーする。
コントローラ4は、コピー元ブロックB11のページP2のデータの有効/無効を判定する。図44のケースでは、ページP2のデータは無効である。このため、コントローラ4は、ページP2のデータのコピーをスキップする。検出された無効データ数(つまりコピーがスキップされたデータの数)は、1となる。
コントローラ4は、次のコピー元ブロックB20のページP0のデータの有効/無効を判定する。図44のケースでは、コピー元ブロックB20のページP0のデータは有効である。このため、コントローラ4は、コピー元ブロックB20のページP0からデータをリードし、このリードしたデータをコピー先ブロックB30のページP2にコピーする。検出された無効データ数はまだ終了条件に達していないため、コピー動作は継続される。
コントローラ4は、コピー元ブロックB20のページP1のデータの有効/無効を判定する。図44のケースでは、ページP1のデータは無効である。このため、コントローラ4は、コピー元ブロックB20のページP1のデータのコピーをスキップする。検出された無効データ数は、2となる。
コントローラ4は、コピー元ブロックB20のページP2のデータの有効/無効を判定する。図44のケースでは、コピー元ブロックB20のページP2のデータは有効である。このため、コントローラ4は、コピー元ブロックB20のページP2からデータをリードし、このリードしたデータをコピー先ブロックB31のページP0にコピーする。
コントローラ4は、次のコピー元ブロックB25のページP0のデータの有効/無効を判定する。図44のケースでは、コピー元ブロックB25のページP0のデータは無効である。このため、コントローラ4は、コピー元ブロックB25のページP0のデータのコピーをスキップする。検出された無効データ数は、3となる。検出された無効データ数が、終了条件(コピー終了までに検出すべき有効データ数)に達したため、コピー動作は終了される。
コントローラ4は、コピーコマンドのコマンド完了レスポンスとして、コピーされたデータ毎にデータIDとコピー先位置とを示すデータコピー情報をホスト2に通知する。このデータコピー情報に基づき、ホスト2は、アドレス変換テーブル(LUT45)を更新して個々のコピーされたデータを正しい物理アドレスにマッピングする。ブロックB11のページP0のデータ、ページP1のデータは無効化される。これにより、ブロックB11は有効データを含まないフリーブロックとなる。同様に、ブロックB20のページP0のデータ、ページP2のデータも無効化される。これにより、ブロックB11、B20は有効データを含まないフリーブロックとなる。
さらに、コントローラ4は、コピー元ブロックB25のページP1を次回のコピー元開始ページとして決定し、そして、次回のコピー元開始ページの物理アドレス(コピー元ブロックB25のブロックアドレス、ページP1のページアドレス)をホスト2に通知する。
さらに、コントローラ4は、読み出し可能なデータを保持するコピー先ブロックB30内の最新ページアドレスと読み出し可能なデータを保持するコピー先ブロックB31内の最新ページアドレスとを特定し、これら最新ページアドレスをホスト2に通知する。これにより、ホスト2は、各コピー先ブロック内のページ群中の読み出し可能な最後のページを知ることができる。
図45は、データサイズがページサイズよりも小さく且つコピーすべき有効データ数が終了条件として指定された場合におけるデータコピー動作を示す。
ここでは、一例として、ページサイズが16Kバイトであり、データサイズが4Kバイトである場合を想定する。このデータサイズは、LBAそれぞれと物理アドレスそれぞれとの間のマッピングを管理するための上述の管理サイズに対応する。コピー元ブロックB0のコピー開始ページP31には、各々が4Kバイトのデータサイズを有するデータD1、データD2、データD3、データD4が格納されている。各データのコピー元ブロックB0の次のページP32には、各々が4Kバイトのデータサイズを有するデータD5、データD6、データD7、データD8が格納されている。ビットマップデータ81は、データD1、データD2、データD3、データD4、データD5、データD6、データD7、データD8、…それぞれの有効/無効を示す。
このように、データサイズがページサイズよりも小さい場合には、コピー元ブロックB0の各ページは、ビットマップデータ81によってその有効/無効がそれぞれ示される複数のデータを含む。
コントローラ4は、(1)一つ以上の有効データを含むコピー元ブロックB0内のページそれぞれからページ単位でデータを読み出し、(2)読み出したデータから有効データを抽出することによって1ページのページサイズに対応する数の有効データを準備し、(3)準備された1ページのページサイズに対応する数の有効データをコピー先ブロックB10のコピー先領域(転送先開始ページから始まる領域)にページ単位で書き込むことによって有効データをコピー先領域にコピーし且つ無効データのコピーをスキップする。そして、コントローラ4は、コピー先領域にコピーされた有効データの数が、コピー終了までにコピーすべき有効データの数以上である場合に、またはコピーがスキップされた無効データの数が、コピー終了までに検出すべき無効データの数以上である場合に、データコピー動作を終了する。
つまり、有効データを含む個々のページに関しては、コントローラ4は、これらページからページ単位でデータを順次読み出す。1ページ分の有効データ(ここでは4個の有効データ)が準備できたならば、コントローラ4は、この1ページ分の有効データを、コピー先ブロックにページ単位で書き込む。これにより、有効データのみを、それら有効データをページ単位にアラインした状態でコピー先ブロックに効率良くコピーすることができる。1ページ分の有効データが揃う前にコピー元ブロックのデータがなくなった場合は、コントローラ4は、現在準備されている有効データにダミーデータをパディングし、これによって得られる1ページ分のデータをコピー先ブロックに書き込む。
より詳しくは、以下のコピー動作が実行される。以下では、図示の簡単化のために、コピー終了までにコピーすべき有効データ数が2である場合を想定する。
コントローラ4は、まず、コピー元ブロックB0のコピー開始ページP31が有効データを含むか否かを判定する。図45のケースでは、ページP31は有効データD1、D3を含む。このため、コントローラ4は、ページP31から1ページ分のデータ(D1〜D4)をリードする。リードされたデータはコピーバッファ32に一時的に格納されてもよい。
リードされた有効データの数はD1、D3の2つだけであり、1ページ分のサイズに対応する4つの有効データが揃っていないので、コントローラ4は、コピー元ブロックB0からページ単位でデータをリードする処理を続ける。
コントローラ4は、コピー元ブロックB0のページP32が有効データを含むか否かを判定する。図45のケースでは、ページP32は有効データD5、D6を含む。このため、コントローラ4は、ページP32から1ページ分のデータ(D5〜D8)をリードする。リードされたデータはコピーバッファ32に一時的に格納されてもよい。
コントローラ4は、ページP31からリードされた1ページ分のデータから有効データD1、D3を抽出し、ページP32からリードされた1ページ分のデータから有効データD5、D6を抽出し、1ページ分の有効データ(D1、D3、D5、D6)を生成する。そして、コントローラ4は、1ページ分の有効データ(D1、D3、D5、D6)を、コピー先ブロックB10の転送先開始ページP11にコピーする。これにより、無効データD2、D3、D7、D8のコピーがスキップされ、有効データのみがページ単位でコピー先ブロックB10にコピーされる。このように有効データをページ単位にアラインする処理が優先的に実行され、有効データがページ単位にアラインされた後に、終了条件の判定が行われる。
コピー先ブロックB10にコピーされた有効データ数は4となる。コピー先ブロックB10にコピーされた有効データ数4は、終了条件によって指定される有効データ数(ここでは2)以上であるので、コピー動作は終了される。
以上のコピー動作により、たとえ個々のデータのサイズがページサイズよりも小さい場合であっても、有効データのみを、それら有効データをページ単位にアラインした状態でコピー先ブロックに効率良くコピーすることができる。
コントローラ4は、コピーコマンドのコマンド完了レスポンスとして、コピーされたデータ毎にデータIDとコピー先位置とを示すデータコピー情報をホスト2に通知する。コピー先位置は、ブロックアドレス、ページアドレス、およびページ内オフセットによって表現されてもよい。ある4Kバイトのデータに対応するページ内オフセットは、この4Kバイトのデータが格納されているページ内のオフセット位置を示すページ内アドレスである。このデータコピー情報に基づき、ホスト2は、アドレス変換テーブル(LUT45)を更新して個々のコピーされたデータ(ここでは、D1、D3、D5、D6)を正しい物理アドレスにマッピングする。ブロックB0のページP31のデータD1、D3、ページP32のデータD5、D6は無効化される。
さらに、コントローラ4は、コピー元ブロックB0のページP33を次回のコピー元開始ページとして決定し、そして、次回のコピー元開始ページの物理アドレス(コピー元ブロックB0のブロックアドレス、ページP33のページアドレス)をホスト2に通知する。
さらに、コントローラ4は、読み出し可能なデータを保持するコピー先ブロックB10内の最新ページアドレスを特定し、この最新ページアドレスをホスト2に通知する。
図46は、データサイズがページサイズよりも小さく且つ検出すべき無効データ数が終了条件として指定された場合におけるデータコピー動作を示す。以下では、コピー終了までに検出すべき無効データ数が2である場合を想定する。
コントローラ4は、まず、コピー元ブロックB0のコピー開始ページP31が有効データを含むか否かを判定する。図46のケースでは、ページP31は有効データD1、D3を含む。このため、コントローラ4は、ページP31から1ページ分のデータ(D1〜D4)をリードする。リードされたデータはコピーバッファ32に一時的に格納されてもよい。
リードされた1ページ分のデータ(D1〜D4)に含まれる無効データ数はD2、D4の2つだけであるので、コントローラ4は、コピー元ブロックB0からページ単位でデータをリードする処理を続ける。
コントローラ4は、コピー元ブロックB0のページP32が有効データを含むか否かを判定する。図46のケースでは、ページP32は有効データD5、D6を含む。このため、コントローラ4は、ページP32から1ページ分のデータ(D5〜D8)をリードする。リードされたデータはコピーバッファ32に一時的に格納されてもよい。
コントローラ4は、ページP31からリードされた1ページ分のデータから有効データD1、D3を抽出し、ページP32からリードされた1ページ分のデータから有効データD5、D6を抽出し、1ページ分の有効データ(D1、D3、D5、D6)を生成する。そして、コントローラ4は、1ページ分の有効データ(D1、D3、D5、D6)を、コピー先ブロックB10の転送先開始ページP11にコピーする。これにより、無効データD2、D4、D7、D8のコピーがスキップされ、有効データのみがページ単位でコピー先ブロックB10にコピーされる。
検出された無効データ数、つまりコピーがスキップされた無効データ数は4となる。検出された無効データ数4が、終了条件によって指定される無効データ数(ここでは2)以上であるので、コピー動作は終了される。
[データコピーコマンド]
図47は、SSD3に適用されるデータコピーコマンドの入力パラメータを示す。データコピーコマンドは以下の入力パラメータを含む。
(1)コピー元ブロックアドレス(コピー元ブロックアドレスリスト): このパラメータ値は、コピー元ブロックのブロックアドレスを示す。コピー元ブロックのブロックアドレスは、仮想ブロックアドレスと仮想ブロック内ブロック番号によって指定することも可能である。コピー元ブロックアドレスリストは複数のコピー元ブロックそれぞれのブロックアドレスを含む。つまり、ホスト2は一つ以上のコピー元ブロックを指定することができる。
(2)コピー元ブロック内のコピー開始位置: このパラメータ値は、データがコピーされるべきコピー元ブロック内の開始位置(コピー元開始ページ)を示す。複数のコピー元ブロックが指定された場合には、1つ目のコピー元ブロック内のコピー開始位置のみがこのパラメータ値によって指定されてもよい。
(3)コピー先ブロックアドレス: コピー先ブロックアドレスは、コピー先ブロックのブロックアドレスを示す。コピー先ブロックのブロックアドレスは、仮想ブロックアドレスと仮想ブロック内ブロック番号によって指定することも可能である。
(4)コピー先ブロック内の開始位置: コピー先ブロック内の開始位置は、データが転送されるべきコピー先ブロック内の開始位置(転送先開始ページ)を示す。
(5)有効/無効ビットマップ: 有効/無効ビットマップは、コピー元ブロック内の有効データと無効データの配置を示す情報(ビットマップデータ)である。
(6)コピー終了までにコピーすべき有効データ数: このパラメータ値は、コピー先ブロックに転送つまりコピーすべきデータ数(例 ページ数)を指定する。このパラメータ値は、コピー動作の終了条件として使用される。データコピー動作は、無効データのコピーをスキップしながら有効データのみをコピーする。
(7)コピー終了までに検出すべき無効データ数: このパラメータ値も、コピー動作の終了条件として使用可能である。ホスト2は、一つのコピーコマンドにおいては(6)の終了条件または(7)の終了条件の何れか一方のみを指定することができる。
(8)データの大きさ(データサイズ)
この他、データコピーコマンドは、処理優先度等の他の入力パラメータ値を含んでもよい。
図48は、データコピーコマンドの出力パラメータを示す。データコピーコマンドは以下の出力パラメータを含む。
(1)コピー終了までに検出した無効データ数
(2)コピー先ブロックにコピーしたデータの総数: このパラメータ値は、コピー先ブロックに実際にコピーされたデータの総数を示す。コピー終了までに検出すべき無効データ数が終了条件として指定された場合、コピー先ブロックに実際にコピーされるデータの総数は不定である。このため、このパラメータ値は、コピー終了までに検出すべき無効データ数が終了条件として指定された場合において有用である。
(3)コピー先ブロックにコピーしたデータの識別子とコピー先の記録位置の組: このパラメータ値は、どの有効データがコピー先ブロック内のどこにコピーされたかを示す。
(4)次回にコピーを開始すべきデータの位置: このパラメータ値は、次回のコピーにおけるコピー元ブロック内のコピー開始位置を示す。
(5)リード可能最新ページアドレス: このパラメータ値は、コピー先ブロック内で、読み出し可能なデータを保持する最新ページアドレスを示す。
[データコピー処理の手順]
図49のフローチャートは、コピーすべき有効データ数が終了条件として指定された場合におけるデータコピー動作の手順を示す。
コントローラ4は、まず、データコピーコマンドによって指定されるコピー元ブロック内のコピー開始位置(コピー元開始ページ)を現在のコピー対象ページとして設定する。そして、コントローラ4は、ビットマップデータに基づいて、現在のコピー対象ページが有効データであるか否かを判定する(ステップS91)。
現在のコピー対象ページが無効データであるならば(ステップS91のNO)、コントローラ4は、現在のコピー対象ページのコピー動作をスキップし(ステップS92)、現在のコピー対象ページを次のページに変更する(ステップS93)。
現在のコピー対象ページが有効データであるならば(ステップS91のYES)、コントローラ4は、現在のコピー対象ページからこの有効データをリードし(ステップS94)、このリードされた有効データをコピー先ブロックの転送先開始ページに書き込む(ステップS95)。コントローラ4は、コピーした有効データ数を更新し(ステップS96)、コピーした有効データ数が、コピーすべき有効データ数に達したか否かを判定する(ステップS97)。
コピーした有効データ数が、コピーすべき有効データ数に達していないならば(ステップS97のNO)、コントローラ4は、現在のコピー対象ページを次のページに変更し(ステップS98)、そしてステップS91〜S97の処理を再び実行する。
コピーした有効データ数が、コピーすべき有効データ数に達したならば(ステップS97のYES)、コントローラ4は、終了処理を実行する(ステップS99)。ステップS99では、コントローラ4は、返り値のデータを作成し、返り値のデータを含むコマンド完了レスポンスをホスト2に送信する。
図50のフローチャートは、検出すべき無効データ数が終了条件として指定された場合におけるデータコピー動作の手順を示す。
コントローラ4は、まず、データコピーコマンドによって指定されるコピー元ブロック内のコピー開始位置(コピー元開始ページ)を現在のコピー対象ページとして設定する。そして、コントローラ4は、ビットマップデータに基づいて、現在のコピー対象ページが有効データであるか否かを判定する(ステップS101)。
現在のコピー対象ページが有効データであるならば(ステップS101のYES)、コントローラ4は、現在のコピー対象ページからこの有効データをリードし(ステップS102)、このリードされた有効データをコピー先ブロックの転送先開始ページに書き込む(ステップS103)。コントローラ4は、現在のコピー対象ページを次のページに変更し(ステップS104)、ステップS101の処理に進む。
現在のコピー対象ページが無効データであるならば(ステップS101のNO)、コントローラ4は、現在のコピー対象ページのコピーをスキップし(ステップS105)、検出した無効データ数を更新(ステップS106)し、そして、検出した無効データ数が、検出すべき無効データ数に達したか否かを判定する(ステップS107)。
検出した無効データ数が、検出すべき無効データ数に達していないならば(ステップS107のNO)、コントローラ4は、現在のコピー対象ページを次のページに変更し(ステップS108)、ステップS101の処理に進む。
検出した無効データ数が、検出すべき無効データ数に達しているならば(ステップS107のYES)、コントローラ4は、終了処理を実行する(ステップS109)。ステップS109では、コントローラ4は、返り値のデータを作成し、返り値のデータを含むコマンド完了レスポンスをホスト2に送信する。
図51のフローチャートは、データサイズがページサイズよりも小さく且つコピーすべき有効データ数が終了条件として指定された場合におけるデータコピー動作の手順を示す。
コントローラ4は、まず、データコピーコマンドによって指定されるコピー元ブロック内のコピー開始位置(コピー元開始ページ)を現在のコピー対象ページとして設定する。そして、コントローラ4は、ビットマップデータに基づいて、現在のコピー対象ページが少なくとも一つの有効データを含むか否かを判定する(ステップS111)。
現在のコピー対象ページが無効データのみを含むページであるならば(ステップS111のNO)、コントローラ4は、現在のコピー対象ページのコピー動作をスキップし(ステップS112)、現在のコピー対象ページを次のページに変更し(ステップS113)、ステップS111の処理に進む。
現在のコピー対象ページが少なくとも一つの有効データを含むページであるならば(ステップS111のYES)、コントローラ4は、現在のコピー対象ページ内のデータをページ単位でリードし、リードしたデータをコピーバッファ32に格納する(ステップS114)。コントローラ4は、リードしたデータから有効データだけを抽出し、これによって無効データをスキップして、ページサイズにアラインされた有効データのセットを準備する(ステップS115)。コントローラ4は、ページサイズにアラインされた有効データのセット(1ページ分のサイズを有する有効データ)が準備できたか否かを判定する(ステップS116)。
準備された有効データのサイズが1ページ分のサイズよりも少ないならば(ステップS116のNO)、コントローラ4は、現在のコピー対象ページを次のページに変更し(ステップS117)、ステップS111〜S115の処理を再び実行する。
ページサイズにアラインされた有効データのセット(1ページ分のサイズを有する有効データ)が準備できたならば(ステップS116のYES)、コントローラ4は、この1ページ分のサイズを有する有効データをコピー先ブロックの転送先開始ページに書き込む(ステップS118)。コントローラ4は、コピーした有効データ数を更新し(ステップS119)、コピーした有効データ数が、コピーすべき有効データ数以上になったか否かを判定する(ステップS120)。
コピーした有効データ数が、コピーすべき有効データ数よりも少ないならば(ステップS120のNO)、コントローラ4は、現在のコピー対象ページを次のページに変更し(ステップS117)、そしてステップS111からの処理を再び実行する。
コピーした有効データ数が、コピーすべき有効データ数以上ならば(ステップS120のYES)、コントローラ4は、終了処理を実行する(ステップS121)。ステップS121では、コントローラ4は、返り値のデータを作成し、返り値のデータを含むコマンド完了レスポンスをホスト2に送信する。
図52のフローチャートは、データサイズがページサイズよりも小さく且つ検出すべき無効データ数が終了条件として指定された場合におけるデータコピー動作の手順を示す。
図52の処理では、図51のステップS119、S120の代わりに、ステップS131、S132の処理が実行される。
すなわち、ページサイズにアラインされた有効データのセット(1ページ分のサイズを有する有効データ)をコピー先ブロックの転送先開始ページに書き込んだ後(ステップS118)、コントローラ4は、検出された無効データ数を更新し(ステップ131)、検出された無効データ数が、検出すべき無効データ数以上であるか否かを判定する(ステップS132)。
検出された無効データ数が、検出すべき無効データ数よりも少ないならば(ステップS132のNO)、コントローラ4は、現在のコピー対象ページを次のページに変更し(ステップS117)、そしてステップS111からの処理を再び実行する。
検出した無効データ数が、検出すべき無効データ数以上ならば(ステップS132のYES)、コントローラ4は、終了処理を実行する(ステップS121)。
[ネームスペース管理]
図53は、SSD3のネームスペース管理機能を示す。
SSD3においては、NSID#1のネームスペースに対して指定された個数のブロックを確保(予約)することができ、同様にNSID#nのネームスペースに対しても指定された個数のブロックを確保(予約)することができる。ホスト2に接続されたあるクライアント端末51(ユーザA)は、NSID#1を使用してSSD3をアクセス(リード、ライト、消去)することができ、またホスト2に接続された別のクライアント端末51(ユーザB)は、NSID#nを使用してSSD3をアクセス(リード、ライト、消去)することができる。
いま、ユーザAが更新頻度の高いデータを扱い、ユーザBが更新頻度の低いデータを扱う場合を想定する。この場合、NSID#1のネームスペースにおいてはライトアンプリフィケーションが増加する可能性がある。ライトアンプリフィケーション(WA)は、以下のように定義される。
WA=「SSDにライトされたデータの総量」 / 「ホストからのライトコマンドによってSSDにライトされたデータの総量」
「SSDにライトされたデータの総量」は、ホストからのライトコマンドによってライトされたデータの総量とガベージコレクション(データコピー動作)等によって内部的にSSDにライトされたデータの総量との和に相当する。
ライトアンプリフィケーション(WA)の増加は、SSD3内のブロックそれぞれの消去回数の増加を引き起こす。つまり、ライトアンプリフィケーション(WA)が大きい程、ブロックの消去回数が、その消去回数の上限値に速く達しやすくなる。この結果、SSD3の耐久性および寿命の劣化が引き起こされる。
したがって、NSID#1のネームスペースへの書き込みに起因するSSD3の消耗度は、NSID#nのネームスペースへの書き込みに起因するSSD3の消耗度より大きい。
SSD3のネームスペース管理機能は、個々のネームスペース毎にブロック(または仮想ブロック)の合計消去回数を管理し、ホスト2によって指定された特定のネームスペースに対応する合計消去回数をホスト2に対してこの特定のネームスペースによるSSD3の消耗度の指標として通知することができる。NSID#1の合計消去回数は合計消去回数カウンタ300−1によってカウントされ、NSID#nの合計消去回数は合計消去回数カウンタ300−nによってカウントされる。あるNSIDの合計消去回数は、このNSIDに割り当てられたブロックに対して実行される消去動作の回数をカウントすることによって得られる。
この通知により、ホスト2は、個々のネームスペースがどのくらいSSD3を消耗させているかを評価することができる。この結果、ホスト2は、この評価結果に基づいて、合計消去回数の多いネームスペースに対してより多くの個数のブロックを追加的に確保するといった対策を行うことができる。
例えば、ホストソフトウェアは、NSID#1のネームスペースに関しては、NSID#1のLBA範囲に対応する容量(ユーザデータ容量)を超える十分な個数のブロックの確保をSSD3に要求してもよい。この要求に応答して、SSD3のコントローラ4は、指定された個数のブロックを、NSID#1のネームスペース用に確保する。
NSID#1のLBA範囲に対応する容量が100Gバイトである場合、ホストソフトウェアは、100Gバイトに相当する個数の物理ブロックの追加をSSD3に要求して合計200Gバイトに相当する個数の物理ブロックをNSID#1のネームスペース用に確保してもよい。200Gバイトからユーザデータ容量を引いた残りの100GBの物理リソースは、NSID#1のネームスペースのオーバープロビジョン領域として機能する。
別の実施形態では、ホストソフトウェアは、NSID#1のネームスペース用に確保されたブロックの数と、このネームスペースに対応する合計消去回数とに基づいて、このネームスペースを使用しているユーザAに課金すべきストレージ使用料(レンタル料)を決定してもよい。合計消去回数が多いほど、レンタル料は高く設定されてもよい。
図54は、SSD3のネームスペース管理アーキテクチャを示す。
コントローラ4は、NANDメモリ4のフリーブロックを共通フリーブロックプール90で管理し、幾つかのブロックを、共通フリーブロックプール90からNSID#1のネームスペースに割り当てる。これら割り当てられたブロックは、NSID#1のネームスペースに関連づけられたデータの格納のために使用される。つまり、コントローラは、みれら幾つかのブロックを、NSID#1のネームスペースに関連づけられたデータを格納するためのブロックとしてNSID#1のネームスペースに割り当てる。ホスト2からの、これらブロックの一つをリード、ライトまたは消去するためのコマンドの受信に応答して、コントローラ4は、これらブロックの一つに対するリード動作、ライト動作、または消去動作を実行する。コントローラ4は、これらブロックに対して実行される消去動作の回数をカウントする。コントローラ4は、ホスト2からの、NSID#1のネームスペースに関連づけられた消去回数の取得を要求するコマンドの受信に応答して、消去動作の回数のカウント値(NSID#1の合計消去回数)をホスト2に通知する。NSID#nのネームスペースについても、コントローラ4は、NSID#1のネームスペースに対する処理と同様の処理を実行する。
以下、ネームスペース管理アーキテクチャについて説明する。
SSD3においては、ネームスペースごとに独立した仮想フラッシュプールが設けられている。仮想フラッシュプール81は、NSID#1のネームスペース用に確保(予約)された物理リソース量(確保されたブロックの総数)を管理するために使用される。同様に、仮想フラッシュプール82は、NSID#nのネームスペース用に確保(予約)された物理リソース量(確保されたブロックの総数)を管理するために使用される。この場合、どのブロックを確保(予約)すべきかを考慮する必要は無く、確保(予約)すべきブロックの個数のみが各仮想フラッシュプールで管理される。確保すべきブロックの個数は、物理NANDアクセス管理API21では物理ブロックの個数であり、仮想NANDアクセス管理API22では仮想ブロックの個数である。
フリーブロックそれぞれは複数のネームスペースによって共有される共通フリーブロックプール90で管理される。各ネームスペースの仮想フラッシュプールから返却されたブロックは、共通フリーブロックプール90で管理される。
ウェアレベリングは、共通フリーブロックプール90から各ネームスペースに新たなブロック(例えば、書き込み対象ブロック、または書き込み対象仮想ブロック)を割り当てる際に行われる。コントローラ4が、特定のNSIDを含むブロック割り当てコマンド(例えば上述のブロック割り当て・消去コマンド)をホスト2から受信した時、コントローラ4は、共通フリーブロックプール90から一つのフリーブロックを選択する。選択されるフリーブロックは、物理NANDアクセス管理API21が使用されるケースにおいては物理ブロックであり、仮想NANDアクセス管理API22が使用されるケースにおいては仮想ブロックである。コントローラ4は、この選択したブロックを、この特定のNSIDに対応するネームスペースに割り当て、且つこのネームスペース用に確保されたブロックの総数を1だけ減算する。共通フリーブロックプール90からのフリーブロックの選択においては、コントローラ4は、最少消去回数のブロック(最少消去回数の物理ブロックまたは最少消去回数の仮想ブロック)を選択してもよい。これにより、NSID#nのネームスペースから返却される消去回数の少ないブロックを、頻繁にデータが書き替えられるNSID#1のネームスペースに割り当てる事ができるので、ネームスペース間でのウェアレベリングを実現できる。
コントローラ4は、NSID#1のネームスペースに対応する管理情報として、NSID#1用に確保されたブロックの総数、NSID#1用に割り当てられたブロックアドレスのリスト、およびNSID#1の合計消去回数等を管理する。NSID#1の合計消去回数は、NSID#1に割り当てられたブロックそれぞれに対して実行される消去動作の回数をカウントすることによって得られる。
NSID#1のネームスペース管理は次のように実行されてもよい。以下では、物理NANDアクセス管理API21用のネームスペース管理について例示する。
コントローラ4が、NSID#1を含むネームスペース割り当てコマンドをホスト2から受信した時、コントローラ4は、ネームスペース割り当てコマンドによって指定された個数のブロックをNSID#1用に確保する。NSID#1用に確保されているブロックの総数は仮想フラッシュプール81によって管理される。NSID#1のネームスペースに割り当て可能なブロックの数の上限は、NSID#1用に確保されたブロックの総数以下に制限される。
コントローラ4が、NSID#1を含むブロック割り当て・消去コマンドをホスト2から受信した時、コントローラ4は、共通フリーブロックプール90から最少消去回数のブロックを選択し、この選択したフリーブロックをNSID#1のネームスペース用に割り当て、この割り当てたブロックを消去し、この割り当て且つ消去されたブロックの物理アドレスをホスト2に通知し、且つ仮想フラッシュプール81によって管理されているブロックの総数、つまりNSID#1に割り当て可能な残りブロックの数、を1だけ減算する。NSID#1に割り当て可能な残りブロックの数は、NSID#1のネームスペースに用に割り当て可能なブロックの現在の個数を示す。この割り当ておよび消去されたブロックは、例えば、NSID#1用の書き込み対象ブロック91として使用することができる。
もし仮想フラッシュプール81によって管理されているブロックの現在の総数(残りブロックの数)がゼロの場合には、たとえNSID#1を含むブロック割り当て・消去コマンドがホスト2から受信されても、コントローラ4は、NSID#1のネームスペースに対して新たなブロックを割り当てない。
コントローラ4が、NSID#1を含むライトコマンドをホスト2から受信した時、コントローラ4は、ライトコマンドによって指定されるデータを書き込み対象ブロック91に書き込む。ライトコマンドは、データが書き込まれるべき物理アドレス(ブロックアドレスとページアドレスの双方)を含んでいてもよいし(直接アドレス指定モード)、データが書き込まれるべきブロックアドレスのみを含んでいてもよいし(自動アドレス生成モード)、あるいはNSID#1のみを含んでいてもよい。
ライトコマンドがNSID#1のみを含む場合には、自動アドレス生成モードの場合と同様に、データが書き込まれるべき物理アドレスはコントローラ4によって自動生成される。この場合、ライトコマンドによって指定されたデータは、現在の書き込み対象ブロック91内のページP0〜P255の順序で書き込まれる。コントローラ4は、データが書き込まれた物理アドレス(ブロックアドレスとページアドレスの双方)をホスト2に通知する。
現在の書き込み対象ブロック91がデータで満たされた時、この書き込み対象ブロック91はアクティブブロックプール92に移動されてもよい。アクティブブロックプール92は、NSID#1によって現在使用されているブロック(アクティブブロック)のリストを管理する。現在の書き込み対象ブロック91がデータで満たされた時、ホスト2は、NSID#1を含むブロック割り当て・消去コマンドをSSD3に送信して、新たな書き込み対象ブロックの割り当て・消去を要求してもよい。
ホスト2は、アクティブブロックプール92内の任意のブロックをリードまたは消去することができる。また、ホスト2は、ブロック返却コマンドをSSD3に送信し、アクティブブロックプール92内のブロックを共通フリーブロックプール90に返却することをSSD3に要求することができる。例えば、消去したブロック、データ更新によって無効化されたデータのみを含むブロック、あるいは上述のデータコピー動作等によって無効化されたデータのみを含むブロック等が返却される。コントローラ4は、ブロック返却コマンドの受信に応答して、このブロック返却コマンドによって指定されるブロックを共通フリーブロックプール90に移動すると共に、仮想フラッシュプール81によって管理されているブロックの総数(残りブロックの数)を1だけ増やす。
コントローラ4は、NSID#nのネームスペースに対応する管理情報、確保されたブロックの総数、割り当てられたブロックアドレスのリスト、およびNSID#nの合計消去回数等も管理する。
NSID#nのネームスペース管理は次のように実行される。
コントローラ4が、NSID#nを含むネームスペース割り当てコマンドをホスト2から受信した時、コントローラ4は、ネームスペース割り当てコマンドによって指定された個数のブロックをNSID#n用に確保する。NSID#n用に確保されているブロックの総数は仮想フラッシュプール82によって管理される。
コントローラ4が、NSID#nを含むブロック割り当て・消去コマンドをホスト2から受信した時、コントローラ4は、共通フリーブロックプール90から最少消去回数のブロックを選択し、この選択したフリーブロックをNSID#nのネームスペース用に割り当て、この割り当てたブロックを消去し、且つ仮想フラッシュプール82によって管理されているブロックの総数、つまりNSID#nに割り当て可能な残りブロックの数、を1だけ減算する。この割り当ておよび消去されたブロックは、例えば、NSID#n用の書き込み対象ブロック93として使用することができる。
もし仮想フラッシュプール82によって管理されているブロックの現在の総数(残りブロックの数)がゼロの場合には、たとえNSID#nを含むブロック割り当て・消去コマンドがホスト2から受信されても、コントローラ4は、NSID#nのネームスペースに対して新たなブロックを割り当てない。
コントローラ4が、NSID#nを含むライトコマンドをホスト2から受信した時、コントローラ4は、ライトコマンドによって指定されるデータを書き込み対象ブロック93に書き込む。ライトコマンドは、データが書き込まれるべき物理アドレス(ブロックアドレスとページアドレスの双方)を含んでいてもよいし(直接アドレス指定モード)、データが書き込まれるべきブロックアドレスのみを含んでいてもよいし(自動アドレス生成モード)、あるいはNSID#nのみを含んでいてもよい。
ライトコマンドがNSID#nのみを含む場合には、自動アドレス生成モードの場合と同様に、データが書き込まれるべき物理アドレスはコントローラ4によって自動生成される。この場合、ライトコマンドによって指定されたデータは、現在の書き込み対象ブロック93内のページP0〜P255に順次書き込まれる。コントローラ4は、データが書き込まれた物理アドレス(ブロックアドレスとページアドレスの双方)をホスト2に通知する。
現在の書き込み対象ブロック93がデータで満たされた時、この書き込み対象ブロック93はアクティブブロックプール94に移動されてもよい。アクティブブロックプール94は、NSID#nによって現在使用されているブロックのリストを管理する。現在の書き込み対象ブロック93がデータで満たされた時、ホスト2は、NSID#nを含むブロック割り当て・消去コマンドをSSD3に送信して、新たな書き込み対象ブロックの割り当て・消去を要求してもよい。
ホスト2は、アクティブブロックプール94内の任意のブロックをリードまたは消去することができる。また、ホスト2は、ブロック返却コマンドをSSD3に送信し、アクティブブロックプール94内のブロックの返却をSSD3に要求することができる。コントローラ4は、ブロック返却コマンドの受信に応答して、このブロック返却コマンドによって指定されるブロックを共通フリーブロックプール90に移動すると共に、仮想フラッシュプール82によって管理されているブロックの総数(残りブロックの数)を1だけ増やす。
仮想NANDアクセス管理API22用のネームスペース管理も、物理NANDアクセス管理API21用のネームスペース管理と同様の手順で実行することができる。仮想NANDアクセス管理API22用のネームスペース管理では、確保されたブロックの個数の代わりに確保された仮想ブロックの個数が管理され、割り当てられたブロックアドレスのリストの代わりに割り当てられた仮想ブロックアドレスのリストが管理されてもよい。
また、仮想NANDアクセス管理API22用のネームスペース管理では、NSID#1に割り当てられた仮想ブロックに対して実行された消去動作の回数をカウントすることによって得られるカウント値がNSID#1の合計消去回数として管理されてもよく、NSID#nに割り当てられた仮想ブロックに対して実行された消去動作の回数をカウントすることによって得られるカウント値が、NSID#nの合計消去回数として管理されてもよい。
[ネームスペース割り当てコマンド]
図55は、ネームスペース割り当てコマンドを示す。ネームスペース割り当てコマンドは、SSD3に対して、このネームスペース割り当てコマンドによって指定された数のブロックの確保(または追加)を要求する。
ネームスペース割り当てコマンドは、以下の入力パラメータを含む。
(1)NSID: この入力パラメータ値は、対象ネームスペースの識別子(ID)を示す。
(2)物理リソース量: この物理リソース量は、確保されるべきブロックの数を示す。物理NANDアクセス管理API21では、確保されるべきブロックの数は、ブロック(物理ブロック)の粒度で指定され、仮想NANDアクセス管理API22では、確保されるべきブロックの数は、仮想ブロック(一つの仮想ブロックを構成する複数ブロック)の粒度で指定される。
また、ネームスペース割り当てコマンドは、処理優先度を示す入力パラメータを含んでもよい。
ネームスペース割り当てコマンドは、以下の出力パラメータを含む。
(1)物理リソース量: この物理リソース量は、確保されたブロックの数を示す。物理NANDアクセス管理API21では、確保されたブロックの数は、ブロック(物理ブロック)の粒度で示され、仮想NANDアクセス管理API22では、確保されたブロックの数は、仮想ブロック(一つの仮想ブロックを構成する複数ブロック)の粒度で示される。
[ネームスペース割り当て処理の手順]
図56のフローチャートは、SSD3によって実行されるネームスペース割り当て処理の手順を示す。
SSD3のコントローラ4は、ネームスペース割り当てコマンドをホスト2から受信する(ステップS141)。ネームスペース割り当てコマンド内の入力パラメータ(物理リソース量)によって指定された個数のブロックを確保可能か否かを、共通フリーブロックプール90内の残りブロックの個数に基づいて判定する(ステップS142)。上述したように、物理NANDアクセス管理API21では、確保されるべきブロックの数が、ブロック(物理ブロック)の粒度で指定され、仮想NANDアクセス管理API22では、確保されるべきブロックの数が、仮想ブロック(一つの仮想ブロックを構成する複数ブロック)の粒度で指定される。
残りブロック(または残り仮想ブロック)の個数が、指定された個数以上であるならば(ステップS142のYES)、コントローラ4は、ネームスペース割り当てコマンドによって指定されたNSIDのネームスペースのために、指定された個数のブロック(または仮想ブロック)を確保し(ステップS143)、そして確保されたブロック(または仮想ブロック)の個数を示す出力パラメータを含むコマンド完了レスポンスをホスト2に送信する(ステップS144)。
残りブロック(または残り仮想ブロック)の個数が、指定された個数よりも少ないならば(ステップS142のNO)、コントローラ4は、エラーをホスト2に通知する(ステップS145)。エラーが報告されたホスト2は、確保すべきブロック(または仮想ブロック)の個数を変更してもよい。
[ネームスペース用のブロック割り当て・消去コマンド]
図57は、ネームスペース用のブロック割り当て・消去コマンドを示す。
ネームスペース用のブロック割り当て・消去コマンド、以下の入力パラメータを含む。
(1)処理優先度: 処理優先度はこのコマンドの優先度を示す。
(2)NSID: NSIDはブロック(または仮想ブロック)が割り当てられるべきネームスペースのIDを示す。
ネームスペース用のブロック割り当て・消去コマンドは、以下の出力パラメータを含む。
(1)終了ステータス: ブロック割り当て・消去コマンドの成功またはエラーを示す終了ステータスがホスト2に返される。
(2)ブロックアドレス: 割り当てられたブロックのブロックアドレス(または割り当てられた仮想ブロックの仮想ブロックアドレス)がホスト2に返される。
(3)残りブロック数: このNSID用に確保された残りブロックの数(または残り仮想ブロックの数)がホスト2に返される。
[ネームスペース用のブロック割り当て・消去処理の手順]
図58のフローチャートは、SSD3によって実行されるブロック割り当て・消去処理の手順を示す。ここでは、物理NANDアクセス管理API21のためのブロック割り当て・消去処理を例示して説明する。
SSD3のコントローラ4は、NSIDを含むブロック割り当て・消去コマンドをホスト2から受信する(ステップS151)。コントローラ4は、このNSID用の残りブロックがあるか否かを判定する(ステップS152)。
このNSID用の残りブロックがあるならば(ステップS152のYES)、コントローラ4は、共通フリーブロックプール90から一つのブロックを、指定されたNSID用の書き込み対象ブロックとして割り当て、割り当てたブロックを自動消去する(ステップS152)。コントローラ4は、指定されたNSID用の残りブロック数から1を減算する(ステップS154)。コントローラ4は、指定されたNSIDに対応する合計消去回数を更新する(ステップS155)。ステップS155では、コントローラ4は、この指定されたNSIDに対応する合計消去回数を+1だけ増やす。そして、コントローラ4は、返り値(出力パラメータ)を生成し、返り値を含むコマンド完了レスポンスをホスト2に送信する(ステップS156)。
一方、このNSID用の残りブロックがないならば(ステップS152のNO)、コントローラ4は、このNSID用に確保された残りブロック数がゼロであるため新たなブロックが割り当てられないことを表すエラーステータスを含むコマンド完了レスポンスをホスト2に送信する(ステップS157)。
仮想NANDアクセス管理API22のためのブロック割り当て・消去処理においては、コントローラ4は、このNSID用の残り仮想ブロックがあるか否かを判定する(ステップS152)。
このNSID用の残り仮想ブロックがあるならば(ステップS152のYES)、コントローラ4は、共通フリーブロックプール90から一つの仮想ブロックを、指定されたNSID用の書き込み対象ブロック(書き込み対象仮想ブロック)として割り当て、割り当てた仮想ブロックを自動消去する(ステップS152)。コントローラ4は、指定されたNSID用の残り仮想ブロック数から1を減算する(ステップS154)。コントローラ4は、指定されたNSIDに対応する合計消去回数を更新する(ステップS155)。ステップS155では、コントローラ4は、この指定されたNSIDに対応する合計消去回数を+1だけ増やす。そして、コントローラ4は、返り値(出力パラメータ)を生成し、返り値を含むコマンド完了レスポンスをホスト2に送信する(ステップS156)。
一方、このNSID用の残り仮想ブロックがないならば(ステップS152のNO)、コントローラ4は、このNSID用に確保された残り仮想ブロック数がゼロであるため新たなブロックが割り当てられないことを表すエラーステータスを含むコマンド完了レスポンスをホスト2に送信する(ステップS157)。
[ネームスペース用の消去コマンド]
図59は、あるネームスペースに割り当てられた特定のブロックを消去するための消去コマンドを示す。
この消去コマンドは、以下の入力パラメータを含む。
(1)ブロックアドレス: この入力パラメータ値は消去されるべきブロックのブロックアドレスを示す。仮想NANDアクセス管理API22用の消去コマンドにおいては、この入力パラメータ値は、ブロックアドレスの代わりに、消去されるべき仮想ブロックの仮想ブロックアドレスを示す。
(2)処理優先度: この入力パラメータ値はこのコマンドの優先度を示す。
(3)NSID: この入力パラメータ値は消去されるべきブロック(または仮想ブロック)に対応するNSIDを示す。
この消去コマンドは、以下の出力パラメータを含む。
(1)終了ステータス: この消去コマンドの成功またはエラーがホストに返される
(2)ブロックアドレス: この出力パラメータ値は、消去されたブロックのブロックアドレスを示す。仮想NANDアクセス管理API22用の消去コマンドにおいては、この出力パラメータ値は、消去された仮想ブロックの仮想ブロックアドレスを示す。
(3)合計消去回数: この出力パラメータ値は、このNSIDに割り当てられたブロックそれぞれの消去回数の合計を示す。仮想NANDアクセス管理API22用の消去コマンドにおいては、この出力パラメータ値は、このNSIDに割り当てられた仮想ブロックそれぞれの消去回数の合計を示す。
[消去処理の手順]
図60のフローチャートは、SSD3によって実行される消去処理の手順を示す。ここでは、物理NANDアクセス管理API21のための消去処理を例示して説明する。
SSD3のコントローラ4は、消去コマンドをホスト2から受信する(ステップS171)。コントローラ4は、この消去コマンドによって指定されたブロックを消去するための消去動作を実行し(ステップS172)、この消去されたブロックの消去回数を+1だけ増やし(ステップS173)、そして、この消去されたブロックが割り当てられているNSIDに対応する合計消去回数を+1だけ増やす(ステップS174)。消去コマンドがNSIDを含む場合には、この消去されたブロックが割り当てられているNSIDは、この消去コマンド内のNSIDによって特定される。一方、消去コマンドがNSIDを含まない場合には、この消去されたブロックが割り当てられているNSIDは、この消去されたブロックのブロックアドレスと、各NSIDに割り当てられているブロックアドレスのリストとに基づいて特定されてもよい。
そして、返り値(出力パラメータ)を生成し、返り値を含むコマンド完了レスポンスをホスト2に送信する(ステップS175)。
仮想NANDアクセス管理API22のための消去処理においては、コントローラ4は、この消去コマンドによって指定された仮想ブロック内の複数個のブロックを消去するための消去動作を実行し(ステップS172)、この消去された仮想ブロックの消去回数を+1だけ増やし(ステップS173)、そして、この消去された仮想ブロックが割り当てられているNSIDに対応する合計消去回数を+1だけ増やす(ステップS174)。
[ブロック返却コマンド]
図61は、SSD3に適用されるブロック返却コマンドを示す。このブロック返却コマンドは、特定のネームスペースに対応するアクティブブロックプール内のブロックを共通フリーブロックプール90に返却するために使用される。
このブロック返却コマンドは、以下の入力パラメータを含む。
(1)ブロックアドレス: この入力パラメータ値は返却されるべきブロックのブロックアドレスを示す。仮想NANDアクセス管理API22用のブロック返却コマンドにおいては、この入力パラメータ値は、ブロックアドレスの代わりに、返却されるべき仮想ブロックの仮想ブロックアドレスを示す。
(2)処理優先度: この入力パラメータ値はこのコマンドの優先度を示す。
(3)NSID: この入力パラメータ値は返却されるべきブロック(または仮想ブロック)に対応するNSIDを示す。
このブロック返却コマンドは、以下の出力パラメータを含む。
(1)終了ステータス: このブロック返却コマンドの成功またはエラーがホストに返される
(2)残りブロック数: この出力パラメータ値は、ブロック返却後の残りブロック数を示す。仮想NANDアクセス管理API22用のブロック返却コマンドにおいては、この出力パラメータ値は、仮想ブロック返却後の残り仮想ブロック数を示す。
[ブロック返却処理の手順]
図62のフローチャートは、SSD3によって実行されるブロック返却処理の手順を示す。ここでは、物理NANDアクセス管理API21のためのブロック返却処理を例示して説明する。
SSD3のコントローラ4は、ブロック返却コマンドをホスト2から受信する(ステップS181)。コントローラ4は、このブロック返却コマンドによって指定されたブロックを、このブロック返却コマンドによって指定されたNSIDに対応するアクティブブロックプールから共通フリーブロックプール90に移動させる(ステップS182)。これにより、このNSIDに対するこのブロックの割り当ては解除され、このブロックは有効データを含まないフリーブロックとして共通フリーブロックプール90にて管理される。
コントローラ4は、指定されたNSIDに対応する残りブロック数を1だけ増やす(ステップS183)。そして、コントローラ4は、返り値(出力パラメータ)を生成し、返り値を含むコマンド完了レスポンスをホスト2に送信する(ステップS184)。
仮想NANDアクセス管理API22のためのブロック返却処理においては、コントローラ4は、このブロック返却によって指定された仮想ブロックを共通フリーブロックプール90に移動させ(ステップS182)、指定されたNSIDに対応する残り仮想ブロック数を1だけ増やし(ステップS183)、そして返り値を含むコマンド完了レスポンスをホスト2に送信する(ステップS184)。
[消去回数ゲットコマンド]
図63は、SSD3に適用される、ネームスペース用の消去回数ゲットコマンドを示す。この消去回数ゲットコマンドは、SSD3に対して、特定のネームスペースの合計消去回数を通知すべきことを要求する。
消去回数ゲットコマンドは、以下の入力パラメータを含む。
(1)NSID: この入力パラメータ値は対象NSIDを示す。この入力パラメータ値がある特別な値である場合、全てのNSIDが対象NSIDとして決定されてもよい。
(2)処理優先度: この入力パラメータ値はこのコマンドの優先度を示す。
消去回数ゲットコマンドは、以下の出力パラメータを含む。
(1)終了ステータス: この消去回数ゲットコマンドの成功またはエラーがホストに返される
(2)合計消去回数: この出力パラメータ値は、指定されたNSIDの合計消去回数を示す。
[消去回数通知処理]
図64のフローチャートは、SSD3によって実行される消去回数通知処理の手順を示す。ここでは、物理NANDアクセス管理API21のための消去回数通知処理を例示して説明する。
SSD3のコントローラ4が消去回数ゲットコマンドをホスト2から受信した時、コントローラ4は、この消去回数ゲットコマンドによって特定のNSIDが指定されたか、あるいは全てのNSIDが指定されたかを判定する(ステップS191)。
特定のNSIDが指定されたならば(ステップS191のYES)、コントローラ4は、この特定のNSIDの現在の合計消去回数(カウント値)を取得し(ステップS192)、この特定のNSIDの現在の合計消去回数を含むコマンド完了レスポンスをホスト2に送信する(ステップS194)。
全てのNSIDが指定されたならば(ステップS191のNO)、コントローラ4は、全てのNSIDにそれぞれ対応する現在の合計消去回数のリストを取得し(ステップS193)、全てのNSIDにそれぞれ対応する現在の合計消去回数のリストを含むコマンド完了レスポンスをホスト2に送信する(ステップS194)。
仮想NANDアクセス管理API22のための消去回数通知処理においては、指定された特定のNSIDに割り当てられた仮想ブロックそれぞれに対して実行された消去動作の回数がカウントされ、このカウント値が、指定された特定のNSIDの合計消去回数としてホスト2に通知される。
ここでは、消去回数ゲットコマンドによって指定されたNSIDの合計消去回数をホスト2に通知する処理を説明したが、NSIDの代わりに、ブロックアドレスまたは仮想ブロックアドレスのいずれかを指定するパラメータを含む消去回数ゲットコマンドを使用することもできる。
物理NANDアクセス管理API21用の消去コマンドはブロックアドレス(ブロックを指定する物理アドレス)を含む。コントローラは、ホスト2から受信される消去コマンド内のブロックアドレスによって指定されるブロックを消去し、グループ#Y内のブロックそれぞれの消去回数を管理し、ホスト2から、あるブロックアドレスを含む消去回数ゲットコマンドが受信された場合、この消去回数ゲットコマンド内のブロックアドレスによって指定されるブロックの消去回数をホスト2に通知する。
仮想NANDアクセス管理API22用の消去コマンドは仮想ブロックアドレス(仮想ブロックを指定する物理アドレス)を含む。コントローラは、ホスト2から受信される消去コマンド内の仮想ブロックアドレスによって指定される仮想ブロック内の複数個のブロックを消去し、グループ#X内の仮想ブロックそれぞれの消去回数を管理し、ホスト2から、ある仮想ブロックアドレスを含む消去回数ゲットコマンドが受信された場合、この消去回数ゲットコマンド内の仮想ブロックアドレスによって指定される仮想ブロックの消去回数をホスト2に通知する。
[ネームスペース管理のための他のコマンド]
コントローラ4は、ネームスペース解体コマンドもサポートする。ネームスペース解体コマンドは、コントローラ4に対して、ネームスペースの削除(解体)を要求する。ネームスペース解体コマンドは、この特定のNSIDに現在割り当てられているブロックの数(解体すべきブロック数)を示す入力パラメータを含んでいてもよい。このブロックの数は、物理NANDアクセス管理API21においてはこの特定のNSIDに現在割り当てられている物理ブロックの数であり、仮想NANDアクセス管理API22においてはこの特定のNSIDに現在割り当てられている仮想ブロックの数である。ホスト2からの、特定のNSIDを含むネームスペース解体コマンドの受信に応答して、コントローラ4は、この特定のNSIDに対応する仮想フラッシュプール内の全てのブロックを共通フリーブロック90にフリーブロックとして移動する。そして、コントローラ4は、ネームスペース解体コマンドに対するコマンド完了のレスポンスをホスト2に送信する。このコマンド完了のレスポンスは、解体されたブロックの数を示す返り値を含んでいてもよい。
ホスト2は、上述のネームスペース割り当てコマンドおよびネームスペース解体コマンドを使用することによって、ネームスペースを増減することができる。
[ホスト構成]
図65は、ホスト2として機能する情報処理装置のハードウェア構成例を示す。
この情報処理装置は、サーバコンピュータ、またはパーソナルコンピュータとして実現される。この情報処理装置は、プロセッサ(CPU)101、メインメモリ102、BIOS−ROM103、ネットワークコントローラ105、周辺インタフェースコントローラ106、コントローラ107、およびエンベデッドコントローラ(EC)108等を含む。
プロセッサ101は、この情報処理装置の各コンポーネントの動作を制御するように構成されたCPUである。このプロセッサ101は、複数のSSD3のいずれか1つからメインメモリ102にロードされる様々なプログラムを実行する。メインメモリ102は、DRAMのようなランダムアクセスメモリから構成される。プロセッサ101によって実行されるプログラムは、上述のアプリケーションソフトウェアレイヤ41、OS42、ファイルシステム43、およびFTL44を含む。プロセッサ101によって実行されるプログラムは、さらに、リソース管理部45を含んでいてもよい。
このリソース管理部45は、消去回数ゲットコマンドをSSD3に送信して各ネームスペースの合計消去回数をSSD3から取得し、取得した各ネームスペースの合計消去回数に基づいて個々のネームスペースに起因するSSD3の物理リソースの消耗度を判定してもよい。もしある特定のネームスペースに起因するSSD3の物理リソースの消耗度が閾値よりも大きい場合には、このリソース管理部45は、この特定のネームスペース用に確保すべきブロックの個数を増やすための処理を実行しても良い。この場合、このリソース管理部45は、指定された個数のブロックをこの特定のネームスペース用に追加すべきことを要求するネームスペース割り当てコマンドをSSD3に送信してもよい。これにより、この特定のネームスペースのオーバープロビジョン領域のサイズが増加されるので、この特定のネームスペースのライトアンプリフィケーションを下げることが可能となり、この結果、この特定のネームスペースに起因するSSD3の物理リソースの消耗度を下げることができる。
また、上述したように、データセンタ事業者は、このネームスペース用に確保されたブロックの数(または仮想ブロックの数)と、このネームスペースに対応する合計消去回数とに基づいて、このネームスペースに対応するレンタル料を決定してもよい。この場合、リソース管理部45は、データセンタ事業者がレンタル料を決定するのを支援するためのサービスを実行してもよい。例えば、あるネームスペースに関する基本レンタル料金は、まずは、このネームスペースに対応する領域の容量(ブロックの個数)によって決定されてもよい。そして、合計消去回数の関数で求められる追加料金が基本レンタル料金に加えられた合計料金が、このネームスペースに関するレンタル料金として決定されてもよい。
このネームスペースをレンタルしているユーザが、このネームスペース用に確保すべきブロックの個数の追加を要求した場合には、リソース管理部45は、追加料金の課金を免除し、追加されたブロックの数と確保済みのブロックの数との合計のみに基づいて新たなレンタル料金を設定してもよい。そして、リソース管理部45は、ユーザによって指定された個数のブロックをこの特定のネームスペース用に追加すべきことを要求するネームスペース割り当てコマンドをSSD3に送信してもよい。
また、リソース管理部45はFTL44と共同して動作し、各アプリケーションが、物理NANDアクセス管理API/仮想NANDアクセス管理APIを使用してSSD3のNANDメモリ5を制御することを可能にする。例えば、リソース管理部45は、ユーザ(あるアプリケーションプログラム、またはあるクライアント端末)からの、NANDメモリ5内の物理NANDアクセス管理API21用のブロック中の一つのブロックを指定する物理アドレスを含む第1のリード、ライトまたは消去の要求の受信に応答して、上述のリードコマンド、ライトコマンド、または消去コマンドをSSD3に送信して、この指定されたブロックに対するリード動作、ライト動作、または消去動作を制御する。また、リソース管理部45は、ユーザ(あるアプリケーションプログラム、またはあるクライアント端末)からの、NANDメモリ5内の仮想ブロック中の一つの仮想ブロックを指定する物理アドレス(仮想ブロックアドレス)を含む第2のリード、ライトまたは消去の要求の受信に応答して、上述のリードコマンド、ライトコマンド、または消去コマンドをSSD3に送信して、この指定された仮想ブロックに対するリード動作、ライト動作、または消去動作を制御する。
さらに、リソース管理部45は、SSD3から通知される、読み出し可能なデータを保持する最新ページアドレスに基づいて、ユーザ(あるアプリケーションプログラム、またはあるクライアント端末)からのリード要求が向けられるべき記憶領域(ライトデータを一定期間保持するホスト2内のメモリ、またはSSD3内のNANDメモリ5)を自動的に変更する制御を行っても良い。この場合、リソース管理部45は、SSD3に書き込んだある特定のデータがリード可能になるまでは、この特定のデータに対するリード要求に応答してホスト2内のメモリをリードアクセスし、特定のデータがリード可能になった後は、この特定のデータに対するリード要求に応答してSSD3内のNANDメモリ5をリードアクセスしてもよい。
また、リソース管理部45は、FTL44と共同して動作し、複数のネームスペースを管理することを可能にする。リソース管理部45は、SSD3内のNANDメモリ5内の複数のブロック内、第1ネームスペースに割り当てられた複数の第1ブロックの一つを、リード、ライトまたは消去するためのコマンドをSSD3に送信する。そして、リソース管理部45は、その第1ネームスペースに関連づけられた消去回数の取得を要求するコマンドをSSD3に送信することによって、複数の第1ブロックに対して実行された消去動作の回数をカウントすることによって得られるカウント値を、SSD3から取得する。
さらに、リソース管理部45は、第1ネームスペース用のブロックを確保するためのコマンドをSSD3に送信することによって、SSD3に、第1個数のブロックを第1ネームスペース用に確保させ、第1ネームスペースに割り当て可能な複数の第1ブロックの数の上限は第1個数以下に制限される。また、リソース管理部45は、第1ネームスペース用に確保すべきブロックの個数を追加するためのコマンドをSSD3に送信することによって、SSD3に、第2個数のブロックを第1ネームスペース用に確保すべきブロックとして追加させるように構成され、第1ネームスペースに割り当て可能な数の第1ブロックの数の上限は第1個数と第2個数の和に増やされる。
さらに、リソース管理部45は、上述のデータコピーコマンドをSSD3に送信することによってガベージコレクション(データコピー動作)を制御する。
すなわち、プロセッサ101は、FTL44を実行することによって、論理ブロックアドレスそれぞれとNANDメモリ5の物理アドレスそれぞれとの間のマッピングを管理する。プロセッサ101は、さらに、リソース管理部45を実行することによって、ガベージコレクション(データコピー動作)を制御する。
この場合、プロセッサ101は、有効データのみをコピーすることを要求するデータコピーコマンドをSSD3に送信する。データコピーコマンドは、上述したように、コピー元ブロックと、コピー元ブロック内のコピー開始ページと、コピー先ブロックと、コピー先ブロック内の転送開始ページと、コピー元ブロック内の各ページのデータが有効データまたは無効データのいずれであるかを示すビットマップデータと、コピー終了までにコピーすべき有効データの数またはコピー終了までに検出すべき無効データの数のいずれかを指定する終了条件とを含む。
そして、プロセッサ101は、コピー先ブロックにコピーされた有効データ毎に有効データの識別子と有効データが格納されているコピー先ブロック内の位置とを示すデータコピー情報をSSD3から受信する。プロセッサ101は、データコピー情報に基づいて、アドレス変換テーブルを更新する。
さらに、プロセッサ101は、SSD3から通知される、次回にコピーを開始すべきデータの位置に基づいて、次回のガベージコレクション(データコピー動作)を制御する。
また、プロセッサ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)などの入力デバイスを制御するキーボードコントローラを内蔵していてもよい。
図66は、複数のSSD3とホスト2とを含む情報処理装置の構成例を示す。
この情報処理装置は、ラックに収容可能な薄い箱形の筐体201を備える。多数のSSD3は筐体201内に配置されても良い。この場合、各SSD3は筐体201の前面201Aに設けられたスロットに取り外し可能に挿入されてもよい。
システムボード(マザーボード)202は筐体201内に配置される。システムボード(マザーボード)202上においては、CPU101、メモリ102、ネットワークコントローラ105、コントローラ107を含む様々な電子部品が実装されている。これら電子部品がホスト2として機能する。
以上説明したように、本実施形態の2種類のAPI(物理NANDアクセス管理API,仮想NANDアクセス管理API)によれば、NANDメモリ5の複数のブロックは、複数の第1ブロック(ブロックグループ#Yに属するブロック群)と、複数個のブロックの集合を各々が含む複数のブロックグループ(複数の仮想ブロック)として編成される複数の第2ブロック(ブロックグループ#Xに属するブロック群)とに分類される。コントローラ4は、ホスト2からの、複数の第1ブロック内の第1ブロックを指定する第1物理アドレスを含む第1のリード、ライトまたは消去のコマンドの受信に応答して、第1ブロックに対するリード動作、ライト動作、または消去動作を実行する。また、コントローラ4は、ホスト2からの、複数のブロックグループ(複数の仮想ブロック)内の第1ブロックグループ(第1仮想ブロック)を指定する第2物理アドレスを含む第2のリード、ライトまたは消去のコマンドの受信に応答して、第1ブロックグループ(第1仮想ブロック)内の複数個のブロックに対するリード動作、ライト動作、または消去動作を実行する。これにより、ホスト2は、ブロック単位のアクセスと、ブロックグループ単位でのアクセスの双方を必要に応じて選択的に実行することができる。
NANDメモリ5内の複数のブロックは、仮想NANDアクセス管理API用のブロックグループ#Xと物理NANDアクセス管理API用のブロックグループ#Yとに分類されているので、同じ一つのブロックが、物理NANDアクセス管理API用のブロックと仮想NANDアクセス管理API用のブロックとに共用されてしまうことを防止することができる。この結果、物理NANDアクセス管理API用のある特定のブロックが、ある特定の仮想ブロックアドレスを指定する仮想ブロックアクセスによって誤ってアクセス(リード、ライト、消去)されてしまうことを防止できるので、安全性を高めることができる。
また、ホスト2を含む情報処理システムにおいては、プロセッサ(ホストプロセッサ)として機能するCPU101は、複数の第1ブロック内の第1ブロックを指定する第1物理アドレスを含む第1のリード、ライトまたは消去のコマンドをSSD3に送信し、SSD3のコントローラ4は、第1のリード、ライトまたは消去のコマンドの受信に応答して、第1ブロックに対するリード動作、ライト動作、または消去動作を実行する。また、CPU101は、複数のブロックグループ(複数の仮想ブロック)内の第1ブロックグループ(第1仮想ブロック)を指定する第2物理アドレスを含む第2のリード、ライトまたは消去のコマンドをSSD3に送信し、SSD3のコントローラ4は、第2のリード、ライトまたは消去のコマンドの受信に応答して、第1ブロックグループ(第1仮想ブロック)内の複数個のブロックに対するリード動作、ライト動作、または消去動作を実行する。これにより、ホスト2は、例えば、メタデータを第1ブロックに書き込み、ユーザデータを第1ブロックグループに書き込むといった制御を容易に行うことができる。
なお、本実施形態では、不揮発性メモリとしてNANDメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。