(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024132281
(43)【公開日】2024-09-30
(54)【発明の名称】メモリシステム及び方法
(51)【国際特許分類】
G06F 12/04 20060101AFI20240920BHJP
G06F 12/00 20060101ALI20240920BHJP
【FI】
G06F12/04 530
G06F12/00 597U
【審査請求】未請求
【請求項の数】21
【出願形態】OL
(21)【出願番号】P 2023043008
(22)【出願日】2023-03-17
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】及川 恒平
(72)【発明者】
【氏名】深澤 洋平
(72)【発明者】
【氏名】中西 圭里
(72)【発明者】
【氏名】小玉 翔
(72)【発明者】
【氏名】竹本 卓
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA08
5B160AA10
5B160AA20
5B160AB26
5B160DA08
(57)【要約】
【課題】データを高い圧縮率で圧縮するメモリシステム及び方法を提供すること。
【解決手段】実施形態に係るメモリシステムは、複数のスーパーブロックで構成されるメモリと、コントローラを具備する。スーパーブロックは、複数のスーパーブロックアドレス範囲で構成される。コントローラは、スーパーブロックアドレス範囲に対応するエントリを持つパラメータテーブルを備え、データの論理アドレスをスーパーブロックアドレスに変換し、スーパーブロックアドレス範囲に書き込まれるデータに基づいて複数のデータ夫々に対応する圧縮パラメータを生成し、圧縮パラメータをパラメータテーブルに書き込み、第1スーパーブロックアドレス範囲に書き込まれる第1データを第1圧縮パラメータを使用して圧縮する。第1圧縮パラメータは、第1データの以前に書き込まれた第2データに基づいて生成された圧縮パラメータを含む。
【選択図】
図4
【特許請求の範囲】
【請求項1】
複数のブロックを備える第1メモリと、
データを圧縮して、前記第1メモリに前記圧縮されたデータを保存するコントローラと、を具備し、
複数のスーパーブロックの各々は並列動作可能な複数のブロックに対応し、
前記複数のスーパーブロック夫々は、複数のスーパーブロックアドレス範囲を有し、
前記コントローラは、前複数のスーパーブロックの前記複数のスーパーブロックアドレス範囲夫々に対応する複数のエントリを持つパラメータテーブルを備え、
前記コントローラは、
前記第1メモリに書き込むデータの論理アドレスをスーパーブロックアドレスに変換し、
前記複数のスーパーブロック夫々の前記複数のスーパーブロックアドレス範囲夫々に書き込まれる複数のデータ夫々に基づいて、前記複数のデータ夫々に対応する複数の圧縮パラメータを生成し、
前記複数の圧縮パラメータを前記パラメータテーブルに書き込み、
書き込み先が第1スーパーブロックの第1スーパーブロックアドレス範囲に含まれる第1データを第1圧縮パラメータを使用して圧縮し、
前記第1圧縮パラメータは、前記第1データの前記第1メモリへの書き込み前に前記第1メモリに書き込まれた第2データに基づいて生成された圧縮パラメータを含む、メモリシステム。
【請求項2】
前記第1圧縮パラメータは、前記第2データに基づいて生成された圧縮パラメータのみからなる、請求項1記載のメモリシステム。
【請求項3】
前記第1圧縮パラメータは、前記第1データに基づいて生成された圧縮パラメータをさらに含む、請求項1記載のメモリシステム。
【請求項4】
前記パラメータテーブルは、第1エントリと第2エントリを含む複数のエントリを持ち、
前記コントローラは、前記第1エントリと前記第2エントリに書き込まれた圧縮パラメータを使用して前記第1データを圧縮する、請求項1記載のメモリシステム。
【請求項5】
前記コントローラは、
前記第2データが前記第1メモリに書き込まれる以前に前記第1メモリに書き込まれたデータに基づいて生成された圧縮パラメータを前記第2エントリに書き込み、
前記第2データに基づいて生成された圧縮パラメータを前記第1エントリに書き込む、請求項4記載のメモリシステム。
【請求項6】
前記コントローラは、
前記第2データに基づいて生成された圧縮パラメータを前記第2エントリに書き込み、
前記第1データに基づいて生成された圧縮パラメータを前記第1エントリに書き込む、
請求項4記載のメモリシステム。
【請求項7】
前記コントローラは、前記第1スーパーブロックのうち最初にデータが書き込まれるスーパーブロックアドレス範囲に対応する圧縮パラメータとして、前記第1スーパーブロックへの前記データの書き込み前に第2スーパーブロックに書き込まれたデータに基づいて生成された圧縮パラメータ、又は既定の圧縮パラメータを使用する、請求項1記載のメモリシステム。
【請求項8】
前記パラメータテーブルは、前記第2スーパーブロックに書き込まれたデータに基づいて生成された前記圧縮パラメータ、又は前記既定の圧縮パラメータが書き込まれるエントリをさらに持つ、請求項7記載のメモリシステム。
【請求項9】
前記第1圧縮パラメータは、前記第1スーパーブロックに書き込まれた全てのデータに基づいて生成された全ての圧縮パラメータを含む、請求項1記載のメモリシステム。
【請求項10】
前記第1圧縮パラメータは、前記第1データの前記第1メモリへの書き込み前に前記第1メモリに書き込まれた所定数の第2データに基づいて生成された所定数の圧縮パラメータを含む、請求項1記載のメモリシステム。
【請求項11】
前記コントローラは、前記複数のスーパーブロックアドレス範囲夫々に対応する複数の圧縮パラメータを前記パラメータテーブルの複数のエントリ夫々に書き込む、請求項1記載のメモリシステム。
【請求項12】
前記コントローラは、前記複数のスーパーブロックアドレス範囲夫々に対応する複数の圧縮パラメータを前記パラメータテーブルの複数のエントリの中の数エントリ夫々に書き込む、請求項1記載のメモリシステム。
【請求項13】
前記第1圧縮パラメータは、前記第1データの前記メモリシステムへの入力前に前記メモリシステムに入力された第3データに基づいて生成された圧縮パラメータを含む、請求項1記載のメモリシステム。
【請求項14】
ホストから送信されたデータを前記第1メモリに書き込む場合、前記第1圧縮パラメータは、前記ホストから送信されたデータに基づいて生成された圧縮パラメータを含まず、
ガベージコレクションによりデータを前記第1メモリに書き込む場合、前記第1圧縮パラメータは、ガベージコレクションにより前記第1メモリに書き込むデータに基づいて生成された圧縮パラメータを含む、請求項1記載のメモリシステム。
【請求項15】
データを一時的に保持する第2メモリをさらに備え、
前記コントローラは、前記第1メモリから前記第2メモリに前記第1データを転送する時、前記第1圧縮パラメータを生成し、
前記第2メモリから前記第1メモリに前記第1データを転送する時、前記第1データを前記第1圧縮パラメータを使用して圧縮する、請求項1記載のメモリシステム。
【請求項16】
前記圧縮パラメータは、前記第1メモリのアクセスパターンがシーケンシャルアクセスパターンであるかランダムアクセスパターンであるかを示すサブパラメータを含む、請求項1記載のメモリシステム。
【請求項17】
前記サブパラメータは、前記第1メモリに前記圧縮されたデータが書き込まれる期間の前記圧縮されたデータの論理アドレスの頻度情報を含む、請求項16記載のメモリシステム。
【請求項18】
前記コントローラは、前記パラメータテーブルに記憶されている複数の圧縮パラメータの中で前記第1データのアクセスパターンと最も近いアクセスパターンを有する圧縮パラメータを使用して前記第1データを圧縮する、請求項1記載のメモリシステム。
【請求項19】
前記コントローラは、前記パラメータテーブルに記憶されている複数の圧縮パラメータの中で最も数が多いサブパラメータを持つ圧縮パラメータを使用して前記第1データを圧縮する、請求項1記載のメモリシステム。
【請求項20】
前記複数の圧縮パラメータの夫々は、辞書式圧縮に使用される初期辞書、又はエントロピー符号化に使用される頻度情報を含む、請求項1乃至請求項19のいずれか一項記載のメモリシステム。
【請求項21】
複数のブロックを備えるメモリへ保存するデータを圧縮する方法であって、前記方法は、
複数のスーパーブロックの各々を並列動作可能な複数のブロックに対応させ、
前記複数のスーパーブロックの各々に、複数のスーパーブロックアドレス範囲を対応させ、
前複数のスーパーブロックの前記複数のスーパーブロックアドレス範囲夫々に対応する複数のエントリを持つパラメータテーブルを管理し、
前記メモリに書き込むデータの論理アドレスをスーパーブロックアドレスに変換し、
前記複数のスーパーブロック夫々の前記複数のスーパーブロックアドレス範囲夫々に書き込まれる複数のデータ夫々に基づいて、前記複数のデータ夫々に対応する複数の圧縮パラメータを生成し、
前記複数の圧縮パラメータを前記パラメータテーブルに書き込み、
書き込み先が第1スーパーブロックアドレス範囲に含まれる第1データを第1圧縮パラメータを使用して圧縮する、
ことを備え、
前記第1圧縮パラメータは、前記第1データの前記メモリへの書き込み前に前記メモリに書き込まれた第2データに基づいて生成された圧縮パラメータを含む、方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリシステム及び方法に関する。
【背景技術】
【0002】
圧縮機能を備え、入力データを圧縮し、圧縮データを記憶するメモリシステムが開発されている。データ圧縮において、圧縮するデータのサイズが小さいと、圧縮しづらく、圧縮率は低い。例えば、不揮発性メモリを用いるソリッドステートドライブ(Solid State Drive、以下SSDと称される)のアクセス粒度は、4KB,512B等である。メインメモリ、Compute Express Link(CXL)メモリ等のアクセス粒度は、64B以下である。これらのアクセス粒度は、圧縮機能が扱うデータの単位としては小さい。このような小さい単位のデータを扱うメモリシステムでは、圧縮率は低い。このため、アクセス粒度が小さいメモリシステムでは、データを高い圧縮率で圧縮することは困難である。
【0003】
圧縮機能は、圧縮パラメータを使用して入力データを圧縮する。圧縮するデータ夫々に対して個別に求められた圧縮パラメータを使用すると、アクセス粒度が小さいメモリシステムでも、データを高い圧縮率で圧縮することができる。
【0004】
圧縮パラメータの一例は、辞書式圧縮における初期辞書である。辞書式圧縮器は、過去に出現したデータ(例えば文字列)と一致する文字列を圧縮する場合、圧縮する文字列を過去の文字列に一致したことを示すシンボルに置き換える。さらに、辞書式圧縮器は、出現が期待される文字列の集合を予め準備してからデータを圧縮する。
【0005】
初期辞書の適用例として、圧縮するデータを扱うアプリケーションに合わせた初期辞書を持つ例が挙げられる。
【0006】
また、別の適用例として、圧縮するデータを一度解析し、解析結果に基づいて初期辞書を生成してから、データを圧縮する例が挙げられる。
【0007】
前者は、汎用的なデータを扱うメモリシステムには適用しづらい、後者は、データに2回アクセスする分、スループットが低下しやすいという特徴がある。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2016‐52046号公報
【特許文献2】特許第6614735号公報
【特許文献3】米国特許第9048862号明細書
【発明の概要】
【発明が解決しようとする課題】
【0009】
本発明の目的は、データを高い圧縮率で圧縮するメモリシステム及び方法を提供することである。
【課題を解決するための手段】
【0010】
実施形態に係るメモリシステムは、メモリと、コントローラと、を具備する。メモリは、複数のスーパーブロックで構成される。複数のスーパーブロック夫々は、複数のスーパーブロックアドレス範囲で構成される。コントローラは、複数のスーパーブロックの複数のスーパーブロックアドレス範囲夫々に対応する複数のエントリを持つパラメータテーブルを備え、メモリに書き込むデータの論理アドレスをスーパーブロックアドレスに変換し、複数のスーパーブロック夫々の複数のスーパーブロックアドレス範囲夫々に書き込まれる複数のデータ夫々に基づいて、複数のデータ夫々に対応する複数の圧縮パラメータを生成し、複数の圧縮パラメータをパラメータテーブルに書き込み、書き込み先が第1スーパーブロックアドレス範囲に含まれる第1データを第1圧縮パラメータを使用して圧縮する。第1圧縮パラメータは、第1データが第1メモリに書き込まれる以前に第1メモリに書き込まれた第2データに基づいて生成された圧縮パラメータを含む。
【図面の簡単な説明】
【0011】
【
図1】第1実施形態に係るメモリシステムの一例を含む情報処理システムを説明するためのブロック図。
【
図2】第1実施形態に係るメモリシステムにおいて使用される、複数のチャンネルと複数のNAND型フラッシュメモリダイとの関係の例を示すブロック図。
【
図3】第1実施形態に係るアドレス変換の一例を説明するための図。
【
図4】第1実施形態に係る圧縮処理の一例を説明するための図。
【
図5】第1実施形態に係る圧縮処理の一例を説明するためのフローチャート。
【
図6】第2実施形態に係る圧縮処理の一例を説明するための図。
【
図7】第2実施形態に係る圧縮処理の一例を説明するためのフローチャート。
【
図8】第2実施形態の変形例に係る圧縮処理の一例を説明するための図。
【
図9】第3実施形態に係る圧縮処理の一例を説明するための図。
【
図10】第3実施形態に係る圧縮処理の一例を説明するためのフローチャート。
【
図11】第4実施形態に係る圧縮処理の一例を説明するための図。
【
図13】第5実施形態に係る圧縮パラメータの計算例を説明するための図。
【発明を実施するための形態】
【0012】
以下、図面を参照して、実施形態を説明する。以下の説明は、実施形態の技術的思想を具体化するための装置や方法を例示するものであって、実施形態の技術的思想は、以下に説明する構成要素の構造、形状、配置、材質等に限定されるものではない。当業者が容易に想到し得る変形は、当然に開示の範囲に含まれる。説明をより明確にするため、図面において、各要素のサイズ、厚み、平面寸法又は形状等を実際の実施態様に対して変更して模式的に表す場合もある。複数の図面において、互いの寸法の関係や比率が異なる要素が含まれることもある。複数の図面において、対応する要素には同じ参照数字を付して重複する説明を省略する場合もある。いくつかの要素に複数の呼称を付す場合があるが、これら呼称の例はあくまで例示であり、これらの要素に他の呼称を付すことを否定するものではない。また、複数の呼称が付されていない要素についても、他の呼称を付すことを否定するものではない。なお、以下の説明において、「接続」は直接接続のみならず、他の要素を介した接続も含む場合もある。
【0013】
第1実施形態
図1は、第1実施形態に係るメモリシステムの一例を含む情報処理システム1を説明するためのブロック図である。メモリシステムの例は、SSD、ハードディスク装置、磁気テープ等がある。第1実施形態では、メモリシステムは、SSD20として実現されている。情報処理システム1は、ホストデバイス(以下、ホストと称される)10と、SSD20とを含む。
【0014】
ホスト10は、SSD20の動作を制御する情報処理装置である。情報処理装置の例は、パーソナルコンピュータ、サーバコンピュータ、他の様々なコンピューティングデバイスである。ホスト10は、データを書き込むためのライト要求をSSD20に送信する。ホスト10は、データを読み出すためのリード要求をSSD20に送信する。
【0015】
ホスト10は、プロセッサ12、メモリ14を含む。プロセッサ12は、ホスト10内の図示しないコンポーネントの動作を制御するように構成されたCPU(Central Processing Unit)である。プロセッサ12は、SSD20、またはホスト10内の他のストレージデバイスからメモリ14にロードされるソフトウェア(ホストソフトウェア)を実行する。ホストソフトウェアには、オペレーティングシステム、ファイルシステム、デバイスドライバ、アプリケーションプログラム等が含まれる。
【0016】
メモリ14は、ホスト10に設けられたメインメモリである。メモリ14は、揮発性の半導体メモリである。揮発性の半導体メモリの記憶データは、電力の供給が停止されると、失われる。メモリ14は、例えば、DRAM(Dynamic Random Access Memory)のようなランダムアクセスメモリによって実現される。
【0017】
SSD20は、ホスト10から送信されたライト要求およびリード要求を受信し、受信したライト要求およびリード要求に基づいて、不揮発性メモリに対するデータ書き込み動作およびデータ読み出し動作を実行するように構成された半導体ストレージデバイスである。不揮発性メモリは、記憶しているデータを電源の供給が停止された後も保持可能な半導体メモリデバイスである。不揮発性メモリの一例は、NAND型フラッシュメモリ、磁気抵抗RAM、抵抗変化型メモリ、強誘電体メモリ、相変化メモリ等がある。第1実施形態では、不揮発性メモリは、NAND型フラッシュメモリによって実現される。
【0018】
SSD20は、ホスト10に接続可能である。SSD20は、例えば、情報処理装置に内蔵される。SSD20は、情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【0019】
ホスト10とSSD20とを接続するための論理インタフェースの規格としては、例えば、Serial Attached SCSI(SAS)、Serial ATA(SATA)、NVM ExpressTM(NVMeTM規格)が使用され得る。
【0020】
SSD20は、コントローラ22と、不揮発性メモリ(例えば、NAND型フラッシュメモリ)24とを備える。SSD20は、ランダムアクセスメモリ、例えば、DRAM26を備えていてもよい。
【0021】
コントローラ22は、NAND型フラッシュメモリ24を制御するように構成されたメモリコントローラである。コントローラ22は、System-on-a-Chip(SoC)のような回路によって実現されてもよい。コントローラ22は、チャンネルChと称されるメモリバスを介してNAND型フラッシュメモリ24に電気的に接続されている。
【0022】
NAND型フラッシュメモリ24は、メモリセルアレイを含む。メモリセルアレイは、マトリクス状に配置された複数のメモリセルを含む。NAND型フラッシュメモリ24内のメモリセルアレイは、複数のブロック(ここでは、ブロックBLK0~BLKx-1)を含む。ブロックBLK0~BLKx-1夫々は、データを消去するデータ消去動作の単位である。ブロックBLK0~BLKx-1夫々は、物理ブロック、またはフラッシュブロックとも称される。
【0023】
ブロックBLK0~BLKx-1夫々は、複数のページ(ここではページP0~Py-1)を含む。各ページは、同一ワード線に接続された複数のメモリセルを含む。ページP0~Py-1夫々は、データ書き込み動作およびデータ読み出し動作の単位である。
【0024】
NAND型フラッシュメモリ24は、複数のNAND型フラッシュメモリダイ(又は、NAND型フラッシュメモリチップ)を含んでいてもよい。各NAND型フラッシュメモリダイは、二次元構造のフラッシュメモリであってもよいし、三次元構造のフラッシュメモリであってもよい。
【0025】
DRAM26は、例えば、NAND型フラッシュメモリ24に書き込むべきデータを一時的に格納するために使用される。DRAM26の記憶領域は、コントローラ22によって使用される様々な管理データを格納するために使用される。DRAM26の記憶領域の一部は、ホスト10から受信される1以上のライト要求に関連付けられたライトデータを一時的に格納するためのライトバッファ62として利用される。DRAM26の記憶領域の他の一部は、アドレス変換テーブル64、バリッドセクタマップ66、フリーブロックリスト68、アクティブブロックリスト70、及び圧縮パラメータテーブル72を格納するための記憶領域として利用される。
【0026】
アドレス変換テーブル64、バリッドセクタマップ66、フリーブロックリスト68、アクティブブロックリスト70、及び圧縮パラメータテーブル72は、SSD20への電源が断たれることに応答してDRAM26からNAND型フラッシュメモリ24にロードされてもよい。アドレス変換テーブル64、バリッドセクタマップ66、フリーブロックリスト68、アクティブブロックリスト70、及び圧縮パラメータテーブル72は、SSD20への電源の供給に応答してNAND型フラッシュメモリ24からDRAM26にロードされてもよい。
【0027】
次に、コントローラ22の詳細な構成について説明する。
【0028】
コントローラ22は、ホストインタフェース(I/F)回路32と、CPU34と、NANDインタフェース(I/F)回路36と、DRAMインタフェース(I/F)回路38と、直接メモリアクセスコントローラ(DMAC)42と、スタティックRAM(SRAM)44と、圧縮/伸張部46と、誤り訂正符号化/復号部(ECC部)50を含む。
【0029】
ホストI/F回路32と、CPU34と、NAND I/F回路36と、DRAM I/F回路38と、DMAC42と、SRAM44と、圧縮/伸張部46と、ECC部50は、バス48を介して相互接続される。
【0030】
ホストI/F回路32は、ホスト10との通信を実行するように構成される。ホストI/F回路32は、ホスト10から様々な要求を受信する。これら要求には、ライト要求、リード要求等が含まれる。ライト要求やリード要求では、論理アドレスが指定される。論理アドレスは、SSD20へアクセスするためにホスト10によって使用されるアドレスである。論理アドレスとしては、例えば、LBAが使用される。
【0031】
ライト要求は、書き込むべきデータ(ライトデータ)をNAND型フラッシュメモリ24に書き込むための要求である。ライト要求は、例えば、ライトデータの最初のセクタを示す論理アドレス(開始論理アドレス:開始LBA)と、このライトデータのデータサイズと、このライトデータが格納されているホスト10のメモリ14内のデータの記憶位置を示すデータポインタ(バッファアドレス)とを含む。
【0032】
ライトデータのデータサイズは、例えば、セクタの数によって指定されもよい。一つのセクタは、ホスト10によって指定可能なライトデータの最小データサイズに対応する。このため、ライトデータのデータサイズはセクタの倍数によって表される。
【0033】
本実施形態では、ホスト10からのライト要求に従ってNAND型フラッシュメモリ24に書き込まれるライトデータは、ユーザデータとしても参照される。
【0034】
リード要求は、SSD20からデータを読み出す要求である。リード要求は、データ(読み出し対象データ)の最初のセクタを示す論理アドレス(開始LBA)と、読み出し対象データのデータサイズと、この読み出し対象データが転送されるべきホスト10のメモリ14内のデータの記憶位置を示すデータポインタ(バッファアドレス)とを含む。
【0035】
CPU34は、ホストI/F回路32、NAND I/F回路36、DRAM I/F回路38、DMAC42、SRAM44、及び圧縮/伸張部46を制御するように構成されたプロセッサである。
【0036】
CPU34は、SSD20への電源の供給に応じて、NAND型フラッシュメモリ24または図示しないROMから制御プログラム(ファームウェア)をDRAM26にロードする。CPU34は、このファームウェアを実行することにより、NAND型フラッシュメモリ24のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。FTLによって実行されるデータ管理には、(1)論理アドレス夫々とNAND型フラッシュメモリ24の物理アドレス夫々との間の対応関係を示すマッピング情報の管理、(2)NAND型フラッシュメモリ24の制約(例えば、ページ単位のリード/ライト動作とブロック単位の消去動作)を隠蔽するための処理、等が含まれる。
【0037】
CPU34は、アドレス変換テーブル64を使用して、論理アドレス夫々と物理アドレス夫々との間のマッピングを管理する。ある論理アドレスに対応する物理アドレスは、この論理アドレスに対応するデータが書き込まれたNAND型フラッシュメモリ24内の記憶位置(物理記憶位置)を示す。
【0038】
FTLによって実行されるデータ管理には、有効データおよび無効データの管理も含まれる。CPU34は、NAND型フラッシュメモリ24内の複数のブロック夫々に含まれる複数の記憶位置夫々に対応する複数の有効データ識別子を、管理テーブルを使用してブロック毎に管理する。
【0039】
複数の有効データ識別子夫々は、対応する記憶位置に格納されているデータの有効または無効を示す。各ブロックに対応する複数の有効データ識別子は、バリッドセクタマップ66として参照される。一つのブロックに対応するバリッドセクタマップ66は、一つのブロックに含まれる複数の記憶位置(セクタ)の数と同数の有効データ識別子を含む。一つのバリッドセクタマップ66に対応するブロックは、例えば、物理ブロックである。あるいは、一つのバリッドセクタマップ66に対応するブロックは、
図3を参照して後述するブロックグループ(スーパーブロック)であってもよい。
【0040】
各有効データ識別子は、1ビットのフラグによって表される。このため、バリッドセクタマップ66は、ビットマップデータとしても参照される。また、各有効データ識別子は、ビットマップフラグとしても参照される。
【0041】
有効データは、ある論理アドレスに関連付けられた最新のデータである。ある論理アドレスに対応するデータがNAND型フラッシュメモリ24に書き込まれた場合、NAND型フラッシュメモリ24に書き込まれたデータは有効データである。
【0042】
また、ある論理アドレスに対応する更新データがNAND型フラッシュメモリ24に書き込まれた場合、書き込まれたデータは有効データである。NAND型フラッシュメモリ24内に残っている古いデータは、無効データとして扱われる。また、ホスト10からの無効化要求によって指定された論理アドレスに対応するデータも無効データとして扱われる。
【0043】
FTLによって実行されるブロック管理は、バッドブロック(不良ブロック)の管理と、ウェアレベリングと、ガベージコレクション(コンパクションとも称される)を含む。
【0044】
ウェアレベリングは、ブロック夫々の書き換え回数(プログラム/イレーズサイクルの数)を均一化するための動作である。
【0045】
ガベージコレクションは、有効データと無効データとが混在するブロックの個数を減らし且つフリーブロックの個数を増やすための動作である。ガベージコレクションにおいては、CPU34は、有効データと無効データとが混在するブロックからコピー元ブロックを選択し、コピー元ブロック内に格納されている有効データをコピー先ブロックにコピーする。コピー元ブロック内の全ての有効データのコピーが完了すると、コピー元ブロックは、有効データを含まないフリーブロックとして解放され、データの書き込みに再利用可能となる。
【0046】
FTLによって実行されるブロック管理には、フリーブロックとアクティブブロックの管理も含まれる。アクティブブロックは、有効データが格納されているブロックである。CPU34は、フリーブロックリスト68を使用して、各フリーブロックを管理する。また、CPU34は、各アクティブブロックリスト70を使用して、各アクティブブロックを管理する。
【0047】
NAND I/F回路36は、CPU34の制御の下、NAND型フラッシュメモリ24を制御するように構成されたメモリ制御回路である。NAND I/F回路36とNAND型フラッシュメモリ24との間の通信は、例えば、Toggle NANDフラッシュインタフェースまたはオープンNANDフラッシュインタフェース(ONFI)に準拠して実行される。
【0048】
DRAM I/F回路38は、CPU34の制御の下、DRAM26を制御するように構成されたDRAM制御回路である。
【0049】
DMAC42は、CPU34の制御の下、ホスト10のメモリ14とDRAM26(またはSRAM44)との間のデータ転送を実行する。ホスト10のメモリ14からライトバッファ62にライトデータを転送すべき場合には、CPU34は、ホスト10のメモリ14内の位置を示す転送元アドレス、転送すべきライトデータのサイズ、ライトバッファ62内の位置を示す転送先アドレスをDMAC42に対して指定する。
【0050】
ライト処理の際、圧縮/伸張部46は、ホスト10から送信された非圧縮データを、圧縮パラメータテーブル72により管理されている圧縮パラメータを使用して圧縮し、圧縮データを生成する。ECC部50は、圧縮データに誤り訂正符号を付加し、符号化データを生成する。符号化データがNAND型フラッシュメモリ24に書き込まれる。
【0051】
リード処理の際、NAND型フラッシュメモリ24から符号化データが読み出される。ECC部50は、符号化データに付加されている誤り訂正符号を使用して、符号化データの誤り訂正を行う。圧縮/伸張部46は、誤り訂正後の符号化データを、圧縮パラメータテーブル72により管理されている圧縮パラメータを使用して、伸張し、非圧縮データを生成する。非圧縮データがホスト10へ送信される。
【0052】
圧縮/伸張部46の一部または全部は、ソフトウェアによって実現されてもよい。ECC部50の一部または全部は、ソフトウェアによって実現されてもよい。
【0053】
CPU34は、ライト制御部52、リード制御部54、及びガベージコレクション制御部(GC制御部)56として機能することができる。
【0054】
ライト制御部52、リード制御部54、及びGC制御部56の一部または全部は、コントローラ22内の専用ハードウェアによって実現されてもよい。
【0055】
ホスト10からのライト要求の受信に応じて、ライト制御部52は、受信したライト要求に関連付けられたデータ(ライトデータ)を、書き込み先ブロックに書き込む。書き込み先ブロックは、ホスト10からのデータの書き込みに使用されるブロックとして割り当てられたブロックを意味する。ライト制御部52は、ライトデータのみならず、このライトデータと、ライト要求によって指定されたLBAの双方を、書き込み先ブロックに書き込むことができる。
【0056】
また、ライト制御部52は、ライトデータが書き込まれた書き込み先ブロック内の記憶位置を示す物理アドレスが、ライト要求によって指定されたLBAに関連付けられるように、アドレス変換テーブル64を更新する。さらに、ライト制御部52は、ライトデータが書き込まれた書き込み先ブロック内の記憶位置に対応するバリッドセクタマップ66内の有効データ識別子を、有効を示す値に更新する。
【0057】
ホスト10からのリード要求の受信に応じて、リード制御部54は、アドレス変換テーブル64を参照することによって、リード要求によって指定されたLBAに関連付けられている物理アドレスをアドレス変換テーブル64から取得する。そして、取得した物理アドレスに基づいて、リード制御部54は、この物理アドレスによって特定されるブロック内の記憶位置から、データとこのデータに対応するLBAとの双方を読み出す。データと共に読み出されたLBAは、読み出されたデータがリード要求によって指定されたLBAに対応するデータであることを検証するために使用される。
【0058】
NAND型フラッシュメモリ24のガベージコレクションを実行する場合、GC制御部56は、ガベージコレクションのための1つ以上のコピー元ブロック(GCソースブロック)をNAND型フラッシュメモリ24の複数のブロックから選択する。コピー元ブロックの選択においては、例えば、有効データ量が最も少ないアクティブブロックをコピー元ブロックとして優先的に選択するというGCポリシーが使用されてもよいし、別のGCポリシーが使用されてもよい。コピー元ブロックは、ガベージコレクション動作が施されるGC対象ブロックである。
【0059】
GC制御部56は、選択したコピー元ブロック内の複数の記憶位置夫々に対応するバリッドセクタマップ66内の複数の有効データ識別子に基づいて、選択したコピー元ブロック内の有効データを特定する。そして、GC制御部56は、有効データとこの有効データに対応するLBAとの双方を、コピー元ブロックからガベージコレクション動作のためのコピー先ブロック(GCデスティネーションブロック)にコピーする。
【0060】
GC制御部56は、有効データがコピーされたコピー先ブロック内のコピー先記憶位置を示す物理アドレスが、コピーされた有効データに対応するLBAに関連付けられるように、アドレス変換テーブル64を更新する。
【0061】
コピー元ブロックには有効データとLBAとのペアが格納されている。このため、GC制御部56は、この有効データに対応するLBAを容易に特定できる。この結果、GC制御部56は、この有効データがコピーされたコピー先ブロック内のコピー先記憶位置を示す物理アドレスを、この有効データに対応するLBAに容易に関連付けることができる。
【0062】
さらに、GC制御部56は、有効データが格納されていたコピー元ブロック内のコピー元記憶位置に対応するバリッドセクタマップ66内の有効データ識別子を、無効を示す値に更新する。また、GC制御部56は、コピー先ブロック内のコピー先記憶位置に対応するバリッドセクタマップ66内の有効データ識別子を、有効を示す値に更新する。
【0063】
コピー元ブロック内の全ての有効データと全ての有効データ夫々に対応する全てのLBAとのコピーが完了した後に、コピー元ブロックは、データの書き込みのために再利用可能となる。つまり、あるブロックに対してガベージコレクション動作が施されると、このブロックはフリーブロックとなる。よって、ガベージコレクション動作が施されたブロックは書き込み先ブロックとして再利用される。
【0064】
次に、複数のNAND型フラッシュメモリダイを含むNAND型フラッシュメモリ24の構成について説明する。
図2は、第1実施形態に係るメモリシステムにおいて使用される、複数のチャンネルと複数のNAND型フラッシュメモリダイとの関係の例を示すブロック図である。
【0065】
複数のNAND型フラッシュメモリダイ夫々は独立して動作可能である。このため、NAND型フラッシュメモリダイは、並列動作可能な単位として扱われる。
図2においては、NAND I/F回路36に16個のチャンネルCh.0~Ch.15が接続されており、16個のチャンネルCh.0~Ch.15夫々に2つのNAND型フラッシュメモリダイが接続されている場合が例示されている。
【0066】
この場合、チャンネルCh.0~Ch.15に接続された16個のNAND型フラッシュメモリダイ#0~#15がバンク#0として構成されてもよく、またチャンネルCh.0~Ch.15に接続された残りの16個のNAND型フラッシュメモリダイ#16~#31がバンク#1として構成されてもよい。バンクは、複数のメモリダイをバンクインタリーブによって並列動作させるための単位として扱われる。
図2の構成例においては、16チャンネルと、2つのバンクを使用したバンクインタリーブとによって、最大32個のNAND型フラッシュメモリダイを並列動作させることができる。
【0067】
消去動作は、一つのブロックBLKの単位で実行されてもよいし、並列動作可能な複数のブロックBLKの集合を含むブロックグループの単位で実行されてもよい。ブロックグループはスーパーブロックとしても参照される。
【0068】
一つのブロックグループ、つまり複数のブロックBLKの集合を含む一つのスーパーブロックの構成は、これに限定されないが、NAND型フラッシュメモリダイ#0~#31から一つずつ選択される計32個のブロックBLKを含んでいてもよい。
【0069】
図3は、第1実施形態に係るアドレス変換の一例を説明するための図である。
図3では、説明の簡単化のため、NAND型フラッシュメモリ24は、4つのメモリダイ#0‐#3を有する。NAND型フラッシュメモリ24に含まれるブロックBLKは、複数のスーパーブロックSB0、SB1、…のいずれかに属する。1個のスーパーブロック(例えば、SB0)は、4つのメモリダイ#0‐#3のブロックBLK0に対応する。ブロックのアドレス(物理アドレス)は、SBアドレスとメモリダイの識別情報を含む。
【0070】
ホスト10が扱う論理アドレスは、アドレス変換テーブル64に含まれる第1変換テーブルによりスーパーブロックアドレス(SBアドレス)に変換される。さらに、SBアドレスは、NAND型フラッシュメモリ24の物理アドレスに変換される。SBアドレスは、SSD20によって一意に決まっている物理アドレスに変換されてもよい。あるいは、SBアドレスは、アドレス変換テーブル64に含まれる第1変換テーブルとは別の第2変換テーブルにより物理アドレスに変換されてもよい。
【0071】
スーパーブロックのアドレス空間(SBアドレス空間)は、複数のスーパーブロックSB0、SB1、…で区切られている。スーパーブロックは、ブロックBLKと同様に、複数のページを含む。スーパーブロックでは、ブロックBLKと同様に、データは連続する複数のページに連続的に書き込まれる必要がある。スーパーブロックは、データがブロック単位で消去される点は、ブロックBLKと同じである。スーパーブロックでは、ページ内の物理的な記憶位置(物理的な記憶位置は、以下、単に記憶位置と称される)は抽象化されている。
【0072】
図4は、第1実施形態に係る圧縮/伸張部46の圧縮処理の一例を説明するための図である。
図4は、DRAM26に記憶される圧縮パラメータテーブル72と、NAND型フラッシュメモリ24の1つのスーパーブロックSBiのSBアドレス空間に記憶される圧縮データとの対応関係を示す。iは、0以上の整数である。以降では説明の分かり易さのため具体的な数値を使って説明するが、これらの数値に限定されるものではない。
【0073】
圧縮パラメータテーブル72は、スーパーブロックSB毎に形成される。スーパーブロックSBのデータサイズは、16メガバイト(16MB)である。スーパーブロックSBの記憶位置範囲は、8個のスーパーブロックアドレス範囲(SBアドレス範囲)#0‐#7により指定される。1個のSBアドレス範囲に記憶されるデータサイズは、2メガバイト(2MB)である。
【0074】
圧縮パラメータテーブル72iは、スーパーブロックSBiの8個のSBアドレス範囲#0-#7夫々に対応する8個のエントリ#0-#7を含む。SBアドレス範囲#0-#7夫々に対応する圧縮パラメータPA0-PA7が圧縮パラメータテーブル72iのエントリ#0-#7夫々に記憶されている。例えば、エントリ#0はSBアドレス範囲#0に記憶されるデータを圧縮するために用いられる圧縮パラメータPA0を記憶する。圧縮パラメータのデータサイズは、256バイト(256B)である。圧縮パラメータの例は、辞書式圧縮の初期辞書である。
【0075】
SSD20は、ホスト10からのデータを圧縮し、一定サイズ、例えば1キロバイト(1KB)単位の圧縮データ(単位データと称される)を生成する。データの圧縮率は一定ではない。SSD20は、圧縮後のデータサイズが1KB以下になる条件で、各256Bの複数個の非圧縮データをなるべく多くまとめて圧縮し、1個の圧縮データを生成する。1個のSBアドレス範囲は、複数の単位データの記憶位置を含む。1個の単位データは1KBである。SSD20は、図中の破線で示す順序で単位データをNAND型フラッシュメモリ24に書き込む。具体的には、SSD20は、スーパーブロックSBiの最初のSBアドレス範囲#0の最初の記憶位置、2番目の記憶位置、…に単位データを書き込む。SSD20は、スーパーブロックSBiの最初のSBアドレス範囲#0の最後の記憶位置まで単位データを書き込むと、2番目のSBアドレス範囲#1の最初の記憶位置、2番目の記憶位置、…に単位データを書き込む。以下、同様に、SSD20は、スーパーブロックSBiの最後のSBアドレス範囲#7の最初の記憶位置、2番目の記憶位置、…に単位データを書き込む。
【0076】
圧縮/伸張部46は、スーパーブロックSBiのSBアドレス範囲#n(n=0-7)に書き込まれる圧縮前のデータを、圧縮パラメータテーブル72iのエントリ#nに記憶されている圧縮パラメータPAnを使用して、圧縮し、単位データを生成する。単位データは、スーパーブロックSBiのSBアドレス範囲#nで指定されるNAND型フラッシュメモリ24の記憶位置に書き込まれる。単位データは、生成される毎に、NAND型フラッシュメモリ24に書き込まれてもよい。あるいは、1つの圧縮するデータの圧縮が完了後に、生成された複数の単位データが纏めて、NAND型フラッシュメモリ24に書き込まれてもよい。
【0077】
図5は、第1実施形態に係る圧縮/伸張部46が1つの単位データを生成する圧縮処理の一例を説明するためのフローチャートである。
図5は、1つの単位データを生成する圧縮処理を説明する。コントローラ22がホスト10からライト要求を受信すると、CPU34は、圧縮/伸張部46に圧縮処理を開始させる。
【0078】
圧縮/伸張部46は、これから圧縮するデータの書き込み先がスーパーブロックSBiの最初のSBアドレス範囲#0の最初の記憶位置(
図4の例では、左端の記憶位置)であるか否かを判定する(S12)。
【0079】
データの書き込み先がスーパーブロックSBiの最初のSBアドレス範囲#0の最初の記憶位置である場合(S12:Yes)、圧縮/伸張部46は、既定の圧縮パラメータを圧縮パラメータテーブル72iのエントリ#0に書き込む(S14)。スーパーブロックSBiへの単位データの書き込み前に他のスーパーブロック(例えば、SBj(j≠i))に単位データが書き込まれていた場合、既定の圧縮パラメータとして、他のスーパーブロックSBjのSBアドレス範囲であって、単位データが最後に書き込まれたSBアドレス範囲についての処理中に求められた圧縮パラメータを使用してもよい。
【0080】
データの書き込み先がスーパーブロックSBiの最初のSBアドレス範囲#0の最初の記憶位置ではない場合(S12:No)、圧縮/伸張部46は、データの書き込み先がSBアドレス範囲#n(n=1-7)の最初の記憶位置(
図4の例では、左端の記憶位置)であるか否かを判定する(S16)。
【0081】
データの書き込み先がSBアドレス範囲#nの最初の記憶位置ではない場合(S16:No)、圧縮/伸張部46は、書き込み先SBアドレス範囲#nに対応する圧縮パラメータテーブル72iのエントリ#nから圧縮パラメータPAnを読み出し、データを圧縮パラメータPAnを使用して圧縮し、単位データを生成するとともに、圧縮前のデータに基づきSBアドレス範囲#n+1に対応する圧縮パラメータPAn+1を計算する(S22)。圧縮パラメータは、1つのSBアドレス範囲SB#nの全ての記憶位置に書き込まれる単位データの元である圧縮前のデータから求められる。1つのSBアドレス範囲SB#nの最終の記憶位置に書き込まれる単位データを計算するまで、計算途中の圧縮パラメータは保持される。
【0082】
データの書き込み先がSBアドレス範囲#nの最初の記憶位置である場合(S16:Yes)、圧縮/伸張部46は、SBアドレス範囲#n-1に書き込まれる圧縮前のデータに基づき計算された圧縮パラメータPAnを圧縮パラメータテーブル72iのエントリ#nに書き込む(S24)。圧縮/伸張部46は、S14またはS24の処理後、S22を実行し、データを圧縮するとともに、圧縮パラメータを計算する。
【0083】
ライト制御部52は、S22で生成された単位データをECC部50により誤り訂正符号を付加し符号化データを生成し、符号化データをNAND型フラッシュメモリ24に書き込む。
【0084】
リード処理の際、ホスト10からのリード要求を受信すると、リード制御部54は、アドレス変換テーブル64を使用して、リード要求によって指定された開始LBAをSBアドレスに変換する。リード制御部54は、SBアドレスが含まれるSBアドレス範囲で指定されるNAND型フラッシュメモリ24の記憶位置から圧縮データを読み出す。リード制御部54は、圧縮データをECC部50により誤り訂正処理する。リード制御部54は、圧縮パラメータテーブル72のSBアドレス範囲に対応するエントリから圧縮パラメータを読み出し、誤り訂正処理後の圧縮データを圧縮パラメータを使用して伸張する。SSD20は、伸張後の非圧縮データをホスト10に送信する。
【0085】
スーパーブロックのデータを消去(すなわち、物理ブロックのデータを消去)した後は、圧縮パラメータテーブル72のうち消去したデータのSBアドレスが含まれるSBアドレス範囲に対応するエントリの圧縮パラメータは参照されなくなる。このように、第1実施形態に係るメモリシステムは、スーパーブロックに対して、典型的なSSDのスーパーブロックに対する処理と同様の処理も実行可能である。
【0086】
圧縮パラメータテーブル72は、全てがDRAM26に格納される代わりに、NAND型フラッシュメモリ24に記録されてもよい。その場合、リード処理の場合、圧縮データだけでなく圧縮パラメータもNAND型フラッシュメモリ24から読み出される。DRAM26は圧縮パラメータテーブル72のキャッシュとして利用されてもよい。
【0087】
第1実施形態によれば、圧縮/伸張部46は、スーパーブロックSBiのSBアドレス範囲#nに書き込まれるデータを圧縮パラメータPAnを使用して圧縮する際、スーパーブロックSBiのSBアドレス範囲#n+1に書き込まれるデータを圧縮する際に使用される圧縮パラメータPAn+1を求める。データは、SBアドレス範囲#n、#n+1の順に書き込まれる。圧縮/伸張部46は、或るデータを圧縮する際に、次に圧縮するデータに使用される圧縮パラメータを求める。具体的には、圧縮/伸張部46は、スーパーブロックSBiのSBアドレス範囲#nに書き込まれる圧縮前のデータ(単位データの元である非圧縮データ)から1つ後続のSBアドレス範囲#n+1に書き込まれるデータを圧縮する際に使用される圧縮パラメータPAn+1を計算する。圧縮パラメータPAn+1は、圧縮パラメータテーブル72iのエントリ#n+1に書き込まれる。
【0088】
このように、圧縮/伸張部46は、SBアドレス範囲#n+1に書き込まれるデータを圧縮する前に、圧縮パラメータPAn+1を求めている。そのため、圧縮前のデータを2回アクセスする必要が無く、スループットが低下することがない。また、圧縮/伸張部46は、SBアドレス範囲#nに書き込まれる圧縮前のデータからSBアドレス範囲#n+1に書き込まれるデータを圧縮する際に使用される圧縮パラメータPAn+1を求める。すなわち、圧縮するデータの直前に圧縮されたデータから圧縮パラメータを求めている。直前に圧縮されたデータと圧縮するデータとの類似度は高いので、圧縮パラメータは圧縮するデータに適したものとなる。そのため、圧縮/伸張部46は、非圧縮データを高圧縮率で圧縮することができる。
【0089】
NAND型フラッシュメモリ24を使ったメモリシステムでは、スーパーブロック内部の連続する記憶位置にデータを順番に書き込む必要があるので、
図4に示すように単位データを連続する記憶位置に順番に書き込んでも、オーバーヘッドは増加しない。
【0090】
上述の説明では、圧縮/伸張部46は、SBアドレス範囲#nに書き込まれるデータの圧縮前の全ての非圧縮データから1つ後続のSBアドレス範囲#n+1に書き込まれるデータを圧縮するための圧縮パラメータを計算している。しかし、SBアドレス範囲#nに書き込まれるデータのサイズが大きく、圧縮パラメータの計算時間が長い場合、SBアドレス範囲#n+1に書き込まれるデータの圧縮開始までに圧縮パラメータの生成が間に合わず、圧縮処理のスループットが低下することがある。
【0091】
これを回避するために、圧縮/伸張部46は、SBアドレス範囲#nに書き込まれるデータの圧縮前のデータの一部から圧縮パラメータを計算してもよい。例えば、圧縮/伸張部46は、SBアドレス範囲#nの前半の一部分に書き込まれるデータの圧縮前のデータから圧縮パラメータを計算してもよい。
【0092】
あるいは、圧縮/伸張部46は、SBアドレス範囲#nに書き込まれるデータの圧縮前の全ての非圧縮データから1つ後続ではなく、2つ以上後続のSBアドレス範囲に書き込まれるデータを圧縮するための圧縮パラメータを計算してもよい。
【0093】
第2実施形態
次に、第2実施形態について説明する。第2実施形態では、第1実施形態と異なる圧縮処理について説明する、以下、第1実施形態と異なる点を中心に説明する。
【0094】
図6は、第2実施形態に係る圧縮処理の一例を説明するための図である。
図6は、
図4と同様に、圧縮パラメータテーブル72iと、NAND型フラッシュメモリ24の1つのスーパーブロックSBiのSBアドレス空間に記憶される圧縮データとの対応関係を示す。
【0095】
第2実施形態に係る圧縮パラメータテーブル72iのエントリ数は、第1実施形態(
図4)に係る圧縮パラメータテーブル72iのエントリ数(8個)より1個多い9個である。第2実施形態における圧縮パラメータのサイズ:128バイト(128B)は、第1実施形態における圧縮パラメータのサイズ:256Bの1/2である。第2実施形態における1つのSBアドレス範囲に書き込まれる圧縮データのサイズ:1メガバイト(1MB)は、第1実施形態における1つのSBアドレス範囲に書き込まれる圧縮データのサイズ:2MBの1/2である。第2実施形態における圧縮パラメータのサイズと1つのSBアドレス範囲に書き込まれる圧縮データのサイズとの比率は、第1実施形態における圧縮パラメータのサイズと1つのSBアドレス範囲に書き込まれる圧縮データのサイズとの比率と等しい。
【0096】
圧縮パラメータのサイズと圧縮パラメータテーブル72のエントリ数はSSD20のコストに関連する。
【0097】
第2実施形態は、圧縮パラメータの計算及び圧縮パラメータテーブル72iへの圧縮パラメータの書き込みに関しては、第1実施形態と同じである。圧縮/伸張部46は、スーパーブロックSBiのSBアドレス範囲#nに書き込まれるデータの圧縮前のデータから後続のSBアドレス範囲、例えば#n+1に書き込まれるデータを圧縮する際に使用される圧縮パラメータPAn+1を計算する。圧縮パラメータPAn+1は、圧縮パラメータテーブル72iのエントリ#n+1に書き込まれる。
【0098】
第2実施形態は、データを圧縮する際に使用する圧縮パラメータの選択に関しては、第1実施形態と異なる。第1実施形態では、SBアドレス範囲#nに書き込まれるデータを圧縮するために使用される圧縮パラメータは、SBアドレス範囲#n-1に書き込まれるデータの圧縮前のデータから求められた圧縮パラメータPAnである。第2実施形態では、SBアドレス範囲#nに書き込まれるデータを圧縮するために使用される圧縮パラメータは、SBアドレス範囲#n-1に書き込まれるデータの圧縮前のデータから求められた圧縮パラメータPAnと、SBアドレス範囲#n-1に先行する所定個数のSBアドレス範囲、例えばSBアドレス範囲#n-2に書き込まれるデータの圧縮前のデータから求められた圧縮パラメータPAn-1である。圧縮に使用する圧縮パラメータの個数が増えると、圧縮率が向上する。辞書式圧縮の場合、圧縮パラメータ(初期辞書)の個数が多いと、圧縮できる可能性が増えるので、圧縮率が向上する。
【0099】
第1実施形態では、或るデータを圧縮する時に使用する圧縮パラメータは、或るデータから最大4MB離れたSBアドレスに記憶されるデータの圧縮前のデータから生成されている。第2実施形態では、或るデータを圧縮する時に使用する圧縮パラメータは、或るデータから最大3MB離れたSBアドレスに記憶されるデータの圧縮前のデータから生成されている。圧縮データは連続するSBアドレスに書き込まれるので、第2実施形態では、圧縮するデータに対して第1実施形態よりも時間的に近い非圧縮データから圧縮パラメータが生成される。このため、第2実施形態に係る圧縮パラメータの方が、第1実施形態に係る圧縮パラメータよりも、圧縮するデータに適したものである。第2実施形態は、第1実施形態より圧縮率が向上する。
【0100】
図6は、圧縮パラメータのサイズ:128Bと1つのSBアドレス範囲に書き込まれる圧縮データのサイズ:1MBは、第1実施形態における圧縮パラメータのサイズ:256Bと1つのSBアドレス範囲に書き込まれる圧縮データのサイズ:2MBの夫々半分である例を示すが、これらのサイズを第1実施形態と同じにしてもよい。この場合、より大きなサイズの圧縮パラメータを使うので、圧縮率が向上する。辞書式圧縮の場合、圧縮パラメータ(初期辞書)のサイズが大きいと、圧縮できる可能性が増えるので、圧縮率が向上する。
【0101】
図7は第2実施形態に係る圧縮/伸張部46が1つの単位データを生成する圧縮処理の一例を説明するためのフローチャートである。
【0102】
第2実施形態に係る圧縮処理のフローチャートは、第1実施形態に係る圧縮処理のフローチャートのS14とS22の処理が異なり、他の処理は同じである。
【0103】
データの書き込み先がスーパーブロックSBiの最初のSBアドレス範囲#0の最初の記憶位置である場合(S12:Yes)、圧縮/伸張部46は、既定の第1圧縮パラメータを圧縮パラメータテーブル72iのエントリ#-1に書き込み、既定の第2圧縮パラメータを圧縮パラメータテーブル72iのエントリ#0に書き込む(S32)。スーパーブロックSBiへの単位データの書き込み前に他のスーパーブロック(例えば、SBj(j≠i))へ単位データが書き込まれていた場合、既定の第2圧縮パラメータとして、他のスーパーブロックSBjのSBアドレス範囲であって、単位データが最後に書き込まれたSBアドレス範囲についての処理中に求められた圧縮パラメータを使用してもよいし、既定の第1圧縮パラメータとして、他のスーパーブロックSBjのSBアドレス範囲であって、単位データが最後から2番目に書き込まれたSBアドレス範囲についての処理中に求められた圧縮パラメータを使用してもよい。
【0104】
データの書き込み先がスーパーブロックSBiの最初のSBアドレス範囲#0の最初の記憶位置ではない場合(S12:No)、圧縮/伸張部46は、データの書き込み先がSBアドレス範囲#n(n=1-7)の最初の記憶位置(
図6の例では、左端の記憶位置)であるか否かを判定する(S16)。
【0105】
データの書き込み先がSBアドレス範囲#nの最初の記憶位置ではない場合(S16:No)、圧縮/伸張部46は、書き込み先SBアドレス範囲#nに対応する圧縮パラメータテーブル72iのエントリ#nから圧縮パラメータPAnを読み出し、エントリ#n-1から圧縮パラメータPAn-1を読み出し、データを圧縮パラメータPAnとPAn-1を使用して圧縮し、単位データを生成するとともに、圧縮前のデータに基づき圧縮パラメータPAn+1を計算する(S34)。圧縮パラメータは、1つのSBアドレス範囲SB#nの全ての記憶位置に書き込まれる単位データの元である圧縮前のデータから求められる。1つのSBアドレス範囲SB#nの最終の記憶位置に書き込まれる単位データを計算するまで、計算途中の圧縮パラメータは保持される。
【0106】
データの書き込み先がSBアドレス範囲#nの最初の記憶位置である場合(S16:Yes)、圧縮/伸張部46は、SBアドレス範囲#n-1に書き込まれる圧縮前のデータに基づいて計算された圧縮パラメータPAnを圧縮パラメータテーブル72iのエントリ#nに書き込む(S24)。圧縮/伸張部46は、S32またはS24の処理後、S34を実行し、データを圧縮するとともに、圧縮パラメータを計算する。
【0107】
上述の説明は、圧縮パラメータテーブル72iの2つのエントリから2つの圧縮パラメータを夫々読み出し、2つの圧縮パラメータを使用する圧縮処理に関する。第2実施形態は、3つ以上の圧縮パラメータを使用するように変形可能である。その場合、圧縮パラメータテーブル72のエントリの数をそれに応じて増加する。
【0108】
第2実施形態に係る圧縮処理は、第1実施形態に係る圧縮処理の場合よりも、圧縮対象の非圧縮データに時間的に近い非圧縮データから圧縮パラメータを生成するので、圧縮率が向上する。さらに、第2実施形態に係る圧縮処理は、第1実施形態に係る圧縮処理の場合よりも、多数の圧縮パラメータ又は大きなサイズの圧縮パラメータを使用するので、圧縮率が向上する。
【0109】
図8は第2実施形態の変形例に係る圧縮処理の一例を説明するための図である。
【0110】
変形例に係る圧縮パラメータテーブル72iのエントリ数は、第2実施形態に係る圧縮パラメータテーブル72iのエントリ数と同じ9個である。変形例における圧縮パラメータのサイズ:32バイト(32B)は、第2実施形態における圧縮パラメータのサイズ:128Bの1/4である。変形例における1つのSBアドレス範囲に書き込まれる圧縮データのサイズ:256キロバイト(256KB)は、第2実施形態における1つのSBアドレス範囲に書き込まれる圧縮データのサイズ:1MBの1/4である。変形例における圧縮パラメータのサイズと1つのSBアドレス範囲に書き込まれる圧縮データのサイズとの比率は、第2実施形態における圧縮パラメータのサイズと1つのSBアドレス範囲に書き込まれる圧縮データのサイズとの比率と等しい。
【0111】
第2実施形態では、データを圧縮する際に使用する圧縮パラメータの個数は固定であり、データを書き込むSBアドレス範囲#nに対応するエントリ#nから所定個数前のエントリまでの圧縮パラメータが使用される。変形例では、圧縮パラメータテーブル72iに書き込まれている全ての圧縮パラメータが使用される。
【0112】
例えば、最初のSBアドレス範囲#0に書き込まれるデータを圧縮する際、圧縮パラメータテーブル72iのエントリ#0、#-1の2つの圧縮パラメータPA0、PA-1が使用される。2番目のSBアドレス範囲#1に書き込まれるデータを圧縮する際、圧縮パラメータテーブル72iのエントリ#1から#-1までの3つの圧縮パラメータPA1、PA0、PA-1が使用される。3番目のSBアドレス範囲#2に書き込まれるデータを圧縮する際、圧縮パラメータテーブル72iのエントリ#2から#-1までの4つの圧縮パラメータPA2、PA1、PA0、PA-1が使用される。
【0113】
変形例では、圧縮に使用する圧縮パラメータの個数が第2実施形態より増えるので、第2実施形態よりも圧縮率が向上する。
【0114】
第3実施形態
次に、第3実施形態について説明する。第3実施形態では、第1実施形態と異なる圧縮処理について説明する、以下、第1実施形態と異なる点を中心に説明する。
【0115】
図9は、第3実施形態に係る圧縮処理の一例を説明するための図である。
図9は、
図4と同様に、圧縮パラメータテーブル72iと、NAND型フラッシュメモリ24の1つのスーパーブロックSBiのSBアドレス空間に記憶される圧縮データとの対応関係を示す。
【0116】
第3実施形態に係る圧縮パラメータテーブル72iのエントリ数は、第2実施形態の変形例(
図8)に係る圧縮パラメータテーブル72iのエントリ数(9個)より2個多い11個である。第3実施形態における圧縮パラメータのサイズ:8バイト(8B)は、第2実施形態の変形例における圧縮パラメータのサイズ:32Bの1/4である。第3実施形態における1つのSBアドレス範囲に書き込まれる圧縮データのサイズ:64キロバイト(64KB)は、第2実施形態の変形例における1つのSBアドレス範囲に書き込まれる圧縮データのサイズ:256KBの1/4である。第3実施形態における圧縮パラメータのサイズと1つのSBアドレス範囲に書き込まれる圧縮データのサイズとの比率は、第2実施形態の変形例における圧縮パラメータのサイズと1つのSBアドレス範囲に書き込まれる圧縮データのサイズとの比率と等しい。
【0117】
第3実施形態は、圧縮パラメータの計算及び圧縮パラメータテーブル72iへの圧縮パラメータの書き込みに関しては、第1実施形態、第2実施形態、第2実施形態の変形例と異なる。上述の実施形態では、SBアドレス範囲#nに書き込まれるデータを圧縮する際に使用される圧縮パラメータは、SBアドレス範囲#nに先行するSBアドレス範囲、例えばSBアドレス範囲#n-1に書き込まれるデータの圧縮前のデータに基づいて計算される。すなわち、圧縮パラメータは、その圧縮パラメータを使用して圧縮するデータより前に圧縮されるデータに基づき事前に計算される。
【0118】
第3実施形態では、SBアドレス範囲#nに書き込まれるデータを圧縮するために使用される圧縮パラメータPAnは、SBアドレス範囲#nに書き込まれるデータの圧縮前のデータの全部または一部に基づいて計算される。そのため、第3実施形態に係る圧縮パラメータは、上述の実施形態に係る圧縮パラメータよりも圧縮するデータに適したものとなる。第3実施形態では、上述の実施形態に比べて圧縮率がさらに向上する。
【0119】
第3実施形態は、データを圧縮する際に使用する圧縮パラメータの選択に関しては、第2実施形態と同じである。すなわち、第3実施形態では、SBアドレス範囲#nに書き込まれる圧縮データを求めるための圧縮パラメータは、SBアドレス範囲#nに書き込まれるデータの圧縮前のデータから求められた圧縮パラメータPAnと、SBアドレス範囲#nに先行する所定個数のSBアドレス範囲、例えばSBアドレス範囲#n-1、#n-2、#n-3に書き込まれるデータの圧縮前のデータから求められた圧縮パラメータPAn-1、PAn-2、PAn-3である。
【0120】
第3実施形態では、上述した実施形態に比べて圧縮に使用する圧縮パラメータの数が増えるので、圧縮率が向上する。
【0121】
第3実施形態では、SBアドレス空間#nに書き込まれるデータの圧縮前のデータが解析され、圧縮パラメータが作成され、その後データが圧縮パラメータを使用して圧縮される。このため、非圧縮データが2回アクセスされるので、上述の実施形態に比べてスループットが悪い可能性がある。
【0122】
しかし、
図9に示すように、1個の圧縮パラメータを求める非圧縮データは、64KBのデータの圧縮前のデータである。処理中に保持しておく非圧縮データは比較的小さいサイズ(64KB)であるので、DRAM26ではなくSRAM44に保持される。非圧縮データがコントローラ22内部のSRAM44に保持されたまま、データの解析と圧縮パラメータの生成、及び圧縮処理が連続して実行できる。SRAM44は、DRAM26に比べて高速なので、非圧縮データが2回アクセスされても、スループットが低下しない。
【0123】
保持しておく非圧縮データのサイズが大きく、SRAM44に保持されない場合は、DRAM26により保持される。DRAM26が2回アクセスされるので、高速なDRA I/F回路38が必要になる課題がある。しかし、第3実施形態によれば、この課題は生じない。
【0124】
図10は第3実施形態に係る圧縮/伸張部46が1つの単位データを生成する圧縮処理の一例を説明するためのフローチャートである。
【0125】
第3実施形態に係る圧縮処理のフローチャートは、第2実施形態に係る圧縮処理のフローチャート(
図7)と似ているが、SBアドレス範囲の先頭の記憶位置に書き込むデータを圧縮する時に圧縮パラメータを計算する点が異なる。
【0126】
圧縮/伸張部46は、これから圧縮するデータの書き込み先がスーパーブロックSBiの最初のSBアドレス範囲#0の最初の記憶位置であるか否かを判定する(S12)。
【0127】
データの書き込み先がスーパーブロックSBiの最初のSBアドレス範囲#0の最初の記憶位置である場合(S12:Yes)、圧縮/伸張部46は、既定の第1圧縮パラメータを圧縮パラメータテーブル72iのエントリ#-3に書き込み、既定の第2圧縮パラメータを圧縮パラメータテーブル72iのエントリ#-2に書き込み、既定の第3圧縮パラメータを圧縮パラメータテーブル72iのエントリ#-1に書き込み、SBアドレス範囲#0に書き込まれる圧縮前のデータに基づき圧縮パラメータPA0を計算し、圧縮パラメータPA0を圧縮パラメータテーブル72iのエントリ#0に書き込む(S42)。
【0128】
スーパーブロックSBiへの単位データの書き込み前に他のスーパーブロック(例えば、SBj(j≠i))へ単位データが書き込まれていた場合、既定の第3圧縮パラメータとして、他のスーパーブロックSBjのSBアドレス範囲であって、単位データが最後に書き込まれたSBアドレス範囲についての処理中に求められた圧縮パラメータを使用してもよい。既定の第2圧縮パラメータとして、他のスーパーブロックSBjのSBアドレス範囲であって、単位データが最後から2番目に書き込まれたSBアドレス範囲についての処理中に求められた圧縮パラメータを使用してもよい。既定の第1圧縮パラメータとして、他のスーパーブロックSBjのSBアドレス範囲であって、単位データが最後から3番目に書き込まれたSBアドレス範囲についての処理中に求められた圧縮パラメータを使用してもよい。
【0129】
データの書き込み先がスーパーブロックSBiの最初のSBアドレス範囲#0の最初の記憶位置ではない場合(S12:No)、圧縮/伸張部46は、データの書き込み先がSBアドレス範囲#n(n=1-7)の最初の記憶位置であるか否かを判定する(S16)。
【0130】
データの書き込み先がSBアドレス範囲#nの最初の記憶位置である場合(S16:Yes)、圧縮/伸張部46は、SBアドレス範囲#nに書き込まれる圧縮前のデータに基づき圧縮パラメータPAnを計算し、圧縮パラメータPAnを圧縮パラメータテーブル72iのエントリ#nに書き込む(S44)。
【0131】
データの書き込み先がSBアドレス範囲#nの最初の記憶位置ではない場合(S16:No)、圧縮/伸張部46は、書き込み先SBアドレス範囲#nに対応する圧縮パラメータテーブル72iのエントリ#nから圧縮パラメータPAnを読み出し、エントリ#n-1から圧縮パラメータPAn-1を読み出し、エントリ#n-2から圧縮パラメータPAn-2を読み出し、エントリ#n-3から圧縮パラメータPAn-3を読み出し、データを圧縮パラメータPAn、PAn-1、PAn-2、PAn-3を使用して圧縮し、単位データを生成する(S46)。
【0132】
圧縮/伸張部46は、S42またはS44の処理後、S46を実行し、データを圧縮する。
【0133】
ライト制御部52は、S46で生成された単位データをECC部50により誤り訂正符号を付加し符号化データを生成し、符号化データをNAND型フラッシュメモリ24に書き込む。
【0134】
第3実施形態によれば、圧縮するデータから圧縮パラメータを計算しているので、圧縮パラメータは圧縮するデータに対してより適切な圧縮パラメータとなる。そのため、圧縮率が向上する。
【0135】
第4実施形態
次に、第4実施形態について説明する。第4実施形態では、第1実施形態と異なる圧縮処理について説明する、以下、第1実施形態と異なる点を中心に説明する。
【0136】
上述した実施形態では、1つのSBアドレス範囲に対応する圧縮パラメータは固定サイズであり、圧縮パラメータテーブルの1つのエントリに記憶される。第4実施形態では、1つのSBアドレス範囲に対応する圧縮パラメータのサイズは可変である。可変サイズの圧縮パラメータは圧縮パラメータテーブルの可変個数のエントリに記憶される。すなわち、圧縮パラメータは圧縮パラメータテーブルの0以上の任意のエントリに記憶される。
【0137】
圧縮パラメータのサイズは0Bでもよい。圧縮パラメータのサイズが0Bであるということは、圧縮パラメータは圧縮パラメータテーブルに記憶されないことを意味する。圧縮の効果が見込めないデータに対する圧縮パラメータは、圧縮パラメータテーブル72iに書き込まれない。
【0138】
辞書式圧縮の場合、圧縮するデータが既に圧縮した非対象データに類似している場合、圧縮するデータに対して有効な初期辞書が生成される。しかし、ランダムデータについては、有効な圧縮パラメータは存在しない。圧縮の効果が見込まれる圧縮パラメータを大サイズで計算し、多くのエントリを使って圧縮パラメータテーブル72iに書き込むことにより、圧縮率が向上する。
【0139】
図11は、第4実施形態に係る圧縮処理の一例を説明するための図である。
図11は、
図4と同様に、圧縮パラメータテーブル72iと、NAND型フラッシュメモリ24の1つのスーパーブロックSBiのSBアドレス空間に記憶される圧縮データとの対応関係を示す。
【0140】
第4実施形態に係る圧縮パラメータテーブル72iのエントリ数は、22個である。第4実施形態における圧縮パラメータのサイズ:4バイト(4B)は、第3実施形態(
図9)における圧縮パラメータのサイズ:8Bの1/2である。第4実施形態における1つのSBアドレス範囲に書き込まれる圧縮データのサイズは、第3実施形態における1つのSBアドレス範囲に書き込まれる圧縮データのサイズと同じ64KBである。圧縮パラメータテーブル72iは、トータルで88(=4×22)バイト(88B)の1つの圧縮パラメータを記憶する。
【0141】
第4実施形態に係る圧縮パラメータは、第1、第2実施形態のように、圧縮するデータの圧縮の前に圧縮された非圧縮データに基づいて計算されてもよいし、第3実施形態のように、圧縮するデータそのものに基づいて計算されてもよい。
【0142】
1つのSBアドレス範囲は、圧縮パラメータテーブル72の連続する8個のエントリに対応する。最初のSBアドレス範囲#0は、圧縮パラメータテーブル72のエントリ#-6-#1に対応する。2番目のSBアドレス範囲#01は、圧縮パラメータテーブル72のエントリ#-4-#3に対応する。3番目のSBアドレス範囲#02は、圧縮パラメータテーブル72のエントリ#-2-#5に対応する。同様に、8番目のSBアドレス範囲#07は、圧縮パラメータテーブル72のエントリ#8-#15に対応する。
【0143】
圧縮/伸張部46は、圧縮パラメータテーブル72のSBアドレス範囲夫々に対応する8個のエントリ、及び先行するデータが書き込まれたSBアドレス範囲に対応するエントリの中の圧縮パラメータが未書き込みのエントリに圧縮パラメータを書き込む。
【0144】
最初のSBアドレス範囲#0に対応する圧縮パラメータPA0は、圧縮パラメータテーブル72のエントリ#-6-#1までの8個のエントリに記憶可能である。圧縮パラメータPA0のサイズの最大値は32バイトである。
【0145】
SBアドレス範囲#0に書き込まれるデータの圧縮パラメータPA0が16バイトの場合、SBアドレス範囲#0の先頭の記憶位置に書き込まれるデータを圧縮する直前に、圧縮/伸張部46は、圧縮パラメータPA0の4バイトずつの4個の成分PA0a、PA0b、PA0c、PA0dを圧縮パラメータテーブル72iの4個のエントリ#-6、#-5、#-4、#-3夫々に書き込む。SBアドレス範囲#0に対応する圧縮パラメータテーブル72iの8個のエントリの中の4個のエントリ#-2、#-1、#0、#1には圧縮パラメータの成分が書き込まれない。
【0146】
圧縮/伸張部46は、圧縮パラメータテーブル72iの8個のエントリ#-6-#3の中の4個のエントリ#-6、#-5、#-4、#-3から圧縮パラメータ成分PA0a-PA0dを夫々読み出し、圧縮パラメータPA0を使用してデータを圧縮する。
【0147】
2番目のSBアドレス範囲#1に対応する圧縮パラメータPA1は、圧縮パラメータ成分PA0dが書き込まれたエントリ#-3に後続するエントリ#-2からエントリ#3に書き込み可能である。
【0148】
SBアドレス範囲#1に書き込まれるデータの圧縮パラメータPA1が12バイトの場合、SBアドレス範囲#1の先頭の記憶位置に書き込まれるデータを圧縮する直前に、圧縮/伸張部46は、圧縮パラメータPA1の4バイトずつの3個の成分PA1a、PA1b、PA1cを圧縮パラメータテーブル72iの3個のエントリ#-2、#-1、#-0夫々に書き込む。SBアドレス範囲#1に対応する圧縮パラメータテーブル72iの8個のエントリの中の3個のエントリ#1、#2、#3には圧縮パラメータの成分が書き込まれない。
【0149】
圧縮/伸張部46は、圧縮パラメータテーブル72iの3個のエントリ#-2、#-1、#-0から圧縮パラメータ成分PA1a-PA1cを夫々読み出し、圧縮パラメータPA1を使用してデータを圧縮する。
【0150】
3番目のSBアドレス範囲#2に対応する圧縮パラメータPA2は、圧縮パラメータ成分PA1cが書き込まれたエントリ#0に後続するエントリ#1からエントリ#5に書き込み可能である。
【0151】
SBアドレス範囲#2に書き込まれるデータの圧縮パラメータPA2が4バイトの場合、SBアドレス範囲#2の先頭の記憶位置に書き込まれるデータを圧縮する直前に、圧縮/伸張部46は、圧縮パラメータPA2を圧縮パラメータテーブル72iのエントリ#1に書き込む。SBアドレス範囲#2に対応する圧縮パラメータテーブル72iの8個のエントリの中の4個のエントリ#2、#3、#4、#5には圧縮パラメータの成分が書き込 圧縮/伸張部46は、圧縮パラメータテーブル72iの1個のエントリ#1から圧縮パラメータPA2を読み出し、圧縮パラメータPA2を使用してデータを圧縮する。
【0152】
4番目のSBアドレス範囲#3に対応する圧縮パラメータPA3は、圧縮パラメータ成分PA2が書き込まれたエントリ#1に後続するエントリ#2からエントリ#7に書き込み可能である。
【0153】
SBアドレス範囲#3に書き込まれるデータの圧縮パラメータが24バイトの場合、SBアドレス範囲#3の先頭の記憶位置に書き込まれるデータを圧縮する直前に、圧縮/伸張部46は、圧縮パラメータPA3の4バイトずつの6個の成分PA3a、PA3b、PA3c、PA3d、PA3e、PA3fを圧縮パラメータテーブル72iの6個のエントリ#2、#3、#4、#5、#6、#7夫々に書き込む。
【0154】
圧縮/伸張部46は、圧縮パラメータテーブル72iの6個のエントリ#2-#7から成分PA3a-PA3fを夫々読み出し、圧縮パラメータPA3を使用してデータを圧縮する。
【0155】
第4実施形態によれば、圧縮するデータの性質に応じた可変サイズの圧縮パラメータが求められ、可変サイズの圧縮パラメータが圧縮パラメータテーブルの可変個数のエントリに記憶される。圧縮の効果が見込めないデータに対する圧縮パラメータのサイズを小さくし、圧縮の効果が見込めるデータに対する圧縮パラメータのサイズを大きくすることにより、圧縮するデータ全体に対して適切な圧縮パラメータを適用することができ、圧縮率が向上する。
【0156】
第5実施形態
次に、第5実施形態について説明する。第5実施形態では、第1実施形態と異なる圧縮処理について説明する、以下、第1実施形態と異なる点を中心に説明する。
【0157】
SSD20の設計では、高速化、疲弊度の平準化のため、フラッシュメモリ制御やアドレス変換を並列化することがある。
図12は、アドレス変換の並列化の一例を示す。この例では、ホスト10から見える論理アドレス空間と、SBアドレス空間とが夫々の基準で分割されている。論理アドレス空間は、所定サイズ、例えば1MBのデータに対応する論理アドレス#0、#1、S2、…に分割される。SBアドレス空間は、複数のスーパーブロックSB0、SB1、SB2、…に分割される。複数の論理アドレスが1つのSBアドレスに変換される。例えば、論理アドレス#0、#4、#8がスーパーブロックSB0のSBアドレス範囲#0、#1、#2に変換される。論理アドレス#1、#5、#9がスーパーブロックSB1のSBアドレス範囲#0、#1、#2に変換される。論理アドレス#0、#1、#2、#3がスーパーブロックSB0、SB1、SB2、SB3のSBアドレス範囲#0に変換される。このため、論理アドレスをSBアドレスに変換する第1変換テーブルが論理アドレスをスーパーブロックSB0、SB1、SB2、SB3のアドレスに変換する処理を並列に実行することができる。
【0158】
スーパーブロックSB0のSBアドレス範囲#0に書き込まれるデータの圧縮前のデータの論理アドレスは論理アドレス#0である。スーパーブロックSB0のSBアドレス範囲#1に書き込まれるデータの圧縮前のデータの論理アドレスは論理アドレス#4である。圧縮パラメータの計算を上述した第1、第2実施形態に従って行うと、スーパーブロックSB0のSBアドレス範囲#0に書き込まれるデータの圧縮前のデータに基づいて計算された圧縮パラメータがスーパーブロックSB0のSBアドレス範囲#1に書き込まれるデータを圧縮する際に使用される。すなわち、隣接するSBアドレス範囲#0、#1夫々に対応する論理アドレス#0、#4は論理アドレス空間で離間している。論理アドレス空間で離間している2つのデータは、互いに相関する程度が小さく。このため、スーパーブロックSB0のSBアドレス範囲#0に書き込まれるデータの圧縮前のデータに基づいて計算された圧縮パラメータを使用してスーパーブロックSB0のSBアドレス範囲#1に書き込まれるデータを圧縮した場合、圧縮パラメータが圧縮するデータに適さない場合があり、圧縮率が低下する可能性がある。
【0159】
第5実施形態によれば、この課題を解決するため、複数のスーパーブロックに関して並列にデータ圧縮処理とライトを実行する場合でも、圧縮/伸張部46は、ホスト10から送信された非圧縮データの順番に従って圧縮パラメータを計算する。第5実施形態では、どのスーパーブロックに書き込まれるデータの圧縮前のデータから圧縮パラメータを計算していたかに関わらず、圧縮パラメータを圧縮パラメータテーブル72に書き込むことが必要になったタイミングで、圧縮パラメータが圧縮パラメータテーブル72に書き込まれる。
【0160】
図13は、第5実施形態に係る圧縮パラメータの計算例を説明するための図である。データ(非圧縮データ)入力の時間軸は、上のデータ程古く(過去に入力された)、下のデータ程新しい(最近入力された)ことを意味する。データ入力のSB0、SB1等は、当該データの論理アドレスから変換されたSBアドレスで指定されるスーパーブロック、すなわち圧縮データの書き込み先のスーパーブロックを示す。
【0161】
圧縮/伸張部46は、スーパーブロックSB3へ書き込まれるデータの圧縮前のデータの入力が終わり、スーパーブロックSB0へ書き込まれるデータの圧縮前のデータの入力が開始するタイミングt1で、スーパーブロックSB3へ書き込まれるデータの圧縮前のデータに基づいて計算された圧縮パラメータをスーパーブロックSB0の圧縮パラメータテーブル72の空きエントリ群の中の先頭エントリ、例えばエントリ#6に書き込む。
【0162】
圧縮/伸張部46は、スーパーブロックSB0へ書き込まれるデータの圧縮前のデータの入力が終わり、スーパーブロックSB1へ書き込まれるデータの圧縮前のデータの入力が開始するタイミングt2で、スーパーブロックSB0へ書き込まれるデータの圧縮前のデータに基づいて計算された圧縮パラメータをスーパーブロックSB1の圧縮パラメータテーブルの空きエントリ群の中の先頭エントリ、例えばエントリ#0に書き込む。
【0163】
圧縮/伸張部46は、スーパーブロックSB1へ書き込まれるデータの圧縮前のデータの入力が終わり、スーパーブロックSB2へ書き込まれるデータの圧縮前のデータの入力が開始するタイミングt3で、スーパーブロックSB1へ書き込まれるデータの圧縮前のデータに基づいて計算された圧縮パラメータをスーパーブロックSB2の圧縮パラメータテーブルの空きエントリ群の中の先頭エントリ、例えばエントリ#2に書き込む。
【0164】
圧縮/伸張部46は、スーパーブロックSB2へ書き込まれるデータの圧縮前のデータの入力が終わり、スーパーブロックSB1へ書き込まれるデータの圧縮前のデータの入力が開始するタイミングt4で、スーパーブロックSB2へ書き込まれるデータの圧縮前のデータに基づいて計算された圧縮パラメータをスーパーブロックSB1の圧縮パラメータテーブルの空きエントリ群の中の先頭エントリ、例えばエントリ#1に書き込む。
【0165】
圧縮/伸張部46は、スーパーブロックSB1へ書き込まれるデータの圧縮前のデータの入力が終わり、スーパーブロックSB3へ書き込まれるデータの圧縮前のデータの入力が開始するタイミングt5で、スーパーブロックSB1へ書き込まれるデータの圧縮前のデータに基づいて計算された圧縮パラメータをスーパーブロックSB3の圧縮パラメータテーブルの空きエントリ群の中の先頭エントリに書き込む。
【0166】
このように、圧縮/伸張部46は、ホスト10から送信された非圧縮データの順番に従って圧縮パラメータを計算する。そのため、圧縮するデータに類似するデータに基づいて圧縮パラメータが計算されるので、圧縮率が向上する。さらに、
図13に示すように、論理アドレス順にライトされる場合、論理アドレス空間で近いデータから圧縮パラメータが計算されるので、圧縮率の改善が期待できる。
【0167】
第6実施形態
次に、第6実施形態について説明する。第6実施形態では、第1実施形態と異なる圧縮処理について説明する、以下、第1実施形態と異なる点を中心に説明する。
【0168】
SSD20では、ガベージコレクションが行われる。ガベージコレクションでは、無効なデータが含まれるスーパーブロックから有効なデータが別のスーパーブロックにコピーされ、コピー元のスーパーブロックのデータが全て消去され、コピー元のスーパーブロックが新たな書き込む先ブロックとして再利用される。
【0169】
ホストからのライト処理では、入力データの処理時間や不揮発化される前のデータサイズに制約があることがある。このため、ホストからのライト処理に関しては、第1、第2実施形態のように圧縮するデータに基づいて計算した圧縮パラメータを次に圧縮するデータの圧縮に使用することは、圧縮率の向上に有効である。
【0170】
ガベージコレクションの際のデータのコピーにおいて、圧縮データが記憶されている場合、あるスーパーブロックから圧縮データが読み出され、圧縮データが伸張され非圧縮データとされる。非圧縮データが圧縮され、圧縮データが別のスーパーブロックに書き込まれる。圧縮、伸張の際、データはDRAM26に一時的に記憶される。コピー元のスーパーブロックのデータのデータは不揮発化済みであるので、コピー処理に要する時間に対する制約は、ホストからのライト処理に要する時間に対する制約よりも緩い。そのため、ガベージコレクションの際のデータの圧縮に対して第3実施形態のように圧縮するデータ自身に基づいて計算した圧縮パラメータを使用してもよい。
【0171】
第6実施形態に係る圧縮の場合、NAND型フラッシュメモリ24からDRAM26にデータを転送すると同時に圧縮パラメータを生成し、DRAM26からNAND型フラッシュメモリ24にデータを書き込む時に、その圧縮パラメータを使用してデータを圧縮してもよい。このように制御する事で性能と圧縮率をよりバランスよく改善させることができる。
【0172】
上述の実施形態に共通な変形例を説明する。
【0173】
圧縮パラメータの一例として初期辞書がある。初期辞書の一例は、多く出現するデータ、例えば頻出文字列を連結した文字列である。圧縮/伸張部46は、文字列と出現回数がペアになった情報を複数保持する頻度テーブルを備える。
【0174】
圧縮/伸張部46は、圧縮パラメータを計算する処理(例えば、
図5のS22)において、辞書圧縮処理において、マッチした文字列をカウントすることにより頻度テーブルを更新する。
【0175】
圧縮/伸張部46は、圧縮パラメータを圧縮パラメータテーブル72に書き込む処理(例えば、
図5のS24)において、頻度テーブルを参照して出現回数が多い順に文字列を並べて、圧縮パラメータのサイズの分だけ圧縮パラメータテーブル72のエントリに文字列を書き込む。
【0176】
第2実施形態乃至第4実施形態では、複数エントリの圧縮パラメータに基づきデータが圧縮される。或るSBアドレス範囲に書き込まれるデータの圧縮に使用される圧縮パラメータの一部は、或るSBアドレス範囲に後続する次のSBアドレス範囲のデータを圧縮する時にも使用される。
【0177】
圧縮/伸張部46は、次のSBアドレス範囲のデータを圧縮する時に使用される圧縮パラメータを圧縮パラメータテーブルに書き込む際、或るSBアドレス範囲のデータを圧縮する時に使用される圧縮パラメータと共通する部分の圧縮パラメータテーブルへの書き込みを実施しない。これにより、圧縮パラメータテーブルは圧縮パラメータの重複する成分を記憶することがなく、有効な圧縮パラメータを記憶することができる。
【0178】
圧縮パラメータの例は、初期辞書に限らず、エントロピー符号化における文字の頻度情報(例えば、ハフマンテーブル)を圧縮パラメータとしてもよい。さらに、初期辞書と頻度情報のセットを圧縮パラメータとしてもよい。
【0179】
圧縮パラメータは、圧縮するデータに基づいて計算されるものに限らず、論理アドレスやアクセスパターンなどをサブパラメータとして圧縮パラメータに追加してもよい。アクセスパターンは、シーケンシャルアクセスパターンとランダムアクセスパターンを含む。シーケンシャルアクセスとは、論理アドレスの順番でNAND型フラッシュメモリ24の物理ブロックにアクセスすることである。ランダムアクセスとは、ランダムな論理アドレスの順番でNAND型フラッシュメモリ24の物理ブロックにアクセスすることである。例えば、第2実施形態乃至第4実施形態において、圧縮パラメータテーブル72のエントリに初期辞書等の圧縮パラメータとともに頻出論理アドレスをサブパラメータとして記録してもよい。データを圧縮する時には、データの書き込み先に対応するエントリに記憶されている複数の圧縮パラメータの中の圧縮するデータの論理アドレスに近い論理アドレスがサブパラメータとして記録されているエントリの圧縮パラメータが使用される。圧縮するデータの論理アドレスに近いにサブパラメータが無い場合は、データの書き込み先に対応する複数の候補のエントリの中から多数派のサブパラメータを持つエントリの圧縮パラメータが使用されてもよいし、一番最近に使用されたエントリの圧縮パラメータが使用されてもよい。これらの制御により圧縮率改善効果のある圧縮パラメータが選択される。
【0180】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0181】
1…メモリシステム、10…ホスト、20…SSD、22…コントローラ、24…NAND型フラッシュメモリ、26…DRAM、46…圧縮/伸張部、64…アドレス変換テーブル、72…圧縮パラメータテーブル