(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-07
(45)【発行日】2024-06-17
(54)【発明の名称】メモリシステム及び情報処理システム
(51)【国際特許分類】
G06F 12/02 20060101AFI20240610BHJP
G06F 12/00 20060101ALI20240610BHJP
【FI】
G06F12/02 510A
G06F12/00 597U
G06F12/02 570A
(21)【出願番号】P 2020119879
(22)【出願日】2020-07-13
【審査請求日】2023-03-09
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】佐々木 勇輝
(72)【発明者】
【氏名】菅野 伸一
【審査官】松平 英
(56)【参考文献】
【文献】特開2014-179084(JP,A)
【文献】特開2020-003858(JP,A)
【文献】特開2012-123499(JP,A)
【文献】特開2018-041204(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06-3/08
12/00-12/128
13/16-13/18
(57)【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムにおいて、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラと
を具備し、
前記不揮発性メモリは、
前記ホストが前記メモリシステムにアクセスする際に使用する論理アドレスと前記不揮発性メモリ内のデータが書き込まれている物理アドレスとの対応関係を管理するためのアドレス変換テーブルと、
前記不揮発性メモリに書き込まれているデータが有効であるか無効であるかを管理するためのデータマップと
を格納し、
前記コントローラは、
前記不揮発性メモリに書き込まれているデータを無効化するための
第1無効化コマンドを前記ホストから受信した場合に、前記
第1無効化コマンドに基づいて前記アドレス変換テーブル
を更新するとともに、前記
第1無効化コマンドに基づく無効化要求をキューに格納し、
前記
第1無効化コマンドに対する応答
を、前記アドレス変換テーブルが更新された
後に前記ホストに送信
し、
前記第1無効化コマンドに対する前記応答が前記ホストに送信された後に前記無効化要求を前記キューから取り出し、前記無効化要求に基づいて前記データマップを更新する
メモリシステム。
【請求項2】
前記
第1無効化コマンドの後に前記
第1無効化コマンド以外の他のコマンドを前記ホストから受信した場合、前記他のコマンドは、前記
第1無効化コマンドに対する
前記応答が前記ホストに送信された後に実行される請求項1記載のメモリシステム。
【請求項3】
前記
第1無効化コマンドは、前記
第1無効化コマンドによって無効化されるべきデータにアクセスするための
第1論理アドレスを含み、
前記他のコマンドは、前記
第1論理アドレスを指定する書き込みコマンド、
前記第1論理アドレスを指定する読み出しコマンド
、及び前記
第1論理アドレスを指定する第2無効化コマンド
、のうちの少なくとも1つを含む
請求項2記載のメモリシステム。
【請求項4】
前記アドレス変換テーブルは、複数の断片テーブルを含み、
前記複数の断片テーブルの各々は、論理アドレスの範囲が割り当てられており、
前記
第1無効化コマンドは、前記
第1無効化コマンドによって無効化されるべきデータにアクセスするための論理アドレスを含み、
前記コントローラは、前記複数の断片テーブルのうちの前記
第1無効化コマンドに含まれる論理アドレスに基づいて特定される断片テーブルを更新し、
前記無効化要求は、前記更新される前の断片テーブルを含む
請求項
1記載のメモリシステム。
【請求項5】
前記無効化要求に含まれる断片テーブルには、前記
第1無効化コマンドによって無効化されるべきデータを判別するための判別情報が付与される請求項
4記載のメモリシステム。
【請求項6】
前記判別情報は、マジックナンバーを含み、
前記マジックナンバーは、前記無効化要求に含まれる断片テーブルに設定される
請求項
5記載のメモリシステム。
【請求項7】
前記判別情報は、前記
第1無効化コマンドに含まれる論理アドレスの範囲を含む請求項
5記載のメモリシステム。
【請求項8】
前記無効化要求は、前記
第1無効化コマンドに対する
前記応答の送信と同時または前記送信後に前記キューに格納される請求項
1~
7のいずれか一項に記載のメモリシステム。
【請求項9】
前記
第1無効化コマンドの後に前記ホストから受信される他のコマンドは、前記無効化要求よりも優先的に実行され、
前記コントローラは、前記他のコマンドが実行された後に前記無効化要求をキューから取り出し、前記無効化要求に基づいて前記データマップを更新する
請求項
1~
8のいずれか一項に記載のメモリシステム。
【請求項10】
前記アドレス変換テーブルは、階層構造を有し、複数の階層に対応する複数の断片テーブルを含む請求項1~
9のいずれか一項に記載のメモリシステム。
【請求項11】
前記コントローラは、複数の
前記第1無効化コマンドに基づく複数の
前記無効化要求を
前記キューに格納し、前記複数の無効化要求に対する優先度制御を実行する請求項
1~
10のいずれか一項に記載のメモリシステム。
【請求項12】
前記コントローラは、前記複数の無効化要求の各々に含まれる断片テーブルに対応する階層に基づいて、前記階層が上位の断片テーブルを含む無効化要求に基づく前記データマップの更新を優先的に実行する請求項
11記載のメモリシステム。
【請求項13】
前記コントローラは、
前記ホストによって
第1無効化要求よりも高い優先度が指定された
第2無効化要求に基づく前記データマップの更新を
、前記第1無効化要求に基づく前記データマップの更新よりも優先的に実行する請求項
11記載のメモリシステム。
【請求項14】
ホストに接続可能なメモリシステムにおいて、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラと
を具備し、
前記コントローラは、
前記ホストが前記メモリシステムにアクセスする際に使用する論理アドレスと前記不揮発性メモリ内のデータが書き込まれている物理アドレスとの対応関係を管理するためのアドレス変換テーブルと、
前記不揮発性メモリに書き込まれているデータが有効であるか無効であるかを、前記物理アドレス毎に管理するための、前記アドレス変換テーブルとは異なるデータマップと
を管理し、
前記コントローラは、
前記不揮発性メモリに書き込まれているデータを無効化するための無効化コマンドを前記ホストから受信した場合に、前記無効化コマンドに基づいて前記アドレス変換テーブルを前記物理アドレス毎に更新し、前記無効化コマンドに基づいて前記データマップを前記物理アドレス毎に更新するための情報を生成し、
前記無効化コマンドに対する応答を、前記アドレス変換テーブルの更新と前記情報の生成とを実行した後、前記データマップが更新される前に前記ホストに送信する
メモリシステム。
【請求項15】
ホストと、前記ホストと通信可能に接続されているメモリシステムとを備える情報処理システムにおいて、
前記メモリシステムは、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラと
を具備し、
前記不揮発性メモリは、
前記ホストが前記メモリシステムにアクセスする際に使用する論理アドレスと前記不揮発性メモリ内のデータが書き込まれている物理アドレスとの対応関係を管理するためのアドレス変換テーブルと、
前記不揮発性メモリに書き込まれているデータが有効であるか無効であるかを管理するためのデータマップと
を格納し、
前記コントローラは、
前記不揮発性メモリに書き込まれているデータを無効化するための無効化コマンドを前記ホストから受信した場合に、前記無効化コマンドに基づいて前記アドレス変換テーブル
を更新するとともに、前記
無効化コマンドに基づく無効化要求をキューに格納し、
前記無効化コマンドに対応する応答
を、前記アドレス変換テーブルが更新された
後に前記ホストに送信
し、
前記無効化コマンドに対する前記応答が前記ホストに送信された後に前記無効化要求を前記キューから取り出し、前記無効化要求に基づいて前記データマップを更新する
情報処理システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリシステム及び情報処理システムに関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一例としては、例えばNAND型フラッシュメモリを備えるソリッドステートドライブ(SSD:Solid State Drive)が知られている。
【0003】
メモリシステムにおいては、ホストが当該メモリシステムにアクセスする際に使用する論理アドレスと不揮発性メモリ内のデータが書き込まれている場所に相当する物理アドレスとの対応関係を管理するアドレス変換テーブルを使用して、当該ホストから送信されたコマンドにおいて指定された論理アドレスを物理アドレスに変換するアドレス変換が実行される。
【0004】
ところで、ホストが使用するファイルシステムにおいて所定のファイルが削除された場合には、当該ファイルに相当するデータを無効化するためのコマンド(以下、Trimコマンドと表記)がホストからメモリシステムに発行される。
【0005】
このTrimコマンドがメモリシステムにおいて受信されると、当該メモリシステムは、上記したアドレス変換テーブル(論理アドレスと物理アドレスの対応関係)を更新する処理を実行する。
【0006】
また、メモリシステムは不揮発性メモリに書き込まれているデータが有効であるか無効であるかを管理する有効データマップを保持しており、上記したTrimコマンドが受信された場合には当該有効データマップも更新される。
【0007】
Trimコマンドに対する応答時間を短縮させる仕組みが望まれている。
【先行技術文献】
【特許文献】
【0008】
【文献】特開2018-041204号公報
【文献】特開2009-163329号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
そこで、本発明が解決しようとする課題は、不揮発性メモリに書き込まれているデータを無効化するコマンドに対する応答時間を短縮させることが可能なメモリシステム及び情報処理システムを提供することにある。
【課題を解決するための手段】
【0010】
実施形態によれば、ホストに接続可能なメモリシステムが提供される。前記メモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備する。前記不揮発性メモリは、前記ホストが前記メモリシステムにアクセスする際に使用する論理アドレスと前記不揮発性メモリ内のデータが書き込まれている物理アドレスとの対応関係を管理するためのアドレス変換テーブルと、前記不揮発性メモリに書き込まれているデータが有効であるか無効であるかを管理するためのデータマップとを格納する。前記コントローラは、前記不揮発性メモリに書き込まれているデータを無効化するための第1無効化コマンドを前記ホストから受信した場合に、前記第1無効化コマンドに基づいて前記アドレス変換テーブルを更新するとともに、前記第1無効化コマンドに基づく無効化要求をキューに格納する。前記コントローラは、前記第1無効化コマンドに対する応答を、前記アドレス変換テーブルが更新された後に前記ホストに送信する。前記コントローラは、前記第1無効化コマンドに対する前記応答が前記ホストに送信された後に前記無効化要求を前記キューから取り出し、前記無効化要求に基づいて前記データマップを更新する。
【図面の簡単な説明】
【0011】
【
図1】実施形態に係るメモリシステムを含む情報処理システムの構成の一例を示すブロック図。
【
図2】LUT及びADMの動作について説明するための図。
【
図3】LUT及びADMの動作について説明するための図。
【
図4】LUT及びADMの動作について説明するための図。
【
図5】LUT及びADMの動作について説明するための図。
【
図6】本実施形態に係るメモリシステムの動作の概要を説明するための図。
【
図7】本実施形態における階層構造を有するLUTについて概念的に説明するための図。
【
図8】本実施形態におけるLUTに含まれる断片テーブルのデータ構造の一例を示す図。
【
図9】本実施形態におけるADMのデータ構造の一例を示す図。
【
図10】ホストからTrimコマンドが発行された際の本実施形態に係るメモリシステムの処理手順の一例を示すフローチャート。
【
図11】ホストからTrimコマンドが発行された際の本実施形態に係るメモリシステムの具体的な動作例について説明するための図。
【
図12】本実施形態の変形例に係るメモリシステムの動作について説明するための図。
【
図13】複数の断片テーブルを含む無効化要求がキューイングされる場合の本実施形態の変形例に係るメモリシステムの動作について説明するための図。
【
図14】本実施形態の変形例において無効化要求キューに格納されている無効化要求を実行する際の具体的な動作例について説明するための図。
【
図15】本実施形態の変形例において無効化要求キューに格納されている無効化要求を実行する際の具体的な動作例について説明するための図。
【
図16】本実施形態の変形例において無効化要求キューに格納されている無効化要求を実行する際の具体的な動作例について説明するための図。
【
図17】本実施形態の変形例において無効化要求キューに格納されている無効化要求を実行する際の具体的な動作例について説明するための図。
【
図18】本実施形態の変形例において無効化要求キューに格納されている無効化要求を実行する際の具体的な動作例について説明するための図。
【発明を実施するための形態】
【0012】
以下、図面を参照して、実施形態について説明する。
図1は、本実施形態に係るメモリシステムを含む情報処理システムの構成の一例を示すブロック図である。
【0013】
本実施形態において、メモリシステムは、不揮発性メモリにデータ(ユーザデータ)を書き込み、当該不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、例えばソリッドステートドライブ(SSD:Solid State Drive)として実現されてもよいし、メモリカード等の他のストレージデバイスとして実現されてもよい。本実施形態においては、メモリシステムがSSDとして実現されている場合を想定する。
【0014】
図1に示すように、情報処理システム1は、ホスト2及びメモリシステム3を備える。ホスト2は、メモリシステム3に対してホスト装置として動作する情報処理装置であり、例えばパーソナルコンピュータ、サーバ装置、携帯電話、撮像装置、携帯端末(タブレットコンピュータまたはスマートフォン等)、ゲーム機器または車載端末(カーナビゲーションシステム等)として実現され得る。
【0015】
メモリシステム3は、ホスト2に接続可能に構成されており、不揮発性メモリ4と、当該不揮発性メモリ4に対するデータの書き込み及び読み出しを制御するコントローラ5(制御回路)とを含む。なお、不揮発性メモリ4は、コントローラ5に対して着脱可能に構成されていてもよい。これによれば、メモリシステム3のメモリ容量を自由に拡張することができる。
【0016】
上記したようにメモリシステム3がSSDとして実現されている場合、不揮発性メモリ4は、例えばNAND型フラッシュメモリである。この場合、不揮発性メモリ4(NAND型フラッシュメモリ)は、マトリクス状に配置された複数のメモリセル(メモリセルアレイ)を含む。なお、不揮発性メモリ4は、2次元構造のNAND型フラッシュメモリであってもよいし、3次元構造のNAND型フラッシュメモリであってもよい。
【0017】
また、不揮発性メモリ4のメモリセルアレイは複数のブロックを含み、当該ブロックの各々は多数のページによって編成される。メモリシステム3(SSD)において、ブロックの各々は、データの消去単位として機能する。また、ページの各々は、データ書き込み動作及びデータ読み込み動作の単位である。
【0018】
また、不揮発性メモリ4には各種データが書き込まれるが、不揮発性メモリ4は、LUT(Look Up Table)と称されるアドレス変換テーブル(以下、単にLUTと表記)41を更に格納する。なお、LUT41は、L2Pとも称される。LUT41は、ホスト2がメモリシステム3にアクセスする(不揮発性メモリ4にデータを書き込むまたは不揮発性メモリ4からデータを読み出す)際に使用する論理アドレスと不揮発性メモリ4内のデータが書き込まれている物理的な位置を示す物理アドレスとの対応関係を管理するためのデータに相当する。換言すれば、LUT41には、論理アドレスの各々に対応づけて当該論理アドレスに対応する物理アドレスが格納されている。
【0019】
なお、不揮発性メモリ4がNAND型フラッシュメモリである場合、LUT41において管理される論理アドレスは論理ブロックアドレス(LBA:Logical Block Addressing)であり、物理アドレスは物理ブロックアドレス(PBA:Physical Block Addressing)である。以下の説明においては、論理アドレスをLBA、物理アドレスをPBAとして説明する。
【0020】
また、不揮発明メモリ4は、ADM(Active Data Map)と称される有効データマップ(以下、単にADMと表記)42を更に格納する。ADM42は、不揮発性メモリ4の物理アドレスの各々に書き込まれているデータが有効であるか無効であるかを管理するためのデータである。
【0021】
なお、LUT41及びADM42のうちの少なくとも一方は、例えば不揮発性メモリ4以外の不揮発性メモリに格納されていてもよい。また、不揮発性メモリ4は、データ、LUT41及びADM42を格納するメモリ(領域)を区分けするように構成されていてもよい。
【0022】
コントローラ5は、通信インタフェース制御部51、書き込みバッファメモリ52、読み出しバッファメモリ53、不揮発性メモリコントローラ54、メモリ55及びプロセッサ56を含む。なお、通信インタフェース制御部51、書き込みバッファメモリ52、読み出しバッファメモリ53、不揮発性メモリコントローラ54、メモリ55及びプロセッサ56は、内部バスIBにより電気的に接続される。
【0023】
通信インタフェース制御部51は、外部装置(例えば、ホスト2)とメモリシステム3との間の通信を制御する。具体的には、通信インタフェース制御部51は、ホスト2からの各種コマンドを受信する。ホスト2からの各種コマンドには、例えば書き込みコマンド(ライト要求)及び読み出しコマンド(リード要求)等が含まれる。
【0024】
ここで、通信インタフェース制御部51によって書き込みコマンドが受信された場合には当該書き込みコマンドに基づいて不揮発性メモリ4にデータが書き込まれるが、書き込みバッファメモリ52は、当該不揮発性メモリ4に書き込まれるデータを一時的に格納する。なお、書き込みバッファメモリ52に格納されたデータは、不揮発性メモリコントローラ54を介して不揮発性メモリ4に書き込まれる。
【0025】
一方、通信インタフェース制御部51によって読み出しコマンドが受信された場合には当該読み出しコマンドに基づいて不揮発性メモリ4からデータが読み出されるが、読み出しバッファメモリ53は、当該不揮発明メモリ4から読み出されたデータを一時的に格納する。なお、読み出しバッファメモリ53に格納されたデータは、通信インタフェース制御部51を介してホスト2に送信される。
【0026】
不揮発性メモリコントローラ54は、不揮発性メモリ4へのデータの書き込み及び当該不揮発性メモリ4からのデータの読み出しを制御する。なお、詳しい説明は省略するが、不揮発性メモリコントローラ54は、DMAC(Direct Memory Access Controller)、誤り訂正部、ランダマイザ(またはスクランブラ)等を含むように構成されていてもよい。
【0027】
メモリ55は、プロセッサ56の作業用メモリとして使用される主記憶装置である。メモリ55は、例えばDRAM(Dynamic Random Access Memory)であるが、SRAM(Static Random Access Memory)等の他の半導体メモリであっても構わない。
【0028】
なお、メモリ55は、不揮発性メモリ4と比較して高速に書き込み及び読み出し可能であり、キャッシュメモリ551(として利用される領域)を含む。キャッシュメモリ551は、例えば不揮発性メモリ4に格納されているLUT41及びADM42等のキャッシュデータを格納する。
【0029】
プロセッサ56は、内部バスIBを経由して、コントローラ5全体の動作を制御する。プロセッサ56は、例えば図示しないROM(Read Only Memory)等に格納されている制御プログラム(ファームウェア)を実行することによって様々な処理(例えばホスト2から受信される各種コマンドに対する処理等)を実行する。なお、プロセッサ56は、例えばCPU(Central Processing Unit)、MPU(Micro-Processing Unit)またはDSP(Digital Signal Processor)等であってもよい。
【0030】
プロセッサ56は、上記した制御プログラムを実行することによって、書き込み制御部561、読み出し制御部562、ガーベージコレクション制御部563、アドレス変換部564、管理部565及びキャッシュメモリ制御部566等の機能部を実現する。
【0031】
なお、これらの各部561~566は、上記したように制御プログラム(つまり、ソフトウェア)によって実現されるが、ハードウェアによって実現されてもよいし、ソフトウェアとハードウェアとの組み合わせによって実現されてもよい。
【0032】
書き込み制御部561は、通信インタフェース制御部51によって書き込みコマンドが受信された場合に、当該通信インタフェース制御部51、書き込みバッファメモリ52及び不揮発性メモリコントローラ54を制御し、当該書き込みコマンドに基づくデータを不揮発性メモリ4に書き込む処理を実行する。
【0033】
読み出し制御部562は、通信インタフェース制御部51によって読み出しコマンドが受信された場合に、当該通信インタフェース制御部51、読み出しバッファメモリ53及び不揮発性メモリコントローラ54を制御し、当該読み出しコマンドに基づくデータを不揮発性メモリ4から読み出す処理を実行する。
【0034】
ガーベージコレクション制御部563は、例えば書き込み制御部561、読み出し制御部562及び不揮発性メモリコントローラ54と協働することにより、上記したADM42を参照して不揮発性メモリ4に対するガーベージコレクション(GC)を実行する。ガーベージコレクションとは、不揮発性メモリ4の不要な領域を解放する処理である。なお、不揮発性メモリ4のメモリ領域の断片化を解消するコンパクションがガーベージコレクションとともに行われても構わない。
【0035】
ここで、上記した通信インタフェース制御部51によって受信されるホスト2からの読み出しコマンドにおいては当該ホスト2がデータにアクセスするためのLBAが含まれているが、当該読み出しコマンドがホスト2から受信された場合、アドレス変換部564は、不揮発性メモリ4格納されているLUT41を用いて、当該LBAをPBA(物理アドレス)に変換する処理を実行する。メモリシステム3においては、このようにアドレス変換部564によってLBAから変換されたPBAに基づいて不揮発性メモリ4からデータを読み出すことが可能となる。
【0036】
管理部565は、通信インタフェース制御部51によって受信されるホスト2からの書き込みコマンドに基づいて不揮発性メモリ4にデータが書き込まれた場合に、LUT41及びADM42を更新する処理を実行する。
【0037】
また、通信インタフェース制御部51によって受信されるホスト2からのコマンドには、書き込みコマンド及び読み込みコマンド以外に、例えば不揮発性メモリ4に書き込まれているデータを無効化するための無効化コマンド(以下、Trimコマンドと表記)が含まれる。管理部565は、このTrimコマンドが通信インタフェース制御部51によって受信された場合に、当該Trimコマンドに基づいてLUT41及びADM42を更新する処理を実行する。なお、Trimコマンドは、ストレージデバイスを接続するためのインタフェース規格に応じて、例えばUnmapコマンド等とも称される。
【0038】
キャッシュメモリ制御部566は、例えば読み出し制御部562を介して、不揮発性メモリ4からLUT41(の一部)またはADM42(の一部)を読み出し、当該LUT41またはADM42をキャッシュメモリ551に格納する。また、キャッシュメモリ制御部566は、書き込み制御部561を介して、キャッシュメモリ551に格納されているLUT41(の一部)またはADM42(の一部)を読み出し、当該LUT41またはADM42を不揮発性メモリ4へ書き込む(書き戻す)。
【0039】
なお、
図1においてはメモリシステム3がホスト2の外部に設けられている例について説明したが、当該ホスト2とメモリシステム3との間のインタフェースとしては、例えばNVMe over Fabrics等が使用されてもよい。また、メモリシステム3は、ホスト2に内蔵されていてもよい。更に、メモリシステム3は複数のホスト2と接続されていてもよいし、複数のメモリシステム3が1以上のホスト2と接続されていてもよい。
【0040】
ここで、
図2~
図5を参照して、LUT及びADMの動作について説明する。なお、
図2~
図5においては、説明の便宜上、不揮発性メモリ、LUT及びADMを簡易的に示している。
【0041】
まず、
図2は、初期状態(つまり、不揮発性メモリ4´にデータが書き込まれていない状態)のLUT41´及びADM42´を示している。なお、
図2に示す不揮発性メモリ4´は、当該不揮発性メモリ4´の全てのPBAにデータが書き込まれていないことを示している。
【0042】
LUT41´においては上記したように不揮発性メモリ4´に書き込まれているデータの各々に関するLBA及びPBAの対応関係が管理されるが、
図2においては不揮発性メモリ4´にはデータが書き込まれていないため、LUT41´にはPBA(LBA#0~LBA#n-1に対応するPBA)は格納されていない。なお、LBAに対応するPBAが存在しない場合、LUT41´には、当該LBAに対応づけて無効を表すマジックナンバーが設定(格納)される。
【0043】
一方、ADM42´においては、不揮発性メモリ4´に書き込まれているデータが有効であるか無効であるかが管理される。具体的には、ADM42´においてはデータが書き込まれる不揮発性メモリ4´の各PBAに対応する1ビットのフラグ情報421´が格納されている。このようなADM42´によれば、フラグ情報421´によって当該フラグ情報421´に対応するPBAに格納されているデータが有効であるか無効であるかを表すことができる。
【0044】
なお、データが有効であることを示すフラグ情報は例えば「1」であり、データが無効であることを示すフラグ情報は例えば「0」である。
図2においては、不揮発性メモリ4´にデータが書き込まれていないため、ADM42´に格納されているフラグ情報は全て「0」である。
【0045】
図2においては省略されているが、ADM42´は、例えばデータの消去単位であるブロック毎に用意されている。
【0046】
次に、
図3を参照して、ホスト2から書き込みコマンドが受信された場合のLUT41´及びADM42´の動作について説明する。
【0047】
書き込みコマンドにおいては、不揮発性メモリ4に書き込まれるデータ及び当該データにアクセスするためのLBAが指定されている。ここでは、書き込みコマンドにおいて、データ#1及び当該データ#1にアクセスするためのLBA#1と、データ#2及び当該データ#2にアクセスするためのLBA#3とが指定されているものとする。
【0048】
上記したようなLBA#1及びLBA#3に対する書き込みコマンドがホスト2から受信された場合(ステップS1)、当該書き込みコマンドにおいて指定されているデータ#1及びデータ#2が不揮発性メモリ4´の空いているPBAに書き込まれる(ステップS2)。ここでは、データ#1が不揮発性メモリ4´のPBA#0に書き込まれ、データ#2が不揮発性メモリ4´のPBA#1に書き込まれたものとする。なお、1つのPBAに書き込まれるデータのサイズは例えば4KiBであるが、当該データのサイズは任意に変更可能である。
【0049】
この場合、データ#1及びデータ#2が書き込まれたPBA#0及びPBA#1(つまり、PBA#0及びPBA#2に書き込まれたデータ)を有効化するために、ADM42´が更新される(ステップS3)。具体的には、
図3に示すように、ADM42´に格納されているフラグ情報のうち、データ#1及びデータ#2が書き込まれたPBA#0及びPBA#1に対応するフラグ情報が「0」から「1」に変更される。
【0050】
また、ステップS1において受信された書き込みコマンドにおいてはLBA#1及びLBA#3が指定されているため、LUT41´においては、当該LBA#1及びLBA#3に対応するPBAが更新される(ステップS4)。具体的には、PBA#0がLBA#1に対応づけてLUT41´に格納されるとともに、PBA#1がLBA#3に対応づけてLUT41´に格納される。なお、LUT41´に格納されるPBAのサイズは、例えば32ビット(4バイト)である。
【0051】
上記したようにLUT41´及びADM42´が更新されると、ステップS1において受信された書き込みコマンドに対する応答がホスト2に送信(返却)される。
【0052】
次に、
図4を参照して、ホスト2からTrimコマンドが受信された場合のLUT41´及びADM42´の動作について説明する。
図4においては、
図3において説明したようにLUT41´及びADM42´が動作した(つまり、書き込みコマンドに対する応答がホスト2に送信された)後にTrimコマンドが受信された場合を想定している。
【0053】
Trimコマンドは上記したように不揮発性メモリ4´に書き込まれているデータを無効化するためのコマンドであり、例えばホスト2が使用するファイルシステムにおいて所定のファイルが削除された場合等に、当該ファイルに相当するデータを無効化するためにホスト2によって発行される。このTrimコマンドにおいては、無効化すべきデータに関するLBAが指定されている(つまり、TrimコマンドにはLBAが含まれている)。ここでは、TrimコマンドにおいてLBA#1が指定されているものとする。
【0054】
上記したようなTrimコマンドが受信された場合(ステップS11)、
図3に示すLUT41´から、当該Trimコマンドにおいて指定されているLBA#1に対応するPBA#0が取得される(ステップS12)。
【0055】
この場合、ステップS12において取得されたPBA#0(に格納されているデータ)を無効化するために、
図3に示すADM42´は、
図4に示すADM42´に更新される(ステップS13)。この場合、ADM42´においては、Trimコマンドに基づいてLUT41´から取得されたPBA#0に対応するフラグ情報が「1」から「0」に変更される。
【0056】
また、ステップS11において受信されたTrimコマンドにおいて指定されているLBA#1に対応するPBA#0(に格納されているデータ)を無効化するために、
図3に示すLUT41´は、
図4に示すLUT41´に更新される(ステップS14)。この場合、LUT41´においては、LBA#1に対応するPBAとしてマジックナンバーが設定される。
【0057】
上記したようにLUT41´及びADM42´が更新されると、ステップS11において受信されたTrimコマンドに対する応答(完了通知)がホスト2に送信(返却)される。
【0058】
なお、Trim処理(Trimコマンドに対する処理)においては、不揮発性メモリ4´に書き込まれているデータは消去されない。不揮発性メモリ4´に書き込まれているデータは、上記したガーベージコレクション(GC)によって消去される。
【0059】
ここで、
図4においては単一のLBAが指定されたTrimコマンドが受信された場合について説明したが、
図5を参照して、広い範囲のLBAが指定されたTrimコマンドが受信された場合のLUT41´及びADM42´の動作について説明する。
【0060】
ここでは、不揮発性メモリ4´にデータ#10~データ#21等を含むデータが既に書き込まれており、当該データの書き込みに応じてLUT41´及びADM42´が適切に更新されているものとする。
【0061】
上記したように広い範囲のLBAが指定されたTrimコマンドが受信された場合(ステップS21)、当該広い範囲のLBAに該当する1つのLBAを対象LBAとし、当該対象LBAについて
図4に示すステップS12~S14に相当するステップS22~S24の処理が実行される。なお、ステップS22~S24の処理は、
図4に示すステップS12~S14において説明した処理と同様であるため、ここではその詳しい説明を省略する。
【0062】
上記したようにステップS24の処理が実行された場合、Trimコマンドにおいて指定されている広い範囲のLBAに該当する他のLBAを対象LBAとしてステップS22~S24の処理が繰り返される。すなわち、Trimコマンドにおいて広い範囲のLBAが指定されている場合には、当該Trimコマンドにおいて指定されている全てのLBAに対応するデータの無効化(LUT41´及びADM42´の更新)が完了するまで、ステップS22~S24の処理が順次実行される(ステップS25)。
【0063】
ステップS25の処理が実行されることにより、全てのLBAに対するデータの無効化が実行されると、ステップS21において受信されたTrimコマンドに対する応答がホスト2に送信(返却)される。
【0064】
上記したようにTrimコマンドにおいて広い範囲のLBAが指定されている場合には、LUT41´及びADM42´の更新(データの無効化)が広範囲にわたり、Trim処理の実行時間(つまり、Trimコマンドに対する応答をホスト2に返却するまでの時間)が長期化する。Trim処理の実行時間の長期化は、不揮発性メモリ4への書き込み処理と比較すると影響が少ないため隠蔽されやすいが、後続の他のコマンド(書き込みコマンド、読み出しコマンドまたは他のTrimコマンド等)に対する処理が遅延する要因となる。
【0065】
そこで、本実施形態に係るメモリシステム3は、Trimコマンドに対する応答時間を短縮させるための構成を有する。以下、本実施形態に係るメモリシステム3について詳細に説明する。
【0066】
図6は、本実施形態に係るメモリシステム3の動作の概要を説明するための図である。本実施形態に係るメモリシステム3においてホスト2からTrimコマンドが受信されると、
図1に示す管理部565は、当該Trimコマンド(において指定されているLBA)に基づいてLUT41を更新するとともに、当該Trimコマンドに基づく無効化要求(ADM42においてデータを無効化するための要求)を無効化要求キュー552に格納する。Trimコマンドに対する応答(Trim応答)は、LUT41の更新が完了した後にホスト2に送信される。
【0067】
なお、無効化要求キュー552は、無効化要求が格納される専用のキューであり、ホスト2から受信されるコマンドが格納されるキューとは異なる。無効化要求が格納される無効化要求キュー552の領域は、例えばメモリ55内に確保されているが、当該メモリ55とは異なる記憶装置に確保されていてもよい。
【0068】
すなわち、本実施形態において、LUT41の更新はTrim応答の送信前に実行されるが、ADM42の更新はキューイングされた無効化要求に従ってTrim応答の送信後に実行される(つまり、遅延実行される)。
【0069】
このような構成によれば、上記したようにTrimコマンドにおいて広い範囲のLBAが指定されていたとしても、
図5において説明したように全てのLBAに対するデータの無効化(LUT41´及びADM42´の更新)が完了した後にTrim応答を送信する場合と比べて、Trimコマンドに対する応答時間を短縮することができる。
【0070】
なお、本実施形態においては上記したようにTrimコマンドに対する応答時間を短縮することが可能であるが、当該Trimコマンドにおいて広い範囲のLBAが指定されている場合には、
図2~
図5において説明したLUT41´(全てのLBAとPBAとを単一の階層で対応づけて管理する単一階層のLUT)では各エントリにおいて個々のセクタ(PBA)にマジックナンバーを設定する必要がある。この場合、LUT41´の更新自体にも時間がかかる。
【0071】
このため、本実施形態におけるLUT41は、階層構造(複数のレイヤ)を有し、複数の階層に対応する複数のテーブル(以下、断片テーブルと表記)を含むように構成されているものとする。なお、このLUT41のデータ構造は、例えば不揮発性メモリ4の容量等を含むメモリシステム3の設定情報に基づいて決定される。
【0072】
このようなLUT41において、複数の断片テーブルは、例えば同一のサイズであるものとする。また、詳細については後述するが、複数の階層に対応する複数の断片テーブルのうちの上位の階層に対応する断片テーブルには、LBA(の範囲)と、当該断片テーブルよりも下位の階層に対応する断片テーブルを参照するための参照先情報(以下、ポインタと表記)等が格納されている。なお、ポインタは、例えば参照先となる断片テーブルが格納されている不揮発性メモリ4のPBAを含む。また、LUT41が有する階層構造において最下位の階層に対応する断片テーブルには、当該断片テーブルに割り当てられているLBAの各々に対応するPBAが格納される。
【0073】
すなわち、本実施形態におけるLUT41においては、上位の階層に対応する断片テーブルから下位の階層に対応する断片テーブルを順次参照することが可能な階層構造を有し、当該階層構造においてLBA及びPBAの対応関係が管理される。
【0074】
以下、
図7を参照して、階層構造を有するLUT41について概念的に説明する。
図7に示す例では、LUT41は、複数の第1~第4断片テーブルT1~T4を含む。
【0075】
図7に示すように、第1断片テーブルT1は、LUT41が有する階層構造における最上位の階層に対応する断片テーブルである。第2断片テーブルT2は、LUT41が有する階層構造における第1断片テーブルT1の下位の階層に対応する断片テーブルである。第3断片テーブルT3は、LUT41が有する階層構造における第2断片テーブルT2の下位の階層に対応する断片テーブルである。第4断片テーブルT4は、LUT41が有する階層構造における第3断片テーブルT3の下位の階層(LUT41が有する階層構造における最下位の階層)に対応する断片テーブルである。なお、以下の説明においては、第1~第4断片テーブルT1~T4の各々に対応する階層を第1~第4階層と称する。
【0076】
ここで、第1階層に対応する複数の第1断片テーブルT1の各々は、複数のネームスペースの各々に対応する。ネームスペースとは、不揮発性メモリ4が備える記憶領域(複数のブロック)を論理的に区分けすることによって得られる領域である。所定の範囲の記憶領域毎にネームスペースを割り当てることにより、例えば2以上の記憶領域でLBAが重複する場合であっても、ネームスペースID(ネームスペースを識別するための識別情報)及びLBAを用いて適切なデータへのアクセスが可能となる。これによれば、異なるネームスペースへのアクセスを異なるデバイスへのアクセスと同様に扱うことができる。
【0077】
図7において、複数の第1断片テーブルT1は、ネームスペースNS1~NSn(nは2以上の自然数)に対応している。この場合、複数の断片テーブルT1の数はnである。
【0078】
なお、
図7に示すようにLUT41においてはネームスペースNS1~NSn(に対応する第1断片テーブルT1)毎に階層構造を有するが、当該ネームスペースNS1~NSn毎の階層数は、当該ネームスペースNS1~NSnに割り当てられている記憶領域(サイズ)に応じて決定される。例えばネームスペースに割り当てられている記憶容量が少ない場合には、当該ネームスペースの階層数は少なくなる。一方、例えばネームスペースに割り当てられている記憶容量が多い場合には、当該ネームスペースの階層数は多くなる。なお、
図7に示す例では、ネームスペースNS1~NSnの各々の階層数は同一である。
【0079】
複数の第1断片テーブルT1の各々にはLBAの範囲が割り当てられており、当該第1断片テーブルT1は、複数のエレメントC1を含む。複数のエレメントC1の各々は、第2階層に対応する第2断片テーブルT2に対応づけられており、当該第2断片テーブルT2を示すポインタを格納する。
【0080】
複数の第2断片テーブルT2の各々には、当該第2断片テーブルT2の上位の第1断片テーブルT1(つまり、当該第2断片テーブルT2を示すポインタを格納する第1断片テーブルT1)に割り当てられているLBAの範囲を更にm個に区分けしたうちの1つのLBAの範囲が割り当てられている。mは、例えば第1断片テーブルT1に含まれる複数のエレメントC1の数に相当する。第2断片テーブルT2の各々は、複数のエレメントC2を含む。複数のエレメントC2の各々は、第3階層に対応する第3断片テーブルT3に対応づけられており、当該第3断片テーブルT3を示すポインタを格納する。
【0081】
複数の第3断片テーブルT3の各々には、当該第3断片テーブルT3の上位の第2断片テーブルT2(つまり、当該第3断片テーブルT3を示すポインタを格納する第2断片テーブルT2)に割り当てられているLBAの範囲を更にl個に区分けしたうちの1つのLBAの範囲が割り当てられている。lは、例えば第2断片テーブルT2に含まれる複数のエレメントC2の数に相当する。第3断片テーブルT3の各々は、複数のエレメントC3を含む。複数のエレメントC3の各々は、第4階層に対応する第4断片テーブルT4に対応づけられており、当該第4断片テーブルT4を示すポインタを格納する。
【0082】
複数の第4断片テーブルT4の各々には、当該第4断片テーブルT4の上位の第3断片テーブルT3(つまり、当該第4断片テーブルT4を示すポインタを格納する第3断片テーブルT3)に割り当てられているLBAの範囲を更にk個に区分けしたうちの1つのLBAの範囲が割り当てられている。kは、例えば第3断片テーブルT3に含まれる複数のエレメントC3の数に相当する。第4断片テーブルT4は、複数のエレメントC4を含む。
【0083】
ここで、上記したようにLUT41が有する階層構造における最下位の階層が第4階層である場合、第4断片テーブルT4に含まれる複数のエレメントC4の各々は、1つのLBAに対応するPBA(つまり、当該LBAを用いてアクセスされるデータが書き込まれているPBA)が格納される。
【0084】
上記した
図7に示す階層構造を有するLUT41においては、第1階層に対応する第1断片テーブルT1に含まれるエレメントC1の各々に格納されるポインタが第2階層に対応する第2断片テーブルT2を示し、当該第2断片テーブルT2に含まれるエレメントC2の各々に格納されるポインタが第3階層に対応する第3断片テーブルT3を示し、当該第3断片テーブルT3に含まれるエレメントC3の各々に格納されるポインタが第4階層に対応する第4断片テーブルT4を示し、当該第4断片テーブルT4に含まれるエレメントC4が1つのLBAに対応するPBAを格納するように構成されている。
【0085】
このようなLUT41によれば、例えば各種コマンドにおいて指定されるLBAに基づいて第1断片テーブルT1~第4断片テーブルT4を順次参照することにより、当該LBAに対応するPBAを特定することができる。
【0086】
ここで、
図7に示す例において、第4断片テーブルT4は、LUT41が有する階層構造における最下位の階層に対応する断片テーブルである。この場合、第4断片テーブルT4に含まれる複数のエレメントC4の各々には、上記したように1つのLBAに対応するPBAが格納される。この場合において、1つのPBAに書き込まれるデータのサイズが4KiBであり、1つの第4断片テーブルT4に32個のエレメントC4が含まれているものとすると、第4階層に対応する1つの第4断片テーブルT4には32個分のLBAの範囲(つまり、128KiBのデータにアクセスするためのLBA)が割り当てられていることになる。
【0087】
同様に、1つの第3断片テーブルT3に32個のエレメントC3が含まれており、128KiBのデータにアクセスするためのLBAが割り当てられている第4断片テーブルT4を示すポインタが当該エレメントC3の各々に格納されているものとすると、第3階層に対応する1つの第3断片テーブルT3には32×32=1024個分のLBAの範囲(つまり、4MiBのデータにアクセスするためのLBA)が割り当てられていることになる。
【0088】
更に、1つの第2断片テーブルT2に32個のエレメントC2が含まれており、4MiBのデータにアクセスするためのLBAが割り当てられている第3断片テーブルT3を示すポインタが当該エレメントC2の各々に格納されているものとすると、第2階層に対応する1つの第2断片テーブルT2には1024×32=32768個分のLBAの範囲(つまり、128MiBのデータにアクセスするためのLBA)が割り当てられていることになる。
【0089】
また、1つの第1断片テーブルT1に32個のエレメントC1が含まれており、128MiBのデータにアクセスするためのLBAが割り当てられている第2断片テーブルT2を示すポインタが当該エレメントC1の各々に格納されているものとすると、第1階層に対応する1つの第1断片テーブルT1には32768×32=1048576個分のLBAの範囲(つまり、4GiBのデータにアクセスするためのLBA)が割り当てられていることになる。
【0090】
すなわち、
図7に示すLUT41においては、第1断片テーブルT1の各々が4GBのデータにアクセスするためのLBAを管理しており、第2断片テーブルT2の各々が128MiBのデータにアクセスするためのLBAを管理しており、第3断片テーブルT3の各々が4MiBのデータにアクセスするためのLBAを管理しており、第4断片テーブルT4の各々が128KiBのデータにアクセスするためのLBAを管理している。
【0091】
なお、
図7においては例えば第1断片テーブルT1に含まれる複数のエレメントC1の各々にポインタが格納されるものとして説明したが、当該ポインタの各々によって示される複数の第2断片テーブルT2が不揮発性メモリ4に連続して配置されている場合には、当該第1断片テーブルT1は、当該複数の第2断片テーブルT2のうちの先頭の第2断片テーブルT2を示すポインタのみを格納する(つまり、先頭ではない第2断片テーブルT2を示すポインタを省略する)ように構成されていてもよい。これによれば、LUT41のサイズを削減することが可能である。ここでは第1断片テーブルT1について説明したが他の断片テーブルについても同様である。
【0092】
また、データが書き込まれている不揮発性メモリ4のPBAの連続性が担保されている場合には、下位の階層に対応する断片テーブルを省略することも可能である。具体的には、例えば第3断片テーブルT3は4MiBのデータにアクセスするためのLBAを管理するが、当該第3断片テーブルT3によって管理されるLBAによってアクセスされる4MiBのデータが連続するPBAに書き込まれている場合には、第2断片テーブルT2に含まれるエレメントC2は、当該第3断片テーブルT3を示すポインタに代えて、当該4MiBのデータが書き込まれている先頭のPBAを格納してもよい。これによれば、この第2断片テーブルT2よりも下位の第3断片テーブルT3及び第4断片テーブルT4を参照することが不要となるため、不揮発性メモリ4に書き込まれているデータに対するアクセス速度を向上することが可能となる。
【0093】
図8は、本実施形態におけるLUT41に含まれる断片テーブルのデータ構造の一例を示す。ここでは、第1断片テーブルT1のデータ構造について主に説明する。
【0094】
第1断片テーブルT1は、例えば複数のPBA格納部411、LBA格納部412及び管理データ格納部413を含む。
【0095】
PBA格納部411は、
図7において説明した第1断片テーブルT1に含まれるエレメントC1に相当する。つまり、PBA格納部411の数は例えば32個である。PBA格納部411は、下位の階層に対応する第2断片テーブルT2を示すポインタとして、当該第2断片テーブルT2が格納されている不揮発性メモリ4のPBAを格納する。なお、下位の階層に対応する第2断片テーブルT2がキャッシュメモリ551に格納されている場合、PBA格納部411には、当該キャッシュメモリ551のPBAが格納される。PBA格納部411に格納されるPBAのサイズは、例えば32ビットである。
【0096】
また、PBA格納部411に格納されるPBAには、例えば8ビットの管理データMD1が付されてもよい。管理データMD1は、例えばPBA格納部411に格納されているPBAが不揮発性メモリ4のPBAであるかキャッシュメモリ551のPBAであるかを管理するデータである。
【0097】
この場合、PBA格納部411の各々のサイズはPBAのサイズ(32ビット)と管理データMD1のサイズ(8ビット)とを加算した40ビットであり、32個のPBA格納部411の合計サイズは160バイトである。
【0098】
LBA格納部412は、第1断片テーブルT1に割り当てられているLBAの範囲における先頭のLBAを格納する。
【0099】
管理データ格納部413は、第1断片テーブルT1が属するネームスペースを識別するためのネームスペースID及び当該第1断片テーブルT1が管理するLBA(当該第1断片テーブルT1に割り当てられているLBA)の範囲に相当するGrainが格納される。
【0100】
なお、管理データ格納部413には、他の情報が格納されてもよい。具体的には、管理データ格納部413には、第1断片テーブルT1に対応する階層(第1階層)を識別するための識別情報(階層ID)等が格納されてもよい。
【0101】
ここで、本実施形態において例えばLUT41が更新される際には、当該LUT41の一部(当該更新の対象となる断片テーブル)がキャッシュメモリ551に格納される。この場合、LUT41の一部はキャッシュライン単位で格納される。また、キャッシュメモリ551で更新されたLUT41の一部は、キャッシュライン単位で不揮発性メモリ4に書き戻される。
【0102】
上記したキャッシュライン単位で第1断片テーブルT1がキャッシュメモリ551に格納される場合を想定する。このようにキャッシュメモリ551に格納される第1断片テーブルT1をLUTキャッシュデータとすると、当該LUTキャッシュデータは、上記したPBA格納部411、LBA格納部412及び管理データ格納部413に加えて、例えばキャッシュメモリ551において互いに関連づけるべきLUTキャッシュデータを示すポインタを更に含む。
【0103】
具体的には、LUTキャッシュデータは、当該LUTキャッシュデータの前に参照される他のLUTキャッシュデータを示すポインタを格納する前ポインタ格納部414及び当該LUTキャッシュデータの次に参照される他のLUTキャッシュデータを示すポインタを格納する次ポインタ格納部415を含む。
【0104】
このようなLUTキャッシュデータが参照すべき前後のLUTキャッシュデータへのポインタを用いることによって、キャッシュメモリ551に対するアクセスを高速化することができ、連続的なアクセスを実現することができる。なお、LUTキャッシュデータは、更に他の管理データを含んでいてもよい。
【0105】
なお、前ポインタ格納部414及び次ポインタ格納部415に格納されるポインタとしては、例えば他のLUTキャッシュデータが格納されているPBAを用いるが、他の形式のアドレスを用いてもよい。
【0106】
図8においては第1断片テーブルT1のテーブルのデータ構造について説明したが、他の断片テーブル(第2断片テーブルT2~第4断片テーブルT4)のデータ構造についても
図8において説明した通りである。
【0107】
すなわち、本実施形態において、第1断片テーブルT1~第4断片テーブルT4の各々のサイズは例えば168バイト等の固定長であり、キャッシュメモリ551に格納されるLUTキャッシュデータの各々のサイズは例えば188バイト等の固定長である。なお、第1断片テーブルT1~第4断片テーブルT4及びLUTキャッシュデータのデータ構造は、例えば階層毎に異なっていてもよい。
【0108】
また、
図8においてはPBA格納部411に下位の階層に対応する断片テーブルを示すポインタが格納されるものとして説明したが、第4断片テーブルT4の場合には、データが書き込まれているPBAがPBA格納部411に格納される。なお、上記したように第4断片テーブルT4以外の断片テーブルの場合であっても、PBA格納部411にPBAが格納される場合があり得る。
【0109】
図9は、本実施形態におけるADM42のデータ構造の一例を示す。
図9においては、1つのブロックに対して用意されているADM42(以下、断片ADMと表記)が示されている。
【0110】
断片ADMは、複数のマップ格納部(ビットマップ)421及びPBA格納部422を含む。
【0111】
マップ格納部421は、不揮発性メモリ4に書き込まれる4KiBのデータの有効または無効を管理する1ビットのフラグ情報を格納する。例えば断片ADMに40個のマップ格納部421が含まれており、1つのマップ格納部421に32個のフラグ情報(32ビット)が格納されるものとすると、複数のマップ格納部421の合計サイズは160バイト(=1280ビット)となり、1つの断片ADMで不揮発性メモリ4に書き込まれる1280個分の4KiBのデータの有効または無効を管理することができる。
【0112】
PBA格納部422は、断片ADMによって管理されるPBAの範囲における先頭のPBAを格納する。
【0113】
ここで、本実施形態において例えばADM42が更新される際には、上記したLUT41と同様に、当該ADM42の一部(当該更新の対象となる断片ADM)がキャッシュメモリ551に格納される。この場合、ADM42の一部はキャッシュライン単位で格納される。また、キャッシュメモリ551で更新されたADM42の一部は、キャッシュライン単位で不揮発性メモリ4に書き戻される。
【0114】
上記したキャッシュライン単位で断片ADMがキャッシュメモリ551に格納される場合を想定する。このようにキャッシュメモリ551に格納される断片ADMをADMキャッシュデータとすると、当該ADMキャッシュデータは、上記したマップ格納部421及びPBA格納部422に加えて、例えばキャッシュメモリ551において互いに関連づけるべきADMキャッシュデータを示すポインタを含む。
【0115】
具体的には、ADMキャッシュデータは、当該ADMキャッシュデータの前に参照される他のADMキャッシュデータを示すポインタを格納する前ポインタ格納部423及び当該断片ADMの次に参照される他のADMキャッシュデータを示すポインタを格納する次ポインタ格納部424を含む。
【0116】
なお、前ポインタ格納部423及び次ポインタ格納部424については、上記した
図8に示す前ポインタ格納部414及び次ポインタ格納部415と同様であるため、ここではその詳しい説明を省略する。
【0117】
図9においては1つのブロックに対して用意されている断片ADMのデータ構造について説明したが、他のブロックに対して用意されている断片ADMのデータ構造についても
図9において説明した通りである。
【0118】
すなわち、本実施形態においては、断片ADMの各々のサイズは例えば168バイト等の固定長であり、キャッシュメモリ551に格納されるADMキャッシュデータの各々のサイズは例えば188バイト等の固定長である。
【0119】
なお、上記した
図8において説明した断片テーブル(第1断片テーブルT1~第4断片テーブルT4)のサイズ及び
図9において説明した断片ADMのサイズは同一である。また、
図8において説明したLUTキャッシュデータのサイズ及び
図9において説明したADMキャッシュデータのサイズは同一である。
【0120】
次に、
図10のフローチャートを参照して、ホスト2からTrimコマンドが発行された際のメモリシステム3の処理手順の一例について説明する。
【0121】
まず、例えばホスト2が使用するファイルシステムにおいて所定のファイルが削除された場合、当該ホスト2は、当該ファイルに相当するデータ(以下、対象データと表記)を無効化するためのTrimコマンドを発行する。このTrimコマンドにおいては、対象データにアクセスするために使用されるLBA(以下、対象LBAと表記)が指定されている。なお、対象LBAは、少なくとも1つのLBAを含み、例えば連続する広い範囲のLBAであってもよい。
【0122】
上記したようにホスト2からTrimコマンドが発行(送信)された場合、通信インタフェース制御部51は、当該Trimコマンドを受信する(ステップS31)。
【0123】
ステップS31において受信されたTrimコマンドは、ホスト2からの各種コマンドが格納されるFIFOキュー(以下、コマンドキューと表記)に格納される。これにより、ステップS31において受信されたTrimコマンドに対する処理(以下、Trim処理)は、当該Trimコマンドに先行してホスト2から受信されている他のコマンドに対する処理が実行された後に実行される。なお、コマンドキューは、FIFOキュー以外のキューであってもよい。
【0124】
Trim処理が実行される場合、プロセッサ56に含まれる管理部565は、例えば不揮発性メモリコントローラ54及びキャッシュメモリ制御部566と協働することにより、Trimコマンド(対象LBA)に基づいてLUT41を更新する(ステップS32)。
【0125】
ここで、本実施形態においてLUT41は、階層構造を有し、各階層に対応する複数の断片テーブル(第1断片テーブルT1~第4断片テーブルT4)を含む。この場合、ステップS32においては、LUT41を参照することによって対象LBAが割り当てられている1つまたは複数の断片テーブルが特定され、必要に応じて当該特定された断片テーブルが不揮発性メモリ4から読み出される。このように不揮発性メモリ4から読み出された断片テーブルは、キャッシュメモリ551に格納され、当該キャッシュメモリ551上で更新される。なお、特定された断片テーブルが既にキャッシュメモリ551に格納されている場合には、当該断片テーブルを不揮発性メモリ4から読み出す必要はない。この場合、断片テーブルに含まれるエレメント(PBA格納部411)に格納されている対象LBAに対応するPBAがマジックナンバーに変更される。このように更新された断片テーブルは、キャッシュメモリ551から読み出され、不揮発性メモリ4に書き戻される。ステップS32においては、このような処理が実行されることにより、不揮発性メモリ4に格納されているLUT41を更新することができる。なお、不揮発メモリ4への書き戻しは、ステップS32以降の任意のタイミングで実施しても構わない。
【0126】
ステップS32の処理が実行されると、管理部565は、ステップS31において受信されたTrimコマンド(対象LBA)に基づいてADM42を更新する(ADM42上で不揮発性メモリ4に書き込まれているデータを無効化する)ための無効化要求を生成する。このように生成された無効化要求は、上記した無効化要求キュー552に格納(つまり、キューイング)される(ステップS33)。これにより、ADM42の更新は、遅延実行される。なお、ステップS33においてキューイングされる無効化要求には、対象LBAに対応するPBA(つまり、Trimコマンドによって無効化されるべきデータが書き込まれている不揮発性メモリ4のPBA)が含まれる。以下の説明においては、ステップS33においてキューイングされた無効化要求に含まれるPBAを対象PBAと称する。
【0127】
一方、管理部565は、Trim応答(Trimコマンドに対する応答)を、通信インタフェース制御部51を介してホスト2に送信する(ステップS34)。
【0128】
上記したステップS31~S34の処理により、Trim応答は、LUT41が更新された後、ADM42が更新される前にホスト2に返される。
【0129】
なお、
図10においてはステップS32~S34の順に処理が実行されるものとして示されているが、ステップS33及びS34の処理は、ステップS32の処理の後に実行されればよい。すなわち、ステップS33の処理の前にステップS34の処理が実行されてもよいし、当該ステップS33の処理と当該ステップS34の処理とは同時に実行されてもよい。
【0130】
ここで、ステップS31においてTrimコマンドが受信された後に、当該Trimコマンド以外の他のコマンド(以下、後続コマンドと表記)がホスト2から受信されている場合、当該後続コマンドは上記したコマンドキューに格納される。なお、後続コマンドには、例えば書き込みコマンド、読み出しコマンド及びTrimコマンド等が含まれる。
【0131】
このため、上記したステップS34の処理が実行された場合、管理部565は、コマンドキューを参照し、後続コマンドがあるか否かを判定する(ステップS35)。
【0132】
後続コマンドがあると判定された場合(ステップS35のYES)、当該後続コマンド(に対する処理)が実行される(ステップS36)。なお、後続コマンドがTrimコマンドである場合には、上記したステップS32~S34の処理が実行される。ステップS36の処理が実行されると、ステップS35に戻って処理が繰り返される。
【0133】
一方、後続コマンドがないと判定された場合(ステップS35のNO)、管理部565は、無効化要求キュー552に格納されている無効化要求を当該無効化要求キュー552から取り出す(ステップS37)。
【0134】
管理部565は、例えば不揮発性メモリコントローラ54及びキャッシュメモリ制御部566と協働することにより、ステップS37において無効化要求キュー552から取り出された無効化要求(対象PBA)に基づいてADM42を更新する(ステップS38)。
【0135】
ここで、本実施形態においてADM42は、例えばブロック毎に用意された複数の断片ADMを含む。この場合、ステップS38においては、ADM42を参照することによって対象PBAに格納されているデータの有効または無効を管理する断片ADMが特定され、必要に応じて当該特定された断片ADMが不揮発性メモリ4から読み出される。このように不揮発性メモリ4から読み出された断片ADMは、キャッシュメモリ551に格納され、当該キャッシュメモリ551上で更新される。なお、特定された断片ADMが既にキャッシュメモリ551に格納されている場合には、当該断片ADMを不揮発性メモリ4から読み出す必要はない。この場合、断片ADMに含まれるマップ格納部421に格納されているフラグ情報のうちの対象PBAに対応するフラグ情報が「1」から「0」に変更される。このように更新された断片ADMは、キャッシュメモリ551から読み出され、不揮発性メモリ4に書き戻される。ステップS38においては、このような処理が実行されることにより、不揮発性メモリ4に格納されているADM42を更新することができる。なお、不揮発メモリ4への書き戻しは、ステップS38以降の任意のタイミングで実施しても構わない。
【0136】
ここで、1つの無効化要求に基づいてADM42の更新処理を実行している間に後続コマンドを受け付けている場合がある。このため、ステップS38の処理が実行されると、ステップS35に戻って処理が繰り返される。すなわち、ステップS38においてADM42が更新された後に後続コマンドがあれば当該後続コマンドが実行される。一方、ステップS38においてADM42が更新された後に後続コマンドがなければ無効化要求が継続して取り出される。なお、後続コマンド及び無効化要求の両方がなければ処理は終了される。
【0137】
次に、
図11を参照して、ホスト2からTrimコマンドが発行された際のメモリシステム3の具体的な動作例について説明する。なお、上記したように本実施形態におけるLUT41及びADM42はキャッシュメモリ551上で更新されるが、以下の説明においては、便宜的にキャッシュメモリ551に関する説明は省略する。
【0138】
ここでは、LBA=0を指定した書き込みコマンドに基づいて12MiBのデータが不揮発性メモリ4に書き込まれている場合を想定する。上記したように1つのLBAに対応するPBAに書き込まれるデータのサイズが4KiBであるものとすると、12MiBのデータは3072セクタ分のデータに相当し、当該12MiBのデータにアクセスするためのLBAの範囲は、LBA#0~LBA#3071となる。なお、この12MiBのデータは、連続するPBAに書き込まれている(つまり、PBAの連続性は担保されている)ものとする。具体的には、12MiBのデータは、PBA#0~PBA#3071に書き込まれているものとする。
【0139】
上記したように12MiBのデータが不揮発性メモリ4に書き込まれた場合には、当該12MiBのデータの書き込みに応じてLUT41が更新される。
【0140】
ここで、上記したように複数の第1断片テーブルT1の各々に4GiBのデータにアクセスするためのLBA(の範囲)が割り当てられているものとすると、
図11に示す第1断片テーブルT11は、当該複数の第1断片テーブルT1のうちの、LBA#0を先頭として4GiBのデータにアクセスするためのLBA(の範囲)が割り当てられた第1断片テーブルT1を示している。
【0141】
この場合、第1断片テーブルT11に含まれるエレメントC1(PBA格納部411)に格納されているポインタ101は、LBA#0を先頭として128MiBのデータにアクセスするためのLBA(の範囲)が割り当てられた第2断片テーブルT21を示す。
【0142】
なお、上記した不揮発性メモリ4に書き込まれたデータのサイズ(12MiB)は第2断片テーブルT21に割り当てられているLBAを用いてアクセスされるデータのサイズ(128MiB)よりも小さい。このため、上記した12MiBのデータ以外のデータが不揮発性メモリ4に書き込まれていないものとすると、第1断片テーブルT11に含まれる他のエレメントC1にはマジックナンバー(0xfe)が設定されている。
【0143】
一方、第2断片テーブルT21の下位の階層に対応する第3断片テーブルT3には4MiBのデータにアクセスするためのLBA(の範囲)が割り当てられるが、不揮発性メモリ4に書き込まれたデータのサイズ(12MiB)のデータは、第3断片テーブルT3に割り当てられているLBAを用いてアクセスされるデータのサイズの3個分と一致する。
【0144】
このような場合において、上記したように12MiBのデータが書き込まれているPBAの連続性が担保されているものとすると、当該12MiBのデータに関するLBA及びPBAの対応関係は
図11に示す第2断片テーブルT21のみで管理することが可能である。すなわち、第2断片テーブルT21の下位に第3断片テーブルT3及び第4断片テーブルT4を配置する必要はない。この場合、第2断片テーブルT21に含まれる3個のエレメントC3は、それぞれ4MiBのデータが不揮発性メモリ4に書き込まれた際の先頭のPBAを格納する。
【0145】
図11に示す例では、第2断片テーブルT21に含まれる1番目のエレメントC2にはPBA#0が格納されている。これによれば、PBA#0を先頭とした連続するPBAの範囲(PBA#0~PBA#1023の領域)に上記した12MiBのデータのうちの4MiB分のデータ(第1データ)が書き込まれていることが示されている。
【0146】
また、第2断片テーブルT21に含まれる2番目のエレメントC2にはPBA#1024が格納されている。これによれば、PBA#1024を先頭とした連続するPBAの範囲(PBA#1024~PBA#2047の領域)に上記した12MiBのデータのうちの4MiB分のデータ(第1データに続く第2データ)が書き込まれていることが示されている。
【0147】
同様に、第2断片テーブルT21に含まれる3番目のエレメントC2にはPBA#2048が格納されている。これによれば、PBA#2048を先頭とした連続するPBAの範囲(PBA#2048~PBA#3071)に上記した12MiBのデータのうちの4MiBのデータ(第2データに続く第3データ)が書き込まれていることが示されている。
【0148】
上記したように第2断片テーブルT21はLBA#0を先頭として128MiBのデータにアクセスするためのLBAの範囲が割り当てられているため、このような第2断片テーブルT21によれば、第3断片テーブルT3及び第4断片テーブルT4を参照することなく、不揮発性メモリ4に書き込まれた12MiBのデータに関するLBA(LBA#0~LBA#3071)及びPBA(PBA#0~PBA#3071)の対応関係を管理することができる。
【0149】
なお、上記したように12MiBのデータが不揮発性メモリ4に書き込まれた場合には、当該12MiBのデータの書き込みに応じてADM42も更新される。ここでは詳細な説明を省略するが、ADM42においては、12MiBのデータが書き込まれたPBA#0~PBA#3071に対応するフラグ情報が「0」から「1」に変更される。
【0150】
次に、上記した12MiBのデータが不揮発性メモリ4に書き込まれている状態で、LBA=0を指定したTrimコマンドに基づいて8MiBのデータを無効化する場合を想定する。上記したように1つのLBAに対応するPBAに書き込まれるデータのサイズが4KiBとすると、8MiBのデータは2048セクタ分のデータに相当し、当該8MiBのデータにアクセスするためのLBAの範囲(つまり、Trimコマンドに含まれるLBAの範囲)は、LBA#0~LBA#2047である。
【0151】
この場合、管理部565は、LBA#0を先頭として8MiBのデータにアクセスするためのLBA(の範囲)が割り当てられた第1断片テーブルT11に含まれるエレメントC1に格納されているポインタ101に基づいて、当該LBAが割り当てられている第2断片テーブルT21を特定する。
【0152】
次に、管理部565は、特定された第2断片テーブルT21と同じサイズの作業用テーブルに当該第2断片テーブルT21の内容をコピーする(ステップS41)。
【0153】
管理部565は、第2断片テーブルT21の内容がコピーされた作業用テーブル(以下、第2断片テーブルT22と表記)のエントリを更新し、Trimコマンドにおいて指定されているLBA#0を先頭として8MiBのデータにアクセスするためのLBA(の範囲)に対応するPBAを無効化する(ステップS42)。この場合、第2断片テーブルT22に含まれるエレメントC2に格納されているPBA#0(つまり、LBA#0~LBA#1023に対応するPBA#0~PBA#1023)及びPBA#1024(つまり、LBA#1024~LBA#2047に対応するPBA#1024~PBA#2047)がマジックナンバー(0xfe)に変更される。これにより、第2断片テーブルT22において、LBA#0を先頭とする8MiBのデータが無効化される。
【0154】
ここで、第1断片テーブルT11に含まれるエレメントC1に格納されているポインタ101は第2断片テーブルT21を示しているが、管理部565は、当該ポインタ101を、第2断片テーブルT22を示すポインタ102に切り替える(ステップS43)。このようなポインタの切り替えによれば、LUT41の更新に伴い当該LUT41において整合性が取れていない期間を最小限にすることができる。
【0155】
上記した
図11に示す例のように、データが連続するPBAに書き込まれている場合であって、Trimコマンドにおいて指定されているLBAの範囲が第3断片テーブルT3に割り当てられるLBAの範囲(つまり、LUT41の境界)と一致している場合には、第2断片テーブルT21に含まれているエレメントC2に格納されているPBAをマジックナンバーに更新するだけで、広い範囲のLBAに対応するPBAを無効化することが可能である。これによれば、上記した単一階層のLUT41´において広い範囲のLBAに対応するPBAを個別にマジックナンバーに変更する場合と比較して、高速にLUT41を更新することが可能となる。
【0156】
一方、管理部565は、Trimコマンドにおいて指定されたLBA#0を先頭とする8MiBのデータが書き込まれている不揮発性メモリ4のPBA#0~PBA#2047の各々を含む無効化要求を生成し、当該無効化要求を無効化要求キュー552に格納する(ステップS44)。
【0157】
ここでは、無効化すべきデータが書き込まれている全てのPBAを含む無効化要求がキューイングされる(無効化要求キュー552に格納される)ものとして説明したが、Trimコマンドによって無効化されるべきデータが書き込まれている複数のPBA(Trim対象のPBA)が連続している場合には、先頭のPBA及び連続するPBAの数を含む無効化要求がキューイングされるようにしてもよい。これによれば、無効化要求を単純な構造体のリストで表現することができ、無効化要求の情報量を削減することが可能となる。なお、Trim対象のPBAが1つの場合(つまり、PBAが連続していない場合)には、連続するPBAの数を1とすればよい。
【0158】
Trim応答は、LUT41が更新された後に、ホスト2に送信される(ステップS45)。なお、キューイングされた無効化要求(に含まれるPBA)に基づくADM42の更新(Trimコマンドにおいて指定されたLBAに対応するPBAに書き込まれているデータの無効化)はTrim応答の送信後に実行される。
【0159】
上記したように本実施形態においては、不揮発性メモリに書き込まれているデータを無効化するためのTrimコマンド(無効化コマンド)をホスト2から受信した場合に、当該Trimコマンドに基づいてLUT41(アドレス変換テーブル)及びADM42(有効データマップ)が更新されるが、Trim応答(無効化コマンドに対する応答)は、LUT41が更新された後、ADM42が更新される前にホスト2に送信される。
【0160】
なお、本実施形態においては、ADM42の更新が遅延実行される構成であるが、当該ADM42の更新の遅延実行は、Trimコマンドに基づく無効化要求が無効化要求キュー552に格納されることによって実現される。この場合、Trim応答がホスト2に送信された後に無効化要求が無効化要求キュー552から取り出され、当該無効化要求に基づいてADM42が更新される。
【0161】
本実施形態においては、上記したようにADM42を更新することなくTrim応答をホスト2に返却する構成により、例えばTrimコマンドにおいて広い範囲のLBAが指定された場合に、当該Trimコマンドに対する応答時間を短縮させることが可能となる。
【0162】
また、本実施形態において、Trimコマンドの後に当該Trimコマンド以外の他のコマンド(後続コマンド)がホスト2から受信された場合、当該他のコマンドは、Trim応答がホスト2に送信された後に実行され得る。これによれば、ADM42が更新される前に後続コマンドを実行することが可能となるため、当該後続コマンドに対する処理の遅延を回避することができる。
【0163】
なお、Trimコマンドは当該Trimコマンドによって無効化されるべきデータにアクセスするためのLBAを含むが、ホスト2から受信される他のコマンドは、Trimコマンドに含まれる論理アドレスを指定する書き込みコマンド、読み出しコマンド及びTrimコマンドのうちの少なくとも1つを含んでいてもよい。すなわち、本実施形態においては、Trimコマンドにおいて指定されたLBAの範囲(Trim範囲)に該当するLBAを指定した後続コマンドであっても、Trim応答がホスト2に送信された後であれば適切に実行することが可能となる。
【0164】
ここで、Trimコマンドに対する応答時間を短縮するために、例えばLUT及びADMの更新を含むTrim処理(Trimコマンドに対する処理)全体を遅延実行する構成(以下、比較例と表記)が考えられるが、この場合には、LUTを更新する前にTrim応答をホスト2に送信することになる。このような比較例においては、Trim応答がホスト2に送信された後、LUTが更新される前に、ホスト2から受信された後続コマンドが実行される場合があるが、当該後続コマンドを実行する際には当該後続コマンドにおいて指定されているLBAがTrim範囲に該当しているか否か(つまり、整合性)を後続コマンド毎にチェックする必要がある。すなわち、比較例においては、後続コマンドにおいて指定されているLBAがTrim処理(LUTの更新)が実行済みのLBAであるか否かに応じた一貫性維持(整合性担保)のための計算量が大きくなり、ホスト2から受信される後続コマンドに対する応答が遅延するという副作用が生じる。
【0165】
これに対して、本実施形態においては、LUT41についてはTrim応答前に更新を完了する(つまり、LUT41の整合性を担保した状態でTrim応答を送信する)構成であるため、上記した比較例のように後続コマンド毎に整合性をチェックする必要がない。
【0166】
また、本実施形態においてはADM42の更新を遅延実行するが、当該ADM42の更新を遅延実行したとしても例えばガーベージコレクションによるブロックのフリー化が遅延するのみであるため、上記した副作用の影響はない。
【0167】
一方で、ブロックのフリー化の遅延は書き込みコマンドに対する遅延の原因となり得るが、例えばADM42の更新を開始するタイミングを判別するための可変閾値を設ける等により、ホスト2のワークロードに応じた影響度合いを制御するようにしてもよい。例えば、ある一定量のデータを定期的に書き込むワークロードであれば、そのデータ量を書き込むことが可能なフリーブロックを維持するような閾値を設けることにより、当該閾値に基づいて書き込みコマンド実行時にブロックのフリー化が行われないような制御を実行することができる。
【0168】
また、本実施形態においては、Trim応答がホスト2に送信される前にLUT41の更新が実行されるが、Trimコマンドに対する応答時間を更に短縮するためには、LUT41の更新をより高速に実行する必要がある。
【0169】
これに対して、本実施形態においては、階層構造を有するLUT41を採用することによって当該LUT41を高速に更新することが可能であるため、更なる応答時間の短縮を実現することができる。
【0170】
また、LUT41を更新する際には当該LUT41が不揮発性メモリ4からキャッシュメモリ551にキャッシュされる場合があるが、本実施形態においてはLUT41が階層構造を有する構成により、当該キャッシュメモリ551には断片テーブルがキャッシュされるため、不揮発性メモリ4からキャッシュメモリ551にキャッシュされるデータのサイズを小さくすることが可能となる。これによれば、不揮発性メモリ4からのLUT41の読み出しに要する時間を短縮することができるとともに、LUT41の探索を効率化し、アクセス速度を高速化することができる。
【0171】
なお、本実施形態においては上記したように階層構造を有さないLUTを採用した場合であってもTrimコマンドに対する応答時間を短縮させることは可能であるが、この場合には、当該LUTの一部を断片データとして本実施形態において説明した処理が実行すればよい。
【0172】
ここで、本実施形態における無効化要求のキューイングは、Trim応答の送信と同時に行われてもよいし、当該Trim応答の送信より前または後に行われてもよい。
【0173】
しかしながら、無効化要求のキューイングが例えばTrim応答の送信と同時またはTrim応答の送信よりも前に行われる構成の場合には、当該無効化要求のキューイング(または当該無効化要求を生成する処理)がTrimコマンドに対する応答速度に影響を与える可能性がある。このため、本実施形態においては、無効化要求のキューイングを高速に行うことが好ましい。
【0174】
そこで、
図12を参照して、無効化要求のキューイングを高速に行うための本実施形態の変形例に係るメモリシステム3の動作について説明する。なお、
図12の説明においては、上記した
図11と同一の部分についてはその詳しい説明を省略し、当該
図11と異なる部分について主に説明する。
【0175】
まず、
図11と同様に、LBA=0を指定した書き込みコマンドに基づいて12MiBのデータが不揮発性メモリ4に書き込まれており、LUT41には、第1階層に対応する第1断片テーブルT11及び第2階層に対応する第2断片テーブルT21が含まれているものとする。
【0176】
次に、上記した12MiBのデータが不揮発性メモリ4に書き込まれている状態で、LBA=0を指定したTrimコマンドに基づいて8MiBのデータを無効化する場合を想定する。
【0177】
この場合、
図11に示すステップS41~S43の処理に相当するステップS51~S53の処理が実行されることによって、LUT41が更新される。
【0178】
次に、Trimコマンドにおいて指定されたLBA#0を先頭とする8MiBのデータをADM42において無効化するための無効化要求が生成されるが、本実施形態の変形例においては、当該無効化要求としてLUT41に含まれる断片データを利用する。
【0179】
具体的には、
図12に示す例においては、上記した第1断片テーブルT11(に含まれるエレメントC1に格納されているポインタ)から切り離された第2断片テーブルT21を無効化要求として利用する。
【0180】
なお、この第2断片テーブルT21のみでは無効化すべきPBAの範囲が不明であるため、当該第2断片テーブルT21には、Trimコマンドによって無効化されるべきデータ(PBA)を判別するための判別情報が付与される。
【0181】
この第2断片テーブルT21に付与される判別情報には例えばマジックナンバーが含まれ、当該マジックナンバーは、第2断片テーブルT21のエレメントC2(PBA格納部411)に設定される(ステップS54)。ここでは、Trimコマンドにおいて指定されているLBA(の範囲)がLBA#0~LBA#2047であるため、第2断片テーブルT21のPBA#2048が格納されていたエレメントC2にマジックナンバー(0xfe)が設定されている(つまり、PBA#2048がマジックナンバーに変更されている)。これによれば、無効化する必要がないPBAをマジックナンバーとすることで、第2断片テーブルT21に含まれるエレメントC2に格納されているPBA#0(~PBA#1023)及びPBA#1024(~PBA#2047)が無効化すべきPBAであると判別することができる。
【0182】
なお、第2断片テーブルT21に含まれるエレメントC2のうち、既にマジックナンバーが設定されているエレメントC2については、当該マジックナンバーが維持されればよい。
【0183】
本実施形態の変形例においては、このような第2断片テーブルT21を含む無効化要求がキューイングされる(ステップS55)。
【0184】
なお、ステップS55においてキューイングされた無効化要求には単に第2断片テーブルT21が含まれているのみであり、当該無効化要求において無効化すべきデータが書き込まれている具体的なPBAについては、上記した判別情報(マジックナンバー)を参照して、当該無効化要求の実行時(ADM42の更新の遅延実行時)に判別される。これによれば、無効化要求のキューイングを高速に行うことができるとともに、当該無効化要求を実行することによってTrim範囲に対応するPBAに格納されているデータを適切に無効化することができる。
【0185】
図12に示すステップS56は
図11に示すステップS45に相当するため、ここではその詳しい説明を省略する。
【0186】
なお、無効化要求に含まれる第2断片テーブルT21に設定されるマジックナンバーは、例えばLUT41に含まれる断片テーブル(例えば、第1断片テーブルT11等)で用いられるマジックナンバーと共通するものであってもよいし、異なるものであってもよい。本実施形態においては、マジックナンバーとして「0xfe」が用いられるものとして主に説明しているが、当該マジックナンバーとしては当該「0xfe」以外が用いられても構わない。
【0187】
また、
図12においては、第2断片テーブルT21に付与される判別情報がマジックナンバーであるものとして説明したが、当該判別情報はTrimコマンドにおいて指定されているLBAの範囲であってもよい。このLBAの範囲は、例えば先頭のLBAと当該LBAの数(長さ)を含むが、他の形式のものであってもよい。
【0188】
ここで、
図12においては1つの断片テーブル(第2断片テーブルT21)を含む無効化要求がキューイングされる場合について説明したが、Trim範囲によっては複数の断片テーブルを含む無効化要求がキューイングされても構わない。
【0189】
以下、
図13を参照して、複数の断片テーブルを含む無効化要求がキューイングされる場合のメモリシステム3の動作について簡単に説明する。
【0190】
ここでは、LBA=0を指定した書き込みコマンドに基づいて10MiBのデータが不揮発性メモリ4に書き込まれている場合を想定する。この場合、10MiBのデータは2560セクタ分のデータに相当し、当該10MiBのデータにアクセスするためのLBAの範囲は、LBA#0~LBA#2559となる。
【0191】
このLBA#0~LBA#2559のうちのLBA#0~LBA#2047については、上記した
図11等において説明したように第2断片テーブルT21においてLBA及びPBAの対応関係を管理することが可能であるが、残りのLBA#2048~LBA#2559においては、第2断片テーブルT21よりも下位の階層に対応する第3断片テーブルT31に割り当てられているLBAの範囲と一致しない。この場合、LBA#2048~LBA#2559及びPBAの対応関係は、
図13に示すように第2断片テーブルT21に含まれるエレメントC2に格納されているポインタによって示される第3断片テーブルT31において管理する必要がある。
【0192】
ここで、上記したように10MiBのデータが不揮発性メモリ4に書き込まれている状態で、LBA=0を指定したTrimコマンドに基づいて9MiBのデータを無効化する場合を想定する。この場合、9MiBのデータは2304セクタ分のデータに相当し、当該9MiBのデータにアクセスするためのLBAの範囲は、LBA#0~LBA#2303となる。
【0193】
この場合、第2断片テーブルT21及び第3断片テーブルT31がそれぞれ作業用テーブルにコピーされ、当該作業用テーブル(第2断片テーブルT22及び第3断片テーブルT32)において、LBA#0を先頭として9MiBのデータにアクセスするためのLBAの範囲(つまり、LBA#0~LBA#2303)に対応するPBAが無効される。
【0194】
このような処理が実行された場合、第1断片テーブルT11に含まれるエレメントC1に格納されているポインタ(第2断片テーブルT21を示すポインタ)は、第2断片テーブルT22を示すポインタに切り替えられる。また、第2断片テーブルT22に含まれるエレメントC2には第3断片テーブルT32を示すポインタが格納される。これにより、LUT41の更新が完了する。
【0195】
一方、上記したようにLUT41が更新された場合、
図13に示すように第2断片テーブルT21及び第3断片テーブルT31を含む無効化要求がキューイングされる。なお、第2断片テーブルT21及び第3断片テーブルT31には、判別情報としてマジックナンバーが設定される。
【0196】
このような無効化要求が実行される場合には、当該無効化要求に含まれる第2断片テーブルT21及び第3断片テーブルT31の各々に基づいてADM42が更新されればよい。
【0197】
なお、
図13においては
図12と異なる点について主に説明したが、当該
図13に示すメモリシステム3の動作例は、第2断片テーブルT2に加えて第3断片テーブルT3を用いている点以外は
図12において説明したメモリシステム3の動作と概ね同様であるため、当該
図12と重複する点についての詳細な説明は省略する。
【0198】
上記したように本実施形態の変形例においては、LUT41の更新に対応する断片テーブル(及び当該断片テーブルの下位の階層に対応する断片テーブル)を当該LUT41から取り外して無効化要求として利用することができる。
【0199】
次に、無効化要求キュー552に格納されている無効化要求実行する際の動作例について説明する。
【0200】
ここでは、
図14に示すように、無効化要求キュー552に複数の無効化要求552a~552dが格納されているものとする。複数の無効化要求552a~552dはそれぞれ異なるTrimコマンドが受信されることによってキューイングされた無効化要求であり、当該無効化要求552a~552dにはそれぞれ1つの断片テーブルが含まれている。なお、
図14に示す複数の無効化要求552a~552dは、1つのTrimコマンドが受信されることによってキューイングされた無効化要求であってもよい。
【0201】
なお、
図14において、無効化要求552aに含まれる断片テーブルは第4断片テーブルT4であり、無効化要求552bに含まれる断片テーブルは第3断片テーブルT3であり、無効化要求552cに含まれる断片テーブルは第4断片テーブルT4であり、無効化要求552dに含まれる断片テーブルは第2断片テーブルT2である。
【0202】
ここで、無効化要求キュー552がFIFOキューであり、無効化要求552a~552dが当該無効化要求552a~552dの順で無効化要求キュー552に格納された場合を想定する。
【0203】
この場合、管理部565は、
図15に示すように無効化要求キュー552から無効化要求552aを取り出し、当該無効化要求552aを実行する。この場合、無効化要求552aは上記したように第4断片テーブルT4を含み、当該第4断片テーブルT4に含まれる1つのエレメントC4にはマジックナンバーが設定されており、他の31個のエレメントC4にはPBA#1、PBA#2、・・・、PBA#31が格納されている。このような第4断片テーブルT4(を含む無効化要求552a)によれば、ADM42上のPBA#1~PBA#31に対応するフラグ情報が「1」から「0」に変更される。
【0204】
無効化要求552aが実行された場合、管理部565は、
図16に示すように無効化要求キュー552から無効化要求552bを取り出し、当該無効化要求552bを実行する。この場合、無効化要求552bは上記したように第3断片テーブルT3を含み、当該第3断片テーブルT3に含まれる1つのエレメントC2にはマジックナンバーが設定されており、他の31個のエレメントC3にはPBA#32、PBA#64、・・・、PBA#992が格納されている。このような第3断片テーブルT3(を含む無効化要求552b)によれば、ADM42上のPBA#32~PBA#1023に対応するフラグ情報が「1」から「0」に変更される。
【0205】
無効化要求552bが実行された場合、管理部565は、
図17に示すように無効化要求キュー552から無効化要求552cを取り出し、当該無効化要求552cを実行する。この場合、無効化要求552cは上記したように第4断片テーブルT4を含み、当該第4断片テーブルT4に含まれる1つのエレメントC4にはPBA#2048が格納されており、他の31個のエレメントC4にはマジックナンバーが設定されている。このような第4断片テーブルT4(を含む無効化要求552c)によれば、ADM42上のPBA#2048に対応するフラグ情報が「1」から「0」に変更される。
【0206】
無効化要求552cが実行された場合、管理部565は、
図18に示すように無効化要求キュー552から無効化要求552dを取り出し、当該無効化要求552dを実行する。この場合、無効化要求552dは上記したように第2断片テーブルT2を含み、当該第2断片テーブルT2に含まれる1つのエレメントC2にはPBA#1024が格納されており、他の31個のエレメントC2にはマジックナンバーが設定されている。このような第2断片テーブルT2(を含む無効化要求552d)によれば、ADM42上のPBA#1024~PBA#2047に対応するフラグ情報が「1」から「0」に変更される。
【0207】
上記したように無効化要求キュー552がFIFOキューである場合には、無効化要求は、当該無効化要求キュー552に格納された(つまり、キューイングされた)順に順次実行される。なお、上記した無効化要求552a~552dが実行される間にホスト2から他のコマンドが受信された場合には、当該無効化要求552a~552dよりも当該コマンドが優先的に実行される。
【0208】
ところで、上記した本実施形態の変形例においては無効化要求に断片テーブルが含まれるが、当該断片テーブルに対応する階層に応じて当該無効化要求に基づいて無効化されるデータ(PBA)の範囲は異なる。具体的には、無効化要求552aが実行された場合には、ADM42上で31個のPBA(に書き込まれているデータ)を無効化することができる。また、無効化要求552bが実行された場合には、ADM42上で992個のPBA(に書き込まれているデータ)を無効化することができる。また、無効化要求552cが実行された場合には、ADM42上で1個のPBA(に書き込まれているデータ)を無効化することができる。更に、無効化要求552dが実行された場合には、ADM42上で1024個のPBA(に書き込まれているデータ)を無効化することができる。
【0209】
すなわち、本実施形態の変形例においては、より上位の階層に対応する断片テーブルを含む無効化要求に基づいてADM42を更新した方が少ない処理量(処理コスト)でより広い範囲のPBAを無効化することができる。
【0210】
このため、本実施形態の変形例においては、例えば無効化要求キュー552に格納されている複数の無効化要求のうち、階層が上位の断片テーブルを含む無効化要求を優先的に実行するような構成としてもよい。換言すれば、本実施形態の変形例においては、無効化要求キュー552に格納されている複数の無効化要求に対する優先度制御を実行するように構成されていてもよい。
【0211】
なお、ここでは無効化要求に含まれる断片テーブルに対応する階層に基づいて無効化要求に対する優先度を制御する場合について説明したが、例えば所定の無効化要求に対して優先度を付与する専用のコマンドを予め用意しておくような構成としてもよい。具体的には、このような専用のコマンドによって指定された無効化要求(つまり、高い優先度が付与された無効化要求)を高優先キューに格納し、当該高優先キューに格納された無効化要求を他の無効化要求(例えば、低優先キューに格納された無効化要求)よりも優先的に実行するようにしてもよい。
【0212】
また、無効化要求キュー552に格納された無効化要求は順不同で実行されてもよく、例えば定期的にキューイングされている無効化要求の順番を入れ替えるような処理が実行されてもよい。
【0213】
上記したように本実施形態の変形例においては、Trim応答がホスト2に送信される前にLUT41(に含まれる断片テーブル)が更新され、当該更新される前の断片テーブルを含む無効化要求がキューイングされる。
【0214】
このようなLUT41に含まれる断片テーブルを無効化要求として利用する構成によれば、例えば上記した
図11において説明したように無効化すべきデータが書き込まれている全てのPBAを含む無効化要求をキューイングする場合と比較して、無効化要求をキューイングする際のメモリコピーの回数及び計算処理量を削減することが可能となる。
【0215】
このため、本実施形態の変形例においては、無効化要求のキューイングを高速に行うことができるため、例えばTrim応答を無効化要求のキューイングと同時または当該キューイングの前に行うような構成の場合には、Trimコマンドに対する応答時間を更に短縮することができる。
【0216】
なお、本実施形態の変形例において無効化要求に利用する断片テーブルはLUT41から切り離されているため、当該断片テーブルを無効化要求に利用したとしても、ホスト2に対するデータの一貫性には影響しない。
【0217】
また、本実施形態の変形例においては、無効化要求に含まれる断片テーブルに対して無効化すべきデータを判別するための判別情報が付与されることにより、当該判別情報に基づいて適切な範囲のデータ(が書き込まれているPBA)を無効化するようにADM42を更新ことが可能となる。
【0218】
なお、判別情報としては、マジックナンバーを用いることができる。この場合、無効化要求に含まれる断片テーブルにマジックナンバーを設定することにより、無効化要求において当該断片テーブルのサイズを維持することができる(つまり、無効化要求を断片テーブルよりも大きなサイズにする必要がない)。なお、マジックナンバーを用いない構成の場合には、Trimコマンドにおいて指定されたLBA(の範囲)が判別情報として断片テーブルに付与されても構わない。
【0219】
更に、本実施形態の変形例においてTrim範囲とLUT41の境界とが一致していない場合には、複数の断片テーブルを含む無効化要求が無効化要求キュー552に格納される。このような構成によれば、Trim範囲に依存することなく適切な無効化要求をキューイングすることが可能となる。一方、Trim範囲とLUT41の境界とが一致している場合には、上位の階層に対応する1つの断片テーブルのみを含む無効化要求をキューイングすればよい。
【0220】
また、本実施形態の変形例において複数の無効化要求(断片テーブル)が無効化要求キュー552に格納されている場合には、当該複数の無効化要求に対する優先度制御を実行するようにしてもよい。具体的には、例えば階層が上位の断片テーブルを含む無効化要求に基づくADM42の更新を優先的に実行する構成としてもよい。このような構成によれば、より広い範囲のPBAを効率的に無効化することが可能であり、連続したフリーブロックの生成が容易となる。
【0221】
なお、複数の無効化要求に対する優先度制御は専用のコマンドを用いて実行されても構わない。これによれば、専用のコマンドによって指定された無効化要求に基づくADM42の更新を優先的に実行することが可能となる。
【0222】
ここで、Trimコマンドに基づくADM42の更新を確実に行うためには無効化要求を不揮発化しておくことが好ましい。この場合には、ADM42の更新が実行されていない無効化要求に対して不揮発化が必要であることを示すフラグ情報を付しておき、当該不揮発化が必要なデータの数が所定値を超えた場合に当該データを不揮発性メモリ4に書き込むことにより、無効化要求の不揮発化を実現することができる。これによれば、無効化要求の実行(ADM42の更新)を中断及び再開することが可能となる。
【0223】
しかしながら、無効化要求の実行を中断しない場合には不揮発化は必須ではないため、当該無効化要求を不揮発性メモリ4に書き込む処理が無駄になる。このため、例えば無効化要求であることを示す情報を当該無効化要求に付与しておくことで、当該無効化要求は不揮発性メモリ4に書き込まれない(つまり、無効化要求の不揮発性メモリ4への書き込みを抑制する)ようにしてもよい。
【0224】
更に、無効化要求に基づいてADM42の更新が遅延実行される前に、Trim範囲に対応するPBAを含むブロックに対してガーベージコレクションが実行された場合、当該PBAに書き込まれているデータは他のブロックに移動され、当該PBAに有効な他のデータが書き込まれる可能性がある。このように有効なデータが書き込まれた後に、無効化要求に基づいてADM42が更新された場合には、当該有効なデータ(が書き込まれているPBA)が意図せず無効化されることになる。
【0225】
このため、無効化要求キュー552に格納されている(つまり、未実行の)無効化要求に基づいてデータが無効化される予定のPBAを含むブロックは、ガーベージコレクションの対象としない(つまり、ガーベージコレクションのソースブロックとしては無効化要求の対象でないブロックを選択する)ようにしてもよい。
【0226】
ただし、この場合には無効化要求が実行されるまでガーベージコレクションを待機させなければならない場合があり、情報処理システム1(メモリシステム3)の効率的な動作を阻害する要因となり得る。
【0227】
これに対しては、メモリシステム3(SSD)において管理されているErase Serialと称されるシリアル番号(シーケンス番号)を利用する構成としてもよい。このErase Serialによれば、不揮発性メモリ4に書き込まれたデータが消去される(つまり、Eraseコマンドが実行される)度に1が加算されることにより、不揮発性メモリ4に書き込まれるデータの世代管理を行うことができる。
【0228】
本実施形態の変形例においては、このようなErase Serialを無効化要求に含まれる断片データに付与しておいてもよい。これによれば、無効化要求に基づくADM42の更新時に、当該無効化要求に含まれる断片テーブルに付与されているErase Serialとメモリシステム3において管理されているErase Serialとを比較することによって、当該無効化要求に基づいて無効化されるべきデータが既に消去されている(または有効なデータに書き換えられている)か否かを判定することができる。無効化要求に基づいて無効化されるべきデータが既に消去されていると判定された場合には、当該無効化要求は破棄されればよい。一方、無効化要求に基づいて無効化されるべきデータが消去されていないと判定された場合には、当該無効化要求に基づいてADM42が更新されればよい。
【0229】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【0230】
1…情報処理システム、2…ホスト、3…メモリシステム、4…不揮発性メモリ、5…コントローラ、41…LUT(アドレス変換テーブル)、42…ADM(データマップ)、51…通信インタフェース制御部、52…書き込みバッファメモリ、53…読み出しバッファメモリ、54…不揮発性メモリコントローラ、55…メモリ、411…PBA格納部、412…LBA格納部、413…管理データ格納部、421…マップ格納部、422…PBA格納部、551…キャッシュメモリ、552…無効要求キュー、56…プロセッサ、561…書き込み制御部、562…読み出し制御部、563…ガーベージコレクション制御部、564…アドレス変換部、565…管理部、566…キャッシュメモリ制御部。