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

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

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

<>
  • 特開-メモリシステム 図1
  • 特開-メモリシステム 図2
  • 特開-メモリシステム 図3
  • 特開-メモリシステム 図4
  • 特開-メモリシステム 図5
  • 特開-メモリシステム 図6
  • 特開-メモリシステム 図7
  • 特開-メモリシステム 図8
  • 特開-メモリシステム 図9
  • 特開-メモリシステム 図10
  • 特開-メモリシステム 図11
  • 特開-メモリシステム 図12
  • 特開-メモリシステム 図13
  • 特開-メモリシステム 図14
  • 特開-メモリシステム 図15
  • 特開-メモリシステム 図16
  • 特開-メモリシステム 図17
  • 特開-メモリシステム 図18
  • 特開-メモリシステム 図19
  • 特開-メモリシステム 図20
  • 特開-メモリシステム 図21
  • 特開-メモリシステム 図22
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022095257
(43)【公開日】2022-06-28
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
   G06F 12/00 20060101AFI20220621BHJP
   G11C 29/44 20060101ALI20220621BHJP
【FI】
G06F12/00 550Z
G06F12/00 597U
G11C29/44 110
【審査請求】未請求
【請求項の数】12
【出願形態】OL
(21)【出願番号】P 2020208475
(22)【出願日】2020-12-16
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】特許業務法人スズエ国際特許事務所
(72)【発明者】
【氏名】江坂 直紀
【テーマコード(参考)】
5B160
5L206
【Fターム(参考)】
5B160AA14
5B160NA02
5L206HH05
(57)【要約】
【課題】 不揮発性メモリの疲弊を軽減しながらデータを保全できるメモリシステムを実現する。
【解決手段】 実施形態によれば、メモリシステムは、不揮発性メモリと、コントローラとを具備する。コントローラは、不揮発性メモリの記憶領域を論理的に分割した少なくとも1つの記憶領域を管理する。コントローラは、少なくとも1つの記憶領域の内の1つ以上の記憶領域にそれぞれ記憶されているデータの完全性が最後に確認された時間に関する情報を管理する。
【選択図】図11
【特許請求の範囲】
【請求項1】
不揮発性メモリと、
前記不揮発性メモリの記憶領域を論理的に分割した少なくとも1つの記憶領域を管理するように構成されるコントローラとを具備し、
前記コントローラは、前記少なくとも1つの記憶領域の内の1つ以上の記憶領域にそれぞれ記憶されているデータの完全性が最後に確認された時間に関する情報を管理するように構成されるメモリシステム。
【請求項2】
前記1つ以上の記憶領域にそれぞれ記憶されているデータの完全性が最後に確認された時間は、前記データの完全性が最後に確認されてから経過した時間を示し、
前記コントローラは、さらに、
ホストから問い合わせを受信し、
前記問い合わせに応じて、前記情報を用いて、前記1つ以上の記憶領域のそれぞれに記憶されているデータの完全性が最後に確認されてから経過した時間の内、最大値を示す情報を、前記ホストに送信するように構成される請求項1記載のメモリシステム。
【請求項3】
前記1つ以上の記憶領域にそれぞれ記憶されているデータの完全性が最後に確認された時間は、前記データの完全性が最後に確認された時刻を示し、
前記コントローラは、さらに、
ホストから問い合わせを受信し、
前記問い合わせに応じて、前記情報を用いて、前記1つ以上の記憶領域のそれぞれに記憶されているデータの完全性が最後に確認された時刻の内、最も古い時刻を示す情報を、前記ホストに送信するように構成される請求項1記載のメモリシステム。
【請求項4】
前記コントローラは、さらに、
ホストから、前記1つ以上の記憶領域の内の第1記憶領域を指定した問い合わせを受信し、
前記問い合わせに応じて、前記第1記憶領域に記憶されているデータの完全性が最後に確認された時間に関する情報を、前記ホストに送信するように構成される請求項1記載のメモリシステム。
【請求項5】
前記コントローラは、さらに、
ホストから、前記1つ以上の記憶領域の内の第1記憶領域を指定したベリファイ要求を受信し、前記ベリファイ要求に応じて、
前記第1記憶領域から第1データを読み出し、
読み出した前記第1データの完全性を検証し、
読み出した前記第1データの完全性が確認された場合、前記第1データの完全性が最後に確認された時間に関する情報を更新するように構成される請求項1記載のメモリシステム。
【請求項6】
前記コントローラは、さらに、
ホストから、前記1つ以上の記憶領域の内の第1記憶領域と、許容時間範囲とを指定したベリファイ要求を受信し、前記ベリファイ要求に応じて、
前記情報に基づく、前記第1記憶領域に記憶された第1データの完全性が最後に確認された時間が、前記許容時間範囲外である場合、前記第1記憶領域から前記第1データを読み出し、
読み出した前記第1データの完全性を検証し、
読み出した前記第1データの完全性が確認された場合、前記第1データの完全性が最後に確認された時間に関する情報を更新するように構成される請求項1記載のメモリシステム。
【請求項7】
前記コントローラは、さらに、
ホストから、前記1つ以上の記憶領域の内の第1記憶領域と、許容時間範囲とを指定したベリファイ要求を受信し、前記ベリファイ要求に応じて、
前記情報に基づく、前記第1記憶領域に記憶された第1データの完全性が最後に確認された時間が、前記許容時間範囲内である場合、前記第1記憶領域からの前記第1データの読み出しをスキップし、前記第1データの完全性が確認済みであることを前記ホストに通知するように構成される請求項1記載のメモリシステム。
【請求項8】
前記コントローラは、さらに、
前記不揮発性メモリに対するパトロール処理を行って、前記1つ以上の記憶領域の内の第1記憶領域から第1データを読み出し、読み出した前記第1データの完全性を検証し、
読み出した前記第1データの完全性が確認された場合、前記第1データの完全性が最後に確認された時間に関する情報を更新するように構成される請求項1記載のメモリシステム。
【請求項9】
前記コントローラは、前記第1データと共に前記第1記憶領域から読み出した保護情報を用いて、前記第1データの完全性を検証する請求項5乃至請求項8のいずれか一項に記載のメモリシステム。
【請求項10】
前記コントローラは、前記第1データと共に前記第1記憶領域から読み出したCRC符号を用いて、前記第1データの完全性を検証する請求項5乃至請求項8のいずれか一項に記載のメモリシステム。
【請求項11】
前記少なくとも1つの記憶領域は、少なくとも1つの論理アドレスにそれぞれ対応する請求項1乃至請求項10のいずれか一項に記載のメモリシステム。
【請求項12】
前記少なくとも1つの記憶領域は、少なくとも1つのゾーンにそれぞれ対応し、
前記少なくとも1つのゾーンのそれぞれは、論理アドレス範囲に対応する請求項1乃至請求項10のいずれか一項に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを備えるメモリシステムを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの1つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。SSDは、様々なコンピューティングデバイスのメインストレージとして使用されている。
【0003】
メモリシステムとホストとは、不揮発性メモリに書き込まれたデータを保全するための処理をそれぞれ行い得る。
【0004】
メモリシステムは、例えばパトロールと呼ばれる処理を定期的に行う。パトロール処理では、不揮発性メモリからデータが読み出され、読み出されたデータに対する誤り訂正処理が行われる。例えば、誤りが訂正されたビットの数が閾値を超えた場合、そのデータを格納していたブロックはリフレッシュ処理またはガベージコレクション(GC)の対象となる。
【0005】
また、ホストは、例えばスクラビング(scrubbing)と呼ばれる処理を定期的に行う。スクラビング処理では、不揮発性メモリから全データが読み出され、読み出されたデータの検証(例えばチェックサムの確認)が行われる。
【0006】
パトロール処理やスクラビング処理では、不揮発性メモリに対するアクセスが発生する。不揮発性メモリに対するアクセスが増加することは、不揮発性メモリを疲弊させる。そのため、不揮発性メモリの疲弊を軽減しながらデータを保全できる新たな機能の実現が必要とされる。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】国際公開第2012/001917号
【特許文献2】米国特許出願公開第2019/0258585号明細書
【特許文献3】米国特許出願公開第2014/0351446号明細書
【発明の概要】
【発明が解決しようとする課題】
【0008】
実施形態の一つは、不揮発性メモリの疲弊を軽減しながらデータを保全できるメモリシステムを提供する。
【課題を解決するための手段】
【0009】
実施形態によれば、メモリシステムは、不揮発性メモリと、コントローラとを具備する。コントローラは、不揮発性メモリの記憶領域を論理的に分割した少なくとも1つの記憶領域を管理する。コントローラは、少なくとも1つの記憶領域の内の1つ以上の記憶領域にそれぞれ記憶されているデータの完全性が最後に確認された時間に関する情報を管理する。
【図面の簡単な説明】
【0010】
図1】第1実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
図2】第1実施形態のメモリシステムにおいて用いられる論理物理アドレス変換テーブルの構成例を示す図。
図3】第1実施形態のメモリシステムにおいて用いられるベリファイ状況管理テーブルの構成例を示す図。
図4】第1実施形態のメモリシステムにおいて、1つの論理ブロックアドレス(LBA)に関連付けられているデータ構造の例を示す図。
図5】第1実施形態のメモリシステムにおける、状態問合せコマンドに応じた動作の例を示すブロック図。
図6】第1実施形態のメモリシステムにおける、強制のベリファイコマンドに応じた動作の例を示すブロック図。
図7】第1実施形態のメモリシステムにおける、許容時間範囲を指定したベリファイコマンドに応じた動作の例を示すブロック図。
図8】第1実施形態のメモリシステムにおける、パトロール処理に付随したベリファイ処理の例を示すブロック図。
図9】第1実施形態のメモリシステムにおいて実行されるベリファイコマンド処理の手順の例を示すフローチャート。
図10】第1実施形態のメモリシステムにおいて実行されるベリファイ処理の手順の例を示すフローチャート。
図11】第1実施形態のメモリシステムにおいて実行されるベリファイコマンド処理の手順の別の例を示すフローチャート。
図12】第1実施形態のメモリシステムにおいて実行されるパトロール処理に付随したベリファイ処理の手順の例を示すフローチャート。
図13】第2実施形態に係るメモリシステムにおいて管理されるゾーンド・ネームスペースの構成例を示す図。
図14】第2実施形態のメモリシステムを含む情報処理システムの構成例を示すブロック図。
図15】第2実施形態のメモリシステムにおいて用いられるゾーン-物理アドレス変換テーブルの構成例を示す図。
図16】第2実施形態のメモリシステムにおいて用いられるベリファイ状況管理テーブルの構成例を示す図。
図17】第2実施形態のメモリシステムにおける、強制のベリファイコマンドに応じた動作の例を示すブロック図。
図18】第2実施形態のメモリシステムにおける、許容時間範囲を指定したベリファイコマンドに応じた動作の例を示すブロック図。
図19】第2実施形態のメモリシステムにおける、パトロール処理に付随したベリファイ処理の例を示すブロック図。
図20】第2実施形態のメモリシステムにおいて実行されるベリファイコマンド処理の手順の例を示すフローチャート。
図21】第2実施形態のメモリシステムにおいて実行されるベリファイコマンド処理の手順の別の例を示すフローチャート。
図22】第2実施形態のメモリシステムにおいて実行されるパトロール処理に付随したベリファイ処理の手順の例を示すフローチャート。
【発明を実施するための形態】
【0011】
以下、実施の形態について図面を参照して説明する。
【0012】
(第1実施形態)
まず図1を参照して、第1実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。情報処理システム1は、ホストデバイス2(以下、ホスト2と称する)と、メモリシステム3とを含む。
【0013】
ホスト2は情報処理装置である。ホスト2は、大量且つ多様なデータをメモリシステム3に保存するストレージサーバであってもよいし、パーソナルコンピュータであってもよい。
【0014】
メモリシステムは、NAND型フラッシュメモリのような不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。メモリシステムはストレージデバイスとも称される。メモリシステムは、例えばソリッドステートドライブ(SSD)として実現される。
【0015】
メモリシステム3は、ホスト2のストレージとして使用され得る。メモリシステム3は、ホスト2に内蔵されてもよいし、ホスト2にケーブルまたはネットワークを介して接続されてもよい。
【0016】
ホスト2とメモリシステム3とを接続するためのインタフェースは、SCSI、Serial Attached SCSI(SAS)、ATA(AT Attachment)、Serial ATA(SATA)、PCI Express(PCIe)(登録商標)、Ethernet(登録商標)、Fibre channel、NVM Express(NVMe)(登録商標)等の規格に準拠する。
【0017】
メモリシステム3は、例えば、コントローラ4、NAND型フラッシュメモリ5、およびダイナミックランダムアクセスメモリ(DRAM)6を備える。コントローラ4は、System-on-a-chip(SoC)のような回路によって実現され得る。コントローラ4は、スタティックランダムアクセスメモリ(SRAM)を内蔵していてもよい。また、DRAM6がコントローラ4に内蔵されていてもよい。
【0018】
DRAM6等のRAMには、ファームウェア(FW)21の格納領域、論理物理アドレス変換テーブル22のキャッシュ領域、およびベリファイ状況管理テーブル23の格納領域が設けられる。
【0019】
FW21は、コントローラ4の動作を制御するためのプログラムである。FW21は、例えばNAND型フラッシュメモリ5からDRAM6にロードされる。
【0020】
論理物理アドレス変換テーブル22は、論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを管理する。論理アドレスは、メモリシステム3をアドレス指定するためにホスト2によって使用されるアドレスである。論理アドレスは、例えば論理ブロックアドレス(LBA)である。以下では、論理アドレスとしてLBAを用いる場合について主に例示する。
【0021】
ベリファイ状況管理テーブル23は、各LBAのデータの完全性が最後に確認された時間に関する情報を管理する。各LBAのデータは、ホスト2からのベリファイコマンドに応じて、または、パトロール処理に付随したベリファイ処理によって、その完全性が確認され得る。
【0022】
ベリファイ状況管理テーブル23は、例えば、(A)各LBAのデータの完全性が最後に確認されてから経過した時間、または(B)各LBAのデータの完全性が最後に確認された時刻、を管理する。以下の説明において、最終確認時間という用語は(A)または(B)を意味するために用いられる。
【0023】
図2は、論理物理アドレス変換テーブル22の一構成例を示す。論理物理アドレス変換テーブル22は、LBAそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを管理する。コントローラ4は論理物理アドレス変換テーブル22を用いて、LBAを物理アドレスに変換し得る。また、コントローラ4は論理物理アドレス変換テーブル22を用いて、物理アドレスをLBAに変換し得る。
【0024】
図2に示す例では、LBA“0”に物理アドレス“X”が、LBA“1”に物理アドレス“Y”が、LBA“2”に物理アドレス“Z”が、それぞれマッピングされている。
【0025】
図3は、ベリファイ状況管理テーブル23の一構成例を示す。ベリファイ状況管理テーブル23は、複数のLBAにそれぞれ対応する複数のエントリを含み得る。各エントリは、LBAのフィールドと、最終確認時間のフィールドとを含む。
【0026】
あるLBAに対応するエントリにおいて、LBAのフィールドはそのLBAを示す。
【0027】
また、最終確認時間のフィールドは、そのLBAのユーザデータの最終確認時間を示す。最終確認時間のフィールドに示される時間は、例えば、対応するLBAのユーザデータの完全性が最後に確認されてから経過した時間を示す。この経過時間は、例えば分単位の時間で表される。また、最終確認時間のフィールドに示される時間は、対応するLBAのユーザデータの完全性が最後に確認された時刻を示してもよい。
【0028】
図3に示す例では、LBA“1”のユーザデータの完全性が確認されてから経過した時間は1分である。LBA“100”のユーザデータの完全性が確認されてから経過した時間は14400分である。LBA“101”のユーザデータの完全性が確認されてから経過した時間は108000分である。
【0029】
ベリファイ状況管理テーブル23の1つのエントリは、例えば、対応するLBAのユーザデータがNAND型フラッシュメモリ5に書き込まれたことに応じて追加(生成)される。あるいは、ベリファイ状況管理テーブル23の1つのエントリは、対応するLBAのユーザデータがNAND型フラッシュメモリ5に書き込まれた後に、そのユーザデータの完全性が最初に確認されたことに応じて追加されてもよい。
【0030】
また、ベリファイ状況管理テーブル23の1つのエントリは、例えば、対応するLBAを指定したアンマップコマンドをホスト2から受信したことに応じて削除され得る。つまり、ベリファイ状況管理テーブル23の1つのエントリは、対応するLBAが、論理物理アドレス変換テーブル22においていずれの物理アドレスにも関連付けられていない場合に削除され得る。
【0031】
なお、LBAと最終確認時間との対応関係は、テーブルに限らず、木構造のような様々なデータ構造で管理され得る。
【0032】
図1に戻る。NAND型フラッシュメモリ5は複数のブロックB0~Bm-1を含む。ブロックB0~Bm-1のそれぞれは複数のページ(ここでは、ページP0~Pn-1)を含む。ブロックB0~Bm-1はデータ消去動作の最小単位として機能する。ブロックは、「消去ブロック」、または「物理ブロック」と称されることもある。ページP0~Pn-1のそれぞれは、単一のワード線に接続された複数のメモリセルを含む。ページP0~Pn-1は、データ書き込み動作およびデータ読み出し動作の単位として機能する。なお、ワード線がデータ書き込み動作およびデータ読み出し動作の単位として機能してもよい。
【0033】
各ブロックB0~Bm-1に対するプログラム/イレーズサイクル数(P/Eサイクル数)には上限があり、最大P/Eサイクル数と称される。あるブロックの1回のP/Eサイクルは、このブロック内のすべてのメモリセルを消去状態にするための消去動作と、このブロックのページそれぞれにデータを書き込む書き込み動作とを含む。
【0034】
コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして機能する。
【0035】
コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能してもよい。このFTLによって実行されるデータ管理には、(1)LBAそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、および(2)ページ単位のリード/ライト動作とブロック単位の消去(イレーズ)動作とを隠蔽するための処理が含まれる。ブロック管理には、不良ブロックの管理、ウェアレベリング、およびGCが含まれる。
【0036】
LBAそれぞれと物理アドレスそれぞれとの間のマッピングの管理は、論理物理アドレス変換テーブル22を用いて実行される。コントローラ4は、論理物理アドレス変換テーブル22を使用して、LBAそれぞれと物理アドレスそれぞれとの間のマッピングを特定の管理サイズ単位で管理する。あるLBAに対応する物理アドレスは、このLBAのデータが書き込まれたNAND型フラッシュメモリ5内の物理記憶位置を示す。コントローラ4は、論理物理アドレス変換テーブル22を用いて、NAND型フラッシュメモリ5の記憶領域を論理的に分割した複数の記憶領域を管理する。これら複数の記憶領域は、複数のLBAにそれぞれ対応する。つまり、これら複数の記憶領域のそれぞれは、1つのLBAで特定される。論理物理アドレス変換テーブル22は、メモリシステム3の電源オン時にNAND型フラッシュメモリ5からDRAM6にロードされてもよい。
【0037】
1つのページへのデータ書き込みは、1回のP/Eサイクル当たり1回のみ可能である。このため、コントローラ4は、あるLBAに対応する更新データを、このLBAに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、このLBAをこの別の物理記憶位置に関連付けるように論理物理アドレス変換テーブル22を更新することにより、以前のデータを無効化する。論理物理アドレス変換テーブル22から参照されているデータ(すなわちLBAと紐付けられているデータ)は有効データと称される。また、どのLBAとも紐付けられていないデータは無効データと称される。有効データは、後にホスト2からリードされる可能性があるデータである。無効データは、もはやホスト2からリードされる可能性が無いデータである。
【0038】
図4は、1つのLBAxに関連付けられているデータ構造の例を示す。LBAxは、コントローラ4が管理するLBA空間内のいずれかのLBAである。LBAxに関連付けられているデータ構造50は、論理的にLBAxに記憶されているデータである。
【0039】
データ構造50は、例えば、LBA51、ユーザデータ52、保護情報(protection information:PI)53、巡回冗長検査(CRC)符号54、およびエラー訂正符号(ECC)55を含む。
【0040】
LBA51は、このデータ構造に関連付けられているLBA(LBAx)である。ユーザデータ52は、LBAxを指定した書き込み要求と共にホスト2から受信したユーザデータである。
【0041】
PI53は、ユーザデータ52を保護するための情報である。PI53は、書き込み要求およびユーザデータ52と共にホスト2から受信されてもよいし、コントローラ4が生成してもよい。PI53は、例えば、Guardフィールド531、Application Tagフィールド532、およびReference Tagフィールド533を含む。
【0042】
Guardフィールド531は、ユーザデータ52に対して算出されたCRC符号(例えばCRC-16)を含む。Application Tagフィールド532は、コントローラ4によって解釈されないデータを含み、PI53のチェックを無効にするために用いられ得る。Reference Tagフィールド533は、ユーザデータ52をアドレスに関連付けるための情報を含む。Reference Tagフィールド533は、例えば、ユーザデータ52と共に受信した書き込み要求で指定されたLBAの少なくとも一部を含む。
【0043】
CRC符号54は、ユーザデータ52およびPI53に対して算出されたCRC符号である。CRC符号54は、コントローラ4によって算出される。CRC符号54は、NAND型フラッシュメモリ5から読み出したユーザデータ52およびPI53の完全性を検証するために用いられ得る。
【0044】
ECC55は、ユーザデータ52、PI53、およびCRC54に対して算出されたECCである。ECC55は、コントローラ4によって算出される。ECC55は、NAND型フラッシュメモリ5から読み出したユーザデータ52、PI53、およびCRC54の誤りを訂正するために用いられ得る。
【0045】
なお、データ構造50には、PI53とCRC符号54のいずれか一方が含まれていてもよい。
【0046】
図1に戻る。コントローラ4は、ホストインタフェース(ホストI/F)11、CPU12、NAND I/F13、およびDRAMインタフェース(DRAM I/F)14を含んでもよい。これらホストI/F11、CPU12、NAND I/F13、およびDRAM I/F14は、バス10を介して接続されていてもよい。
【0047】
ホストI/F11は、ホスト2から様々なコマンド、例えば、I/Oコマンド、各種制御コマンド、を受信する回路として機能する。I/Oコマンドには、ライトコマンド、リードコマンド、およびベリファイコマンドが含まれ得る。制御コマンドには、アンマップコマンド(トリムコマンド)およびフォーマットコマンドが含まれ得る。フォーマットコマンドは、メモリシステム3全体をアンマップするためのコマンドである。
【0048】
NAND I/F13は、コントローラ4とNAND型フラッシュメモリ5とを電気的に接続する。NAND I/F13は、Toggle DDR、Open NAND Flash Interface(ONFI)等のインタフェース規格に対応する。
【0049】
NAND I/F13は、NAND型フラッシュメモリ5を制御するように構成されたNAND制御回路として機能する。NAND I/F13は、複数のチャネル(Ch)を介して、NAND型フラッシュメモリ5内の複数のメモリチップにそれぞれ接続されていてもよい。複数のメモリチップが並列に駆動されることにより、NAND型フラッシュメモリ5全体に対するアクセスを広帯域化することができる。
【0050】
DRAM I/F14は、DRAM6のアクセスを制御するように構成されたDRAM制御回路として機能する。DRAM6の記憶領域は、FW21、論理物理アドレス変換テーブル22、ベリファイ状況管理テーブル23等を格納するための領域や、リード/ライトバッファとして利用されるバッファ領域に割り当てられる。
【0051】
CPU12は、ホストI/F11、NAND I/F13、およびDRAM I/F14を制御するように構成されたプロセッサである。CPU12はNAND型フラッシュメモリ5からDRAM6にロードされたFW21を実行することによって、様々な処理を行う。FW21は、CPU12に様々な処理を実行させるための命令群を含む制御プログラムである。CPU12は、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12の動作は、CPU12によって実行されるFW21によって制御される。
【0052】
コントローラ4内の各部の機能は、コントローラ4内の専用ハードウェアによって実現されてもよいし、CPU12がFW21を実行することによって実現されてもよい。
【0053】
CPU12は、例えば、コマンド処理部121、リード処理部122、ベリファイ処理部123、パトロール処理部124、およびベリファイ状況管理部125として機能する。CPU12は、例えばFW21を実行することにより、これら各部として機能する。
【0054】
ところで、メモリシステム3(より詳しくはコントローラ4)とホスト2は、NAND型フラッシュメモリ5に書き込まれたデータの保全のための処理をそれぞれ行い得る。メモリシステム3は、例えばパトロール処理を定期的に行う。ホスト2は、例えばスクラビング処理を定期的に行う。
【0055】
あるいは、ホスト2はメモリシステム3にベリファイコマンドを送信し得る。ベリファイコマンドは、例えばNVMe規格で規定された、NAND型フラッシュメモリ5に格納されているユーザデータの完全性を検証するためのコマンドである。メモリシステム3のコントローラ4は、ベリファイコマンドに応じて、NAND型フラッシュメモリ5からデータ(例えばデータ構造50)を読み出し、読み出したデータに含まれる情報(例えばPI53)を用いて、データ内のユーザデータの完全性を検証する。
【0056】
コントローラ4は、ベリファイコマンドに応じた処理において、読み出したデータをホスト2に転送しない。そのため、ホスト2とメモリシステム3の間のバス帯域が損なわれない。また、ホスト2は読み出されたデータの処理を行う必要がない。
【0057】
しかし、メモリシステム3では、NAND型フラッシュメモリ5に書き込まれたデータの保全のために、パトロール処理だけでなく、ベリファイコマンドに応じた処理も行われることになる。パトロール処理とベリファイコマンドに応じた処理のいずれでも、NAND型フラッシュメモリ5に対するアクセスが発生する。NAND型フラッシュメモリ5に対するアクセスが増加することは、NAND型フラッシュメモリ5を疲弊させる。
【0058】
そのため、本実施形態のメモリシステム3では、NAND型フラッシュメモリ5の疲弊を軽減しながらデータを保全する。具体的には、コントローラ4は、ベリファイ状況管理テーブル23を用いて、複数のLBAのそれぞれに関連付けられたユーザデータの最終確認時間に関する情報を管理する。コントローラ4は、各LBAのユーザデータの最終確認時間を用いて、ベリファイ処理を行うタイミングを制御する。あるいは、ホスト2は、各LBAのユーザデータの最終確認時間を用いて、ベリファイコマンドの送信タイミングを制御する。これにより、NAND型フラッシュメモリ5からデータを読み出す回数を低減できるので、NAND型フラッシュメモリ5の疲弊を軽減しながらデータを保全できる。
【0059】
メモリシステム3における具体的な動作例について、以下に説明する。
【0060】
図5は、メモリシステム3における、状態問合せコマンドに応じた動作の例を示す。状態問合せコマンドは、NAND型フラッシュメモリ5に格納されているユーザデータのベリファイ状況を問い合わせるためにホスト2が発行するコマンドである。
【0061】
ここで、ベリファイ状況管理テーブル23で管理される最終確認時間について説明する。最終確認時間は、例えばベリファイ状況管理部125に設けられるタイマーを用いて決定される。
【0062】
(A)最終確認時間が、各LBAのユーザデータの完全性が最後に確認されてから経過した時間を示す場合、あるLBAのユーザデータの完全性が確認されたことに応じて、そのLBAに関連付けられる最終確認時間として、ベリファイ状況管理テーブル23に0が設定される。ベリファイ状況管理部125は、そのLBAのユーザデータの完全性が次に確認されるまでの間、例えば定期的に、タイマーに基づく時間の経過に応じて、設定されている最終確認時間を増加させる。そのLBAのユーザデータの完全性が次に確認された場合には、そのLBAに関連付けられる最終確認時間として、再び0が設定される。
【0063】
(B)最終確認時間が、各LBAのユーザデータの完全性が最後に確認された時刻を示す場合、あるLBAのユーザデータの完全性が確認されたことに応じて、そのLBAに関連付けられる最終確認時間として、ベリファイ状況管理部125のタイマーを用いて取得された現在の時刻がベリファイ状況管理テーブル23に設定される。そのLBAのユーザデータの完全性が次に確認された場合、設定されている最終確認時間は、ベリファイ状況管理部125のタイマーを用いてさらに取得された現在の時刻で更新される。
【0064】
コマンド処理部121はホスト2からホストI/F11を介して、状態問合せコマンドを受信する。コマンド処理部121は、受信した状態問合せコマンドに応じて、ベリファイ状況管理テーブル23から、例えば、最も古い時刻に相当する最終確認時間を取得する。
【0065】
より具体的には、ベリファイ状況管理テーブル23の最終確認時間が、対応するLBAのユーザデータの完全性が確認されてから経過した時間を示す場合、コマンド処理部121は、ベリファイ状況管理テーブル23に含まれる1つ以上の最終確認時間から最大値を取得する。例えば図3に示すベリファイ状況管理テーブル23では、コマンド処理部121は、3つの最終確認時間のうちの最大値である“108000”を取得する。
【0066】
そして、コマンド処理部121は、取得した最も大きい最終確認時間を示す情報を、ホストI/F11を介してホスト2に送信する。
【0067】
これにより、ホスト2は、NAND型フラッシュメモリ5に格納されているユーザデータにおける、最も大きい最終確認時間を取得できる。ホスト2は、取得した最も大きい最終確認時間に応じて、メモリシステム3にベリファイコマンドを送信すべきか否かを判断できる。
【0068】
例えば、取得した最も大きい最終確認時間(経過時間)が閾値を超えている場合、ホスト2はメモリシステム3にベリファイコマンドを送信すべきと判断する。これにより、最も大きい最終確認時間に基づく適切なタイミングで、メモリシステム3にベリファイ処理を行わせることができる。
【0069】
また、取得した最も大きい最終確認時間が閾値以下である場合、ホスト2はメモリシステム3にベリファイコマンドをまだ送信しなくてもよいと判断する。これにより、ホスト2は、メモリシステム3によってベリファイ処理が行われる頻度を制御できる。したがって、NAND型フラッシュメモリ5に対するアクセス回数を低減し得る。
【0070】
状態問合せコマンドは、LBAを指定してもよい。その場合、コマンド処理部121は、指定されたLBAに対応する最終確認時間に関する情報を、ホスト2に送信する。
【0071】
また、状態問合せコマンドは、LBA範囲を指定してもよい。その場合、コマンド処理部121は、指定されたLBA範囲の各LBAに対応する最終確認時間に関する情報、または、指定されたLBA範囲の各LBAに対応する最終確認時間のうちの最大値を、ホスト2に送信する。
【0072】
状態問合せコマンドが、LBAまたはLBA範囲を指定しない場合、コマンド処理部121は、最も大きい最終確認時間に関する情報と共に、これに対応するLBAまたはLBA範囲を、ホスト2に送信してもよい。
【0073】
次いで、図6および図7を参照して、ホスト2からベリファイコマンドを受信した場合のメモリシステム3の動作を説明する。ベリファイコマンドは、LBAまたはLBA範囲を指定する。ベリファイコマンドは、指定したLBAまたはLBA範囲のユーザデータの完全性の検証(すなわちベリファイ)を要求するコマンドである。
【0074】
より具体的には、ベリファイコマンドは、ベリファイの対象となるデータの先頭LBAと、当該データのサイズとを含む。ベリファイの対象となるデータのサイズは、例えば、セクタの数で指定されもてよい。セクタは論理ブロックとも称される。
【0075】
以下では、説明を分かりやすくするために、ベリファイコマンドが1つのLBAを指定している場合について主に説明する。なお、ベリファイコマンドがLBA範囲を指定している場合には、LBA範囲に含まれる各LBAについて、以下の説明と同様の動作が行われる。
【0076】
図6は、メモリシステム3における、第1ベリファイコマンドに応じた動作の例を示す。メモリシステム3では、第1ベリファイコマンドに応じて、指定されたLBAのユーザデータの完全性が検証される。つまり、第1ベリファイコマンドは、指定したLBAのユーザデータの完全性の検証をメモリシステム3に強制するコマンドである。具体的な動作について以下に説明する。以下では、第1ベリファイコマンドで指定されたLBAを、対象LBAとも称する。
【0077】
まず、コマンド処理部121はホスト2からホストI/F11を介して、第1ベリファイコマンドを受信する。コマンド処理部121は論理物理アドレス変換テーブル22を用いて、対象LBAに対応する物理アドレスを取得する。コマンド処理部121は、取得した物理アドレスをリード処理部122に送出する。また、コマンド処理部121は、対象LBAをベリファイ処理部123に送出する。
【0078】
リード処理部122は、コマンド処理部121によって送出された物理アドレスを用いて、その物理アドレスのデータをNAND型フラッシュメモリ5から読み出す。以下では、リード処理部122が読み出したデータを、リードデータとも称する。また、リードデータは、図4を参照して前述したデータ構造50の構成を有しているものとする。
【0079】
リード処理部122は、リードデータをベリファイ処理部123に送出する。なお、リード処理部122は、リードデータをDRAM6(より詳しくはリードバッファ)に格納してもよい。
【0080】
ベリファイ処理部123は、リードデータに含まれるユーザデータ52の完全性を検証する。ベリファイ処理部123は、例えばリードデータに含まれるPI53を用いて、ユーザデータ52の完全性を検証する。
【0081】
具体的には、ベリファイ処理部123は、リードデータに含まれるユーザデータ52のCRC符号を算出する。そして、ベリファイ処理部123は、算出したCRC符号が、PI53のGuardフィールド531に含まれるCRC符号と一致するか否かを判定する。算出したCRC符号が、Guardフィールド531のCRC符号と一致する場合、ベリファイ処理部123はユーザデータ52の完全性が確認されたと判断する。算出したCRC符号が、Guardフィールド531のCRC符号とは異なる場合、ベリファイ処理部123はユーザデータ52の完全性が確認されなかったと判断する。
【0082】
なお、算出したCRC符号が、Guardフィールド531のCRC符号と一致する場合、ベリファイ処理部123は、リードデータに含まれるLBA51と、PI53のReference Tagフィールド533とを用いて、ユーザデータ52の完全性をさらに検証してもよい。リードデータに含まれるLBA51が、Reference Tagフィールド533に含まれるLBAと一致する場合、ベリファイ処理部123はユーザデータ52の完全性が確認されたと判断する。リードデータに含まれるLBA51と、Reference Tagフィールド533に含まれるLBAとが異なる場合、ベリファイ処理部123はユーザデータ52の完全性が確認されなかったと判断する。なお、ベリファイ処理部123は、リードデータに含まれるLBA51の代わりに、第1ベリファイコマンドで指定されたLBAを用いてもよい。
【0083】
あるいは、ベリファイ処理部123は、リードデータに含まれるCRC符号54を用いて、ユーザデータ52の完全性を検証してもよい。ベリファイ処理部123は、例えばリードデータにPI53が含まれていない場合に、CRC符号54を用いてユーザデータ52の完全性を検証する。
【0084】
具体的には、ベリファイ処理部123は、リードデータに含まれるユーザデータ52およびPI53に対するCRC符号を算出する。そして、ベリファイ処理部123は、算出したCRC符号が、リードデータに含まれるCRC符号54と一致するか否かを判定する。算出したCRC符号が、リードデータに含まれるCRC符号54と一致する場合、ベリファイ処理部123はユーザデータ52の完全性が確認されたと判断する。算出したCRC符号が、リードデータに含まれるCRC符号54とは異なる場合、ベリファイ処理部123はユーザデータ52の完全性が確認されなかったと判断する。
【0085】
ユーザデータ52の完全性が確認された場合、ベリファイ処理部123は、ベリファイ状況管理テーブル23において、対象LBAに関連付けられた最終確認時間を更新する。そして、ベリファイ処理部123は、対象LBAのユーザデータ52の完全性が確認されたことをホスト2に通知する。
【0086】
ユーザデータ52の完全性が確認されなかった場合、ベリファイ処理部123は、対象LBAのユーザデータ52の完全性が確認されなかったことをホスト2に通知する。ユーザデータ52の完全性が確認されなかった場合、ベリファイ処理部123は、ベリファイ状況管理テーブル23において、対象LBAに関連付けられた最終確認時間を更新しない。
【0087】
なお、ベリファイ処理部123は、例えばNVMeのLBA Format Data StructureのMetadata Sizeフィールドを用いて、LBAに関連付けられたデータ(例えばLBAxに関連付けられたデータ50)にPIが含まれるか否かを判定し得る。具体的には、Metadata Sizeフィールドに0が設定されている場合、ベリファイ処理部123は、LBAに関連付けられたデータにPIが含まれていないと判断する。一方、Metadata Sizeフィールドに0以外の値が設定されている場合、ベリファイ処理部123は、LBAに関連付けられたデータにPIが含まれていると判断する。
【0088】
以上の動作により、メモリシステム3は、第1ベリファイコマンドで指定されたLBA(またはLBA範囲)のユーザデータの完全性を検証できる。
【0089】
図7は、メモリシステム3における、第2ベリファイコマンドに応じた動作の例を示す。第2ベリファイコマンドは、LBAまたはLBA範囲に加えて、許容時間範囲を指定する。コントローラ4は、第2ベリファイコマンドに応じて、指定されたLBAのユーザデータ(あるいは指定されたLBA範囲の各LBAのユーザデータ)の完全性が最後に確認された時間が許容時間範囲外である場合に、そのLBAのユーザデータの完全性を検証する。また、コントローラ4は、指定されたLBAのユーザデータの完全性が最後に確認された時間が許容時間範囲内である場合、そのLBAのユーザデータの完全性を検証しない。つまり、コントローラ4は、指定されたLBAのユーザデータの完全性が最後に確認された時間が許容時間範囲内である場合、そのLBAに対するベリファイ動作をスキップする。具体的な動作について以下に説明する。以下では、第2ベリファイコマンドで指定されたLBAを、対象LBAとも称する。
【0090】
まず、コマンド処理部121はホスト2からホストI/F11を介して、第2ベリファイコマンドを受信する。コマンド処理部121は、ベリファイ状況管理テーブル23から、対象LBAに関連付けられた最終確認時間を取得する。
【0091】
次いで、コマンド処理部121は、取得した最終確認時間が、第2ベリファイコマンドで指定された許容時間範囲内であるか否かを判定する。
【0092】
取得した最終確認時間が許容時間範囲内である場合、コマンド処理部121は、対象LBAのユーザデータの完全性を検証する動作が行われないように制御する。具体的には、コマンド処理部121は、対象LBAに対応する物理アドレスをリード処理部122に送出しない。また、コマンド処理部121は、対象LBAをベリファイ処理部123に送出しない。これにより、リード処理部122は、NAND型フラッシュメモリ5から、対象LBAに対応する物理アドレスのデータを読み出さず、ベリファイ処理部123は対象LBAのユーザデータの完全性を検証しない。したがって、コマンド処理部121は、対象LBAの最終確認時間が許容時間範囲内である場合、対象LBAに対するベリファイ動作をスキップする。なお、コマンド処理部121は、対象LBAのユーザデータの完全性が許容時間範囲内の時間に確認済みであることを、ホスト2に通知してもよい。
【0093】
一方、取得した最終確認時間が許容時間範囲外である場合、コマンド処理部121は論理物理アドレス変換テーブル22を用いて、対象LBAに対応する物理アドレスを取得する。コマンド処理部121は、取得した物理アドレスをリード処理部122に送出する。また、コマンド処理部121は、対象LBAをベリファイ処理部123に送出する。以降のリード処理部122およびベリファイ処理部123による動作は、図6を参照して前述した通りである。したがって、対象LBAの最終確認時間が許容時間範囲外である場合、対象LBAに対するベリファイ動作を行うことができる。
【0094】
以上の動作により、メモリシステム3は、対象LBAのユーザデータの最終確認時間が許容時間範囲内である場合に、対象LBAに対するベリファイ動作をスキップできる。つまり、許容時間範囲を指定する第2ベリファイコマンドを用いる場合、対象LBAに関連付けられた最終確認時間を考慮して、ベリファイ動作を行うかどうかを制御できる。したがって、例えば許容時間範囲を指定しない第1ベリファイコマンドを用いる場合と比較して、NAND型フラッシュメモリ5からデータを読み出す回数を低減できる可能性がある。よって、NAND型フラッシュメモリ5の疲弊を軽減し得る。
【0095】
次いで、パトロール処理で読み出されたデータに対して行われるベリファイ処理について説明する。
【0096】
図8は、メモリシステム3における、パトロール処理に付随したベリファイ処理の例を示す。パトロール処理は、NAND型フラッシュメモリ5に含まれる複数のブロックの内、誤りビット数が閾値を上回るデータが格納されているブロックそれぞれを検出するための処理である。検出された各ブロックは、例えばリフレッシュ処理またはGCの対象となる。これにより、検出された各ブロック内の有効データを、NAND型フラッシュメモリ5内の別のブロックに書き直すことができる。
【0097】
NAND型フラッシュメモリ5に書き込まれたデータは、書き込まれてから経過した時間が長いほど、エラーが発生する可能性が高まる。また、NAND型フラッシュメモリ5に書き込まれたデータは、読み出された回数が多いほど、エラーが発生する可能性が高まる。コントローラ4は、例えば一定時間毎にパトロール処理を行うことで、誤りビット数が閾値を上回るデータが格納されているブロックを検出できる。
【0098】
また、パトロール処理に付随したベリファイ処理は、パトロール処理で読み出されたデータに対するベリファイ処理である。この場合、パトロール処理で読み出されたデータを利用するので、ベリファイ処理を行うために改めてNAND型フラッシュメモリ5からデータを読み出す必要がない。したがって、パトロール処理に付随してベリファイ処理を行うことで、NAND型フラッシュメモリ5からデータを読み出す回数を低減できる。具体的な動作について以下に説明する。
【0099】
まず、パトロール処理部124は、読み出し対象の物理アドレスを決定する。パトロール処理部124は、NAND型フラッシュメモリ5に記憶されているデータを、特定の順序で、所定データ長単位で読み出す。より詳しくは、パトロール処理部124は、NAND型フラッシュメモリ5に含まれる複数のブロックから、例えばブロック番号順に、1つのブロックを選択する。なお、パトロール処理部124は、ライトアクセス中のブロックの選択をスキップしてもよい。パトロール処理部124は、例えば選択したブロックの先頭から順に、所定データ長単位でデータを読み出すために、読み出し対象の物理アドレスを決定する。パトロール処理部124は、決定した読み出し対象の物理アドレスをリード処理部122に送出する。以下では、読み出し対象の物理アドレスを、対象物理アドレスとも称する。なお、パトロール処理においてNAND型フラッシュメモリ5からデータが読み出される順序、および読み出されるデータの単位は、NAND型フラッシュメモリ5の仕様等に応じて任意に決定される。
【0100】
パトロール処理部124は論理物理アドレス変換テーブル22を用いて、対象物理アドレスに対応するLBA(対象LBA)を取得する。パトロール処理部124は、取得した対象LBAをベリファイ処理部123に送出する。
【0101】
リード処理部122は、パトロール処理部124によって送出された対象物理アドレスを用いて、対象物理アドレスのデータをNAND型フラッシュメモリ5から読み出す。ここでは、読み出したデータ(リードデータ)が、図4を参照して前述したデータ構造50の構成を有しているものとする。
【0102】
リード処理部122は、リードデータをパトロール処理部124とベリファイ処理部123とに送出する。なお、リード処理部122は、リードデータをDRAM6(より詳しくはリードバッファ)に格納してもよい。
【0103】
パトロール処理部124は、リードデータに含まれるECC55を用いて誤り訂正処理を行う。パトロール処理部124は、誤り訂正処理で誤りが訂正されたビット数(すなわちECCエラービットの数)が閾値を超えた場合、リードデータを格納しているブロックをリフレッシュ対象またはGC対象のブロックに設定する。これにより、リフレッシュ処理またはGC処理において、リフレッシュ対象またはGC対象のブロック内の有効データを別のブロックに書き直すことができる。
【0104】
また、ベリファイ処理部123は、リードデータに含まれるユーザデータ52の完全性を検証する。ベリファイ処理部123によるユーザデータ52の完全性を検証するための動作は、図6を参照して前述した通りである。ユーザデータ52の完全性を確認した場合、ベリファイ処理部123は、ベリファイ状況管理テーブル23において、対象LBAに関連付けられた最終確認時間を更新する。一方、ユーザデータ52の完全性を確認できなかった場合、ベリファイ状況管理テーブル23において、対象LBAに関連付けられた最終確認時間を更新しない。
【0105】
以上の動作により、メモリシステム3では、定期的なパトロール処理でNAND型フラッシュメモリ5から読み出したデータを、ベリファイ処理にも用いることができる。これにより、定期的にパトロール処理が行われ、さらにベリファイコマンドに応じてベリファイ処理が行われる場合のような、パトロール処理とベリファイ処理とが別々に行われる場合よりも、NAND型フラッシュメモリ5からデータを読み出す回数を低減できる。したがって、NAND型フラッシュメモリ5の疲弊を軽減しながら、データを保全できる。
【0106】
なお、ユーザデータの最終確認時間をLBA単位で管理する場合、ベリファイ状況管理テーブル23のデータ量が膨大になる可能性がある。
【0107】
ホスト2は、例えば、最終確認時間が特定の限界値を超えているユーザデータに対して、再度ベリファイ処理を行う必要があると判断する。したがって、ベリファイ状況管理テーブル23内の、限界値を超えた最終確認時間を含むエントリの情報は、ホスト2にとって不要な情報になる。そのため、ホスト2は、例えば限界値を指定したコマンドをメモリシステム3に送信してもよい。これにより、ホスト2は、指定した限界値を超えた最終確認時間を含むエントリの情報が、ホスト2にとって不要であることをメモリシステム3に通知できる。
【0108】
メモリシステム3のベリファイ処理部123は、コマンドに指定された最終確認時間の限界値に従って、ベリファイ状況管理テーブル23を縮退する。つまり、ベリファイ処理部123は、コマンドで指定された限界値を超えた最終確認時間を含むエントリを、ベリファイ状況管理テーブル23から削除する。
【0109】
具体的には、例えば、図3に示したベリファイ状況管理テーブル23では、最終確認時間として、対応するLBAのユーザデータの完全性が確認されてから経過した時間が示されている。この場合、ベリファイ処理部123は、例えば、限界値として100000が指定されたコマンドに従って、限界値を超えた最終確認時間(108000)を含むLBA101のエントリを、ベリファイ状況管理テーブル23から削除する。
【0110】
これにより、ベリファイ状況管理テーブル23を格納するために設けられるDRAM6内の領域のサイズを縮小できる。
【0111】
なお、ホスト2は、最終確認時間の限界値の指定を解除することを示すコマンドを、メモリシステム3に送信してもよい。メモリシステム3のベリファイ処理部123は、このコマンドに応じて、ベリファイ状況管理テーブル23の縮退を停止する。
【0112】
図9は、CPU12によって実行されるベリファイコマンド処理の手順の例を示すフローチャートである。CPU12は、このベリファイコマンド処理を、強制のベリファイコマンド(第1ベリファイコマンド)をホスト2から受信したことに応じて実行する。ここでは、ベリファイコマンドが、ベリファイ処理の対象となるLBA範囲を指定している場合を例示する。
【0113】
まず、CPU12はベリファイ対象のLBAを決定する(ステップS101)。ベリファイ対象のLBAは、ベリファイコマンドで指定されたLBA範囲内の1つのLBAである。決定したベリファイ対象のLBAを、対象LBAとも称する。
【0114】
CPU12は論理物理アドレス変換テーブル22を用いて、対象LBAに対応する物理アドレスを特定する(ステップS102)。そして、CPU12はNAND型フラッシュメモリ5から、特定した物理アドレスのデータを読み出す(ステップS103)。読み出すデータは、所定長のデータである。なお、以下では、読み出したデータを、リードデータとも称する。
【0115】
次いで、CPU12は、リードデータを用いてベリファイ処理を行う(ステップS104)。ベリファイ処理は、リードデータに含まれるユーザデータの完全性を検証するための処理である。CPU12は、ベリファイ処理の結果として、例えば、ユーザデータの完全性が確認されたことを示す情報と、ユーザデータの完全性が確認されなかったことを示す情報のいずれか一方を得る。ベリファイ処理の具体的な手順については、図10のフローチャートを参照して後述する。
【0116】
CPU12の処理は、ベリファイ処理の結果に応じて分岐する(ステップS105)。
【0117】
具体的には、ベリファイ処理の結果が、ユーザデータの完全性が確認されたことを示す場合(ステップS105でYES)、CPU12は、ベリファイ状況管理テーブル23において、対象LBAに関連付けられた最終確認時間を更新する(ステップS106)。例えば、最終確認時間が、ユーザデータの完全性が確認されてから経過した時間を示す場合、CPU12は、対象LBAに関連付けられた最終確認時間として、0を設定する。この場合、ベリファイ状況管理テーブル23において、最終確認時間は、時間の経過に伴って増加するように構成される。あるいは、CPU12は、対象LBAに関連付けられた最終確認時間として、現在の時刻を設定してもよい。そして、CPU12は、対象LBAのユーザデータの完全性が確認されたことをホスト2に通知し(ステップS107)、CPU12の処理はステップS109に進む。なお、CPU12は、ベリファイコマンドで指定されたLBA範囲に含まれる全てのLBAのユーザデータに関するベリファイ結果を、まとめてホスト2に通知してもよい。
【0118】
ベリファイ処理の結果が、ユーザデータの完全性が確認されなかったことを示す場合(ステップS105でNO)、CPU12は、対象LBAのユーザデータの完全性が確認されなかったことをホスト2に通知し(ステップS108)、CPU12の処理はステップS109に進む。つまり、ユーザデータの完全性が確認されなかった場合、CPU12はベリファイ状況管理テーブル23において、対象LBAに関連付けられた最終確認時間を更新しない。
【0119】
次いで、CPU12は、ベリファイ対象の別のLBAがあるか否かを判定する(ステップS109)。つまり、CPU12は、ベリファイコマンドで指定されたLBA範囲に、ユーザデータに対するベリファイ処理がまだ行われていないLBAが残っているか否かを判定する。
【0120】
ベリファイ対象の別のLBAがある場合(ステップS109でYES)、CPU12の処理はステップS101に戻り、その別のLBAを対象とした処理を行う。
【0121】
一方、ベリファイ対象の別のLBAがない場合(ステップS109でNO)、すなわちベリファイコマンドで指定されたLBA範囲内の全てのLBAのユーザデータに対するベリファイ処理が完了した場合、CPU12はベリファイコマンド処理を終了する。
【0122】
以上のベリファイコマンド処理により、CPU12はベリファイ状況管理テーブル23を更新し得る。具体的には、CPU12は、ベリファイコマンドで指定されたLBA範囲内の各LBAのユーザデータの完全性を検証する。そして、CPU12は、完全性を確認したユーザデータのLBAに関連付けられた最終確認時間を更新する。これにより、メモリシステム3において、各LBAに記憶されているユーザデータの完全性の最終確認時間を管理できる。
【0123】
図10は、CPU12によって実行されるベリファイ処理の手順の例を示すフローチャートである。ベリファイ処理は、ユーザデータの完全性を検証するための処理である。ベリファイ処理は、例えば、図9を参照して前述したベリファイコマンド処理のステップS104に相当する。ここでは、CPU12がNAND型フラッシュメモリ5から読み出した、対象LBAのデータ(リードデータ)を用いて、ベリファイ処理を行う場合を例示する。また、リードデータには、ユーザデータ52、PI53、およびLBA51が含まれている場合を例示する。
【0124】
まず、CPU12はユーザデータ52を用いてCRC符号を算出する(ステップS201)。そして、CPU12は、算出したCRC符号が、PI53に含まれるGuardフィールド531内のCRC符号と一致しているかを判定する(ステップS202)。
【0125】
算出したCRC符号がGuardフィールド531内のCRC符号とは異なる場合(ステップS202でNO)、CPU12は、ユーザデータ52の完全性が確認されなかったことを示すベリファイ結果を生成し(ステップS203)、ベリファイ処理を終了する。
【0126】
算出したCRC符号がGuardフィールド531内のCRC符号と一致する場合(ステップS202のYES)、CPU12は、リードデータ内のLBA51が、PI53に含まれるReference Tagフィールド533内のLBAと一致しているか否かを判定する(ステップS204)。なお、CPU12は、対象LBAが、Reference Tagフィールド533内のLBAと一致しているか否かを判定してもよい。
【0127】
リードデータ内のLBA51が、PI53に含まれるReference Tagフィールド533内のLBAと一致している場合(ステップS204でYES)、CPU12は、ユーザデータ52の完全性が確認されたことを示すベリファイ結果を生成し(ステップS205)、ベリファイ処理を終了する。
【0128】
一方、リードデータ内のLBA51が、PI53に含まれるReference Tagフィールド531内のLBAとは異なる場合(ステップS204でNO)、CPU12は、ユーザデータ52の完全性が確認されなかったことを示すベリファイ結果を生成し(ステップS203)、ベリファイ処理を終了する。
【0129】
以上のベリファイ処理により、CPU12はPI53を用いてユーザデータ52の完全性を検証できる。なお、リードデータ内のLBA51とReference Tagフィールド531内のLBAとを比較するステップS204の処理は省略されてもよい。
【0130】
また、リードデータにPI53が含まれていない場合、CPU12は、リードデータに含まれるPI53と同等の情報(例えばCRC符号54)を用いて、ユーザデータ52の完全性を検証してもよい。具体的には、CPU12は、ユーザデータ52を用いてCRC符号を算出し、算出したCRC符号が、リードデータ内のCRC符号54と一致するか否かを判定する。算出したCRC符号が、リードデータ内のCRC符号54と一致する場合、CPU12は、ユーザデータ52の完全性が確認されたことを示すベリファイ結果を生成する。一方、算出したCRC符号が、リードデータ内のCRC符号54とは異なる場合、CPU12は、ユーザデータ52の完全性が確認されなかったことを示すベリファイ結果を生成する。
【0131】
図11は、CPU12によって実行されるベリファイコマンド処理の手順の別の例を示すフローチャートである。CPU12は、このベリファイコマンド処理を、許容時間範囲を指定したベリファイコマンド(第2ベリファイコマンド)をホスト2から受信したことに応じて実行する。ここでは、ベリファイコマンドが、ベリファイ処理の対象となるLBA範囲を指定している場合を例示する。
【0132】
まず、CPU12はベリファイ対象のLBA(対象LBA)を決定する(ステップS301)。CPU12はベリファイ状況管理テーブル23から、対象LBAに関連付けられた最終確認時間を取得する(ステップS302)。
【0133】
CPU12は、取得した最終確認時間が、ベリファイコマンドで指定された許容時間範囲内であるか否かを判定する(ステップS303)。
【0134】
取得した最終確認時間が許容時間範囲外である場合(ステップS303でNO)、CPU12は、ステップS304からステップS310までの処理により、対象LBAのユーザデータの完全性を検証し、その検証結果をホスト2に通知するための処理を行う。ステップS304からステップS310までの処理は、図9を参照して前述したベリファイコマンド処理のステップS102からステップS108までの処理と同様であるのでその説明を省略する。そして、CPU12は、ベリファイ対象の別のLBAがあるか否かを判定する(ステップS311)。ベリファイ対象の別のLBAがある場合(ステップS311でYES)、CPU12の処理はステップS301に戻り、その別のLBAを対象とした処理を行う。一方、ベリファイ対象の別のLBAがない場合(ステップS311でNO)、CPU12はベリファイコマンド処理を終了する。
【0135】
取得した最終確認時間が許容時間範囲内である場合(ステップS303でYES)、CPU12は、ベリファイ対象の別のLBAがあるか否かを判定する(ステップS311)。ベリファイ対象の別のLBAがある場合(ステップS311でYES)、CPU12の処理はステップS301に戻り、その別のLBAを対象とした処理を行う。一方、ベリファイ対象の別のLBAがない場合(ステップS311でNO)、CPU12はベリファイコマンド処理を終了する。つまり、取得した最終確認時間が許容時間範囲内である場合、CPU12は、対象LBAのユーザデータの完全性を検証するための処理を行うことなく、別のLBAを対象とした処理を行い得る。なお、取得した最終確認時間が許容時間範囲内である場合、CPU12は、許容時間範囲内の時間に対象LBAのユーザデータの完全性を確認済みであることを、ホスト2に通知してもよい。
【0136】
以上のベリファイコマンド処理により、CPU12は、対象LBAに対応する最終確認時間が許容時間範囲外である場合、ベリファイ状況管理テーブル23を更新し得る。これにより、メモリシステム3において、各LBAに格納されているユーザデータの最終確認時間を管理できる。
【0137】
また、対象LBAに対応する最終確認時間が許容時間範囲内である場合、CPU12は、対象LBAのユーザデータの完全性を検証するためのベリファイ処理を行わない。つまり、CPU12は、ユーザデータの完全性が許容時間範囲内に確認されているLBAについては、ベリファイ処理を行わない。このように、CPU12は、ベリファイ状況管理テーブル23に記録された最終確認時間を利用することで、各LBAのユーザデータをNAND型フラッシュメモリ5から読み出す回数を低減し得る。したがって、NAND型フラッシュメモリ5の疲弊を軽減できる。
【0138】
図12は、CPU12によって実行されるパトロール処理に付随したベリファイ処理の手順の例を示すフローチャートである。CPU12は、パトロール処理およびパトロール処理に付随したベリファイ処理を、例えば一定時間毎に実行する。
【0139】
まず、CPU12は、ステップS401からステップS406までの処理で、NAND型フラッシュメモリ5に対するパトロール処理を行う。
【0140】
具体的には、CPU12は、読み出し対象の物理アドレスを決定する(ステップS401)。CPU12は、パトロール処理において、NAND型フラッシュメモリ5に記憶されているデータを、特定の順序で、所定データ長単位で読み出す。CPU12は、その特定の順序に従って、所定データ長単位でデータを読み出すために、読み出し対象の物理アドレスを決定する。以下では、決定した読み出し対象の物理アドレスを、対象物理アドレスとも称する。
【0141】
CPU12はNAND型フラッシュメモリ5から、対象物理アドレスのデータを読み出す(ステップS402)。そして、CPU12は論理物理アドレス変換テーブル22を用いて、対象物理アドレスに対応するLBAを特定する(ステップS403)。
【0142】
CPU12は、対象物理アドレスに対応するLBAを特定できたか否かを判定する(ステップS404)。換言すると、CPU12は、読み出した対象物理アドレスのデータ(リードデータ)が有効データであるか、それとも無効データであるかを判定する。
【0143】
対象物理アドレスに対応するLBAを特定できなかった場合(ステップS404でNO)、つまりリードデータが無効データである場合、CPU12の処理はステップS411に進む。CPU12は、無効データであるリードデータを何等処理することなく、後続するデータのための処理に進む。
【0144】
対象物理アドレスに対応するLBAを特定できた場合(ステップS404でYES)、つまりリードデータが有効データである場合、CPU12はリードデータに対して、ECC55を用いた誤り訂正処理を行う(ステップS405)。CPU12は、誤り訂正処理で誤りが訂正されたビット数が閾値を超えたか否かを判定する(ステップS406)。誤り訂正処理で誤りが訂正されたビット数が閾値を超えた場合(ステップS406でYES)、CPU12は、リードデータを格納しているブロックを、リフレッシュまたはGC対象のブロックに設定し(ステップS407)、CPU12の処理はステップS408に進む。リフレッシュ処理またはGC処理では、リフレッシュまたはGC対象のブロック内の有効データが別のブロックに書き込まれる。一方、誤り訂正処理で誤りが訂正されたビット数が閾値以下である場合(ステップS406でNO)、CPU12の処理はステップS408に進む。
【0145】
次いで、CPU12は、リードデータを用いてベリファイ処理を行う(ステップS408)。ベリファイ処理は、リードデータに含まれるユーザデータ52の完全性を検証するための処理である。ベリファイ処理の具体的な手順は、図10のフローチャートを参照して前述した通りである。なお、リードデータは、パトロール処理のためにステップS402で既に読み出したデータであるので、CPU12は、ベリファイ処理を行うために、改めてNAND型フラッシュメモリ5からデータを読み出す必要がない。
【0146】
CPU12の処理は、ベリファイ処理の結果に応じて分岐する(ステップS409)。
【0147】
具体的には、ベリファイ処理の結果が、ユーザデータの完全性が確認されたことを示す場合(ステップS409でYES)、CPU12は、ベリファイ状況管理テーブル23において、ステップS403で特定したLBA(対象LBA)に関連付けられた最終確認時間を更新し(ステップS410)、CPU12の処理はステップS411に進む。
【0148】
ベリファイ処理の結果が、ユーザデータの完全性が確認されなかったことを示す場合(ステップS409でNO)、CPU12の処理はステップS411に進む。つまり、ユーザデータの完全性が確認されなかった場合、CPU12はベリファイ状況管理テーブル23において、対象LBAに関連付けられた最終確認時間を更新しない。
【0149】
次いで、CPU12は、NAND型フラッシュメモリ5の全データに対するパトロール処理が完了したか否かを判定する(ステップS411)。つまり、CPU12は、NAND型フラッシュメモリ5内のブロックに、パトロール処理でまだ読み出されていないデータが残っているか否かを判定する。
【0150】
全データに対するパトロール処理が完了していない場合(ステップS411でNO)、CPU12の処理はステップS401に戻り、まだ読み出されていないデータを対象としたパトロール処理を行う。
【0151】
一方、全データに対するパトロール処理が完了した場合(ステップS411でYES)、CPU12はパトロール処理およびベリファイ処理を終了する。
【0152】
以上のパトロール処理およびベリファイ処理により、CPU12は、パトロール処理で読み出したデータに対して、ベリファイ処理も行うことができる。これにより、CPU12は、パトロール処理とベリファイ処理とが別々に行われる場合よりも、NAND型フラッシュメモリ5からデータを読み出す回数を低減できる。したがって、NAND型フラッシュメモリ5の疲弊を軽減しながら、データを保全できる。
【0153】
(第2実施形態)
第1実施形態では、データのベリファイ状況が論理アドレス単位(例えばLBA単位)で管理される。これに対して、第2実施形態では、データのベリファイ状況がゾーン単位で管理される。
【0154】
第2実施形態に係るメモリシステム3の構成は第1実施形態のメモリシステム3と同様である。第2実施形態と第1実施形態とでは、ベリファイ状況をゾーン毎に管理するための構成のみが異なる。以下、第1実施形態と異なる点を主に説明する。
【0155】
第2実施形態に係るメモリシステム3は、NAND型フラッシュメモリ5に格納されるデータをゾーン単位で管理する方法として、例えばNVMe規格で規定されたZoned Namespaces(ZNS)を用いる。
【0156】
図13を参照して、ZNSについて説明する。メモリシステム3にアクセスするためにホスト2によって使用されるLBA空間の全体は、複数の部分空間に分割され得る。各部分空間は、ネームスペースと称されることがある。ZNSでは、1つのネームスペースのLBA空間の全体は、複数のゾーンに分割され得る。複数のゾーンのそれぞれは、複数のLBAを含み得る。1つのネームスペースを分割して得られる複数のゾーンのそれぞれは、連続し、且つ重複しない複数のLBAで構成されるLBA範囲に対応する。各ゾーンは、NAND型フラッシュメモリ5にアクセスするための単位として用いられる。
【0157】
図13に示す例では、ネームスペースはz個のLBA0~LBA(z-1)に対応し、x個のゾーン0~ゾーン(x-1)を備える。LBA0はゾーン0の最小のLBAである。また、LBA(z-1)はゾーン(x-1)の最大のLBAである。
【0158】
1つのゾーン内の書き込みは、シーケンシャルに実行される。1つのゾーンは、NAND型フラッシュメモリ5内の任意の物理単位に対応し得る。例えば、1つのゾーンは、NAND型フラッシュメモリ5内の1つのブロックに対応する。この場合、1つのブロックは、1つのゾーンに割り当てられたLBA範囲に含まれる連続するLBAを用いてアクセスされる。
【0159】
図14は、第2実施形態に係るメモリシステム3を含む情報処理システム1の構成例を示す。DRAM6には、FW21の格納領域、ゾーン-物理アドレス変換テーブル25のキャッシュ領域、およびベリファイ状況管理テーブル23の格納領域が設けられる。つまり、第2実施形態のメモリシステム3では、第1実施形態のメモリシステム3で用いられる論理物理アドレス変換テーブル22の代わりに、ゾーン-物理アドレス変換テーブル25が用いられる。
【0160】
DRAM6には、ゾーンディスクリプタ26の格納領域がさらに設けられていてもよい。ゾーンディスクリプタ26は、各ゾーンの構成や状態を示す情報を含む。あるゾーンに対応するゾーンディスクリプタ26は、例えば、そのゾーンの先頭のLBA(すなわち最小のLBA)、そのゾーンに書き込み可能な容量等の情報を含む。
【0161】
図15はゾーン-物理アドレス変換テーブル25の一構成例を示す。ゾーン-物理アドレス変換テーブル25は、ゾーンそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを管理する。ゾーン-物理アドレス変換テーブル25において、1つのゾーンは、例えば、そのゾーンに割り当てられたLBA範囲の先頭のLBA(例えばLBA)で表される。
【0162】
図15に示す例では、ゾーン“0”に物理アドレス“X”が、ゾーン“1”に物理アドレス“Y”が、ゾーン“2”に物理アドレス“Z”が、それぞれマッピングされている。
【0163】
コントローラ4は、ゾーン-物理アドレス変換テーブル25を用いて、NAND型フラッシュメモリ5の記憶領域を論理的に分割した複数の記憶領域を管理する。これら複数の記憶領域は、複数のゾーンにそれぞれ対応する。複数のゾーンのそれぞれは、例えば、そのゾーンに割り当てられたLBA範囲の先頭のLBAで特定される。
【0164】
図16はベリファイ状況管理テーブル23の一構成例を示す。ベリファイ状況管理テーブル23は、各ゾーンの先頭のLBAにそれぞれ対応する複数のエントリを含み得る。各エントリは、LBAのフィールドと、最終確認時間のフィールドとを含む。
【0165】
あるゾーンに対応するエントリにおいて、LBAのフィールドはそのゾーンに割り当てられたLBA範囲の先頭のLBAを示す。
【0166】
また、最終確認時間のフィールドは、そのゾーンのユーザデータの完全性が最後に確認された時間を示す。最終確認時間のフィールドに示される時間は、例えば、(A)対応するゾーンのユーザデータの完全性が最後に確認されてから経過した時間、を示す。経過時間は、例えば分単位の時間で表される。また、最終確認時間のフィールドに示される時間は、(B)対応するゾーンのユーザデータの完全性が最後に確認された時刻、を示してもよい。以下の説明において、最終確認時間という用語は(A)または(B)を意味するために用いられる。
【0167】
図16に示す例では、Zone“1”のユーザデータの完全性が確認されてから経過した時間は1分である。Zone“100”のユーザデータの完全性が確認されてから経過した時間は14400分である。Zone“101”のユーザデータの完全性が確認されてから経過した時間は108000分である。
【0168】
なお、ベリファイ状況管理テーブル23を用いる代わりに、最終確認時間をゾーンディスクリプタ26に含めるようにしてもよい。
【0169】
次いで、ベリファイ状況をゾーン毎に管理する場合のコマンド処理部121、リード処理部122、ベリファイ処理部123、パトロール処理部124、およびベリファイ状況管理部125の動作について例示する。
【0170】
まず、ベリファイ状況管理テーブル23で管理される最終確認時間について説明する。最終確認時間は、例えばベリファイ状況管理部125に設けられるタイマーを用いて決定される。
【0171】
(A)最終確認時間が、各ゾーンのユーザデータの完全性が最後に確認されてから経過した時間を示す場合、あるゾーンのユーザデータの完全性が確認されたことに応じて、そのゾーンに関連付けられる最終確認時間として、ベリファイ状況管理テーブル23に0が設定される。ベリファイ状況管理部125は、そのゾーンのユーザデータの完全性が次に確認されるまでの間、例えば定期的に、タイマーに基づく時間の経過に応じて、設定されている最終確認時間を増加させる。そのゾーンのユーザデータの完全性が次に確認された場合には、そのゾーンに関連付けられる最終確認時間として、再び0が設定される。
【0172】
(B)最終確認時間が、各ゾーンのユーザデータの完全性が最後に確認された時刻を示す場合、あるゾーンのデータの完全性が確認されたことに応じて、そのゾーンに関連付けられる最終確認時間として、ベリファイ状況管理部125のタイマーを用いて取得された現在の時刻がベリファイ状況管理テーブル23に設定される。そのゾーンのデータの完全性が次に確認された場合、設定されている最終確認時間は、ベリファイ状況管理部125のタイマーを用いてさらに取得された現在の時刻で更新される。
【0173】
図17および図18を参照して、ホスト2からベリファイコマンドを受信した場合のメモリシステム3の動作を説明する。以下では、説明を分かりやすくするために、ベリファイコマンドが1つのゾーンに割り当てられたLBA範囲を指定している場合について主に説明する。ベリファイコマンドは、前述したように、ベリファイの対象となるデータの先頭LBAと、当該データのサイズとを含む。ここでは、ベリファイコマンドで指定された先頭LBAが、1つのゾーンの先頭LBAに対応する。したがって、ベリファイコマンドで指定された先頭LBAが、ゾーンを識別する情報として用いられる。なお、ベリファイコマンドが複数のゾーンに跨るLBA範囲を指定している場合には、1つのゾーンに対応するLBA範囲毎に、以下の説明と同様の動作が行われる。
【0174】
図17は、メモリシステム3における、第1ベリファイコマンドに応じた動作の例を示す。メモリシステム3のコントローラ4は、第1ベリファイコマンドに応じて、指定されたLBA範囲に対応するゾーンのユーザデータの完全性を検証する。具体的な動作について以下に説明する。以下では、第1ベリファイコマンドで指定された先頭LBAで識別されるゾーンを、対象ゾーンとも称する。
【0175】
まず、コマンド処理部121はホスト2からホストI/F11を介して、第1ベリファイコマンドを受信する。コマンド処理部121は、ゾーン-物理アドレス変換テーブル25を用いて、受信した第1ベリファイコマンドで指定された先頭LBAに対応する物理アドレスを取得する。コマンド処理部121は、取得した物理アドレス(対象物理アドレス)をリード処理部122に送出する。また、コマンド処理部121は、第1ベリファイコマンドで指定された先頭LBAをベリファイ処理部123に送出する。
【0176】
リード処理部122は、コマンド処理部121によって送出された物理アドレスを用いて、その物理アドレスのデータをNAND型フラッシュメモリ5から読み出す。例えば、対象ゾーンが、NAND型フラッシュメモリ5内の対象物理アドレスで特定される1つのブロックに対応する場合、リード処理部122は、そのブロック内のデータを先頭から順に所定データ長単位で読み出してもよい。以下では、リード処理部122が読み出した所定データ長単位のデータを、リードデータとも称する。また、リードデータは、図4を参照して前述したデータ構造50の構成を有しているものとする。
【0177】
リード処理部122は、リードデータをベリファイ処理部123に送出する。なお、リード処理部122は、リードデータをDRAM6(より詳しくはリードバッファ)に格納してもよい。
【0178】
ベリファイ処理部123は、リードデータに含まれるユーザデータ52の完全性を検証する。ベリファイ処理部123によるユーザデータ52の完全性を検証するための動作は、第1実施形態で説明した通りである。ベリファイ処理部123は、例えば、リード処理部122によって送出された所定データ長単位のリードデータを順に処理することで、対象ゾーン内の全ユーザデータの完全性を検証する。1つのゾーン内の全ユーザデータは、そのゾーンに割り当てられたLBA範囲に含まれる全てのLBAのユーザデータである。
【0179】
対象ゾーン内の全ユーザデータの完全性が確認された場合、ベリファイ処理部123は、ベリファイ状況管理テーブル23において、先頭LBAに関連付けられた最終確認時間を更新する。そして、ベリファイ処理部123は、指定されたLBA範囲(すなわちゾーン)のユーザデータの完全性が確認されたことをホスト2に通知する。
【0180】
また、対象ゾーン内の少なくとも一部のユーザデータの完全性が確認されなかった場合、ベリファイ処理部123は、ベリファイ状況管理テーブル23において、先頭LBAに関連付けられた最終確認時間を更新しない。そして、ベリファイ処理部123は、指定されたLBA範囲(ゾーン)のユーザデータの完全性が確認されなかったことをホスト2に通知する。
【0181】
以上の動作により、メモリシステム3は、第1ベリファイコマンドで指定されたLBA範囲(ゾーン)のユーザデータの完全性を検証できる。
【0182】
図18は、メモリシステム3における、第2ベリファイコマンドに応じた動作の例を示す。第2ベリファイコマンドはLBA範囲と許容時間範囲とを指定する。コントローラ4は、第2ベリファイコマンドに応じて、指定されたLBA範囲に対応するゾーンのユーザデータの完全性が最後に確認された時間が許容時間範囲外である場合に、そのゾーンのユーザデータの完全性を検証する。また、コントローラ4は、指定されたLBA範囲に対応するゾーンのユーザデータの完全性が最後に確認された時間が許容時間範囲内である場合、そのゾーンのユーザデータの完全性を検証しない。つまり、コントローラ4は、指定されたLBA範囲に対応するゾーンのユーザデータの完全性が最後に確認された時間が許容時間範囲内である場合、そのゾーンに対するベリファイ動作をスキップする。具体的な動作について以下に説明する。以下では、第2ベリファイコマンドで指定された先頭LBAで識別されるゾーンを、対象ゾーンとも称する。
【0183】
まず、コマンド処理部121はホスト2からホストI/F11を介して、第2ベリファイコマンドを受信する。コマンド処理部121は、第2ベリファイコマンドで指定された先頭LBAを用いて、ベリファイ状況管理テーブル23から、対象ゾーンに関連付けられた最終確認時間を取得する。
【0184】
次いで、コマンド処理部121は、取得した最終確認時間が、第2ベリファイコマンドで指定された許容時間範囲内であるか否かを判定する。
【0185】
取得した最終確認時間が許容時間範囲内である場合、コマンド処理部121は、対象ゾーンのユーザデータの完全性を検証する動作が行われないように制御する。具体的には、コマンド処理部121は、対象ゾーンに対応する物理アドレス(例えば先頭LBAに対応する物理アドレス)をリード処理部122に送出しない。また、コマンド処理部121は、対象ゾーンを識別する先頭LBAをベリファイ処理部123に送出しない。これにより、リード処理部122は、NAND型フラッシュメモリ5から、対象ゾーンに対応する物理アドレスのデータを読み出さず、ベリファイ処理部123は対象ゾーンのユーザデータの完全性を検証しない。したがって、コマンド処理部121は、対象ゾーンの最終確認時間が許容時間範囲内である場合、対象ゾーンに対するベリファイ動作をスキップする。なお、コマンド処理部121は、対象ゾーンのユーザデータの完全性が許容時間範囲内の時間に確認済みであることを、ホスト2に通知してもよい。
【0186】
一方、取得した最終確認時間が許容時間範囲外である場合、コマンド処理部121はゾーン-物理アドレス変換テーブル25を用いて、先頭LBAに対応する物理アドレスを取得する。コマンド処理部121は、取得した物理アドレスをリード処理部122に送出する。また、コマンド処理部121は、先頭LBAをベリファイ処理部123に送出する。以降のリード処理部122およびベリファイ処理部123による動作は、図17を参照して前述した通りである。したがって、対象ゾーンの最終確認時間が許容時間範囲外である場合、対象ゾーンに対するベリファイ動作を行うことができる。
【0187】
以上の動作により、メモリシステム3は、対象ゾーンの全ユーザデータの最終確認時間が許容時間範囲内である場合に、対象ゾーンに対するベリファイ動作をスキップできる。つまり、許容時間範囲を指定する第2ベリファイコマンドを用いる場合、対象ゾーンに関連付けられた最終確認時間を考慮して、ベリファイ動作を行うかどうかを制御できる。したがって、例えば許容時間範囲を指定しない第1ベリファイコマンドを用いる場合と比較して、NAND型フラッシュメモリ5からデータを読み出す回数を低減できる可能性がある。よって、NAND型フラッシュメモリ5の疲弊を軽減し得る。
【0188】
なお、メモリシステム3における、状態問合せコマンドに応じた動作は、第1実施形態と同様である。
【0189】
図19は、メモリシステム3における、パトロール処理に付随したベリファイ処理の例を示す。
【0190】
まず、パトロール処理部124は、読み出し対象の物理アドレス(対象物理アドレス)を決定する。パトロール処理部124は、決定した対象物理アドレスをリード処理部122に送出する。対象物理アドレスを決定する方法は、第1実施形態で前述した通りである。
【0191】
また、パトロール処理部124はゾーン-物理アドレス変換テーブル25を用いて、対象物理アドレスに対応するLBA(対象LBA)を取得する。ゾーン-物理アドレス変換テーブル25は、ゾーンの先頭LBAと、物理アドレスとの対応関係を示している。パトロール処理部124は、例えば、ゾーンの先頭LBAに対応する物理アドレスと、対象物理アドレスとの相対的な関係に基づいて、対象物理アドレスに対応するLBAを取得できる。パトロール処理部124は、取得した対象LBAをベリファイ処理部123に送出する。
【0192】
リード処理部122は、パトロール処理部124によって送出された対象物理アドレスを用いて、対象物理アドレスのデータをNAND型フラッシュメモリ5から読み出す。読み出したデータ(リードデータ)は、図4を参照して前述したデータ構造50の構成を有しているものとする。
【0193】
リード処理部122は、リードデータをパトロール処理部124とベリファイ処理部123とに送出する。なお、リード処理部122は、リードデータをDRAM6(より詳しくはリードバッファ)に格納してもよい。
【0194】
パトロール処理部124は、リードデータに含まれるECC55を用いて誤り訂正処理を行う。パトロール処理部124は、誤り訂正処理で誤りが訂正されたビット数(すなわちECCエラービットの数)が閾値を超えた場合、リードデータを格納しているゾーンのリセットまたは変更をホスト2に通知してもよい。ゾーンのリセットの通知には、例えば、NVMeのReset Zone Recommendedが用いられる。ゾーンの変更の通知は、ゾーンをオフラインに設定することを含む。
【0195】
また、ベリファイ処理部123は、リードデータに含まれるユーザデータ52の完全性を検証する。ベリファイ処理部123によるユーザデータ52の完全性を検証するための動作は、第1実施形態で説明した通りである。ベリファイ処理部123は、例えば、リード処理部122によって送出される所定データ長単位のリードデータを順に処理することで、ゾーンのそれぞれの全ユーザデータの完全性を検証する。
【0196】
1つのゾーンの全ユーザデータの完全性を確認した場合、ベリファイ処理部123は、ベリファイ状況管理テーブル23において、そのゾーンに関連付けられた最終確認時間を更新する。一方、1つのゾーンの少なくとも一部のユーザデータの完全性を確認できなかった場合、ベリファイ処理部123は、ベリファイ状況管理テーブル23において、対象ゾーンに関連付けられた最終確認時間を更新しない。なお、1つのゾーンの少なくとも一部のユーザデータの完全性を確認できなかった場合、ベリファイ処理部123は、ゾーンのリセットまたは変更をホスト2に通知してもよい。
【0197】
以上の動作により、メモリシステム3では、定期的なパトロール処理でNAND型フラッシュメモリ5から読み出したデータを、ベリファイ処理にも用いることができる。これにより、定期的にパトロール処理が行われ、さらにベリファイコマンドに応じたベリファイ処理が行われる場合のような、パトロール処理とベリファイ処理とが別々に行われる場合よりも、NAND型フラッシュメモリ5からデータを読み出す回数を低減できる。したがって、NAND型フラッシュメモリ5の疲弊を軽減しながら、データを保全できる。
【0198】
また、最終確認時間をゾーン単位で管理する場合、LBA単位で管理する場合よりも、ベリファイ状況管理テーブル23のデータ量を低減できる。
【0199】
図20は、CPU12によって実行されるベリファイコマンド処理の手順の例を示すフローチャートである。CPU12は、このベリファイコマンド処理を、強制のベリファイコマンド(第1ベリファイコマンド)をホスト2から受信したことに応じて実行する。ここでは、ベリファイコマンドが、先頭LBAとサイズにより、ベリファイ処理の対象となるLBA範囲を指定している場合を例示する。また、指定されたLBA範囲が1つ以上のゾーンに対応し得ることを想定する。
【0200】
まず、CPU12はベリファイ対象のLBA(対象LBA)を決定する(ステップS601)。ベリファイ対象のLBAは、ベリファイコマンドで指定されたLBA範囲内の1つのLBAである。そして、CPU12は対象LBAを含むゾーンを特定する(ステップS602)。CPU12は、例えばゾーンディスクリプタ26を用いて、対象LBAを含むゾーンを特定する。以下では、特定したゾーンを、対象ゾーンとも称する。
【0201】
次いで、CPU12はステップS603からステップS605までの処理により、対象LBAのユーザデータ52に対するベリファイ処理を行って、対象LBAのユーザデータ52の完全性を検証する。ステップS603からステップS605までの処理は、図9を参照して前述したベリファイコマンド処理のステップS102からステップS104までの処理と同様である。
【0202】
次いで、CPU12の処理は、ベリファイ処理の結果に応じて分岐する(ステップS606)。
【0203】
ベリファイ処理の結果が、ユーザデータの完全性が確認されなかったことを示す場合(ステップS606でNO)、CPU12は、対象ゾーンのユーザデータの完全性が確認されなかったことをホスト2に通知し(ステップS607)、CPU12の処理はステップS611に進む。なお、ユーザデータの完全性が確認されなかった場合、CPU12はベリファイ状況管理テーブル23において、対象ゾーンに関連付けられた最終確認時間を更新しない。
【0204】
一方、ベリファイ処理の結果が、ユーザデータの完全性が確認されたことを示す場合(ステップS606でYES)、CPU12は、対象ゾーンの終端までベリファイが完了したか否かを判定する(ステップS608)。具体的には、CPU12は、例えばゾーンディスクリプタ26を用いて、現在の対象LBAが対象ゾーンに対応するLBA範囲の終端のLBAであるか否かを判定する。現在の対象LBAが対象ゾーンに対応するLBA範囲の終端のLBAである場合、CPU12は、対象ゾーンの終端までベリファイが完了したと判断する。
【0205】
対象ゾーンの終端までベリファイが完了していない場合(ステップS608でNO)、CPU12の処理はステップS601に戻り、後続するLBAを対象とした処理を続行する。
【0206】
対象ゾーンの終端までベリファイが完了した場合(ステップS608でYES)、CPU12は、ベリファイ状況管理テーブル23において、対象ゾーンに関連付けられた最終確認時間を更新する(ステップS609)。例えば、最終確認時間が、ユーザデータの完全性が確認されてから経過した時間を示す場合、CPU12は、対象ゾーンに関連付けられた最終確認時間として、0を設定する。あるいは、CPU12は、対象ゾーンに関連付けられた最終確認時間として、現在の時刻を設定してもよい。そして、CPU12は、対象ゾーンのユーザデータの完全性が確認されたことをホスト2に通知し(ステップS610)、CPU12の処理はステップS611に進む。なお、CPU12は、ベリファイコマンドで指定されたLBA範囲に対応する全てのゾーンのユーザデータに関するベリファイ結果を、まとめてホスト2に通知してもよい。
【0207】
次いで、CPU12は、別のゾーンのベリファイ対象のLBAがあるか否かを判定する(ステップS611)。つまり、CPU12は、ベリファイコマンドで指定されたLBA範囲に、ユーザデータに対するベリファイ処理がまだ行われていない別のゾーンのLBAが残っているか否かを判定する。
【0208】
別のゾーンのベリファイ対象のLBAがある場合(ステップS611でYES)、CPU12の処理はステップS601に戻り、その別のゾーンのLBAを対象とした処理を行う。
【0209】
一方、別のゾーンのベリファイ対象のLBAがない場合(ステップS611でNO)、すなわちベリファイコマンドで指定されたLBA範囲に対応する全てのゾーンに対するベリファイ処理が完了した場合、CPU12はベリファイコマンド処理を終了する。
【0210】
以上のベリファイコマンド処理により、CPU12はベリファイ状況管理テーブル23を更新し得る。具体的には、CPU12は、ベリファイコマンドで指定されたLBA範囲に対応する1つ以上のゾーンのそれぞれのユーザデータの完全性を検証する。そして、CPU12は、完全性を確認したユーザデータのゾーンに関連付けられた最終確認時間を更新する。これにより、メモリシステム3において、各ゾーンに格納されているユーザデータの完全性の最終確認時間を管理できる。
【0211】
図21は、CPU12によって実行されるベリファイコマンド処理の手順の別の例を示すフローチャートである。CPU12は、このベリファイコマンド処理を、許容時間範囲を指定したベリファイコマンド(第2ベリファイコマンド)をホスト2から受信したことに応じて実行する。ここでは、ベリファイコマンドが、ベリファイ処理の対象となるLBA範囲を指定している場合を例示する。また、指定されたLBA範囲が1つ以上のゾーンに対応し得ることを想定する。
【0212】
まず、CPU12はベリファイ対象のLBA(対象LBA)を決定する(ステップS701)。CPU12は対象LBAを含むゾーン(対象ゾーン)を特定する(ステップS702)。そして、CPU12はベリファイ状況管理テーブル23から、対象ゾーンに関連付けられた最終確認時間を取得する(ステップS703)。
【0213】
CPU12は、取得した最終確認時間が、ベリファイコマンドで指定された許容時間範囲内であるか否かを判定する(ステップS704)。
【0214】
取得した最終確認時間が許容時間範囲外である場合(ステップS704でNO)、CPU12は、ステップS705からステップS712までの処理により、対象LBAのユーザデータの完全性を検証し、終端までベリファイが完了したゾーンの検証結果をホスト2に通知するための処理を行う。ステップS705からステップS712までの処理は、図20を参照して前述したベリファイコマンド処理のステップS603からステップS610までの処理と同様であるのでその説明を省略する。そして、CPU12は、別のゾーンのベリファイ対象のLBAがあるか否かを判定する(ステップS713)。別のゾーンのベリファイ対象のLBAがある場合(ステップS713でYES)、CPU12の処理はステップS701に戻り、その別のゾーンのLBAを対象とした処理を行う。一方、別のゾーンのベリファイ対象LBAがない場合(ステップS713でNO)、CPU12はベリファイコマンド処理を終了する。
【0215】
取得した最終確認時間が許容時間範囲内である場合(ステップS704でYES)、CPU12は、別のゾーンのベリファイ対象のLBAがあるか否かを判定する(ステップS713)。別のゾーンのベリファイ対象のLBAがある場合(ステップS713のYES)、CPU12の処理はステップS701に戻り、その別のゾーンのLBAを対象とした処理を行う。一方、別のゾーンのベリファイ対象のLBAがない場合(ステップS713でNO)、CPU12はベリファイコマンド処理を終了する。つまり、取得した最終確認時間が許容時間範囲内である場合、CPU12は、対象ゾーンのユーザデータの完全性を検証するための処理を行うことなく、別のゾーンを対象とした処理を行い得る。なお、取得した最終確認時間が許容時間範囲内である場合、CPU12は、許容時間範囲内の時間に対象ゾーンのユーザデータの完全性が確認済みであることを、ホスト2に通知してもよい。
【0216】
以上のベリファイコマンド処理により、CPU12は、対象ゾーンに対応する最終確認時間が許容時間範囲外である場合、ベリファイ状況管理テーブル23を更新し得る。これにより、メモリシステム3において、各ゾーンに格納されているユーザデータの最終確認時間を管理できる。
【0217】
また、対象ゾーンに対応する最終確認時間が許容時間範囲内である場合、CPU12は、対象ゾーンのユーザデータ(すなわち、対象ゾーンに割り当てられたLBA範囲のユーザデータ)の完全性を検証するためのベリファイ処理を行わない。つまり、CPU12は、ユーザデータの完全性が許容時間範囲内に確認されているゾーンについては、ベリファイ処理を行わない。このように、CPU12は、ベリファイ状況管理テーブル23に記録された最終確認時間を利用することで、各ゾーンのユーザデータをNAND型フラッシュメモリ5から読み出す回数を低減し得る。したがって、NAND型フラッシュメモリ5の疲弊を軽減できる。
【0218】
図22は、CPU12によって実行されるパトロール処理に付随したベリファイ処理の手順の例を示すフローチャートである。CPU12は、パトロール処理およびパトロール処理に付随したベリファイ処理を、例えば一定時間毎に実行する。
【0219】
まず、CPU12は、ステップS801からステップS806までの処理で、NAND型フラッシュメモリ5に対するパトロール処理を行う。パトロール処理は、NAND型フラッシュメモリ5に含まれる複数のブロックのうち、誤りビット数が閾値を上回るデータが格納されているブロックそれぞれを検出するための処理である。CPU12は、例えば、検出されたブロックの物理アドレスが、あるゾーンに含まれるLBAに対応する場合、そのゾーンのリセットまたは変更をホスト2に通知する。
【0220】
具体的には、CPU12は、読み出し対象の物理アドレスを決定する(ステップS801)。CPU12はNAND型フラッシュメモリ5から、対象物理アドレスのデータを読み出す(ステップS802)。そして、CPU12はゾーン-物理アドレス変換テーブル25を用いて、対象物理アドレスに対応するLBAを特定する(ステップS803)。
【0221】
CPU12は、対象物理アドレスに対応するLBAを特定できたか否かを判定する(ステップS804)。換言すると、CPU12は、読み出した対象物理アドレスのデータ(リードデータ)が有効データであるか、それとも無効データであるかを判定する。
【0222】
対象物理アドレスに対応するLBAを特定できなかった場合(ステップS804でNO)、つまりリードデータが無効データである場合、CPU12の処理はステップS816に進む。CPU12は、無効データであるリードデータを何等処理することなく、後続するデータのための処理に進む。
【0223】
対象物理アドレスに対応するLBAを特定できた場合(ステップS804でYES)、つまりリードデータが有効データである場合、CPU12は、特定したLBAを含むゾーン(対象ゾーン)を特定する(ステップS805)。そして、CPU12はリードデータに対して、ECC55を用いた誤り訂正処理を行う(ステップS806)。CPU12は、誤り訂正処理で誤りが訂正されたビット数が閾値を超えたか否かを判定する(ステップS807)。誤り訂正処理で誤りが訂正されたビット数が閾値を超えた場合(ステップS807でYES)、CPU12は、対象ゾーンのリセットまたは変更をホスト2に通知し(ステップS808)、CPU12の処理はステップS809に進む。ホスト2は、この通知に応じて対象ゾーンをリセットまたは変更し得る。一方、誤り訂正処理で誤りが訂正されたビット数が閾値以下である場合(ステップS807でNO)、CPU12の処理はステップS809に進む。
【0224】
次いで、CPU12は、リードデータを用いてベリファイ処理を行う(ステップS809)。ベリファイ処理の具体的な手順は、図10のフローチャートを参照して前述した通りである。なお、リードデータは、パトロール処理のためにステップS802で既に読み出したデータであるので、CPU12は、ベリファイ処理を行うために、改めてNAND型フラッシュメモリ5からデータを読み出す必要がない。
【0225】
CPU12の処理は、ベリファイ処理の結果に応じて分岐する(ステップS810)。
【0226】
具体的には、ベリファイ処理の結果が、ユーザデータの完全性が確認されたことを示す場合(ステップS810でYES)、CPU12の処理はステップS812に進む。一方、ベリファイ処理の結果が、ユーザデータの完全性が確認されなかったことを示す場合(ステップS810でNO)、CPU12は、対象ゾーンのエラーフラグを立てて(ステップS811)、CPU12の処理はステップS812に進む。エラーフラグは、対応するゾーンにおいて、少なくとも1つのLBAのユーザデータの完全性が確認されなかったことを示す。つまり、エラーフラグは、対応するゾーンに完全性が確認されなかったユーザデータが格納されていることを示す。なお、パトロール処理に付随したベリファイ処理を開始する際に、各ゾーンのエラーフラグはクリアされた状態であるものとする。
【0227】
次いで、CPU12は、対象ゾーン全体のベリファイが完了したか否かを判定する(ステップS812)。対象ゾーン全体のベリファイが完了していない場合(ステップS812でNO)、CPU12の処理はステップS816に進む。
【0228】
対象ゾーン全体のベリファイが完了した場合(ステップS812でYES)、CPU12は、対象ゾーンのエラーフラグが立っているか否かを判定する(ステップS813)。対象ゾーンのエラーフラグがクリアされている場合(ステップS813でNO)、CPU12は、ベリファイ状況管理テーブル23において、対象ゾーンに関連付けられた最終確認時間を更新し(ステップS814)、CPU12の処理はステップS816に進む。つまり、対象ゾーンに格納されている全ユーザデータの完全性が確認された場合に、CPU12は、ベリファイ状況管理テーブル23において、対象ゾーンに関連付けられた最終確認時間を更新する。
【0229】
一方、対象ゾーンのエラーフラグが立っている場合(ステップS813でYES)、CPU12は対象ゾーンのリセットまたは変更をホスト2に通知し(ステップS815)、CPU12の処理はステップS816に進む。対象ゾーンに格納されている少なくとも一部のユーザデータの完全性が確認されなかった場合、CPU12は、ベリファイ状況管理テーブル23において、対象ゾーンに関連付けられた最終確認時間を更新しない。
【0230】
次いで、CPU12は、NAND型フラッシュメモリ5の全データに対するパトロール処理が完了したか否かを判定する(ステップS816)。つまり、CPU12は、NAND型フラッシュメモリ5内のブロックに、パトロール処理でまだ読み出されていないデータが残っているか否かを判定する。
【0231】
全データに対するパトロール処理が完了していない場合(ステップS816でNO)、CPU12の処理はステップS801に戻り、まだ読み出されていないデータを対象とした処理を行う。
【0232】
一方、全データに対するパトロール処理が完了した場合(ステップS816でYES)、CPU12はパトロール処理およびベリファイ処理を終了する。
【0233】
以上のパトロール処理およびベリファイ処理により、CPU12は、パトロール処理で読み出したデータに対して、ベリファイ処理も行うことができる。これにより、CPU12は、パトロール処理とベリファイ処理とが別々に行われる場合よりも、NAND型フラッシュメモリ5からデータを読み出す回数を低減できる。したがって、NAND型フラッシュメモリ5の疲弊を軽減しながら、データを保全できる。
【0234】
以上説明したように、第1および第2実施形態によれば、不揮発性メモリの疲弊を軽減しながらデータを保全できる。コントローラ4は、NAND型フラッシュメモリ5の記憶領域を論理的に分割した少なくとも1つの記憶領域を管理する。コントローラ4は、少なくとも1つの記憶領域の内の1つ以上の記憶領域にそれぞれ記憶されているデータの完全性が最後に確認された時間に関する情報(例えばベリファイ状況管理テーブル23)を管理する。
【0235】
この情報を用いることで、1つ以上の記憶領域にそれぞれ記憶されているデータに対してベリファイ処理を行うタイミングを制御できる。したがって、NAND型フラッシュメモリ5にからデータを読み出す回数を低減できるので、NAND型フラッシュメモリ5の疲弊を軽減しながらデータを保全できる。
【0236】
第1および第2実施形態に記載された様々な機能のそれぞれは、回路(処理回路)によって実現されてもよい。処理回路の例には、中央処理装置(CPU)のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム(命令群)を実行することによって、記載された機能それぞれを実現する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。これら実施形態に記載されたCPU以外の他のコンポーネントのそれぞれもまた処理回路によって実現されてもよい。
【0237】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0238】
1…情報処理システム、2…ホスト、3…メモリシステム、4…コントローラ、5…NAND型フラッシュメモリ、6…DRAM、11…ホストI/F、12…CPU、13…NAND I/F、14…DRAM I/F、121…コマンド処理部、122…リード処理部、123…ベリファイ処理部、124…パトロール処理部、125…ベリファイ状況管理部、21…FW、22…論理物理アドレス変換テーブル、23…ベリファイ状況管理テーブル、25…ゾーン-物理アドレス変換テーブル、26…ゾーンディスクリプタ。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22