(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-01-17
(45)【発行日】2022-01-26
(54)【発明の名称】メモリシステムおよび制御方法
(51)【国際特許分類】
G06F 12/02 20060101AFI20220119BHJP
G06F 12/00 20060101ALI20220119BHJP
G06F 12/04 20060101ALI20220119BHJP
G06F 12/1027 20160101ALI20220119BHJP
【FI】
G06F12/02 570A
G06F12/00 597U
G06F12/04 530
G06F12/1027 115
G06F12/1027 120
(21)【出願番号】P 2018049897
(22)【出願日】2018-03-16
【審査請求日】2020-09-15
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】特許業務法人スズエ国際特許事務所
(72)【発明者】
【氏名】三浦 貴
【審査官】後藤 彰
(56)【参考文献】
【文献】国際公開第2016/056104(WO,A1)
【文献】特開2005-301885(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/02
G06F 12/00
G06F 12/04
G06F 12/1027
(57)【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリに格納された論理物理アドレス変換テーブルの内容の一部を第1のキャッシュとしてランダムアクセスメモリに格納し、前記論理物理アドレス変換テーブルの内容
の少なくとも一部を圧縮することによって得られる圧縮アドレス変換データを第2のキャッシュとして前記ランダムアクセスメモリに格納するように構成されたコントローラとを具備し、
前記第2のキャッシュは、前記第1のキャッシュに格納されるアドレス変換データの数よりも多くの数の圧縮アドレス変換データを格納するように構成され、
前記コントローラは、
前記ホストによって指定される第1の論理アドレスに対応するデータが格納されている前記不揮発性メモリの物理記憶位置を示す第1の物理アドレスを含む第1のアドレス変換データが前記第1のキャッシュに存在せず且つ前記第1のアドレス変換データに対応する第1の圧縮アドレス変換データが前記第2のキャッシュに存在する場合、前記第2のキャッシュ内の前記第1の圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データを前記第1のキャッシュに格納する動作と、前記非圧縮アドレス変換データから前記第1の物理アドレスを取得する動作とを実行し、
前記第1のアドレス変換データが前記第1のキャッシュに存在せず且つ前記第1の圧縮アドレス変換データが前記第2のキャッシュに存在しない場合、前記論理物理アドレス変換テーブルから前記第1のアドレス変換データをリードする動作と、前記リードされた第1のアドレス変換データを前記第1のキャッシュに格納する動作と、前記リードされた第1のアドレス変換データから前記第1の物理アドレスを取得する動作と、
前記リードされた第1のアドレス変換データを圧縮し、前記リードされた第1のアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを前記第2のキャッシュに格納する動作とを実行するように構成されている、メモリシステム。
【請求項2】
前記第2のキャッシュは、前記メモリシステムの全論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持可能なサイズを有する請求項1記載のメモリシステム。
【請求項3】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリに格納された論理物理アドレス変換テーブルの内容の一部を第1のキャッシュとしてランダムアクセスメモリに格納し、前記論理物理アドレス変換テーブルの内容の少なくとも一部を圧縮することによって得られる圧縮アドレス変換データを第2のキャッシュとして前記ランダムアクセスメモリに格納するように構成されたコントローラとを具備し、
前記コントローラは、
前記第2のキャッシュが、前記メモリシステムの全論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持可能な第1のサイズを有するように、前記ランダムアクセスメモリ上に前記第2のキャッシュ用の第1の領域を確保し、前記ランダムアクセスメモリの残りの第2の領域を前記第1のキャッシュとして使用
し、
前記ホストによって指定される第1の論理アドレスに対応するデータが格納されている前記不揮発性メモリの物理記憶位置を示す第1の物理アドレスを含む第1のアドレス変換データが前記第1のキャッシュに存在せず且つ前記第1のアドレス変換データに対応する第1の圧縮アドレス変換データが前記第2のキャッシュに存在する場合、前記第2のキャッシュ内の前記第1の圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データを前記第1のキャッシュに格納する動作と、前記非圧縮アドレス変換データから前記第1の物理アドレスを取得する動作とを実行し、
前記第1のアドレス変換データが前記第1のキャッシュに存在せず且つ前記第1の圧縮アドレス変換データが前記第2のキャッシュに存在しない場合、前記論理物理アドレス変換テーブルから前記第1のアドレス変換データをリードする動作と、前記リードされた第1のアドレス変換データを前記第1のキャッシュに格納する動作と、前記リードされた第1のアドレス変換データから前記第1の物理アドレスを取得する動作と、前記リードされた第1のアドレス変換データを圧縮し、前記リードされた第1のアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを前記第2のキャッシュに格納する動作とを実行するように構成されている、メモリシステム。
【請求項4】
前記コントローラは、前記第2のキャッシュにキャッシュされる前記圧縮アドレス変換データの量が増加されるに連れて前記第2のキャッシュのサイズが増えるように、前記第2のキャッシュのサイズを初期サイズから前記第1のサイズまで変更し、且つ前記第2のキャッシュのサイズが前記第1のサイズに増加されるまでは、前記第1の領域内の未使用領域と前記第2の領域の双方を前記第1のキャッシュとして使用するように構成されている請求項3記載のメモリシステム。
【請求項5】
前記コントローラは、前記第2のキャッシュとして使用される領域が前記第1の領域の端部から前記第1の領域と前記第2の領域との間の境界に向かう方向に増加し且つ前記第1のキャッシュとして使用される領域が前記第2の領域の端部から前記境界に向かう方向に増加するように前記第1のキャッシュおよび前記第2のキャッシュを前記ランダムアクセスメモリ上に配置するように構成されている請求項4記載のメモリシステム。
【請求項6】
前記コントローラは、圧縮データを伸張するデコーダ回路と、データを圧縮するエンコーダ回路とを備え、
前記第1のアドレス変換データが前記第1のキャッシュに存在せず且つ前記第1のアドレス変換データに対応する前記第1の圧縮アドレス変換データが前記第2のキャッシュに存在する場合、前記コントローラは、前記デコーダ回路によって前記第1の圧縮アドレス変換データを伸張し、
前記第1のアドレス変換データが前記第1のキャッシュに存在せず且つ前記第1の圧縮アドレス変換データが前記第2のキャッシュに存在しない場合、前記コントローラは、前記エンコーダ回路によって、前記リードされた第1のアドレス変換データを圧縮するように構成されている請求項1記載のメモリシステム。
【請求項7】
前記第1のキャッシュは複数のキャッシュエントリを含み、前記第1のキャッシュの各キャッシュエントリは、連続する複数の論理アドレスに対応する複数の物理アドレスを含むアドレス変換データを格納し、
前記第2のキャッシュは
、前記第1のキャッシュに含まれるキャッシュエントリの数よりも多い複数のキャッシュエントリを含み、前記第2のキャッシュの各キャッシュエントリは、前記複数の物理アドレスを含む前記アドレス変換データを圧縮することによって得られる圧縮アドレス変換データを格納する請求項1記載のメモリシステム。
【請求項8】
メモリシステム内の不揮発性メモリを制御する制御方法であって、
前記不揮発性メモリに格納された論理物理アドレス変換テーブルの内容の一部を第1のキャッシュとしてランダムアクセスメモリに格納し、前記論理物理アドレス変換テーブルの内容
の少なくとも一部を圧縮することによって得られる圧縮アドレス変換データを第2のキャッシュとして前記ランダムアクセスメモリに格納することと、
前記第2のキャッシュは、前記第1のキャッシュに格納されるアドレス変換データの数よりも多くの数の圧縮アドレス変換データを格納するように構成され、
ホストによって指定される第1の論理アドレスに対応するデータが格納されている前記不揮発性メモリの物理記憶位置を示す第1の物理アドレスを含む第1のアドレス変換データが前記第1のキャッシュに存在せず且つ前記第1のアドレス変換データに対応する第1の圧縮アドレス変換データが前記第2のキャッシュに存在する場合、前記第2のキャッシュ内の前記第1の圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データを前記第1のキャッシュに格納する動作と、前記非圧縮アドレス変換データから前記第1の物理アドレスを取得する動作とを実行することと、
前記第1のアドレス変換データが前記第1のキャッシュに存在せず且つ前記第1の圧縮アドレス変換データが前記第2のキャッシュに存在しない場合、前記論理物理アドレス変換テーブルから前記第1のアドレス変換データをリードする動作と、前記リードされた第1のアドレス変換データを前記第1のキャッシュに格納する動作と、前記リードされた第1のアドレス変換データから前記第1の物理アドレスを取得する動作と、
前記リードされた第1のアドレス変換データを圧縮し、前記リードされた第1のアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを前記第2のキャッシュに格納する動作とを実行することとを具備する、制御方法。
【請求項9】
前記第2のキャッシュは、前記メモリシステムの全論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持可能なサイズを有する請求項8記載の制御方法。
【請求項10】
メモリシステム内の不揮発性メモリを制御する制御方法であって、
前記不揮発性メモリに格納された論理物理アドレス変換テーブルの内容の一部を第1のキャッシュとしてランダムアクセスメモリに格納し、前記論理物理アドレス変換テーブルの内容の少なくとも一部を圧縮することによって得られる圧縮アドレス変換データを第2のキャッシュとして前記ランダムアクセスメモリに格納することと、
前記第2のキャッシュが、前記メモリシステムの全論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持可能な第1のサイズを有するように、前記ランダムアクセスメモリ上に前記第2のキャッシュ用の第1の領域を確保することと、
前記ランダムアクセスメモリの残りの第2の領域を前記第1のキャッシュとして使用することと、
ホストによって指定される第1の論理アドレスに対応するデータが格納されている前記不揮発性メモリの物理記憶位置を示す第1の物理アドレスを含む第1のアドレス変換データが前記第1のキャッシュに存在せず且つ前記第1のアドレス変換データに対応する第1の圧縮アドレス変換データが前記第2のキャッシュに存在する場合、前記第2のキャッシュ内の前記第1の圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データを前記第1のキャッシュに格納する動作と、前記非圧縮アドレス変換データから前記第1の物理アドレスを取得する動作とを実行することと、
前記第1のアドレス変換データが前記第1のキャッシュに存在せず且つ前記第1の圧縮アドレス変換データが前記第2のキャッシュに存在しない場合、前記論理物理アドレス変換テーブルから前記第1のアドレス変換データをリードする動作と、前記リードされた第1のアドレス変換データを前記第1のキャッシュに格納する動作と、前記リードされた第1のアドレス変換データから前記第1の物理アドレスを取得する動作と、前記リードされた第1のアドレス変換データを圧縮し、前記リードされた第1のアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを前記第2のキャッシュに格納する動作とを実行することとを具備する、制御方法。
【請求項11】
前記第2のキャッシュにキャッシュされる前記圧縮アドレス変換データの量が増加されるに連れて前記第2のキャッシュのサイズが増えるように、前記第2のキャッシュのサイズを初期サイズから前記第1のサイズまで変更することと、
前記第2のキャッシュのサイズが前記第1のサイズに増加されるまでは、前記第1の領域内の未使用領域と前記第2の領域の双方を前記第1のキャッシュとして使用することとをさらに具備する請求項10記載の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【0003】
このようなメモリシステムとしては、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
【0004】
このようなメモリシステムにおいては、論理アドレスを不揮発性メモリの物理アドレスに変換するための論理物理アドレス変換が実行される。この論理物理アドレス変換に要する時間が長くなると、メモリシステムの性能の低下が引き起こされる場合がある
【先行技術文献】
【特許文献】
【0005】
【文献】特開2013-196115号公報
【文献】特許第5130646号公報
【文献】米国特許出願公開第2017/0177497号明細書
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明が解決しようとする課題は、性能を改善することができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【0007】
実施形態によれば、ホストに接続可能なメモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリに格納された論理物理アドレス変換テーブルの内容の一部を第1のキャッシュとしてランダムアクセスメモリに格納し、前記論理物理アドレス変換テーブルの内容の少なくとも一部を圧縮することによって得られる圧縮アドレス変換データを第2のキャッシュとして前記ランダムアクセスメモリに格納する。前記第2のキャッシュは、前記第1のキャッシュに格納されるアドレス変換データの数よりも多くの数の圧縮アドレス変換データを格納するように構成される。前記コントローラは、前記ホストによって指定される第1の論理アドレスに対応するデータが格納されている前記不揮発性メモリの物理記憶位置を示す第1の物理アドレスを含む第1のアドレス変換データが前記第1のキャッシュに存在せず且つ前記第1のアドレス変換データに対応する第1の圧縮アドレス変換データが前記第2のキャッシュに存在する場合、前記第2のキャッシュ内の前記第1の圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データを前記第1のキャッシュに格納する動作と、前記非圧縮アドレス変換データから前記第1の物理アドレスを取得する動作とを実行する。前記コントローラは、前記第1のアドレス変換データが前記第1のキャッシュに存在せず且つ前記第1の圧縮アドレス変換データが前記第2のキャッシュに存在しない場合、前記論理物理アドレス変換テーブルから前記第1のアドレス変換データをリードする動作と、前記リードされた第1のアドレス変換データを前記第1のキャッシュに格納する動作と、前記リードされた第1のアドレス変換データから前記第1の物理アドレスを取得する動作と、前記リードされた第1のアドレス変換データを圧縮し、前記リードされた第1のアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを前記第2のキャッシュに格納する動作とを実行する。
【図面の簡単な説明】
【0008】
【
図1】実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【
図2】同実施形態のメモリシステム内の不揮発性メモリの構成例を示す図。
【
図3】同実施形態のメモリシステム内のNANDインタフェースと複数のNAND型フラッシュメモリチップとの関係を示すブロック図。
【
図4】同実施形態のメモリシステムにおいて使用される並列単位(論理ブロック)の構成例を示す図。
【
図5】圧縮論理物理アドレス変換テーブルキャッシュ(圧縮L2Pテーブルキャッシュ)が存在しない構成に適用される論理物理アドレス変換処理を説明するための図。
【
図6】論理物理アドレス変換テーブルキャッシュ(L2Pテーブルキャッシュ)の構成例を示す図。
【
図7】L2Pテーブルキャッシュと圧縮L2Pテーブルキャッシュとを使用した論理物理アドレス変換処理を説明するための図。
【
図8】L2Pテーブルキャッシュのキャッシュヒットが起きた時に同実施形態のメモリシステムによって実行されるキャッシュ制御処理の処理シーケンスを示す図。
【
図9】L2Pテーブルキャッシュのキャッシュミスが起こり且つ圧縮L2Pテーブルキャッシュのキャッシュヒットが起きた時に同実施形態のメモリシステムによって実行されるキャッシュ制御処理の処理シーケンスを示す図。
【
図10】L2Pテーブルキャッシュのキャッシュミスが起こり且つ圧縮L2Pテーブルキャッシュのキャッシュミスが起きた時に同実施形態のメモリシステムによって実行されるキャッシュ制御処理の処理シーケンスを示す図。
【
図11】L2PテーブルとL2Pテーブルキャッシュと圧縮L2Pテーブルキャッシュとの関係と、ランダムアクセスメモリ上におけるL2Pテーブルキャッシュおよび圧縮L2Pテーブルキャッシュの配置例を示す図。
【
図12】L2PテーブルとL2Pテーブルキャッシュと圧縮L2Pテーブルキャッシュとの関係と、ランダムアクセスメモリ上におけるL2Pテーブルキャッシュおよび圧縮L2Pテーブルキャッシュの別の配置例を示す図。
【発明を実施するための形態】
【0009】
以下、図面を参照して、実施形態を説明する。
【0010】
まず、
図1を参照して、実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。
【0011】
このメモリシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成されたストレージデバイスである。このメモリシステムは、例えば、ソリッドステートドライブ(SSD)として実現されてもよいし、メモリカードとして実現されてもよい。以下では、このメモリシステムが、ソリッドステートドライブ(SSD)3として実現されている場合を想定する。
【0012】
情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。ホスト2は、パーソナルコンピュータやサーバ、携帯電話、撮像装置であってもよいし、タブレット、スマートフォンなどの携帯端末であってもよいし、ゲーム機器であってもよいし、カーナビゲーションシステムなどの車載端末であってもよい。
【0013】
SSD3は、ホスト2として機能する情報処理装置の外部記憶装置として使用され得る。SSD3は、情報処理装置に内蔵されてもよいし、情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【0014】
ホスト2とSSD3とを相互接続するためのインタフェースとしては、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)(登録商標)、Ethernet(登録商標)、Fibre channel、NVM Express(NVMe)(登録商標)、ユニバーサルシリアルバス(USB)、Mobile Industry Processor Interface(MIPI)、UniPro等を使用し得る。
【0015】
SSD3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。NAND型フラッシュメモリ5は、限定されないが、複数のNAND型フラッシュメモリチップを含んでいてもよい。コントローラ4は、NAND型フラッシュメモリ5に電気的に接続され、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして動作する。このコントローラ4は、System-on-a-chip(SoC)のような回路によって実現されてもよい。
【0016】
NAND型フラッシュメモリ5は、ユーザデータ6と、論理物理アドレス変換テーブル(logical-to-physical address translation table(L2Pテーブル))7のような管理情報とを格納する。論理物理アドレス変換テーブル7は、以下、単にL2Pテーブル7としても参照される。このL2Pテーブル7は、ホスト2によって指定される論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを管理する。論理アドレスは、SSD3の論理アドレス空間内の位置をアドレス指定するためにホスト2によって使用されるアドレスである。この論理アドレスとしては、LBA(logical block address(addressing))が使用され得る。物理アドレスは、データが格納されているNAND型フラッシュメモリ5内の物理記憶位置を示す。論理物理アドレス変換テーブル7、つまりL2Pテーブル7は、ホスト2によって指定される論理アドレスを、この論理アドレスに対応する最新のデータが格納されているNAND型フラッシュメモリ5内の物理記憶位置を示す物理アドレスに変換するために使用される。
【0017】
NAND型フラッシュメモリ5は、メモリセルアレイを有する1以上のNAND型フラッシュメモリチップを有する。メモリセルアレイは、マトリクス状に配列された複数のメモリセルを有する。NAND型フラッシュメモリ5のメモリセルアレイは、
図2に示されているように、複数のブロック(物理ブロック)BLK0~BLK(j-1)を含む。ブロックBLK0~BLK(j-1)は、消去動作の単位として機能する。
【0018】
ブロックBLK0~BLK(j-1)は複数のページ(物理ページ)を含む。つまり、ブロックBLK0~BLK(j-1)の各々は、ページP0、P1、…P(k-1)を含む。各ページは、同一ワード線に接続された複数のメモリセルを含む。NAND型フラッシュメモリ5においては、データのリードおよびデータのライトはページ単位で実行される。
【0019】
図1において、コントローラ4は、NAND型フラッシュメモリ5のデータ管理とNAND型フラッシュメモリ5のブロック管理とを実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。
【0020】
データ管理には、(1)論理アドレスそれぞれと物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)NAND型フラッシュメモリ5の制約(例えば、ページ単位のリード/ライト動作とブロック単位の消去動作)とを隠蔽するための処理、等が含まれる。論理アドレスと物理アドレスとの間のマッピングの管理は、L2Pテーブル7を用いて実行される。コントローラ4は、L2Pテーブル7を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。この管理サイズとしては、これに限定されないが、例えばクラスタが使用されてもよい。クラスタは論理アドレス空間内の位置を指定する単位であり、1つのクラスタは連続する複数のセクタ(例えば、8個のセクタ、16個のセクタ、または32個のセクタ、等)を含む。以下では、これに限定されないが、1つのクラスタが8個のセクタを含む場合を想定する。この場合、1つのセクタのサイズが512バイトであるならば、一つのクラスタのサイズは4Kバイト(4KB)となる。L2Pテーブル7は、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングをこの4KBのクラスタ単位で管理してもよい。
【0021】
ある論理アドレスに対応する物理アドレスは、この論理アドレスに対応するデータがライトされたNAND型フラッシュメモリ5内の最新の物理記憶位置を示す。
【0022】
ページへのデータ書き込みは、1消去サイクル当たり1回のみ可能である。このため、コントローラ4は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、L2Pテーブル7を更新して、この論理アドレスをこの別の物理記憶位置に関連付けると共に、以前のデータを無効化する。
【0023】
ブロック管理には、不良ブロック(バッドブロック)の管理と、ウェアレベリングと、ガベージコレクション等が含まれる。ウェアレベリングは、ブロックそれぞれの消耗を均一化するための動作である。
【0024】
ガベージコレクションは、フリーブロックの個数を増やすための動作である。フリーブロックは有効データを含まないブロックである。ガベージコレクションにおいては、コントローラ4は、有効データと無効データとが混在する幾つかのブロック内の有効データを別のブロック(例えばフリーブロック)にコピーする。ここで、有効データとは、ある論理アドレスに関連付けられているデータを意味する。例えば、L2Pテーブル7から参照されているデータ(すなわち論理アドレスから最新のデータとして紐付けられているデータ)は有効データであり、後にホスト2からリードされる可能性がある。無効データとは、どの論理アドレスにも関連付けられていないデータを意味する。どの論理アドレスにも関連付けられていないデータは、もはやホスト2からリードされる可能性が無いデータである。そして、コントローラ4は、L2Pテーブル7を更新して、コピーされた有効データの論理アドレスそれぞれに対して、コピー先の物理アドレスをマッピングする。有効データが別のブロックにコピーされることによって無効データのみになったブロックはフリーブロックとして解放される。これによって、このブロックは、このブロックに対する消去動作が実行された後にデータの書き込みのために再利用することが可能となる。
【0025】
ホスト2は、SSD3に様々なコマンドを送出する。これらコマンドには、リードコマンド、ライトコマンド、アンマップコマンド、等が含まれる。リードコマンドは、SSD3に対してデータのリードを要求するコマンドである。リードコマンドは、リードすべきデータに対応する論理アドレス(開始LBA)と、リードすべきデータの長さとを含む。
【0026】
コントローラ4がホスト2からリードコマンドを受信した時、コントローラ4は、L2Pテーブル7を参照して、リードコマンド内の開始LBAに対応する物理アドレスを得る。コントローラ4は、この得られた物理アドレスに対応するNAND型フラッシュメモリ5の物理記憶位置からデータをリードし、リードしたデータをホスト2に返す。
【0027】
ライトコマンドは、SSD3に対してデータの書き込みを要求するコマンドである。ライトコマンドは、ライトデータ(つまり書き込むべきデータ)の論理アドレス(開始LBA)と、ライトデータの長さとを含む。コントローラ4は、ライトデータを、NAND型フラッシュメモリ5内の利用可能な物理記憶位置に書き込む。さらに、コントローラ4は、L2Pテーブル7を更新することによって、ライトデータが書き込まれた物理記憶位置に対応する物理アドレスを、このライトデータに対応する論理アドレスにマッピングする。
【0028】
コントローラ4は、DRAM6のようなランダムアクセスメモリ内のメモリ領域を、L2Pテーブル7の内容の一部をキャッシュするL2Pテーブルキャッシュ31として使用する。換言すれば、コントローラ4は、L2Pテーブル7の内容の一部をL2Pテーブルキャッシュ31としてDRAM6のようなランダムアクセスメモリに格納する。コントローラ4は、このL2Pテーブルキャッシュ31を使用して、ホスト2によって指定される論理アドレスをNAND型フラッシュメモリ5の物理アドレスに変換するための論理物理アドレス変換を実行する。
【0029】
DRAM6のようなランダムアクセスメモリは、NAND型フラッシュメモリ5よりも高速にアクセスすることができる。したがって、L2Pテーブルキャッシュ31を使用することにより、論理物理アドレス変換を迅速に実行することが可能となり、これによって論理物理アドレス変換性能の改善、ひいてはSSD3の性能を改善することができる。
【0030】
しかし、通常、ランダムアクセスメモリは比較的高価であり、またL2Pテーブルのサイズ(典型的には、SSD3の容量の1000分の1程度)に適した容量を有するランダムアクセスメモリが入手できるとは限らない。
【0031】
特に、DRAMベンダーが提供するDRAMデバイス(DRAMチップ)に関しては、L2Pテーブルのサイズに適した容量を有するDRAMチップは入手し難い場合がある。なぜなら、DRAMチップの容量は、例えば、512Mビット-DRAM、1024Mビット-DRAM、4096Mビット-DRAMのように、2のべき乗で増加する傾向にある一方、NAND型フラッシュメモリの容量は整数倍で増加する傾向にあるためである。
【0032】
したがって、SSDの設計においては、次の2つの選択肢がありうる。
【0033】
(1)DRAMチップを複数個使う、あるいは、L2Pテーブルのサイズに適した容量よりも一段高容量のDRAMチップを使用し且つあまり分を別用途に使うこと、によって、コスト増を許容して論理物理アドレス変換性能を優先する。
【0034】
(2)コストを重視して、実装するDRAMの容量を増やさず、L2Pテーブルキャッシュのキャッシュミス率の増加に起因する論理物理アドレス変換の性能低下を許容する。
【0035】
コスト重視のSSDのケースでは、(2)が適用される場合が多い。この結果、L2Pテーブルキャッシュのキャッシュミス率の増加によって論理物理アドレス変換の性能低下、SSDの性能低下が引き起こされる可能性がある。
【0036】
そこで、本実施形態では、コントローラ4は、DRAM6のようなランダムアクセスメモリのメモリ領域を効率よく利用するために、このメモリ領域を、論理物理アドレス変換用の2種類のキャッシュ、つまりL2Pテーブルキャッシュ31および圧縮L2Pテーブルキャッシュ32として使用する。換言すれば、コントローラ4は、L2Pテーブル7の内容の一部をL2Pテーブルキャッシュ31としてDRAM6のようなランダムアクセスメモリに格納するだけでなく、L2Pテーブル7の内容を圧縮することによって得られる圧縮アドレス変換データを圧縮L2Pテーブルキャッシュ32としてランダムアクセスメモリに格納する。
【0037】
L2Pテーブルキャッシュ31はL2Pテーブル7の内容の一部(非圧縮のアドレス変換データ)をキャッシュするために使用される。L2Pテーブルキャッシュ31は複数のキャッシュエントリ(複数のキャッシュライン)を含み、各キャッシュエントリはアドレス変換データを格納する。一つのキャッシュエントリに格納されるアドレス変換データは、連続する複数の論理アドレスにそれぞれ対応するNAND型フラッシュメモリ5の複数の物理アドレスを含んでいてもよいし、一つの論理アドレスに対応するNAND型フラッシュメモリ5の一つの物理アドレスを含んでいてもよい。以下では、一つのキャッシュエントリに格納されるアドレス変換データが、連続する複数の論理アドレスにそれぞれ対応する複数の物理アドレスを含む場合、つまり一つのキャッシュエントリに格納されるアドレス変換データが、複数の要素(複数の物理アドレス)を含む配列である場合を想定する。一般に、NAND型フラッシュメモリ5に対するアクセスは空間的局所性を有するので、連続する複数の論理アドレスにそれぞれ対応する複数の物理アドレスを各々が格納する複数のキャッシュエントリを含むL2Pテーブルキャッシュ31構成はキャッシュヒット率を高めることを可能にする。
【0038】
圧縮L2Pテーブルキャッシュ32は、L2Pテーブル7の内容を圧縮することによって得られる圧縮アドレス変換データをキャッシュするために使用される。圧縮L2Pテーブルキャッシュ32も複数のキャッシュエントリ(複数のキャッシュライン)を含む。圧縮L2Pテーブルキャッシュ32に含まれるキャッシュエントリの数は、L2Pテーブルキャッシュ31に含まれるキャッシュエントリの数よりも多くてもよい。圧縮L2Pテーブルキャッシュ32の一つのキャッシュエントリに格納される圧縮アドレス変換データは、連続する複数の論理アドレスにそれぞれ対応するNAND型フラッシュメモリ5の複数の物理アドレスを圧縮することによって得られる圧縮データであってもよいし、一つの論理アドレスに対応するNAND型フラッシュメモリ5の一つの物理アドレスを圧縮することによって得られる圧縮データであってもよい。以下では、圧縮L2Pテーブルキャッシュ32の一つのキャッシュエントリに格納される圧縮アドレス変換データが、連続する複数の論理アドレスにそれぞれ対応する複数の物理アドレスを含むアドレス変換データを圧縮することによって得られる圧縮データである場合を想定する。
【0039】
圧縮L2Pテーブルキャッシュ32の1キャッシュエントリ分の圧縮アドレス変換データのサイズは、L2Pキャッシュ31の1キャッシュエントリ分のアドレス変換データのサイズの数分の1程度である。したがって、圧縮L2Pテーブルキャッシュ32は、少ないメモリ容量で、より多くの論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持することができる。
【0040】
コントローラ4は、L2Pテーブル7の内容の一部をL2Pテーブルキャッシュ31にキャッシュし、またL2Pテーブル7の内容を圧縮することによって得られる圧縮アドレス変換データを圧縮L2Pテーブルキャッシュ32にキャッシュする。
【0041】
コントローラ4がホスト2からリード要求(リードコマンド)を受信した場合、コントローラ4は、以下の論理物理アドレス変換処理を実行する。
【0042】
コントローラ4は、まず、ホスト2から受信したリード要求によって指定される論理アドレスに対応するNAND型フラッシュメモリ5の物理アドレスを含むアドレス変換データがL2Pテーブルキャッシュ31に存在するか否かを判定する(キャッシュヒットチェック)。このアドレス変換データがL2Pテーブルキャッシュ31に存在しないならば(キャッシュミス)、コントローラ4は、このアドレス変換データに対応する圧縮アドレス変換データが圧縮L2Pテーブルキャッシュ32に存在するか否かを判定する(圧縮キャッシュヒットチェック)。この圧縮アドレス変換データが圧縮L2Pテーブルキャッシュ32に存在するならば(圧縮キャッシュヒット)、コントローラ4は、圧縮L2Pテーブルキャッシュ32のこの圧縮アドレス変換データを使用して、論理物理アドレス変換を実行する。
【0043】
圧縮L2Pテーブルキャッシュ32を有さない構成においては、もしL2Pテーブルキャッシュ31のキャッシュミスが起きたならば、コントローラ4は、指定された論理アドレスに対応するアドレス変換データをNAND型フラッシュメモリ5内のL2Pテーブル7からリードすることが必要となる。このため、論理物理アドレス変換に多くの時間を要することになる。本実施形態では、L2Pテーブルキャッシュ31のキャッシュミスが起きた場合は、DRAM6上の圧縮L2Pテーブルキャッシュ32から、指定された論理アドレスに対応するデータが格納されているNAND型フラッシュメモリ5の物理記憶位置を示す物理アドレスを含む圧縮アドレス変換データを迅速に取得することができる。
【0044】
L2Pテーブルキャッシュ31のキャッシュミスが起き、且つ圧縮L2Pテーブルキャッシュ32の圧縮キャッシュミスが起きたならば、コントローラ4は、指定された論理アドレスに対応するアドレス変換データをNAND型フラッシュメモリ5内のL2Pテーブル7からリードする。この場合、コントローラ4は、リードされたアドレス変換データをL2Pテーブルキャッシュ31に格納すると共に、リードされたアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを圧縮L2Pテーブルキャッシュ32に格納する。
【0045】
次に、コントローラ4の構成について説明する。
【0046】
コントローラ4は、ホストインタフェース11、CPU12、DRAMインタフェース13、バックエンド部14、および専用ハードウェア(HW)15等を含む。これらホストインタフェース11、CPU12、DRAMインタフェース13、バックエンド部14、および専用ハードウェア(HW)15は、バス10を介して相互接続される。
【0047】
ホストインタフェース11は、ホスト2からライトコマンド、リードコマンド、等の様々なコマンドを受信する回路として機能する。
【0048】
CPU12は、ホストインタフェース11、DRAMインタフェース13、バックエンド部14、および専用ハードウェア(HW)15等の動作を制御するように構成されたプロセッサである。CPU12は、図示しないROM等に格納されている制御プログラム(ファームウェア:FW)を実行することによって様々な処理を行う。このCPU12は、上述のFTLの処理に加え、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行する。CPU12の動作は、CPU12によって実行されるファームウェアによって制御される。なお、上述のコマンド処理の一部または全部は、専用ハードウェア15によって実行してもよい。
【0049】
DRAMインタフェース13は、DRAM6を制御するDRAM制御回路として機能する。このDRAM6のメモリ領域は、L2Pテーブルキャッシュ31および圧縮L2Pテーブルキャッシュ32として機能するのみならず、データキャッシュ30として機能してもよい。このデータキャッシュ30は、ホスト2から受信されるリードコマンドに応じてNAND型フラッシュメモリ5からリードされるデータをキャッシュするように構成されたリードキャッシュであってもよいし、NAND型フラッシュメモリ5からリードされたデータと、ホスト2から受信されるライトデータの双方をキャッシュするリード/ライトキャッシュであってよい。このデータキャッシュ30は、各キャッシュエントリの内容を特定するためのキャッシュインデックスとして論理アドレスを保持していてもよい。この場合、ホスト2から受信されるリード/ライト要求によって指定される論理アドレスに基づいて、データキャッシュ30のキャッシュヒット/ミスを容易に判定することができる。例えば、ホスト2からのリード要求によって指定された論理アドレスに対応するデータがデータキャッシュ30に存在するならば、コントローラ4は、論理物理アドレス変換を行うことなく、このデータをデータキャッシュ30から即座にリードすることができる。
【0050】
バックエンド部14は、符号化/復号化部141と、NANDインタフェース142とを含む。符号化/復号化部141は、例えば、エラー訂正コード(ECC)エンコーダおよびECCデコーダとして機能し得る。NAND型フラッシュメモリ5にデータをライトすべき時、符号化/復号化部141は、書き込むべきライトデータをエンコード(ECCエンコード)することによってこのデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた時、符号化/復号化部141は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行う(ECCデコード)。
【0051】
NANDインタフェース142は、NAND型フラッシュメモリ5を制御するように構成されたNAND制御回路として機能する。NANDインタフェース142は、複数のチャンネルを介してNAND型フラッシュメモリ5に接続されてもよい。
【0052】
専用ハードウェア15は、DMA(direct memory access)転送、圧縮、伸張、他の様々な演算処理等を実行するように構成されたハードウェアロジックであってもよい。これらハードウェアロジックの一部として、専用ハードウェア15は、エンコードDMA(direct memory access)コントローラ151と、デコードDMA(direct memory access)コントローラ152とを含む。エンコードDMAコントローラ151はDMA転送および圧縮を実行するハードウェアであり、アドレス変換データを圧縮するエンコーダ回路として使用される。このエンコードDMAコントローラ151は、転送元のメモリから転送先のメモリにデータをDMA転送する経路と、この経路を通るデータを圧縮する回路とを含んでいてもよい。デコードDMAコントローラ152はDMA転送および伸張を実行するハードウェアであり、圧縮アドレス変換データを伸張して非圧縮のアドレス変換データを生成するデコーダ回路として機能する。デコードDMAコントローラ152は、転送元のメモリから転送先のメモリにデータをDMA転送する経路と、この経路を通るデータを伸張する回路とを含んでいてもよい。
【0053】
図3は、NANDインタフェース142と複数のNAND型フラッシュメモリチップとの関係の例を示す。
【0054】
NAND型フラッシュメモリ5は、
図3に示すように、複数のNAND型フラッシュメモリチップを含んでいてもよい。
図3においては、NANDインタフェース13に16個のチャンネルCh.1~Ch.16が接続されており、16個のチャンネルCh.1~Ch.16の各々に2つのNAND型フラッシュメモリチップが接続されている場合が例示されている。この場合、チャンネルCh.1~Ch.16に接続された16個のNAND型フラッシュメモリチップ#1~#16がバンク#0として編成されてもよく、またチャンネルCh.1~Ch.16に接続された残りの16個のNAND型フラッシュメモリチップ#17~#32がバンク#1として編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。
図3の構成例においては、16チャンネルと、2つのバンクを使用したバンクインタリーブとによって、最大32個のNAND型フラッシュメモリチップを並列動作させることができる。
【0055】
NAND型フラッシュメモリ5に対するリード/ライト動作の並列性を高めるために、コントローラ4は、複数の並列単位を管理してもよい。各並列単位は、異なるチャンネルに接続された複数のNAND型フラッシュメモリチップから一つずつ選択される複数のブロックを含む。並列単位は、論理ブロック(あるいはスーパーブロック)と称されることもある。一つの並列単位は、これに限定されないが、NAND型フラッシュメモリチップ#1~#32から一つずつ選択される計32個のブロックを含んでいてもよい。
図3においては、ハッチングによって示されるブロックそれぞれは、ある一つの並列単位に含まれるブロックを表している。各NAND型フラッシュメモリチップは、チャンネル番号およびバンク番号によって識別可能である。また、各ブロックは、チップ番号およびチップ内のブロック番号(ブロックアドレス)によって識別可能である。
【0056】
なお、NAND型フラッシュメモリチップ#1~#32の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリチップ#1~#32の各々が、2つのプレーンを含むマルチプレーン構成を有する場合には、一つの並列単位は、NAND型フラッシュメモリチップ#1~#32に対応する64個のプレーンから一つずつ選択される計64個のブロックを含んでいてもよい。
【0057】
ここで、
図4に示すように、ある一つの並列単位が、32個の物理ブロック(NAND型フラッシュメモリチップ#1内の物理ブロックBlk2、NAND型フラッシュメモリチップ#2内の物理ブロックBlk3、NAND型フラッシュメモリチップ#3内の物理ブロックBlk7、NAND型フラッシュメモリチップ#4内の物理ブロックBlk4、NAND型フラッシュメモリチップ#5内の物理ブロックBlk6、…NAND型フラッシュメモリチップ#32内の物理ブロックBlk3)を含む場合を想定する。
【0058】
この並列単位にデータを書き込む動作においては、例えば、コントローラ4は、NAND型フラッシュメモリチップ#1内のブロックBlk2のページ0、NAND型フラッシュメモリチップ#2内のブロックBlk3のページ0、NAND型フラッシュメモリチップ#3内のブロックBlk7のページ0、NAND型フラッシュメモリチップ#4内のブロックBlk4のページ0、NAND型フラッシュメモリチップ#5内のブロックBlk6のページ0、…NAND型フラッシュメモリチップ#32内のブロックBlk3のページ0という順序でデータを書き込んでもよい。これにより、最大32ページへのデータ書き込みを並列に実行することができる。また、この並列単位からデータをリードする動作においても、最大で32ページからのデータリードを並列に実行することができる。
【0059】
なお、並列単位の構成およびアクセス順序は上述の例に限定されるものではなく、他の様々な並列単位の構成やアクセス順序を利用することができる。
【0060】
次に、コントローラ4によって実行される論理物理アドレス変換処理を説明する。
【0061】
説明を分かり易くするために、まず、
図5を参照して、圧縮L2Pテーブルキャッシュが存在しない構成に適用される論理物理アドレス変換処理について説明する。
【0062】
ホスト2から受信されるデータアクセス要求(Data Access Request From Host)は、論理アドレス(Logical Address)を指定する。ここでは、データアクセス要求がリード要求(リードコマンド)である場合を想定する。
【0063】
コントローラ4がリード要求(リードコマンド)をホスト2から受信した時(ステップS11)、コントローラ4は、このリード要求によって指定される論理アドレスに対応するデータがデータキャッシュ(Logical Address Data Cache)30に存在するか否かを判定する(Logical Address Data Cache Check)(ステップS12)。
【0064】
このリード要求によって指定される論理アドレスに対応するデータがデータキャッシュ30に存在するならば(ヒット)、コントローラ4は、この指定される論理アドレスに対応するデータをデータキャッシュ30からリードし(Access Logical Address Data Cache)(ステップS13),リードされたデータをホスト2に返す(Data Response To Host)(ステップS14)。
【0065】
リード要求によって指定される論理アドレスに対応するデータがデータキャッシュ30に存在しないならば(ミス)、コントローラ4は、L2Pテーブルキャッシュ31またはL2Pテーブル7を使用して論理物理アドレス変換処理(Logical to Physical Address Translations)を実行する(ステップS15)。コントローラ4は、論理物理アドレス変換処理によって得られる物理アドレス(Physical Address)を使用してNAND型フラッシュメモリ5からデータ(Device Data)をリードする(Device Access by Physical Address)(ステップS16)。そして、コントローラ4は、リードされたデータをデータキャッシュ30に格納し(Update Logical Address Data Cache)(ステップS13)し、リードされたデータをホスト2に返す(Data Response To Host)(ステップS14)。
【0066】
ステップS15で実行される論理物理アドレス変換処理の手順の例は、以下の通りである。
【0067】
コントローラ4は、ホスト2から受信されるリード要求によって指定される論理アドレスを、クラスタインデックス(Cluster Idx)とオフセット(Offset)の形に変換する。クラスタインデックス(Cluster Idx)は、論理アドレス空間内の位置をそれぞれ指定する複数のクラスタ内の特定の一つを指定する識別子(クラスタ番号)を示す。オフセットは、このクラスタ内のアクセス対象セクタの位置を示す。例えば、1クラスタが8セクタから構成される場合には、論理アドレス([31:0])の下位3ビット([2:0])がオフセットとして使用され、論理アドレス([31:0])の上位29ビット([31:3])がアクセス対象の特定クラスタを指定するためのクラスタインデックスとして使用される。
【0068】
さらに、L2Pテーブルキャッシュの各キャッシュエントリ(つまり、各キャッシュライン)に含まれる物理アドレスの数がNAND型フラッシュメモリ5のアクセスに都合のよい数になるように、コントローラ4は、クラスタインデックス([31:3])を、リージョンインデックス(Region Idx)とリージョンオフセット(Region Offset)の形に変換する。
【0069】
リージョンインデックスは、論理アドレス([31:0])によって表現される論理アドレス空間を分割することによって得られる複数の論理アドレス範囲(複数のリージョン)内の一つの論理アドレス範囲(一つのリージョン)を示す。リージョンオフセットは、各リージョン(各論理アドレス範囲)のサイズ、つまり各リージョンに含まれるクラスタの数を示す。
【0070】
L2Pテーブルキャッシュ31の各キャッシュエントリには一つのリージョン(一つのリージョンインデックス)が割り当てられ、各キャッシュエントリのサイズは、各リージョンに含まれるクラスタの数と同数の物理アドレスを格納するサイズに設定される。
【0071】
各リージョン(各論理アドレス範囲)のサイズは、上述の並列単位の構成等を考慮して決定されてもよい。例えば、各リージョンのサイズは、これに限定されないが、例えば、128個のクラスタを含むサイズに決定されてもよい。
【0072】
この場合、L2Pテーブルキャッシュの各キャッシュエントリのサイズは、その論理アドレスが連続する128個のクラスタに対応する128個の物理アドレスを格納するサイズに設定される。各キャッシュエントリは128個の物理アドレスを格納するので、一つのクラスタに対応する物理アドレスが4バイトのサイズを有するならば、各キャッシュエントリのサイズは512バイト(=4バイト×128)となる。
【0073】
各リージョンに属する128個の論理アドレスはNAND型フラッシュメモリ5の128個の物理記憶位置にそれぞれマッピングされ、128個の論理アドレスに対応する128個のクラスタ(128個の4KBデータ部)はNAND型フラッシュメモリ5のこれら128個の物理記憶位置にそれぞれ書き込まれる。例えば、これら128個の物理記憶位置は、異なるチャンネルに接続された幾つかのNAND型フラッシュメモリチップに、つまり上述の並列単位を構成する複数のブロックに、分散されてもよい。そして、これら128個の物理記憶位置を示す128個の物理アドレスが、これら128個の論理アドレスにそれぞれマッピングされる。
【0074】
各リージョンが128個のクラスタを含む場合には、クラスタインデックス([31:3])の下位7ビット([9:3])がリージョンオフセットとして使用され、クラスタインデックス([31:3])の上位22ビット([31:10])がリージョンインデックスとして使用される。
【0075】
L2Pテーブルキャッシュ31はN+1個のキャッシュエントリ(N+1個のキャッシュライン)を含む。ここで、N+1は、全リージョンの数(=(M+1))よりも少なくてもよい。L2Pテーブルキャッシュ31の各キャッシュエントリに対応するタグフィールドは、どのリージョンのアドレス変換データ(128個の物理アドレス)がそのキャッシュエントリに格納されているかを示す。例えば、あるキャッシュエントリに関連づけられた“0”のタグフィールドは、リージョン番号=0のリージョンに対応するアドレス変換データがこのキャッシュエントリに格納されていることを示し、あるキャッシュエントリに関連づけられた“2”のタグフィールドは、リージョン番号=2のリージョンに対応するアドレス変換データがこのキャッシュエントリに格納されていることを示す。
【0076】
L2Pテーブルキャッシュ31の各キャッシュエントリは、リージョンオフセット=+0に対応するフィールド、リージョンオフセット=+1に対応するフィールド、リージョンオフセット=+2に対応するフィールド、リージョンオフセット=+3に対応するフィールド、…、リージョンオフセット=+127に対応するフィールドを含む。
【0077】
例えば、リージョン番号=0のリージョンに属する最初の論理アドレスに対応するデータが、
図5にデバイスイメージとして示されているように、デバイス(NAND型フラッシュメモリチップ)#1の物理記憶位置(クラスタa)に書き込まれている場合には、このリージョンに対応するアドレス変換データ内のリージョンオフセット=+0に対応するフィールドは、デバイス(NAND型フラッシュメモリチップ)#1の物理記憶位置(クラスタa)を示す物理アドレスを含む。また、リージョン番号=0のリージョンに属する2番目の論理アドレスに対応するデータが、
図5にデバイスイメージとして示されているように、デバイス(NAND型フラッシュメモリチップ)#2の物理記憶位置(クラスタa)に書き込まれている場合には、このリージョンに対応するアドレス変換データ内のリージョンオフセット=+1に対応するフィールドは、デバイス(NAND型フラッシュメモリチップ)#2の物理記憶位置(クラスタa)を示す物理アドレスを含む。同様に、リージョン番号=0のリージョンに属する3番目の論理アドレスに対応するデータが、
図5にデバイスイメージとして示されているように、デバイス(NAND型フラッシュメモリチップ)#1の物理記憶位置(クラスタb)に書き込まれている場合には、このリージョンに対応するアドレス変換データ内のリージョンオフセット=+2に対応するフィールドは、デバイス(NAND型フラッシュメモリチップ)#1の物理記憶位置(クラスタb)を示す物理アドレスを含む。
【0078】
なお、「Not Assined」と記載されているフィールドは、このフィールドに対応する論理アドレスのデータがNAND型フラッシュメモリ5にまだ書き込まれていないことを表している。
【0079】
論理物理アドレス変換処理では、コントローラ4は、L2Pテーブルキャッシュ31の各キャッシュエントリに対応するタグフィールドを参照して、ホスト2によって指定された論理アドレスに対応するアドレス変換データ、つまり、この論理アドレスのリージョンインデックスに対応するアドレス変換データが、L2Pテーブルキャッシュ31に存在するか否かを判定する(Translate Cache Check)(ステップS21)。
【0080】
この論理アドレスのリージョンインデックスに対応するアドレス変換データがL2Pテーブルキャッシュ31に存在するならば(hit)、コントローラ4は、L2Pテーブルキャッシュ31内のこのアドレス変換データから、ホスト2によって指定された論理アドレスに対応する物理アドレスを取得する。この物理アドレスは、この論理アドレスのデータが格納されているNAND型フラッシュメモリ5の物理記憶位置を示す。
【0081】
より詳しくは、コントローラ4は、物理アドレスを取得するために以下の処理を行う。
【0082】
コントローラ4は、まず、この論理アドレスのリージョンインデックスに対応するアドレス変換データが存在するL2Pテーブルキャッシュ31内のキャッシュエントリを示すポインタ(Logical to Physical Translate Array Pointer)を取得する。このポインタは、このキャッシュエントリが格納されているDRAM6のメモリ領域の先頭アドレスを示す。このキャッシュエントリ内のアドレス変換データは128個のオフセット要素(つまり128個のクラスタに対応する128個の物理アドレス)を含む。したがって、コントローラ4は、このポインタによって指定されるこれら128個のオフセット要素(128個の物理アドレス)の中から、リージョンオフセット(Region Offset)の値に対応する一つのオフセット要素(一つの物理アドレス)を特定する。そして、コントローラ4は、この特定されたオフセット要素(物理アドレス)にオフセット(Offset)を加えることによって、ホスト2によって指定された論理アドレスのデータが格納されているNAND型フラッシュメモリ5の物理アドレスを得る。
【0083】
本実施形態では、L2Pテーブルキャッシュ31から物理アドレスを取得するために要する時間、つまりポインタ(Logical to Physical Translate Array Pointer)を取得するのに要する時間は、Thitとして参照される。
【0084】
L2Pテーブル7は、
図5に示されているように、全リージョン数と同数のエントリ(M+1個のエントリ)を含む。各L2Pテーブル7の各エントリにはリージョンインデックスが関連付けられている。各L2Pテーブル7の各エントリに格納されているアドレス変換データは、L2Pテーブルキャッシュ31と同様に、連続する128個の論理アドレスに対応する128個の物理アドレスを含む。
【0085】
ホスト2によって指定された論理アドレスのリージョンインデックスに対応するアドレス変換データがL2Pテーブルキャッシュ31に存在しなかったならば(Miss)、コントローラ4は、このリージョンインデックスに対応するアドレス変換データをNAND型フラッシュメモリ5上のL2Pテーブル7からリードする。
【0086】
そして、コントローラ4は、このリードしたアドレス変換データをL2Pテーブルキャッシュ31の一つのキャッシュエントリに格納するとともに、このリードしたアドレス変換データから、ホスト2によって指定された論理アドレスに対応する物理アドレスを取得する。
【0087】
より詳しくは、コントローラ4は、まず、リードされたアドレス変換データが格納されたL2Pテーブルキャッシュ31のキャッシュエントリを示すポインタ(Logical to Physical Translate Array Pointer)を取得する。コントローラ4は、このポインタによって指定されるこれら128個のオフセット要素(128個の物理アドレス)の中から、リージョンオフセット(Region Offset)の値に対応する一つのオフセット要素(物理アドレス)を特定する。そして、コントローラ4は、この特定されたオフセット要素(物理アドレス)にオフセット(Offset)を加えることによって、ホスト2によって指定された論理アドレスに対応するデータが格納されているNAND型フラッシュメモリ5の物理アドレスを得る。
【0088】
なお、L2Pテーブルキャッシュ31の全ての置換対象キャッシュエントリ候補が使用中であるならば、つまり未使用のキャッシュエントリがこれら置換対象キャッシュライン候補内に存在しないならば、コントローラ4は、置換対象キャッシュエントリ候補の中から一つの置換対象キャッシュエントリを決定する。そして、コントローラ4は、この置換対象キャッシュエントリをL2Pテーブルキャッシュ31から追い出し、そして上述のリードしたアドレス変換データをこの置換対象キャッシュエントリに格納する。L2Pテーブルキャッシュ31がフルアソシアティブ・キャッシュによって実現されている場合には、全てのキャッシュエントリが置換対象キャッシュライン候補となる。
【0089】
通常、NAND型フラッシュメモリに対するリードレイテンシは、DRAMのようなランダムアクセスメモリのリードレイテンシよりも長い。このため、L2Pテーブル7内のアドレス変換データから物理アドレスを取得するために要する時間Tmissは、上述のThitよりも長くなる。
【0090】
上述したように、L2Pテーブルキャッシュ31のキャッシュエントリ数(=N+1)はL2Pテーブル7のエントリ数(=M+1)よりも少ない。このため、L2Pテーブルキャッシュ31のキャッシュヒット率(N/M)が1を切り、平均アクセスレイテンシ(Latency:Thit×(N/M)+Tmiss×(1-N/M))は比較的大きな値となる可能性がある。
【0091】
図6は、L2Pテーブルキャッシュ31の構成例を示す。
【0092】
L2Pテーブルキャッシュ31は、第1レベルテーブル(Associative CacheID Table)31Aと、第2レベルテーブルとして機能するL2Pテーブルキャッシュ本体31Bとを含んでいてもよい。
【0093】
第1レベルテーブル(Associative CacheID Table)31Aは、N+1個のポインタ(Cache Entry Ptr)を含む。第1レベルテーブル31Aは、例えば、ダイレクトマップ・キャッシュとして実現されてもよい。この場合、0x00000000から0x000003ffまでの論理アドレス範囲に対応するリージョン番号0(=0x00000000)は、N+1個のポインタ内の最初のポインタにマッピングされる。0x00000400から0x000007ffまでの論理アドレス範囲に対応するリージョン番号1(=0x00000001)は、N+1個のポインタ内の2番目のポインタにマッピングされる。同様にして、例えば、0x00001000から0x000013ffまでの論理アドレス範囲に対応するリージョン番号4(=0x00000004)は、N+1個のポインタ内の5番目のポインタにマッピングされる。
【0094】
L2Pテーブルキャッシュ本体31Bは、N+1個のキャッシュエントリを含む。各キャッシュエントリにはタグフィールドが関連付けられている。N+1個のキャッシュエントリは、キャッシュID(CacheID)によってそれぞれ識別される。このL2Pテーブルキャッシュ本体31Bは、例えば、フルアソシアティブ・キャッシュとして実現されてもよい。
【0095】
SSD3の電源がオンされた直後、L2Pテーブルキャッシュ31のどのキャッシュエントリも空である。このため、L2Pテーブルキャッシュ31のキャッシュミスが起こり、L2Pテーブル7からリードされたアドレス変換データがL2Pテーブルキャッシュ31のキャッシュエントリに格納される。
【0096】
いま、SSD3の電源オン後、コントローラ4が、0x00001000から0x000013ffまでの論理アドレス範囲に属する論理アドレスを指定するリード要求(1番目のリード要求)、0x00001c00から0x00001fffまでの論理アドレス範囲に属する論理アドレスを指定するリード要求(2番目のリード要求)、…、0x00000000から0x000003ffまでの論理アドレス範囲に属する論理アドレスを指定するリード要求(9番目のリード要求)、という順序で、リード要求をホスト2から受信した場合を想定する。
【0097】
1番目のリード要求に対する処理: L2Pテーブルキャッシュ31のキャッシュミスが起こり、コントローラ4は、0x00001000から0x000013ffまでの論理アドレス範囲に対応するリージョン番号4のアドレス変換データをL2Pテーブル7からリードし、このリードされたアドレス変換データを、L2Pテーブルキャッシュ31の最初のキャッシュエントリ(つまり、CacheID=0x00000000に対応するキャッシュエントリ)に格納する。第1レベルテーブル(Associative CacheID Table)31Aにおいては、リージョン番号4のポインタ(Cache Entry Ptr)がCacheID=0x00000000を指し示すように、リージョン番号4のポインタ(Cache Entry Ptr)がコントローラ4によって更新される。
【0098】
2番目のリード要求に対する処理: L2Pテーブルキャッシュ31のキャッシュミスが起こり、コントローラ4は、0x00001c00から0x00001fffまでの論理アドレス範囲に対応するリージョン番号7のアドレス変換データをL2Pテーブル7からリードし、このリードされたアドレス変換データを、L2Pテーブルキャッシュ31の2番目のキャッシュエントリ(つまり、CacheID=0x00000001に対応するキャッシュエントリ)に格納する。第1レベルテーブル(Associative CacheID Table)31Aにおいては、リージョン番号7のポインタ(Cache Entry Ptr)がCacheID=0x00000001を指し示すように、リージョン番号7のポインタ(Cache Entry Ptr)がコントローラ4によって更新される。
【0099】
9番目のリード要求に対する処理: L2Pテーブルキャッシュ31のキャッシュミスが起こり、コントローラ4は、0x00000000から0x000003ffまでの論理アドレス範囲に対応するリージョン番号0のアドレス変換データをL2Pテーブル7からリードし、このリードされたアドレス変換データを、L2Pテーブルキャッシュ31の9番目のキャッシュエントリ(つまり、CacheID=0x00000008に対応するキャッシュエントリ)に格納する。第1レベルテーブル(Associative CacheID Table)31Aにおいては、リージョン番号0のポインタ(Cache Entry Ptr)がCacheID=0x00000008を指し示すように、リージョン番号0のポインタ(Cache Entry Ptr)がコントローラ4によって更新される。
【0100】
図7は、L2Pテーブルキャッシュ31と圧縮L2Pテーブルキャッシュ32とを使用した論理物理アドレス変換処理を示す。
【0101】
本実施形態では、L2Pテーブルキャッシュ31のキャッシュヒットチェックは
図6で説明した手順と同じ手順で実行される。L2Pテーブルキャッシュ31のキャッシュミスが起こった場合には、ポインタ(Logical to Physical Translate Array Pointer)を高速に取得できるようにするために、圧縮L2Pテーブルキャッシュ32の圧縮キャッシュヒットチェックが実行される。
【0102】
論理物理アドレス変換処理では、コントローラ4は、L2Pテーブルキャッシュの各キャッシュエントリに対応するタグフィールドを参照して、ホスト2によって指定された論理アドレスに対応するアドレス変換データ、つまり、この論理アドレスのリージョンインデックスに対応するアドレス変換データが、L2Pテーブルキャッシュ31に存在するか否かを判定する(Translate Cache Check)(ステップS31)。
【0103】
この論理アドレスのリージョンインデックスに対応するアドレス変換データがL2Pテーブルキャッシュ31に存在するならば(hit)、コントローラ4は、L2Pテーブルキャッシュ31内のこのアドレス変換データから、ホスト2によって指定された論理アドレスに対応する物理アドレスを取得する。
【0104】
より詳しくは、コントローラ4は、まず、この論理アドレスのリージョンインデックスに対応するアドレス変換データが存在するL2Pテーブルキャッシュ31内のキャッシュエントリを示すポインタ(Logical to Physical Translate Array Pointer)を取得する。コントローラ4は、このポインタによって指定されるこれら128個のオフセット要素(128個の物理アドレス)の中から、リージョンオフセット(Region Offset)の値に対応する一つのオフセット要素(物理アドレス)を特定する。そして、コントローラ4は、この特定されたオフセット要素(物理アドレス)にオフセット(Offset)を加えることによって、ホスト2によって指定された論理アドレスのデータが格納されているNAND型フラッシュメモリ5の物理アドレスを得る。
【0105】
ホスト2によって指定された論理アドレスのリージョンインデックスに対応するアドレス変換データがL2Pテーブルキャッシュ31に存在しなかったならば(Miss)、コントローラ4は、このアドレス変換データに対応する圧縮アドレス変換データ、つまりこのリージョンインデックスに対応する圧縮アドレス変換データが圧縮L2Pテーブルキャッシュ32に存在するか否かを判定する(圧縮キャッシュヒットチェック)(ステップS32)。
【0106】
圧縮L2Pテーブルキャッシュ32は、
図7に示すように、L2Pテーブル7のエントリの数と同数のキャッシュエントリ(M+1個のキャッシュエントリ)を含んでいてもよい。圧縮L2Pテーブルキャッシュ32の各キャッシュエントリは、128個のクラスタに対応する128個の物理アドレスを含むアドレス変換データを圧縮することによって得られる圧縮アドレス変換データ(Conpressed Array Region)を格納する。
【0107】
ホスト2によって指定された論理アドレスのリージョンインデックスに対応する圧縮アドレス変換データが圧縮L2Pテーブルキャッシュ32に存在するならば(Comphit)、コントローラ4は、圧縮L2Pテーブルキャッシュ32内のこの圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データをL2Pテーブルキャッシュ31のキャッシュエントリに格納する動作と、この非圧縮アドレス変換データから、ホスト2によって指定された論理アドレスに対応する物理アドレスを取得する動作とを実行する。
【0108】
圧縮アドレス変換データを伸張するデコード動作とこのデコード動作によって得られる非圧縮アドレス変換データをL2Pテーブルキャッシュ31のキャッシュエントリに転送する動作とを含む伸張転送動作は、デコードDMAコントローラ152によって実行することができる。
【0109】
なお、L2Pテーブルキャッシュ31の全ての置換対象キャッシュエントリ候補が使用中であるならば、つまり未使用のキャッシュエントリがこれら置換対象キャッシュライン候補内に存在しないならば、コントローラ4は、置換対象キャッシュエントリ候補の中から一つの置換対象キャッシュエントリを決定する。そして、コントローラ4は、この置換対象キャッシュエントリをL2Pテーブルキャッシュ31から追い出し、そして上述のリードしたアドレス変換データをこの置換対象キャッシュエントリに格納する。
【0110】
非圧縮アドレス変換データから、ホスト2によって指定された論理アドレスに対応する物理アドレスを取得する動作においては、コントローラ4は、まず、リードされたアドレス変換データが格納されたL2Pテーブルキャッシュ31のキャッシュエントリを示すポインタ(Logical to Physical Translate Array Pointer)を取得する。コントローラ4は、このポインタによって指定されるこれら128個のオフセット要素(128個の物理アドレス)の中から、リージョンオフセット(Region Offset)の値に対応する一つのオフセット要素(物理アドレス)を特定する。そして、コントローラ4は、この特定されたオフセット要素(物理アドレス)にオフセット(Offset)を加えることによって、ホスト2によって指定された論理アドレスのデータが格納されているNAND型フラッシュメモリ5の物理アドレスを得る。
【0111】
圧縮L2Pテーブルキャッシュ32の圧縮アドレス変換データから物理アドレスを取得するために要する時間、つまり圧縮L2Pテーブルキャッシュ32を使用してポインタ(Logical to Physical Translate Array Pointer)を取得するのに要する時間は、Tcomp_hitである。Tcomp_hitは、Thitよりも、圧縮L2Pテーブルキャッシュ32の圧縮アドレス変換データの伸張転送に要するレイテンシ(Tdecode)分だけ増加する。しかし、Tcomp_hitとThitの比は、高々1桁内に収まる程度であり、Tcomp_hitはTmissに比して遙かに短い。
【0112】
一方、ホスト2によって指定された論理アドレスのリージョンインデックスに対応する圧縮アドレス変換データが圧縮L2Pテーブルキャッシュ32に存在しないならば(CompMiss)、コントローラ4は、このリージョンインデックスに対応するアドレス変換データをNAND型フラッシュメモリ5上のL2Pテーブル7からリードする。
【0113】
そして、コントローラ4は、このリードしたアドレス変換データをL2Pテーブルキャッシュ31に格納する動作と、リードされたアドレス変換データから、ホスト2によって指定された論理アドレスに対応する物理アドレスを取得する動作と、リードされたアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを圧縮L2Pテーブルキャッシュ32に格納する動作とを実行する。
【0114】
リードされたアドレス変換データを圧縮するエンコード動作とエンコード動作によって得られる圧縮アドレス変換データを圧縮L2Pテーブルキャッシュ32に格納する動作とを含む圧縮転送は、エンコードDMAコントローラ151によって実行することができる。
【0115】
リードされたアドレス変換データから、ホスト2によって指定された論理アドレスに対応する物理アドレスを取得する動作においては、コントローラ4は、まず、リードされたアドレス変換データが格納されたL2Pテーブルキャッシュ31のキャッシュエントリを示すポインタ(Logical to Physical Translate Array Pointer)を取得する。コントローラ4は、このポインタによって指定されるこれら128個のオフセット要素(128個の物理アドレス)の中から、リージョンオフセット(Region Offset)の値に対応する一つのオフセット要素(物理アドレス)を特定する。そして、コントローラ4は、この特定されたオフセット要素(物理アドレス)にオフセット(Offset)を加えることによって、ホスト2によって指定された論理アドレスのデータが格納されているNAND型フラッシュメモリ5の物理アドレスを得る。
【0116】
なお、L2Pテーブルキャッシュ31の全ての置換対象キャッシュエントリ候補が使用中であるならば、つまり未使用のキャッシュエントリがこれら置換対象キャッシュライン候補内に存在しないならば、コントローラ4は、置換対象キャッシュエントリ候補の中から一つの置換対象キャッシュエントリを決定する。そして、コントローラ4は、この置換対象キャッシュエントリをL2Pテーブルキャッシュ31から追い出し、そして上述のリードしたアドレス変換データをこの置換対象キャッシュエントリに格納する。
【0117】
CompMissが起きた時にL2Pテーブル7内のアドレス変換データから物理アドレスを取得するために要する時間Tcomp_missは、Tmissに、圧縮L2Pテーブルキャッシュ32のヒットミス判定(圧縮キャッシュチェック)に要する時間を加えた値となる。圧縮キャッシュチェックに要する時間はわずかであるので、Tcomp_missは、Tmissに対してほとんど増加しない。
【0118】
また、圧縮転送に要する時間Tencodeは、Tdecodeとほぼ同じであり、Tcomp_missと比して十分小さい。
【0119】
圧縮L2Pテーブルキャッシュ32がSSD3の全論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持可能なサイズを有する場合、つまりM+1個のキャッシュエントリを有する場合には、M+1個のキャッシュエントリの全てに圧縮アドレス変換データが転送された後は、更新データの書き込みによってL2Pテーブル7の内容が更新されない限り、圧縮L2Pテーブルキャッシュ32のヒット率はほぼ1となる。したがって、Tcomp_missの影響は実際上無視でき、本実施形態において論理物理アドレス変換に要する平均レイテンシ(平均時間)であるTcomp_latencyは、ThitとTcomp_hitとの割合によって決定される。
【0120】
まとめると、圧縮L2Pテーブルキャッシュ32を使用しない
図5の論理物理アドレス変換処理においては、論理物理アドレス変換に要する平均レイテンシ(平均時間)であるTlatencyは、
Tlatency=Thit×(N/M)+Tmiss×(1-N/M)
となる。
【0121】
圧縮L2Pテーブルキャッシュ32がM+1個のキャッシュエントリを有する場合におけるTcomp_latencyは、
Tcomp_latency=Thit×(N’/M)+Tcomp_hit×(1-N’/M)
となる。
【0122】
ここで、N’は、M+1個のキャッシュエントリを有する圧縮L2Pテーブルキャッシュ32をDRAM6上の論理物理アドレス変換用メモリ領域に確保し且つこのメモリ領域の残りの領域をL2Pテーブルキャッシュ31として使用した場合におけるL2Pテーブルキャッシュ31のキャッシュエントリの数を示している。
【0123】
Thit=250ns,Tmiss=4μs,Tcomp_hit=1μsとしたとき、L2Pテーブルキャッシュ31のヒット率が40%であった場合のTlatencyは2.5μsである。一方、Tcomp_latencyについては、たとえ、L2Pテーブルキャッシュ31が存在しないと仮定しても(つまり、(N’/M)=0とし、DRAM6上に圧縮L2Pテーブルキャッシュ32のみを確保したとしても)、Tcomp_latencyは1μsとなり、Tcomp_latency<Tlatencyの結果を得ることができる。
【0124】
図8は、L2Pテーブルキャッシュ31のキャッシュヒットが起きた時に実行されるキャッシュ制御処理の処理シーケンスを示す。
【0125】
ホスト2は、リードコマンドをSSD3に送出する(ステップS101)。コントローラ4がホスト2からのリードコマンドを受信した時、コントローラ4は、L2Pテーブルキャッシュ31のキャッシュヒットチェックを実行し(ステップS102)、このキャッシュヒットチェックの結果に基づいて、L2Pテーブルキャッシュ31が、キャッシュヒット、キャッシュミスのいずれの状態であるかを判定する(ステップS103)。
【0126】
キャッシュヒットとは、リードコマンドによって指定された論理アドレスに対応する物理アドレスを含むアドレス変換データがL2Pテーブルキャッシュ31に存在する状態を意味する。キャッシュミスとは、リードコマンドによって指定された論理アドレスに対応する物理アドレスを含むアドレス変換データがL2Pテーブルキャッシュ31に存在しない状態を意味する。
【0127】
キャッシュヒットの場合には、コントローラ4は、L2Pテーブルキャッシュ31をリードアクセスして、このアドレス変換データをL2Pテーブルキャッシュ31からリードする(ステップS104、S105)。そして、コントローラ4は、このアドレス変換データから、リードコマンド内の論理アドレスに対応する物理アドレスを取得する。なお、コントローラ4は、このアドレス変換データ内のこの物理アドレスだけをL2Pテーブルキャッシュ31からリードすることもできる。
【0128】
そして、コントローラ4は、この物理アドレスを使用してNAND型フラッシュメモリ5をリードアクセスして、リードコマンド内の論理アドレスによって指定されるユーザデータをNAND型フラッシュメモリ5からリードする(ステップS106、S107)。コントローラ4は、ユーザデータをホスト2に返す(ステップS108)。
【0129】
図9は、L2Pテーブルキャッシュ31のキャッシュミスが起こり且つ圧縮L2Pテーブルキャッシュ32のキャッシュヒットが起きた時に実行されるキャッシュ制御処理の処理シーケンスを示す。
【0130】
ホスト2は、リードコマンドをSSD3に送出する(ステップS111)。コントローラ4がホスト2からのリードコマンドを受信した時、コントローラ4は、L2Pテーブルキャッシュ31のキャッシュヒットチェックを実行し(ステップS112)、このキャッシュヒットチェックの結果に基づいて、L2Pテーブルキャッシュ31が、キャッシュヒット、キャッシュミスのいずれの状態であるかを判定する(ステップS113)。
【0131】
キャッシュミスの場合には、コントローラ4は、圧縮L2Pテーブルキャッシュ32のキャッシュヒットチェック(圧縮キャッシュヒットチェック)を実行し(ステップS114)、この圧縮キャッシュヒットチェックの結果に基づいて、圧縮L2Pテーブルキャッシュ32が、キャッシュヒット(圧縮キャッシュヒット)、キャッシュミス(圧縮キャッシュミス)のいずれの状態であるかを判定する(ステップS115)。
【0132】
圧縮キャッシュヒットとは、リードコマンドによって指定された論理アドレスに対応する物理アドレスを含むアドレス変換データを圧縮することによって得られる圧縮アドレス変換データが圧縮L2Pテーブルキャッシュ31に存在する状態を意味する。圧縮キャッシュミスとは、この圧縮アドレス変換データが圧縮L2Pテーブルキャッシュ31に存在しない状態を意味する。圧縮L2Pテーブルキャッシュ31がM+1個のキャッシュエントリを有する構成であったとしても、圧縮L2Pテーブルキャッシュ31のこれら全てのキャッシュエントリに圧縮アドレス変換データがキャッシュされるまでは、圧縮キャッシュミスが起こりうる。
【0133】
また、L2Pテーブルキャッシュ31においては、必要に応じてキャッシュエントリがL2Pテーブルキャッシュ31から追い出される。このため、L2Pテーブルキャッシュ31のキャッシュミスが起こり、且つ圧縮L2Pテーブルキャッシュ32のキャッシュヒット(圧縮キャッシュヒット)が起こる、というケースがある。
【0134】
この場合、コントローラ4は、圧縮L2Pテーブルキャッシュ32をリードアクセスして、この圧縮アドレス変換データを圧縮L2Pテーブルキャッシュ32からリードする(ステップS116、S117)。この場合、圧縮アドレス変換データを圧縮L2Pテーブルキャッシュ32からリードする動作、圧縮アドレス変換データを伸張するデコード動作、このデコード動作によって得られる非圧縮アドレス変換データをL2Pテーブルキャッシュ31のキャッシュエントリに転送する動作は、デコードDMAコントローラ152によって実行することができる。そして、コントローラ4は、L2Pテーブルキャッシュ31のキャッシュエントリに転送された非圧縮アドレス変換データから、リードコマンド内の論理アドレスに対応する物理アドレスを取得する。
【0135】
そして、コントローラ4は、この物理アドレスを使用してNAND型フラッシュメモリ5をリードアクセスして、リードコマンド内の論理アドレスによって指定されるユーザデータをNAND型フラッシュメモリ5からリードする(ステップS118、S119)。コントローラ4は、ユーザデータをホスト2に返す(ステップS120)。
【0136】
図10は、L2Pテーブルキャッシュ31のキャッシュミスが起こり且つ圧縮L2Pテーブルキャッシュ32のキャッシュミスが起きた時に実行されるキャッシュ制御処理の処理シーケンスを示す。
【0137】
ホスト2は、リードコマンドをSSD3に送出する(ステップS131)。コントローラ4がホスト2からのリードコマンドを受信した時、コントローラ4は、L2Pテーブルキャッシュ31のキャッシュヒットチェックを実行し(ステップS132)、このキャッシュヒットチェックの結果に基づいて、L2Pテーブルキャッシュ31が、キャッシュヒット、キャッシュミスのいずれの状態であるかを判定する(ステップS133)。
【0138】
キャッシュミスの場合には、コントローラ4は、圧縮L2Pテーブルキャッシュ32のキャッシュヒットチェック(圧縮キャッシュヒットチェック)を実行し(ステップS134)、この圧縮キャッシュヒットチェックの結果に基づいて、圧縮L2Pテーブルキャッシュ32が、キャッシュヒット(圧縮キャッシュヒット)、キャッシュミス(圧縮キャッシュミス)のいずれの状態であるかを判定する(ステップS135)。
【0139】
圧縮キャッシュミスの場合、コントローラ4は、NAND型フラッシュメモリ5内のL2Pテーブル7をリードアクセスして、この論理アドレスに対応する物理アドレスを含むアドレス変換データをL2Pテーブル7からリードする動作と、リードされたアドレス変換データをL2Pテーブルキャッシュ31に格納する動作と、リードされたアドレス変換データから、リードコマンド内の論理アドレスに対応する物理アドレスを取得する動作と、リードされたアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを圧縮L2Pテーブルキャッシュ32に格納する動作とを実行する(ステップS136、S137)。アドレス変換データをL2Pテーブル7からリードする動作と、リードされたアドレス変換データを圧縮するエンコード動作と、エンコード動作によって得られる圧縮アドレス変換データを圧縮L2Pテーブルキャッシュ32に格納する動作とを含む圧縮転送は、エンコードDMAコントローラ151によって実行することができる。
【0140】
そして、コントローラ4は、この物理アドレスを使用してNAND型フラッシュメモリ5をリードアクセスして、リードコマンド内の論理アドレスによって指定されるユーザデータをNAND型フラッシュメモリ5からリードする(ステップS138、S139)。コントローラ4は、ユーザデータをホスト2に返す(ステップS140)。
【0141】
図11は、L2Pテーブル7とL2Pテーブルキャッシュ31と圧縮L2Pテーブルキャッシュ32との関係と、DRAM6上におけるL2Pテーブルキャッシュ31および圧縮L2Pテーブルキャッシュ32の配置例を示す。
【0142】
上述したように、L2Pテーブルキャッシュ31と圧縮L2Pテーブルキャッシュ32の双方のキャッシュミスが起きた場合には、L2Pテーブル7からL2Pテーブルキャッシュ31および圧縮L2Pテーブルキャッシュ32の双方にアドレス変換データが転送される。この場合、L2Pテーブル7からL2Pテーブルキャッシュ31へのアドレス変換データの転送においては、このアドレス変換データは、圧縮されずに、非圧縮の状態でL2Pテーブルキャッシュ31のキャッシュエントリに格納される。一方、L2Pテーブル7から圧縮L2Pテーブルキャッシュ32へのアドレス変換データの転送においては、このアドレス変換データは、エンコードDMAコントローラ151による圧縮転送によって圧縮され、圧縮されたアドレス変換データが圧縮L2Pテーブルキャッシュ32のキャッシュエントリに格納される。
【0143】
図11の右部は、DRAM6上におけるL2Pテーブルキャッシュ31および圧縮L2Pテーブルキャッシュ32の配置例を示している。
【0144】
コントローラ4は、圧縮L2Pテーブルキャッシュ32が、SSD3の全論理アドレスに対する論理物理アドレス変換のための圧縮アドレス変換データを保持可能な最大サイズを有するように、DRAM6上の論理物理アドレス変換用メモリ領域(L2P Cache RAM)に圧縮L2Pテーブルキャッシュ32用の領域61を確保し、L2P Cache RAMの残りの領域62をL2Pテーブルキャッシュ31として使用する。
【0145】
圧縮L2Pテーブルキャッシュ32は、L2Pテーブル7のエントリの数と同数のキャッシュエントリを含む。L2Pテーブル7の最終エントリのリージョン番号がRegionMaxによって示される場合には、圧縮L2Pテーブルキャッシュ32の最終キャッシュエントリのリージョン番号もRegionMaxによって示される。つまり、圧縮L2Pテーブルキャッシュ32はRegionMax+1個のキャッシュエントリを含み、領域61は、これらRegionMax+1個のキャッシュエントリに対応する圧縮アドレス変換データ(Compressed L2P Map Data)の格納のために使用される。
【0146】
L2Pテーブルキャッシュ31の最終キャッシュエントリのキャッシュIDは、Max Cache ID’によって表される。L2P Cache RAM全体をL2Pテーブルキャッシュ31として使用した場合のL2Pテーブルキャッシュ31の最終キャッシュエントリのキャッシュIDを、Max Cache IDとすると、Max Cache ID’<Max Cache IDの関係となる。
【0147】
つまり、L2Pテーブルキャッシュ31はMax Cache ID’+1個のキャッシュエントリを含み、領域62は、これらMax Cache ID’+1個のキャッシュエントリに対応するアドレス変換データ(L2P Translate Cache Line Data)と、Max Cache ID’+1個のタグ(Cache Tag)の格納のために使用される。
【0148】
L2P Cache RAMの容量は、以下の式によって表すことができる。
L2P Cache RAM=MaxCacheId’× (size of (CacheLine)+size of (CacheTag))+RegionMax×size of (Compressed L2P Address Map Line)
ここで、RegionMax×size of (Compressed L2P Address Map Line)は、圧縮L2Pテーブルキャッシュ32のサイズ、つまり領域61のサイズを示す。MaxCacheId’× (size of (CacheLine)+size of (CacheTag))は、L2Pテーブルキャッシュ31のサイズ、つまり領域62のサイズを示す。
【0149】
一方で、L2P Cache RAMをMaxCacheIdで表すと、
L2P Cache RAM=MaxCacheId×(size of (CacheLine)+size of (CacheTag))なので、Max Cache ID’は、以下の式によって表すことができる。
Max Cache Id’=Max Cache Id-RegionMax×size of (Compressed L2P Address Map Line)/(size of (CacheLine)+size of (CacheTag))
圧縮率CompressRateは、size of (Compressed L2P Address Map Line)/size of (CacheLine)を示すので、size of (CacheLine) >> size of (CacheTag)が成り立つならば、MaxCacheIdは次のように近似できる。
Max Cache Id’ ≒ Max Cache Id-RegionMax×CompressRate
このように、L2P Cache RAM上に固定サイズ(最大サイズ)の圧縮L2Pテーブルキャッシュ32を割り当て、その余りにL2Pテーブルキャッシュ31を確保する構成においては、L2P Cache RAMのサイズが
図11のように固定であるならば、必然的にL2Pテーブルキャッシュ31のサイズが小さくなる。
【0150】
このため、圧縮L2Pテーブルキャッシュ32が圧縮アドレス変換データでまだ満たされていない状態であっても、L2Pテーブルキャッシュ31のキャッシュエントリの追い出しが起こりやすくなり、この結果、L2Pテーブルキャッシュ31のキャッシュヒット率が低下される場合がある。
【0151】
そこで、本実施形態では、コントローラ4は、可変長の圧縮L2Pテーブルキャッシュ32をL2P Cache RAM上に割り当てる。
【0152】
より詳しくは、コントローラ4は、圧縮L2Pテーブルキャッシュ32にキャッシュされる圧縮アドレス変換データの量が増加されるに連れて圧縮L2Pテーブルキャッシュ32のサイズが動的に増えるように、圧縮L2Pテーブルキャッシュ32のサイズを初期サイズから上述の最大サイズまで変更し、且つ圧縮L2Pテーブルキャッシュ32のサイズが上述の最大サイズに増加されるまでは(つまり、圧縮L2Pテーブルキャッシュ32のほぼ全体が圧縮アドレス変換データで満たされるまでは)、領域61内の未使用領域61aと領域62の双方をL2Pテーブルキャッシュ31として使用する。
【0153】
これにより、L2Pテーブルキャッシュ31のサイズを比較的大きくすることでき、圧縮L2Pテーブルキャッシュ32のほぼ全体が圧縮アドレス変換データで満たされるまでは、L2Pテーブルキャッシュ31のキャッシュエントリの追い出しを起こしに難くすることができる。この結果、L2Pテーブルキャッシュ31のキャッシュヒット率を高めることが可能となる。
【0154】
図12は、可変長の圧縮L2Pテーブルキャッシュ32を使用する場合のDRAM6上におけるL2Pテーブルキャッシュ31および圧縮L2Pテーブルキャッシュ32の配置例を示す。
【0155】
圧縮L2Pテーブルキャッシュ32のサイズは、上述したように、初期サイズから最大サイズにまで拡大される。まず、圧縮L2Pテーブルキャッシュ32のサイズは初期サイズに設定される。圧縮L2Pテーブルキャッシュ32のサイズが初期サイズである場合、圧縮L2Pテーブルキャッシュ32の最終キャッシュエントリのリージョン番号はCurrentRegionMaxによって示される。つまり、圧縮L2Pテーブルキャッシュ32はCurrentRegionMax+1個のキャッシュエントリを含み、領域61は、これらCurrentRegionMax+1個のキャッシュエントリに対応する圧縮アドレス変換データ(Compressed L2P Map Data)の格納のために使用される。
【0156】
圧縮L2Pテーブルキャッシュ32のサイズが初期サイズである場合、コントローラ4は、領域61内の領域61内の未使用領域61aと領域62の双方をL2Pテーブルキャッシュ31として使用する。
【0157】
つまり、L2Pテーブルキャッシュ31はMax Cache ID’+1個のキャッシュエントリを含むが、Max Cache ID’の値は、
図11のMax Cache ID’よりも大きくなる。領域62および未使用領域61aの双方は、Max Cache ID’+1個のキャッシュエントリに対応するアドレス変換データ(L2P Translate Cache Line Data)と、Max Cache ID’+1個のタグ(Cache Tag)の格納のために使用される。
【0158】
圧縮L2Pテーブルキャッシュ32にキャッシュされる圧縮アドレス変換データの量が増え、CurrentRegionMax+1個のキャッシュエントリが圧縮アドレス変換データでほぼ満たされると、CurrentRegionMaxの値は増加される。CurrentRegionMaxはRegionMaxまで増加可能である。CurrentRegionMaxがRegionMaxに達した時の圧縮L2Pテーブルキャッシュ32のサイズが上述の最大サイズである。
【0159】
CurrentRegionMaxの値の増加に伴い、Max Cache ID’の値は減少される。
【0160】
圧縮L2Pテーブルキャッシュ32のサイズは、初期サイズから最大サイズまで、段階的に増加されてもよい。例えば、コントローラ10は、最初の10個程度のキャッシュエントリを含む圧縮L2Pテーブルキャッシュ32を領域61上に確保し、この10個程度のキャッシュエントリが圧縮アドレス変換データでほほ埋まった時に、圧縮L2Pテーブルキャッシュ32のキャッシュエントリの数を計20個程度にまで増やしてもよい。計20個程度のキャッシュエントリが圧縮アドレス変換データでほほ埋まった時に、コントローラ4は、キャッシュエントリの数を計20個程度にまで増やしてもよい。このようにして、圧縮L2Pテーブルキャッシュ32のサイズ、つまりキャッシュエントリの数は、初期サイズから最大サイズにまで段階的に増加される。
【0161】
L2P Cache RAMの容量は、以下の式によって表すことができる。
L2P Cache RAM=MaxCacheId’×(size of (CacheLine)+size of (CacheTag))+CurrentRegionMax×size of (Compressed L2P Address Map Line)
図12でも、
図11と同じくL2P Cache RAMをMaxCacheIdで表すと、
L2P Cache RAM =MaxCacheId×(size of (CacheLine)+size of (CacheTag))なので、Max Cache ID’は、以下の式によって表すことができる。
Max Cache Id’=Max Cache Id-CurrentRegionMax×size of (Compressed L2P Address Map Line)/(size of (CacheLine) + size of (CacheTag))
ここで、
図12でも、
図11と同様に、(size of (CacheLine) + size of (CacheTag)は、L2Pテーブルキャッシュ32の一つのキャッシュエントリ(キャッシュライン)のサイズと一つのキャッシュエントリに対応するキャッシュタグのサイズとの和を示す。
【0162】
また、size of (CacheLine) >> size of (CacheTag)である条件は変わらず、圧縮率CompressRateでMax Cache ID’は、以下の式によって近似することができる。
Max Cache Id’≒ Max Cache Id-CurrentRegionMax×CompressRate
本実施形態では、CurrentRegionMax < RegionMaxとなるように、領域61の未使用領域61aをL2Pテーブルキャッシュ31として利用することによって、L2Pテーブルキャッシュ31のサイズを比較的大きくすることでき、L2Pテーブルキャッシュ31のキャッシュヒット率を高めることが可能となる。
【0163】
また、圧縮L2Pテーブルキャッシュ32の占有域は、DRAM6のアドレスが増加する方向から見て、L2Pテーブルキャッシュ31と反対側から確保される。
【0164】
つまり、圧縮L2Pテーブルキャッシュ32は、リージョン番号0x00000000に対応するキャッシュエントリからCurrentRegionMaxに対応するキャッシュエントリが、領域61と領域62との間の境界と反対側に位置する領域61の端部から境界に向けて並ぶように、領域61上に配置される。
【0165】
一方、L2Pテーブルキャッシュ31においては、Cache Tagは、領域62と領域61との間の境界と反対側に位置する領域62の端部に配置される。そして、Cache Tagに後続して、0x00000000に対応するキャッシュエントリからMax Cache ID’に対応するキャッシュエントリが配置される。
【0166】
このように、コントローラ4は、圧縮L2Pテーブルキャッシュ32として使用される領域(圧縮L2Pテーブルキャッシュ32の占有域)が、領域61の端部から領域61と領域62との間の境界に向かう方向に増加し、且つL2Pテーブルキャッシュ31として使用される領域(L2Pテーブルキャッシュ31の占有域)が、領域62の端部から領域61と領域62との間の境界に向かう方向に増加するように、L2Pテーブルキャッシュ31および圧縮L2Pテーブルキャッシュ32をDRAM6のL2P Cache RAM上に配置する。
【0167】
通常、時間経過とともにホスト2によってアクセスされる論理アドレスの範囲が拡大し、SSD3の使用容量が増加していく。本実施形態では、上述したように、圧縮L2Pテーブルキャッシュ32の占有域は、DRAM6のアドレスが増加する方向から見て、L2Pテーブルキャッシュ31と反対側から確保される。したがって、圧縮L2Pテーブルキャッシュ32内のデータ量の増加に応じて圧縮L2Pテーブルキャッシュ32のサイズを容易に拡大することができる。
【0168】
以上説明したように、本実施形態によれば、NAND型フラッシュメモリ5に格納されたL2Pテーブル7の内容の一部がL2Pテーブルキャッシュ31としてDRAM6に格納され、またL2Pテーブル7の内容を圧縮することによって得られる圧縮アドレス変換データが圧縮L2Pテーブルキャッシュ32としてDRAM6に格納される。
【0169】
そして、ホストによって指定される論理アドレスに対応する物理アドレスを含むアドレス変換データがDRAM6上のL2Pテーブルキャッシュ31に存在する場合には、L2Pテーブルキャッシュ31内のこのアドレス変換データから、ホストによって指定される論理アドレスに対応する物理アドレスが取得される。
【0170】
このアドレス変換データがL2Pテーブルキャッシュ31に存在せず且つこのアドレス変換データに対応する圧縮アドレス変換データがDRAM6上の圧縮L2Pテーブルキャッシュ32に存在する場合には、圧縮L2Pテーブルキャッシュ32内のこの圧縮アドレス変換データを伸張することによって得られる非圧縮アドレス変換データがL2Pテーブルキャッシュ31に格納する動作と、この非圧縮アドレス変換データから、ホストによって指定される論理アドレスに対応する物理アドレスを取得する動作とが実行される。
【0171】
また、このアドレス変換データがL2Pテーブルキャッシュ31に存在せず且つこの圧縮アドレス変換データが圧縮L2Pテーブルキャッシュ32に存在しない場合には、NAND型フラッシュメモリ5内のL2Pテーブル7からこのアドレス変換データをリードする動作と、リードされたアドレス変換データをL2Pテーブルキャッシュ31に格納する動作と、リードされたアドレス変換データから、ホストによって指定される論理アドレスに対応する物理アドレスを取得する動作と、リードされたアドレス変換データを圧縮することによって得られる圧縮アドレス変換データを圧縮L2Pテーブルキャッシュ32に格納する動作とが実行される。
【0172】
このように、DRAM6のようなランダムアクセスメモリ上にL2Pテーブルキャッシュ31と圧縮L2Pテーブルキャッシュ32とを配置することにより、NAND型フラッシュメモリ5内のL2Pテーブル7へのアクセスではなく、NAND型フラッシュメモリ5よりも高速アクセス可能なランダムアクセスメモリへのアクセスが行われる確率を高くすることが可能となる。よって、論理物理アドレス変換の性能を向上でき、ひいてはSSD3の性能を改善することができる。
【0173】
なお、本実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
【0174】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0175】
2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、7…論理物理アドレス変換テーブル(L2Pテーブル)、31…論理物理アドレス変換テーブルキャッシュ(L2Pテーブルキャッシュ)、32…圧縮論理物理アドレス変換テーブルキャッシュ(圧縮L2Pテーブルキャッシュ)、51…エンコードDMAコントローラ、52…デコードDMAコントローラ。