IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝メモリ株式会社の特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024043063
(43)【公開日】2024-03-29
(54)【発明の名称】メモリシステムおよび制御方法
(51)【国際特許分類】
   G06F 11/14 20060101AFI20240322BHJP
   G06F 12/00 20060101ALI20240322BHJP
   G06F 12/02 20060101ALI20240322BHJP
   G11C 5/14 20060101ALI20240322BHJP
【FI】
G06F11/14 641C
G06F12/00 597U
G06F12/02 570A
G11C5/14 300
【審査請求】未請求
【請求項の数】13
【出願形態】OL
(21)【出願番号】P 2022148046
(22)【出願日】2022-09-16
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】菅野 伸一
(72)【発明者】
【氏名】トラン オレリアン ナム フォ
(72)【発明者】
【氏名】佐々木 勇輝
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA08
5B160AB26
(57)【要約】
【課題】ライトデータの喪失に対処でき、且つ、ホストからメモリシステムへのアクセスが可能になるまでに要する時間を短縮することができるメモリシステムを実現する。
【解決手段】メモリシステムのコントローラは、メモリシステムへの電力の回復に応じ、メモリシステムがレディー状態であることをホストに通知する。コントローラは、論理アドレス範囲に属する論理アドレスを指定する入出力コマンドを受信した場合、前記論理アドレス範囲に対応するブロックを選択し、選択したブロックに格納されているアドレス変換情報と更新ログとに基づいて、前記論理アドレス範囲に対応するテーブル領域の最新のアドレス変換情報を再構築する。コントローラは、選択したブロックに格納されている、喪失されたライトデータに対応する論理アドレスのリストに基づいて、再構築された最新のアドレス変換情報を更新する。
【選択図】図7
【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
揮発性メモリと、
前記メモリシステムの論理アドレス空間における論理アドレスそれぞれと前記不揮発性メモリの物理アドレスそれぞれとの間の対応関係を示すアドレス変換情報を、前記揮発性メモリに格納された論理物理アドレス変換テーブルを使用して管理するように構成されたコントローラと、を具備し、
前記コントローラは、
前記論理物理アドレス変換テーブルを、第1の論理アドレス範囲に対応する第1のテーブル領域と、第2の論理アドレス範囲に対応する第2のテーブル領域とを少なくとも含む複数のテーブル領域に分け、
前記揮発性メモリから取得される前記第1のテーブル領域のアドレス変換情報と、前記第1のテーブル領域のアドレス変換情報の取得の後に更新された前記第1のテーブル領域のアドレス変換情報の更新内容を示す更新ログとを、前記複数のブロックのうちの第1のブロックに書き込む第1の処理を周期的に実行し、
前記揮発性メモリから取得される前記第2のテーブル領域のアドレス変換情報と、前記第2のテーブル領域のアドレス変換情報の取得の後に更新された前記第2のテーブル領域のアドレス変換情報の更新内容を示す更新ログとを、前記複数のブロックのうちの第2のブロックに書き込む第2の処理を周期的に実行し、
前記第1の論理アドレス範囲に書き込まれるべきライトデータのうち、予期しない電力喪失によって喪失された第1のライトデータに対応する論理アドレスのリストを示す第1のリスト、および前記第2の論理アドレス範囲に書き込まれるべきライトデータのうち、前記予期しない電力喪失によって喪失された第2のライトデータに対応する論理アドレスのリストを示す第2のリストを、前記第1のブロックおよび前記第2のブロックにそれぞれ保存し、
前記メモリシステムへの電力の回復に応じ、
前記メモリシステムが入出力コマンドを処理可能なレディー状態であることを前記ホストに通知し、
前記第1の論理アドレス範囲および前記第2の論理アドレス範囲の一方の論理アドレス範囲に属する論理アドレスを指定する入出力コマンドを前記ホストから受信した場合、
前記第1のブロックおよび前記第2のブロックから前記一方の論理アドレス範囲に対応するブロックを選択し、前記選択したブロックに格納されているテーブル領域のアドレス変換情報と前記アドレス変換情報の更新ログとに基づいて、前記揮発性メモリ上に、前記一方の論理アドレス範囲に対応するテーブル領域の最新のアドレス変換情報を再構築し、
前記喪失されたライトデータに対応する論理アドレスのリストが前記選択されたブロックに格納されている場合、前記選択されたブロックの前記リストに基づいて、前記喪失されたライトデータに対応する論理アドレスの各々にエラーを示す値が関連付けられるように、前記再構築された最新のアドレス変換情報を更新するように構成されている、
メモリシステム。
【請求項2】
前記コントローラは、
前記予期しない電力喪失が起きたことに応じ、前記メモリシステムのキャパシタに蓄えられた電力を使用して、前記第1のリストおよび前記第2のリストを前記第1のブロックおよび前記第2のブロックにそれぞれ書き込むことによって、前記第1のリストおよび前記第2のリストを前記第1のブロックおよび前記第2のブロックにそれぞれ保存するように構成されている、
請求項1に記載のメモリシステム。
【請求項3】
前記コントローラは、
前記予期しない電力喪失が起きたことに応じ、前記メモリシステムのキャパシタに蓄えられた電力を使用して、前記第1のリストおよび前記第2のリストの双方を前記不揮発性メモリの所定のブロックに書き込み、
前記メモリシステムへの電力の回復に応じ、前記第1のリストおよび前記第2のリストを前記所定のブロックから前記第1のブロックおよび前記第2のブロックにそれぞれコピーすることによって、前記第1のリストおよび前記第2のリストを前記第1のブロックおよび前記第2のブロックにそれぞれ保存するように構成されている、
請求項1に記載のメモリシステム。
【請求項4】
前記コントローラは、
前記第1のテーブル領域のアドレス変換情報の更新内容を示す前記更新ログ、および前記第2のテーブル領域のアドレス変換情報の更新内容を示す前記更新ログを、前記揮発性メモリに格納された第1のログバッファおよび第2のログバッファを使用してそれぞれ管理し、
前記予期しない電力喪失が起きたことに応じ、
前記第1のブロックに未保存の更新ログが前記第1のログバッファにある場合、前記メモリシステムのキャパシタに蓄えられた電力を使用して、前記第1のログバッファの前記未保存の更新ログを前記第1のブロックに書き込み、
前記第2のブロックに未保存の更新ログが前記第2のログバッファにある場合、前記キャパシタに蓄えられた電力を使用して、前記第2のログバッファの前記未保存の更新ログを前記第2のブロックに書き込むように構成されている、
請求項1に記載のメモリシステム。
【請求項5】
前記論理物理アドレス変換テーブルは、複数のアドレス変換情報を含み、
前記第1のテーブル領域は、前記複数のアドレス変換情報のうちの第1のアドレス変換情報と第2のアドレス変換情報とを少なくとも含み、
前記第2のテーブル領域は、前記複数のアドレス変換情報のうちの第3のアドレス変換情報と第4のアドレス変換情報とを少なくとも含み、
前記コントローラは、
前記第1のアドレス変換情報を前記揮発性メモリから取得する処理と、前記第1のアドレス変換情報と、前記第1のアドレス変換情報の取得の後に更新された前記第1のテーブル領域の全てのアドレス変換情報についての更新内容を示す第1の更新ログとを前記第1のブロックに書き込む処理と、前記第2のアドレス変換情報を前記揮発性メモリから取得する処理と、前記第2のアドレス変換情報と、前記第2のアドレス変換情報の取得の後に更新された前記第1のテーブル領域の全てのアドレス変換情報についての更新内容を示す第2の更新ログとを前記第1のブロックに書き込む処理とを繰り返し実行することによって、前記第1の処理を周期的に実行し、
前記第3のアドレス変換情報を前記揮発性メモリから取得する処理と、前記第3のアドレス変換情報と、前記第3のアドレス変換情報の取得の後に更新された前記第2のテーブル領域の全てのアドレス変換情報についての更新内容を示す第3の更新ログとを前記第2のブロックに書き込む処理と、前記第4のアドレス変換情報を前記揮発性メモリから取得する処理と、前記第4のアドレス変換情報と、前記第4のアドレス変換情報の取得の後に更新された前記第2のテーブル領域の全てのアドレス変換情報についての更新内容を示す第4の更新ログとを前記第2のブロックに書き込む処理とを繰り返し実行することによって、前記第2の処理を周期的に実行するように構成されている、
請求項1に記載のメモリシステム。
【請求項6】
前記コントローラは、
前記揮発性メモリ上に、前記第1のテーブル領域を再構築する際、
前記第1のブロックに格納されている前記第2のアドレス変換情報のうちの最新の第2のアドレス変換情報と、前記第1のブロックに格納されている前記第1のアドレス変換情報のうちの最新の第1のアドレス変換情報とを、前記第1のブロックから前記揮発性メモリにコピーし、
前記第1のブロックに格納されている前記第1の更新ログのうちの最新の第1の更新ログの内容を、前記揮発性メモリ上の前記第1のアドレス変換情報に反映し、
前記第1のブロックに格納されている前記第2の更新ログのうちの最新の第2の更新ログの内容を、前記揮発性メモリ上の前記第1のアドレス変換情報と前記第2のアドレス変換情報とに反映し、
前記第1のテーブル領域が再構築された後、
前記喪失された第1のライトデータに対応する論理アドレスの各々にエラーを示す値が関連付けられるように、前記第1のブロックに格納されている前記第1のリストに基づいて、前記再構築された第1のテーブル領域を更新するように構成されている、
請求項5記載のメモリシステム。
【請求項7】
前記コントローラは、
前記揮発性メモリ上に、前記第2のテーブル領域を再構築する際、
前記第2のブロックに格納されている前記第4のアドレス変換情報のうちの最新の第4のアドレス変換情報と、前記第2のブロックに格納されている前記第3のアドレス変換情報のうちの最新の第3のアドレス変換情報とを、前記第2のブロックから前記揮発性メモリにコピーし、
前記第2のブロックに格納されている前記第3の更新ログのうちの最新の第3の更新ログの内容を、前記揮発性メモリ上の前記第3のアドレス変換情報に反映し、
前記第2のブロックに格納されている前記第4の更新ログのうちの最新の第4の更新ログの内容を、前記揮発性メモリ上の前記第3のアドレス変換情報と前記第4のアドレス変換情報とに反映し、
前記第2のテーブル領域が再構築された後、
前記喪失された第2のライトデータに対応する論理アドレスの各々にエラーを示す値が関連付けられるように、前記第2のブロックに格納されている前記第2のリストに基づいて、前記再構築された第2のテーブル領域を更新するように構成されている、
請求項5記載のメモリシステム。
【請求項8】
前記第1のブロックに書き込まれる前記更新ログは、前記第1の論理アドレス範囲に書き込まれるべきデータ毎に、前記データに対応する論理アドレスと、前記データの書き込み先として決定された前記不揮発性メモリにおける記憶位置の物理アドレスとを示し、
前記第2のブロックに書き込まれる前記更新ログは、前記第2の論理アドレス範囲に書き込まれるべきデータ毎に、前記データに対応する論理アドレスと、前記データの書き込み先として決定された前記不揮発性メモリにおける記憶位置を示す物理アドレスとを含む、
請求項1に記載のメモリシステム。
【請求項9】
前記第1のブロックに書き込まれる前記更新ログは、前記第1の論理アドレス範囲に書き込まれるべきデータ毎に、前記データに対応する論理アドレスと、前記データの書き込み先として決定された前記不揮発性メモリにおける記憶位置の物理アドレスと、前記データのサイズとを示し、
前記第2のブロックに書き込まれる前記更新ログは、前記第2の論理アドレス範囲に書き込まれるべきデータ毎に、前記データに対応する論理アドレスと、前記データの書き込み先として決定された前記不揮発性メモリにおける記憶位置を示す物理アドレスと、前記データのサイズを示す情報とを含む、
請求項1に記載のメモリシステム。
【請求項10】
前記第1のリストは、前記ホストから受信済みであり且つ前記第1の論理アドレス範囲に書き込まれるべきライトデータにそれぞれ対応する論理アドレスの集合から、前記不揮発性メモリへの書き込みが完了したライトデータにそれぞれ対応する論理アドレスの集合を除いた残りの論理アドレスの集合を含み、
前記第2のリストは、前記ホストから受信済みであり且つ前記第2の論理アドレス範囲に書き込まれるべきライトデータにそれぞれ対応する論理アドレスの集合から、前記不揮発性メモリへの書き込みが完了したライトデータにそれぞれ対応する論理アドレスの集合を除いた残りの論理アドレスの集合を含む、
請求項1に記載のメモリシステム。
【請求項11】
複数のブロックを含む不揮発性メモリと、揮発性メモリと、を含むメモリシステムを制御する制御方法であって、
前記メモリシステムの論理アドレス空間における論理アドレスそれぞれと前記不揮発性メモリの物理アドレスそれぞれとの間の対応関係を示すアドレス変換情報を、前記揮発性メモリに格納された論理物理アドレス変換テーブルを使用して管理することと、
前記論理物理アドレス変換テーブルを、第1の論理アドレス範囲に対応する第1のテーブル領域と、第2の論理アドレス範囲に対応する第2のテーブル領域とを少なくとも含む複数のテーブル領域に分けることと、
前記揮発性メモリから取得される前記第1のテーブル領域のアドレス変換情報と、前記第1のテーブル領域のアドレス変換情報の取得の後に更新された前記第1のテーブル領域のアドレス変換情報の更新内容を示す更新ログとを、前記複数のブロックのうちの第1のブロックに書き込む第1の処理を周期的に実行することと、
前記揮発性メモリから取得される前記第2のテーブル領域のアドレス変換情報と、前記第2のテーブル領域のアドレス変換情報の取得の後に更新された前記第2のテーブル領域のアドレス変換情報の更新内容を示す更新ログとを、前記複数のブロックのうちの第2のブロックに書き込む第2の処理を周期的に実行することと、
前記第1の論理アドレス範囲に書き込まれるべきライトデータのうち、予期しない電力喪失によって喪失された第1のライトデータに対応する論理アドレスのリストを示す第1のリスト、および前記第2の論理アドレス範囲に書き込まれるべきライトデータのうち、前記予期しない電力喪失によって喪失された第2のライトデータに対応する論理アドレスのリストを示す第2のリストを、前記第1のブロックおよび前記第2のブロックにそれぞれ保存することと、
前記メモリシステムへの電力の回復に応じ、
前記メモリシステムが入出力コマンドを処理可能なレディー状態であることをホストに通知することと、
前記第1の論理アドレス範囲および前記第2の論理アドレス範囲の一方の論理アドレス範囲に属する論理アドレスを指定する入出力コマンドを前記ホストから受信した場合、
前記第1のブロックおよび前記第2のブロックから前記一方の論理アドレス範囲に対応するブロックを選択し、前記選択したブロックに格納されているテーブル領域のアドレス変換情報と前記アドレス変換情報の更新ログとに基づいて、前記揮発性メモリ上に、前記一方の論理アドレス範囲に対応するテーブル領域の最新のアドレス変換情報を再構築することと、
前記喪失されたライトデータに対応する論理アドレスのリストが前記選択されたブロックに格納されている場合、前記選択されたブロックの前記リストに基づいて、前記喪失されたライトデータに対応する論理アドレスの各々にエラーを示す値が関連付けられるように、前記再構築された最新のアドレス変換情報を更新することと、を具備する
制御方法。
【請求項12】
前記第1のリストおよび前記第2のリストを前記第1のブロックおよび前記第2のブロックにそれぞれ保存することは、前記予期しない電力喪失が起きたことに応じ、前記メモリシステムのキャパシタに蓄えられた電力を使用して、前記第1のリストおよび前記第2のリストを前記第1のブロックおよび前記第2のブロックにそれぞれ書き込むことを含む、
請求項11に記載の制御方法。
【請求項13】
前記第1のリストおよび前記第2のリストを前記第1のブロックおよび前記第2のブロックにそれぞれ保存することは、
前記予期しない電力喪失が起きたことに応じ、前記メモリシステムのキャパシタに蓄えられた電力を使用して、前記第1のリストおよび前記第2のリストの双方を前記不揮発性メモリの所定のブロックに書き込むことと、
前記メモリシステムへの電力の回復に応じ、前記第1のリストおよび前記第2のリストを前記所定のブロックから前記第1のブロックおよび前記第2のブロックにそれぞれコピーすることと、を含む、
請求項11に記載の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御するメモリシステムおよび制御方法に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
【0003】
SSDのようなメモリシステムにおいては、予期しない電力喪失が起きた後に電力が回復した場合、論理物理アドレス変換テーブル(logical-to-physical address translation table:L2Pテーブル)を再構築する処理が行われる。しかしながら、L2Pテーブル全体の再構築には比較的長い時間がかかる。このため、ホストは、メモリシステムに対するリード/ライトアクセスが可能になるまで、長い間待たされる場合がある。
【0004】
また、メモリシステムに設けられたキャパシタに蓄えられた電力を使用して、不揮発性メモリに書き込むことができるデータの量は、限られている。このため、不揮発性メモリへの書き込みが完了していないライトデータが喪失されてしまう場合もある。
【0005】
したがって、メモリシステムにおいては、ライトデータの喪失に対処でき、且つ、ホストからメモリシステムへのリード/ライトアクセスを実行可能になるまでに要する時間を短縮することができる技術が必要とされている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】米国特許第11,262,942号明細書
【特許文献2】米国特許出願公開第2021/0034301号明細書
【特許文献3】米国特許出願公開第2022/0019364号明細書
【発明の概要】
【発明が解決しようとする課題】
【0007】
本発明の一実施形態が解決しようとする課題は、ライトデータの喪失に対処でき、且つ、ホストからメモリシステムへのリード/ライトアクセスを実行可能になるまでに要する時間を短縮することができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【0008】
実施形態によれば、ホストに接続可能なメモリシステムは、複数のブロックを含む不揮発性メモリと、揮発性メモリと、前記メモリシステムの論理アドレス空間における論理アドレスそれぞれと前記不揮発性メモリの物理アドレスそれぞれとの間の対応関係を示すアドレス変換情報を、前記揮発性メモリに格納された論理物理アドレス変換テーブルを使用して管理するように構成されたコントローラとを具備する。前記コントローラは、前記論理物理アドレス変換テーブルを、第1の論理アドレス範囲に対応する第1のテーブル領域と、第2の論理アドレス範囲に対応する第2のテーブル領域とを少なくとも含む複数のテーブル領域に分ける。前記コントローラは、前記揮発性メモリから取得される前記第1のテーブル領域のアドレス変換情報と、前記第1のテーブル領域のアドレス変換情報の取得の後に更新された前記第1のテーブル領域のアドレス変換情報の更新内容を示す更新ログとを、前記複数のブロックのうちの第1のブロックに書き込む第1の処理を周期的に実行する。前記コントローラは、前記揮発性メモリから取得される前記第2のテーブル領域のアドレス変換情報と、前記第2のテーブル領域のアドレス変換情報の取得の後に更新された前記第2のテーブル領域のアドレス変換情報の更新内容を示す更新ログとを、前記複数のブロックのうちの第2のブロックに書き込む第2の処理を周期的に実行する。前記コントローラは、前記第1の論理アドレス範囲に書き込まれるべきライトデータのうち、予期しない電力喪失によって喪失された第1のライトデータに対応する論理アドレスのリストを示す第1のリスト、および前記第2の論理アドレス範囲に書き込まれるべきライトデータのうち、前記予期しない電力喪失によって喪失された第2のライトデータに対応する論理アドレスのリストを示す第2のリストを、前記第1のブロックおよび前記第2のブロックにそれぞれ保存する。前記コントローラは、前記メモリシステムへの前記電力の回復に応じ、前記メモリシステムが入出力コマンドを処理可能なレディー状態であることを前記ホストに通知する。前記コントローラは、前記第1の論理アドレス範囲および前記第2の論理アドレス範囲の一方の論理アドレス範囲に属する論理アドレスを指定する入出力コマンドを前記ホストから受信した場合、前記第1のブロックおよび前記第2のブロックから前記一方の論理アドレス範囲に対応するブロックを選択し、前記選択したブロックに格納されているテーブル領域のアドレス変換情報と前記アドレス変換情報の更新ログとに基づいて、前記揮発性メモリ上に、前記一方の論理アドレス範囲に対応するテーブル領域の最新のアドレス変換情報を再構築する。前記コントローラは、前記喪失されたライトデータに対応する論理アドレスのリストが前記選択されたブロックに格納されている場合、前記選択されたブロックの前記リストに基づいて、前記喪失されたライトデータに対応する論理アドレスの各々にエラーを示す値が関連付けられるように、前記再構築された最新のアドレス変換情報を更新する。
【図面の簡単な説明】
【0009】
図1】実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
図2】実施形態に係るメモリシステムに含まれる、不揮発性メモリの内部構成の例を示すブロック図。
図3】実施形態に係るメモリシステムに含まれる、CPUの機能構成の例を示すブロック図。
図4】実施形態に係るメモリシステムにおいて使用される、複数のチャンネルと複数のNAND型フラッシュメモリダイとの関係の例を示す図。
図5】実施形態に係るメモリシステムにおいて使用されるスーパーブロックの構成例を示す図。
図6】実施形態に係るメモリシステムにおいて使用されるL2Pテーブルの構成例と、L2Pテーブルの複数のテーブル領域と複数のL2Pフラッシュブロックとの関係の例とを示す図。
図7】実施形態に係るメモリシステムにおける、複数のLBA範囲とL2Pテーブルの複数のテーブル領域との関係の例を示す図。
図8】実施形態に係るメモリシステムにおいて使用されるL2Pテーブルに格納される複数のL2Pフラグメントの各々の構成例を示す図。
図9】実施形態に係るメモリシステムにおける、複数のLBA範囲と、L2Pテーブルの複数のテーブル領域と、複数のログバッファと、複数のL2Pフラッシュブロックとの関係の例を示す図。
図10】実施形態に係るメモリシステムにおける、更新ログの第1の例を示す図。
図11】実施形態に係るメモリシステムにおける、更新ログの第2の例を示す図。
図12】実施形態に係るメモリシステムにおいて実行されるロストLBAリスト保存処理の第1の例を示す図。
図13】実施形態に係るメモリシステムにおいて実行されるロストLBAリスト保存処理の第2の例を示す図。
図14】実施形態に係るメモリシステムにおいて実行されるロストLBAリスト分配処理の例を示す図。
図15】実施形態に係るメモリシステムにおいて実行されるアドレス変換情報保存処理の第1の例を示す図。
図16】実施形態に係るメモリシステムにおいて実行されるL2Pテーブルリビルド処理の第1の例を示す図。
図17】実施形態に係るメモリシステムにおいて実行されるアドレス変換情報保存処理の第2の例を示す図。
図18】実施形態に係るメモリシステムにおいて実行されるL2Pテーブルリビルド処理の第2の例を示す図。
図19】実施形態に係るメモリシステムにおいて実行されるアドレス変換情報保存処理の第3の例を示す図。
図20】実施形態に係るメモリシステムにおいて実行されるL2Pテーブルリビルド処理の第3の例を示す図。
図21】実施形態に係るメモリシステムにおいて実行されるリビルド対象のテーブル領域を選択する処理を示す図。
図22】実施形態に係るメモリシステムにおいて実行されるアドレス変換情報保存処理の手順を示すフローチャート。
図23】実施形態に係るメモリシステムにおいて実行されるロストLBAリスト保存処理の手順の第1の例を示すフローチャート。
図24】実施形態に係るメモリシステムにおいて実行されるロストLBAリスト保存処理の手順の第2の例を示すフローチャート。
図25】実施形態に係るメモリシステムにおいて実行されるL2Pテーブルリビルド処理の手順を示すフローチャート。
【発明を実施するための形態】
【0010】
以下、図面を参照して、実施形態を説明する。
まず、実施形態に係るメモリシステムを含む情報処理システムの構成について説明する。図1は、実施形態に係るメモリシステムとホストとを含む情報処理システムの構成例を示すブロック図である。以下では、実施形態に係るメモリシステムがソリッドステートドライブ(SSD)3として実現されている場合を想定する。
【0011】
情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。ホスト2と、SSD3とは、バス4を介して接続可能である。
【0012】
ホスト2は、SSD3にアクセスする情報処理装置である。情報処理装置の例には、パーソナルコンピュータ、サーバコンピュータ、他の様々なコンピューティングデバイスが含まれる。ホスト2は、データを書き込むためのコマンドであるライトコマンドをSSD3に送信する。また、ホスト2は、データを読み出すためのコマンドであるリードコマンドをSSD3に送信する。
【0013】
SSD3は、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。不揮発性メモリとしては、例えば、NAND型フラッシュメモリが用いられる。SSD3は、ホスト2から受信されたライトコマンドに基づいて、データ書き込み動作を実行する。また、SSD3は、ホスト2から受信されたリードコマンドに基づいて、データ読み出し動作を実行する。
【0014】
SSD3とホスト2との間の通信は、バス4を介して実行される。バス4は、ホスト2とSSD3とを接続する伝送路である。バス4は、例えば、PCI expressTM(PCIeTM)バスである。バス4は、全二重伝送路である。全二重伝送路は、ホスト2からSSD3へデータおよび入出力(I/O)コマンドを送信する伝送路と、SSD3からホスト2へデータおよび応答を送信する伝送路との双方を含む。I/Oコマンドは、不揮発性メモリへのデータの書き込み、または不揮発性メモリからのデータの読み出しを行うためのコマンドである。I/Oコマンドは、例えば、ライトコマンド、またはリードコマンドである。
【0015】
ホスト2とSSD3とを接続するための論理インタフェースの規格としては、例えば、Serial Attached SCSI(SAS)、Serial ATA(SATA)、NVM ExpressTM(NVMeTM)が使用される。
【0016】
次に、ホスト2の構成要素について説明する。ホスト2は、プロセッサ21と、メモリ22とを含む。
【0017】
プロセッサ21は、CPU(Central Processing Unit)である。プロセッサ21は、ホスト2の各コンポーネントの動作を制御するように構成されている。プロセッサ21は、SSD3からメモリ22にロードされるソフトウェア(ホストソフトウェア)を実行する。ホスト2は、SSD3以外の他のストレージデバイスを含んでいてもよい。この場合、ホストソフトウェアは、他のストレージデバイスからメモリ22にロードされてもよい。ホストソフトウェアには、オペレーティングシステム、ファイルシステム、デバイスドライバ、アプリケーションプログラム等が含まれる。
【0018】
メモリ22は、ホスト2に設けられたメインメモリである。メモリ22は、例えば、揮発性の半導体メモリである。メモリ22は、例えば、DRAM(Dynamic Random Access Memory)のようなランダムアクセスメモリによって実現される。
【0019】
次に、SSD3の構成要素について説明する。SSD3は、コントローラ5と、NAND型フラッシュメモリ6と、DRAM7とを含む。
【0020】
コントローラ5は、Toggle NANDフラッシュインタフェース、オープンNANDフラッシュインタフェース(ONFI)のような、NANDインタフェース57を介して、不揮発性メモリであるNAND型フラッシュメモリ6に電気的に接続されている。コントローラ5は、NAND型フラッシュメモリ6を制御するように構成されたメモリコントローラとして動作する。このコントローラ5は、System-on-a-chip(SoC)のような回路によって実現されてもよい。
【0021】
NAND型フラッシュメモリ6は、不揮発性の半導体メモリである。NAND型フラッシュメモリ6は、2次元構造のフラッシュメモリであってもよいし、3次元構造のフラッシュメモリであってもよい。以下では、NAND型フラッシュメモリ6をNANDメモリ6と称する。
【0022】
DRAM7は、揮発性の半導体メモリである。DRAM7は、例えば、NANDメモリ6に書き込むべきデータを一時的に格納するために使用される。また、DRAM7の記憶領域は、コントローラ5によって使用される様々な管理データを格納するために使用される。
【0023】
SSD3は、さらに電源回路8を含む。電源回路8は、電源制御回路である。電源回路8は、例えばホスト2から供給される電力を、コントローラ5、NANDメモリ6、DRAM7など、SSD3の各構成要素に供給する。また、電源回路8は、コントローラ5との通信を実行する。電源回路8とコントローラ5との間の通信は、例えば、予期しない電力喪失が起きたことを電源回路8がコントローラ5に通知するために実行される。 次に、コントローラ5の詳細な構成について説明する。
【0024】
コントローラ5は、ホストインタフェース(I/F)51と、CPU52と、SRAM53と、直接メモリアクセスコントローラ(DMAC)54と、ECC回路55と、DRAMインタフェース(I/F)56と、NANDインタフェース(I/F)57と、を含む。これらホストインタフェース51と、CPU52と、SRAM53と、DMAC54と、ECC回路55と、DRAMインタフェース56と、NANDインタフェース57とは、バス50を介して相互接続される。
【0025】
ホストインタフェース51は、ホスト2との通信を実行するホストインタフェース回路である。ホストインタフェース51は、例えば、PCIeコントローラである。あるいは、SSD3がネットワークインタフェースコントローラを内蔵する構成である場合には、ホストインタフェース51は、ネットワークインタフェースコントローラの一部として実現されてもよい。ホストインタフェース51は、ホスト2から様々なコマンドを受信する。これらコマンドには、ライトコマンド、リードコマンド、等が含まれる。
【0026】
CPU52は、プロセッサである。CPU52は、ホストインタフェース51と、SRAM53と、DMAC54と、ECC回路55と、DRAMインタフェース56と、NANDインタフェース57と、を制御する。CPU52は、SSD3への電力の供給に応じて、NANDメモリ6または図示しないROMから制御プログラム(ファームウェア)をSRAM53にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアは、DRAM7にロードされてもよい。
【0027】
CPU52は、例えば、フラッシュトランスレーション層(FTL)として、NANDメモリ6に記憶されたデータの管理と、NANDメモリ6に含まれるブロックの管理とを行う。NANDメモリ6に記憶されたデータの管理は、例えば、アドレス変換情報の管理を含む。アドレス変換情報は、マッピング情報、または論理物理アドレス変換情報とも称される。CPU52は、L2Pテーブル71を使用して、アドレス変換情報を管理する。また、NANDメモリ6に含まれるブロックの管理は、NANDメモリ6に含まれる不良ブロック(バッドブロック)の管理と、ガベージコレクションと、ウェアレベリングとを含む。
【0028】
また、コントローラ5は、二つ以上のCPU52を含んでいてもよい。
【0029】
SRAM53は、揮発性のメモリである。SRAM53は、例えば、CPU52の作業領域として使用される。
【0030】
DMAC54は、CPU52の制御の下、ホスト2のメモリ22とDRAM7(またはSRAM53)との間のデータ転送を実行する。ホスト2のメモリ22からDRAM7(またはSRAM53)にデータを転送すべき場合には、CPU52は、データが格納されているホスト2のメモリ22におけるメモリ領域を示す転送元アドレス、データのサイズ、データが転送されるべきDRAM7(またはSRAM53)におけるメモリ領域を示す転送先アドレスをDMAC54に対して指定する。
【0031】
ECC回路55は、データのエンコード処理と、データのデコード処理とを実行する回路である。エンコード処理において、ECC回路55は、NANDメモリ6に書き込まれるべきデータにエラー訂正コード(ECC)を冗長コードとして付加する。ECC回路55は、NANDメモリ6からデータがリードされた際に、デコード処理を実行する。デコード処理において、ECC回路55は、NANDメモリ6から読み出されたデータに付加されたECCを使用して、このデータの誤り訂正処理を行う。
【0032】
DRAMインタフェース56は、DRAM7を制御するDRAMインタフェース回路である。DRAMインタフェース56は、CPU52の制御の下、DRAM7を制御する。
【0033】
NANDインタフェース57は、NANDメモリ6を制御するメモリインタフェース回路である。NANDインタフェース57は、CPU52の制御の下、NANDメモリ6を制御する。NANDインタフェース57とNANDメモリ6との間の通信は、例えば、Toggle NANDフラッシュインタフェースまたはオープンNANDフラッシュインタフェース(ONFI)に準拠して実行される。NANDメモリ6が複数のNAND型フラッシュメモリダイを含む場合、NANDインタフェース57は、例えば、複数のチャンネル(Ch)を介して複数のNAND型フラッシュメモリダイにそれぞれ接続される。
【0034】
次に、NANDメモリ6に記憶される情報について説明する。NANDメモリ6は、ユーザデータ61と、L2Pテーブル62とを記憶する。
【0035】
ユーザデータ61は、ホスト2から受信されたライトコマンドに基づいてNANDメモリ6に書き込まれたデータである。
【0036】
L2Pテーブル62は、DRAM7に格納されているL2Pテーブル71のバックアップとしてNANDメモリ6に記憶されるテーブルである。L2Pテーブル62は、L2Pテーブル71を再構築するために必要な情報を保持する。L2Pテーブル62は、例えば、アドレス変換情報と、アドレス変換情報の更新ログとを含む。アドレス変換情報は、SSD3の論理アドレス空間における論理アドレスそれぞれとNANDメモリ6の物理アドレスそれぞれとの間の対応関係を所定の管理サイズ単位で示す情報である。SSD3の論理アドレス空間は、SSD3にアクセスするためのホスト2によって使用されるアドレス空間である。論理アドレスは、SSD3におけるアクセス対象の記憶位置を論理的に指定するアドレスである。論理アドレスは、ホスト2から受信されるコマンド(ライトコマンド、リードコマンド、等)によって指定される。ライトコマンドによって指定される論理アドレスは、データが書き込まれるべき論理アドレス空間内のアドレスを示す。ライトコマンドによって指定される論理アドレスは、開始論理アドレス、または書き込み先の論理アドレスとも称される。リードコマンドによって指定される論理アドレスは、リード対象のデータが書き込まれている論理アドレス空間内のアドレスを示す。リードコマンドによって指定される論理アドレスは、開始論理アドレス、またはリード対象の論理アドレスとも称される。このように、ホスト2から受信されるコマンドによって指定される論理アドレスは、アクセス対象のデータ(ライトデータ、リードデータ)に対応している。このため、論理アドレスは、アクセス対象のデータを識別するために使用される。論理アドレスとしては、例えば、論理ブロックアドレス(LBA)が使用される。一つのLBAは、例えば、1セクタ(例えば4KiB)のデータに対応する。物理アドレスは、NANDメモリ6における物理的な記憶位置を示すアドレスである。SSD3が動作している間、アドレス変換情報は、DRAM7上のL2Pテーブル71から周期的に取得される。そして、取得されたアドレス変換情報が、NANDメモリ6のL2Pテーブル62に書き込まれる。更新ログは、DRAM7上のL2Pテーブル71のアドレス変換情報の更新内容を示す情報である。具体的には、更新ログは、アドレス変換情報がL2Pテーブル71から取得された後に更新された、論理アドレスと物理アドレスとの間の対応関係を示す。L2Pテーブル62は、複数のL2Pフラッシュブロックに格納される。複数のL2Pフラッシュブロックの各々は、L2Pテーブル62を格納するために割り当てられたブロックである。複数のL2Pフラッシュブロックは、SSD3の論理アドレス空間を分割することによって得られる複数のLBA範囲に1対1の関係で対応付けられている。また、DRAM7上のL2Pテーブル71は、複数のLBA範囲にそれぞれ対応する複数のテーブル領域(L2P領域)に分けられている。複数のL2Pフラッシュブロックの各々は、複数のテーブル領域のうちの一つのテーブル領域に対応している。複数のL2Pフラッシュブロックの各々は、そのL2Pフラッシュブロックに対応する一つのテーブル領域のアドレス変換情報と、そのアドレス変換情報の更新ログとを記憶する。
【0037】
次に、DRAM7に記憶されている情報について説明する。DRAM7は、L2Pテーブル71と、ログバッファ72-0、…、72-nと、データバッファ73と、LBAリスト74と、LBA範囲/ブロック管理テーブル75とを含む。
【0038】
L2Pテーブル71は、上述したアドレス変換情報を保持するテーブルである。L2Pテーブル71の複数のテーブル領域の各々は、そのテーブル領域に割り当てられているLBA範囲に含まれる論理アドレスそれぞれとNANDメモリ6の物理アドレスそれぞれとの間の対応関係を示すアドレス変換情報を保持する。
【0039】
ログバッファ72-0、…、72-nは、更新ログを保持するためのバッファである。ログバッファ72-0、…、72-nは、複数のLBA範囲、つまり、L2Pテーブル71の複数のテーブル領域に1対1の関係で対応付けられている。ログバッファ72-0、…、72-nの各々は、対応するテーブル領域のアドレス変換情報の更新ログを保持する。
【0040】
データバッファ73は、ユーザデータを一時的に保持するバッファである。データバッファ73は、NANDメモリ6に書き込まれるべきデータを一時的に保持する。また、データバッファ73は、NANDメモリ6から読み出されたデータを一時的に保持する。
【0041】
LBAリスト74は、NANDメモリ6への書き込みが完了していないデータに対応するLBAを保持するリストである。
【0042】
LBA範囲/ブロック管理テーブル75は、複数のLBA範囲と複数のL2Pフラッシュブロックとの間の対応関係を示す情報を保持するテーブルである。LBA範囲/ブロック管理テーブル75は、例えば、LBA範囲毎に、そのLBA範囲に割り当てられているL2Pフラッシュブロックのブロックアドレスを保持する。
【0043】
また、SSD3は、キャパシタ81をさらに含む。キャパシタ81は、電力を蓄えることができる素子である。キャパシタ81は、電源回路8に電気的に接続される。電源回路8は、ホスト2から供給される電源電圧の値が、ホスト2からの予告無しで低下した場合、キャパシタ81に蓄えられている電力をSSD3の各構成要素に供給する。また、電源回路8は、予期しない電力喪失が起きたことを、バス50を介してコントローラ5に通知する。予期しない電力喪失は、ホスト2からの予告(電源遮断予告通知)無しで、SSD3への電力の供給が遮断される現象である。電源遮断予告通知は、SSD3への電力の供給が断たれることを予告する通知である。ホスト2の電源がオフになる前に、ホスト2は、電源遮断予告通知をSSD3に送信して、SSD3への電力の供給がまもなく断たれることをSSD3に通知する。電源遮断予告通知は、例えば、NVMe規格で規定されているShutdown Notification、またSATA規格で規定されているSTANDBY IMMEDIATEコマンドである。
【0044】
キャパシタ81に蓄えられている電力は、例えば、コントローラ5がPower Loss Protection(PLP)動作を実行するために使用され得る。PLP動作において、コントローラ5は、揮発性メモリ(DRAM7またはSRAM53)に格納されている情報をNANDメモリ6に書き込む。
【0045】
次に、NANDメモリ6の内部構成について説明する。図2は、実施形態に係るメモリシステムに含まれる、不揮発性メモリの内部構成の例を示すブロック図である。
【0046】
NANDメモリ6は、メモリセルアレイ60を含む。メモリセルアレイ60は、マトリクス状に配置された複数のメモリセルを含む。
【0047】
NANDメモリ6のメモリセルアレイ60は、複数のブロックBLK0~BLKx-1を含む。ブロックBLK0~BLKx-1の各々は、複数のページ(ここではページP0~Py-1)を含む。ブロックBLK0~BLKx-1の各々は、データ消去動作の単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「フラッシュブロック」と称されることもある。ページP0~Py-1の各々は、データ書き込み動作およびデータ読み込み動作の各々の単位である。
【0048】
次に、CPU52の機能構成について説明する。図3は、実施形態に係るメモリシステムに含まれる、CPUの機能構成の例を示すブロック図である。
【0049】
CPU52は、ライト制御部521と、リード制御部522と、L2Pテーブル管理部523と、ロストLBAリスト保存部524と、L2Pテーブルリビルド処理部525として機能する。なお、CPU52の各機能の一部または全体は、コントローラ5の専用のハードウェアによって実現されてもよい。
【0050】
ライト制御部521は、ホスト2から受信したライトコマンドに対応する処理を実行する。ライトコマンドは、例えば、開始論理アドレス(開始LBA)、データサイズ、データポインタを指定する。開始LBAは、ライトコマンドに関連付けられたライトデータが書き込まれるべき最初の論理ブロック(書き込み先LBA)を示す。1つの論理ブロック(セクタ)は、LBAによって指定可能なデータの最小単位である。1つの論理ブロックのサイズは、例えば、512バイトまたは4Kバイトである。データサイズは、ライトデータのサイズを示す。データサイズは、例えば、書き込まれるべき論理ブロックの数(LBAの数)によって表されてもよいし、バイトによって表されてもよい。データポインタは、ライトデータが格納されているメモリ22におけるメモリ領域を示すメモリアドレスである。ライトコマンドは、さらに、NANDメモリ6の複数の領域のうちのいずれか一つの領域を示す領域識別子を指定してもよい。ライト制御部521は、ホスト2から受信したライトコマンドに基づいて、データ取得処理、書き込み先ブロック割り当て処理、書き込み先決定処理、L2P更新処理、完了応答通知処理、および書き込み処理を実行する。
【0051】
データ取得処理は、データポインタとデータサイズとに基づいて、ホスト2のメモリ22からライトデータを取得する処理である。ホスト2のメモリ22からライトデータを取得することにより、ライト制御部521は、ライトデータをホスト2から受信する。受信されたライトデータは、データバッファ73に一時的に格納される。
【0052】
書き込み先ブロック割り当て処理は、受信されたライトデータが書き込まれるべきブロックである書き込み先ブロックを割り当てる処理である。ライト制御部521は、複数の領域に1対1の関係で複数の書き込み先ブロックがそれぞれ対応付けられるように、複数の領域の各々に対して書き込み先ブロックを割り当てる。受信されたライトコマンドによって指定された領域用の書き込み先ブロックが既に割り当てられている場合には、受信されたライトコマンドによって指定された領域に新たな書き込み先ブロックを割り当てる処理を実行する必要は無い。
【0053】
書き込み先決定処理は、受信されたライトデータの書き込み先、つまり、このライトデータが書き込まれるべきNANDメモリ6における記憶位置(書き込み先記憶位置)を決定する処理である。書き込み先記憶位置を示す物理アドレスは、例えば、ライトデータが書き込まれるべき書き込み先ブロックのブロックアドレスと、ライトデータが書き込まれるべき、この書き込み先ブロック内の記憶位置を示すアドレス(オフセットアドレス)とによって表される。
【0054】
L2P更新処理は、ライトデータに対応する論理アドレスに、このライトデータの書き込み先として決定されたNANDメモリ6における記憶位置の物理アドレスが関連付けられるように、DRAM7上のL2Pテーブル71を更新する処理である。L2P更新処理は、書き込み先記憶位置が決定された時点で、つまりライトデータがホスト2から受信された時点で、実行されてもよい。あるいは、L2P更新処理は、受信されたライトデータがNANDメモリ6に実際に書き込まれた後に実行されてもよい。
【0055】
完了応答通知処理は、受信されたライトコマンドの処理の完了を示す完了応答をホスト2に通知する処理である。完了応答通知処理は、例えば、ライトデータがホスト2から受信された時点で実行されてもよい。
【0056】
書き込み処理は、データバッファ73に格納されているライトデータをNANDメモリ6に書き込む処理である。
【0057】
リード制御部522は、ホスト2から受信したリードコマンドに対応する処理を実行する。リードコマンドは、例えば、開始論理アドレス(開始LBA)、データサイズ、データポインタを指定する。開始LBAは、リード対象データが格納されている最初の論理ブロック(リード対象LBA)を示す。データサイズは、リード対象データのサイズを示す。データポインタは、リード対象データが転送されるべきホスト2のメモリ22におけるメモリ領域を示すメモリアドレスである。リードコマンドは、さらに、リード対象データが格納されている領域を示す領域識別子を指定してもよい。リード制御部522は、ホスト2から受信したリードコマンドに基づいて、アドレス解決処理、読み出し処理、データ転送処理、および完了応答通知処理を実行する。
【0058】
アドレス解決処理は、DRAM7上のL2Pテーブル71を参照することによって、リード対象データに対応するLBA(開始LBA)に関連付けられている物理アドレスを取得する処理である。読み出し処理は、取得された物理アドレスに基づいて、リード対象データをNANDメモリ6から読み出す処理である。読み出されたリード対象データは、データバッファ73に一時的に格納される。データ転送処理は、データバッファ73に格納されているリード対象データを、データポインタによって示されるメモリ22におけるメモリ領域に転送する処理である。完了応答通知処理は、リードコマンドの処理の完了を示す完了応答をホスト2に通知する処理である。
【0059】
L2Pテーブル管理部523は、L2Pテーブル71を管理する。L2Pテーブル管理部523は、L2Pテーブル71を、複数の論理アドレス範囲にそれぞれ対応する複数のテーブル領域に分ける。L2Pテーブル管理部523は、論理アドレス範囲毎に、つまり、テーブル領域毎に、更新ログ管理処理およびアドレス変換情報/更新ログ保存処理を実行する。
【0060】
更新ログ管理処理は、複数のテーブル領域に1対1の関係でそれぞれ対応付けられた複数のログバッファ72-0、…、72-nを使用して、テーブル領域毎に、アドレス変換情報の更新ログを管理する。例えば、ある論理アドレス範囲に対応するL2Pテーブル71のテーブル領域において、この論理アドレス範囲に属するある論理アドレスと物理アドレスとの対応関係が更新された場合、L2Pテーブル管理部523は、この論理アドレスに対応するアドレス変換情報の更新ログを、このテーブル領域に対応するログバッファに格納する。更新ログは、論理アドレスと物理アドレスとの間の更新された対応関係を示す情報である。例えば、LBA10に関連付けられている物理アドレス(PBA)が、物理アドレス(PBA)=5から、物理アドレス(PBA)=10に更新された場合、L2Pテーブル管理部523は、LBA10に新PBA10が関連付けられていることを示す更新ログを、ログバッファに格納する。
【0061】
アドレス変換情報/更新ログ保存処理は、L2Pテーブル71のテーブル領域毎に、テーブル領域のアドレス変換情報と、テーブル領域に対応する更新ログとを、NANDメモリ6のブロック(L2Pフラッシュブロック)に周期的に書き込む処理である。例えば、ある論理アドレス範囲に対応する第1のテーブル領域に関するアドレス変換情報/更新ログ保存処理においては、L2Pテーブル管理部523は、DRAM7のL2Pテーブル71から取得される第1のテーブル領域のアドレス変換情報と、第1のテーブル領域のアドレス変換情報の取得の後に更新されたこのアドレス変換情報の更新内容を示す更新ログとを、第1のテーブル領域に対応するL2Pフラッシュブロックに書き込む処理を、周期的に実行する。また、別の論理アドレス範囲に対応する第2のテーブル領域に関するアドレス変換情報/更新ログ保存処理においては、L2Pテーブル管理部523は、DRAM7のL2Pテーブル71から取得される第2のテーブル領域のアドレス変換情報と、第2のテーブル領域のアドレス変換情報の取得の後に更新されたこのアドレス変換情報の更新内容を示す更新ログとを、第2のテーブル領域に対応するL2Pフラッシュブロックに書き込む処理を、周期的に実行する。このように、L2Pテーブル71のテーブル領域毎にアドレス変換情報/更新ログ保存処理を周期的に実行することにより、各L2Pフラッシュブロックにおいては、そのL2Pフラッシュブロックに対応するテーブル領域のアドレス変換情報とこのアドレス変換情報の更新内容を示す更新ログとの組を各々が含む複数のアドレス変換情報・更新ログペアが時系列順に格納される。つまり、各L2Pフラッシュブロックにおいては、アドレス変換情報、このアドレス変換情報の更新内容を示す更新ログ、この更新ログが反映された新たなアドレス変換情報、この新たなアドレス変換情報の更新内容を示す更新ログ、…、のようなフォーマットで、複数のアドレス変換情報・更新ログペアが時系列順に格納される。
【0062】
なお、各テーブル領域は、L2Pテーブル71全体を構成する複数のアドレス変換情報のうちの幾つかのアドレス変換情報を含んでいてもよい。複数のアドレス変換情報の各々は、連続する複数の論理アドレスにそれぞれ関連付けられた複数の物理アドレスの集合である。例えば、第1のテーブル領域は、L2Pテーブル71全体を構成する複数のアドレス変換情報のうちの第1のアドレス変換情報と第2のアドレス変換情報とを少なくとも含んでいてもよい。同様に、第2のテーブル領域は、L2Pテーブル71全体を構成する複数のアドレス変換情報のうちの第3のアドレス変換情報と第4のアドレス変換情報とを少なくとも含んでいてもよい。
【0063】
このようなケースにおいては、第1のテーブル領域に関するアドレス変換情報/更新ログ保存処理においては、L2Pテーブル管理部523は、(1)第1のアドレス変換情報をDRAM7から取得する処理と、(2)取得した第1のアドレス変換情報と、第1のアドレス変換情報の取得の後に更新された第1のテーブル領域の全てのアドレス変換情報についての更新内容を示す第1の更新ログとを、第1のテーブル領域に対応するL2Pフラッシュブロックに書き込む処理と、(3)第2のアドレス変換情報をDRAM7から取得する処理と、(4)取得した第2のアドレス変換情報と、第2のアドレス変換情報の取得の後に更新された第1のテーブル領域の全てのアドレス変換情報についての更新内容を示す第2の更新ログとを、第1のテーブル領域に対応するL2Pフラッシュブロックに書き込む処理と、を繰り返し実行する。この結果、第1のテーブル領域に対応するL2Pフラッシュブロックにおいては、第1のアドレス変換情報、第1の更新ログ、第2のアドレス変換情報、第2の更新ログ、第1の更新ログと第2の更新ログとの内容が反映された新たな第1のアドレス変換情報、新たな第1の更新ログ、第2の更新ログと新たな第1の更新ログとの内容が反映された新たな第2のアドレス変換情報、新たな第2の更新ログ、…、が格納される。
【0064】
同様に、第2のテーブル領域に関するアドレス変換情報/更新ログ保存処理においては、L2Pテーブル管理部523は、(1)第3のアドレス変換情報をDRAM7から取得する処理と、(2)取得した第3のアドレス変換情報と、第3のアドレス変換情報の取得の後に更新された第2のテーブル領域の全てのアドレス変換情報についての更新内容を示す第3の更新ログとを、第2のテーブル領域に対応するL2Pフラッシュブロックに書き込む処理と、(3)第4のアドレス変換情報をDRAM7から取得する処理と、(4)取得した第4のアドレス変換情報と第4のアドレス変換情報の取得の後に更新された第2のテーブル領域の全てのアドレス変換情報についての更新内容を示す第4の更新ログとを第2のテーブル領域に対応するL2Pフラッシュブロックに書き込む処理とを繰り返し実行する。この結果、第2のテーブル領域に対応するL2Pフラッシュブロックにおいては、第3のアドレス変換情報、第3の更新ログ、第4のアドレス変換情報、第4の更新ログ、第3の更新ログと第4の更新ログとの内容が反映された新たな第3のアドレス変換情報、新たな第3の更新ログ、第4の更新ログと新たな第3の更新ログとの内容が反映された新たな第4のアドレス変換情報、新たな第4の更新ログ、…、が格納される。
【0065】
また、L2Pテーブル管理部523は、予期しない電力喪失が起きた場合、L2Pフラッシュブロックに未保存の更新ログが、ログバッファ72-0、…、72-nのいずれかに存在するか否かを判定する。あるテーブル領域に対応するログバッファに、このテーブル領域に対応するL2Pフラッシュブロックに未保存の更新ログが存在する場合、L2Pテーブル管理部523は、キャパシタ81に蓄えられた電力を使用して、未保存の更新ログをL2Pフラッシュブロックに書き込む。つまり、ログバッファ72に格納されている更新ログは、PLP対象データに含まれる。
【0066】
例えば、L2Pテーブル管理部523は、第1のテーブル領域のアドレス変換情報の更新内容を示す更新ログ、および第2のテーブル領域のアドレス変換情報の更新内容を示す更新ログを、ログバッファ72-0およびログバッファ72-1を使用してそれぞれ管理する。予期しない電力喪失が起きたことに応じ、L2Pテーブル管理部523は、第1のテーブル領域に対応するL2Pフラッシュブロックに未保存の更新ログがログバッファ72-0にある場合、キャパシタ81に蓄えられた電力を使用して、ログバッファ72-0の未保存の更新ログを、第1のテーブル領域に対応するL2Pフラッシュブロックに書き込む。また、第2のテーブル領域に対応するL2Pフラッシュブロックに未保存の更新ログがログバッファ72-1にある場合、L2Pテーブル管理部523は、キャパシタ81に蓄えられた電力を使用して、ログバッファ72-1の未保存の更新ログを、第2のテーブル領域に対応するL2Pフラッシュブロックに書き込む。
【0067】
ロストLBAリスト保存部524は、L2Pテーブル71のテーブル領域毎に、ロストLBAリスト保存処理を実行する。ロストLBAリスト保存処理は、予期しない電力喪失によって喪失されたライトデータに対応する論理アドレスのリストを保存する処理である。例えば、第1のテーブル領域についてのロストLBAリスト保存処理においては、ロストLBAリスト保存部524は、第1のテーブル領域に対応する論理アドレス範囲に書き込まれるべきライトデータのうち、予期しない電力喪失によって喪失されたライトデータに対応する論理アドレスのリスト(第1のリスト)を、第1のテーブル領域に対応するL2Pフラッシュブロックに保存する。また、例えば、第2のテーブル領域についてのロストLBAリスト保存処理においては、ロストLBAリスト保存部524は、第2のテーブル領域に対応する論理アドレス範囲に書き込まれるべきライトデータのうち、予期しない電力喪失によって喪失されたライトデータに対応する論理アドレスのリスト(第2のリスト)を、第2のテーブル領域に対応するL2Pフラッシュブロックに保存する。
【0068】
第1のリストは、ホスト2から受信済みであり且つ第1の論理アドレス範囲に書き込まれるべきライトデータにそれぞれ対応する論理アドレスの集合から、NANDメモリ6への書き込みが完了したライトデータにそれぞれ対応する論理アドレスの集合を除いた残りの論理アドレスの集合である。
【0069】
第2のリストは、ホスト2から受信済みであり且つ第2の論理アドレス範囲に書き込まれるべきライトデータにそれぞれ対応する論理アドレスの集合から、NANDメモリ6への書き込みが完了したライトデータにそれぞれ対応する論理アドレスの集合を除いた残りの論理アドレスの集合である。
【0070】
第1のリストおよび第2のリストは、DRAM7に格納されているLBAリスト74に基づいて生成される。LBAリスト74は、ホスト2から受信済みであり且つNANDメモリ6への書き込みが完了していない全てのデータに対応する論理アドレスの集合である。
【0071】
ロストLBAリスト保存処理は、第1の方法または第2の方法を用いて実行される。
【0072】
第1の方法では、ロストLBAリスト保存部524は、予期しない電力喪失が起きたことに応じ、キャパシタ81に蓄えられた電力を使用して、第1のリストおよび第2のリストを、第1のテーブル領域に対応するL2Pフラッシュブロックおよび第2のテーブル領域に対応するL2Pフラッシュブロックにそれぞれ書き込む。このようにして、第1の方法では、予期しない電力喪失が起きた際に、第1のリストおよび第2のリストが、第1のテーブル領域に対応するL2Pフラッシュブロックおよび第2のテーブル領域に対応するL2Pフラッシュブロックにそれぞれ保存される。
【0073】
第2の方法では、ロストLBAリスト保存部524は、予期しない電力喪失が起きたことに応じ、キャパシタ81に蓄えられた電力を使用して、第1のリストおよび第2のリストをNANDメモリ6の所定の一つのブロックに書き込む。所定の一つのブロックは、例えば、シングルレベルセル・ブロック(SLCブロック)であってもよい。SLCブロックは、メモリセル当たりに1ビットのデータが書き込まれるプログラムモードであるSLCモードを使用してデータが書き込まれるブロックである。なお、各L2Pフラッシュブロックは、SLCブロック、トリプルレベルセル・ブロック(TLCブロック)、クワドレベルセル・ブロック(QLCブロック)のいずれであってもよい。TLCブロックは、メモリセル当たりに3ビットのデータが書き込まれるプログラムモードであるTLCモードを使用してデータが書き込まれるブロックである。QLCブロックは、メモリセル当たりに4ビットのデータが書き込まれるプログラムモードであるQLCモードを使用してデータが書き込まれるブロックである。そして、SSD3への電力の回復に応じ、ロストLBAリスト保存部524は、第1のリストおよび第2のリストを所定の一つのブロックから、第1のテーブル領域に対応するL2Pフラッシュブロックおよび第2のテーブル領域に対応するL2Pフラッシュブロックにそれぞれコピーする。このようにして、第2の方法では、予期しない電力喪失が起きた際に、第1のリストおよび第2のリストが、第1のテーブル領域に対応するL2Pフラッシュブロックおよび第2のテーブル領域に対応するL2Pフラッシュブロックにそれぞれ分配されるのではなく、SSD3への電力が回復した際に、第1のリストおよび第2のリストが、第1のテーブル領域に対応するL2Pフラッシュブロックおよび第2のテーブル領域に対応するL2Pフラッシュブロックにそれぞれ分配される。
【0074】
L2Pテーブルリビルド処理部525は、L2Pテーブル71のテーブル領域毎に、L2Pテーブルリビルド処理を実行する。L2Pテーブルリビルド処理は、各L2Pフラッシュブロックに格納されているアドレス変換情報および更新ログに基づいて、DRAM7上に、L2Pテーブル71の各テーブル領域の最新のアドレス変換情報を再構築する処理である。
【0075】
SSD3への電力が回復した場合、L2Pテーブルリビルド処理部525は、L2Pテーブルリビルド処理を実行する前に、SSD3が入出力コマンドを処理可能なレディー状態であることをホスト2に通知する。ある論理アドレス範囲に属する論理アドレスを指定する入出力コマンドがホスト2から受信された場合、L2Pテーブルリビルド処理部525は、複数のL2Pフラッシュブロックから、この論理アドレス範囲に対応するL2Pフラッシュブロックを選択する。そして、選択したL2Pフラッシュブロックに格納されているテーブル領域のアドレス変換情報と更新ログとに基づいて、L2Pテーブルリビルド処理部525は、DRAM7上に、この論理アドレス範囲に対応するテーブル領域の最新のアドレス変換情報を再構築する。予期しない電力喪失が起きた後にSSD3への電力が回復した場合には、再構築される最新のアドレス変換情報は、予期しない電力喪失が起きる直前のL2Pテーブル71のこのテーブル領域のアドレス変換情報である。
【0076】
例えば、第1のテーブル領域のアドレス変換情報を再構築する処理においては、L2Pテーブルリビルド処理部525は、第1のテーブル領域に対応するL2Pフラッシュブロックに格納されているアドレス変換情報のうちの最新のアドレス変換情報と、このL2Pフラッシュブロックに格納されている更新ログのうちの最新の更新ログとに基づいて、第1のテーブル領域の最新のアドレス変換情報を再構築することができる。つまり、L2Pテーブルリビルド処理部525は、第1のテーブル領域に対応するL2Pフラッシュブロックに格納されている最新のアドレス変換情報をDRAM7にコピーし、そして、このL2Pフラッシュブロックに格納されている最新の更新ログの内容を、DRAM7にコピーされたアドレス変換情報に反映する。
【0077】
また、例えば、第2のテーブル領域のアドレス変換情報を再構築する処理においては、L2Pテーブルリビルド処理部525は、第2のテーブル領域に対応するL2Pフラッシュブロックに格納されているアドレス変換情報のうちの最新のアドレス変換情報と、このL2Pフラッシュブロックに格納されている更新ログのうちの最新の更新ログとに基づいて、第2のテーブル領域の最新のアドレス変換情報を再構築することができる。つまり、L2Pテーブルリビルド処理部525は、第2のテーブル領域に対応するL2Pフラッシュブロックに格納されている最新のアドレス変換情報をDRAM7にコピーし、そして、このL2Pフラッシュブロックに格納されている最新の更新ログの内容を、DRAM7にコピーされたアドレス変換情報に反映する。
【0078】
また、第1のテーブル領域のアドレス変換情報が第1のアドレス変換情報と第2のアドレス変換情報とを含む場合には、第1のテーブル領域のアドレス変換情報を再構築する処理は、次のように実行される。
【0079】
L2Pテーブルリビルド処理部525は、第1のテーブル領域に対応するL2Pフラッシュブロックに格納されている第2のアドレス変換情報のうちの最新の第2のアドレス変換情報と、このL2Pフラッシュブロックに格納されている第1のアドレス変換情報のうちの最新の第1のアドレス変換情報とを、DRAM7にコピーする。そして、L2Pテーブルリビルド処理部525は、このL2Pフラッシュブロックに格納されている第1の更新ログのうちの最新の第1の更新ログの内容を、DRAM7にコピーされた第1のアドレス変換情報にのみ反映する。最新の第1の更新ログは、第1のテーブル領域の全てのアドレス変換情報についての更新ログを含む。しかし、この最新の第1の更新ログがL2Pフラッシュブロックに書き込まれた後に、最新の第2のアドレス変換情報がL2Pテーブル71からこのL2Pフラッシュブロックに書き込まれているので、最新の第2のアドレス変換情報には、既にこの最新の第1の更新ログの内容が反映済みである。このため、最新の第1の更新ログの内容を、DRAM7にコピーされた第2のアドレス変換情報に反映する処理を実行する必要はない。よって、最新の第1の更新ログの内容は、DRAM7にコピーされた第1のアドレス変換情報にのみ反映される。
【0080】
そして、L2Pテーブルリビルド処理部525は、このL2Pフラッシュブロックに格納されている第2の更新ログのうちの最新の第2の更新ログの内容を、DRAM7にコピーされた第1のアドレス変換情報と、DRAM7にコピーされた第2のアドレス変換情報との双方に反映する。第1のアドレス変換情報と第2のアドレス変換情報との双方に反映する理由は、この最新の第2の更新ログが、第1のテーブル領域の全てのアドレス変換情報についての最新の更新ログであるからである。
【0081】
また、第2のテーブル領域のアドレス変換情報が第3のアドレス変換情報と第4のアドレス変換情報とを含む場合には、第2のテーブル領域のアドレス変換情報を再構築する処理は、次のように実行される。
【0082】
L2Pテーブルリビルド処理部525は、第2のテーブル領域に対応するL2Pフラッシュブロックに格納されている第4のアドレス変換情報のうちの最新の第4のアドレス変換情報と、このL2Pフラッシュブロックに格納されている第3のアドレス変換情報のうちの最新の第3のアドレス変換情報とを、DRAM7にコピーする。そして、L2Pテーブルリビルド処理部525は、このL2Pフラッシュブロックに格納されている第3の更新ログのうちの最新の第3の更新ログの内容を、DRAM7にコピーされた第3のアドレス変換情報にのみ反映する。そして、L2Pテーブルリビルド処理部525は、このL2Pフラッシュブロックに格納されている第4の更新ログのうちの最新の第4の更新ログの内容を、DRAM7にコピーされた第3のアドレス変換情報と、DRAM7にコピーされた第4のアドレス変換情報との双方に反映する。
【0083】
この後、L2Pテーブルリビルド処理部525は、喪失されたライトデータに対応する論理アドレスのリストが、選択したL2Pフラッシュブロックに格納されているか否かを判定する。喪失されたライトデータに対応する論理アドレスのリストが選択したL2Pフラッシュブロックに格納されている場合、L2Pテーブルリビルド処理部525は、選択したL2Pフラッシュブロックに格納されているリストに基づいて、喪失されたライトデータに対応する論理アドレスの各々にエラーを示す値が関連付けられるように、L2Pテーブル71の再構築された最新のアドレス変換情報を更新する。
【0084】
このようにして、選択したブロックに対応するテーブル領域のアドレス変換情報が再構築され、さらに、喪失されたライトデータに対応する論理アドレスの各々に、エラーを示す値が関連付けられる。
【0085】
再構築されたアドレス変換情報は、ホスト2からのI/Oコマンドによって指定された論理アドレスが属する論理アドレス範囲に対応しているアドレス変換情報である。したがって、このI/Oコマンドの処理のために参照又は更新することが必要なアドレス変換情報を、他の論理アドレス範囲のアドレス変換情報よりも優先して再構築することが可能となる。よって、SSD3への電力が回復されてから、ホスト2からSSD3へのリード/ライトアクセスが実際に実行可能になるまでに要する時間を短縮することができる。
【0086】
また、たとえ喪失されたライトデータに対応する論理アドレスを指定するリードコマンドがホスト2から受信された場合であっても、コントローラ5は、エラーをホスト2に通知することができる。よって、リードコマンドによって指定された論理アドレスに対応するデータとは異なるデータが誤ってホスト2に返されるといった不具合を防止することができる。
【0087】
次に、複数のNAND型フラッシュメモリダイを含むNANDメモリ6の構成について説明する。図4は、実施形態に係るメモリシステムにおいて使用される、複数のチャンネルと複数のNAND型フラッシュメモリダイとの関係の例を示すブロック図である。
【0088】
複数のNAND型フラッシュメモリダイの各々は独立して動作可能である。このため、NAND型フラッシュメモリダイは、並列動作可能な単位として扱われる。図4においては、NANDインタフェース(I/F)57に16個のチャンネルCh.1~Ch.16が接続されており、16個のチャンネルCh.1~Ch.16の各々に2つのNAND型フラッシュメモリダイが接続されている場合が例示されている。
【0089】
この場合、チャンネルCh.1~Ch.16に接続された16個のNAND型フラッシュメモリダイ#1~#16がバンク#0として構成されてもよく、またチャンネルCh.1~Ch.16に接続された残りの16個のNAND型フラッシュメモリダイ#17~#32がバンク#1として構成されてもよい。バンクは、複数のメモリダイをバンクインタリーブによって並列動作させるための単位として扱われる。図4の構成例においては、16チャンネルと、2つのバンクを使用したバンクインタリーブとによって、最大32個のNAND型フラッシュメモリダイを並列動作させることができる。
【0090】
データ消去動作は、一つのブロック(物理ブロック)の単位で実行されてもよいし、並列動作可能な複数の物理ブロックの集合を含むブロックグループの単位で実行されてもよい。ブロックグループは、スーパーブロックとしても参照される。
【0091】
一つのブロックグループ、つまり複数の物理ブロックの集合を含む一つのスーパーブロックは、これに限定されないが、NAND型フラッシュメモリダイ#1~#32から一つずつ選択される計32個の物理ブロックを含んでいてもよい。なお、NAND型フラッシュメモリダイ#1~#32の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリダイ#1~#32の各々が、2つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリダイ#1~#32に対応する64個のプレーンから一つずつ選択される計64個の物理ブロックを含んでいてもよい。
【0092】
図5には、32個の物理ブロック(ここでは、NAND型フラッシュメモリダイ#1の物理ブロックBLK2、NAND型フラッシュメモリダイ#2の物理ブロックBLK3、NAND型フラッシュメモリダイ#3の物理ブロックBLK7、NAND型フラッシュメモリダイ#4内の物理ブロックBLK4、NAND型フラッシュメモリダイ#5内の物理ブロックBLK6、…、NAND型フラッシュメモリダイ#32内の物理ブロックBLK3)を含む一つのスーパーブロック(SB)が例示されている。
【0093】
なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。
【0094】
スーパーブロックは、スーパーブロックを構成する物理ブロックの各々に含まれるページ(物理ページ)P0~Py-1と同数の論理ページを含む。論理ページは、スーパーページとも称される。1つのスーパーページは、スーパーブロックに含まれる物理ブロックの数と同数の32個の物理ページを含む。例えば、図示されているスーパーブロックの先頭のスーパーページは、NAND型フラッシュメモリダイ#0,#2,#3,#4,#5,…,#32それぞれの物理ブロックBLK2,BLK3,BLK7,BLK4,BLK6,…,BLK3の物理ページP1の集合を含む。
【0095】
次に、L2Pテーブル71の構成について説明する。図6は、実施形態に係るメモリシステムにおいて使用されるL2Pテーブル71の構成例と、L2Pテーブル71の複数のテーブル領域と複数のL2Pフラッシュブロックとの関係の例とを示す図である。
【0096】
ここでは、SSD3の論理アドレス空間が、n+1個のLBA範囲に分割されている場合を想定する。論理アドレス空間は、LBA範囲#0と、LBA範囲#1と、LBA範囲#2と、…、LBA範囲#nとを含む。
【0097】
ショートカットテーブル710は、LBAと、L2Pテーブル71のL2Pフラグメントが格納されている記憶位置を示すメモリアドレスとの関係を保持するテーブルである。
【0098】
DRAM7のL2Pテーブル71は、複数のL2Pフラグメントを含む。複数のL2Pフラグメントの各々は、アドレス変換情報である。複数のL2Pフラグメントの各々は、連続する複数の論理アドレスそれぞれに対応する複数の物理アドレスを含み得る。例えば、一つのL2Pフラグメントは、連続する所定個数の論理アドレスにそれぞれ対応する所定個数の物理アドレスを含んでもよい。
【0099】
L2Pテーブル71は、LBA範囲#0に対応するテーブル領域T0と、LBA範囲#1に対応するテーブル領域T1と、LBA範囲#2に対応するテーブル領域T2と、…、LBA範囲#nに対応するテーブル領域Tnとに分割されている。テーブル領域T0~Tnの各々は、一つまたは複数のL2Pフラグメントを含む。図6では、各テーブル領域が4つのL2Pフラグメント(L2Pフラグメント#0~#3)を含む場合が例として示されている。
【0100】
L2Pテーブル71は、LBA範囲#0に対応するL2Pフラグメントの集合として、L2Pフラグメント711-00、L2Pフラグメント711-01、L2Pフラグメント711-02、およびL2Pフラグメント711-03を含む。L2Pフラグメント711-00は、LBA範囲#0を分割することによって得られる4つの小LBA範囲のうちの最初の小LBA範囲に対応するアドレス変換情報である。L2Pフラグメント711-01は、4つの小LBA範囲のうちの2番目の小LBA範囲に対応するアドレス変換情報である。L2Pフラグメント711-02は4つの小LBA範囲のうちの3番目の小LBA範囲に対応するアドレス変換情報である。L2Pフラグメント711-03は、4つの小LBA範囲のうちの最初の小LBA範囲に対応するアドレス変換情報である。
【0101】
L2Pテーブル71は、LBA範囲#1に対応するL2Pフラグメントの集合として、L2Pフラグメント711-10、L2Pフラグメント711-11、L2Pフラグメント711-12、およびL2Pフラグメント711-13を含む。
【0102】
L2Pテーブル71は、LBA範囲#2に対応するL2Pフラグメントの集合として、L2Pフラグメント711-20、L2Pフラグメント711-21、L2Pフラグメント711-22、およびL2Pフラグメント711-23を含む。
【0103】
また、L2Pテーブル71は、LBA範囲#nに対応するL2Pフラグメントの集合として、L2Pフラグメント711-n0、L2Pフラグメント711-n1、L2Pフラグメント711-n2、およびL2Pフラグメント711-n3を含む。
【0104】
ショートカットテーブル710は、L2Pテーブル71に含まれるL2Pフラグメントの総数と同数のポインタを含む。これらポインタの各々は、そのポインタに対応するL2Pフラグメントが格納されているDRAM7におけるメモリ領域のメモリアドレスを示す。
【0105】
NANDメモリ6のL2Pテーブル62は、L2Pテーブル71の各テーブル領域のアドレス変換情報をバックアップするために使用される情報を保持する。L2Pテーブル62は、LBA範囲#0~#n(つまりテーブル領域T0~Tn)に1対1の関係でそれぞれ対応付けられたn+1個のL2Pフラッシュブロックに格納される。L2Pフラッシュブロック62-0は、LBA範囲#0に対応するブロックである。L2Pフラッシュブロック62-1は、LBA範囲#1に対応するブロックである。L2Pフラッシュブロック62-2は、LBA範囲#2に対応するブロックである。また、L2Pフラッシュブロック62-nは、LBA範囲#nに対応するブロックである。
【0106】
次に、テーブル領域T0のアドレス変換情報/更新ログ保存処理を説明する。テーブル領域T0にL2Pフラッシュブロック62-0が割り当てられると、コントローラ5は、例えば、L2Pフラグメント(#1)711-01と、L2Pフラグメント(#2)711-02と、L2Pフラグメント(#3)711-03とを、L2Pフラッシュブロック62-0のページP0に書き込む。
【0107】
この後、コントローラ5は、L2Pフラグメント(#0)711-00をテーブル領域T0から取得する。そして、コントローラ5は、LBA範囲#0に対応するログバッファ72-0に蓄積された更新ログの量が閾値に達するまで待つ。LBA範囲#0に対応するログバッファ72-0に蓄積された更新ログの量が閾値に達した時、コントローラ5は、取得したL2Pフラグメント(#0)711-00と、ログバッファ72-0に格納されている更新ログ(更新ログ+0)とを、L2Pフラッシュブロック62-0のページP1に書き込む。ログバッファ72-0に格納されている更新ログ(更新ログ+0)がページP1に書き込まれると、ログバッファ72-0は、未保存の更新ログを含まない空き状態となる。L2Pフラグメント(#0)711-00は、ログバッファ72-0に蓄積された更新ログをページP1に書き込む前にテーブル領域T0から既に取得されている。このため、更新ログ+0は、L2Pフラグメント(#0)711-00の取得後に更新されたL2Pフラグメント(#0)711-00~L2Pフラグメント(#3)711-03の全てについての更新内容を示す。例えば、L2Pフラグメント(#0)711-00に対応する所定個数のLBAのうちのLBAiに関連付けられた物理アドレスがPBA10からPBA20に更新され、且つ、L2Pフラグメント(#1)711-01に対応する所定個数の論理アドレスのうちのLBAjに関連付けられた物理アドレスがPBA30からPBA40に更新された場合、更新ログ+0は、LBAiにPBA20が関連付けられていることを示す更新情報と、LBAjにPBA40が関連付けられていることを示す更新情報とを含む。
【0108】
L2Pフラグメント(#0)711-00と更新ログ+0とをL2Pフラッシュブロック62-0のページP1に書き込むと、コントローラ5は、L2Pフラグメント(#1)711-01をテーブル領域T0から取得する。そして、コントローラ5は、LBA範囲#0に対応するログバッファ72-0に新たに蓄積された更新ログの量が閾値に達するまで待つ。LBA範囲#0に対応するログバッファ72-0に新たに蓄積された更新ログの量が閾値に達した時、コントローラ5は、取得したL2Pフラグメント(#1)711-01と、ログバッファ72-0に格納されている更新ログ(更新ログ+1)とを、L2Pフラッシュブロック62-0のページP2に書き込む。L2Pフラグメント(#1)711-01は、ログバッファ72-0に蓄積された更新ログをページP2に書き込む前にテーブル領域T0から既に取得されている。このため、更新ログ+1も、L2Pフラグメント(#0)711-00の取得後に更新されたテーブル領域T0の全てのL2Pフラグメントについての更新内容を示す。
【0109】
L2Pフラグメント(#1)711-01と更新ログ+1とをL2Pフラッシュブロック62-0のページP2に書き込むと、コントローラ5は、L2Pフラグメント(#2)711-02をテーブル領域T0から取得する。そして、コントローラ5は、LBA範囲#0に対応するログバッファ72-0に新たに蓄積された更新ログの量が閾値に達するまで待つ。LBA範囲#0に対応するログバッファ72-0に新たに蓄積された更新ログの量が閾値に達した時、コントローラ5は、取得したL2Pフラグメント(#2)711-02と、ログバッファ72-0に格納されている更新ログ(更新ログ+2)とを、L2Pフラッシュブロック62-0のページP3に書き込む。L2Pフラグメント(#2)711-02は、ログバッファ72-0に蓄積された更新ログをページP3に書き込む前にテーブル領域T0から既に取得されている。このため、更新ログ+2も、L2Pフラグメント(#2)711-02の取得後に更新されたテーブル領域T0の全てのL2Pフラグメントについての更新内容を示す。
【0110】
L2Pフラグメント(#2)711-02と更新ログ+2とをL2Pフラッシュブロック62-0のページP3に書き込むと、コントローラ5は、L2Pフラグメント(#3)711-03をテーブル領域T0から取得する。そして、コントローラ5は、LBA範囲#0に対応するログバッファ72-0に新たに蓄積された更新ログの量が閾値に達するまで待つ。LBA範囲#0に対応するログバッファ72-0に新たに蓄積された更新ログの量が閾値に達した時、コントローラ5は、取得したL2Pフラグメント(#3)711-03と、ログバッファ72-0に格納されている更新ログ(更新ログ+3)とを、L2Pフラッシュブロック62-0のページP4に書き込む。L2Pフラグメント(#3)711-03は、ログバッファ72-0に蓄積された更新ログをページP4に書き込む前にテーブル領域T0から既に取得されている。このため、更新ログ+3も、L2Pフラグメント(#3)711-03の取得後に更新されたテーブル領域T0の全てのL2Pフラグメントについての更新内容を示す。
【0111】
L2Pフラグメント(#3)711-03と更新ログ+3とをL2Pフラッシュブロック62-0のページP4に書き込むと、コントローラ5は、L2Pフラグメント(#0)711-00をテーブル領域T0から取得する。そして、コントローラ5は、LBA範囲#0に対応するログバッファ72-0に新たに蓄積された更新ログの量が閾値に達するまで待つ。LBA範囲#0に対応するログバッファ72-0に新たに蓄積された更新ログの量が閾値に達した時、コントローラ5は、取得したL2Pフラグメント(#0)711-00と、ログバッファ72-0に格納されている更新ログ(更新ログ+3)とを、L2Pフラッシュブロック62-0のページP5に書き込む。L2Pフラグメント(#0)711-00は、ログバッファ72-0に蓄積された更新ログをページP5に書き込む前にテーブル領域T0から既に取得されている。このため、更新ログ+4も、L2Pフラグメント(#0)711-00の取得後に更新されたテーブル領域T0の全てのL2Pフラグメントについての更新内容を示す。
【0112】
L2Pフラグメント(#0)711-00と更新ログ+4とをL2Pフラッシュブロック62-0のページP5に書き込むと、コントローラ5は、L2Pフラグメント(#1)711-01をテーブル領域T0から取得する。そして、コントローラ5は、LBA範囲#0に対応するログバッファ72-0に新たに蓄積された更新ログの量が閾値に達するまで待つ。ここで、1度目の予期しない電力喪失が起きた場合を想定する。
【0113】
コントローラ5は、L2Pフラッシュブロック62-0にまだ保存されていない新たな更新ログがログバッファ72-0に格納されているか否かを判定する。L2Pフラッシュブロック62-0にまだ保存されていない新たな更新ログがログバッファ72-0に格納されている場合、コントローラ5は、取得したL2Pフラグメント(#1)711-01と、ログバッファ72-0に格納されている更新ログ(更新ログ+5)とを、L2Pフラッシュブロック62-0のページP6に書き込む。そして、コントローラ5は、LBA範囲#0に対応するロストLBAリストを、L2Pフラッシュブロック62-0のページP7に書き込む。LBA範囲#0に対応するロストLBAリストは、LBA範囲#0に書き込むべきライトデータのうち、予期しない電力喪失によって喪失されたライトデータに対応するLBAのリストである。
【0114】
このように、ログバッファ72-0に蓄積された更新ログの量に応じて、コントローラ5は、L2Pフラッシュブロック62-0にL2Pフラグメントと、更新ログとを書き込む。また、予期しない電力喪失が生じた場合、コントローラ5は、ログバッファ72-0に蓄積されている更新ログの量に関わらず、更新ログと、L2PフラグメントとをL2Pフラッシュブロック62-0に書き込む。これにより、ログバッファ72-0に蓄積されている更新ログが喪失されることを防ぐことができる。またさらに、予期しない電力喪失が生じた場合、コントローラ5は、ロストLBAリストをL2Pフラッシュブロック62-0に書き込む。これにより、コントローラ5は、NANDメモリ6への書き込みが完了されずに、LBA範囲#0に書き込むべきライトデータのうち、予期しない電力喪失によって失われたライトデータのLBAそれぞれをL2Pフラッシュブロック62-0に記録することができる。
【0115】
SSD3への電力が回復してSSD3が再び動作を開始した後、コントローラ5は、L2Pフラグメント(#2)711-02をテーブル領域T0から取得する。そして、コントローラ5は、LBA範囲#0に対応するログバッファ72-0に新たに蓄積された更新ログの量が閾値に達するまで待つ。LBA範囲#0に対応するログバッファ72-0に新たに蓄積された更新ログの量が閾値に達した時、コントローラ5は、取得したL2Pフラグメント(#2)711-02と、ログバッファ72-0に格納されている更新ログ(更新ログ+6)とを、L2Pフラッシュブロック62-0のページP8に書き込む。
【0116】
L2Pフラグメント(#2)711-02と更新ログ+6とをL2Pフラッシュブロック62-0のページP8に書き込むと、コントローラ5は、L2Pフラグメント(#3)711-03をテーブル領域T0から取得する。そして、コントローラ5は、LBA範囲#0に対応するログバッファ72-0に新たに蓄積された更新ログの量が閾値に達するまで待つ。LBA範囲#0に対応するログバッファ72-0に新たに蓄積された更新ログの量が閾値に達した時、コントローラ5は、取得したL2Pフラグメント(#3)711-03と、ログバッファ72-0に格納されている更新ログ(更新ログ+7)とを、L2Pフラッシュブロック62-0のページP8に書き込む。
【0117】
L2Pフラグメント(#3)711-03と更新ログ+7とをL2Pフラッシュブロック62-0のページP8に書き込むと、コントローラ5は、L2Pフラグメント(#0)711-00をテーブル領域T0から取得する。そして、コントローラ5は、LBA範囲#0に対応するログバッファ72-0に新たに蓄積された更新ログの量が閾値に達するまで待つ。ここで、2度目の予期しない電力喪失が起きた場合を想定する。
【0118】
コントローラ5は、L2Pフラッシュブロック62-0にまだ保存されていない新たな更新ログがログバッファ72-0に格納されているか否かを判定する。L2Pフラッシュブロック62-0にまだ保存されていない新たな更新ログがログバッファ72-0に格納されている場合、コントローラ5は、取得したL2Pフラグメント(#0)711-00と、ログバッファ72-0に格納されている更新ログ(更新ログ+8)とを、L2Pフラッシュブロック62-0のページP10に書き込む。そして、コントローラ5は、LBA範囲#0に対応するロストLBAリストを、L2Pフラッシュブロック62-0のページP11に書き込む。
【0119】
SSD3への電力が回復してSSD3が再び動作を開始した後、コントローラ5は、L2Pフラグメント(#1)711-01をテーブル領域T0から取得する。そして、コントローラ5は、LBA範囲#0に対応するログバッファ72-0に新たに蓄積された更新ログの量が閾値に達するまで待つ。LBA範囲#0に対応するログバッファ72-0に新たに蓄積された更新ログの量が閾値に達した時、コントローラ5は、取得したL2Pフラグメント(#1)711-01と、ログバッファ72-0に格納されている更新ログ(更新ログ+9)とを、L2Pフラッシュブロック62-0のページP12に書き込む。
【0120】
そして、以上説明した動作と同様に、コントローラ5は、L2Pフラグメント(#2)711-02と更新ログ(更新ログ+10)とを、L2Pフラッシュブロック62-0のページP13に書き込む。そして、コントローラ5は、L2Pフラグメント(#3)711-03と更新ログ(更新ログ+11)とを、L2Pフラッシュブロック62-0のページP14に書き込む。
【0121】
次に、テーブル領域T0のアドレス変換情報/更新ログ保存処理と並行して実行される、テーブル領域T1~Tnのアドレス変換情報/更新ログ保存処理を説明する。
【0122】
まず、テーブル領域T1のアドレス変換情報/更新ログ保存処理を説明する。テーブル領域T1にL2Pフラッシュブロック62-1が割り当てられると、コントローラ5は、L2Pフラグメント(#1)711-11と、L2Pフラグメント(#2)711-12と、L2Pフラグメント(#3)711-13とを、L2Pフラッシュブロック62-1のページP0に書き込む。
【0123】
この後、コントローラ5は、L2Pフラグメント(#0)711-10をテーブル領域T1から取得する。そして、コントローラ5は、LBA範囲#1に対応するログバッファ72-1に蓄積された更新ログの量が閾値に達するまで待つ。LBA範囲#1に対応するログバッファ72-1に蓄積された更新ログの量が閾値に達した時、コントローラ5は、取得したL2Pフラグメント(#0)711-10と、ログバッファ72-1に格納されている更新ログ(更新ログ+0)とをL2Pフラッシュブロック62-1のページP1に書き込む。
【0124】
L2Pフラグメント(#0)711-10と更新ログ+0とをL2Pフラッシュブロック62-1のページP1に書き込むと、コントローラ5は、L2Pフラグメント(#1)711-11をテーブル領域T1から取得する。コントローラ5は、LBA範囲#1に対応するログバッファ72-1に蓄積された更新ログの量が閾値に達するまで待つ。ログバッファ72-1に蓄積された更新ログの量が閾値に達した時、コントローラ5は、取得したL2Pフラグメント(#1)711-11と、ログバッファ72-1に格納されている更新ログ(更新ログ+1)とをL2Pフラッシュブロック62-1のページP2に書き込む。テーブル領域T1のアドレス変換情報が更新される量がテーブル領域T0のアドレス変換情報が更新される量よりも少ない場合は、L2Pフラッシュブロック62-1に書き込まれるL2Pフラグメント・更新ログのペアの数は、L2Pフラッシュブロック62-0に書き込まれるL2Pフラグメント・更新ログのペアの数よりも少なくなる。
【0125】
L2Pフラグメント(#1)711-11と更新ログ+1とをL2Pフラッシュブロック62-1のページP2に書き込んだ後に1度目の予期しない電力喪失が起きた場合であって、1度目の予期しない電力喪失が起きた際に、L2Pフラッシュブロック62-1に未保存の新たな更新ログが、ログバッファ72-1に格納されていない場合には、コントローラ5は、LBA範囲#1に対応するロストLBAリストを、L2Pフラッシュブロック62-1のページP3に書き込む。
【0126】
SSD3への電力が回復してSSD3が再び動作を開始した後、コントローラ5は、L2Pフラグメント(#2)711-12をテーブル領域T1から取得する。そして、コントローラ5は、LBA範囲#1に対応するログバッファ72-1に新たに蓄積された更新ログの量が閾値に達するまで待つ。LBA範囲#1に対応するログバッファ72-1に新たに蓄積された更新ログの量が閾値に達した時、コントローラ5は、取得したL2Pフラグメント(#2)711-12と、ログバッファ72-1に格納されている更新ログ(更新ログ+2)とを、L2Pフラッシュブロック62-1のページP4に書き込む。
【0127】
そして、以上の動作と同様に、コントローラ5は、L2Pフラグメント(#3)711-13と更新ログ+3とをL2Pフラッシュブロック62-1のページP5に書き込む。そして、コントローラ5は、L2Pフラグメント(#4)711-14と更新ログ+4とをL2Pフラッシュブロック62-1のページP6に書き込む。
【0128】
ここで、2度目の予期しない電力喪失が起きた場合、コントローラ5は、LBA範囲#1に対応するロストLBAリストを、L2Pフラッシュブロック62-1のページP7に書き込む。なお、LBA範囲#1に書き込まれるべき全てのライトデータの書き込みが完了している場合には、LBA範囲#1に対応するロストLBAリストは存在しない。L2Pフラッシュブロック62-1のページP7にロストLBAリストを書き込む処理は、実行されない。
【0129】
次に、テーブル領域T2のアドレス変換情報/更新ログ保存処理を説明する。テーブル領域T2にL2Pフラッシュブロック62-1が割り当てられると、コントローラ5は、L2Pフラグメント(#1)711-21と、L2Pフラグメント(#2)711-22と、L2Pフラグメント(#3)711-23とを、L2Pフラッシュブロック62-2のページP0に書き込む。
【0130】
この後、コントローラ5は、L2Pフラグメント(#0)711-20をテーブル領域T2から取得する。そして、コントローラ5は、LBA範囲#2に対応するログバッファ72-2に蓄積された更新ログの量が閾値に達するまで待つ。LBA範囲#2に対応するログバッファ72-2に蓄積された更新ログの量が閾値に達した時、コントローラ5は、取得したL2Pフラグメント(#0)711-20と、ログバッファ72-2に格納されている更新ログ(更新ログ+0)とをL2Pフラッシュブロック62-2のページP1に書き込む。
【0131】
L2Pフラグメント(#0)711-20と更新ログ+0とをL2Pフラッシュブロック62-2のページP1に書き込むと、コントローラ5は、L2Pフラグメント(#1)711-21をテーブル領域T2から取得する。コントローラ5は、LBA範囲#2に対応するログバッファ72-2に蓄積された更新ログの量が閾値に達するまで待つ。ログバッファ72-2に蓄積された更新ログの量が閾値に達した時、コントローラ5は、取得したL2Pフラグメント(#1)711-21と、ログバッファ72-2に格納されている更新ログ(更新ログ+1)とをL2Pフラッシュブロック62-2のページP2に書き込む。
【0132】
L2Pフラグメント(#1)711-21と更新ログ+1とをL2Pフラッシュブロック62-2のページP2に書き込んだ後に1度目の予期しない電力喪失が起きた場合であって、1度目の予期しない電力喪失が起きた際に、L2Pフラッシュブロック62-2に未保存の更新ログがログバッファ72-2に格納されていない場合には、コントローラ5は、LBA範囲#2に対応するロストLBAリストを、L2Pフラッシュブロック62-2のページP3に書き込む。
【0133】
SSD3への電力が回復してSSD3が再び動作を開始した後、コントローラ5は、L2Pフラグメント(#2)711-22をテーブル領域T2から取得する。そして、コントローラ5は、LBA範囲#2に対応するログバッファ72-2に新たに蓄積された更新ログの量が閾値に達するまで待つ。LBA範囲#2に対応するログバッファ72-2に新たに蓄積された更新ログの量が閾値に達した時、コントローラ5は、取得したL2Pフラグメント(#2)711-22と、ログバッファ72-2に格納されている更新ログ(更新ログ+2)とを、L2Pフラッシュブロック62-2のページP4に書き込む。
【0134】
そして、以上の動作と同様に、コントローラ5は、L2Pフラグメント(#3)711-23と更新ログ+3とをL2Pフラッシュブロック62-2のページP5に書き込む。そして、コントローラ5は、L2Pフラグメント(#0)711-20と更新ログ+4とをL2Pフラッシュブロック62-1のページP6に書き込む。
【0135】
L2Pフラグメント(#0)711-20と更新ログ+4とをL2Pフラッシュブロック62-2のページP6に書き込んだ後に2度目の予期しない電力喪失が起きた場合であって、2度目の予期しない電力喪失が起きた際に、L2Pフラッシュブロック62-2に未保存の更新ログがログバッファ72-2に格納されていない場合には、コントローラ5は、LBA範囲#2に対応するロストLBAリストを、L2Pフラッシュブロック62-2のページP7に書き込む。
【0136】
SSD3への電力が回復してSSD3が再び動作を開始した後、コントローラ5は、以上の動作と同様に、L2Pフラグメント(#1)711-21と更新ログ+5とをL2Pフラッシュブロック62-2のページP8に書き込む。そして、コントローラ5は、L2Pフラグメント(#2)711-22と更新ログ+6とをL2Pフラッシュブロック62-2のページP9に書き込む。そして、コントローラ5は、L2Pフラグメント(#3)711-23と更新ログ+7とをL2Pフラッシュブロック62-2のページP10に書き込む。
【0137】
次に、テーブル領域Tnのアドレス変換情報/更新ログ保存処理を説明する。テーブル領域TnにL2Pフラッシュブロック62-nが割り当てられると、コントローラ5は、例えば、L2Pフラグメント(#1)711-n1と、L2Pフラグメント(#2)711-n2と、L2Pフラグメント(#3)711-n3とを、L2Pフラッシュブロック62-nのページP0に書き込む。
【0138】
この後、コントローラ5は、テーブル領域T0~T2のアドレス変換情報/更新ログ保存処理と同様の手順で、L2Pフラグメント(#0)711-n0と更新ログ+0とをL2Pフラッシュブロック62-nのページP1に書き込む処理と、L2Pフラグメント(#1)711-n1と更新ログ+1とをL2Pフラッシュブロック62-nのページP2に書き込む処理と、L2Pフラグメント(#2)711-n2と更新ログ+2とをL2Pフラッシュブロック62-nのページP3に書き込む処理と、L2Pフラグメント(#3)711-n3と更新ログ+3とをL2Pフラッシュブロック62-nのページP4に書き込む処理と、L2Pフラグメント(#0)711-n0と更新ログ+4とをL2Pフラッシュブロック62-nのページP5に書き込む処理と、L2Pフラグメント(#1)711-n1と更新ログ+5とをL2Pフラッシュブロック62-nのページP6に書き込む処理とを実行する。
【0139】
L2Pフラグメント(#1)711-n1と更新ログ+5とをL2Pフラッシュブロック62-nのページP6に書き込んだ後に1度目の予期しない電力喪失が起きた場合であって、1度目の予期しない電力喪失が起きた際に、L2Pフラッシュブロック62-nに未保存の更新ログがログバッファ72-nに格納されていない場合には、コントローラ5は、LBA範囲#nに対応するロストLBAリストをL2Pフラッシュブロック62-nのページP7に書き込む。
【0140】
SSD3への電力が回復してSSD3が再び動作を開始した後、コントローラ5は、L2Pフラグメント(#2)711-n2と更新ログ+6とをL2Pフラッシュブロック62-nのページP8に書き込む。
【0141】
L2Pフラグメント(#2)711-n2と更新ログ+6とをL2Pフラッシュブロック62-nのページP8に書き込んだ後に2度目の予期しない電力喪失が起きた場合であって、2度目の予期しない電力喪失が起きた際に、L2Pフラッシュブロック62-nに未保存の更新ログがログバッファ72-nに格納されていない場合には、コントローラ5は、LBA範囲#nに対応するロストLBAリストをL2Pフラッシュブロック62-nのページP9に書き込む。
【0142】
次に、SSD3のLBA空間を分割することによって得られるによって複数のLBA範囲を説明する。図7は、実施形態に係るメモリシステムにおける、複数のLBA範囲とL2Pテーブル71の複数のテーブル領域との関係の例を示す図である。
【0143】
ここで、SSD3のLBA空間は、LBA0からLBA1000n+999までの10000×(n+1)個のLBAで構成される。LBA空間は、n+1個のLBA範囲に分けられている。各LBA範囲は、同じ数のLBAを含む。一つのLBA範囲は、例えば、1000個の連続するLBAで構成される。
【0144】
LBA範囲#0は、LBA0からLBA999までの1000個のLBAで構成される。BA範囲#1は、LBA1000からLBA1999までの1000個のLBAで構成される。LBA範囲#2は、LBA2000からLBA2999までの1000個のLBAで構成される。また、LBA範囲#nは、LBA1000nからLBA1000n+999までの1000個のLBAで構成される。
【0145】
L2Pテーブル71は、複数のL2Pフラグメント711-00~711-n3を含む。L2Pフラグメント711-00~711-n3の各々は、例えば、連続する250個のLBAにそれぞれ対応する250個の物理アドレスを示す情報をアドレス変換情報として含む。
【0146】
L2Pフラグメント711-00は、LBA範囲#0に含まれるLBA0からLBA249までの250個のLBAにそれぞれに対応する250個の物理アドレスを示す情報を含む。L2Pフラグメント711-00が格納されているDRAM7の記憶領域を示すメモリアドレスは、ショートカットテーブル710における、LBA0からLBA249までのLBAに対応するエントリに格納される。
【0147】
L2Pフラグメント711-01は、LBA範囲#0に含まれるLBA250からLBA499までの250個のLBAにそれぞれに対応する250個の物理アドレスを示す情報を含む。L2Pフラグメント711-01が格納されているDRAM7の記憶領域を示すメモリアドレスは、ショートカットテーブル710における、LBA250からLBA499までのLBAに対応するエントリに格納される。
【0148】
L2Pフラグメント711-02は、LBA範囲#0に含まれるLBA500からLBA749までの250個のLBAにそれぞれに対応する250個の物理アドレスを示す情報を含む。L2Pフラグメント711-02が格納されているDRAM7の記憶領域を示すメモリアドレスは、ショートカットテーブル710における、LBA500からLBA749までのLBAに対応するエントリに格納される。
【0149】
L2Pフラグメント711-03は、LBA範囲#0に含まれるLBA750からLBA999までの250個のLBAにそれぞれに対応する250個の物理アドレスを示す情報を含む。L2Pフラグメント711-03が格納されているDRAM7の記憶領域を示すメモリアドレスは、ショートカットテーブル710における、LBA750からLBA999までのLBAに対応するエントリに格納される。
【0150】
L2Pフラグメント711-10は、LBA範囲#1に含まれるLBA1000からLBA1249までの250個のLBAにそれぞれに対応する250個の物理アドレスを示す情報を含む。L2Pフラグメント711-10が格納されているDRAM7の記憶領域を示すメモリアドレスは、ショートカットテーブル710における、LBA1000からLBA1249までのLBAに対応するエントリに格納される。
【0151】
L2Pフラグメント711-11は、LBA範囲#1に含まれるLBA1250からLBA1499までの250個のLBAにそれぞれに対応する250個の物理アドレスを示す情報を含む。L2Pフラグメント711-11が格納されているDRAM7の記憶領域を示すメモリアドレスは、ショートカットテーブル710における、LBA1250からLBA1499までのLBAに対応するエントリに格納される。
【0152】
L2Pフラグメント711-12は、LBA範囲#1に含まれるLBA1500からLBA1749までの250個のLBAにそれぞれに対応する250個の物理アドレスを示す情報を含む。L2Pフラグメント711-12が格納されているDRAM7の記憶領域を示すメモリアドレスは、ショートカットテーブル710における、LBA1500からLBA1749までのLBAに対応するエントリに格納される。
【0153】
L2Pフラグメント711-13は、LBA範囲#1に含まれるLBA1750からLBA1999までの250個のLBAにそれぞれに対応する250個の物理アドレスを示す情報を含む。L2Pフラグメント711-13が格納されているDRAM7の記憶領域を示すメモリアドレスは、ショートカットテーブル710における、LBA1750からLBA1999までのLBAに対応するエントリに格納される。
【0154】
L2Pフラグメント711-20は、LBA範囲#2に含まれるLBA2000からLBA2249までの250個のLBAにそれぞれに対応する250個の物理アドレスを示す情報を含む。L2Pフラグメント711-20が格納されているDRAM7の記憶領域を示すメモリアドレスは、ショートカットテーブル710における、LBA2000からLBA2249までのLBAに対応するエントリに格納される。
【0155】
L2Pフラグメント711-21は、LBA範囲#2に含まれるLBA2250からLBA2499までの250個のLBAにそれぞれに対応する250個の物理アドレスを示す情報を含む。L2Pフラグメント711-21が格納されているDRAM7の記憶領域を示すメモリアドレスは、ショートカットテーブル710における、LBA2250からLBA2499までのLBAに対応するエントリに格納される。
【0156】
L2Pフラグメント711-22は、LBA範囲#2に含まれるLBA2500からLBA2749までの250個のLBAにそれぞれに対応する250個の物理アドレスを示す情報を含む。L2Pフラグメント711-22が格納されているDRAM7の記憶領域を示すメモリアドレスは、ショートカットテーブル710における、LBA2500からLBA2749までのLBAに対応するエントリに格納される。
【0157】
L2Pフラグメント711-23は、LBA範囲#2に含まれるLBA2750からLBA2999までの250個のLBAにそれぞれに対応する250個の物理アドレスを示す情報を含む。L2Pフラグメント711-23が格納されているDRAM7の記憶領域を示すメモリアドレスは、ショートカットテーブル710における、LBA2750からLBA2999までのLBAに対応するエントリに格納される。
【0158】
また、L2Pフラグメント711-n0は、LBA範囲#nに含まれるLBA1000nからLBA1000n+249までの250個のLBAにそれぞれに対応する250個の物理アドレスを示す情報を含む。L2Pフラグメント711-n0が格納されているDRAM7の記憶領域を示すメモリアドレスは、ショートカットテーブル710における、LBA1000nからLBA1000n+249までのLBAに対応するエントリに格納される。
【0159】
L2Pフラグメント711-n1は、LBA範囲#nに含まれるLBA250からLBA1000n+499までの250個のLBAにそれぞれに対応する250個の物理アドレスを示す情報を含む。L2Pフラグメント711-n1が格納されているDRAM7の記憶領域を示すメモリアドレスは、ショートカットテーブル710における、LBA1000n+250からLBA1000n+499までのLBAに対応するエントリに格納される。
【0160】
L2Pフラグメント711-n2は、LBA範囲#nに含まれるLBA1000n+500からLBA1000n+749までの250個のLBAにそれぞれに対応する250個の物理アドレスを示す情報を含む。L2Pフラグメント711-n2が格納されているDRAM7の記憶領域を示すメモリアドレスは、ショートカットテーブル710における、LBA1000n+500からLBA1000n+749までのLBAに対応するエントリに格納される。
【0161】
L2Pフラグメント711-n3は、LBA範囲#nに含まれるLBA1000n+750からLBA1000n+999までの250個のLBAにそれぞれに対応する250個の物理アドレスを示す情報を含む。L2Pフラグメント711-n3が格納されているDRAM7の記憶領域を示すメモリアドレスは、ショートカットテーブル710における、LBA1000n+750からLBA1000n+999までのLBAに対応するエントリに格納される。
【0162】
次に、L2Pフラグメントについて説明する。図8は、実施形態に係るメモリシステムにおいて使用されるL2Pフラグメントの例を示す図である。図8では、L2Pフラグメント711-00が示されている。
【0163】
L2Pフラグメント711-00は、LBA0からLBA249までの250個のLBAにそれぞれに対応する250個の物理アドレスそれぞれを示す情報を含む。
【0164】
L2Pフラグメント711-00の1番目のエントリは、LBA0に対応する物理アドレスであるPBA10を示す情報を保持する。L2Pフラグメント711-00の2番目のエントリは、LBA1に対応する物理アドレスであるPBA11を示す情報を保持する。L2Pフラグメント711-00の3番目のエントリは、LBA2に対応する物理アドレスであるPBA20を示す情報を保持する。L2Pフラグメント711-00の4番目のエントリは、LBA3に対応する物理アドレスであるPBA50を示す情報を保持する。L2Pフラグメント711-00の5番目のエントリは、LBA4に対応する物理アドレスであるPBA30を示す情報を保持する。同様に、L2Pフラグメント711-00の250番目のエントリは、LBA249に対応する物理アドレスであるPBA300を示す情報を保持する。なお、喪失されたデータに対応するLBAが対応付けられているエントリには、PBAの代わりに、エラー(訂正不能なデータエラー)が発生したことを示す値が格納される。
【0165】
次に、テーブル領域と、ログバッファと、L2Pテーブルとの関係について説明する。図9は、実施形態に係るメモリシステムにおける、複数のLBA範囲と、L2Pテーブル71の複数のテーブル領域と、複数のログバッファと、複数のL2Pフラッシュブロックとの関係の例を示す図である。
【0166】
LBA範囲#0に対応するL2Pテーブル71のテーブル領域T0(L2Pフラグメント711-00~711-03)には、ログバッファ72-0と、L2Pテーブル62のL2Pフラッシュブロック62-0とが対応付けられる。
【0167】
LBA範囲#1に対応するL2Pテーブル71のテーブル領域T1(L2Pフラグメント711-10~711-13)には、ログバッファ72-1と、L2Pテーブル62のL2Pフラッシュブロック62-1とが対応付けられる。
【0168】
LBA範囲#2に対応するL2Pテーブル71のテーブル領域T2(L2Pフラグメント711-20~711-23)には、ログバッファ72-2と、L2Pテーブル62のL2Pフラッシュブロック62-2とが対応付けられる。
【0169】
また、LBA範囲#nに対応するL2Pテーブル71のテーブル領域Tn(L2Pフラグメント711-n0~711-n3)には、ログバッファ72-nと、L2Pテーブル62のL2Pフラッシュブロック62-nとが対応付けられる。
【0170】
LBA範囲#0に含まれるあるLBAに関するアドレス変換情報が更新されると、コントローラ5は、この更新に関する更新ログをログバッファ72-0に格納する。ログバッファ72-0に蓄積された更新ログの量が閾値に達した時、コントローラ5は、L2Pテーブル71のL2Pフラグメント711-00、L2Pフラグメント711-01、L2Pフラグメント711-02、およびL2Pフラグメント711-03のうちの一つのL2Pフラグメントと、ログバッファ72-0に蓄積されている更新ログとをL2Pフラッシュブロック62-0に書き込む。L2Pフラッシュブロック62-0がフルになると、コントローラ5は、NANDメモリ6の新たなフラッシュブロックを選択し、選択したフラッシュブロックをLBA範囲#0に対応するL2Pフラッシュブロックに割り当てる。そして、コントローラ5は、新たなL2Pフラッシュブロックに、次のL2Pフラグメントと、更新ログとを書き込む。そして、L2Pフラグメント711-00と更新ログとのペアと、L2Pフラグメント711-01と更新ログとのペアと、L2Pフラグメント711-02と更新ログとのペアと、L2Pフラグメント711-03と更新ログとのペアと、が新たなL2Pフラッシュブロックに揃うと、コントローラ5は、LBA範囲#0に対する元のL2Pフラッシュブロック62-0の割り当てを解除する。これは、新たなL2Pフラッシュブロック62-0に格納されている情報だけで、L2Pテーブル71のテーブル領域T0のL2Pフラグメント711-00、L2Pフラグメント711-01、L2Pフラグメント711-02、およびL2Pフラグメント711-03を再構築することが可能となるためである。
【0171】
LBA範囲#1に含まれる、あるLBAに関するアドレス変換情報が更新されると、コントローラ5は、この更新に関する更新ログをログバッファ72-1に格納する。ログバッファ72-1に蓄積された更新ログの量が閾値に達した時、コントローラ5は、L2Pテーブル71のL2Pフラグメント711-10、L2Pフラグメント711-11、L2Pフラグメント711-12、およびL2Pフラグメント711-13のうちの1つのL2Pフラグメントと、ログバッファ72-1に蓄積されている更新ログとをL2Pフラッシュブロック62-1に書き込む。L2Pフラッシュブロック62-1がフルになると、コントローラ5は、NANDメモリ6の新たなフラッシュブロックを選択し、選択したフラッシュブロックをLBA範囲#1に対応するL2Pフラッシュブロックに割り当てる。そして、コントローラ5は、新たなL2Pフラッシュブロックに、次のL2Pフラグメントと、更新ログとを書き込む。そして、L2Pフラグメント711-10と更新ログとのペアと、L2Pフラグメント711-11と更新ログとのペアと、L2Pフラグメント711-12と更新ログとのペアと、L2Pフラグメント711-13と更新ログとのペアと、が新たなL2Pフラッシュブロックに揃うと、コントローラ5は、LBA範囲#1に対する元のL2Pフラッシュブロック62-1の割り当てを解除する。
【0172】
LBA範囲#2に含まれるLBAに関するアドレス変換情報が更新されると、コントローラ5は、この更新に関する更新ログをログバッファ72-2に格納する。ログバッファ72-2に蓄積された更新ログの量が閾値に達した時、コントローラ5は、L2Pテーブル71のL2Pフラグメント711-20、L2Pフラグメント711-21、L2Pフラグメント711-22、およびL2Pフラグメント711-23のうちの1つのL2Pフラグメントと、ログバッファ72-2に蓄積されている更新ログとをL2Pフラッシュブロック62-2に書き込む。L2Pフラッシュブロック62-2がフルになると、コントローラ5は、NANDメモリ6の新たなフラッシュブロックを選択し、選択したフラッシュブロックをLBA範囲#2に対応するL2Pフラッシュブロックに割り当てる。そして、コントローラ5は、新たなL2Pフラッシュブロックに、次のL2Pフラグメントと、更新ログとを書き込む。そして、L2Pフラグメント711-20と更新ログとのペアと、L2Pフラグメント711-21と更新ログとのペアと、L2Pフラグメント711-22と更新ログとのペアと、L2Pフラグメント711-23と更新ログとのペアと、が新たなL2Pフラッシュブロックに揃うと、コントローラ5は、LBA範囲#2に対する元のL2Pフラッシュブロック62-2の割り当てを解除する。
【0173】
またさらに、LBA範囲#nに含まれるLBAに関するアドレス変換情報が更新されると、コントローラ5は、この更新に関する更新ログをログバッファ72-nに格納する。ログバッファ72-nに蓄積された更新ログの量が閾値に達した時、コントローラ5は、L2Pテーブル71のL2Pフラグメント711-n0、L2Pフラグメント711-n1、L2Pフラグメント711-n2、およびL2Pフラグメント711-n3のうちの1つのL2Pフラグメントと、ログバッファ72-nに蓄積されている更新ログとをL2Pフラッシュブロック62-nに書き込む。L2Pフラッシュブロック62-nがフルになると、コントローラ5は、NANDメモリ6の新たなフラッシュブロックを選択し、選択したフラッシュブロックをLBA範囲#nに対応するL2Pフラッシュブロックに割り当てる。そして、コントローラ5は、新たなL2Pフラッシュブロックに、次のL2Pフラグメントと、更新ログとを書き込む。そして、L2Pフラグメント711-n0と更新ログとのペアと、L2Pフラグメント711-n1と更新ログとのペアと、L2Pフラグメント711-n2と更新ログとのペアと、L2Pフラグメント711-n3と更新ログとのペアと、が新たなL2Pフラッシュブロックに揃うと、コントローラ5は、LBA範囲#nに対する元のL2Pフラッシュブロック62-nの割り当てを解除する。
【0174】
次に、更新ログの第1の例について説明する。図10は、実施形態に係るメモリシステムにおける、更新ログの第1の例を示す図である。
【0175】
図10における更新ログ+xは、例えば、m+1個のログ(ログ#0、ログ#1、…、ログ#m)を含む。以下では、更新ログ+xが、LBA範囲#0に対応するL2Pフラッシュブロック62-0に書き込まれる更新ログである場合を想定する。
【0176】
ログ#0、ログ#1、…、ログ#mの各々は、LBA範囲#0に書き込まれるべきデータ毎に、このデータに対応するLBAと、このデータの書き込み先として決定されたNANDメモリ6における記憶位置を示す物理アドレスPBAとを含む。
【0177】
例えば、ログ#1に含まれるLBAは、LBA範囲#0に書き込まれるべきあるデータの論理アドレスを示す。ログ#1に含まれるLBAは、個々のLBAを表すために必要なビット長のうちの下位ビット部のみである。ログ#0、ログ#1、…、ログ#mのどのログに含まれるLBAも、LBA範囲#0に属する。そのため、LBA範囲#0を特定する上位ビット部は、不要である。
【0178】
ログ#1に含まれるPBAは、ログ#1に含まれるLBAに新たにマッピングされた物理アドレスを示す。つまり、ログ#1に含まれるPBAは、ログ#1に含まれるLBAに対応するデータの書き込み先として決定されたNANDメモリ6における記憶位置を示す物理アドレスである。
【0179】
次に、更新ログの第2の例について説明する。図11は、実施形態に係るメモリシステムにおける、更新ログの第2の例を示す図である。
【0180】
図11における更新ログ+xは、LBA範囲#0に対応するL2Pフラッシュブロック62-0に書き込まれる更新ログである。
【0181】
ログ#0、ログ#1、…、ログ#mの各々は、LBA範囲#0に書き込まれるべきデータ毎に、このデータに対応するLBAと、このデータの書き込み先として決定されたNANDメモリ6における記憶位置を示す物理アドレスPBAと、このデータの長さ(データサイズ)を示す情報とを含む。長さ(データサイズ)は、例えば、セクタの数によって表される。複数セクタ分のサイズを有するデータが比較的頻繁にNANDメモリ6に書き込まれるケースにおいては、図11における更新ログ+xのフォーマットを使用することにより、一つの更新ログ+xに、図10における更新ログ+xのフォーマットを使用する場合と比べて、より多くのLBAに対応するアドレス変換情報を保持することが可能となる。
【0182】
次に、ロストLBAリストを保存する処理について説明する。図12は、実施形態に係るメモリシステムにおいて実行されるロストLBAリスト保存処理の第1の例を示す図である。
【0183】
SSD3において予期しない電力喪失が起きると、電源回路8は、キャパシタ81に蓄えられた電力をSSD3の各構成要素に供給する。また、電源回路8は、予期しない電力喪失が起きたことをコントローラ5に通知する。コントローラ5は、DRAM7に格納されているPLP対象データをNANDメモリ6に保存する処理を開始する。PLP対象データは、例えば、L2Pテーブル71、およびNANDメモリ6への書き込みが完了していないライトデータに対応するLBAのリストを含む。ロストLBAリスト保存部524は、NANDメモリ6への書き込みが完了していないライトデータに対応するLBAのリストをDRAM7のLBAリスト74から取得する。書き込みが完了していないライトデータは、予期しない電力喪失によって喪失されるデータである。
【0184】
ロストLBAリスト保存部524は、取得したLBAのリストに基づき、LBA範囲#0~#nにそれぞれ対応するロストLBAリスト#0~#nを生成する。ロストLBAリスト#0は、LBA範囲#0に書き込まれるべきライトデータのうち、予期しない電力喪失によって喪失されたライトデータに対応するLBAの集合を示すリストである。ロストLBAリスト#1は、LBA範囲#1に書き込まれるべきライトデータのうち、予期しない電力喪失によって喪失されたライトデータに対応するLBAの集合を示すリストである。また、ロストLBAリスト#nは、LBA範囲#nに書き込まれるべきライトデータのうち、予期しない電力喪失によって喪失されたライトデータに対応するLBAの集合を示すリストである。この場合、ロストLBAリスト保存部524は、LBAリスト74に格納されているLBAのうち、LBA範囲#0に属するLBAの集合をロストLBAリスト#0に格納し、LBA範囲#1に属するLBAの集合をロストLBAリスト#1に格納し、LBA範囲#2に属するLBAの集合をロストLBAリスト#2に格納し、また、LBA範囲#nに属するLBAの集合をロストLBAリスト#nに格納する。
【0185】
ロストLBAリスト保存部524は、LBA範囲/ブロック管理テーブル75を参照して、LBA範囲#0~#nにそれぞれ割り当てられているL2Pフラッシュブロック62-0~62-nを特定する。ロストLBAリスト保存部524は、ロストLBAリスト#0をL2Pフラッシュブロック62-0に書き込み、ロストLBAリスト#1をL2Pフラッシュブロック62-1に書き込み、ロストLBAリスト#2をL2Pフラッシュブロック62-2に書き込み、また、ロストLBAリスト#nをL2Pフラッシュブロック62-nに書き込む。
【0186】
これにより、コントローラ5は、キャパシタ81に蓄えられた電力を使用して、ロストLBAリスト#0~#nを、L2Pフラッシュブロック62-0~62-nにそれぞれ保存する。
【0187】
次に、ロストLBAリストを保存する処理の別の例について説明する。図13は、実施形態に係るメモリシステムにおいて実行されるロストLBAリスト保存処理の第2の例を示す図である。
【0188】
SSD3において予期しない電力喪失が起きると、コントローラ5のロストLBAリスト保存部524は、書き込みが完了していないデータに対応するLBAのリストをDRAM7のLBAリスト74から取得する。
【0189】
ロストLBAリスト保存部524は、キャパシタ81に蓄えられた電力を使用して、取得したLBAのリストを、全LBA範囲のロストLBAリストとして、フラッシュブロック#xに書き込む。フラッシュブロック#xは、いずれのLBA範囲にも割り当てられていないフラッシュブロックである。なお、ロストLBAリスト保存部524は、取得したLBAのリストからロストLBAリスト#0~#nを生成してもよく、そして、これら生成したロストLBAリスト#0~#nを、全LBA範囲のロストLBAリストとして、フラッシュブロック#xに書き込んでもよい。
【0190】
次に、フラッシュブロック#xに書き込まれた全LBA範囲のロストLBAリストをL2Pフラッシュブロック62-0~62-nに分配する処理について説明する。図14は、実施形態に係るメモリシステムにおいて実行されるロストLBAリスト分配処理の例を示す図である。
【0191】
図13を参照して説明したSSD3における予期しない電力喪失が起きた後に、SSD3への電力が回復したことに応じ、コントローラ5のロストLBAリスト保存部524は、フラッシュブロック#xから全LBA範囲のロストLBAリストを読み出す。
【0192】
ロストLBAリスト保存部524は、読み出した全範囲のロストLBAリストに基づき、LBA範囲#0~#nにそれぞれ対応するロストLBAリスト#0~#nを生成する。この場合、ロストLBAリスト保存部524は、読み出した全範囲のロストLBAリストに格納されているLBAのうち、LBA範囲#0に属するLBAの集合をロストLBAリスト#0に格納し、LBA範囲#1に属するLBAの集合をロストLBAリスト#1に格納し、LBA範囲#2に属するLBAの集合をロストLBAリスト#2に格納し、また、LBA範囲#nに属するLBAの集合をロストLBAリスト#nに格納する。なお、ロストLBAリスト#0~#nが全LBA範囲のロストLBAリストとしてフラッシュブロック#xに書き込まれている場合には、ロストLBAリスト#0~#nを生成する処理は不要である。
【0193】
ロストLBAリスト保存部524は、ロストLBAリスト#0をL2Pフラッシュブロック62-0に書き込み、ロストLBAリスト#1をL2Pフラッシュブロック62-1に書き込み、ロストLBAリスト#2をL2Pフラッシュブロック62-2に書き込み、また、ロストLBAリスト#nをL2Pフラッシュブロック62-nに書き込む。
【0194】
次に、図15から図20を参照して、LBA範囲#0に対応するテーブル領域T0に関するアドレス変換情報保存処理と、テーブル領域T0に関するリビルド処理とを説明する。
【0195】
まず、アドレス変換情報保存処理について説明する。図15は、実施形態に係るメモリシステムにおいて実行されるアドレス変換情報の保存処理の第1の例を示す図である。
【0196】
(ステップ1)まず、L2Pフラッシュブロック62-0が割り当てられたことに応じて、コントローラ5のL2Pテーブル管理部523は、L2Pテーブル71のテーブル領域T0から、L2Pフラグメント#1、L2Pフラグメント#2、およびL2Pフラグメント#3を取得する。L2Pテーブル管理部523は、取得したL2Pフラグメント#1、L2Pフラグメント#2、およびL2Pフラグメント#3を、L2Pフラッシュブロック62-0のページP0に書き込む。
【0197】
(ステップ2)L2Pフラグメント#1、L2Pフラグメント#2、およびL2Pフラグメント#3を、L2Pフラッシュブロック62-0のページP0に書き込んだ後、L2Pテーブル管理部523は、L2Pテーブル71のテーブル領域T0からL2Pフラグメント#0を取得する。L2Pテーブル71のテーブル領域T0のアドレス変換情報(L2Pフラグメント#0~#3)が更新されることに連れて、ログバッファ72-0に蓄積されている更新ログの量が増える。その後、ログバッファ72-0に蓄積されている更新ログの量が閾値に達すると、L2Pテーブル管理部523は、取得したL2Pフラグメント#0と、ログバッファ72-0に蓄積されている更新ログ+0とを、L2Pフラッシュブロック62-0のページP1に書き込む。L2Pテーブル71のテーブル領域T0からL2Pフラグメント#0を取得する処理は、例えば、ログバッファ72-0に新たな更新ログが格納される前に行われる。なお、L2Pフラグメント#0を取得するタイミングは、ログバッファ72-0に新たな更新ログが格納される前から、ログバッファ72-0に蓄積された更新ログの量が閾値に達する前までの期間内に、実行されていればよい。以下では、ある更新ログがL2Pフラッシュブロック62-0に書き込まれた直後に、次のL2PフラグメントがL2Pテーブル71のテーブル領域T0から取得される場合を想定する。
【0198】
(ステップ3)次いで、L2Pテーブル管理部523は、L2Pテーブル71のテーブル領域T0からL2Pフラグメント#1を取得する。その後、ログバッファ72-0に蓄積されている更新ログの量が再び閾値に達したことに応じて、取得したL2Pフラグメント#1と、ログバッファ72-0に蓄積されている更新ログ+1とを、L2Pフラッシュブロック62-0のページP2に書き込む。
【0199】
(ステップ4)次いで、L2Pテーブル管理部523は、L2Pテーブル71のテーブル領域T0からL2Pフラグメント#2を取得する。その後、ログバッファ72-0に蓄積されている更新ログの量が再び閾値に達したことに応じて、L2Pテーブル管理部523は、L2Pフラッシュブロック62-0のページP3に、取得したL2Pフラグメント#2と、ログバッファ72-0に蓄積されている更新ログ+2とを書き込む。
【0200】
(ステップ5)次いで、L2Pテーブル管理部523は、L2Pテーブル71のテーブル領域T0からL2Pフラグメント#3を取得する。その後、ログバッファ72-0に蓄積されている更新ログの量が再び閾値に達したことに応じて、L2Pテーブル管理部523は、L2Pフラッシュブロック62-0のページP4に、取得したL2Pフラグメント#3と、ログバッファ72-0に蓄積されている更新ログ+3とを書き込む。
【0201】
(ステップ6)次いで、L2Pテーブル管理部523は、L2Pテーブル71のテーブル領域T0からL2Pフラグメント#0を取得する。その後、ログバッファ72-0に蓄積されている更新ログの量が再び閾値に達したことに応じて、L2Pテーブル管理部523は、L2Pフラッシュブロック62-0のページP5に、取得したL2Pフラグメント#0と、ログバッファ72-0に蓄積されている更新ログ+4とを書き込む。
【0202】
(ステップ7)次いで、L2Pテーブル管理部523は、L2Pテーブル71のテーブル領域T0からL2Pフラグメント#1を取得する。その後、ログバッファ72-0に蓄積されている更新ログの量が再び閾値に達したことに応じて、L2Pテーブル管理部523は、L2Pフラッシュブロック62-0のページP6に、取得したL2Pフラグメント#1と、ログバッファ72-0に蓄積されている更新ログ+5とを書き込む。
【0203】
(ステップ8)次いで、L2Pテーブル管理部523は、L2Pテーブル71のテーブル領域T0からL2Pフラグメント#2を取得する。その後、ログバッファ72-0に蓄積されている更新ログの量が再び閾値に達したことに応じて、L2Pテーブル管理部523は、L2Pフラッシュブロック62-0のページP7に、取得したL2Pフラグメント#2と、ログバッファ72-0に蓄積されている更新ログ+6とを書き込む。
【0204】
(ステップ9)次いで、L2Pテーブル管理部523は、L2Pテーブル71のテーブル領域T0からL2Pフラグメント#3を取得する。その後、ログバッファ72-0に蓄積されている更新ログの量が閾値に達したことに応じて、L2Pテーブル管理部523は、L2Pフラッシュブロック62-0のページP8に、取得したL2Pフラグメント#3と、ログバッファ72-0に蓄積されている更新ログ+7とを書き込む。
【0205】
(ステップ10)次いで、L2Pテーブル管理部523は、L2Pテーブル71のテーブル領域T0からL2Pフラグメント#0を取得する。その後、ログバッファ72-0に蓄積されている更新ログの量が閾値に達したことに応じて、L2Pテーブル管理部523は、L2Pフラッシュブロック62-0のページP9に、取得したL2Pフラグメント#0と、ログバッファ72-0に蓄積されている更新ログ+8とを書き込む。
【0206】
このように、コントローラ5は、ログバッファ72-0に蓄積されている更新ログと、L2Pテーブル71のL2Pフラグメントとを保存する処理を周期的に実行する。
【0207】
次に、L2Pテーブルリビルド処理について説明する。図16は、実施形態に係るメモリシステムにおいて実行されるL2Pテーブルリビルド処理の第1の例を示す図である。
【0208】
図16では、図15におけるステップ10でL2Pフラグメント#0と更新ログ+8とがL2Pフラッシュブロック62-0のページP9に書き込まれた後に、ホスト2からの電源遮断予告通知に応じ、SSD3がシャットダウン処理を実行し、その後SSD3の電力が回復した場合であって、電源遮断予告通知を受信した際に、NANDメモリ6に保存すべき更新ログがログバッファ72-0には存在しなかった場合が想定されている。
【0209】
(ステップ11)SSD3への電力が回復した場合、L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック62-0のページ9から、L2Pフラグメント#0と、更新ログ+8とを読み出す。ページ9は、L2Pフラッシュブロック62-0にデータが最後に書き込まれたページである。
【0210】
(ステップ12)L2Pテーブルリビルド処理部525は、ステップ11で読み出したL2Pフラグメント#0を、DRAM7に書き込む。ステップ11、12の処理により、L2Pフラッシュブロック62-0に格納されている複数のL2Pフラグメント#0のうちの最新のL2Pフラグメント#0が、L2Pフラッシュブロック62-0からDRAM7にコピーされる。
【0211】
(ステップ13)L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック62-0のページ8から、L2Pフラグメント#3と、更新ログ+7とを読み出す。
【0212】
(ステップ14)L2Pテーブルリビルド処理部525は、ステップ13で読み出したL2Pフラグメント#3を、DRAM7に書き込む。ステップ13、14の処理により、L2Pフラッシュブロック62-0に格納されている複数のL2Pフラグメント#3のうちの最新のL2Pフラグメント#3が、L2Pフラッシュブロック62-0からDRAM7にコピーされる。
【0213】
(ステップ15)L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック62-0のページ7から、L2Pフラグメント#2と、更新ログ+6とを読み出す。
【0214】
(ステップ16)L2Pテーブルリビルド処理部525は、ステップ15で読み出したL2Pフラグメント#2を、DRAM7に書き込む。ステップ15、16の処理により、L2Pフラッシュブロック62-0に格納されている複数のL2Pフラグメント#2のうちの最新のL2Pフラグメント#2が、L2Pフラッシュブロック62-0からDRAM7にコピーされる。
【0215】
(ステップ17)L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック62-0のページ6から、L2Pフラグメント#1と、更新ログ+5とを読み出す。
【0216】
(ステップ18)L2Pテーブルリビルド処理部525は、ステップ17で読み出したL2Pフラグメント#1を、DRAM7に書き込む。ステップ17、18の処理により、L2Pフラッシュブロック62-0に格納されている複数のL2Pフラグメント#1のうちの最新のL2Pフラグメント#1が、L2Pフラッシュブロック62-0からDRAM7にコピーされる。
【0217】
(ステップ19)L2Pテーブルリビルド処理部525は、ステップ17で読み出した更新ログ+5の内容を、DRAM7にコピーされたL2Pフラグメント#1のみに反映する。つまり、L2Pフラッシュブロック62-0に格納されている、L2Pフラグメント#1とペアを構成する更新ログ(ここでは更新ログ+5)の内容は、DRAM7にコピーされたL2Pフラグメント#1にのみ反映される。L2Pフラッシュブロック62-0に格納されているL2Pフラグメント#2、#3、#0の各々は、更新ログ+5よりも新しい情報である。DRAM7にコピーされたL2Pフラグメント#2、#3、#0には、更新ログ+5の内容が既に反映済みである。このため、更新ログ+5の内容をL2Pフラグメント#2、#3、#0に反映する処理の実行は、省略される。これにより、L2Pリビルド処理に要する時間を短縮することができる。
【0218】
(ステップ20)L2Pテーブルリビルド処理部525は、ステップ15で読み出した更新ログ+6の内容を、DRAM7にコピーされたL2Pフラグメント#1およびL2Pフラグメント#2のみに反映する。つまり、L2Pフラッシュブロック62-0に格納されている、L2Pフラグメント#2とペアを構成する更新ログ(ここでは更新ログ+6)の内容は、DRAM7にコピーされたL2Pフラグメント#1、#2にのみ反映される。L2Pフラッシュブロック62-0に格納されているL2Pフラグメント#3、#0の各々は、更新ログ+6よりも新しい情報である。DRAM7にコピーされたL2Pフラグメント#3、#0には、更新ログ+6の内容が既に反映済みである。このため、更新ログ+6の内容をL2Pフラグメント#3、#0に反映する処理の実行は、省略される。
【0219】
(ステップ21)L2Pテーブルリビルド処理部525は、ステップ13で読み出した更新ログ+7の内容を、DRAM7にコピーされたL2Pフラグメント#1、L2Pフラグメント#2およびL2Pフラグメント#3のみに反映する。つまり、L2Pフラッシュブロック62-0に格納されている、L2Pフラグメント#3とペアを構成する更新ログ(ここでは更新ログ+7)の内容は、DRAM7にコピーされたL2Pフラグメント#1、#2、#3にのみ反映される。L2Pフラッシュブロック62-0に格納されているL2Pフラグメント#0は、更新ログ+7よりも新しい情報である。DRAM7にコピーされたL2Pフラグメント#0には、更新ログ+7の内容が既に反映済みである。このため、更新ログ+7の内容をL2Pフラグメント#0に反映する処理の実行は、省略される。
【0220】
(ステップ22)L2Pテーブルリビルド処理部525は、ステップ11で読み出した更新ログ+8の内容を、DRAM7にコピーされたL2Pフラグメント#0、L2Pフラグメント#1、L2Pフラグメント#2およびL2Pフラグメント#3に反映する。
【0221】
このように、コントローラ5は、L2Pフラッシュブロック62-0に記憶されているL2Pフラグメントおよび更新ログを読み出して、L2Pテーブル71のテーブル領域T0の最新のアドレス変換情報(L2Pフラグメント#0~#3)を再構築する。
【0222】
次に、アドレス変換情報/更新ログ保存処理とロストLBAリスト保存処理の例について説明する。図17は、実施形態に係るメモリシステムにおいて実行されるアドレス変換情報保存処理の第2の例を示す図である。ここでは、SSD3において、予期しない電力喪失が起きた場合を想定する。
【0223】
コントローラ5は、図15におけるステップ1からステップ9までの動作と同様の動作を実行する。ステップ9における書き込み動作が完了した後に、SSD3において予期しない電力喪失が起きた場合であって、L2Pフラッシュブロック62-0に未保存の更新ログがログバッファ72-0に格納されること無く予期しない電力喪失が起きた場合を想定する。
【0224】
(ステップ10)コントローラ5は、L2Pフラッシュブロック62-0に未保存の更新ログがログバッファ72-0に格納されているか否かを判定する。ここでは、ステップ9における書き込み動作が完了した直後にSSD3において予期しない電力喪失が起きたことにより、L2Pフラッシュブロック62-0に未保存の更新ログがログバッファ72-0に格納されていない場合が想定されている。この場合、コントローラ5は、ロストLBAリストをL2Pフラッシュブロック62-0のページ9に書き込む。L2Pフラッシュブロック62-0のページ9に書き込まれたロストLBAリストは、NANDメモリ6への書き込みが完了していないライトデータに対応するLBAのうち、LBA範囲#0に属するLBAのリストである。
【0225】
次に、L2Pテーブルリビルド処理の第2の例について説明する。図18は、実施形態に係るメモリシステムにおいて実行されるL2Pテーブルリビルド処理の第2の例を示す図である。
【0226】
図18では、図17におけるステップ10の後に、SSD3への電力が回復した場合を想定する。
【0227】
(ステップ11)L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック62-0のページ9から、ロストLBAリストを読み出す。ページ9は、L2Pフラッシュブロック62-0にデータが最後に書き込まれたページである。
【0228】
(ステップ12)L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック62-0のページ8から、L2Pフラグメント#3と、更新ログ+7とを読み出す。
【0229】
(ステップ13)L2Pテーブルリビルド処理部525は、ステップ12で読み出したL2Pフラグメント#3を、DRAM7に書き込む。ステップ12、13の処理により、L2Pフラッシュブロック62-0に格納されている複数のL2Pフラグメント#0のうちの最新のL2Pフラグメント#3が、L2Pフラッシュブロック62-0からDRAM7にコピーされる。
【0230】
(ステップ14)L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック62-0のページ7から、L2Pフラグメント#2と、更新ログ+6とを読み出す。
【0231】
(ステップ15)L2Pテーブルリビルド処理部525は、ステップ14で読み出したL2Pフラグメント#2を、DRAM7に書き込む。ステップ14、15の処理により、L2Pフラッシュブロック62-0に格納されている複数のL2Pフラグメント#2のうちの最新のL2Pフラグメント#2が、L2Pフラッシュブロック62-0からDRAM7にコピーされる。
【0232】
(ステップ16)L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック62-0のページ6から、L2Pフラグメント#1と、更新ログ+5とを読み出す。
【0233】
(ステップ17)L2Pテーブルリビルド処理部525は、ステップ16で読み出したL2Pフラグメント#1を、DRAM7に書き込む。ステップ16、17の処理により、L2Pフラッシュブロック62-0に格納されている複数のL2Pフラグメント#1のうちの最新のL2Pフラグメント#1が、L2Pフラッシュブロック62-0からDRAM7にコピーされる。
【0234】
(ステップ18)L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック62-0のページ5から、L2Pフラグメント#0と、更新ログ+4とを読み出す。
【0235】
(ステップ19)L2Pテーブルリビルド処理部525は、ステップ18で読み出したL2Pフラグメント#0を、DRAM7に書き込む。ステップ18、19の処理により、L2Pフラッシュブロック62-0に格納されている複数のL2Pフラグメント#0のうちの最新のL2Pフラグメント#0が、L2Pフラッシュブロック62-0からDRAM7にコピーされる。
【0236】
(ステップ20)L2Pテーブルリビルド処理部525は、ステップ18で読み出した更新ログ+4の内容を、DRAM7にコピーされたL2Pフラグメント#0のみに反映する。
【0237】
(ステップ21)L2Pテーブルリビルド処理部525は、ステップ16で読み出した更新ログ+5の内容を、DRAM7にコピーされたL2Pフラグメント#0およびL2Pフラグメント#1のみに反映する。
【0238】
(ステップ22)L2Pテーブルリビルド処理部525は、ステップ14で読み出した更新ログ+6の内容を、DRAM7にコピーされたL2Pフラグメント#0、L2Pフラグメント#1およびL2Pフラグメント#2のみに反映する。
【0239】
(ステップ23)L2Pテーブルリビルド処理部525は、ステップ12で読み出した更新ログ+7の内容を、DRAM7にコピーされたL2Pフラグメント#0、L2Pフラグメント#1、L2Pフラグメント#2およびL2Pフラグメント#3に反映する。以上の処理により、DRAM7上に、予期しない電力喪失が起きる直前のテーブル領域T0のアドレス変換情報(L2Pフラグメント#0~#3)が再構築される。
【0240】
(ステップ24)L2Pテーブルリビルド処理部525は、ステップ11で読み出したロストLBAリストに基づいて、喪失されたライトデータに対応するLBAの各々にエラー(訂正不能なデータエラー)を示す値が関連付けられるように、テーブル領域T0のアドレス変換情報(L2Pフラグメント#0~#3)を更新する。
【0241】
これにより、喪失されたライトデータに対応するLBAを指定するリードコマンドがホスト2から受信された場合であっても、コントローラ5は、エラーをホスト2に通知することができる。よって、リードコマンドによって指定されたLBAに対応するデータとは異なるデータが誤ってホスト2に返されるといった不具合を防止することができる。
【0242】
次に、アドレス変換情報保存処理の第3の例について説明する。図19は、実施形態に係るメモリシステムにおいて実行されるアドレス変換情報保存処理の第3の例を示す図である。
【0243】
コントローラ5は、図15におけるステップ1からステップ6までの動作と同様の動作を実行する。ここで、ステップ6における書き込み動作が完了した後に、予期しない電力喪失が起き、その後SSD3の電力が回復した場合であって、予期しない電力喪失が起きる前に、L2Pフラッシュブロック62-0に未保存の更新ログがログバッファ72-0に格納されていた場合を想定する。
【0244】
(ステップ7)L2Pテーブル管理部523は、L2Pフラッシュブロック62-0に未保存の更新ログがログバッファ72-0に格納されているか否かを判定する。L2Pフラッシュブロック62-0に未保存の更新ログがログバッファ72-0に格納されている場合、L2Pテーブル管理部523は、L2Pフラッシュブロック62-0に次に保存すべきL2PフラグメントであるL2Pフラグメント#1と、ログバッファ72-0に格納されている未保存の更新ログ(更新ログ+5)とを、L2Pフラッシュブロック62-0のページ6に書き込む。
【0245】
(ステップ8)L2Pテーブル管理部523は、ロストLBAリストをL2Pフラッシュブロック62-0のページ7に書き込む。L2Pフラッシュブロック62-0のページ7に書き込まれたロストLBAリストは、NANDメモリ6への書き込みが完了していないライトデータに対応するLBAのうち、LBA範囲#0に属するLBAのリストである。
【0246】
(ステップ9)その後、SSD3への電力が回復してSSD3が再び動作を開始する。L2Pテーブル管理部523は、L2Pテーブル71のテーブル領域T0からL2Pフラグメント#2を取得する。その後、ログバッファ72-0に蓄積されている更新ログの量が閾値に達したことに応じて、L2Pテーブル管理部523は、L2Pフラッシュブロック62-0のページP8に、取得したL2Pフラグメント#2と、ログバッファ72-0に蓄積されている更新ログ+6とを書き込む。
【0247】
(ステップ10)次いで、L2Pテーブル管理部523は、L2Pテーブル71のテーブル領域T0からL2Pフラグメント#3を取得する。その後、ログバッファ72-0に蓄積されている更新ログの量が閾値に達すると、L2Pテーブル管理部523は、L2Pフラッシュブロック62-0のページP9に、取得したL2Pフラグメント#3と、ログバッファ72-0に蓄積されている更新ログ+7とを書き込む。
【0248】
次に、L2Pテーブルリビルド処理の第3の例について説明する。図20は、実施形態に係るメモリシステムにおいて実行されるL2Pテーブルリビルド処理の第3の例を示す図である。
【0249】
図20では、図19におけるステップ10でL2Pフラグメント#3と更新ログ+7とがL2Pフラッシュブロック62-0のページP9に書き込まれた後に、SSD3がシャットダウン処理を実行し、その後SSD3への電力が回復した場合を想定する。
【0250】
(ステップ11)L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック62-0のページ9から、L2Pフラグメント#3と、更新ログ+7とを読み出す。ページ9は、L2Pフラッシュブロック62-0にデータが最後に書き込まれたページである。
【0251】
(ステップ12)L2Pテーブルリビルド処理部525は、ステップ12で読み出したL2Pフラグメント#3を、DRAM7に書き込む。ステップ12、13の処理により、L2Pフラッシュブロック62-0に格納されている複数のL2Pフラグメント#3のうちの最新のL2Pフラグメント#3が、L2Pフラッシュブロック62-0からDRAM7にコピーされる。
【0252】
(ステップ13)L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック62-0のページ8から、L2Pフラグメント#2と、更新ログ+6とを読み出す。
【0253】
(ステップ14)L2Pテーブルリビルド処理部525は、ステップ13で読み出したL2Pフラグメント#2を、DRAM7に書き込む。ステップ13、14の処理により、L2Pフラッシュブロック62-0に格納されている複数のL2Pフラグメント#2のうちの最新のL2Pフラグメント#2が、L2Pフラッシュブロック62-0からDRAM7にコピーされる。
【0254】
(ステップ15)L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック62-0のページ7から、ロストLBAリストを読み出す。
【0255】
(ステップ16)L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック62-0のページ6から、L2Pフラグメント#1と、更新ログ+5とを読み出す。
【0256】
(ステップ17)L2Pテーブルリビルド処理部525は、ステップ16で読み出したL2Pフラグメント#1を、DRAM7に書き込む。ステップ16、17の処理により、L2Pフラッシュブロック62-0に格納されている複数のL2Pフラグメント#1のうちの最新のL2Pフラグメント#1が、L2Pフラッシュブロック62-0からDRAM7にコピーされる。
【0257】
(ステップ18)L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック62-0のページ5から、L2Pフラグメント#0と、更新ログ+4とを読み出す。
【0258】
(ステップ19)L2Pテーブルリビルド処理部525は、ステップ18で読み出したL2Pフラグメント#0を、DRAM7に書き込む。ステップ18、19の処理により、L2Pフラッシュブロック62-0に格納されている複数のL2Pフラグメント#0のうちの最新のL2Pフラグメント#0が、L2Pフラッシュブロック62-0からDRAM7にコピーされる。
【0259】
(ステップ20)L2Pテーブルリビルド処理部525は、ステップ18で読み出した更新ログ+4の内容を、DRAM7にコピーされたL2Pフラグメント#0のみに反映する。
【0260】
(ステップ21)L2Pテーブルリビルド処理部525は、ステップ16で読み出した更新ログ+5の内容を、DRAM7にコピーされたL2Pフラグメント#0およびL2Pフラグメント#1のみに反映する。
【0261】
(ステップ22)L2Pテーブルリビルド処理部525は、ステップ15で読み出したロストLBAリストに基づいて、喪失されたライトデータに対応するLBAの各々にエラー(訂正不能なデータエラー)を示す値が関連付けられるように、テーブル領域T0のアドレス変換情報のうち、L2Pフラグメント#0およびL2Pフラグメント#1に含まれるアドレス変換情報のみを更新する。L2Pフラッシュブロック62-0に格納されているL2Pフラグメント#2およびL2Pフラグメント#3は、ロストLBAリストよりも新しい情報である。DRAM7にコピーされたL2Pフラグメント#2、および#3に含まれるアドレス変換情報は、ロストLBAリストに基づいて、既に更新されている。このため、ロストLBAリストに基づいて、L2Pフラグメント#2およびL2Pフラグメント#3に含まれるアドレス変換情報を更新する処理の実行は、省略される。
【0262】
(ステップ23)L2Pテーブルリビルド処理部525は、ステップ13で読み出した更新ログ+6の内容を、DRAM7にコピーされたL2Pフラグメント#0、L2Pフラグメント#1およびL2Pフラグメント#2に反映する。
【0263】
(ステップ24)L2Pテーブルリビルド処理部525は、ステップ11で読み出した更新ログ+7の内容を、DRAM7にコピーされたL2Pフラグメント#0、L2Pフラグメント#1、L2Pフラグメント#2およびL2Pフラグメント#3に反映する。
【0264】
このように、コントローラ5は、テーブル領域T0を復元する際に、ロストLBAリストを読み出した場合、ロストLBAリストが書き込まれた時点よりも前にL2Pフラッシュブロックに書き込まれたL2Pフラグメントを用いて復元されたテーブル領域T0に格納されているアドレス変換情報を、エラーを示す値に変更する。これにより、コントローラ5は、過去に喪失されたライトデータに対応するLBAを指定するリードコマンドがホスト2から受信された場合であっても、コントローラ5は、エラーをホスト2に通知することができる。よって、リードコマンドによって指定されたLBAに対応するデータとは異なるデータが誤ってホスト2に返されるといった不具合を防止することができる。
【0265】
次に、リビルド対象のテーブル領域を選択する処理について説明する。図21は、実施形態に係るメモリシステムにおいて実行されるリビルド対象のテーブル領域を選択する処理を示す図である。
【0266】
コントローラ5は、SSD3への電力が回復したことに応じて、SSD3がI/Oコマンドを処理可能なレディー状態であることをホスト2に通知する。
【0267】
SSD3がレディー状態であることを通知されたホスト2は、SSD3に対するリード/ライトアクセスの実行が可能であると判定する。そして、ホスト2は、SSD3に対してあるLBA範囲に属するLBAを指定するI/Oコマンドを送信する。
【0268】
I/Oコマンドを受信したコントローラ5は、I/Oコマンドによって指定されるLBAを取得する。I/Oコマンドによって指定されるLBAは、I/Oコマンドがライトコマンドである場合、ライトデータが書き込まれるべきLBAであり、I/Oコマンドがリードコマンドである場合、リード対象データが書き込まれているLBAである。そして、コントローラ5は、取得したLBAが属するLBA範囲に対応するテーブル領域を、他のテーブル領域よりも、優先してリビルド対象として選択する。
【0269】
例えば、ホスト2から受信されたライトコマンドによって指定されたLBAが、LBA範囲#1に属するLBAである場合、L2Pテーブルリビルド処理部525は、L2Pテーブル71のテーブル領域T1をリビルド対象に選択する。そして、L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック#1のページ6、ページ5およびページ4から、L2Pフラグメント#3、#2、および#1と、更新ログ+11、+10、および+9とを読み出す。L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック#1のページ3から、ロストLBAリストを読み出す。L2Pテーブルリビルド処理部525は、L2Pフラッシュブロック#1のページ2から、L2Pフラグメント#0と、更新ログ+8とを読み出す。L2Pテーブルリビルド処理部525は、読み出したL2Pフラグメントと、更新ログと、ロストLBAリストとを用いて、テーブル領域T1を再構築(リビルド)する。そして、テーブル領域T1の再構築が完了したことに応じて、コントローラ5は、受信したライトコマンドを処理する。
【0270】
これにより、コントローラ5は、L2Pテーブル71の全てのテーブル領域が再構築される前に、ホスト2からのリード/ライトアクセスを受け付けることができる。また、コントローラ5は、L2Pテーブル71が再構築される前に受信したI/Oコマンドを処理することができる。
【0271】
また、複数のテーブル領域のリビルド処理を並行して実行することができる場合、コントローラ5は、少なくとも1つのリビルド対象のテーブル領域を、ホスト2から受信されたI/Oコマンドによって指定されるLBAに基づいて決定する。例えば、コントローラ5が二つ以上のCPU52を含む場合、コントローラ5は、二つ以上のテーブル領域を再構築する処理を並行して実行する。
【0272】
例えば、コントローラ5が二つのテーブル領域を並行して復元することができる場合に、LBA範囲#1に属するLBAを指定するライトコマンドを受信すると、L2Pテーブルリビルド処理部525は、テーブル領域T1を優先してリビルド対象に選択する。そして、L2Pテーブルリビルド処理部525は、優先して選択されたテーブル領域T1以外の他のテーブル領域のうちの、任意の一つのテーブル領域(例えば、テーブル領域T1)をさらにリビルド対象に選択する。これにより、L2Pテーブルリビルド処理部525は、二つのテーブル領域(テーブル領域T0およびテーブル領域T1)をリビルド対象に選択する。そして、L2Pテーブルリビルド処理部525は、リビルド対象に選択された二つのテーブル領域(テーブル領域T0およびテーブル領域T1)を再構築する処理を並行して実行する。
【0273】
次に、アドレス変換情報保存処理の手順について説明する。図22は、実施形態に係るメモリシステムにおいて実行されるアドレス変換情報保存処理の手順を示すフローチャートである。
【0274】
まず、コントローラ5は、いずれかのLBA範囲に対応するログバッファに蓄積された更新ログの量が閾値に達したか否かを判定する(ステップS101)。
【0275】
いずれかのLBA範囲に対応するログバッファに蓄積された更新ログの量が閾値に達していない場合(ステップS101でNo)、コントローラ5は、更新ログの量が閾値に達するまで待つ。
【0276】
いずれかのLBA範囲に対応するログバッファに蓄積された更新ログの量が閾値に達した場合(ステップS101でYes)、コントローラ5は、そのログバッファが対応するLBA範囲のL2Pフラグメントを選択する(ステップS102)。ステップS102で選択されるL2フラグメントは、あらかじめL2Pテーブル71のテーブル領域から取得されていてもよい。
【0277】
コントローラ5は、ステップS102で選択したL2Pフラグメントと、ログバッファに蓄積された更新ログとを、L2Pフラッシュブロックに書き込む(ステップS103)。
【0278】
その後、コントローラ5は、次に、L2Pフラッシュブロックに書き込まれるべきL2Pフラグメントを、L2Pテーブル71のテーブル領域から取得してもよい。
【0279】
次に、ロストLBAリスト保存処理の第1の例について説明する。図23は、実施形態に係るメモリシステムにおいて実行されるロストLBAリスト保存処理の手順の第1の例を示すフローチャートである。
【0280】
まず、コントローラ5は、SSD3において、予期しない電力喪失が発生したか否かを判定する(ステップS201)。
【0281】
予期しない電力喪失が発生していない場合(ステップS201でNo)、コントローラ5は、待つ。
【0282】
予期しない電力喪失が発生した場合(ステップS201でYes)、コントローラ5は、未保存の更新ログがログバッファに存在するか否かを判定する(ステップS202)。以降の動作は、キャパシタ81に蓄えられていた電力を使用して、実行される。
【0283】
未保存の更新ログが存在する場合(ステップS202でYes)、コントローラ5は、未保存の更新ログを格納しているログバッファに対応するLBA範囲のL2Pフラグメントを選択する(ステップS203)。
【0284】
コントローラ5は、ステップS203で選択したL2Pフラグメントと更新ログとをL2Pフラッシュブロックに書き込む(ステップS204)。
【0285】
未保存の更新ログが存在しない場合(ステップS202でNo)、コントローラ5は、ステップS203およびステップS204の手順をスキップする。
【0286】
コントローラ5は、LBAリスト74に格納されているLBAをLBA範囲毎に分配することによって、LBA範囲毎に、ロストLBAリストを作成する(ステップS205)。
【0287】
コントローラ5は、ステップS205で作成したロストLBAリストそれぞれを、同じLBA範囲に対応するL2Pフラッシュブロックそれぞれに書き込む(ステップS206)。
【0288】
次に、ロストLBAリスト保存処理の第2の例について説明する。図24は、実施形態に係るメモリシステムにおいて実行されるロストLBAリスト保存処理の手順の第2の例を示すフローチャートである。
【0289】
まず、コントローラ5は、SSD3において、予期しない電力喪失が発生したか否かを判定する(ステップS301)。
【0290】
予期しない電力喪失が発生していない場合(ステップS301でNo)、コントローラ5は、待つ。
【0291】
予期しない電力喪失が発生した場合(ステップS301でYes)、コントローラ5は、未保存の更新ログがログバッファに存在するか否かを判定する(ステップS302)。電力が回復するまでの間に実行される動作は、キャパシタ81に蓄えられていた電力を使用して、実行される。
【0292】
未保存の更新ログが存在する場合(ステップS302でYes)、コントローラ5は、未保存の更新ログを格納しているログバッファに対応するLBA範囲のL2Pフラグメントを選択する(ステップS303)。
【0293】
コントローラ5は、ステップS303で選択したL2Pフラグメントと更新ログとをL2Pフラッシュブロックに書き込む(ステップS304)。
【0294】
未保存の更新ログが存在しない場合(ステップS302でNo)、コントローラ5は、ステップS303およびステップS304の手順をスキップする。
【0295】
コントローラ5は、全てのLBA範囲に対応するロストLBAリストを、任意のフラッシュブロックに書き込む(ステップS305)。書き込み先のフラッシュブロックは、いずれのLBA範囲に対してもL2Pフラッシュブロックとして割り当てられていないブロックである。
【0296】
そして、SSD3への電力が回復した場合(ステップS306でYes)、コントローラ5は、ステップS305で書き込まれた全てのLBA範囲に対応するロストLBAリストを読み出す(ステップS307)。
【0297】
コントローラ5は、ステップS307で読み出したロストLBAリストに格納されているLBAをLBA範囲毎に分配することによって、LBA範囲毎に、ロストLBAリストを作成する(ステップS308)。
【0298】
コントローラ5は、ステップS308で作成したロストLBAリストそれぞれを、同じLBA範囲に対応するL2Pフラッシュブロックそれぞれに書き込む(ステップS309)。
【0299】
次に、コントローラ5は、L2Pテーブルリビルド処理の手順について説明する。図25は、実施形態に係るメモリシステムにおいて実行されるL2Pテーブルリビルド処理の手順を示すフローチャートである。
【0300】
まず、コントローラ5は、SSD3に電力が供給されたか否かを判定する(ステップS401)。
【0301】
SSD3に電力が供給されていない場合(ステップS401でNo)、コントローラ5は、待つ。
【0302】
SSD3に電力が供給された場合(ステップS401でYes)、コントローラ5は、ホスト2にSSD3がレディー状態であることを通知する(ステップS402)。
【0303】
コントローラ5は、ホスト2からI/Oコマンドを受信したか否かを判定する(ステップS403)。
【0304】
ホスト2からI/Oコマンドを受信した場合(ステップS403でYes)、コントローラ5は、ステップS403で受信したI/Oコマンドが指定するLBAが属するLBA範囲を選択する(ステップS404)。
【0305】
ホスト2からI/Oコマンドを受信していない場合(ステップS403でNo)、コントローラ5は、任意のLBA範囲を選択する(ステップS405)。
【0306】
コントローラ5は、ステップS404あるいはステップS405で選択したLBA範囲に対応するテーブル領域を再構築する処理を実行する(ステップS406)。
【0307】
コントローラ5は、ステップS406で再構築したテーブル領域に対応するLBA範囲に属するLBAを指定するI/Oコマンドの処理を開始する(ステップS407)。ステップS403でI/Oコマンドを受信していた場合、コントローラ5は、このI/Oコマンドの処理を開始する。
【0308】
コントローラ5は、未だリビルドされていないテーブル領域があるか否かを判定する(ステップS408)。
【0309】
未だリビルドされていないテーブル領域がある場合(ステップS408でYes)、コントローラ5は、ステップ403に戻る。
【0310】
未だリビルドされていないテーブル領域が無い場合(ステップS408でNo)、コントローラ5は、リビルド処理を終了する。
【0311】
以上説明したように、本実施形態によれば、コントローラ5は、予期しない電力喪失が起きたことに応じて、キャパシタ81に蓄えられた電力を使用して、喪失されたライトデータに対応するLBAのリストであるロストLBAリストをNANDメモリ6に書き込む。例えば、コントローラ5は、喪失されたライトデータに対応するLBAのうちのLBA範囲#0に属するLBAのリストであるロストLBAリスト#0を、LBA範囲#0に対応するL2Pフラッシュブロック#0に書き込み、また、喪失されたライトデータに対応するLBAのうちのLBA範囲#1に属するLBAのリストであるロストLBAリスト#1を、LBA範囲#1に対応するL2Pフラッシュブロック#1に書き込む。
【0312】
あるいは、コントローラ5は、ロストLBAリスト#0およびロストLBAリスト#1を所定の一つのブロックに書き込む。そして、SSD3への電力の供給が回復したことに応じて、そのブロックから、ロストLBAリスト#0をL2Pフラッシュブロック#0にコピーし、ロストLBAリスト#1をL2Pフラッシュブロック#1にコピーする。
【0313】
これにより、コントローラ5は、予期しない電力喪失によって、喪失されたライトデータに対応するLBAを記録することができる。そのため、喪失されたライトデータに対応するLBAを指定するリードコマンドを受信した場合には、コントローラ5は、ホスト2に対してエラーを通知することができる。
【0314】
またさらに、コントローラ5は、SSD3への電力の供給が開始されたときに、SSD3がI/Oコマンドを処理可能なレディー状態であることを、ホスト2に通知する。あるLBA範囲に属するLBAを指定するI/Oコマンドがホスト2から受信された場合、コントローラ5は、指定されたLBAが属するLBA範囲に対応するテーブル領域を、優先してリビルド対象に選択する。コントローラ5は、リビルド対象に選択されたテーブル領域を再構築する処理を実行する。そして、そのテーブル領域の再構築が完了すると、コントローラ5は、受信したI/Oコマンドの処理を開始する。
【0315】
これにより、コントローラ5は、全てのテーブル領域に対する再構築が完了する前に、ホスト2から受信したI/Oコマンドの処理を開始することができる。つまり、ホスト2がSSD3へのリード/ライトアクセスを実行可能になるまでに待つことを必要とされる時間を短縮することができる。
【0316】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0317】
1…情報処理システム、2…ホスト、3…SSD、4…バス、5…コントローラ、6…不揮発性メモリ、7…DRAM、8…電源回路、21…プロセッサ、22…メモリ、50…バス、51…ホストインタフェース、52…CPU、53…SRAM、54…DMAC、55…ECC回路、56…DRAMインタフェース、57…NANDインタフェース、61…ユーザデータ、62…L2Pテーブル、71…L2Pテーブル、72…ログバッファ、73…データバッファ、74…LBAリスト、75…LBA範囲/ブロック管理テーブル、81…キャパシタ。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25