(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023140127
(43)【公開日】2023-10-04
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
G06F 12/04 20060101AFI20230927BHJP
G06F 12/00 20060101ALI20230927BHJP
【FI】
G06F12/04 530
G06F12/00 597U
G06F12/04 540
【審査請求】未請求
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2022046002
(22)【出願日】2022-03-22
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】竹本 卓
(72)【発明者】
【氏名】山口 健作
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA12
5B160DA01
5B160GA18
(57)【要約】
【課題】圧縮されたクラスタを効率良く読み出すように制御する。
【解決手段】メモリシステムは、不揮発性メモリと、ホストに接続可能なコントローラとを備える。コントローラは、ホストから論理アドレスと論理アドレスに対応するデータを指定したコマンドを受信した場合に、データに基づくクラスタに対して圧縮処理を実行し、圧縮処理後のクラスタの論理アドレスを、不揮発性メモリの配置アドレスに変換する変換処理を実行し、不揮発性メモリにおける配置アドレスの位置に、圧縮処理後のクラスタを書き込み、変換処理では、配置アドレスを配置アドレスの単位より大きい単位の先頭位置に調整する調整処理を実行するか否かをクラスタ毎に判断する。
【選択図】
図3
【特許請求の範囲】
【請求項1】
不揮発性メモリと、ホストに接続可能なコントローラとを備え、
前記コントローラは、
前記ホストから論理アドレスと前記論理アドレスに対応するデータを指定したコマンドを受信した場合に、前記データに基づくクラスタに対して圧縮処理を実行し、
前記圧縮処理後のクラスタの論理アドレスを、前記不揮発性メモリの配置アドレスに変換する変換処理を実行し、
前記不揮発性メモリにおける前記配置アドレスの位置に、前記圧縮処理後のクラスタを書き込み、
前記変換処理では、前記配置アドレスを前記配置アドレスの単位より大きい単位の先頭位置に調整する調整処理を実行するか否かを前記圧縮処理後のクラスタ毎に判断する、メモリシステム。
【請求項2】
前記変換処理では、前記論理アドレスまたは前記圧縮処理後のクラスタのサイズに基づいて前記調整処理を実行するか否かを判断する、請求項1に記載のメモリシステム。
【請求項3】
前記変換処理では、前記圧縮処理後のクラスタのサイズが非圧縮のサイズである場合に、前記調整処理を実行する、請求項2に記載のメモリシステム。
【請求項4】
前記配置アドレスの単位より大きい単位とは、ECC(Error Correcting Code)フレームである、請求項1に記載のメモリシステム。
【請求項5】
不揮発性メモリと、ホストに接続可能なコントローラとを備え、
前記コントローラは、
前記ホストから論理アドレスと前記論理アドレスに対応するデータを指定したコマンドを受信した場合に、前記データに基づくクラスタに対して圧縮処理を実行し、
前記圧縮処理後のクラスタの論理アドレスを、前記不揮発性メモリの配置アドレスに変換する変換処理を実行し、
前記不揮発性メモリにおける前記配置アドレスの位置に、前記圧縮処理後のクラスタを書き込み、
前記変換処理では、前記圧縮処理後のクラスタ毎に、前記配置アドレスの単位で配置アドレス変換する第1変換処理と、前記配置アドレスより大きい単位で配置アドレス変換する第2変換処理との何れかにより配置アドレス変換する、メモリシステム。
【請求項6】
前記変換処理では、前記論理アドレスまたは前記圧縮処理後のクラスタのサイズに基づいて前記第1変換処理および前記第2変換処理のいずれかの変換処理を実行するか判断する、請求項5に記載のメモリシステム。
【請求項7】
前記変換処理では、前記圧縮処理後のクラスタのサイズが非圧縮のサイズである場合、前記第2変換処理を実行し、前記圧縮処理後のクラスタのサイズが非圧縮のサイズより小さい場合、前記第1変換処理を実行する、請求項6に記載のメモリシステム。
【請求項8】
前記変換処理では、前記論理アドレスが非連続である場合、前記第2変換処理を実行する、請求項6に記載のメモリシステム。
【請求項9】
不揮発性メモリと、コントローラとを備え、
前記コントローラは、
前記不揮発性メモリにおける、ガベージコレクション対象の領域におけるクラスタの配置アドレスをコピー先の領域の配置アドレスに変換する変換処理を実行し、
前記変換後の配置アドレスの位置に、前記圧縮処理後のクラスタをコピーすることでガベージコレクション処理を実行し、
前記変換処理では、前記クラスタ毎に、前記配置アドレスの単位で配置アドレス変換する第1変換処理と、前記配置アドレスより大きい単位で配置アドレス変換する第2変換処理との何れかにより配置アドレス変換する、メモリシステム。
【請求項10】
前記変換処理では、前記クラスタの論理アドレスまたは前記クラスタのサイズに基づいて前記第1変換処理および前記第2変換処理のいずれかの変換処理を実行するか判断する、請求項9に記載のメモリシステム。
【請求項11】
前記変換処理では、前記圧縮処理後のクラスタのサイズが非圧縮のサイズである場合、前記第2変換処理を実行し、前記圧縮処理後のクラスタのサイズが非圧縮のサイズより小さい場合、前記第1変換処理を実行する、請求項10に記載のメモリシステム。
【請求項12】
前記変換処理では、前記論理アドレスが非連続である場合、前記第2変換処理を実行する、請求項10に記載のメモリシステム。
【請求項13】
不揮発性メモリと、ホストに接続可能なコントローラとを備え、
前記コントローラは、
前記ホストから論理アドレスと前記論理アドレスに対応するデータを指定したコマンドを受信した場合に、前記データに基づくクラスタに対して圧縮処理を実行し、
前記圧縮処理後のクラスタのデータサイズに基づいた互いにサイズが異なる領域を複数設定し、
前記圧縮処理後のクラスタの論理アドレスを、前記不揮発性メモリの配置アドレスに変換する変換処理を実行し、
前記不揮発性メモリにおける前記配置アドレスの位置に、前記圧縮処理後のクラスタを書き込み、
前記変換処理では、前記圧縮処理後のクラスタ毎に、前記圧縮処理後のクラスタのサイズに基づいて、複数設定された何れかの領域に配置アドレスを変換する、メモリシステム。
【請求項14】
不揮発性メモリと、コントローラとを備え、
前記コントローラは、
前記不揮発性メモリにおける、ガベージコレクション対象の領域における、圧縮処理を実行済のクラスタのコピー先の領域の配置アドレスに変換する変換処理を実行し、
前記変換後の配置アドレスの位置に、前記圧縮処理後のクラスタをコピーすることでガベージコレクション処理を実行し、
前記圧縮処理後のクラスタのデータサイズに基づいた互いにサイズが異なる前記コピー先の領域を複数設定し、
前記変換処理では、前記クラスタ毎に、前記圧縮処理後のクラスタのサイズに基づいて、複数設定された何れかの領域に配置アドレスを変換する、メモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本実施形態は、メモリシステムに関する。
【背景技術】
【0002】
NANDコントローラでユーザデータを圧縮・伸長する機能を有するメモリシステムがある。書き込み対象のユーザデータは、一定サイズのデータ(以下、このデータを「クラスタ」とも呼ぶ)に分割される。また、メモリシステムは、このクラスタを圧縮処理して不揮発性メモリへ書き込む。この場合、メモリシステムは、圧縮処理されたクラスタを効率良く読み出すことが望まれる。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
一つの実施形態は、圧縮されたクラスタを効率良く読み出すように制御するメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【0005】
一つの実施形態によれば、メモリシステムは、不揮発性メモリと、ホストに接続可能なコントローラとを備える。コントローラは、ホストから論理アドレスと論理アドレスに対応するデータを指定したコマンドを受信した場合に、データに基づくクラスタに対して圧縮処理を実行し、圧縮処理後のクラスタの論理アドレスを、不揮発性メモリの配置アドレスに変換する変換処理を実行し、不揮発性メモリにおける配置アドレスの位置に、圧縮処理後のクラスタを書き込み、変換処理では、配置アドレスを配置アドレスの単位より大きい単位の先頭位置に調整する調整処理を実行するか否かをクラスタ毎に判断する。
【図面の簡単な説明】
【0006】
【
図1】第1の実施形態にかかるメモリシステムの構成の一例を示す図。
【
図2】第1の実施形態にかかる配置例を説明する図。
【
図3】第1の実施形態にかかるメモリシステムにおけるクラスタ配置処理手順を示すフローチャート。
【
図4】第2の実施形態にかかる配置例を説明する図。
【
図5】第2の実施形態にかかるメモリシステムにおけるクラスタ配置処理手順を示すフローチャート。
【
図6A】第3実施形態にかかるクラスタの配置例を示す図(1)
【
図6B】第3実施形態にかかるクラスタの配置例を示す図(2)
【
図6C】第3実施形態にかかるクラスタの配置例を示す図(3)
【
図7】第3の実施形態にかかるメモリシステムにおけるクラスタ配置処理手順を示すフローチャート。
【
図8】第4の実施形態にかかる配置例を説明する図。
【発明を実施するための形態】
【0007】
以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【0008】
(第1の実施形態)
図1は、第1の実施形態にかかるメモリシステム1の構成の一例を示す図である。
図1に示すように、メモリシステム1は、メモリコントローラ10、NAND型フラッシュメモリ20(以下、「NANDメモリ20」と記載)及びDRAM30を備える。メモリシステム1は、メモリコントローラ10とNANDメモリ20とが1つのパッケージとして構成されるメモリカード等であってもよいし、SSD(Solid State Drive)等であってもよい。
【0009】
メモリコントローラ10は、例えばSoC(System on a Chip)として構成され得る。また、メモリコントローラ10は、FPGA(Field Programmable Gate Array)またはASIC(Application Specific Integrated Circuit)を備えていてもよい。メモリコントローラ10は、NANDメモリ20に各種動作を命令することができる。メモリコントローラ10は、外部のホスト2からの要求(リクエスト)に基づいた動作と、ホスト2からの要求に依らない動作とを実行する。メモリコントローラ10の各機能は、プログラムを実行するCPU(Central Processing Unit)により実現されてもよく、専用のハードウェアで実現されてもよい。
【0010】
メモリコントローラ10は、ホストインタフェース(I/F)11、CPU12、ECC部13、圧縮・伸長部14、NANDインタフェース(I/F)15、及びDRAMインタフェース(I/F)16を備える。
【0011】
ホストインタフェース(I/F)11は、ホスト2に接続され、メモリシステム1とホスト2との間の通信を司る。ホストI/F11は、例えばメモリシステム1とホスト2との間で、データ、要求、及びアドレスの転送を制御する。ホストI/F11は、ホスト2との間の通信インタフェース規格に従った処理を実施する。ホストI/F11は、ホスト2から受信したアクセス先のアドレスおよびコマンドの信号を受信する。また、ホストI/F11は、ホスト2から書き込み対象のユーザデータを受信する。
【0012】
CPU12は、メモリコントローラ10全体の動作を制御する。CPU12は、例えばホスト2から受信した書き込み要求に応答して書き込みコマンドを発行して、発行した書き込みコマンドをNANDI/F15に送信する。また、CPU12は、ホスト2から受信した読み出し要求に応答して読み出しコマンドを発行して、発行した読み出しコマンドをNANDI/F15に送信する。NANDメモリ20に対するデータの読み出し制御や書き込み制御は、物理ページ単位で行われる。物理ページは、予め定めた数の複数のセルを含む。物理ページのサイズは、例えば、4kbyte、8kbyte、16kbyteなどである。
【0013】
CPU12は、論理アドレスと、論理アドレスに対応するユーザデータを指定した書き込みコマンドを受信すると、CPU12は、ホスト2から受信した書き込み対象のユーザデータを一定サイズのクラスタに分割する。ここで、クラスタは、メモリコントローラ10による管理の単位のサイズを有するデータである。管理とは、一例では、論理アドレスと物理アドレスとの対応の管理である。上記管理の単位のサイズは、例えば、4kbyteが該当するが、これに限定されるものではない。また、クラスタは、圧縮処理の単位でもある。
【0014】
CPU12は、圧縮・伸長部14に、各クラスタに対して圧縮処理を実行させる。そして、CPU12は、圧縮処理が施されたクラスタをECC(Error Correcting Code)フレームごとにECC部13に符号化させる。ECCフレームは、誤り訂正符号化の処理の単位となるデータである。非圧縮のクラスタのサイズは固定長であり、ECCフレームは、非圧縮のクラスタのサイズに対応する。なお、CPU12は、当該クラスタの論理アドレスを、NANDメモリ20の配置アドレスに変換する。例えば、CPU12は、配置アドレスをECCフレームに基づいて変換する。また、CPU12は、当該配置アドレスに基づいてNANDメモリ20へECCフレームを書き込む。
【0015】
また、CPU12は、ガベージコレクション処理を実行する。具体的に、CPU12は、追記処理が出来ないNANDメモリ20において、書き込み可能な物理ブロックが不足した場合に、書き込み済みのブロックから有効なデータを退避した上で消去し、書き込み可能ブロックを新たに生成する。ガベージコレクションの対象となるブロックから退避された有効データは、書き込み可能なブロックへ、再度書き込みする。
【0016】
ECC部13は、データを符号化することで誤り検出訂正用のパリティを生成するとともに、ユーザデータとパリティとを含む符号語を生成する。また、ECC部13は、NANDメモリ20から読み出された符号語を復号してデータを復元する。例えば、ECC部13は、予め定められている単位のデータをCPU12から受信し、受信したデータを符号化して、パリティを生成することで符号語を生成する。
【0017】
圧縮・伸長部14は、クラスタを圧縮する。圧縮・伸長部14は、例えば、メモリシステム1の独自の圧縮フォーマットで圧縮してもよい。圧縮・伸長部14は、クラスタの圧縮処理を実行した結果、データを圧縮できた場合、圧縮処理後のクラスタとして、圧縮されたクラスタをCPU12へ送信する。圧縮・伸長部14は、クラスタの圧縮処理を実行した結果、データを圧縮できなかった場合、その旨をCPU12へ送信する。ここでいう、データを圧縮できなかった場合とは、圧縮効果がなかった場合をいう。また、圧縮・伸長部14は、クラスタの圧縮処理を実行した結果、データを圧縮できなかった場合、非圧縮のクラスタをCPU12へ送信するようにしてもよい。このように、圧縮処理後のクラスタには、圧縮されたクラスタと、非圧縮のクラスタとの2種類ある。なお、非圧縮のクラスタのデータサイズは固定長であるが、圧縮・伸長部14が圧縮したデータのサイズは、クラスタのデータ内容により異なり、可変長となる。また、圧縮・伸長部14は、圧縮されたデータを伸長する。
【0018】
NANDI/F15は、NANDメモリ20との間の通信を司る。NANDI/F15は、NANDインタフェース規格に基づいて構成されている。
【0019】
DRAMI/F16は、DRAM30との間の通信を司る。DRAMI/F16は、DRAMインタフェース規格に基づいて構成されている。
【0020】
上述のように、クラスタを圧縮せずにECCフレームに配置して、当該ECCフレームをNANDメモリ20に書き込んだ場合において、書き込みしたECCフレーム内のクラスタを読み出す場合、1つのECCフレームを読み出しすればよい。しかし、クラスタを圧縮して訂正符号を適用すると、圧縮後のクラスタのサイズが縮小されるので、2つのECCフレームを跨ぐクラスタが発生する。この結果、以下のようになる。(1)隣接する2つのECCフレームに対する符号化・復号処理が必要となる。つまり、ECC部13による復号処理量が2倍となる。(2)隣接する2つのECCフレーム分のデータをNANDメモリ20から転送する必要がある。つまり、NANDメモリ20の転送量が2倍になる。このように、あるクラスタが2つのECCフレームに跨ってNANDメモリ20に書き込まれた場合、メモリコントローラが当該クラスタを読み出す際、2つのECCフレームに相当するサイズのデータを転送したり、復号処理をしたりする必要が生じ、読み出し処理の効率が落ちる。なお、2つのECCフレームを跨ぐクラスタであっても、シーケンシャルなリードであれば、ECC復号後のデータをキャッシュして隣接するリードで利用することでより効率の低下を抑えることができる。しかし、ランダムアクセスによるリードの場合、処理効率が低下してしまう。
【0021】
そこで、メモリシステム1は、圧縮されたクラスタを効率良く読み出すように制御する。
【0022】
第1の実施形態にかかるメモリコントローラ10は、ホスト2から受信した書き込み対象のユーザデータをクラスタ毎に分割して、各クラスタを圧縮して、各クラスタをECCフレーム単位で符号化して、符号化したデータをNANDメモリ20へ書き込む。
【0023】
第1の実施形態にかかるメモリコントローラ10が、所定の条件に応じて圧縮処理後のクラスタを配置するECCフレームを決定する。
【0024】
ここで、
図2を用いて、圧縮したクラスタをECCフレームに配置する例を説明する。
図2に示すように、圧縮前のクラスタ115a~115cがあるものとする。圧縮前のクラスタ115a~115cのサイズは、同一である。なお、以下、クラスタ115a、クラスタ115b、・・・クラスタ115nを区別しない場合には、クラスタ115と称する。
【0025】
圧縮・伸長部14は、クラスタ115a~115cを圧縮する。クラスタ115a~115cを圧縮すると、クラスタ115a~115cのサイズは、非圧縮の状態よりサイズが小さくなるため、ECCフレームのサイズと対応付かない。
【0026】
そこで、CPU12は、圧縮後のクラスタ115aおよび圧縮後のクラスタ115bの一部をECCフレーム120aに配置する。また、CPU12は、圧縮後のクラスタ115bの残りをECCフレーム120bに配置する。そして、CPU12は、ECCフレーム120bの残り領域(以下、「padding」とも称する。)のサイズが所定閾値以下である場合、圧縮後のクラスタ115cの配置位置をECCフレーム120cとする。なお、padding領域にはあらかじめ定義された任意の値(例えば、0)が書き込まれる。このように、CPU12が、クラスタ115の配置位置をECCフレーム120の先頭位置に合わせる調整処理を実行することを、アライメントともいう。このようにアライメントする際、CPU12は、配置アドレスを逐次書き込む場合より大きい単位であるECCフレーム120単位で配置アドレスを変換する。CPU12は、圧縮後のクラスタ115cをECCフレーム120bではなく、次のECCフレームであるECCフレーム120cに配置する。すなわち、CPU12は、圧縮後のクラスタ115cの書き込み位置(以下、「ライトポインタ」とも称する。)をECCフレーム120cの先頭位置に変更する。なお、以下、ECCフレーム120a、ECCフレーム120b、・・・ECCフレーム120nを区別しない場合には、ECCフレーム120と称する。
【0027】
このように、CPU12は、ECCフレーム120bのpaddingのサイズが所定閾値以下である場合に、クラスタ115の配置位置をアライメントすることで、空き領域を増やすことと、ECCフレームを跨ぐクラスタ115の低減のバランスを取るように制御する。例えば、閾値を許容できる容量ペナルティとして設定しておき、CPU12は、容量ペナルティが少ない場合にアライメントする。
図2の例の場合、クラスタ115b(2番目のクラスタ)とクラスタ115c(3番目のクラスタ)の間に空き領域が発生し、この部分は容量ペナルティとなる。この空き領域は、アライメント不要とアライメント要のクラスタが隣接する部分しか発生しないので、アライメント要否の判断基準を調整することで空き領域の発生頻度を変えることができる。つまり、クラスタ115がECCフレームを跨ぐことによる性能ペナルティと、空き領域による容量ペナルティのトレードオフの最適化が可能である。
【0028】
なお、CPU12は、上記のように、ECCフレーム120の残り領域に基づいて書き込み位置を他のECCフレーム120にアライメントする場合について述べたが、他の条件に基づいてアライメントするようにしてもよい。
【0029】
例えば、CPU12は、クラスタ115が非圧縮のクラスタ115である場合、アライメントするようにしてもよい。これは、非圧縮のクラスタ115は、連続して発生する傾向があり、一度アライメントを取れば、その後のクラスタ115もアライメントされることが期待できることを想定した基準である。
【0030】
また、CPU12は、論理クラスタアドレスが不連続であれば、アライメントするようにしてもよい。これは、論理クラスタアドレスが不連続の場合、そのクラスタ115に対する読み出しアクセスは、ランダムアクセスになる可能性が高いことを想定したものである。
【0031】
続いて、CPU12によるクラスタ配置処理の処理手順について、
図3を用いて説明する。
図3は、第1の実施形態にかかるメモリシステム1におけるクラスタ配置処理の処理手順を示すフローチャートである。
【0032】
CPU12は、配置対象のクラスタ115の一つ前に配置したクラスタ115の末尾の次の位置をライトポインタに設定する(ステップS1)。続いて、CPU12は、ECCフレーム120のアライメントの要否を判断する(ステップS2)。例えば、CPU12は、配置対象のクラスタ115の一つ前に配置したクラスタ115のECCフレーム120の空き領域に基づいてアライメントの要否を判断する。
【0033】
CPU12は、アライメント要と判断し、且つライトポインタがECCフレーム120の境界でなければ(ステップS3:Yes)、次のECCフレーム120までライトポインタを移動させる(ステップS4)。
【0034】
読み出し処理は、書き込み処理と逆の手順となる。具体的に、CPU12は、読み出し対象のクラスタ115を構成するECCフレーム120をNANDメモリ20から読み出して、ECC部13にて復号し、メモリコントローラ10内のバッファで保持する。CPU12は、バッファに読み出し対象のクラスタ115の全てが揃った場合、ホストI/F11を介して読み出し対象のデータをホスト2へ送信する。
【0035】
上述のように、メモリコントローラ10は、ホスト2から取得したユーザデータに基づくクラスタ115に対して圧縮処理を実行した後に、クラスタ115の配置アドレスへ変換する。メモリコントローラ10は、配置アドレスをECCフレーム120単位でアライメントするか否かをクラスタ115に判断する。このように、メモリコントローラ10は、クラスタ115毎に、アライメントすることで、クラスタ115がECCフレーム120を跨ぐことを減らすことができ、読み出す際に、圧縮されたクラスタを効率良く読み出すことができる。
【0036】
また、メモリコントローラ10は、クラスタ115の論理アドレスまたは圧縮処理後のクラスタ115のサイズに基づいて配置アドレスのアライメントの要否を判断する。これにより、メモリコントローラ10は、シーケンシャル読み出しの可能性やECCフレーム120内の空き領域のサイズを考慮して、アライメントの要否を判断することができる。
【0037】
(第2の実施形態)
第2の実施形態にかかるメモリシステム1は、複数のライトポインタを設定し、クラスタ115が圧縮したものか非圧縮したものかにより、ライトポインタを切り替えて、所定サイズの配置領域であるレイアウト領域の先頭側のECCフレーム120に配置する変換処理およびレイアウト領域の末尾側のECCフレーム120に配置する変換処理の何れかの変換処理を選択することでECCフレーム120の境界を跨ぐクラスタ115を削減するものである。一つのレイアウト領域のサイズは、数百KByteである。また、レイアウト領域は、ECCフレーム120の整数倍のサイズであってもよい。
【0038】
ここで、
図4を用いて、第2の実施形態に係るクラスタをECCフレームに配置する例を説明する。
図4に示すように、圧縮前のクラスタ115a~115dがあるものとする。圧縮前のクラスタ115a~115dのサイズは、同一である。
【0039】
圧縮・伸長部14は、クラスタ115a~115dに対して圧縮処理を実行する。この結果、クラスタ115b及びクラスタ115dについては、サイズが小さくなり、クラスタ115a及びクラスタ115cについては、非圧縮であるものとする。
【0040】
この場合、CPU12は、非圧縮のクラスタ115a及びクラスタ115cについては、複数のECCフレーム120のうち、レイアウト領域の先頭側のECCフレーム120aおよびECCフレーム120bに配置する変換処理を実行する。この変換処理は、第2変換処理の一例である。そして、CPU12は、クラスタ115b及びクラスタ115dについては、レイアウト領域の末尾側のECCフレーム120d、ECCフレーム120cに配置する変換処理を実行する。この変換処理は、第1変換処理の一例である。
【0041】
このように、CPU12は、書き込み対象のクラスタ115が非圧縮のデータである場合、所定のライトポインタにより、それぞれのクラスタ115をレイアウト領域の先頭側のECCフレーム120へ配置する。そして、CPU12は、書き込み対象のクラスタ115が圧縮のデータである場合、異なるライトポインタで、レイアウト領域の末尾側のECCフレーム120へ連続して配置する。
【0042】
続いて、CPU12によるクラスタ配置処理の処理手順について、
図5を用いて説明する。
図5は、第2の実施形態にかかるメモリシステム1におけるクラスタ配置処理の処理手順を示すフローチャートである。
【0043】
CPU12は、配置対象のクラスタ115が圧縮クラスタであるか否か判断する(ステップS11)。配置対象のクラスタ115が圧縮クラスタでない場合(ステップS11:No)、CPU12は、アラインデータ用のライトポインタを書き込み先に設定して(ステップS12)、クラスタ115のライトポインタを更新する(ステップS13)。
【0044】
一方、CPU12が判断した結果、配置対象のクラスタ115が圧縮クラスタである場合(ステップS11:Yes)、CPU12は、非アラインデータ用のライトポインタを書き込み先に設定して(ステップS14)、クラスタのライトポインタを更新する(ステップS15)。
【0045】
なお、上記の例では、メモリコントローラ10が、配置対象のクラスタ115が圧縮されたものであるか否かによりライトポインタを切り替える場合について述べたが、この基準では、論理クラスタアドレスが隣接しているクラスタがNANDメモリ20の異なるページに配置してしまう可能性がある。そこで、さらに以下に記載の基準を追加してもよい。例えば、非圧縮のクラスタが連続している場合に、メモリコントローラ10が、当該クラスタ115を先頭側のECCフレーム120に設定するようにしてもよい。この基準は、論理クラスタアドレスが近いクラスタがなるべくNANDメモリ20の同一ページに配置されるようにすることを目的としている。例えば、圧縮クラスタが連続している中、途中に一つのみ非圧縮のクラスタがあるような場合に、ECCフレーム境界を跨ぐ頻度が減るメリットより、その非圧縮のクラスタのアクセスのためにNANDメモリ20の別ページへのアクセスが必要になるデメリットが大きくなることを避けることを目的とする。これにより、メモリコントローラ10は、非圧縮のクラスタ115を上記圧縮クラスタと離れた領域に配置してしまい、読み出し処理負荷がかかってしまうことを回避することができる。
【0046】
また、論理クラスタアドレスが不連続となった場合に、CPU12は、クラスタ115をアライメントするようにしてもよい。論理クラスタアドレスが不連続であるということは、ランダムで読み出す可能性が高い。逆に、論理クラスタアドレスが連続している書き込みの場合は、その後のこれらのクラスタに対するリードアクセスは、シーケンシャルである可能性が高いことから、ECCフレーム120へのアライメントをするメリットが低い。論理クラスタアドレスが不連続となった場合、CPU12は、クラスタ115の配置箇所をアライメントすることで、ランダムで読み出す可能性が高い場合にECCフレーム120を跨って読み出しすることを回避させることができる。
【0047】
上述のように、メモリコントローラ10は、ホスト2から取得したユーザデータに基づくクラスタ115に対して圧縮処理を実行した後に、クラスタ115の配置アドレスへ変換する。メモリコントローラ10は、ECCフレーム120に基づいてアライメントする変換処理と、配置アドレスの単位で変換する変換処理との何れかの変換処理により配置アドレス変換する。
【0048】
この場合、メモリコントローラ10は、圧縮処理した結果、圧縮されなかったクラスタ115をECCフレーム120に基づいてアライメントすることができ、クラスタ115がECCフレーム120を跨ぐことを減らすことができる。
【0049】
(第3の実施形態)
第3の実施形態にかかるメモリシステム1は、ガベージコレクション時のコピー処理において、クラスタ115の配置を制御して、ECCフレーム120単位でクラスタ115の配置アドレスを変換する変換処理と、ECCフレーム120単位より小さい単位でクラスタ115の配置アドレスを変換する変換処理とを選択して変換することでECCフレーム120の境界を跨ぐクラスタ115を削減するものである。
【0050】
第3の実施形態におけるガベージコレクションの処理について
図6を用いて説明する。
図6Aは、ガベージコレクション実行前における、ECCフレーム120に配置されたクラスタ115を示す図である。
【0051】
クラスタ115a、クラスタ115c、およびクラスタ115eは、圧縮されたクラスタである。また、クラスタ115bおよびクラスタ115dは、非圧縮のクラスタである。クラスタ115aは、ECCフレーム120aに配置されている。また、クラスタ115bは、ECCフレーム120aおよびECCフレーム120bに配置されている。クラスタ115cは、ECCフレーム120bおよびECCフレーム120cに配置されている。クラスタ115dは、ECCフレーム120cおよびECCフレーム120dに配置されている。クラスタ115eは、ECCフレーム120dに配置されている。
【0052】
この場合、CPU12は、
図6Bに示すように、ガベージコレクションのコピー先へ非圧縮のクラスタ115bおよびクラスタ115dをECCフレーム120gおよびECCフレーム120hに配置する。
【0053】
続いて、CPU12は、
図6Cに示すように、圧縮したクラスタであるクラスタ115a、クラスタ115c、およびクラスタ115eをECCフレーム120iまたはECCフレーム120jに配置する。
【0054】
このように、CPU12は、非圧縮のクラスタ115を連続してECCフレーム120に配置して、その後に圧縮したクラスタ115をECCフレーム120に配置する。これにより、非圧縮のクラスタと、圧縮したクラスタとが混在して連続してECCフレーム120に配置する場合よりECCフレーム120を跨ぐクラスタを減らすことができる。
【0055】
続いて、第3実施形態にかかるCPU12によるクラスタ配置処理の処理手順について、
図7を用いて説明する。
図7は、第3の実施形態にかかるメモリシステム1におけるクラスタ配置処理の処理手順を示すフローチャートである。
【0056】
CPU12は、ガベージコレクションのコピー元のNANDメモリ20のECCフレーム120に配置されたクラスタ115を抽出して、コピー対象のクラスタ115のリストを作成する(ステップS21)。CPU12は、コピー対象のクラスタ115のリストの先頭にポインタを設定する(ステップS22)。ポインタが指しているクラスタ115が非圧縮クラスタである場合(ステップS23:Yes)、ポインタが指しているクラスタ115をコピー先のECCフレーム120へ配置する(ステップS24)。リストの最後まで到達していない場合(ステップS25:No)、次のクラスタ115へポインタを指して、ステップS23へ進む。
【0057】
ステップS25でリストの最後まで到達していた場合、CPU12は、コピー対象のクラスタのリストの先頭にポインタを設定する(ステップS26)。ポインタが指しているクラスタ115が圧縮クラスタである場合(ステップS27:Yes)、ポインタが指しているクラスタ115をコピー先のECCフレーム120へ配置する(ステップS28)。リストの最後まで到達していない場合(ステップS29:No)、次のクラスタ115へポインタを指して、ステップS27へ進む。リストの最後まで到達している場合(ステップS29:Yes)、処理を終了する。
【0058】
なお、上記の例では、コピー対象のクラスタ115が圧縮されたものであるか否かによりECCフレームを配置する箇所を変える場合について述べたが、この基準では、論理クラスタアドレスが隣接しているクラスタがNANDメモリ20の異なるページに配置してしまう可能性がある。そこで、
図7に示す処理手順の代わりに以下に記載の処理を実行してもよい。例えば、非圧縮のクラスタが連続して存在する場合には、連続している非圧縮のクラスタを先にコピー先のECCフレームにコピーして、その後に、残りのクラスタをコピー先のECCフレームへコピーするようにしてもよい。この基準は、論理クラスタアドレスが近いクラスタがなるべくNANDメモリ20の同一ページに配置されるようにすることを目的としている。例えば、圧縮クラスタが連続している中、途中に一つのみ非圧縮のクラスタがあるような場合に、ECCフレーム境界を跨ぐ頻度が減るメリットより、その非圧縮のクラスタのアクセスのためにNANDメモリ20の別ページへのアクセスが必要になるデメリットが大きくなることを避けることを目的とする。これにより、メモリコントローラ10は、非圧縮クラスタを上記圧縮クラスタと離れた領域に配置してしまい、読み出し処理負荷がかかってしまうことを回避することができる。
【0059】
また、論理クラスタアドレスが不連続となった場合に、CPU12は、論理クラスタアドレスが不連続となるクラスタ115を先にコピー先のECCフレームに配置して、それぞれアライメントするようにしてもよい。論理クラスタアドレスが不連続であるということは、ランダムで読み出す可能性が高い。逆に、論理クラスタアドレスが連続している書き込みの場合は、その後のこれらのクラスタに対するリードアクセスは、シーケンシャルである可能性が高いことから、ECCフレーム120へのアライメントをするメリットが低い。論理クラスタアドレスが不連続となった場合、CPU12がアライメントすることで、ランダムで読み出す可能性が高い場合にECCフレーム120を跨って読み出すことを回避させることができる。
【0060】
上述のように、メモリコントローラ10は、ガベージコレクション対象の領域におけるクラスタ115の配置アドレスをコピー先の領域の配置アドレスへ変換する。メモリコントローラ10は、ECCフレーム120に基づいてアライメントする変換処理と、配置アドレスの単位で変換する変換処理との何れかの変換処理により配置アドレス変換する。
【0061】
この場合、メモリコントローラ10は、圧縮処理した結果、圧縮されなかったクラスタ115をECCフレーム120に基づいてアライメントすることができ、クラスタ115がECCフレーム120を跨ぐことを減らすことができる。
【0062】
(第4の実施形態)
第4の実施形態にかかるメモリシステム1は、複数種類のECCフレーム120を用意しておき、クラスタ115の圧縮結果に応じて、ECCフレーム120を配置することで、クラスタ115がECCフレーム120を跨ぐクラスタ115を削減するものである。
【0063】
第4の実施形態にかかるECCフレーム120の配置方法について
図8を用いて説明する。第4の実施形態にかかるメモリシステム1では、配置前の圧縮処理後のクラスタ115a~クラスタ115gがあるものとする。これらのクラスタ115は、圧縮後のクラスタ115のサイズが元サイズの1/2
nになるように圧縮されたクラスタ115のデータに適宜空き領域を挿入して圧縮されたクラスタ115のサイズを量子化してもよい。
【0064】
具体的に、クラスタ115a、クラスタ115d、クラスタ115e、およびクラスタ115gは、1/4に圧縮したクラスタである。なお、クラスタ115a、クラスタ115d、クラスタ115e、およびクラスタ115gは、1/4より小さいサイズで圧縮して、空き領域を付加することで、1/4に圧縮したものでもよい。また、クラスタ115bおよびクラスタ115fは、1/2に圧縮したクラスタである。なお、クラスタ115b、およびクラスタ115fは、1/4より大きく、1/2より小さいサイズで圧縮して、空き領域を付加することで、1/2に圧縮したものでもよい。クラスタ115cは、非圧縮のクラスタである。
【0065】
CPU12は、クラスタ115a、クラスタ115d、クラスタ115e、およびクラスタ115gを、1/4サイズ用のECCフレーム120aに配置する。そして、CPU12は、クラスタ115bおよびクラスタ115fを1/2サイズ用のECCフレーム120bに配置する。そして、CPU12は、クラスタ115cを等サイズ用のECCフレーム120cに配置する。
【0066】
この場合、非圧縮クラスタだけでなく、圧縮クラスタに関しても、クラスタがECCフレーム120の境界を跨ぐことを抑制することができる。
【0067】
なお、メモリコントローラ10は、ガベージコレクション時に、コピー先の領域に、
図8に示したようなサイズ毎の領域を設定しておくようにしてもよい。この場合、メモリコントローラ10は、ガベージコレクション対象の領域における、圧縮処理を実行済のクラスタ115のコピー先の配置アドレスを変換する際に、圧縮処理後のクラスタ115のサイズに基づいて、配置アドレスを変換することができる。
【0068】
上述のように、メモリコントローラ10は、圧縮処理後のクラスタのデータサイズに基づいた領域を複数設定しておき、圧縮処理後のクラスタのデータサイズに基づいて配置アドレスを変換することで、クラスタがECCフレーム120を跨いでしまう可能性を低減することができる。
【0069】
上述の各実施形態にかかるメモリシステム1では、誤り訂正の処理単位であるECCフレームに基づいてアライメントを実行する場合について述べたが、これに限られない。例えば、物理素子から読み込んだデータをメモリコントローラ10にてキャッシュする機能がある場合、キャッシュの各ライン(エントリ)は固定サイズでアライメントされ、一つの圧縮後クラスタがキャッシュの複数ラインを跨ぐ可能性がある。よって、メモリコントローラ10は、ECCフレームに替えて、当該ラインに基づいてアライメントするようにしてもよい。
【0070】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0071】
1 メモリシステム、2 ホスト、10 メモリコントローラ、11 ホストI/F、12 CPU、13 ECC部、14 圧縮・伸長部、15 NANDI/F、16 DRAMI/F、20 NANDメモリ、30 DRAM。