(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2021-12-17
(45)【発行日】2022-01-17
(54)【発明の名称】メモリシステム、ストレージシステム、および制御方法
(51)【国際特許分類】
G06F 3/06 20060101AFI20220106BHJP
G06F 13/10 20060101ALI20220106BHJP
G06F 13/14 20060101ALI20220106BHJP
G06F 12/10 20160101ALI20220106BHJP
G06F 12/1027 20160101ALI20220106BHJP
【FI】
G06F3/06 302A
G06F13/10 340A
G06F13/14 320H
G06F3/06 304N
G06F12/10
G06F12/1027
(21)【出願番号】P 2018174671
(22)【出願日】2018-09-19
【審査請求日】2021-03-18
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】特許業務法人スズエ国際特許事務所
(72)【発明者】
【氏名】尾西 翔平
(72)【発明者】
【氏名】齊藤 貴樹
(72)【発明者】
【氏名】長谷川 揚平
(72)【発明者】
【氏名】渡邊 幸之介
【審査官】松平 英
(56)【参考文献】
【文献】特開2018-041204(JP,A)
【文献】特開2004-139349(JP,A)
【文献】特開2014-178975(JP,A)
【文献】特開平03-088050(JP,A)
【文献】米国特許出願公開第2018/0067849(US,A1)
【文献】高下 巧磨 他,Flash SSDにおける記憶管理方式の評価 Evaluation of Memory Management Schema in Flash SSD,電子情報通信学会技術研究報告,第112巻、第237号,一般社団法人電子情報通信学会,2012年10月05日,73-78
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06
G06F 13/10
G06F 13/14
G06F 12/10
G06F 12/1027
(57)【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
論理物理アドレス変換のための多段マッピングテーブルを格納する不揮発性メモリと、
前記多段マッピングテーブルの一部をキャッシュするように構成されたキャッシュと、
前記不揮発性メモリおよび前記キャッシュを制御するように構成されたコントローラとを具備し、
前記多段マッピングテーブルは複数の階層レベルに対応する複数のテーブルを含み、各階層レベルのテーブルは複数のアドレス変換データ部分を含み、各階層レベルのテーブルに含まれる前記複数のアドレス変換データ部分の各々は各階層レベルに応じた論理アドレス範囲をカバーし、
前記コントローラは、
前記キャッシュに格納されている階層レベルそれぞれに対応するアドレス変換データ部分を参照することによって、論理物理アドレス変換のためのアドレス解決処理と、論理アドレスに対応する物理アドレスを更新するアドレス更新処理とを実行し、
前記キャッシュに格納されているアドレス変換データ部分に対する、階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度を設定し、高い優先度を有する階層レベルのアドレス変換データ部分それぞれを低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して前記キャッシュにキャッシュする動作を実行するように構成されている、メモリシステム。
【請求項2】
前記コントローラは、前記低い優先度を有する階層レベルのアドレス変換データ部分それぞれを前記高い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して置換対象に選択することによって、前記高い優先度を有する階層レベルのアドレス変換データ部分それぞれを前記低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して前記キャッシュにキャッシュするように構成されている請求項1記載のメモリシステム。
【請求項3】
前記コントローラは、前記キャッシュに格納されているアドレス変換データ部分に対する参照の偏り度合いを階層レベルごとに求め、求められた階層レベルごとの参照の偏り度合いに基づいて階層レベルごとに優先度を設定するように構成されている請求項1記載のメモリシステム。
【請求項4】
前記ホストによるライトアクセスに起因する前記キャッシュの参照傾向を無視する場合、前記コントローラは、前記アドレス更新処理において起きたキャッシュヒットを、階層レベルごとの参照の偏り度合いを示す値に反映しないように構成されている請求項1記載のメモリシステム。
【請求項5】
前記ホストによるリードアクセスに起因する前記キャッシュの参照傾向を無視する場合、前記コントローラは、前記アドレス解決処理において起きたキャッシュヒットを、階層レベルごとの参照の偏り度合いを示す値に反映しないように構成されている請求項1記載のメモリシステム。
【請求項6】
前記コントローラは、
複数のネームスペースに対応する複数の多段マッピングテーブルそれぞれの一部をキャッシュするように構成された複数のキャッシュを制御し、
前記複数のキャッシュのそれぞれについて、各キャッシュに格納されているアドレス変換データ部分に対する参照の偏り度合いを階層レベルごとに求め、
求められた階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度を設定する動作と、高い優先度を有する階層レベルのアドレス変換データ部分それぞれを低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して対応するキャッシュにキャッシュする動作とをキャッシュ毎に実行するように構成されている請求項1記載のメモリシステム。
【請求項7】
前記コントローラは、(i)前記ホストによる前記複数のネームスペースそれぞれに対するアクセスの頻度、および(ii)各キャッシュに対応する前記階層レベルごとの参照の偏り度合い、の少なくとも一方に基づいて、前記複数のキャッシュそれぞれのサイズを調整するように構成されている請求項6記載のメモリシステム。
【請求項8】
ホストに接続可能なストレージシステムであって、
複数のストレージデバイスと、
前記ホストによって指定される第1タイプの論理アドレスそれぞれと前記複数のストレージデバイスをアクセスするための第2タイプの論理アドレスそれぞれとの間のマッピングを管理する多段マッピングテーブルの一部をキャッシュするように構成されたキャッシュと、
前記複数のストレージデバイスおよび前記キャッシュを制御するように構成されたコントローラとを具備し、
前記多段マッピングテーブルは複数の階層レベルに対応する複数のテーブルを含み、各階層レベルのテーブルは複数のアドレス変換データ部分を含み、各階層レベルのテーブルに含まれる前記複数のアドレス変換データ部分の各々は各階層レベルに応じた論理アドレス範囲をカバーし、
前記コントローラは、
前記キャッシュに格納されている階層レベルそれぞれに対応するアドレス変換データ部分を参照することによって、第1タイプの論理アドレスを第2タイプの論理アドレスに変換するためのアドレス解決処理と、第2タイプの論理アドレスを更新するアドレス更新処理とを実行し、
前記キャッシュに格納されているアドレス変換データ部分に対する、階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度を設定し、高い優先度を有する階層レベルのアドレス変換データ部分それぞれを低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して前記キャッシュにキャッシュする動作を実行するように構成されている、ストレージシステム。
【請求項9】
前記コントローラは、前記低い優先度を有する階層レベルのアドレス変換データ部分それぞれを前記高い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して置換対象に選択することによって、前記高い優先度を有する階層レベルのアドレス変換データ部分それぞれを前記低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して前記キャッシュにキャッシュするように構成されている請求項8記載のストレージシステム。
【請求項10】
前記コントローラは、
複数のネームスペースに対応する複数の多段マッピングテーブルそれぞれの一部をキャッシュするように構成された複数のキャッシュを制御し、
前記複数のキャッシュのそれぞれについて、各キャッシュに格納されているアドレス変換データ部分に対する参照の偏り度合いを階層レベルごとに求め、
求められた前記階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度を設定する動作と、高い優先度を有する階層レベルのアドレス変換データ部分それぞれを低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して対応するキャッシュにキャッシュする動作とキャッシュ毎に実行するように構成されている請求項8記載のストレージシステム。
【請求項11】
前記コントローラは、(i)前記ホストによる前記複数のネームスペースそれぞれに対するアクセスの頻度、および(ii)各キャッシュに対応する前記階層レベルごとの参照の偏り度合い、の少なくとも一方に基づいて、前記複数のキャッシュそれぞれのサイズを調整するように構成されている請求項10記載のストレージシステム。
【請求項12】
論理物理アドレス変換のための多段マッピングテーブルを格納する不揮発性メモリと、前記多段マッピングテーブルの一部をキャッシュするように構成されたキャッシュとを含むメモリシステムを制御する制御方法であって、
前記多段マッピングテーブルは複数の階層レベルに対応する複数のテーブルを含み、各階層レベルのテーブルは複数のアドレス変換データ部分を含み、各階層レベルのテーブルに含まれる前記複数のアドレス変換データ部分の各々は各階層レベルに応じた論理アドレス範囲をカバーし、
前記キャッシュに格納されている階層レベルそれぞれに対応するアドレス変換データ部分を参照することによって、論理物理アドレス変換のためのアドレス解決処理と、論理アドレスに対応する物理アドレスを更新するアドレス更新処理とを実行することと、
前記キャッシュに格納されているアドレス変換データ部分に対する、階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度を設定することと、
高い優先度を有する階層レベルのアドレス変換データ部分それぞれを低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して前記キャッシュにキャッシュする動作を実行することとを具備する制御方法。
【請求項13】
前記高い優先度を有する階層レベルのアドレス変換データ部分それぞれを前記低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して前記キャッシュにキャッシュする動作を実行することは、前記低い優先度を有する階層レベルのアドレス変換データ部分それぞれを前記高い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して置換対象に選択することを含む請求項12記載の制御方法。
【請求項14】
複数のネームスペースに対応する複数の多段マッピングテーブルそれぞれの一部をキャッシュするように構成された複数のキャッシュを制御することと、
前記複数のキャッシュのそれぞれについて、各キャッシュに格納されているアドレス変換データ部分に対する参照の偏り度合いを階層レベルごとに求めることと、
求められた前記階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度を設定する動作と、高い優先度を有する階層レベルのアドレス変換データ部分それぞれを低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して対応するキャッシュにキャッシュする動作とをキャッシュ毎に実行することとをさらに具備する請求項12記載の制御方法。
【請求項15】
(i)ホストによる前記複数のネームスペースそれぞれに対するアクセスの頻度および(ii)各キャッシュに対応する前記階層レベルごとの参照の偏り度合い、の少なくとも一方に基づいて、前記複数のキャッシュそれぞれのサイズを調整することをさらに具備する請求項14記載の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、論理物理アドレス変換のようなアドレス変換を制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
このようなメモリシステムとしては、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。このようなメモリシステムにおいては、アドレス変換テーブルを使用してアドレス変換が実行される。
【0003】
また、サーバのような計算機システムにおいては、複数のストレージデバイスを備えるストレージシステムも利用されている。ストレージシステムはストレージアレイと称されることもある。
このようなストレージシステムにおいても、アドレス変換テーブルを使用してアドレス変換が実行される場合がある。
【0004】
このアドレス変換に要する時間が長くなると、メモリシステムやストレージシステムの性能の低下が引き起こされる場合がある。
【先行技術文献】
【特許文献】
【0005】
【文献】特許第6240071号公報
【文献】特許第5789660号公報
【文献】米国特許出願公開第2014/0195551号明細書
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明が解決しようとする課題は、アドレス変換に関する性能を改善することができるメモリシステム、ストレージシステム、および制御方法を提供することである。
【課題を解決するための手段】
【0007】
実施形態によれば、ホストに接続可能なメモリシステムは、論理物理アドレス変換のための多段マッピングテーブルを格納する不揮発性メモリと、前記多段マッピングテーブルの一部をキャッシュするように構成されたキャッシュと、前記不揮発性メモリおよび前記キャッシュを制御するように構成されたコントローラとを具備する。前記多段マッピングテーブルは複数の階層レベルに対応する複数のテーブルを含む。各階層レベルのテーブルは複数のアドレス変換データ部分を含む。各階層レベルのテーブルに含まれる前記複数のアドレス変換データ部分の各々は各階層レベルに応じた論理アドレス範囲をカバーする。前記コントローラは、前記キャッシュに格納されている階層レベルそれぞれに対応するアドレス変換データ部分を参照することによって、論理物理アドレス変換のためのアドレス解決処理と、論理アドレスに対応する物理アドレスを更新するアドレス更新処理とを実行する。前記コントローラは、前記キャッシュに格納されているアドレス変換データ部分に対する、階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度を設定する。前記コントローラは、高い優先度を有する階層レベルのアドレス変換データ部分それぞれを低い優先度を有する階層レベルのアドレス変換データ部分それぞれよりも優先して前記キャッシュにキャッシュする動作を実行する。
【図面の簡単な説明】
【0008】
【
図1】第1実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【
図2】第1実施形態のメモリシステム内の不揮発性メモリの構成例を示す図。
【
図3】第1実施形態のメモリシステムにおいて実行される書き込み動作を示す図。
【
図5】第1実施形態のメモリシステムにおいて使用される多段マッピングテーブル(多段論理物理アドレス変換テーブル)を示す図。
【
図6】
図5の多段マッピングテーブルの構成例を示す図。
【
図7】第1実施形態のメモリシステムにおいて多段マッピングテーブルの一部を格納するテーブルキャッシュの構成例を示す図。
【
図8】
図7のテーブルキャッシュ内の下位テーブルを参照するために使用されるタグフィールドと、
図7のテーブルキャッシュ内の上位テーブルを参照するために使用されるタグフィールドとを示す図。
【
図9】第1実施形態のメモリシステムにおいて多段マッピングテーブルの一部を格納するテーブルキャッシュの別の構成例を示す図。
【
図10】
図10のテーブルキャッシュ内の下位テーブルのマッピング情報を検索するために使用されるタグフィールドと、
図7のテーブルキャッシュ内の上位テーブルのマッピング情報を検索するために使用されるタグフィールドとを示す図。
【
図11】テーブルキャッシュに適用される置き換え動作の例を示す図。
【
図12】多段マッピングテーブルの各階層レベルによってカバーされる論理アドレスの範囲と、各階層レベルのキャッシュヒットが起きた場合に記憶メディア(不揮発性メモリ)がアクセスされる回数とを示す図。
【
図13】上位テーブル、下位テーブルという順序で、マッピング情報を不揮発性メモリからテーブルキャッシュにリフィルする動作を示す図。
【
図14】一つの上位テーブルセグメントによってカバーされる狭い論理アドレス範囲のみがホストによってアクセスされるケース(狭域アクセス)を示す図。
【
図15】一つの上位テーブルセグメントによってカバーされる狭い論理アドレス範囲と別の一つの上位テーブルセグメントによってカバーされる狭い論理アドレス範囲とがホストによってアクセスされるケース(狭域アクセス)を示す図。
【
図16】複数の上位テーブルセグメントそれぞれによってカバーされる複数の論理アドレス範囲を含む広い論理アドレス範囲がホストによってランダムにアクセスされるケース(広域アクセス)を示す図。
【
図17】テーブルキャッシュを占める、上位テーブルセグメントと下位テーブルセグメントとの割合を示す図。
【
図18】テーブルキャッシュに格納されている上位テーブルセグメントに対する参照の偏り度合いが弱い場合(広域アクセスの場合)に、第1実施形態のメモリシステムにおいて設定される上位テーブル優先度(高優先度)および下位テーブル優先度(低優先度)を示す図。
【
図19】高優先度を有する上位テーブルセグメントそれぞれを下位テーブルセグメントよりも優先的にテーブルキャッシュにキャッシュする動作を示す図。
【
図20】テーブルキャッシュに格納されている上位テーブルセグメントに対する参照の偏り度合いに応じて、多段マッピングテーブルの各階層レベルの優先度を動的に調整する動作を示す図。
【
図21】更新済みセグメントをテーブルキャッシュ内で管理する動作を示す図。
【
図22】更新済みセグメントをテーブルキャッシュとは異なるデータ構造によって管理する動作を示す図。
【
図23】第1実施形態のメモリシステムに含まれるキャッシュコントローラ、アクセス履歴情報管理部、および優先度調整部を示すブロック図。
【
図24】アクセス履歴情報管理部によって実行されるアクセス履歴情報更新動作を示す図。
【
図25】優先度調整部によって実行される上位テーブル優先フラグ設定動作を示す図。
【
図26】多段マッピングテーブルがより多くの階層レベルに対応するテーブルを含む場合に、テーブルキャッシュに格納されるべき複数の階層レベルのテーブルにそれぞれ設定される優先度の例を示す図。
【
図27】上位テーブル優先フラグの値によって置き換え対象の選択方法がどのように変わるかを示す図。
【
図28】第1実施形態のメモリシステムにおいて実行されるアドレス解決処理の手順を示すフローチャート。
【
図29】第1実施形態のメモリシステムにおいて実行されるリフィル処理の手順を示すフローチャート。
【
図30】第1実施形態のメモリシステムにおいて実行されるアドレス更新処理の手順を示すフローチャート。
【
図31】第1実施形態のメモリシステムにおいて実行されるフラッシュ処理の手順を示すフローチャート。
【
図32】第1実施形態のメモリシステムにおいて実行される優先度情報更新処理の手順を示すフローチャート。
【
図33】アクセス履歴情報として利用可能な様々なパラメータ(アクセスされた論理アドレス、アクセス時刻、多段マッピングテーブルの各階層のヒット回数、多段マッピングテーブルの各階層のアクセス回数、等)を示す図。
【
図34】ライトアクセスに関するアクセス傾向またはリードアクセスに関するアクセス傾向のいずれか一方を無視する処理の手順を示すフローチャート。
【
図35】第1実施形態のメモリシステムによってサポートされる複数のネームスペースそれぞれに対応する複数の領域を示す図。
【
図36】複数のネームスペースそれぞれに対応する論理アドレス空間の例を示す図。
【
図37】複数のネームスペースそれぞれに対応するテーブルキャッシュ毎に優先度情報を個別に調整するための構成例を示すブロック図。
【
図38】複数のネームスペースによって共有される多段マッピングテーブルの構成例を示す図。
【
図39】第1実施形態のメモリシステム内のキャッシュコントローラによってネームスペース毎に個別に管理されるアクセス履歴情報と優先度情報とを示す図。
【
図40】複数のネームスペース内の第1のネームスペースに対して第1実施形態のメモリシステムにおいて実行される優先度情報更新処理の手順を示すフローチャート。
【
図41】複数のネームスペース内の第2のネームスペースに対して第1実施形態のメモリシステムにおいて実行される優先度情報更新処理の手順を示すフローチャート。
【
図42】個々のネームスペースに対するアクセスの頻度に基づいて、複数のネームスペースそれぞれに対応する複数のテーブルキャッシュに割り当てるべきメモリ容量を変更する動作を示す図。
【
図43】個々のネームスペースに対するアクセスの頻度に基づいて、複数のネームスペースそれぞれに対応する複数のテーブルキャッシュに割り当てるべきメモリ容量を変更する別の動作を示す図。
【
図44】キャッシュコントローラとアクセス履歴情報管理部と優先度調整部とを含む第2実施形態のストレージシステムの構成例を示すブロック図。
【
図45】第2実施形態のストレージシステムにおいて使用されるマッピングテーブルの構成例を示す図。
【
図46】第2実施形態のストレージシステムにおいて使用される多段マッピングテーブルを示す図。
【発明を実施するための形態】
【0009】
以下、図面を参照して、実施形態を説明する。
(第1実施形態)
まず、
図1を参照して、第1実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。
このメモリシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、ソリッドステートドライブ(SSD)として実現されてもよいし、メモリカードとして実現されてもよい。以下では、このメモリシステムが、ソリッドステートドライブ(SSD)3として実現されている場合を想定する。
【0010】
情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。ホスト2は、パーソナルコンピュータやサーバ、携帯電話、撮像装置であってもよいし、タブレット、スマートフォンなどの携帯端末であってもよいし、ゲーム機器であってもよいし、カーナビゲーションシステムなどの車載端末であってもよい。
【0011】
SSD3は、ホスト2として機能する情報処理装置の外部記憶装置として使用され得る。SSD3は、情報処理装置に内蔵されてもよいし、情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
ホスト2とSSD3との間の通信には、NVM Express(NVMe)(登録商標)プロトコル、またはSerial ATA(SATA)プロトコルなどが使用される。
【0012】
SSD3は、コントローラ4、および不揮発性メモリ(不揮発性半導体メモリ)として動作するNAND型フラッシュメモリ5を備える。NAND型フラッシュメモリ5は、限定されないが、複数のNAND型フラッシュメモリチップを含んでいてもよい。NAND型フラッシュメモリ5は、2次元構造のフラッシュメモリであってもよいし、3次元構造のフラッシュメモリであってもよい。
【0013】
NAND型フラッシュメモリ5は、ユーザデータ7と、多段マッピングテーブル(multi-level mapping table)8とを格納するために使用される。
多段マッピングテーブル8は、ホスト2によって指定される論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを管理するための多段論理物理アドレス変換テーブルである(multi-level logical-to-physical address translation table)である。
【0014】
多段マッピングテーブル8は階層構造を有するマッピングテーブルであり、階層化された複数のテーブルを含む。多段マッピングテーブル8の階層レベルの数、つまり多段マッピングテーブル8に含まれるテーブルの数は、限定されないが、2つであってもよいし、3つであってもよいし、4つ以上であってもよい。つまり、多段マッピングテーブル8は複数の階層レベルに対応する複数のテーブルを含む。各階層レベルのテーブルは複数のアドレス変換データ部分を含む。各階層レベルのテーブルに含まれる複数のアドレス変換データ部分の各々は、その階層レベルに応じた論理アドレス範囲をカバーする。
【0015】
図1では、多段マッピングテーブル8に含まれるテーブルの数が3つである場合が例示されている。この場合、多段マッピングテーブル8は、下位テーブル81、上位テーブル82、および最上位テーブル83を含む。
コントローラ4は、多段マッピングテーブル8を使用して、論理アドレスそれぞれとこれら論理アドレスそれぞれに対応するユーザデータが格納されているNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を所定管理サイズ単位で管理する。下位テーブル81は、ユーザデータが書き込まれているNAND型フラッシュメモリ5内の物理アドレスを管理するために使用される。上位テーブル82は、下位テーブル81に含まれるアドレス変換データ部分それぞれが書き込まれているNAND型フラッシュメモリ5内の物理アドレスを管理するために使用される。最上位テーブル83は、上位テーブル82に含まれるアドレス変換データ部分それぞれが書き込まれているNAND型フラッシュメモリ5内の物理アドレスを管理するために使用される。
【0016】
論理アドレスとしては、通常、論理ブロックアドレス(LBA)が使用される。本実施形態では、ホスト2から受信した書込み要求(ライトコマンド)に応じてNAND型フラッシュメモリ5へ書き込まれるデータをユーザデータという。
NAND型フラッシュメモリ5は、メモリセルアレイを有する1以上のNAND型フラッシュメモリチップを有する。メモリセルアレイは、マトリクス状に配列された複数のメモリセルを有する。NAND型フラッシュメモリ5のメモリセルアレイは、
図2に示されているように、複数のブロックB0~Bj-1を含む。ブロックB0~Bj-1は、消去動作の単位として機能する。つまり、ブロックB0~Bj-1の各々は、データを消去する単位である。
【0017】
ブロックB0~Bj-1の各々は、ページP0、P1、…Pk-1を含む。各ページは、同一ワード線に接続された複数のメモリセルを含む。NAND型フラッシュメモリ5においては、データのリードおよびデータのライトはページ単位で実行される。つまり、ページP0、P1、…Pk-1の各々は、データをリードおよびライトする単位である。
【0018】
図1において、コントローラ4は、NAND型フラッシュメモリ5に電気的に接続されており、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして動作する。このコントローラ4は、System-on-a-chip(SoC)のような回路によって実現されてもよい。
【0019】
SSD3は、さらに、ランダムアクセスメモリ(RAM)6を含んでいてもよい。このRAM6はダイナミックRAM(DRAM)であってもよいし、スタティックRAM(SRAM)であってもよい。RAM6がSRAMである場合には、RAM6はコントローラ4に内蔵されていてもよい。
【0020】
コントローラ4は、ホスト2からライト要求(ライトコマンド)およびリード要求(リードコマンド)のような様々な要求を受信し、受信したライト要求またはリード要求に応じて、ホスト2とRAM6との間のデータ転送、およびRAM6とNAND型フラッシュメモリ5との間のデータ転送を行う。
【0021】
RAM6は、ホスト2から受信したデータ、およびNAND型フラッシュメモリ5から読み出したデータを一時的に格納する領域(バッファ)として使用される。さらに、RAM6はSSD3の内部処理用の作業領域としても使用される。
なお、SSD3は、ホスト2によって提供されるホストメモリ上の領域(デバイス使用領域)を使用してもよいし、このデバイス使用領域とRAM6の両方を使用してもよい。デバイス使用領域は、HMB(Host Managed Buffer)であってもよい。
【0022】
ホスト2から受信されるライト要求およびリード要求の各々には、論理アドレス、データ長、およびデータ属性などが含まれる。ライト要求に含まれる論理アドレスはデータが書き込まれるべき論理アドレス空間内の位置を指定し、リード要求に含まれる論理アドレスはデータが読み出されるべき論理アドレス空間内の位置を指定する。データ長は、書き込むべきデータ(または読み出すべきデータ)の長さを示す。
【0023】
コントローラ4がライト要求をホスト2から受信した場合、コントローラ4は、ホスト2から転送されるデータをRAM6に一時的に格納する。そして、コントローラ4は、このデータをNAND型フラッシュメモリ5内の利用可能な物理記憶位置に書き込む。コントローラ4がリード要求をホスト2から受信した場合、コントローラ4は、受信したリード要求によって指定された論理アドレスに対応するデータをNAND型フラッシュメモリ5から読み出す。そして、コントローラ4は、この読み出したデータをRAM6に一時的に格納し、そしてこの読み出したデータをホスト2に転送する。
【0024】
コントローラ4は、NAND型フラッシュメモリ5のデータ管理とNAND型フラッシュメモリ5のブロック管理とを実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。
データ管理には、(1)論理アドレスそれぞれと物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)NAND型フラッシュメモリ5の制約(例えば、ページ単位のリード/ライト動作とブロック単位の消去動作)とを隠蔽するための処理、等が含まれる。本実施形態では、論理アドレスと物理アドレスとの間のマッピングの管理は、論理物理アドレス変換のための多段マッピングテーブル8を用いて実行される。
【0025】
ある論理アドレスに対応する物理アドレスは、この論理アドレスに対応するデータが実際に書き込まれたNAND型フラッシュメモリ5内の物理記憶位置を示す。
ページへのデータの書き込みは、1消去サイクル当たり1回のみ可能である。このため、コントローラ4は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、多段マッピングテーブル8を更新して、この論理アドレスに、この別の物理記憶位置を示す物理アドレスを関連付ける。
【0026】
いま、
図3に示すように、以下の3つの書き込み動作を行った場合を想定する。
(1)論理アドレス0x100に12KiBのデータを書き込み
(2)論理アドレス0x103に4KiBのデータを書き込み
(3)論理アドレス0x101に4KiBのデータを書き込み(上書き)
(1)の書き込み動作においては、コントローラ4は、例えば、物理アドレス0x000~0x002に対応するNAND型フラッシュメモリ5の物理記憶位置に12KiBのデータを書き込む。
【0027】
(2)の書き込み動作においては、コントローラ4は、例えば、物理アドレス0x003に対応するNAND型フラッシュメモリ5の物理記憶位置に4KiBのデータを書き込む。
(3)の書き込み動作においては、コントローラ4は、物理アドレス0x001ではなく、例えば、物理アドレス0x004に対応するNAND型フラッシュメモリ5の物理記憶位置に4KiBのデータを書き込む。
【0028】
したがって、ホスト2によって指定された論理アドレスと、ホスト2から受け取ったデータが実際に書き込まれたNAND型フラッシュメモリ5の物理アドレスとを対応付けるマッピングテーブルが必要となる。このマッピングテーブルは、
図4に示すように、論理アドレスそれぞれと物理アドレスそれぞれとの間の対応関係(マッピング情報)を管理する。論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングは、例えば、512バイト単位または4KiB単位で管理される。
【0029】
このマッピング情報をSSD3のパワーサイクルを跨いで維持できるようにするために、マッピングテーブル自体もNAND型フラッシュメモリ5に書き込むことが必要である。
しかし、マッピングテーブルの一部が更新される度にこのマッピングテーブル全体をNAND型フラッシュメモリ5に書き込むのはSSD3の性能および寿命の面で効率的ではない。
【0030】
また、マッピングテーブルは巨大であり、RAM6にマッピングテーブル全体を配置するためには大容量のRAMを用意することが必要になってしまう。
このため、本実施形態では、階層構造を有するマッピングテーブルを使用し、マッピングテーブルの更新部分だけをNAND型フラッシュメモリ5に書き込むことを可能にしている。上述の多段マッピングテーブル8がこの階層構造を有するマッピングテーブルである。
【0031】
図5に示されているように、多段マッピングテーブル8の下位テーブル81は、セグメントと称される複数のデータ部分(アドレス変換データ部分)#0、#1、#2、…#127、…、を含む。下位テーブル81の一つのセグメント(一つのアドレス変換データ部分)は、例えば、連続する128個のマッピング情報の集合である。換言すれば、下位テーブル81の各セグメント、つまり下位テーブル81の各アドレス変換データ部分は、例えば4KiBの刻みで連続する128個の論理アドレスにそれぞれ対応する128個の物理アドレスをマッピング情報として含む。以下では、下位テーブル81に属するセグメントは下位テーブルセグメントとしても参照される。
【0032】
多段マッピングテーブル8の上位テーブル82も、セグメントと称される複数のデータ部分(アドレス変換データ部分)#0、#1、#2、…を含む。上位テーブル82の一つのセグメント(一つのアドレス変換データ部分)は、例えば、連続する128個の下位テーブルセグメントそれぞれが格納されているNAND型フラッシュメモリ5内の128個の位置(物理記憶位置)を示す。上位テーブル82の各セグメントが128個の下位テーブルセグメントの位置を示すので、上位テーブル82に含まれるセグメントの数は下位テーブルセグメントの数の1/128である。以下では、上位テーブル82のセグメントは上位テーブルセグメントとしても参照される。
【0033】
多段マッピングテーブル8の最上位テーブル83は、複数のポインタを含む。これらポインタは、全ての上位テーブルセグメントそれぞれが格納されているNAND型フラッシュメモリ5内の位置(物理記憶位置)を示す。最上位テーブル83に含まれるポインタの総数は、上位テーブルセグメントの数と同じである。
【0034】
図6は、多段マッピングテーブル8に含まれる階層化された複数のテーブルの構成例を示す。
下位テーブル81は、ホスト2から受信されたデータが書き込まれたNAND型フラッシュメモリ5内の物理アドレスを管理するためのテーブルである。この下位テーブル81は、上述したように複数のセグメント(アドレス変換データ部分#0、アドレス変換データ部分#1、…、アドレス変換データ部分#128、…)を含んでいる。換言すれば、下位テーブル81は、これら複数のセグメント(アドレス変換データ部分#0、アドレス変換データ部分#1、…、アドレス変換データ部分#128、…)に分割されている。これら各アドレス変換データ部分のサイズは、例えば、テーブルキャッシュ61の一つのキャッシュライン(キャッシュエントリ)のサイズに一致する。
【0035】
下位テーブル81の各セグメントに含まれる物理アドレスの数は、上述したように、例えば128個である。ホスト2によって指定される論理アドレス(LBA)によってアドレス指定される最小単位が512バイトで、且つ論理アドレス(LBA)それぞれと物理アドレスそれぞれとの対応が4KiB単位で管理されるケースにおいては、下位テーブル81の一つのセグメントによってカバーされる論理アドレスの範囲は、128×8個のLBAに相当する。
【0036】
上位テーブル82は、下位テーブル81のセグメントそれぞれが書き込まれたNAND型フラッシュメモリ5内の物理アドレスを管理するためのテーブルである。上位テーブル82も、各々が1キャッシュライン分のサイズを有する複数のセグメント(アドレス変換データ部分#0、アドレス変換データ部分#1、…、アドレス変換データ部分#128、…)を含む。上位テーブル82の各セグメントに含まれる物理アドレスの数は、上述したように、例えば128個である。この場合、上位テーブル82の一つのセグメントによってカバーされる論理アドレスの範囲は、128×8×128個のLBAに相当する。
【0037】
上位テーブル82の複数のセグメント(アドレス変換データ部分#0、アドレス変換データ部分#1、…、アドレス変換データ部分#128、…)それぞれが格納されているNAND型フラッシュメモリ5内の物理アドレスは、最上位テーブル83内の複数のポインタによってそれぞれ管理される。
【0038】
最上位テーブル83全体は、例えば、SSD3が電源供給を受けたときにNAND型フラッシュメモリ5からRAM6にロードされてもよく、以降、RAM6上に常時維持されてもよい。
次に、
図6の多段マッピングテーブル8を使用して実行されるアドレス解決処理(論理物理アドレス変換)の概要を説明する。ここでは、理解しやすいように、まず、テーブルキャッシュ61を使用しない場合のアドレス解決処理を説明する。
【0039】
最初に、ホスト2によって指定された特定の論理アドレス内の上位ビットフィールド(例えば、ビット47~ビット17)を使用して最上位テーブル83内のポインタの一つが特定され、これによって上位テーブル82内の特定のセグメントの物理アドレス(NAND型フラッシュメモリ5上の位置)が得られる。この物理アドレスに基づいて、上位テーブル82内のこの特定のセグメント(特定の上位テーブルセグメント)がNAND型フラッシュメモリ5からリードされる。この特定の上位テーブルセグメントには、この特定の上位テーブルセグメントによってカバーされる論理アドレス範囲内に属する128個の下位テーブルセグメントそれぞれの物理アドレス(NAND型フラッシュメモリ5上の位置)が格納されている。
【0040】
そして、この特定の論理アドレス内の中位ビットフィールド(例えば、ビット16~ビット10)を使用してこの特定の上位テーブルセグメントが参照され、これによってこの特定の上位テーブルセグメントから一つのエントリが選択される。この選択されたエントリには、特定の下位テーブルセグメントの物理アドレス(NAND型フラッシュメモリ5上の位置)が格納されている。この物理アドレスに基づいて、この特定の下位テーブルセグメントがNAND型フラッシュメモリ5からリードされる。
【0041】
次いで、この特定の論理アドレス内の下位ビット部(例えば、ビット9~ビット3)を使用してこの特定の下位テーブルセグメントが参照され、これによってこの特定の下位テーブルセグメントから一つのエントリが選択される。この選択されたエントリには、この特定の論理アドレスに対応するユーザデータが書き込まれている物理アドレス(NAND型フラッシュメモリ5上の位置)が格納されている。
【0042】
なお、テーブルキャッシュ61を使用してアドレス解決を行う場合においては、例えば、下位テーブル、上位テーブル、という順序でテーブルキャッシュ61が検索される。
すなわち、まず、ホスト2によって指定された特定の論理アドレスに基づいて、この特定の論理アドレスに対応する目的の下位テーブルセグメントがテーブルキャッシュ61に存在するか否かが判定される。目的の下位テーブルセグメントとは、この特定の論理アドレスによって指定される論理アドレス空間内の特定の位置をカバーしている下位テーブルセグメントを意味する。
【0043】
目的の下位テーブルセグメントがテーブルキャッシュ61に存在するならば、この特定の論理アドレス内の下位ビット部(例えば、ビット9~ビット3)を使用してこの目的の下位テーブルセグメントが参照され、これによってこの特定の論理アドレスに対応するユーザデータが格納されている物理アドレス(NAND型フラッシュメモリ5上の位置)が取得される。
【0044】
目的の下位テーブルセグメントがテーブルキャッシュ61に存在しないならば、この特定の論理アドレスに基づいて、この特定の論理アドレスに対応する目的の上位テーブルセグメントがテーブルキャッシュ61に存在するか否かが判定される。目的の上位テーブルセグメントとは、そのカバー範囲が目的の下位テーブルセグメントによってカバーされる論理アドレス範囲を含む上位テーブルセグメントである。目的の上位テーブルセグメントは、目的の下位テーブルセグメントの物理アドレスを含むマッピング情報を含んでいる。
【0045】
目的の上位テーブルセグメントがテーブルキャッシュ61に存在するならば、この上位テーブルセグメントから、目的の下位テーブルセグメントが格納されている物理アドレス(NAND型フラッシュメモリ5上の位置)を取得することができる。そして、この目的の下位テーブルセグメントがNAND型フラッシュメモリ5からリードされ、テーブルキャッシュ61に格納される。
【0046】
目的の上位テーブルセグメントがテーブルキャッシュ61に存在しないならば、この特定の論理アドレスに基づいて最上位テーブル83が参照され、これによってこの目的の上位テーブルセグメントの物理アドレス(NAND型フラッシュメモリ5上の位置)が取得される。そして、この目的の上位テーブルセグメントがNAND型フラッシュメモリ5からリードされ、テーブルキャッシュ61に格納される。
【0047】
テーブルキャッシュ61に格納されたこの目的の上位テーブルセグメントから、目的の下位テーブルセグメントが格納されている物理アドレス(NAND型フラッシュメモリ5上の位置)が取得される。そして、この目的の下位テーブルセグメントがNAND型フラッシュメモリ5からリードされ、テーブルキャッシュ61に格納される。
【0048】
テーブルキャッシュ61に格納されたこの目的の下位テーブルセグメントから、ユーザデータが格納されている物理アドレス(NAND型フラッシュメモリ5上の位置)が取得され、そしてこのユーザデータがNAND型フラッシュメモリ5からリードされる。
【0049】
このように、論理物理アドレス変換のためのアドレス解決処理においては、下位テーブル、上位テーブルという順序で、テーブルキャッシュ61が検索される。
次に、
図1に示されているコントローラ4のハードウェア構成について説明する。
コントローラ4は、RAM6のメモリ領域の一部を、多段マッピングテーブル8の内容の一部をキャッシュするテーブルキャッシュ61として使用する。全ての階層レベル、つまり下位テーブル81、上位テーブル82、および最上位テーブル83それぞれをテーブルキャッシュ61に部分的にキャッシュしてもよいが、以下では、下位テーブル81および上位テーブル82を部分的にテーブルキャッシュ61にキャッシュする場合を想定する。この場合、最上位テーブル83はRAM6上にロードされ、テーブルキャッシュ61にはキャッシュされない。
【0050】
コントローラ4は、NAND型フラッシュメモリ5およびテーブルキャッシュ61を制御し、NAND型フラッシュメモリ5から読み出されたセグメント(アドレス変換データ部分)をテーブルキャッシュ61にロードする動作、テーブルキャッシュ61に格納されているセグメントを別のセグメントに置き換える動作、等を実行する。さらに、コントローラ4は、テーブルキャッシュ61に格納されている階層レベルそれぞれに対応するセグメント(ここでは、下位テーブルセグメント、上位テーブルセグメント)を参照することによって、論理物理アドレス変換のためのアドレス解決処理と、論理アドレスに対応する物理アドレスを更新するアドレス更新処理とを実行する。なお、テーブルキャッシュ61を制御するための全ての動作は、専用ハードウェア(HW)15内のキャッシュコントローラ151によって実行されてもよい。この場合、キャッシュコントローラ151は、上述のアドレス解決処理においては、目的の下位テーブルセグメントまたは目的の上位テーブルセグメントを求めてテーブルキャッシュ61を検索する処理、および目的の下位テーブルセグメントまたは目的の上位テーブルセグメントをNAND型フラッシュメモリ5からテーブルキャッシュ61に転送してマッピング情報を取得する処理、等を実行してもよい。さらに、アドレス更新処理においては、キャッシュコントローラ151は、更新対象セグメントを求めてテーブルキャッシュ61を検索する処理、更新対象セグメントのマッピング情報をテーブルキャッシュ61上で更新する処理、更新済みセグメントをNAND型フラッシュメモリ5に書き込むフラッシュ処理、等を実行してもよい。
【0051】
コントローラ4は、
図1に示されているように、ホストインタフェース11、CPU12、RAMインタフェース13、バックエンド部14、および専用ハードウェア(HW)15等を含む。これらホストインタフェース11、CPU12、RAMインタフェース13、バックエンド部14、および専用ハードウェア(HW)15は、バス10を介して相互接続される。
【0052】
ホストインタフェース11は、ホスト2からライト要求、リード要求、等の様々な要求を受信する回路として機能する。
CPU12は、ホストインタフェース11、RAMインタフェース13、バックエンド部14、および専用ハードウェア(HW)15等の動作を制御するように構成されたプロセッサである。CPU12は、図示しないROM等に格納されている制御プログラム(ファームウェア:FW)を実行することによって様々な処理を行う。このCPU12は、上述のFTLの処理と、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行してもよい。CPU12の動作は、CPU12によって実行されるファームウェアによって制御される。なお、上述のコマンド処理の一部または全部は、専用ハードウェア15によって実行してもよい。
【0053】
RAMインタフェース13は、RAM6を制御する制御回路として機能する。バックエンド部14は、符号化/復号化部141と、NANDインタフェース142とを含む。符号化/復号化部141は、例えば、エラー訂正コード(ECC)エンコーダおよびECCデコーダとして機能し得る。NAND型フラッシュメモリ5にデータを書き込むべき時、符号化/復号化部141は、書き込むべきデータをエンコード(ECCエンコード)することによってこのデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた時、符号化/復号化部141は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行う(ECCデコード)。
【0054】
NANDインタフェース142は、NAND型フラッシュメモリ5を制御するように構成されたNAND制御回路として機能する。NANDインタフェース142は、複数のチャンネルを介してNAND型フラッシュメモリ5内の複数のチップに接続されてもよい。
【0055】
専用ハードウェア15は、キャッシュコントローラ151、アクセス履歴情報管理部152、および優先度調整部153を含む。なお、これらキャッシュコントローラ151、アクセス履歴情報管理部152、および優先度調整部153は必ずしもハードウェアによって実現されていなくてもよく、これらキャッシュコントローラ151、アクセス履歴情報管理部152、および優先度調整部153のいずれか一つまたは全てはCPU12によって実行されるファームウェアによって実現されてもよい。
【0056】
キャッシュコントローラ151は、参照または更新されるべきアクセス対象のマッピング情報を含むセグメント(アドレス変換データ部分)を求めてテーブルキャッシュ61を検索し、アクセス対象のマッピング情報を含むセグメントがテーブルキャッシュ61に存在するか否かを判定する。さらに、キャッシュコントローラ151は、テーブルキャッシュ61とNAND型フラッシュメモリ5との間でのセグメントの転送を行う。
【0057】
キャッシュコントローラ151は、テーブルキャッシュ61内の上位テーブルセグメントに対する参照の偏り度合いが弱い場合、上位テーブルセグメントそれぞれを下位テーブルセグメントそれぞれよりも優先してテーブルキャッシュ61にキャッシュする動作を実行するように構成されている。
【0058】
例えば、ホスト2が、多数の上位テーブルセグメントに跨がるような広い論理アドレス範囲をランダムにアクセスするようなケース(広域アクセス)においては、テーブルキャッシュ61上の多数の上位テーブルセグメントが参照される。この場合、テーブルキャッシュ61上の各下位テーブルセグメントはほとんどヒットしない。各下位テーブルセグメントによってカバーされる論理アドレス範囲は狭いからである。一方、ホスト2が、特定の一つの上位テーブルセグメントによってカバーされる論理アドレス範囲のみをアクセスするようなケース(狭域アクセス)や、特定の幾つかの上位テーブルセグメントによってカバーされる論理アドレス範囲を交互にアクセスするケース(狭域アクセス)においては、テーブルキャッシュ61上のある限られた数の上位テーブルセグメントの各々は比較的高い頻度で参照される。
【0059】
つまり、ホスト2が狭域アクセスを行う場合には、テーブルキャッシュ61上の上位テーブルセグメントに対する参照の偏り度合いが強くなる。
一方、ホスト2が広域アクセスを行う場合には、アクセス先は多数の上位テーブルセグメントに分散される。このため、テーブルキャッシュ61上の上位テーブルセグメントに対する参照の偏り度合いは弱くなる。
【0060】
したがって、本実施形態では、テーブルキャッシュ61に複数の階層レベルに対応するセグメントそれぞれをキャッシュするケースにおいては、テーブルキャッシュ61に格納されているセグメントに対する、階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度が設定される。そして、高い優先度を有する階層レベルのセグメントそれぞれは低い優先度を有する階層レベルのセグメントそれぞれよりも優先してテーブルキャッシュ61にキャッシュされる。この場合、例えば、キャッシュされているセグメントに対する参照の偏り度合いが階層レベル毎に求められる。そして、求められた階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度が設定される。
【0061】
上述のように、テーブルキャッシュ61に上位テーブルセグメントと下位テーブルセグメントをキャッシュするケースにおいては、テーブルキャッシュ61に格納されている上位テーブルセグメントに対する参照の偏り度合いに基づいて、上位テーブル82に対応する階層レベルの優先度が設定される。広域アクセス時には、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いは弱くなる。狭域アクセス時には、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いは強くなる。
【0062】
すなわち、テーブルキャッシュ61に格納されている上位テーブルセグメントに対する参照の偏り度合いが弱い場合には、ホスト2の現在のアクセス傾向が広域アクセスであると推定される。そして、上位テーブル82に対応する階層レベルの優先度が上げられ、上位テーブルセグメントを下位テーブルセグメントよりも優先してテーブルキャッシュ61にキャッシュするための上位テーブル優先モードがイネーブルとなる。これにより、広域アクセス時のアドレス解決処理およびアドレス更新処理のために必要なより多くの上位テーブルセグメントをテーブルキャッシュ61に載せることが可能となり、テーブルキャッシュ61のヒット率を向上させることができる。
【0063】
一方、テーブルキャッシュ61に格納されている上位テーブルセグメントに対する参照の偏り度合いが強い場合には、ホスト2の現在のアクセス傾向が狭域アクセスであると推定される。そして、上位テーブル82に対応する階層レベルの優先度が下げられ、上位テーブル優先モードはディセーブルとなる。これにより、狭域アクセス時のアドレス解決処理およびアドレス更新処理のために必要なより多くの下位テーブルセグメントをテーブルキャッシュ61に載せることが可能となり、テーブルキャッシュ61のヒット率を向上させることができる。
【0064】
アクセス履歴情報管理部152は、ホスト2のアクセス傾向を類推するために必要なアクセス履歴情報を蓄積する。本実施形態では、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いを示す値がアクセス履歴情報として蓄積される。
優先度調整部153は、アクセス履歴情報に基づいて、下位テーブル81および上位テーブル82それぞれに対応する優先度を決定する。例えば、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いが閾値を下回る場合には(参照の偏り度合いが弱い)、優先度調整部153は、上位テーブル82の優先度を高く設定し、これによって上位テーブル優先モードをイネーブルにする。もし上位テーブル優先モードがイネーブルである状態において、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いが閾値以上になったならば(参照の偏り度合いが強い)、優先度調整部153は、上位テーブル82の優先度を下げ、これによって上位テーブル優先モードをディセーブルに変更する。
【0065】
次に、テーブルキャッシュ61の構成について説明する。
テーブルキャッシュ61はフルアソシアティブ・キャッシュによって実現されてもよいし、セットアソシアティブ・キャッシュによって実現されてもよい。
図7は、フルアソシアティブ・キャッシュとして実現された場合のテーブルキャッシュ61の構成例を示す。
【0066】
テーブルキャッシュ61は、キャッシュ本体と、キャッシュ管理テーブルとを含む。キャッシュ本体は多段マッピングテーブル8の下位テーブル81および上位テーブル82の双方を部分的にキャッシュするために使用される。キャッシュ管理テーブルは、キャッシュ本体を管理するために使用される。キャッシュ管理テーブルとキャッシュ本体は一体化されていてもよいし、それぞれ別個に実現されていてもよい。
【0067】
キャッシュ本体は複数のキャッシュラインL0~Lm-1を含む。キャッシュラインL0~Lm-1の各々は、下位テーブル81または上位テーブル82のセグメント(128個のマッピング情報)を格納するために使用される。各キャッシュラインのサイズは、一つのセグメントのサイズと同じである。このため、NAND型フラッシュメモリ5からテーブルキャッシュ61へのマッピング情報の転送はセグメントの単位で実行される。同様に、テーブルキャッシュ61から置換対象のデータを追い出して新たなマッピング情報に置き換える置換処理も、セグメントの単位で実行される。
【0068】
キャッシュ管理テーブルはキャッシュラインL0~Lm-1それぞれに対応するエントリを含む。各エントリは、対応するキャッシュラインの管理情報として、Tag、Type、History、Flagsを保持する。
Tagは対応するキャッシュラインにどのセグメントが格納されているかを示し、テーブルキャッシュ61のヒット/ミス判定に使用される。Typeは、対応するキャッシュラインに格納されているセグメントが属する階層レベル(ここでは、下位テーブル/上位テーブル)を示す。Historyは、最も長い間使用されなかったキャッシュラインを追い出すLRU(least recently used)ポリシー用の優先順位情報(LRU順位)を示す。なお、本実施形態に適用可能な置換アルゴリズムはLRU置換アルゴリズムのみに限定されず、他の様々な置換アルゴリズムが適用可能である。Flagsは、対応するキャッシュラインを管理するための様々なフラグを含む。
【0069】
例えば、Flagsは、バリッドフラグ、ロックフラグ、リフィル中フラグ、ダーティーフラグ、等を含んでいてもよい。
バリッドフラグは、対応するキャッシュラインが有効な(参照してよい)セグメントを格納しているか否かを示す。ロックフラグは、対応するキャッシュラインがテーブルキャッシュ61から追い出し可能か否かを示す。リフィル中フラグは、対応するキャッシュラインがリフィル中であるか否かを示す。ダーティーフラグは、対応するキャッシュラインが更新済みであるか否かを示す。
【0070】
テーブルキャッシュ61からセグメント(アドレス変換データ部分)を追い出す際には、基本的には、全てのキャッシュラインの内、LRU置換アルゴリズムなどによって最も優先度が低いと判断されたキャッシュラインに置かれているセグメント(アドレス変換データ部分)が置き換え対象として選択される。
【0071】
図8は、
図7のテーブルキャッシュ61内の下位テーブルセグメント(アドレス変換データ部分)を参照するために使用されるタグフィールドと、
図7のテーブルキャッシュ61内の上位テーブルセグメントを参照するために使用されるタグフィールドとを示す。
【0072】
以下では、ホスト2によって指定される論理アドレス(LBA)によってアドレス指定される最小単位が512バイトであり、且つ論理アドレスそれぞれと物理アドレスそれぞれとの対応が4KiB単位で管理されるケースを想定する。
ホスト2によって指定される論理アドレス(LBA)の下位3ビット(ビット2~ビット0)は4KiB内のオフセットとして使用される。
【0073】
論理アドレス(LBA)のビット9~ビット3は、各下位テーブルセグメント内の128個のマッピング情報の一つを特定するために使用される。
論理アドレス(LBA)のビット47~ビット10は下位テーブル用のセグメント番号を表す。下位テーブル用のセグメント番号は、論理アドレス(LBA)のビット47~ビット3によって表される論理アドレス空間を「下位テーブルセグメントによってカバーされる論理アドレス範囲」ごとに区切り、これらアドレス範囲に対して先頭から振った通し番号である。つまり、論理アドレス空間は、複数の下位テーブルセグメントで管理される。これら下位テーブルセグメントに付与されたシーケンシャル番号が下位テーブル用のセグメント番号である。論理アドレス(LBA)のビット47~ビット10は、ある下位テーブルセグメントのセグメント番号を表す。この論理アドレス(LBA)のビット47~ビット10は、
図7のテーブルキャッシュ61から目的の下位テーブルセグメントを検索するためのタグフィールドとして使用される。
【0074】
論理アドレス(LBA)のビット16~ビット10は、各上位テーブルセグメント内の128個のマッピング情報の一つを特定するために使用される。
論理アドレス(LBA)のビット47~ビット11は上位テーブル用のセグメント番号を表す。上位テーブル用のセグメント番号は、論理アドレス(LBA)のビット47~ビット3によって表される論理アドレス空間を「上位テーブルセグメントのカバーするアドレス範囲」ごとに区切り、これらアドレス範囲に対して先頭から振った通し番号である。論理アドレス(LBA)のビット47~ビット17は、ある上位テーブルセグメントのセグメント番号を表す。この論理アドレス(LBA)のビット47~ビット17は、
図7のテーブルキャッシュ61から目的の上位テーブルセグメントを検索するためのタグフィールドとして使用される。
【0075】
図9は、セットアソシアティブ・キャッシュとして実現された場合のテーブルキャッシュ61の構成例を示す。
図9では、テーブルキャッシュ61が8つのインデックス(Index#0~Index#7)を有する4ウェイ・セットアソシアティブ・キャッシュである場合が例示されている。各インデックスにおいて、4つのウェイの各々は、上述のTag、Type、History、Flagsを保持する。4つのウェイの各々は、さらに、実際のセグメント(128個のマッピング情報)も格納する。一つのインデックスが4つのキャッシュラインに相当する。なお、
図9のテーブルキャッシュ61の構成においても、キャッシュ管理テーブルとキャッシュ本体とを別々に管理してもよい。
【0076】
テーブルキャッシュ61からセグメントを追い出す際には、置き換え候補として選択される一つのインデックスに対応する4つのウェイの内、LRU置換アルゴリズムなどによって最も優先度が低いと判断されたウェイに置かれているセグメントが、置き換え対象データとして選択される。
【0077】
図10は、
図9のテーブルキャッシュ61内の下位テーブルセグメントを参照するために使用されるタグフィールドと、
図9のテーブルキャッシュ61内の上位テーブルセグメントを参照するために使用されるタグフィールドとを示す。
論理アドレス(LBA)のビット47~ビット10は下位テーブル用のセグメント番号を表す。ビット47~ビット10の内の下位3ビット(ビット12~ビット10)は8つのインデックスの一つを選択するために使用され、論理アドレス(LBA)のビット47~ビット13は、
図9のテーブルキャッシュ61から目的の下位テーブルセグメントを検索するためのタグフィールドとして使用される。
【0078】
論理アドレス(LBA)のビット47~ビット17は上位テーブル用のセグメント番号を表す。ビット47~ビット17の内の下位3ビット(ビット19~ビット17)は8つのインデックスの一つを選択するために使用され、論理アドレス(LBA)のビット47~ビット20は、
図9のテーブルキャッシュ61から目的の上位テーブルセグメントを検索するためのタグフィールドとして使用される。
【0079】
次に、テーブルキャッシュ61の利用方法について説明する。
以下では、テーブルキャッシュ61が4ウェイ・セットアソシアティブ・キャッシュである場合を想定する。
キャッシュコントローラ151は、例えば、アドレス解決、アドレス更新、またはフラグ操作を行う場合に、テーブルキャッシュ61を検索する。
【0080】
例えば、ホスト2からリード要求を受信した場合、キャッシュコントローラ151は、ホスト2から受信されるリード要求によって指定される論理アドレスに対応する物理アドレスを取得するためのアドレス解決処理を行う。この場合、キャッシュコントローラ151は、ホスト2から受信されるリード要求によって指定される論理アドレスに対応するマッピング情報を含むセグメント(アドレス変換データ部分)を求めてテーブルキャッシュ61を検索する。
【0081】
ホスト2からライト要求を受信した場合、コントローラ4は、ホスト2から受信されたライトデータをNAND型フラッシュメモリ5に書き込む。そして、キャッシュコントローラ151は、このライトデータが実際に書き込まれた物理アドレスがライト要求によって指定された論理アドレスにマッピングされるよう対象のマッピング情報を更新するためのアドレス更新処理を行う。この場合も、コントローラ4は、マッピング情報を更新するために、対象のマッピング情報を含むアドレス変換データ部分を求めてテーブルキャッシュ61を検索する。
【0082】
アドレス解決処理においては、例えば、下位テーブルセグメント、上位テーブルセグメントという順序で、テーブルキャッシュ61が検索される。
下位テーブルのセグメントを検索する場合、キャッシュコントローラ151は以下の動作を実行する。
まず、キャッシュコントローラ151は、ホスト2によって指定された論理アドレスからIndexとTagフィールドとを算出する。
【0083】
この場合、Indexは、以下の式で求められる。
Index=[下位テーブルのセグメント番号] mod [Indexの数]
Tagフィールドは、以下の式で求められる。
Tagフィールド=[下位テーブルのセグメント番号] / [Indexの数]
キャッシュコントローラ151は、求めたIndexに属する4つのウェイの内、求めたTagフィールドの値に一致するタグを格納しているウェイを検索する。この検索されたウェイのバリッドフラグがセットされており、且つこの検索されたウェイのTypeが求めるセグメントのテーブルタイプ(ここでは、下位テーブル)と一致するならば、キャッシュヒットと判定される。
【0084】
上位テーブルのセグメントを検索する場合、キャッシュコントローラ151は以下の動作を実行する。
まず、キャッシュコントローラ151は、ホスト2によって指定された論理アドレスからIndexとTagフィールドとを算出する。
こ場合、Indexは、以下の式で求められる。
Index=[上位テーブルのセグメント番号] mod [Indexの数]
Tagフィールドは、以下の式で求められる。
Tagフィールド=[上位テーブルのセグメント番号] / [Indexの数]
キャッシュコントローラ151は、求めたIndexに属する4つのウェイの内、求めたTagフィールドの値に一致するタグを格納しているウェイを検索する。この検索されたウェイのバリッドフラグがセットされており、且つこの検索されたウェイのTypeが求めるセグメントのテーブルタイプ(ここでは、上位テーブル)と一致するならば、キャッシュヒットと判定される。
【0085】
図11は、テーブルキャッシュ61に適用される置き換え動作の例を示す。
ここでは、テーブルキャッシュ61が4ウェイ・セットアソシアティブ・キャッシュである場合を想定する。上述したように、通常、置き換え対象データはLRU置換アルゴリズムなどによって選択される。この場合、最も優先度が低いと判断されたウェイに置かれたセグメントが置き換え対象データとして選択される。
図11では、インデックス#0の4つのウェイに格納されている4つのセグメントの一つをテーブルキャッシュ61から追い出す場合が想定されている。LRU置換アルゴリズムを使用した場合には、これら4つのウェイに格納されている4つのセグメントの内、最近参照されていないウェイに格納されているセグメントが追い出される。つまり、最終アクセスから最も時間が経過しているウェイが、NAND型フラッシュメモリ5から読み出された新たなセグメントと置き換えられる。
【0086】
図12は、多段マッピングテーブル8の各階層レベル(下位テーブルセグメント、上位テーブルセグメント、最上位テーブルセグメント)によってカバーされる論理アドレスの範囲と、各階層レベルのキャッシュヒットが起きた場合に記憶メディア(NAND型フラッシュメモリ5)がアクセスされる回数とを示す。ここで、
図12に示されるアクセスの回数は、理想的なアクセスの回数を表している。
【0087】
例えば、マッピング情報が論理アドレスと物理アドレスとの対応を4KiB刻みで管理していて、各下位テーブルセグメントがマッピング情報を128個含む場合は、下位テーブルセグメント、つまり下位テーブル81の一つのアドレス変換データ部分によってカバーされる論理アドレスの範囲は、512KiB(=4KiB×128)である。目的の下位テーブルセグメントがテーブルキャッシュ61に存在するならば(下位テーブルヒット)、キャッシュコントローラ151は、テーブルキャッシュ61からこの目的の下位テーブルセグメント内のマッピング情報を取得することができるので、この目的の下位テーブルセグメントをNAND型フラッシュメモリ5からリードする必要は無い。したがって、コントローラ4は、キャッシュコントローラ151によってテーブルキャッシュ61内のこの目的の下位テーブルセグメントから取得されたマッピング情報(物理アドレス)を使用して、ユーザデータをNAND型フラッシュメモリ5から即座にリードすることができる。NAND型フラッシュメモリ5がアクセスされる回数は1回のみである。この1回のアクセスは、ユーザデータをNAND型フラッシュメモリ5からリードするためのアクセスである。
【0088】
例えば、各下位テーブルセグメントによってカバーされる論理アドレスの範囲が512KiBで、各上位テーブルセグメントが128個のマッピング情報を含む場合、上位テーブルセグメント、つまり上位テーブル82の一つのアドレス変換データ部分によってカバーされる論理アドレスの範囲は、64MiB(=512KiB×128)である。目的の下位テーブルセグメントがテーブルキャッシュ61に存在せず(下位テーブルミス)、且つ目的の上位テーブルセグメントがテーブルキャッシュ61に存在するならば(上位テーブルヒット)、キャッシュコントローラ151は、テーブルキャッシュ61からこの目的の上位テーブルセグメント内のマッピング情報を取得することができるので、この目的の上位テーブルセグメントをNAND型フラッシュメモリ5からリードする必要は無い。したがって、キャッシュコントローラ151は、テーブルキャッシュ61内のこの目的の上位テーブルセグメントから取得したマッピング情報(物理アドレス)を使用して、目的の下位テーブルセグメントをNAND型フラッシュメモリ5からテーブルキャッシュ61に転送し、テーブルキャッシュ61に転送された目的の下位テーブルセグメントからマッピング情報を取得する。そして、コントローラ4は、キャッシュコントローラ151によって目的の下位テーブルセグメントから取得されたマッピング情報(物理アドレス)を使用して、ユーザデータをNAND型フラッシュメモリ5からリードすることができる。したがって、NAND型フラッシュメモリ5がアクセスされる回数は2回である。この2回のアクセスは、マッピングテーブル(ここで、下位テーブルセグメント)をNAND型フラッシュメモリ5からリードするための1回のアクセスと、ユーザデータをNAND型フラッシュメモリ5からリードするための1回のアクセスとを含む。
【0089】
最上位テーブル83の全てのポインタがRAM6上に存在する。したがって、最上位テーブル83は論理アドレス空間全体をカバーする。目的の下位テーブルセグメントがテーブルキャッシュ61に存在せず(下位テーブルミス)、且つ目的の上位テーブルセグメントもテーブルキャッシュ61に存在しないならば(上位テーブルミス)、キャッシュコントローラ151は、この目的の上位テーブルセグメントの物理アドレスを最上位テーブル83から取得し、この取得した物理アドレスを使用して、目的の上位テーブルセグメントをNAND型フラッシュメモリ5からテーブルキャッシュ61に転送する。次いで、キャッシュコントローラ151は、この目的の上位テーブルセグメントから取得した物理アドレスを使用して、目的の下位テーブルセグメントをNAND型フラッシュメモリ5からテーブルキャッシュ61に転送し、テーブルキャッシュ61に転送された目的の下位テーブルセグメントからマッピング情報を取得する。そして、コントローラ4は、キャッシュコントローラ151によって目的の下位テーブルセグメントから取得されたマッピング情報(物理アドレス)を使用してユーザデータをNAND型フラッシュメモリ5からリードする。したがって、NAND型フラッシュメモリ5がアクセスされる回数は3回である。この3回のアクセスは、マッピングテーブル(ここで、上位テーブルセグメントと下位テーブルセグメント)をNAND型フラッシュメモリ5からリードするための2回のアクセスと、ユーザデータをNAND型フラッシュメモリ5からリードするための1回のアクセスとを含む。
【0090】
ホスト2のアクセス傾向によって、テーブルキャッシュ61にキャッシュしておきたい階層レベルは異なる。
したがって、本実施形態では、以下のキャッシュ制御を実行する。
狭域アクセス時においては、キャッシュコントローラ151は、多くの下位テーブルセグメントをキャッシュするように動作し、これによってNAND型フラッシュメモリ5がアクセスされる平均回数をほぼ1回にする。
【0091】
広域アクセス時においては、キャッシュコントローラ151は、多くの上位テーブルセグメントをキャッシュするように動作し、これによってNAND型フラッシュメモリ5がアクセスされる平均回数をほぼ2回にする。なお、あまりにアクセス範囲が広い場合(超広域アクセス)においては、NAND型フラッシュメモリ5がアクセスされる平均回数は3回となる。各下位テーブルセグメントによってカバーされる論理アドレス範囲は狭いため、広域アクセス時においては、たとえ多くの下位テーブルセグメントがキャッシュされていても、下位テーブルヒットはほぼ起こらない。したがって、広域アクセス時においては、カバーできる論理アドレス範囲の広い上位テーブルセグメントをより多くキャッシュすることが好ましい。
【0092】
しかし、目的の下位テーブルセグメントがテーブルキャッシュ61に存在せず、且つこの目的の上位テーブルセグメントに対応する特定の上位テーブルセグメントがテーブルキャッシュ61に存在しない場合には、特定の上位テーブルセグメント、目的の下位テーブルセグメントという順序で、これらセグメントをテーブルキャッシュ61にキャッシュすることが必要となる。したがって、広域アクセス時においては、
図13に示すように、上位テーブルセグメントと下位テーブルセグメントとが交互にテーブルキャッシュ61にキャッシュされていく。このため、上位テーブルセグメントと下位テーブルセグメントの双方がほぼ均等の割合でテーブルキャッシュ61に載ってしまい、テーブルキャッシュ61にキャッシュされる上位テーブルセグメントの割合は、50%程度までに制限される。
【0093】
図14は、典型的な狭域アクセスの例を示す。
図14においては、上位テーブル82のセグメント#0によってカバーされる論理アドレス範囲のみがホスト2によってアクセスされているケースが想定されている。この場合、この論理アドレス範囲に属する128個の下位テーブルセグメントの内のどの下位テーブルセグメントが参照または更新される必要がある場合であっても、この下位テーブルセグメントをキャッシュするために必要な上位テーブルセグメントは上位テーブル82のセグメント#0のみである。このため、上位テープルセグメントの参照に偏りが生じる。
【0094】
したがって、上位テーブル82のセグメント#0がテーブルキャッシュ61にキャッシュされた後は、テーブルキャッシュ61に格納されているこの上位テーブル82のセグメント#0のみが頻繁に参照され、テーブルキャッシュ61に格納されている他の上位テーブルセグメントは滅多に参照されない。つまり、狭域アクセス時には、キャッシュされている上位テープルセグメントの参照に偏りが生じることとなる(参照の偏り度合いが強くなる)。
【0095】
図15は、典型的な狭域アクセスの別の例を示す。
図15においては、上位テーブル82のセグメント#0によってカバーされる論理アドレス範囲と上位テーブル82のセグメント#Nによってカバーされる論理アドレス範囲とがホスト2によって交互にアクセスされているケースが想定されている。この場合、上位テーブル82のセグメント#0および上位テーブル82のセグメント#Nがテーブルキャッシュ61にキャッシュされた後は、これら上位テーブル82のセグメント#0および上位テーブル82のセグメント#Nのみが頻繁に参照され、テーブルキャッシュ61に格納されている他の上位テーブルセグメントは滅多に参照されない。この場合も、キャッシュされている上位テープルセグメントの参照に偏りが生じることとなる(参照の偏り度合いが強くなる)。
【0096】
図16は、典型的な広域アクセスの例を示す。
図16では、上位テーブル82のセグメント#0、セグメント#1、セグメント#2、…、セグメント#Nそれぞれによってカバーされる多数の論理アドレス範囲を含む広い論理アドレス範囲がホスト2によってランダムにアクセスされるケースが想定されている。この場合、ホスト2によってアクセスされるアクセス先論理アドレスは多数の論理アドレス範囲間で頻繁に切り替えられる。したがって、目的の上位テーブルセグメントは異なる複数の上位テーブルセグメント間で頻繁に切り替えられ、この結果、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いは弱くなる。
【0097】
図17は、テーブルキャッシュ61を占める、上位テーブルセグメントと下位テーブルセグメントとの割合を示す。
ホスト2によってアクセスされる論理アドレス範囲が狭い場合には、(1)下位テーブルセグメントの方が上位テーブルセグメントより頻繁に参照され、また、(2)上位テーブルセグメントの参照に偏りが生じる。狭域アクセスでは、(1)、(2)が起こるため、テーブルキャッシュ61を占める上位テーブルセグメントの割合は低くなり、テーブルキャッシュ61を占める下位テーブルセグメントの割合が高くなる。
【0098】
ホスト2によってアクセスされる論理アドレス範囲が広がるにつれて、上位テーブルセグメントの参照の偏りが弱くなり、更に下位テーブルのヒット率も下がるため、テーブルキャッシュ61を占める上位テーブルセグメントの割合が増えていく。
しかし、目的の下位テーブルセグメントがテーブルキャッシュ61に存在せず、且つこの目的の上位テーブルセグメントに対応する特定の上位テーブルセグメントがテーブルキャッシュ61に存在しない場合には、特定の上位テーブルセグメント、目的の下位テーブルセグメントという順序で、これらセグメントがテーブルキャッシュ61にキャッシュされる。したがって、テーブルキャッシュ61を占める上位テーブルセグメントの割合は50%程度までに制限されてしまう。この結果、広域アクセス時には、テーブルキャッシュ61の約半分の容量は、ほとんどヒットしない下位テーブルセグメントで占められてしまう。
【0099】
そこで、本実施形態では、コントローラ4内の優先度調整部153は、テーブルキャッシュ61にキャッシュされている上位テーブルセグメントに対する参照の偏り度合いを評価することによってホスト2による現在のアクセス傾向(狭域アクセス/広域アクセス)を推定する。そして、参照の偏り度合いが閾値を下回るという条件が満たされた場合、キャッシュコントローラ151は、上位テーブルセグメントを下位テーブルセグメントよりも優先的にテーブルキャッシュ61にキャッシュするための動作を実行する。この場合、キャッシュコントローラ151は、テーブルキャッシュ61内の下位テーブルセグメントそれぞれをテーブルキャッシュ61内の上位テーブルセグメントそれぞれよりも優先して置換対象に選択してもよい。
【0100】
この結果、広域アクセス時においては、テーブルキャッシュ61を占める上位テーブルセグメントの割合を50%よりも増やすことができ、より多くの上位テーブルセグメントをテーブルキャッシュ61に置くことが可能となる。
図18は、テーブルキャッシュ61にキャッシュされている上位テーブルセグメントに対する参照の偏り度合いが閾値を下回る場合(広域アクセスの場合)に、優先度調整部153によって設定される上位テーブル優先度(高優先度)および下位テーブル優先度(低優先度)を示す。
【0101】
優先度調整部153は、テーブルキャッシュ61にキャッシュされている上位テーブルセグメントに対する参照の偏り度合いに基づき、下位テーブル81および上位テーブル82それぞれに対応する優先度を決定する。
例えば、テーブルキャッシュ61にキャッシュされている上位テーブルセグメントに対する参照の偏り度合いが閾値を下回る場合には、ホスト2の現在のアクセス傾向が広域アクセスであると推定される。この場合、
図18に示すように、優先度調整部153は、下位テーブル81および上位テーブル82それぞれに対応する優先度を低優先度および高優先度に決定する。
【0102】
ここで、
図19と
図27を参照して、より多くの上位テーブルセグメントをテーブルキャッシュ61にキャッシュするための動作について説明する。
図19は、高優先度を有する上位テーブルセグメントそれぞれを、低優先度を有する下位テーブルセグメントよりも優先的にテーブルキャッシュ61に残すことによって、より多くの上位テーブルセグメントをテーブルキャッシュ61に格納する動作を示す。また、
図27は、下位テーブル81と上位テーブル82との間の優先度の関係を示す上位テーブル優先フラグの値によって置き換え対象の選択方法がどのように変わるかを示している。
【0103】
下位テーブル81および上位テーブル82が
図18に示すように低優先度および高優先度に設定されると、上位テーブルセグメントを下位テーブルセグメントよりも優先してテーブルキャッシュ61に残すための上位テーブル優先モードがイネーブルになる。
【0104】
キャッシュ置き換え方法は以下のようになる。
上位テーブル82の優先度が低く、これによって上位テーブル優先モードがディセーブルの場合には、Indexごとに、LRU置換アルゴリズムなどに基づいて置き換え対象となるWayが選択される。LRU置換アルゴリズムの場合は、最終アクセスから最も時間が経過しているWayが置き換えられる。
【0105】
上位テーブル82の優先度が上がり、上位テーブル優先モードがイネーブルになった場合には、置き換え対象データは、低い優先度を有する階層レベル(ここでは、下位テーブル)から優先的に選択される。
図20は、テーブルキャッシュ61にキャッシュされている上位テーブルセグメントに対する参照の偏り度合いに応じて、多段マッピングテーブル8の各階層レベルの優先度を動的に調整する動作を示す。
【0106】
テーブルキャッシュ61にキャッシュされるテーブルが下位テーブル81および上位テーブル82の2種類のみであるケースにおいては、下位テーブル81および上位テーブル82それぞれに対応する優先度の設定は、1ビットのフラグ(「上位テーブル優先フラグ」)によって表すことができる。上位テーブル優先フラグ=Trueは、上位テーブル82の優先度が高優先度に設定されていることを示す。上位テーブル優先フラグ=Trueの場合、上位テーブル優先モードがイネーブルとなる。上位テーブル優先フラグ=Falseの場合には、上位テーブル優先モードはディセーブルされる。
【0107】
上位テーブル優先フラグのデフォルト値はFalseであってもよい。この場合、上位テーブル優先モードはディセーブルされているので、下位テーブル81と上位テーブル82は平等に扱われる。この場合、置き換え対象データはLRU順位に基づいて決定されればよい。
【0108】
上位テーブル優先フラグ=Falseの状態において、ホスト2によってアクセスされる論理アドレス範囲が狭い場合(狭域アクセス)には、上位テーブルセグメントのみに着目した場合、特定の一つ又は特定の数個あるいは数十個の上位テーブルセグメントのみが頻繁に参照され、上位テーブルセグメントの参照に偏りが生じる。なお、場合によっては、参照の偏りが数百個の上位テーブルセグメントに点在する事もあり得る。したがって、狭域アクセス時には、上位テーブルセグメントの参照に偏りが生じる。さらに、下位テーブルセグメントの方が上位テーブルセグメントより頻繁に参照される。この結果、テーブルキャッシュ61を占める上位テーブルセグメントの割合は低くなり、テーブルキャッシュ61を占める下位テーブルセグメントの割合が高くなる。
【0109】
ホスト2によってアクセスされる論理アドレス範囲が広がるにつれて、テーブルキャッシュ61を占める上位テーブルセグメントの割合は徐々に増えていく。
そして、ホスト2のアクセス傾向が広域アクセスであると推定されると、上位テーブル優先フラグがTrueに設定される(上位テーブルの優先度が上がる)。これにより、上位テーブル優先モードがイネーブルとなる。この場合、上位テーブルセグメントを下位テーブルセグメントよりも優先してテーブルキャッシュ61にキャッシュする動作、換言すれば、下位テーブルセグメントを上位テーブルセグメントよりも優先して置換対象として選択する動作が実行される。これにより、多くの上位テーブルセグメントでテーブルキャッシュ61を埋めることが可能になる。
【0110】
その後、ホスト2によってアクセスされる論理アドレス範囲が狭くなると、上位テーブル優先フラグがFalseに変更される(上位テーブルの優先度が下がる)。これにより、上位テーブル優先モードがディセーブルとなる。この結果、テーブルキャッシュ61を占める下位テーブルセグメントの割合を高くすることができる。
【0111】
このように、本実施形態では、キャッシュコントローラ151は、テーブルキャッシュ61にキャッシュされている上位テーブルセグメントの参照の偏り度合いに基づいて、(i)上位テーブルセグメントそれぞれを下位テーブルセグメントそれぞれよりも優先してテーブルキャッシュ61にキャッシュする動作と、(ii)上位テーブルセグメントそれぞれを下位テーブルセグメントそれぞれよりも優先せずに、下位テーブルセグメントそれぞれと上位テーブルセグメントそれぞれをテーブルキャッシュ61にキャッシュする動作とを選択的に実行する。
【0112】
なお、ここでは、キャッシュされている上位テーブルセグメントの参照の偏り度合いに基づいて上位テーブルと下位テーブルの優先度の関係を決める場合を説明したが、キャッシュされている上位テーブルセグメントの参照の偏り度合いとキャッシュされている下位テーブルセグメントの参照の偏り度合いをそれぞれ評価して上位テーブルと下位テーブルの優先度の関係を決定してもよい。
【0113】
次に、更新済みセグメントを管理する方法について説明する。
更新済みでかつNAND型フラッシュメモリ5へ不揮発化していないセグメントを管理する方法としては、これらに限定されないが、例えば、以下の2つの方法が考えられる。
1つ目は、
図21に示すように、更新済みセグメントを未更新のセグメントと一緒にテーブルキャッシュ61で管理する方法である。2つ目は、
図22に示すように更新済みセグメントを、テーブルキャッシュ61ではなく、別のデータ構造で管理する方法である。
【0114】
図23は、コントローラ4内に含まれているキャッシュコントローラ151、アクセス履歴情報管理部152、および優先度調整部153を示す。
キャッシュコントローラ151は、所定のタイミングで、アクセス履歴情報管理部152へアクセス履歴を渡す。また、キャッシュコントローラ151は、所定のタイミングで、優先度調整部153へ優先度調整要求を発行する。
【0115】
アクセス履歴情報管理部152は、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いに着目してホスト2のアクセス傾向を推定する。具体的には、アクセス履歴情報管理部152は、上位テーブルの検索でヒットしたセグメントそれぞれの優先順位(例えばLRU順位)に対応する値(スコア)を累積加算することによって得られる累積スコアをアクセス履歴情報として覚えておく。高い優先順位の上位テーブルセグメント(追い出されにくい優先順位の上位テーブルセグメント)に対して大きなスコアが与えられ、低い優先順位の上位テーブルセグメント(追い出されやすい優先順位の上位テーブルセグメント)に対して小さいスコアが与えられてもよい。例えば、LRU置換アルゴリズムが適用されるケースにおいては、最近参照された上位テーブルセグメントのLRU順位(追い出されにくい順位)に対して大きなスコアが与えられ、最終アクセスから長い時間が経過している上位テーブルセグメントLRU順位(追い出されやすい順位)に対して小さいスコアが与えられてもよい。
【0116】
キャッシュされている上位テーブルセグメントに対する参照に偏りが生じており、例えば、キャッシュされている特定の一つの上位テーブルセグメントが頻繁に参照されるケースにおいては、この上位テーブルセグメントは追い出されにくい優先順位に維持されやすい。したがって、累積スコアは大きな値となる。また、キャッシュされている上位テーブルセグメントに対する参照に偏りが生じており、例えば、キャッシュされている2つまたは3つの上位テーブルセグメントが交互に参照されるケースにおいても、これら上位テーブルセグメントは比較的追い出されにくい優先順位に維持されやすい。したがって、この場合も、累積スコアは比較的大きな値となる。
【0117】
したがって、この累積スコアは、テーブルキャッシュ61にキャッシュされている上位テーブルセグメントに対する参照の偏り度合いを表すことができる。
なお、高い優先順位の上位テーブルセグメント(追い出されにくい優先順位の上位テーブルセグメント)に対して小さいスコアが与え、低い優先順位の上位テーブルセグメント(追い出されやすい優先順位の上位テーブルセグメント)に対して大きいスコアを与えてもよい。この場合には、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いが強いと、累積スコアは比較的小さな値となる。
【0118】
以下では、これに限定されないが、高い優先順位の上位テーブルセグメント(追い出されにくい優先順位の上位テーブルセグメント)に対して大きなスコアが与えられ、低い優先順位の上位テーブルセグメント(追い出されやすい優先順位の上位テーブルセグメント)に対して小さいスコアが与えせれるケースを想定する。また以下では、これに限定されないが、置換対象を選択するための優先順位としてLRU順位を使用するケースを想定する。
【0119】
上位テーブルセグメントのヒット回数が所定回数に達した場合、優先度調整部153は、累積スコアを、事前に設定された閾値と比較し、累積スコアが閾値未満であるか否かに応じて、下位テーブルおよび上位テーブルそれぞれの優先度を決定する。なお、優先度調整部153は、ある時間が経過する度に、累積スコアを事前に設定された閾値と比較することによって累積スコアを評価してもよい。
【0120】
累積スコアが閾値未満である場合、優先度調整部153は、下位テーブルおよび上位テーブルそれぞれの優先度が低優先度および高優先度に設定されるように、上位テーブル優先フラグをTrueにセットする。
図24は、キャッシュコントローラ151およびアクセス履歴情報管理部152によって実行されるアクセス履歴情報更新動作を示す。
【0121】
キャッシュコントローラ151は、アドレス解決またはアドレス更新のためにテーブルキャッシュ61を検索する。このテーブルキャッシュ61の検索において上位テーブルヒットが起きる度、キャッシュコントローラ151は、上位テーブルヒット回数を+1だけインクリメントする。そして、キャッシュコントローラ151は、ヒットした上位テーブルセグメントの現在のLRU順位に対応するスコアをスコア加算値テーブルから取得し、このスコアをアクセス履歴情報管理部152にアクセス履歴として渡す。アクセス履歴情報管理部152は、キャッシュコントローラ151から渡されたスコアを現在の累積スコアに加算する。なお、上位テーブルヒット回数をインクリメントする処理、およびLRU順位に対応するスコアをスコア加算値テーブルから取得する処理は、アクセス履歴情報管理部152によって実行されてもよい。
【0122】
スコア加算値テーブルは、LRU順位それぞれに対応するスコアを保持している。例えば、LRU順位1は、最も追い出しされやすいLRU順位であり、LRU順位8は、最も追い出しされにくいLRU順位である。例えば、ヒットした上位テーブルセグメントの現在のLRU順位がLRU順位7である場合、LRU順位7に対応するスコア(ここでは、7)がスコア加算値テーブルから取得される。なお、スコア加算値テーブルは、上位テーブル優先フラグがFalseの場合に対応するスコアリストと、上位テーブル優先フラグがTrueの場合に対応するスコアリストとを保持していてもよい。
【0123】
現在の上位テーブル優先フラグがFalseである場合、キャッシュコントローラ151またはアクセス履歴情報管理部152は、ヒットした上位テーブルセグメントの現在のLRU順位に対応するスコアを、上位テーブル優先フラグがFalseの場合に対応するスコアリストから取得する。一方、現在の上位テーブル優先フラグがTrueである場合、キャッシュコントローラ151またはアクセス履歴情報管理部152は、ヒットした上位テーブルセグメントの現在のLRU順位に対応するスコアを、上位テーブル優先フラグがTrueの場合に対応するスコアリストから取得する。
【0124】
図25は、優先度調整部153によって実行される上位テーブル優先フラグ設定動作を示す。
優先度調整部153は、例えば上位テーブルヒット回数が所定の回数を超えた時に、優先度変更処理を実行する。優先度変更処理では、優先度調整部153は、累積スコアと閾値とを比較する。累積スコアが閾値を下回っていたら、優先度調整部153は、上位テーブルの優先度を上げ、上位テーブル優先フラグをTrueにセットする。累積スコアが閾値以上であるならば、優先度調整部153は、上位テーブルの優先度を下げ、上位テーブル優先フラグをFalseにする。
【0125】
優先度変更処理が行われる度、アクセス履歴情報管理部152は、上位テーブルヒット回数と累積スコアとを初期値にリセットする。
図26は、多段マッピングテーブル8がより多くの階層レベルのテーブルを含む場合に、これら階層レベルにそれぞれ設定される優先度の例を示す。
【0126】
本実施形態では、多段マッピングテーブル8に含まれるテーブル数は4以上であってもよく、例えば、多段マッピングテーブル8に含まれるテーブル数は10段のアドレス変換を実行する10個の階層レベルに対応する10個のテーブルを含んでいてもよい。
図26では、階層レベル1、階層レベル2、階層レベル3に対応する3種類のテーブルセグメントがキャッシュされる場合が例示されている。この場合、多段マッピングテーブル8は、階層レベル1のテーブルと、階層レベル2のテーブルと、階層レベル3のテーブルに加え、最上位テーブルをさらに含んでいてもよい。
【0127】
階層レベル3のテーブルは、ホスト2から受信されたデータが書き込まれたNAND型フラッシュメモリ5内の物理アドレスを管理するためのテーブルである。階層レベル2のテーブルは、階層レベル3のテーブルセグメントそれぞれが書き込まれたNAND型フラッシュメモリ5内の物理アドレスを管理するためのテーブルである。階層レベル1のテーブルは、階層レベル2のテーブルセグメントそれぞれが書き込まれたNAND型フラッシュメモリ5内の物理アドレスを管理するためのテーブルである。最上位テーブルは、階層レベル2のテーブルセグメントそれぞれが書き込まれたNAND型フラッシュメモリ5内の物理アドレスを管理するためのテーブルである。以下では、階層レベル1のテーブルと、階層レベル2のテーブルと、階層レベル3のテーブルがテーブルキャッシュ61にキャッシュされる場合を想定する。
【0128】
優先度3が最も高い優先度を示し、優先度2が中間の優先度を示し、優先度1が最も低い優先度を示してもよい。この場合、キャッシュコントローラ151は、階層レベル1のテーブルセグメントを、階層レベル2のテーブルセグメントおよび階層レベル3のテーブルセグメントよりも優先的にテーブルキャッシュ61にキャッシュする動作を実行する。さらに、キャッシュコントローラ151は、階層レベル2のテーブルセグメントを、階層レベル3のテーブルセグメントよりも優先的にテーブルキャッシュ61にキャッシュする動作を実行する。
【0129】
階層レベル1、2、3それぞれの優先度を設定する処理においては、コントローラ4は、例えば、キャッシュされている階層レベル1のテーブルセグメントに対する参照の偏り度合い、キャッシュされている階層レベル2のテーブルセグメントに対する参照の偏り度合い、およびキャッシュされている階層レベル3のテーブルセグメントに対する参照の偏り度合いを求め、階層レベルごとに優先度を設定してもよい。この場合、コントローラ4のアクセス履歴情報管理部152は、例えば、キャッシュされている階層レベル1のテーブルセグメントに対する参照の偏り度合いを示す累積スコアと、キャッシュされている階層レベル2のテーブルセグメントに対する参照の偏り度合いを示す累積スコアと、キャッシュされている階層レベル1のテーブルセグメントに対する参照の偏り度合いを示す累積スコアとを算出する。そして、コントローラ4の優先度調整部153は、これら累積スコアに基づいて、階層レベル1のテーブル、階層レベル2のテーブル、および階層レベル3のテーブルそれぞれの優先度を決定する。
【0130】
あるいは、アクセス履歴情報管理部152が、例えば、キャッシュされている階層レベル1のテーブルセグメントに対する参照の偏り度合いを示す累積スコアと、キャッシュされている階層レベル2のテーブルセグメントに対する参照の偏り度合いを示す累積スコアとを算出し、優先度調整部153が、これら階層レベル1、2の累積スコアに基づいて、階層レベル1のテーブル、階層レベル2のテーブル、および階層レベル3のテーブルそれぞれの優先度を決定してもよい。
【0131】
図27は、上位テーブル優先フラグによって置き換え対象の選択方法がどのように変わるかを示した図である。ここでは、セットアソシアティブキャッシュのあるインデックスに対応する4つのウェイから置き換え対象を選択する場合が例示されている。
図27の上部に示すように、上位テーブル優先フラグがFalseである場合には、キャッシュコントローラ151は、下位テーブルセグメントおよび上位テーブルセグメントをLRU置換アルゴリズムなどに基づいて平等に置換対象候補として選択する。
【0132】
一方、
図27の下部に示すように、上位テーブル優先フラグがTrueである場合には、キャッシュコントローラ151は、上位テーブルセグメントを置換対象候補から除外し、下位テーブルセグメントから置換対象セグメントを選択する。なお、置換対象として選択可能な下位テーブルセグメントが存在しない場合には、LRU置換アルゴリズムなどによって最も優先度が低いと判断された上位テーブルセグメントが置換対象候補として選択される。
【0133】
次に、以下の4つの処理の手順を説明する。
(1)アドレス解決処理
アドレス解決処理は、ホスト2によって指定された論理アドレスに対応する物理アドレスを取得する処理である。
(2)リフィル処理
リフィル処理は、アドレス解決に必要なマッピング情報、または更新対象のマッピング情報をテーブルキャッシュ61に載せる処理である。
(3)アドレス更新処理
アドレス更新処理は、下位テーブルセグメントのマッピング情報、上位テーブルセグメントのマッピング情報、または最上位テーブルセグメントのマッピング情報を更新する処理である。ホスト2からのライト要求によって指定された論理アドレスに対応するデータがNAND型フラッシュメモリ5に書き込まれた場合には、この論理アドレスに対応する下位テーブルセグメントのマッピング情報が更新対象となる。
【0134】
テーブルキャッシュ61上で更新された下位テーブルセグメントがNAND型フラッシュメモリ5に書き込まれた場合には、この下位テーブルセグメントの物理アドレスを管理している特定の上位テーブルセグメントのマッピング情報が更新対象となる。
テーブルキャッシュ61上で更新された上位テーブルセグメントがNAND型フラッシュメモリ5に書き込まれた場合には、この上位テーブルセグメントの物理アドレスを管理している最上位テーブルのマッピング情報が更新対象となる。
(4)フラッシュ処理
フラッシュ処理は、テーブルキャッシュ61上で更新したマッピング情報を記憶メディア(NAND型フラッシュメモリ5)に書き込む処理である。
【0135】
図28のフローチャートは、アドレス解決処理の手順を示す。アドレス解決処理では、キャッシュコントローラ151は、例えば、下位テーブルセグメント、上位テーブルセグメントという順序で、テーブルキャッシュ61を検索する。
キャッシュコントローラ151は、ホスト2によって指定された論理アドレスに対応する物理アドレスを含む特定の下位テーブルセグメントを求めてテーブルキャッシュ61を検索する(ステップS11)。
【0136】
この特定の下位テーブルセグメントがテーブルキャッシュ61に存在する場合(ヒット)(ステップS12のYES)、キャッシュコントローラ151は、この特定の下位テーブルセグメント(アドレス変換データ部分)からマッピング情報を取得する(ステップS13)。このマッピング情報は、ホスト2によって指定された論理アドレスに対応する物理アドレスを含んでいる。
【0137】
この特定の下位テーブルセグメントがテーブルキャッシュ61に存在しない場合(ステップS12のNO)、キャッシュコントローラ151は、この特定の下位テーブルセグメントを格納するためのキャッシュエントリ(キャッシュライン)を割り当てる(ステップS14)。ステップS14では、利用可能なキャッシュエントリ(キャッシュライン)が存在しない場合には、置き換え対象キャッシュエントリ(置き換え対象キャッシュライン)を選択する処理が行われる。
【0138】
この処理において、この特定の下位テーブルセグメントを格納するための特定のインデックス内の全ウェイが更新済みセグメントで埋まっていた場合は、フラッシュ処理によって更新済みセグメントをNAND型フラッシュメモリ5へ書き込む処理が実行される。これによってこの特定のインデックス内のウェイそれぞれを置き換え対象として選択可能とすることができる。
【0139】
また、この特定のインデックス内の全ウェイが以前のアドレス解決処理または以前のアドレス更新処理のために使用中である場合には、以前のアドレス解決処理または以前のアドレス更新処理前の処理が完了してから置き換え対象を選択するか、またはNAND型フラッシュメモリ5から読み出したセグメントをテーブルキャッシュ61にキャッシュせずに、処理を進めることが必要となる。
【0140】
置き換え対象キャッシュエントリを選択する処理では、上位テーブル優先フラグがFalseならば、LRU置換アルゴリズム等に基づいて置き換え対象キャッシュエントリが選択される。上位テーブル優先フラグがTrueならば、上位テーブルセグメントが優先的にテーブルキャッシュ61に残されるように下位テーブルセグメントを格納しているキャッシュエントリの中から置き換え対象キャッシュエントリが選択される。
【0141】
次いで、キャッシュコントローラ151は、この特定の下位テーブルセグメントをNAND型フラッシュメモリ5からテーブルキャッシュ61に転送するリフィル処理を行う(ステップS15)。リフィル処理では、この特定の下位テーブルセグメントは上述の割り当てられたキャッシュエントリに格納される。このリフィル処理の詳細は
図29で後述する。
【0142】
そして、キャッシュコントローラ151は、この特定の下位テーブルセグメントからマッピング情報を取得する(ステップS13)。
このように、特定の下位テーブルセグメントをテーブルキャッシュ61に転送してマッピング情報を取得するまでの処理はキャッシュコントローラ151によって実行される。NAND型フラッシュメモリ5に対してユーザデータをリード/ライトする処理はコントローラ4(例えばCPU12)によって実行される。なお、キャッシュコントローラ151とコントローラ4(例えばCPU12)の役割分担はこの例に限定されるものではない。
【0143】
図29のフローチャートは、リフィル処理の手順を示す。
キャッシュコントローラ151は、リフィルすべき特定の下位テーブルセグメントの論理アドレス範囲をカバーしている論理アドレス範囲を有する特定の上位テーブルセグメントを求めてテーブルキャッシュ61を検索する(ステップS21)。
【0144】
この特定の上位テーブルセグメントがテーブルキャッシュ61に存在する場合(ヒット)(ステップS22のYES)、アクセス履歴情報管理部152は、アクセス履歴情報を更新する(ステップS23)。
ステップS23では、アクセス履歴情報管理部152は、上位テーブルヒット回数を+1だけインクリメントする処理と、ヒットした上位テーブルセグメントの現在のLRU順位に対応するスコアを現在の累積スコアに加算する処理とを実行する。
【0145】
前回の優先度情報更新処理から所定回数以上ヒットした場合(ステップS24のYES)、つまりインクリメントされた上位テーブルヒット回数が所定回数に達した場合、優先度調整部153は、優先度情報更新処理を行う(ステップS25)。
前回の優先度情報更新処理から所定回数以上ヒットしたことを条件に優先度情報更新処理を行う理由は、ある長さ以上の期間に渡ってホスト2のアクセス傾向(つまりテーブルキャッシュ61の参照傾向)を評価できるようにするためである。ステップS25の優先度情報更新処理では、優先度調整部153は、累積スコアに基づいて上位テーブル優先フラグをTrueまたはFalseに設定する処理と、上位テーブルヒット回数および累積スコアを初期値にリセットする処理とを実行する。
【0146】
次いで、キャッシュコントローラ151は、この特定の上位テーブルセグメントからマッピング情報を取得する(ステップS26)。このマッピング情報は、リフィル対象の下位テーブルセグメントが書き込まれているNAND型フラッシュメモリ5上の位置を示す物理アドレスを含む。キャッシュコントローラ151は、この物理アドレスを使用して、特定の下位テーブルセグメントをNAND型フラッシュメモリ5から読み出し、読み出した下位テーブルセグメントを、割り当てられたキャッシュエントリに格納する(ステップS27)。
【0147】
この特定の上位テーブルセグメントがテーブルキャッシュ61に存在しない場合(ステップS22のNO)、キャッシュコントローラ151は、この特定の上位テーブルセグメントを格納するためのキャッシュエントリ(キャッシュライン)を割り当てる(ステップS28)。ステップS28では、利用可能なキャッシュエントリ(キャッシュライン)が存在しない場合には、置き換え対象キャッシュエントリ(置き換え対象キャッシュライン)を選択する処理が行われる。
【0148】
置き換え対象キャッシュエントリを選択する処理では、上位テーブル優先フラグがFalseならば、LRU置換アルゴリズム等に基づいて置き換え対象キャッシュエントリ候補の中から置き換え対象キャッシュエントリが選択される。上位テーブル優先フラグがTrueならば、上位テーブルセグメントが優先的にテーブルキャッシュ61に残されるように下位テーブルセグメントを格納している置き換え対象キャッシュエントリ候補の中から置き換え対象キャッシュエントリが選択される。なお、置き換え対象キャッシュエントリ候補それぞれに含まれる下位テーブルセグメントの全てが使用中である場合には、上位テーブルセグメントを格納している置き換え対象キャッシュエントリ候補の中から置き換え対象キャッシュエントリが選択される。
【0149】
次いで、キャッシュコントローラ151は、最上位テーブル83からこの特定の上位テーブルセグメントに対応するマッピング情報(この特定の上位テーブルセグメントが書き込まれているNAND型フラッシュメモリ5内の位置を示す物理アドレス)を取得する(ステップS29)。キャッシュコントローラ151は、この取得した物理アドレスを使用して、この特定の上位テーブルセグメントをNAND型フラッシュメモリ5から読み出し、この特定の上位テーブルセグメントを、割り当てられたキャッシュエントリに格納する(ステップS30)。
【0150】
次いで、キャッシュコントローラ151は、この特定の上位テーブルセグメントからマッピング情報を取得する(ステップS26)。このマッピング情報は、リフィル対象の下位テーブルセグメントが書き込まれているNAND型フラッシュメモリ5上の位置を示す物理アドレスを含む。キャッシュコントローラ151は、この物理アドレスを使用して、特定の下位テーブルセグメントをNAND型フラッシュメモリ5から読み出し、読み出した下位テーブルセグメントを、割り当てられたキャッシュエントリに格納する(ステップS27)。
【0151】
図30のフローチャートは、アドレス更新処理の手順を示す。
マッピング情報が更新されるべき更新対象セグメントは、下位テーブルセグメント、上位テーブルセグメント、または最上位テーブルセグメントのいずれかである。ホスト2からのライト要求によって指定された論理アドレスに対応するデータがNAND型フラッシュメモリ5に書き込まれた場合には、この論理アドレスに対応する下位テーブルセグメントのマッピング情報が更新対象となる。テーブルキャッシュ61上で更新された下位テーブルセグメントがNAND型フラッシュメモリ5に書き込まれた場合には、この下位テーブルセグメントの物理アドレスを管理している特定の上位テーブルセグメントのマッピング情報が更新対象となる。テーブルキャッシュ61上で更新された上位テーブルセグメントがNAND型フラッシュメモリ5に書き込まれた場合には、最上位テーブルが更新対象となる。
【0152】
最上位テーブルの全体はRAM6上に存在するので、以下では、更新対象セグメントが、下位テーブルセグメントまたは上位テーブルセグメントである場合について説明する。
キャッシュコントローラ151は、更新対象セグメント(下位テーブルセグメントまたは上位テーブルセグメント)を求めてテーブルキャッシュ61を検索する(ステップS41)。
【0153】
この更新対象セグメントがテーブルキャッシュ61に存在する場合(ヒット)(ステップS42のYES)、キャッシュコントローラ151は、この更新対象セグメントのマッピング情報をテーブルキャッシュ61上で更新する(ステップS43)。なお、この更新対象セグメントが上位テーブルセグメントであり、且つこの上位テーブルセグメントが
テーブルキャッシュ61に存在する場合(ヒット)(ステップS42のYES)には、キャッシュコントローラ151は、さらに、
図29のステップS23~S25で説明した処理を実行してもよい。
【0154】
更新済みセグメントが一定数溜まった場合(ステップS44のYES)、キャッシュコントローラ151は、これら更新済みセグメントをNAND型フラッシュメモリ5に書き込むフラッシュ処理を行う(ステップS45)。
一方、更新済みセグメントが一定数溜まっていない場合(ステップS44のNO)、キャッシュコントローラ151は、フラッシュ処理を行わずに、アドレス更新処理を終了する。
【0155】
この更新対象セグメントがテーブルキャッシュ61に存在しない場合(ステップS42のNO)、キャッシュコントローラ151は、この更新対象セグメントを格納するためのキャッシュエントリ(キャッシュライン)を割り当てる(ステップS46)。ステップS46では、利用可能なキャッシュエントリ(キャッシュライン)が存在しない場合には、置き換え対象キャッシュエントリ(置き換え対象キャッシュライン)を選択する処理が行われる。
【0156】
置き換え対象キャッシュエントリを選択する処理では、上位テーブル優先フラグがFalseならば、LRU置換アルゴリズム等に基づいて置き換え対象キャッシュエントリが選択される。上位テーブル優先フラグがTrueならば、上位テーブルセグメントが優先的にテーブルキャッシュ61に残されるように下位テーブルセグメントを格納しているキャッシュエントリの中から置き換え対象キャッシュエントリが選択される。
【0157】
次いで、キャッシュコントローラ151は、
図28で説明したリフィル処理を実行して、この更新対象セグメントをテーブルキャッシュ61に格納する(ステップS47)。そして、キャッシュコントローラ151は、上述のステップS43~S45の処理を行う。
【0158】
図31のフローチャートは、フラッシュ処理の手順を示す。
キャッシュコントローラ151は、テーブルキャッシュ61上の更新済みセグメントをバッファ(RAM6上のバッファ)へコピーする(ステップS51)。ステップS51の処理は一定数のセグメントがバッファにコピーされるまで繰り返えされる。一定数のセグメントがコピーされると(ステップS52のYES)、キャッシュコントローラ151は、バッファに溜まった更新済みセグメントをNAND型フラッシュメモリ5に書き込む(ステップS53)。キャッシュコントローラ151は、ステップS53でNAND型フラッシュメモリ5に書きまれた各更新済みセグメントに対応する上位階層レベルのテーブルセグメントをテーブルキャッシュ61上で更新する処理を実行する。例えば、NAND型フラッシュメモリ5に書きまれた更新済みセグメントが下位テーブルセグメントならば、この下位テーブルセグメントに対応する特定の上位テーブルセグメントをテーブルキャッシュ61上で更新する処理が実行される。これにより、この下位テーブルセグメントが書き込まれているNAND型フラッシュメモリ5内の最新の記憶位置を示す物理アドレスがこの特定の上位テーブルセグメントのマッピング情報に反映される。また、NAND型フラッシュメモリ5に書きまれた更新済みセグメントが上位テーブルセグメントならば、この上位テーブルセグメントに対応する特定の最上位テーブルセグメントを更新する処理が実行される。
【0159】
この後、キャッシュコントローラ151は、ステップS53でNAND型フラッシュメモリ5に書きまれた各更新済みセグメントの状態を更新済みから未更新へ変更する(ステップS54)。状態が未更新へ変更されたセグメントは、後に、置き換え対象に選択され、テーブルキャッシュ61から追い出される場合がある。この追い出されたセグメントに対応する特定の上位テーブルセグメントは既に最新の状態に更新されている。この追い出されたセグメントを参照する必要がある場合には、この特定の上位テーブルセグメントを参照することにより、この追い出されたセグメントが格納されているNAND型フラッシュメモリ5内の最新の記憶位置を取得することができる。
【0160】
図32のフローチャートは、
図29のステップS25で実行される優先度情報更新処理の手順を示す。
上位テーブルヒット回数が所定回数に達した場合、優先度調整部153は、現在の累積スコアを閾値と比較する(ステップS61)。この累積スコアが閾値を下回った場合(ステップS62のYES)、優先度調整部153は、上位テーブル優先フラグをTrueにセットする(ステップS63)。
【0161】
この累積スコアが閾値以上である場合(ステップS62のNO)、優先度調整部153は、上位テーブル優先フラグをFalseにセットする(ステップS64)。
ステップS63またはステップS64の処理の後、アクセス履歴情報管理部152は、上位テーブルヒット回数および累積スコアの各々を初期値にリセットする(ステップS65)。上位テーブルヒット回数および累積スコアがリセットされた後、次の期間のアクセス傾向を評価するために、上位テーブルヒットが起きる度にアクセス履歴情報更新処理が実行される。
【0162】
なお、上位テーブル優先モードのイネーブル/ディセーブルの切り替え動作がヒステリシス特性を有するように、上位テーブル優先フラグの現在の状態に応じて、累積スコアと比較される閾値を変更してもよい。
現在の上位テーブル優先フラグがFalseであるならば、優先度調整部153は、累積スコアを第1の閾値と比較する。累積スコアが第1の閾値を下回った場合、優先度調整部153は、上位テーブル優先フラグをTrueにセットする。累積スコアが第1の閾値を下回らなかった場合、優先度調整部153は、上位テーブル優先フラグをFalseに維持する。
【0163】
現在の上位テーブル優先フラグがTrueであるならば、優先度調整部153は、累積スコアを第1の閾値よりも高いまたは低い第2の閾値と比較する。累積スコアが第2の閾値以上である場合、優先度調整部153は、上位テーブル優先フラグをFalseに変更する。累積スコアが第2の閾値未満である場合、優先度調整部153は、上位テーブル優先フラグをTrueに維持する。なお、例えば、上位テーブル優先モードがイネーブルからディセーブルになりづらくしたい場合は、第2の閾値を第1の閾値より高くしてもよい。上位テーブル優先モードがイネーブルからディセーブルになりやすくしたいのであれば、第2の閾値を第1の閾値より低くしてもよい。
【0164】
図33は、アクセス履歴情報として利用可能な他の様々なパラメータ(アクセスされた論理アドレス、アクセス時刻、多段マッピングテーブルの各階層レベルのヒット回数、多段マッピングテーブルの各階層のアクセス回数、等)を示す。
本実施形態では使用していないが、アクセスした論理アドレス、アクセス時刻、各階層レベルのヒット回数、各階層レベルのアクセス回数、等をアクセス履歴情報として収集してもよい。
【0165】
また、複数の階層レベルの各々について、累積スコアを個別に算出してもよい。例えば、階層レベル1、階層レベル2、階層レベル3に対応する3種類のテーブルセグメントをテーブルキャッシュ61にキャッシュする場合を想定する。上述したように、階層レベル3のテーブルは、ホスト2から受信されたデータが書き込まれたNAND型フラッシュメモリ5内の物理アドレスを管理するためのテーブルである。階層レベル2のテーブルは、階層レベル3のテーブルセグメントそれぞれが書き込まれたNAND型フラッシュメモリ5内の物理アドレスを管理するためのテーブルである。階層レベル1のテーブルは、階層レベル2のテーブルセグメントそれぞれが書き込まれたNAND型フラッシュメモリ5内の物理アドレスを管理するためのテーブルである。例えば、階層レベル1の各セグメントによってカバーされる論理アドレス範囲が最も広く、次に、階層レベル2の各セグメントによってカバーされる論理アドレス範囲が広く、階層レベル3の各セグメントによってカバーされる論理アドレス範囲が最も狭い。
【0166】
階層レベル1のテーブルセグメントがヒットした場合には、アクセス履歴情報管理部152は、このヒットしたテーブルセグメントの現在のLRU順位に対応するスコアを、この階層レベル1に対応するスコア加算値テーブルから取得し、このスコアを階層レベル1に対応する累積スコアに加算する。階層レベル2のテーブルセグメントがヒットした場合には、アクセス履歴情報管理部152は、このヒットしたテーブルセグメントの現在のLRU順位に対応するスコアを、この階層レベル2に対応するスコア加算値テーブルから取得し、このスコアを階層レベル2に対応する累積スコアに加算する。階層レベル3のテーブルセグメントがヒットした場合には、アクセス履歴情報管理部152は、このヒットしたテーブルセグメントの現在のLRU順位に対応するスコアを、この階層レベル3に対応するスコア加算値テーブルから取得し、このスコアを階層レベル3に対応する累積スコアに加算する。
【0167】
このようにして、階層レベル毎に累積スコアを算出することにより、キャッシュされているテーブルセグメントに対する参照の偏り度合いを階層レベル毎に評価できるので、この評価結果に基づいて、階層レベルそれぞれに対応する優先度を設定してもよい。
【0168】
図34のフローチャートは、ホスト2によるライトアクセスに関するアクセス傾向またはホスト2によるリードアクセスに関するアクセス傾向のいずれか一方を無視する処理の手順を示す。
本実施形態では、ホスト2のアクセス傾向に基づいて上位テーブルおよび下位テーブルそれぞれに対応する優先度が決定される。
【0169】
この場合、リードアクセスに関するアクセス傾向のみに着目するケースにおいては、ホスト2よるライトアクセスに関するアクセス傾向は無視し、リードアクセスに関するアクセス傾向のみに基づいて上位テーブルおよび下位テーブルそれぞれに対応する優先度を決定してもよい。これにより、たとえライトアクセスが狭域アクセスで、且つリードアクセスが広域アクセスであるような場合であっても、注目すべきリードアクセスに関するアクセス傾向(広域アクセス)に適したモード、つまり上位テーブル優先モード、をイネーブルにすることができる。
【0170】
あるいは、ライトアクセスに関するアクセス傾向に着目するケースにおいては、ホスト2よるリードアクセスに関するアクセス傾向は無視し、ライトアクセスに関するアクセス傾向のみに基づいて上位テーブルおよび下位テーブルそれぞれに対応する優先度を決定してもよい。
【0171】
ホスト2よるライトアクセスに関するアクセス傾向を無視するケース、つまりホスト2によるライトアクセスに起因するテーブルキャッシュ61の参照傾向を無視するケースにおいては、アクセス履歴情報管理部152は、アドレス更新処理において起きた上位テーブルセグメントのキャッシュヒットを、累積スコアに、つまりキャッシュされている上位テーブルセグメントに対する参照の偏り度合いを示す値に反映しない。
【0172】
一方、ホスト2よるリードアクセスに関するアクセス傾向を無視するケース、つまりホスト2によるリードアクセスに起因するテーブルキャッシュ61の参照傾向を無視するケースにおいては、アクセス履歴情報管理部152は、アドレス解決処理において起きた上位テーブルセグメントのキャッシュヒットを、累積スコアに、つまりキャッシュされている上位テーブルセグメントに対する参照の偏り度合いを示す値に反映しない。
【0173】
コントローラ4(例えばCPU12)は、ライトアクセスに関するアクセス傾向を無視すべきことを、あるいはリードアクセスに関するアクセス傾向を無視すべきことを、キャッシュコントローラ151に指示してもよい。
ホスト2からライト要求が受信された場合(ステップS71のYES)、キャッシュコントローラ151は、このライト要求に対応するライトデータが書き込まれたNAND型フラッシュメモリ5内の物理位置を示す物理アドレスがこのライト要求によって指定された論理アドレスにマッピングされるように、テーブルキャッシュ61をアクセスしてマッピング情報を更新する。
【0174】
キャッシュコントローラ151は、ライトアクセスに関するアクセス傾向を無視すべきことが指示されているか否かを判定する(ステップS72)。
ライトアクセスに関するアクセス傾向を無視すべきことが指示されている場合(ステップS72のYES)、たとえ目的の上位テーブルセグメントがヒットした場合であっても、キャッシュコントローラ151は、上位テーブルセグメントのヒットが起きたことを示す情報(アクセス履歴)を、アクセス履歴情報管理部152に渡さない。これにより、アクセス履歴情報管理部152は、アクセス履歴情報(上位テーブルヒット回数、累積スコア)を更新しない(ステップS73)。上述したように、累積スコアは、テーブルキャッシュ61に格納されている上位テーブルセグメントに対する参照の偏り度合いを表す値である。一方、ライトアクセスに関するアクセス傾向を無視すべきことが指示されていない場合(ステップS72のNO)、目的の上位テーブルセグメントがヒットした場合には、キャッシュコントローラ151は上位テーブルセグメントのヒットが起きたことを示す情報(アクセス履歴)をアクセス履歴情報管理部152に渡し、アクセス履歴情報管理部152はアクセス履歴情報(上位テーブルヒット回数、累積スコア)を更新する(ステップS73)。
【0175】
ホスト2からリード要求が受信された場合(ステップS71のNO)、キャッシュコントローラ151は、リード要求によって指定された論理アドレスに対応する物理アドレスを含むマッピング情報を参照するためにテーブルキャッシュ61を検索する。
キャッシュコントローラ151は、リードアクセスに関するアクセス傾向を無視すべきことが指示されているか否かを判定する(ステップS75)。
【0176】
リードアクセスに関するアクセス傾向を無視すべきことが指示されている場合(ステップS75のYES)、たとえ目的の上位テーブルセグメントがヒットした場合であっても、キャッシュコントローラ151は、上位テーブルセグメントのヒットが起きたことを示す情報(アクセス履歴)を、アクセス履歴情報管理部152に渡さない。これにより、アクセス履歴情報管理部152は、アクセス履歴情報(上位テーブルヒット回数、累積スコア)を更新しない(ステップS76)。一方、リードアクセスに関するアクセス傾向を無視すべきことが指示されていない場合(ステップS75のNO)、目的の上位テーブルセグメントがヒットした場合には、キャッシュコントローラ151は上位テーブルセグメントのヒットが起きたことを示す情報(アクセス履歴)をアクセス履歴情報管理部152に渡し、アクセス履歴情報管理部152はアクセス履歴情報(上位テーブルヒット回数、累積スコア)を更新する(ステップS77)。
【0177】
なお、
図34で説明した処理は、キャッシュされる複数の階層レベルそれぞれの累積スコアを算出する構成にも適用することができる。この場合、ホスト2によるライトアクセスに起因するテーブルキャッシュ61の参照傾向を無視するケースにおいては、アクセス履歴情報管理部152は、アドレス更新処理において起きた各階層レベルのテーブルセグメントのキャッシュヒットを、各階層レベルの累積スコアに、つまり階層レベルごとの参照の偏り度合いを示す値に反映しない。一方、ホスト2によるリードアクセスに起因するテーブルキャッシュ61の参照傾向を無視するケースにおいては、アクセス履歴情報管理部152は、アドレス解決処理において起きた各階層レベルのテーブルセグメントのキャッシュヒットを、各階層レベルの累積スコアに、つまり階層レベルごとの参照の偏り度合いを示す値に反映しない。
【0178】
図35は、SSD3によって管理される複数のネームスペースそれぞれに対応する複数の領域を示す。
図35においては、コントローラ4が、ホスト2から受信されるネームスペース作成要求それぞれ応じて、ネームスペースNS#1、ネームスペースNS#2、…、ネームスペースNS#nを作成したケースが想定されている。この場合、ホスト2から見えるSSD容量(SSD3のユーザ容量)は、ネームスペースNS#1に対応する領域#1、ネームスペースNS#2に対応する領域#2、…、ネームスペースNS#nに対応する領域#nに論理的に分割される。
【0179】
図36に示すように、各ネームスペースには、論理アドレス空間(LBA範囲)が割り当てられる。LBA範囲のサイズ(つまりLBAの数)は、領域(ネームスペース)毎に可変である。ホスト2は、ネームスペース作成要求によって、作成すべきネームスペースのLBA範囲のサイズを指定することがとできる。一般に、各ネームスペースに割り当てられるべきLBA範囲は、LBA0から始まる。
【0180】
図37は、複数のネームスペースそれぞれに対応するテーブルキャッシュ毎に優先度情報を個別に調整するためのSSD3の構成例を示す。
ホスト2から受信される各リード/ライト要求は、論理アドレス、データ長に加え、アクセス対象のネームスペースの識別子(NSID)を指定するパラメータも含む。ネームスペースNS#1のNSIDを指定するライト要求をホスト2から受信した場合、コントローラ4は、このライト要求に対応するライトデータをネームスペースNS#1に対応するNAND型フラッシュメモリ5の領域#1に書き込む。また、ネームスペースNS#2のNSIDを指定するライト要求をホスト2から受信した場合、コントローラ4は、このライト要求に対応するライトデータをネームスペースNS#2に対応するNAND型フラッシュメモリ5の領域#2に書き込む。なお、NAND型フラッシュメモリ5の領域#1、#2は別々に管理されていなくてもよい。
【0181】
以下では、図示の簡単化のために、ネームスペースNS#1およびネームスペースNS#2の2つのネームスペースが作成されている場合を想定する。
ネームスペースNS#1に対応する論理アドレスそれぞれと物理アドレスそれぞれと間のマッピングは、このネームスペースNS#1用の多段マッピングテーブル8Aによって管理される。同様に、ネームスペースNS#2に対応する論理アドレスそれぞれと物理アドレスそれぞれと間のマッピングは、このネームスペースNS#2用の多段マッピングテーブル8Bによって管理される。
【0182】
多段マッピングテーブル8Aおよび多段マッピングテーブル8Bの各々は、
図5、
図6で説明した多段マッピングテーブル8と同様の構造を有している。多段マッピングテーブル8Aの下位テーブルおよび上位テーブルの各々の一部はRAM5上に存在するネームスペースNS#1用のテーブルキャッシュ61Aにキャッシュされる。多段マッピングテーブル8Aの最上位テーブル全体はテーブルキャッシュ61Aとは異なるRAM5内の記憶領域に格納される。
【0183】
同様に、多段マッピングテーブル8Bの下位テーブルおよび上位テーブルの各々の一部はRAM5上に存在するネームスペースNS#2用のテーブルキャッシュ61Bにキャッシュされる。多段マッピングテーブル8Bの最上位テーブル全体はテーブルキャッシュ61A、61Bとは異なるRAM5内の記憶領域に格納される。
【0184】
コントローラ4は、テーブルキャッシュ61A、61Bのそれぞれについて、キャッシュされている上位テーブルセグメントに対する参照の偏り度合いを個別に評価する。
すなわち、コントローラ4は、テーブルキャッシュ61A、61Bにそれぞれ対応するアクセス履歴情報管理部152A、152Bと、テーブルキャッシュ61A、61Bにそれぞれ対応する優先度調整部153A、153Bとを含む。
【0185】
アクセス履歴情報管理部152Aは、テーブルキャッシュ61Aに対応する上位テーブルヒット回数および累積スコアをネームスペースNS#1のアクセス履歴情報として管理する。アクセス履歴情報管理部152Bは、テーブルキャッシュ61Bに対応する上位テーブルヒット回数および累積スコアをネームスペースNS#2のアクセス履歴情報として管理する。
【0186】
優先度調整部153Aは、テーブルキャッシュ61Aに対応する累積スコアを閾値と比較し、その比較結果に基づいて、ネームスペースNS#1に対応する上位テーブル優先フラグをTrueまたはFalseに設定する。
優先度調整部153Bは、テーブルキャッシュ61Bに対応する累積スコアを閾値と比較し、その比較結果に基づいて、ネームスペースNS#2に対応する上位テーブル優先フラグをTrueまたはFalseに設定する。
【0187】
ネームスペースNS#1に対応する多段マッピングテーブル8AとネームスペースNS#2に対応する多段マッピングテーブル8Bは互いに別個の多段マッピングテーブルであってもよいが、
図38に示すように、多段マッピングテーブルの論理アドレス空間内の第1の論理アドレス範囲#1および第2の論理アドレス範囲#2に、ネームスペースNS#1用の論理アドレス範囲およびネームスペースNS#2用の論理アドレス範囲をそれぞれ割り当て、第1の論理アドレス範囲#1に対応する多段マッピングテーブル内の一部分をネームスペースNS#1用の多段マッピングテーブル8Aとして使用し、第2の論理アドレス範囲#2に対応する多段マッピングテーブル内の別の部分をネームスペースNS#2用の多段マッピングテーブル8Bとして使用してもよい。
【0188】
図39は、ネームスペース毎に個別に管理されるアクセス履歴情報と優先度情報とを示す。
ネームスペースNS#1に関しては、ネームスペースNS#1用のテーブルキャッシュ61Aの参照傾向に基づいて上位テープルヒット回数および累積スコアがネームスペースNS#1用のアクセス履歴情報として管理される。さらに、ネームスペースNS#1に対応する上位テーブル優先フラグが、ネームスペースNS#1用の優先度情報として管理される。
【0189】
同様に、ネームスペースNS#2に関しては、ネームスペースNS#2用のテーブルキャッシュ61Bの参照傾向に基づいて上位テープルヒット回数および累積スコアがネームスペースNS#2用のアクセス履歴情報として管理される。さらに、ネームスペースNS#2に対応する上位テーブル優先フラグが、ネームスペースNS#2用の優先度情報として管理される。
【0190】
テーブルキャッシュ61A,61Bの各々がより多くの階層レベルに対応するセグメントそれぞれをキャッシュするケースにおいては、これら階層レベルそれぞれに対応するヒット回数とこれら階層レベルそれぞれに対応する累積スコアとがアクセス履歴情報として管理されてもよい。また、これら階層レベルそれぞれに対応する優先度が優先度情報として管理されてもよい。
【0191】
例えば、テーブルキャッシュ61Aにおいて、階層レベル1のテーブルセグメントがヒットした場合には、アクセス履歴情報管理部152Aは、このヒットしたテーブルセグメントの現在のLRU順位に対応するスコアを、この階層レベル1に対応するスコア加算値テーブルから取得し、このスコアを階層レベル1に対応する累積スコアに加算する。テーブルキャッシュ61Aにおいて、階層レベル2のテーブルセグメントがヒットした場合には、アクセス履歴情報管理部152Aは、このヒットしたテーブルセグメントの現在のLRU順位に対応するスコアを、この階層レベル2に対応するスコア加算値テーブルから取得し、このスコアを階層レベル2に対応する累積スコアに加算する。テーブルキャッシュ61Aにおいて、階層レベル3のテーブルセグメントがヒットした場合には、アクセス履歴情報管理部152Aは、このヒットしたテーブルセグメントの現在のLRU順位に対応するスコアを、この階層レベル3に対応するスコア加算値テーブルから取得し、このスコアを階層レベル3に対応する累積スコアに加算する。このようにして、階層レベル毎に累積スコアを算出することにより、テーブルキャッシュ61Aにキャッシュされているテーブルセグメントに対する参照の偏り度合いを階層レベル毎に評価できるので、この評価結果に基づいて、階層レベルそれぞれに対応する優先度を設定することができる。この結果、テーブルキャッシュ61Aに3階層レベル以上のテーブルセグメントをキャッシュする場合においても、階層レベルごとの累積スコアに基づいて階層レベルごとに優先度を設定でき、そして高い優先度を有する階層レベルのセグメントそれぞれを低い優先度を有する階層レベルのセグメントそれぞれよりも優先してテーブルキャッシュ61Aにキャッシュすることができる。
【0192】
テーブルキャッシュ61Bにおいても、階層レベル毎に累積スコアを算出する処理と、階層レベルごとの累積スコアに基づいて階層レベルごとに優先度を設定する処理とが実行される。この結果、テーブルキャッシュ61Bに3階層レベル以上のテーブルセグメントをキャッシュする場合においても、階層レベルごとの累積スコアに基づいて階層レベルごとに優先度を設定でき、そして高い優先度を有する階層レベルのセグメントそれぞれを低い優先度を有する階層レベルのセグメントそれぞれよりも優先してテーブルキャッシュ61Aにキャッシュすることができる。
【0193】
図40のフローチャートは、複数のネームスペース内のネームスペースNS#1に対して実行される優先度情報更新処理の手順を示す。
優先度調整部153Aは、NS#1に対する累積スコアを閾値と比較する(ステップS81)。NS#1に対する累積スコアが閾値を下回った場合(ステップS82のYES)、優先度調整部153Aは対応するNS#1に対応する上位テーブル優先フラグをTrueにセットする(ステップS83)。
【0194】
一方、NS#1に対する累積スコアが閾値を下回っていない場合(ステップS82のNO)、優先度調整部153Aは対応するNS#1に対応する上位テーブル優先フラグをFalseにセットする(ステップS84)。
そして、優先度調整部153Aは、NS#1に対応する上位テーブルヒット回数およびNS#1に対応する累積スコアの各々を初期値にリセットし(ステップS85)、優先度情報更新処理を終了する。
【0195】
図41のフローチャートは、複数のネームスペース内のネームスペースNS#2に対して実行される優先度情報更新処理の手順を示す。
優先度調整部153Bは、NS#2に対する累積スコアを閾値と比較する(ステップS91)。NS#2に対する累積スコアが閾値を下回った場合(ステップS92のYES)、優先度調整部153Bは対応するNS#2に対応する上位テーブル優先フラグをTrueにセットする(ステップS93)。
【0196】
一方、NS#2に対する累積スコアが閾値を下回っていない場合(ステップS92のNO)、優先度調整部153Bは対応するNS#2に対応する上位テーブル優先フラグをFalseにセットする(ステップS94)。
そして、優先度調整部153Bは、NS#2に対応する上位テーブルヒット回数およびNS#2に対応する累積スコアの各々を初期値にリセットし(ステップS95)、優先度情報更新処理を終了する。
【0197】
図40、
図41では、上位テーブルの累積スコアに基づいて上位テーブルの優先度を設定する処理について説明したが、テーブルキャッシュ61A,61Bの各々がより多くの階層レベルに対応するセグメントそれぞれをキャッシュするケースにおいては、上述したように、複数の階層レベルそれぞれに対応する複数の累積スコアに基づいてこれら複数の階層レベルそれぞれに対する優先度が設定されてもよい。つまり、テーブルキャッシュ61A,61Bの各々について、階層レベルごとの累積スコアに基づいて階層レベルごとに優先度が設定される。そしてテーブルキャッシュ61A,61Bの各々において、高い優先度を有する階層レベルのセグメントそれぞれを低い優先度を有する階層レベルのセグメントそれぞれよりも優先してキャッシュする動作が実行される。
【0198】
図42、
図43は、ホスト2による個々のネームスペースに対するアクセスの頻度に基づいて、複数のネームスペースそれぞれに対応する複数のテーブルキャッシュに割り当てるべきメモリ容量を調整する動作を示す。なお、アクセスの頻度のみならず、これら複数のネームスペースそれぞれに対応する複数のテーブルキャッシュに対応する累積スコアに基づいて、複数のネームスペースそれぞれに対応する複数のテーブルキャッシュに割り当てるべきメモリ容量を調整する動作が実行されてもよい。
【0199】
またキャッシュサイズ(キャッシュ容量)を調整する際には、使用されるべき閾値を調整されたキャッシュ容量に応じて調整する処理も実行されてもよい。
例えば、NS#1へのアクセス頻度が高く、NS#2へのアクセス頻度が低い場合、キャッシュコントローラ151は、
図42に示すように、テーブルキャッシュ61Aに割り当てるRAM6上の容量を増加させ、代わりにテーブルキャッシュ61Bに割り当てるRAM6上の容量を減少させる。これにより、ホスト2によってアクセスされる頻度が高いネームスペースに対応するテーブルキャッシュのサイズを増やすことができるので、高い頻度でアクセスされるこのテーブルキャッシュのヒット率を向上させることができる。
【0200】
一方、NS#1へのアクセス頻度が低く、NS#2へのアクセス頻度が高い場合、キャッシュコントローラ151は、
図43に示すように、テーブルキャッシュ61Aのキャッシュ容量を減少させ、テーブルキャッシュ61Bのキャッシュ容量を増加させる。
【0201】
あるいは、テーブルキャッシュ61Aの累積スコアとテーブルキャッシュ61Bの累積スコアとの関係に基づいて、例えば、アクセス傾向が広域アクセスであると判断されるキャッシュのサイズが増加されるように、テーブルキャッシュ61Aおよびテーブルキャッシュ61Bに割り当てるべきメモリ容量が調整されてもよい。
【0202】
このように、本実施形態では、(i)ホスト2による複数のネームスペースそれぞれに対するアクセスの頻度、および(ii)各テーブルキャッシュに対応する階層レベルごとの累積スコア、の少なくとも一方に基づいて、これらテーブルキャッシュそれぞれのサイズが調整される。尚、これらテーブルキャッシュそれぞれのサイズを調整する処理は、コントローラ4(例えばCPU12)によって実行されてもよい。
【0203】
(第2実施形態)
図44を参照して、第2実施形態に係るストレージシステムを含む情報処理システム1の構成を説明する。
このストレージシステムは、複数のストレージデバイスを含むストレージアレイ100として実現されている。ストレージアレイ100に含まれる複数のストレージデバイスはSSDであってもよいし、ハードディスクドライブ(HDD)であってもよい。以下では、ストレージアレイ100に含まれる複数のストレージデバイスがSSDである場合を想定する。
【0204】
ストレージアレイ100は、コントローラ101、RAM102、複数のSSD200-1~200-nを備える。コントローラ101は、これらSSD200-1~200-nそれぞれを論理ボリュームとして管理する。この論理ボリュームの容量は、SSD200-1~200-nそれぞれの容量の合計に相当する。ホスト2は、ストレージアレイ100を一つのストレージデバイスとして認識する。あるいは、コントローラ101は、複数のネームスペースをサポートする機能を有していてもよい。この場合には、ホスト2から見えるストレージアレイ100の容量(ユーザ容量)は複数のネームスペースに対応する複数の領域に論理的に分割される。したがって、ホスト2は、ストレージアレイ100を複数の領域(複数のストレージデバイス)として扱うことができる。
【0205】
SSD200-1~200-nの各々は、論理物理アドレス変換テーブルとして機能するルックアップテーブル(LUT)を管理している。
多段マッピングテーブル300は、ホスト2によって指定される第1タイプの論理アドレスそれぞれとSSD200-1~200-nをアクセスするための第2タイプの論理アドレスそれぞれとの間のマッピングを管理するために使用される。多段マッピングテーブル300は、
図5、
図6で説明した多段マッピングテーブル8と同様に、階層化された複数のテーブルを含む。多段マッピングテーブル300は、SSD200-1~200-nのいずれか一つに格納されてもよいし、SSD200-1~200-nの幾つかのSSDに分散されていてもよい。
【0206】
多段マッピングテーブル300の一部はテーブルキャッシュ311にキャッシュされる。テーブルキャッシュ311はRAM102の記憶領域に配置されてもよいし、あるいは高速なSSDなどのストレージデバイスの記憶領域に配置されてもよい。
コントローラ101は、SSD200-1~200-nとテーブルキャッシュ311とを制御する。コントローラ101は、テーブルキャッシュ311に格納されている階層レベルそれぞれに対応するセグメント(アドレス変換データ部分)を参照することによって、第1タイプの論理アドレスを第2タイプの論理アドレスに変換するためのアドレス解決処理と、第2タイプの論理アドレスを更新するアドレス更新処理とを実行する。
【0207】
コントローラ101は、キャッシュコントローラ401、アクセス履歴情報管理部402、および優先度調整部403を含む。キャッシュコントローラ401、アクセス履歴情報管理部402、および優先度調整部403は、
図23で説明したキャッシュコントローラ151、アクセス履歴情報管理部152、および優先度調整部153と同様に構成されている。
【0208】
図45は、マッピングテーブルの例を示す。
図45では、第1タイプの論理アドレスはグローバル論理アドレスとして示されている。グローバル論理アドレス0に対応するデータがSSD(#1)200-1のLBA100に書き込まれた場合、SSD(#1)200-1の識別子(ID#1)と、LBA100とが、グローバル論理アドレス0に対応する第2タイプの論理アドレスとしてマッピングテーブルに登録される。グローバル論理アドレス1に対応するデータがSSD(#1)200-1のLBA110に書き込まれた場合、SSD(#1)200-1の識別子(ID#1)と、LBA110とが、グローバル論理アドレス1に対応する第2タイプの論理アドレスとしてマッピングテーブルに登録される。同様に、グローバル論理アドレス2に対応するデータがSSD(#2)200-2のLBA50に書き込まれた場合、SSD(#2)200-2の識別子(ID#2)と、LBA50とが、グローバル論理アドレス2に対応する第2タイプの論理アドレスとしてマッピングテーブルに登録される。
【0209】
本実施形態では、このマッピングテーブルは、階層構造を有する上述の多段マッピングテーブル300として実現されている。
図46に示されているように、多段マッピングテーブル300の下位テーブル301は、セグメントと称される複数のデータ部分(アドレス変換データ部分)#0、#1、#2、…#127、…、を含む。下位テーブル301の一つのセグメント(一つのアドレス変換データ部分)は、例えば、連続する128個のマッピング情報の集合である。換言すれば、下位テーブル301の各セグメント、つまり下位テーブル301の各アドレス変換データ部分は、例えば4KiBの刻みで連続する128個の第1タイプの論理アドレスにそれぞれ対応する128個の第2タイプの論理アドレスをマッピング情報として含む。各第2タイプの論理アドレスは、ある第1タイプの論理アドレスに対応するデータが書き込まれたSSDの識別子(デバイスID)とこのデータが書き込まれたこのSSDの論理アドレス(ローカル論理アドレス)とを示す。このように、下位テーブル301は、第2タイプの論理アドレスそれぞれを管理する複数のセグメント(アドレス変換データ部分)を含む。以下では、下位テーブル301に属するセグメントは下位テーブルセグメントとしても参照される。
【0210】
多段マッピングテーブル300の上位テーブル302も、セグメントと称される複数のデータ部分(アドレス変換データ部分)#0、#1、#2、…を含む。上位テーブル302の一つのセグメント(一つのアドレス変換データ部分)は、例えば、連続する128個の下位テーブルセグメントそれぞれが格納されているSSD内の位置を示す第2タイプの論理アドレスを管理する。各下位テーブルセグメントはSSD200-1~200-n内のどのSSDに格納されていてもよい。上位テーブル302の各セグメントが128個の下位テーブルセグメントの位置を示すので、上位テーブル302に含まれるセグメントの数は下位テーブルセグメントの数の1/128である。以下では、上位テーブル302のセグメントは上位テーブルセグメントとしても参照される。
【0211】
多段マッピングテーブル300の最上位テーブル303は、複数のポインタを含む。これらポインタは、全ての上位テーブルセグメントそれぞれが格納されているSSD内の位置を示す第2タイプの論理アドレスを管理する。各上位テーブルセグメントもSSD200-1~200-n内のどのSSDに格納されていてもよい。
【0212】
第2実施形態においても、第1実施形態と同様に、テーブルキャッシュ311に格納されているセグメントに対する、階層レベルごとの参照の偏り度合いに基づいて、階層レベルごとに優先度が設定される。そして、高い優先度を有する階層レベルのセグメントそれぞれを低い優先度を有する階層レベルのセグメントそれぞれよりも優先してテーブルキャッシュ311にキャッシュする動作が実行される
以下では、テーブルキャッシュ311に2つの階層レベルに対応する2種類のセグメント(上位テーブルセグメント、下位テーブルセグメント)のみがキャッシュされるケースを例示して、第2実施形態の動作を説明する。
【0213】
テーブルキャッシュ311にキャッシュされる上位テーブルセグメントに対する参照の偏り度合いを示す累積スコアが閾値を下回る場合には、ホスト2の現在のアクセス傾向が広域アクセスであると推定される。そして、上位テーブルの優先度が上げられ、上位テーブルセグメントを下位テーブルセグメントよりも優先してテーブルキャッシュ311にキャッシュするための上位テーブル優先モードがイネーブルとなる。これにより、広域アクセス時のアドレス解決処理およびアドレス更新処理のために必要なより多くの上位テーブルセグメントをテーブルキャッシュ311に載せることが可能となり、テーブルキャッシュ311のヒット率を向上させることができる。
【0214】
一方、キャッシュされる上位テーブルセグメントに対する参照の偏り度合いを示す累積スコアが閾値以上である場合には、ホスト2の現在のアクセス傾向が狭域アクセスであると推定される。そして、上位テーブルの優先度が下げられ、上位テーブル優先モードはディセーブルとなる。これにより、参照される頻度が高い特定の一つ又は幾つかの上位テーブルセグメントと多くの下位テーブルセグメントとをテーブルキャッシュ311に載せることが可能となり、テーブルキャッシュ311のヒット率を向上させることができる。
【0215】
このように、テーブルキャッシュ311にキャッシュされている上位テーブルセグメントに対する参照の偏り度合いに基づいて、(i)上位テーブルセグメントそれぞれを下位テーブルセグメントそれぞれよりも優先してテーブルキャッシュ311にキャッシュする動作(上位テーブル優先モードがイネーブル)と、(ii)上位テーブルセグメントそれぞれを下位テーブルセグメントそれぞれよりも優先せずに、下位テーブルセグメントそれぞれと上位テーブルセグメントそれぞれをテーブルキャッシュ311にキャッシュする動作(上位テーブル優先モードがディセーブル)とが選択的に実行される。
【0216】
上位テーブルセグメントを下位テーブルセグメントよりも優先してテーブルキャッシュ311にキャッシュする処理においては、下位テーブルセグメントそれぞれを上位テーブルセグメントよりも優先して置換対象として選択する動作が行われる。
上位テーブルセグメントを下位テーブルセグメントよりも優先せずに、上位テーブルセグメントと下位テーブルセグメントとをテーブルキャッシュ311にキャッシュする処理においては、置換対象候補が上位テーブルセグメントであるか下位テーブルセグメントであるかは考慮されず、LRU置換アルゴリズム等に基づいて置換対象候補から置換対象セグメントが選択される。
【0217】
なお、第2実施形態においても、上位テーブル優先モードのイネーブル/ディセーブルの切り替え動作がヒステリシス特性を有するように、上位テーブル優先フラグの現在の状態に応じて、累積スコアと比較される閾値を変更してもよい。
この場合、現在の上位テーブル優先フラグがFalseであるならば、累積スコアは第1の閾値と比較される。累積スコアが第1の閾値を下回った場合、上位テーブル優先フラグがTrueにセットされる。累積スコアが第1の閾値を下回らなかった場合、上位テーブル優先フラグがFalseに維持される。
【0218】
現在の上位テーブル優先フラグがTrueであるならば、つまり、上位テーブルセグメントそれぞれを下位テーブルセグメントそれぞれよりも優先してテーブルキャッシュ311にキャッシュする動作が実行されている期間においては、累積スコアは第1の閾値よりも高いまたは低い第2の閾値と比較される。累積スコアが第2の閾値以上になった場合、上位テーブル優先フラグがFalseに変更される。そして、上位テーブルセグメントそれぞれを下位テーブルセグメントそれぞれよりも優先せずに、下位テーブルセグメントそれぞれと上位テーブルセグメントそれぞれをテーブルキャッシュ311にキャッシュする動作が実行される。
【0219】
なお、第2実施形態においても、第1実施形態と同様に、テーブルキャッシュ311により多くの階層レベルのセグメントをキャッシュするケースにおいては、キャッシュされている複数の階層レベルそれぞれに対応する累積スコアが算出されてもよい。そして、算出された階層ごとの累積スコアに基づいて、階層ごとに優先度が設定されてもよい。
【0220】
また、第2実施形態においても、第1実施形態と同様に、ホスト2によるライトアクセスまたはリードアクセスの一方を無視して、ホスト2によるアクセス傾向を評価してもよい。
また、第2実施形態においても、第1実施形態と同様に、複数のネームスペースに対応する複数のテーブルキャッシュが管理されてもよい。この場合、コントローラ101内のキャッシュコントローラ401は、複数のネームスペースに対応する複数の多段マッピングテーブルそれぞれの一部をキャッシュするように構成された複数のテーブルキャッシュを制御する。例えば、ネームスペースNS#1のNSIDを指定するライトまたはリード要求をホスト2から受信した場合、キャッシュコントローラ401は、ネームスペースNS#1用のテーブルキャッシュを参照する。また、ネームスペースNS#2のNSIDを指定するライトまたはリード要求をホスト2から受信した場合、キャッシュコントローラ401は、ネームスペースNS#2用のテーブルキャッシュを参照する。そして、優先度調整部403は、複数のテーブルキャッシュのそれぞれに対応する累積スコアを評価し、この評価結果に基づいて、下位テーブルおよび上位テーブルそれぞれに対応する優先度をテーブルキャッシュ毎に個別に設定する。
【0221】
また、第2実施形態においても、第1実施形態と同様に、コントローラ101は、(i)ホスト2による複数のネームスペースそれぞれに対するアクセスの頻度、および(ii)各テーブルキャッシュに対応する階層レベルごとの累積スコア、の少なくとも一方に基づいて、これらテーブルキャッシュそれぞれのサイズを調整してもよい。
【0222】
以上説明したように、第1実施形態および第2実施形態によれば、キャッシュされている階層レベルごとの参照の偏り度合いに基づいて、階層ごとに優先度が設定され、そして高い優先度を有する階層レベルのセグメントそれぞれを低い優先度を有する階層レベルのセグメントそれぞれよりも優先してキャッシュする動作が実行される。よって、ホスト2によるアクセス傾向に応じて、優先してキャッシュされる階層レベルの順番を調整することができる。
【0223】
例えば、テーブルキャッシュ内の上位テーブルセグメントに着目した場合には、テーブルキャッシュ内の上位テーブルセグメントに対する参照の偏り度合いが閾値を下回る場合、上位テーブルの階層レベルに対応する優先度が上げられる、上位テーブル優先フラグがTrueに設定される。これにより、上位テーブルセグメントそれぞれを下位テーブルセグメントそれぞれよりも優先してテーブルキャッシュにキャッシュする動作が実行される。
【0224】
多数の上位テーブルセグメントが参照される広域アクセス時には、テーブルキャッシュ内の上位テーブルセグメントに対する参照の偏り度合いは弱くなる。したがって、テーブルキャッシュ内の上位テーブルセグメントに対する参照の偏り度合いが閾値を下回ることを条件に上位テーブル優先フラグをTrueに設定することにより、適切なタイミングで、上位テーブルセグメントそれぞれを下位テーブルセグメントよりも優先してテーブルキャッシュにキャッシュする動作を開始することが可能となる。この結果、アドレス変換に関する性能を改善することができる。
【0225】
また、テーブルキャッシュ内の上位テーブルセグメントに対する参照の偏り度合いが閾値を下回るという条件が満たされない場合には(狭域アクセス)、上位テーブルセグメントそれぞれを下位テーブルセグメントよりも優先せずに、上位テーブルセグメントそれぞれと下位テーブルセグメントそれぞれとをテーブルキャッシュにキャッシュする動作が実行される。
【0226】
よって、
図12で説明したように、狭域アクセス時においては、SSDがアクセスされる平均回数をほぼ1回にすることができ、広域アクセス時においては、SSDがアクセスされる平均回数をほぼ2回にすることができる。
なお、第1実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
【0227】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0228】
2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、7…ユーザデータ、8…多段マッピングテーブル、61…テーブルキャッシュ、151…キャッシュコントローラ、152…アクセス履歴情報管理部、153…優先度調整部。