IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝メモリ株式会社の特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025008089
(43)【公開日】2025-01-20
(54)【発明の名称】メモリシステムおよび制御方法
(51)【国際特許分類】
   G06F 12/04 20060101AFI20250109BHJP
   G06F 12/00 20060101ALI20250109BHJP
   G06F 12/02 20060101ALI20250109BHJP
   G06F 21/60 20130101ALI20250109BHJP
【FI】
G06F12/04 530
G06F12/00 597U
G06F12/02 510A
G06F21/60 320
【審査請求】未請求
【請求項の数】15
【出願形態】OL
(21)【出願番号】P 2023109957
(22)【出願日】2023-07-04
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】中西 圭里
(72)【発明者】
【氏名】小川 貴也
(72)【発明者】
【氏名】竹本 卓
(72)【発明者】
【氏名】及川 恒平
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA16
5B160DA08
(57)【要約】
【課題】記憶スペースの有効利用とユーザデータの保護とに有用なメモリシステムを実現する。
【解決手段】メモリシステムのコントローラは、圧縮回路と、暗号化回路と、圧縮単位生成回路と、を含む。圧縮単位生成回路は、書き込み先のネームスペースの設定を示す第1のネームスペース設定情報に基づいて算出される、書き込み先のネームスペースに対応する第1の圧縮単位を生成する。第1の圧縮単位は、書き込み先のネームスペースに書き込まれるべきデータを暗号化するための暗号鍵が第1の圧縮単位内で切り替わらないという制約を満たすサイズを有する。
【選択図】図7
【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記メモリシステムにアクセスするために前記ホストによって使用される複数のネームスペースを管理し、且つ、前記不揮発性メモリを制御するように構成されたコントローラと、を具備し、
前記コントローラは、
前記ホストから受信される書き込みデータを圧縮するように構成された圧縮回路と、
前記圧縮回路から出力される圧縮データを、暗号鍵を使用して暗号化することによって、前記不揮発性メモリに書き込まれるべき暗号化データを生成するように構成された暗号化回路と、
前記複数のネームスペースの各々について、前記書き込みデータを圧縮する単位である圧縮単位を生成するように構成された圧縮単位生成回路と、を含み、
前記圧縮単位生成回路は、
書き込み先のネームスペースのネームスペース識別子を指定するライトコマンドを前記ホストから受信したことに応じ、前記書き込み先のネームスペースの設定を示す第1のネームスペース設定情報に基づいて算出される、前記書き込み先のネームスペースに対応する第1の圧縮単位であって、前記書き込み先のネームスペースに書き込まれるべきデータを暗号化するための暗号鍵が第1の圧縮単位内で切り替わらないという制約を満たすサイズを有する第1の圧縮単位を生成し、
前記第1の圧縮単位を前記圧縮回路に設定するように構成されている、
メモリシステム。
【請求項2】
前記圧縮単位生成回路は、
前記複数のネームスペースにそれぞれ対応する複数のネームスペース設定情報に基づいて、前記複数のネームスペースにそれぞれ対応する複数の圧縮単位を予め算出し、前記算出した複数の圧縮単位を保持し、
前記ライトコマンドを前記ホストから受信したことに応じ、前記第1の圧縮単位を前記複数の圧縮単位から選択することによって、前記第1の圧縮単位を前記圧縮回路に設定するように構成されている、
請求項1に記載のメモリシステム。
【請求項3】
前記圧縮単位生成回路は、
前記第1のネームスペース設定情報に基づき、前記書き込み先のネームスペースにおいて暗号鍵が切り替えられる単位である暗号鍵切り替え単位を算出し、
前記第1のネームスペース設定情報から、前記書き込み先のネームスペースの論理アドレス空間に含まれる一つの論理アドレス当たりのデータサイズを取得し、
前記算出した暗号鍵切り替え単位と前記取得したデータサイズとのうちの小さい方のサイズを前記第1の圧縮単位として算出するように構成されている、
請求項1に記載のメモリシステム。
【請求項4】
前記コントローラは、
前記不揮発性メモリから読み出される前記暗号化データを、前記圧縮データの暗号化に使用された暗号鍵を使用して復号する復号回路と、
前記復号回路によって復号されたデータを伸張することによって非圧縮データを生成する伸張回路と、をさらに具備し、
前記伸張回路は、
前記非圧縮データのサイズが、前記非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位に一致するか否かを判定するように構成されている、
請求項1に記載のメモリシステム。
【請求項5】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記メモリシステムをアクセスするために前記ホストによって使用される論理アドレス空間に設定された複数の論理アドレス範囲に1対1の関係でそれぞれ関連付けられた複数の暗号鍵を管理し、且つ、前記不揮発性メモリを制御するように構成されたコントローラと、を具備し、
前記コントローラは、
前記ホストから受信されるライトコマンドに関連付けられた書き込みデータを圧縮するように構成された圧縮回路と、
前記圧縮回路から出力される圧縮データを、前記ライトコマンドによって指定される論理アドレスが属する論理アドレス範囲に関連付けられた暗号鍵を使用して暗号化することによって、前記不揮発性メモリに書き込まれるべき暗号化データを生成するように構成された暗号化回路と、
前記ホストからライトコマンドが受信される度、前記受信されたライトコマンドによって指定される論理アドレスが属する論理アドレス範囲を特定するように構成された論理アドレス範囲チェック回路と、
前記書き込みデータを圧縮する単位である圧縮単位を生成するように構成された圧縮単位生成回路と、を含み、
前記圧縮単位生成回路は、
前記ホストから受信された最新のライトコマンドによって指定される第1の論理アドレスが属する第1の論理アドレス範囲が、前記ホストから受信された一つ前のライトコマンドによって指定される第2の論理アドレスが属する第2の論理アドレス範囲と一致する場合、前記最新のライトコマンドに関連付けられた第1の書き込みデータが、前記一つ前のライトコマンドに関連付けられた第2の書き込みデータを少なくとも含むデータと一緒に圧縮されるように、前記圧縮単位の現在のサイズを拡張し、前記ホストからの次のライトコマンドの受信を待ち、
前記第1の論理アドレス範囲が前記第2の論理アドレス範囲と一致しない場合、前記第1の書き込みデータと、前記第2の書き込みデータを少なくとも含む前記データと、が別々に圧縮されるように、前記圧縮単位の前記現在のサイズを前記圧縮単位として生成し、前記生成した圧縮単位を前記圧縮回路に設定し、前記ホストからの前記次のライトコマンドの受信を待つように構成されている、
メモリシステム。
【請求項6】
前記圧縮単位生成回路は、
前記最新のライトコマンドの受信から所定時間経過しても前記次のライトコマンドが受信されない場合、または前記拡張された圧縮単位が上限に達した場合、前記第1の書き込みデータを少なくとも含むデータと、前記次のライトコマンドに関連付けられた書き込みデータと、が別々に圧縮されるように、前記圧縮単位の現在のサイズを前記圧縮単位として生成し、前記生成した圧縮単位を前記圧縮回路に設定するように構成されている、
請求項5に記載のメモリシステム。
【請求項7】
前記コントローラは、
前記第1の論理アドレス範囲が前記第2の論理アドレス範囲と一致しない場合、前記一つ前の書き込みデータを少なくとも含む前記データのうち、少なくとも前記一つ前の書き込みデータを圧縮しない制御を実行するように構成されている、
請求項5に記載のメモリシステム。
【請求項8】
前記コントローラは、
前記不揮発性メモリから読み出される前記暗号化データを、前記圧縮データの暗号化に使用された暗号鍵を使用して復号する復号回路と、
前記復号回路によって復号されたデータを伸張することによって非圧縮データを生成する伸張回路と、をさらに具備し、
前記伸張回路は、
前記非圧縮データのサイズが、前記非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位に一致するか否かを判定するように構成されている、
請求項5に記載のメモリシステム。
【請求項9】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記メモリシステムにアクセスするために前記ホストによって使用される複数のネームスペースと、前記複数のネームスペースに1対1の関係でそれぞれ関連付けられた複数の暗号鍵とを管理し、且つ、前記不揮発性メモリを制御するように構成されたコントローラと、を具備し、
前記コントローラは、
前記ホストから受信されるライトコマンドに関連付けられた書き込みデータを圧縮するように構成された圧縮回路と、
前記圧縮回路から出力される圧縮データを、前記書き込みデータが書き込まれるべきネームスペースに関連付けられた暗号鍵を使用して暗号化することによって、前記不揮発性メモリに書き込まれるべき暗号化データを生成するように構成された暗号化回路と、
前記書き込みデータを圧縮する単位である圧縮単位を生成するように構成された圧縮単位生成回路と、を含み、
前記圧縮単位生成回路は、
前記ホストから受信された最新のライトコマンドによって指定される第1のネームスペース識別子が、前記ホストから受信された一つ前のライトコマンドによって指定される第2のネームスペース識別子と一致する場合、前記最新のライトコマンドに関連付けられた第1の書き込みデータが、前記一つ前のライトコマンドに関連付けられた第2の書き込みデータを少なくとも含むデータと一緒に圧縮されるように、前記圧縮単位の現在のサイズを拡張し、前記ホストからの次のライトコマンドの受信を待ち、
前記第1のネームスペース識別子が前記第2のネームスペース識別子と一致しない場合、前記第1の書き込みデータと、前記第2の書き込みデータを少なくとも含む前記データと、が別々に圧縮されるように、前記圧縮単位の前記現在のサイズを前記圧縮単位として生成し、前記生成した圧縮単位を前記圧縮回路に設定し、前記ホストからの前記次のライトコマンドの受信を待つように構成されている、
メモリシステム。
【請求項10】
前記圧縮単位生成回路は、
前記最新のライトコマンドの受信から所定時間経過しても前記次のライトコマンドが受信されない場合、または前記拡張された圧縮単位が上限に達した場合、前記第1の書き込みデータを少なくとも含むデータと、前記次のライトコマンドに関連付けられた書き込みデータと、が別々に圧縮されるように、前記圧縮単位の現在のサイズを前記圧縮単位として生成し、前記生成した圧縮単位を前記圧縮回路に設定するように構成されている、
請求項9に記載のメモリシステム。
【請求項11】
前記コントローラは、
前記第1のネームスペース識別子が前記第2のネームスペース識別子と一致しない場合、前記第2の書き込みデータを少なくとも含む前記データのうち、少なくとも前記第2の書き込みデータを圧縮しない制御を実行するように構成されている、
請求項9に記載のメモリシステム。
【請求項12】
前記コントローラは、
前記不揮発性メモリから読み出される前記暗号化データを、前記圧縮データの暗号化に使用された暗号鍵を使用して復号する復号回路と、
前記復号回路によって復号されたデータを伸張することによって非圧縮データを生成する伸張回路と、をさらに具備し、
前記伸張回路は、
前記非圧縮データのサイズが、前記非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位に一致するか否かを判定するように構成されている、
請求項9に記載のメモリシステム。
【請求項13】
不揮発性メモリを含むメモリシステムを制御する制御方法であって、
前記メモリシステムにアクセスするためにホストによって使用される複数のネームスペースを管理することと、
前記ホストから受信される書き込みデータを圧縮することと、
前記書き込みデータを圧縮することによって得られる圧縮データを、暗号鍵を使用して暗号化することによって、前記不揮発性メモリに書き込まれるべき暗号化データを生成することと、
前記複数のネームスペースの各々について、前記書き込みデータを圧縮する単位である圧縮単位を生成することと、を具備し、
前記圧縮単位を生成することは、
書き込み先のネームスペースのネームスペース識別子を指定するライトコマンドを前記ホストから受信したことに応じ、前記書き込み先のネームスペースの設定を示す第1のネームスペース設定情報に基づいて算出される、前記書き込み先のネームスペースに対応する第1の圧縮単位であって、前記書き込み先のネームスペースに書き込まれるべきデータを暗号化するための暗号鍵が第1の圧縮単位内で切り替わらないという制約を満たすサイズを有する第1の圧縮単位を、前記書き込み先のネームスペースに書き込まれるべき書き込みデータを圧縮する際に使用すべき圧縮単位として生成することを含む、
制御方法。
【請求項14】
不揮発性メモリを含むメモリシステムを制御する制御方法であって、
前記メモリシステムにアクセスするためにホストによって使用される論理アドレス空間に設定された複数の論理アドレス範囲に1対1の関係でそれぞれ関連付けられた複数の暗号鍵を管理することと、
ホストから受信されるライトコマンドに関連付けられた書き込みデータを圧縮することと、
前記書き込みデータを圧縮することによって得られる圧縮データを、前記ライトコマンドによって指定される論理アドレスが属する論理アドレス範囲に関連付けられた暗号鍵を使用して暗号化することによって、前記不揮発性メモリに書き込まれるべき暗号化データを生成することと、
前記ホストからライトコマンドが受信される度、前記受信されたライトコマンドによって指定される論理アドレスが属する論理アドレス範囲を特定することと、
前記書き込みデータを圧縮する単位である圧縮単位を生成することと、を具備し、
前記圧縮単位を生成することは、
前記ホストから受信された最新のライトコマンドによって指定される第1の論理アドレスが属する第1の論理アドレス範囲が、前記ホストから受信された一つ前のライトコマンドによって指定される第2の論理アドレスが属する第2の論理アドレス範囲と一致する場合、前記最新のライトコマンドに関連付けられた第1の書き込みデータが、前記一つ前のライトコマンドに関連付けられた第2の書き込みデータを少なくとも含むデータと一緒に圧縮されるように、前記圧縮単位の現在のサイズを前記第1の書き込みデータのサイズだけ増加させ、前記ホストからの次のライトコマンドの受信を待つことと、
前記第1の論理アドレス範囲が前記第2の論理アドレス範囲と一致しない場合、前記第1の書き込みデータと、前記第2の書き込みデータを少なくとも含む前記データと、が別々に圧縮されるように、前記圧縮単位の前記現在のサイズを前記圧縮単位として生成し、前記ホストからの次のライトコマンドの受信を待つことと、を含む、
制御方法。
【請求項15】
不揮発性メモリを含むメモリシステムを制御する制御方法であって、
前記メモリシステムにアクセスするためにホストによって使用される複数のネームスペースと、前記複数のネームスペースに1対1の関係でそれぞれ関連付けられた複数の暗号鍵とを管理することと、
前記ホストから受信されるライトコマンドに関連付けられた書き込みデータを圧縮することと、
前記書き込みデータを圧縮することによって得られる圧縮データを、前記書き込みデータが書き込まれるべきネームスペースに関連付けられた暗号鍵を使用して暗号化することによって、前記不揮発性メモリに書き込まれるべき暗号化データを生成することと、
前記書き込みデータを圧縮する単位である圧縮単位を生成することと、を具備し、
前記圧縮単位を生成することは、
前記ホストから受信された最新のライトコマンドによって指定される第1のネームスペース識別子が、前記ホストから受信された一つ前のライトコマンドによって指定される第2のネームスペース識別子と一致する場合、前記最新のライトコマンドに関連付けられた第1の書き込みデータが、前記一つ前のライトコマンドに関連付けられた第2の書き込みデータを少なくとも含むデータと一緒に圧縮されるように、前記圧縮単位の現在のサイズを、前記第2の書き込みデータのサイズだけ増加させ、前記ホストからの次のライトコマンドの受信を待つことと、
前記第1のネームスペース識別子が前記第2のネームスペース識別子と一致しない場合、前記第1の書き込みデータと、前記第2の書き込みデータを少なくとも含む前記データと、が別々に圧縮されるように、前記圧縮単位の前記現在のサイズを前記圧縮単位として生成し、前記ホストからの次のライトコマンドの受信を待つことと、を含む、
制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを備えるメモリシステムおよびメモリシステムを制御する制御方法に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
【0003】
また、最近では、不揮発性メモリの記憶スペースの有効利用と、メモリシステムに保存されたユーザデータの保護と、に有用なメモリシステムの実現が要求されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】米国特許出願公開第2016/0011972号明細書
【特許文献2】米国特許出願公開第2022/0377027号明細書
【特許文献3】米国特許出願公開第2022/0377013号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明の一実施形態が解決しようとする課題は、不揮発性メモリの記憶スペースの有効利用とユーザデータの保護とに有用なメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【0006】
実施形態によれば、メモリシステムは、ホストに接続可能である。前記メモリシステムは、不揮発性メモリと、コントローラとを具備する。前記コントローラは、前記メモリシステムにアクセスするために前記ホストによって使用される複数のネームスペースを管理し、且つ、前記不揮発性メモリを制御するように構成されている。前記コントローラは、圧縮回路と、暗号化回路と、圧縮単位生成回路と、を含む。前記圧縮回路は、前記ホストから受信される書き込みデータを圧縮するように構成されている。前記暗号化回路は、前記圧縮回路から出力される圧縮データを、暗号鍵を使用して暗号化することによって、前記不揮発性メモリに書き込まれるべき暗号化データを生成するように構成されている。前記圧縮単位生成回路は、前記複数のネームスペースの各々について、前記書き込みデータを圧縮する単位である圧縮単位を生成するように構成されている。前記圧縮単位生成回路は、書き込み先のネームスペースのネームスペース識別子を指定するライトコマンドを前記ホストから受信したことに応じ、前記書き込み先のネームスペースの設定を示す第1のネームスペース設定情報に基づいて算出される、前記書き込み先のネームスペースに対応する第1の圧縮単位であって、前記書き込み先のネームスペースに書き込まれるべきデータを暗号化するための暗号鍵が第1の圧縮単位内で切り替わらないという制約を満たすサイズを有する第1の圧縮単位を生成する。前記圧縮単位生成回路は、前記第1の圧縮単位を前記圧縮回路に設定する。
【図面の簡単な説明】
【0007】
図1】第1実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
図2】第1実施形態に係るメモリシステムの不揮発性メモリに含まれる複数のメモリチップの各々の構成例を示すブロック図。
図3】第1実施形態に係るメモリシステムにおいて使用されるネームスペースの構成例を示す図。
図4】第1実施形態に係るメモリシステムにおいて使用されるロッキングテーブルの構成例を示す図。
図5】第1実施形態に係るメモリシステムにおける論理アドレス範囲(LBAレンジ)の設定の例を示す図。
図6】データを圧縮するための圧縮単位とデータを暗号化するための暗号化鍵との関係の例を示す図。
図7】第1実施形態に係るメモリシステムにおいて実行されるデータ書き込み処理およびデータ読み出し処理の例を示す図。
図8】第1実施形態に係るメモリシステムにおいて管理されるネームスペース設定情報の例を示す図。
図9】第1実施形態に係るメモリシステムおいて実行されるデータ書き込み処理の手順を示すフローチャート。
図10】第1実施形態に係るメモリシステムにおいて実行される圧縮単位生成処理の手順を示すフローチャート。
図11】第1実施形態に係るメモリシステムにおいて実行される暗号鍵切り替え単位算出処理の手順を示すフローチャート。
図12】第1実施形態に係るメモリシステムにおいて実行されるデータ読み出し処理の手順を示すフローチャート。
図13】第2実施形態に係るメモリシステムにおけるデータ書き込み処理およびデータ読み出し処理の例を示す図。
図14】第2実施形態に係るメモリシステムにおいて実行される、複数の書き込みデータに対する圧縮処理の第1の例を示す図。
図15】第2実施形態に係るメモリシステムにおいて実行される、複数の書き込みデータに対する圧縮処理の第2の例を示す図。
図16】第2実施形態に係るメモリシステムにおいて実行される、複数の書き込みデータに対する圧縮処理の第3の例を示す図。
図17A】第2実施形態に係るメモリシステムにおいて実行されるデータ書き込み処理の一部の手順を示すフローチャート。
図17B】第2実施形態に係るメモリシステムにおいて実行されるデータ書き込み処理の残りの手順を示すフローチャート。
図18】第3実施形態に係るメモリシステムにおけるデータ書き込み処理およびデータ読み出し処理の例を示す図。
図19】第3実施形態に係るメモリシステムにおいて実行される、複数の書き込みデータに対する圧縮処理の第1の例を示す図。
図20】第3実施形態に係るメモリシステムにおいて実行される、複数の書き込みデータに対する圧縮処理の第2の例を示す図。
図21】第3実施形態に係るメモリシステムにおいて実行される、複数の書き込みデータに対する圧縮処理の第3の例を示す図。
図22A】第3実施形態に係るメモリシステムにおいて実行されるデータ書き込み処理の一部の手順を示すフローチャート。
図22B】第3実施形態に係るメモリシステムにおいて実行されるデータ書き込み処理の残りの手順を示すフローチャート。
【発明を実施するための形態】
【0008】
以下、図面を参照して、実施形態を説明する。
(第1実施形態)
図1は、第1実施形態に係るメモリシステム3を含む情報処理システム1の構成例を示すブロック図である。情報処理システム1は、ホスト2と、メモリシステム3とを含む。ホスト2と、メモリシステム3とは、バス7を介して接続可能である。
【0009】
ホスト2は、情報処理装置である。ホスト2は、例えば、パーソナルコンピュータ、サーバコンピュータ、または携帯端末である。ホスト2は、メモリシステム3にアクセスする。具体的には、ホスト2は、データを書き込むためのコマンドであるライトコマンドをメモリシステム3に送信する。また、ホスト2は、データを読み出すためのコマンドであるリードコマンドをメモリシステム3に送信する。
【0010】
メモリシステム3は、ホスト2に接続可能なストレージデバイスである。メモリシステム3は、例えば、ソリッドステートドライブ(SSD)によって実現される。メモリシステム3は、不揮発性メモリを含む。メモリシステム3は、不揮発性メモリにデータを書き込む。また、メモリシステム3は、不揮発性メモリからデータを読み出す。
【0011】
メモリシステム3とホスト2との間の通信は、バス7を介して実行される。バス7は、ホスト2とメモリシステム3とを接続する伝送路である。バス7は、例えば、PCI expressTM(PCIeTM)バスである。ホスト2とメモリシステム3とは、PCIeバスを介して、データ、入出力(I/O)コマンド、およびその応答を送受信する。I/Oコマンドは、不揮発性メモリへのデータの書き込み、または不揮発性メモリからのデータの読み出しを行うためのコマンドである。I/Oコマンドは、例えば、ライトコマンド、またはリードコマンドである。
【0012】
ホスト2とメモリシステム3とを接続するための論理インタフェースの規格としては、例えば、NVM expressTM(NVMeTM)規格が使用され得る。NVMe規格のインタフェースでは、少なくとも一つのサブミッションキュー(SQ)と、この少なくとも一つのサブミッションキュー(SQ)に関連付けられたコンプリーションキュー(CQ)とを含む対のキューを用いて、ホスト2とメモリシステム3との間でコマンドおよびその応答の送受信が実行される。この対のキューは、サブミッションキュー/コンプリーションキューペア(SQ/CQペア)と称される。ホスト2は、サブミッションキュー(SQ)にコマンドを格納することでコマンドを発行し、コンプリーションキュー(CQ)に格納されている完了応答を処理することで発行したコマンドの処理が完了されたか否かを確認する。メモリシステム3は、サブミッションキュー(SQ)に格納されているコマンドをフェッチすることでホスト2からコマンドを受信し、処理が完了したコマンドに対応する完了応答をコンプリーションキュー(CQ)に格納することで、コマンドの処理が完了したことをホスト2に通知する。
【0013】
次に、ホスト2の構成について説明する。
【0014】
ホスト2は、プロセッサ21と、メモリ22とを含む。プロセッサ21およびメモリ22は、内部バス20を介して相互接続される。
【0015】
プロセッサ21は、例えばCPUである。プロセッサ21は、メモリシステム3、または、ホスト2に接続された他のストレージデバイスからメモリ22にロードされるソフトウェア(ホストソフトウェア)を実行する。ホストソフトウェアは、例えば、オペレーティングシステム、ファイルシステム、アプリケーションプログラム、を含む。
【0016】
メモリ22は、例えば揮発性のメモリである。メモリ22は、メインメモリ、システムメモリ、またはホストメモリとも称される。メモリ22は、例えばダイナミックランダムアクセスメモリ(DRAM)である。メモリ22の記憶領域の一部は、SQ/CQペアを格納するために使用される。また、メモリ22の記憶領域の他の一部は、データバッファとして使用される。データバッファには、メモリシステム3に書き込まれるべきライトデータまたはメモリシステム3から転送されたリードデータが格納される。
【0017】
次に、メモリシステム3の内部構成について説明する。メモリシステム3は、コントローラ4と、不揮発性メモリ5とを含む。また、メモリシステム3は、ランダムアクセスメモリ、例えば、ダイナミックランダムアクセスメモリ(DRAM)6をさらに含んでいてもよい。
【0018】
コントローラ4は、メモリコントローラである。コントローラ4は、例えば、system-on-a-chip(SoC)のような制御回路である。コントローラ4は、不揮発性メモリ5に電気的に接続されている。コントローラ4は、ホスト2から受信されるI/Oコマンドそれぞれを処理することによって、不揮発性メモリ5からデータを読み出すためのデータ読み出し処理と、不揮発性メモリ5にデータを書き込むためのデータ書き込み処理とを実行する。コントローラ4と不揮発性メモリ5とを接続する物理インタフェースとしては、例えば、Toggle NANDフラッシュインタフェース、またはオープンNANDフラッシュインタフェース(ONFI)が使用される。コントローラ4の各部の機能は、専用ハードウェア、プログラムを実行するプロセッサ、またはこれらの組み合わせによって実現され得る。
【0019】
不揮発性メモリ5の一例は、例えば、NAND型フラッシュメモリである。不揮発性メモリ5は、2次元構造のフラッシュメモリであってもよいし、3次元構造のフラッシュメモリであってもよい。不揮発性メモリ5は、例えば、複数のメモリチップを含む。メモリチップは、メモリダイとも称される。複数のメモリチップの各々は、例えば、NAND型フラッシュメモリダイとして実現される。以下では、メモリチップをNANDチップと称する。図1においては、不揮発性メモリ5が、32個のNANDチップ#0~#31を含む場合が示されている。
【0020】
DRAM6は、揮発性メモリである。DRAM6の記憶領域の一部は、例えば、コントローラ4によって使用される管理データを格納するために使用される。
【0021】
次に、コントローラ4の内部構成を説明する。コントローラ4は、ホストインタフェース(ホスト I/F)401と、CPU402と、暗号鍵管理回路403と、誤り訂正符号(ECC)処理回路404と、DRAMインタフェース(DRAM I/F)405と、圧縮回路406と、伸張回路407と、暗号化回路408と、復号回路409と、バッファメモリ410と、不揮発性メモリインタフェース(不揮発性メモリ I/F)411とを含む。これらホストインタフェース401と、CPU402と、暗号鍵管理回路403と、ECC処理回路404と、DRAMインタフェース405と、圧縮回路406と、伸張回路407と、暗号化回路408と、復号回路409と、バッファメモリ410と、不揮発性メモリインタフェース411とは、内部バス400を介して相互接続される。
【0022】
ホストインタフェース401は、ホスト2との通信を実行する通信インタフェース回路である。ホストインタフェース401は、ライトコマンド、リードコマンドといった様々なコマンドをホスト2から受信(フェッチ)する。そして、ホストインタフェース401は、コントローラ4によって処理されたコマンドに対応する応答(例えば、完了応答)をホスト2に送信する。
【0023】
ライトコマンドは、メモリシステム3に対し、ユーザデータ(書き込みデータ)を、不揮発性メモリ5に書き込むことを要求するコマンドである。ライトコマンドは、例えば、書き込み先のネームスペースを識別するネームスペース識別子と、この書き込み先のネームスペース内の書き込み先の論理アドレス(開始LBA)と、このライトコマンドに関連付けられた書き込みデータのサイズ(LBAの個数)と、書き込みデータが格納されているメモリ22内の位置を示すデータポインタと、を指定する。書き込み先のネームスペースは、書き込みデータが書き込まれるべきネームスペースである。書き込み先の論理アドレスは、書き込みデータが書き込まれるべき最初の論理アドレスである。
【0024】
リードコマンドは、メモリシステム3に対し、ユーザデータ(リード対象データ)を、不揮発性メモリ5から読み出すことを要求するコマンドである。リードコマンドは、例えば、ネームスペースを識別するネームスペース識別子と、このネームスペース内の論理アドレス(開始LBA)と、リード対象データのサイズ(LBAの個数)と、リード対象データが転送されるべきメモリ22内の位置を示すデータポインタと、を指定する。
【0025】
CPU402は、プロセッサである。CPU402は、不揮発性メモリ5または図示しないROMに格納されている制御プログラム(ファームウェア)を実行することによって様々な処理を行う。
【0026】
CPU402は、例えば、フラッシュトランスレーション層(FTL)として、不揮発性メモリ5に記憶されたデータの管理と、不揮発性メモリ5に含まれるブロックの管理とを行う。不揮発性メモリ5に記憶されたデータの管理は、例えば、マッピング情報の管理を含む。CPU402は、論理物理アドレス変換テーブル(L2Pテーブル)を使用して、マッピング情報を管理する。マッピング情報は、論理アドレスそれぞれと不揮発性メモリ5の物理アドレスそれぞれとの間のマッピングを示す情報である。論理アドレスは、メモリシステム3にアクセスするためにホスト2によって使用されるアドレスである。論理アドレスとしては、例えば、論理ブロックアドレス(LBA)が使用される。LBAは、論理ブロックと称されるデータを参照するために使用される論理アドレスである。LBAによって指定可能な論理ブロックのサイズは、例えば、512バイト、4KiB、8KiB、または16KiB、等である。物理アドレスは、不揮発性メモリ5内の物理的な記憶位置を示すアドレスである。
【0027】
また、CPU402は、複数のネームスペースを作成および管理する。複数のネームスペースの各々は、論理アドレスの集合である。複数のネームスペースは、一つのメモリシステムをあたかも複数のメモリシステムであるかのように動作させるために使用される。複数のネームスペースの各々は、メモリシステム3にアクセスするためにホスト2によって使用される。複数のネームスペースの各々は、ネームスペース識別子によって識別される。ネームスペース識別子は、アクセス対象のネームスペースを指定するためにホスト2によって使用される識別子である。
【0028】
また、不揮発性メモリ5に含まれるブロックの管理は、不揮発性メモリ5に含まれるバッドブロックの管理と、ウェアレベリングと、ガベージコレクションとを含む。
【0029】
暗号鍵管理回路403は、暗号鍵を管理する回路である。暗号鍵は、書き込みデータの暗号化および復号に使用される鍵である。暗号鍵管理回路403は、例えば、ネームスペース毎に、一つ以上の暗号鍵を管理する。暗号鍵管理回路403の詳細については、図4を参照して後述する。
【0030】
ECC処理回路404は、不揮発性メモリ5にデータが書き込まれる際に、誤り訂正符号化処理を実行する。誤り訂正符号化処理は、不揮発性メモリ5に書き込まれるべきデータに誤り訂正符号(ECC)を冗長コードとして付加する処理である。不揮発性メモリ5からデータがリードされた際に、ECC処理回路404は、誤り訂正復号処理を実行する。誤り訂正復号処理は、不揮発性メモリ5から読み出されたデータに付加されたECCを使用して、このデータの誤りを検出及び訂正する処理である。
【0031】
DRAMインタフェース405は、DRAM6を制御する回路である。DRAMインタフェース405は、DRAM6にデータを格納する。また、DRAMインタフェース405は、DRAM6に格納されているデータを読み出す。
【0032】
圧縮回路406は、ホスト2から受信されたライトコマンドに関連付けられた書き込みデータを圧縮する回路である。圧縮回路406は、可逆圧縮アルゴリズムを使用して、書き込みデータを圧縮する。以降では、書き込みデータを圧縮することによって得られたデータを、圧縮データと称する。可逆圧縮アルゴリズムの例としては、例えば、辞書式符号化、エントロピー符号化、辞書式符号化とエントロピー符号化との組み合わせ、等が挙げられる。
【0033】
圧縮データは、圧縮前の書き込みデータよりも小さいサイズを有する。圧縮回路406によって一度に圧縮される書き込みデータのサイズが大きいほど、書き込みデータのサイズに対する圧縮データのサイズの比率が小さくなる。つまり、圧縮回路406は、より大きいサイズの書き込みデータを一度に圧縮するほど、高い効率で書き込みデータを圧縮することができる。なぜなら、一度に圧縮される書き込みデータのサイズが大きいほど、書き込みデータの圧縮処理において参照可能な情報量が増えるからである。
【0034】
圧縮回路406によって一度に圧縮される書き込みデータのサイズは、圧縮単位と称される。つまり、圧縮単位は、書き込みデータを圧縮する単位である。
【0035】
伸張回路407は、圧縮データを伸張することによって非圧縮データを生成する回路である。
【0036】
暗号化回路408は、圧縮データを暗号化(encrypt)する回路である。以降では、暗号化回路408によって暗号化されたデータを、暗号化データと称する。暗号化回路408は、圧縮回路406から出力される圧縮データを、暗号鍵管理回路403によって管理される暗号鍵を使用して暗号化することによって、不揮発性メモリ5に書き込まれるべき暗号化データを生成する。生成された暗号化データは、ECC処理回路404によって誤り訂正符号化処理が実行された後に、不揮発性メモリインタフェース411を介して不揮発性メモリ5に書き込まれる。
【0037】
復号回路409は、暗号化データを復号(decrypt)する回路である。復号回路409は、不揮発性メモリ5から読み出された暗号化データを、暗号鍵管理回路403によって管理されている暗号鍵を使用して復号する。不揮発性メモリ5から読み出された暗号化データは、圧縮データを暗号化することによって得られたデータである。不揮発性メモリ5から読み出された暗号化データは、ECC処理回路404によって誤りが訂正された後に、ECC処理回路404から復号回路409に転送される。復号回路409は、暗号化データを復号することによって暗号化が解除された圧縮データを生成し、生成した圧縮データを伸張回路407に転送する。
【0038】
バッファメモリ410は、一時的にデータを保持する揮発性メモリである。バッファメモリ410の記憶領域の一部は、ホスト2から受信された書き込みデータを一時的に格納するために使用される。また、バッファメモリ410の記憶領域の他の一部は、不揮発性メモリ5から読み出されたデータを一時的に格納するために使用される。
【0039】
不揮発性メモリインタフェース411は、不揮発性メモリ5を制御する回路である。不揮発性メモリインタフェース411は、不揮発性メモリ5に含まれる複数のNANDチップに電気的に接続される。
【0040】
個々のNANDチップは、独立して動作可能である。このため、NANDチップは、並列動作可能な単位として機能する。不揮発性メモリインタフェース411は、チャンネルch0、ch1、…、ch7に接続される。不揮発性メモリインタフェース411は、チャンネルch0、ch1、…、ch7の各々を介して、一つまたは複数のNANDチップに接続される。図1においては、チャンネルch0、ch1、…、ch7の各々に四つのNANDチップが接続されている場合が例示されている。この場合、不揮発性メモリインタフェース411は、チャンネルch0を介して、NANDチップ#0、#8、#16、および#24に接続される。不揮発性メモリインタフェース411は、チャンネルch1を介して、NANDチップ#1、#9、#17、および#25に接続される。そして、不揮発性メモリインタフェース411は、チャンネルch7を介して、NANDチップ#7、#15、#23、および#31に接続される。NANDチップ#0、#1、…、#7は、コントローラ4によってバンクBNK0として扱われる。同様に、NANDチップ#8、#9、…、#15は、コントローラ4によってバンクBNK1として扱われる。NANDチップ#16、#17、…、#23は、コントローラ4によってバンクBNK2として扱われる。NANDチップ#24、#25、…、#31は、コントローラ4によってバンクBNK3として扱われる。バンクは、インタリーブ動作によって、複数のNANDチップを並列動作させる単位である。
【0041】
図1に示される不揮発性メモリ5の構成においては、コントローラ4は、8チャンネルと、4バンク間のインタリーブ動作とによって、最大で32個のNANDチップにデータを並列に書き込むことができる(並列書き込み数=32)。なお、NANDチップ#0~#31の各々は、複数のプレーンを有するマルチプレーン構成を有していてもよい。例えば、NANDチップ#0~#31の各々が二つのプレーンを含む場合、コントローラ4は、最大で64個のプレーンにデータを並列に書き込むことができる(並列書き込み数=64)。
【0042】
次に、NANDチップの構成を説明する。図2は、不揮発性メモリ5に含まれる複数のNANDチップの各々の構成例を示すブロック図である。
【0043】
NANDチップ#nは、NANDチップ#0~#31のうちの任意のNANDチップである(nは、0から31までの整数)。NANDチップ#nは、メモリセルアレイ51を含む。メモリセルアレイ51は、複数のブロックBLK0~BLKq-1を含む。ブロックBLK0~BLKq-1の各々は、複数のページ(ここではページP0~Pp-1)を含む。各ページは、複数のメモリセルを含む。ブロックBLK0~BLKq-1の各々は、データを消去するデータ消去動作の単位である。ページP0~Pp-1の各々は、データ書き込み動作およびデータ読み出し動作の単位である。
【0044】
図3は、メモリシステム3において管理される複数のネームスペースを説明するための図である。
【0045】
図3においては、コントローラ4がネームスペースNS1、ネームスペースNS2、ネームスペースNS3を管理している場合が例示されている。各ネームスペースは、ネームスペース識別子(NSID)によって識別される。各ネームスペースは、連続する複数の論理アドレス(LBA)の集合を含む。各ネームスペースに対応する論理アドレス空間は、LBA0から始まる。各ネームスペースは、任意のサイズに設定可能である。あるネームスペースのサイズは、このネームスペースに含まれるLBAの個数に、このネームスペースに含まれるLBA当たりのデータサイズを乗じることによって得られる値によって表される。LBA当たりのデータサイズは、ネームスペース毎に、個別に設定される。
【0046】
図3では、ネームスペースNS1は、ネームスペース識別子NSID1によって識別されるネームスペースである。ネームスペースNS1は、LBA0からLBA(x-1)までの連続する複数のLBAを含む。
【0047】
ネームスペースNS2は、ネームスペース識別子NSID2によって識別されるネームスペースである。ネームスペースNS2は、LBA0からLBA(y-1)までの連続する複数のLBAを含む。
【0048】
ネームスペースNS3は、ネームスペース識別子NSID3によって識別されるネームスペースである。ネームスペースNS3は、LBA0からLBA(z-1)までの連続する複数のLBAを含む。
【0049】
次に、暗号鍵の管理について説明する。図4は、第1実施形態に係るメモリシステム3において使用されるロッキングテーブルの構成例を示す図である。
【0050】
暗号鍵管理回路403は、ロッキングテーブル403-1を使用して、ネームスペース毎(つまりNSID毎)に、一つ又は複数の暗号鍵を管理する。ロッキングテーブル403-1は、ロッキング情報を保持するテーブルである。ロッキング情報は、複数のネームスペースの各々のNSIDと、ネームスペースの各々に設定された一つまたは複数の論理アドレス範囲(LBAレンジ(Range))と、各ネームスペースの一つまたは複数のLBAレンジにそれぞれ関連付けられた一つまたは複数の暗号鍵との間の対応関係を示す情報である。
【0051】
図4では、ネームスペースNS1に四つのLBAレンジ(レンジRx、Ry、Rz、Rw)が設定されており、ネームスペースNS2に一つのLBAレンジ(レンジRs)が設定されており、ネームスペースNS3に一つのLBAレンジ(レンジRt)が設定されている場合が例として示されている。
【0052】
レンジRxは、ネームスペースNS1のうちの、LBA0からLBAh-1までの連続する論理アドレスを有する論理アドレス範囲である。レンジRxに関連付けられた暗号鍵は、例えば、暗号鍵Kxである。この場合、レンジRxに属するどの論理アドレスに対応するデータも、暗号鍵Kxを使用して、暗号化または復号される。
【0053】
レンジRyは、ネームスペースNS1のうちの、LBAhからLBAi-1までの連続する論理アドレスを有するLBAレンジである。レンジRyに関連付けられた暗号鍵は、例えば、暗号鍵Kyである。この場合、レンジRyに属するどの論理アドレスに対応するデータも、暗号鍵Kyを使用して、暗号化または復号される。
【0054】
レンジRzは、ネームスペースNS1のうちの、LBAiからLBAj-1までの連続する論理アドレスを有するLBAレンジである。レンジRzに関連付けられた暗号鍵は、例えば、暗号鍵Kzである。この場合、レンジRzに属するどの論理アドレスに対応するデータも、暗号鍵Kzを使用して、暗号化または復号される。
【0055】
レンジRwは、ネームスペースNS1のうちの、LBAjからLBAx-1までの連続する論理アドレスを有するLBAレンジである。レンジRwに関連付けられた暗号鍵は、例えば、暗号鍵Kwである。この場合、レンジRwに属するどの論理アドレスに対応するデータも、暗号鍵Kwを使用して、暗号化または復号される。
【0056】
レンジRsは、ネームスペースNS2のうちの、LBA0からLBAy-1までの連続する論理アドレスを有するLBAレンジである。つまり、ネームスペースNS2に含まれる論理アドレスは、いずれもレンジRsに含まれる。レンジRsに関連付けられた暗号鍵は、例えば、暗号鍵Ksである。この場合、レンジRsに含まれるどの論理アドレスに対応するデータも、暗号鍵Ksを使用して、暗号化または復号される。このことから、ネームスペースNS2に書き込まれるべきデータは、暗号鍵Ksを使用して、暗号化または復号される。
【0057】
レンジRtは、ネームスペースNS3のうちの、LBA0からLBAz-1までの連続する論理アドレスを有するLBAレンジである。つまり、ネームスペースNS3に含まれる論理アドレスは、いずれもレンジRtに含まれる。レンジRtに関連付けられた暗号鍵は、例えば、暗号鍵Ktである。この場合、レンジRtに属するどの論理アドレスに対応するデータも、暗号鍵Ktを使用して、暗号化または復号される。このことから、ネームスペースNS3に書き込まれるべきデータは、暗号鍵Ktを使用して、暗号化または復号される。
【0058】
次に、TCG Opal規格に準拠したレンジ設定の例について説明する。図5は、第1実施形態に係るメモリシステム3におけるレンジ設定の例を示す図である。
【0059】
TCG Opal規格においては、ネームスペースに、ネームスペースグローバルレンジロッキングオブジェクトと称されるネームスペースロッキングオブジェクトが関連付けられる。ネームスペースグローバルレンジロッキングオブジェクトは、ネームスペースに関連付けられる最初のネームスペースロッキングオブジェクトである。ネームスペースロッキングオブジェクトは、ネームスペースに対するアクセス制御と、ネームスペースに関連付けられた暗号鍵の管理とを行うために使用される。以下では、ネームスペースグローバルレンジロッキングオブジェクトは、単にネームスペースグローバルレンジ、またはグローバルレンジ(Global range)と称する。
【0060】
例えば、ネームスペースNS1の作成直後の初期状態において、ネームスペースNS1の全体は、グローバルレンジ(Global range)が関連付けられた状態である。ネームスペースNS1のグローバルレンジに、レンジRy、レンジRz、およびレンジRwといったLBAレンジそれぞれを管理者が割り当てることによって、例えば、相異なる利用者が、それぞれ異なる暗号鍵でデータを暗号化してネームスペースNS1に格納することが可能となる。ここで、管理者は、各LBAレンジの開始LBAと、各LBAレンジのサイズ(LBAの数)を指定することで、各LBAレンジを指定する。レンジRy、レンジRz、およびレンジRwの各々は、ネームスペース非グローバルレンジロッキングオブジエクトと関連付けられる。ネームスペース非グローバルレンジロッキングオブジエクトは、対応するLBAレンジに対するアクセス制御と、対応するLBAレンジに関連付けられた暗号鍵の管理とを行うために使用される。以下では、単に、ネームスペース非グローバルレンジまたは非グローバルレンジ(Non-global range)と称される。
【0061】
なお、レンジRy、レンジRz、レンジRwといったLBAレンジはグローバルレンジ上にオーバーレイされる。これにより、レンジRy、レンジRz、レンジRwがそれぞれオーバーレイされたグローバルレンジ上の三つの領域は、レンジRy、レンジRz、レンジRwによって隠される。
【0062】
次に、書き込みデータの圧縮、および圧縮データの暗号化について説明する。図6は、データを圧縮するための圧縮単位とデータを暗号化するための暗号化鍵との関係の例を示す図である。
【0063】
ここでは、4KiBの書き込みデータd1と、4KiBの書き込みデータd2とに対して圧縮および暗号化を実行する。4KiBのd1に対応するLBAは、レンジRxに属している。このため、4KiBの書き込みデータd1を暗号化するために使用すべき暗号鍵は、暗号鍵Kxである。一方、4KiBの書き込みデータd2に対応するLBAは、レンジRyに属している。このため、4KiBの書き込みデータd2を暗号化するために使用すべき暗号鍵は、暗号鍵Kyである。
【0064】
まず、図6の(a)を参照して、書き込みデータd1および書き込みデータd2を一緒に圧縮する場合について説明する。4KiBの書き込みデータd1と4KiBの書き込みデータd2とを一度に圧縮するために、圧縮回路における圧縮単位のサイズは、8KiBに設定される。圧縮単位が大きいサイズに設定されるほど、高い効率でデータを圧縮することができる。そのため、圧縮回路は、8KiBの圧縮単位でデータを圧縮することによって、4KiBの圧縮単位で圧縮する場合と比べて高い効率でデータを圧縮することができる。
【0065】
圧縮回路によって生成された圧縮データd’は、書き込みデータd1と、書き込みデータd2とが混ざったデータとなる。そして、暗号化回路は、この圧縮データd’を暗号化する。ここで、圧縮データd’のサイズが暗号化単位に満たない場合、暗号化回路は、圧縮データd’にパディング(Padding)データを加えたデータを暗号化し、これによって暗号化データD’を生成する。
【0066】
しかし、書き込みデータd1の暗号化に使用すべき暗号鍵は暗号鍵Kxであり、書き込みデータd2の暗号化に使用すべき暗号鍵Kyである。つまり、圧縮データd’に含まれる二種類の書き込みデータ(d1,d2)は、それぞれ異なる暗号鍵を使用して暗号化されるべきデータである。例えば、圧縮データd’を、暗号鍵Kxを使用して暗号化する場合、暗号化回路は、暗号鍵Kyで暗号化すべき書き込みデータd2を含むデータを、暗号鍵Kxを使用して暗号化することになる。一方、圧縮データd’を、暗号鍵Kyを使用して暗号化する場合、暗号化回路は、暗号鍵Kxで暗号化すべき書き込みデータd1を含むデータを、暗号鍵Kyを使用して暗号化することになる。
【0067】
このことから、暗号化のために使用すべき暗号鍵が異なる二つの書き込みデータを一緒に圧縮した場合、どちらかの書き込みデータは、使用すべき暗号鍵とは異なる暗号鍵を使用して暗号化されることになってしまう。このような状況は、セキュリティの観点から望ましくない。
【0068】
次に、図6の(b)を参照して、書き込みデータd1および書き込みデータd2を別々に圧縮する場合について説明する。書き込みデータd1および書き込みデータd2を別々に圧縮するために、圧縮回路における圧縮単位は、4KiBに設定される。圧縮回路は、まず、4KiBの書き込みデータd1を圧縮して、圧縮データd1’を生成する。そして、圧縮回路は、4KiBの書き込みデータd2を圧縮して、圧縮データd2’を生成する。このように、圧縮回路は4KiBの圧縮単位でデータを圧縮するため、図6の(a)における圧縮よりも小さい圧縮単位でデータを圧縮する。このため、データの圧縮の効率は、図6の(a)のケースよりも低下する傾向になる。
【0069】
この圧縮によって、書き込みデータd1に対応する圧縮データd1’と、書き込みデータd2に対応する圧縮データd2’とが生成される。
【0070】
そして、暗号化回路は、圧縮データd1’に対する暗号化と、圧縮データd2’に対する暗号化とをそれぞれ実行する。圧縮データd1’のサイズが暗号化単位に満たない場合、暗号化回路は、圧縮データd1’にパディングデータを加えたデータに対して、暗号化を実行する。また、圧縮データd2’のサイズが暗号化単位に満たない場合、暗号化回路は、圧縮データd2’にパディングデータを加えたデータに対して、暗号化を実行する。
【0071】
暗号化回路は、暗号鍵Kxを使用して、圧縮データd1’を含むデータを暗号化し、これによって暗号化データD1’を生成する。また、暗号化回路は、暗号鍵Kyを使用して、圧縮データd2’を含むデータを暗号化し、これによって暗号化データD2’を生成する。
【0072】
このことから、暗号化のために使用すべき暗号鍵が異なる二つの書き込みデータを別々に圧縮した場合、使用すべき暗号鍵と異なる暗号鍵を使用して暗号化されるデータが発生することを防ぐことができる。
【0073】
このように、ユーザデータ(ホスト2からのライトコマンドに関連付けられた書き込みデータ)に対して圧縮と暗号化との双方を行うストレージデバイスでは、「暗号化のために使用すべき暗号鍵が異なるデータは別々の圧縮単位に分離する」という制約が生じる。
【0074】
この制約は、例えば、暗号鍵が4KiBよりも細かい粒度で変更されることが無いケースにおいては、圧縮単位を4KiBに固定することによって満たすことができる。
【0075】
しかしながら、書き込み先のネームスペースの設定などによっては、圧縮単位を4KiBよりも大きいサイズに設定した場合でも、「暗号化のために使用すべき暗号鍵が異なるデータは別々の圧縮単位に分離する」という制約を満たすことができる。
【0076】
本実施形態では、以下の三つの構成の任意の一つを適用可能である。
【0077】
第1の構成:第1の構成は、書き込み先のネームスペースの設定を示すネームスペース設定情報に基づいて、書き込み先のネームスペースに好適な圧縮単位を生成する構成である。
【0078】
第2の構成:第2の構成は、論理アドレス範囲(LBAレンジ)毎に一つの暗号鍵が管理されている場合において、最新のライトコマンドによって指定される論理アドレスが属する第1の論理アドレス範囲(第1のLBAレンジ)が一つ前のライトコマンドによって指定される論理アドレスが属する第2の論理アドレス範囲(第2のLBAレンジ)と一致する場合に、圧縮単位を拡張することができる構成である。
【0079】
第3の構成:第3の構成は、各ネームスペースで使用される暗号鍵が一つである場合において、最新のライトコマンドによって指定される第1のネームスペース識別子が、一つ前のライトコマンドによって指定される第2のネームスペース識別子と一致する場合に、圧縮単位を拡張することができる構成である。
【0080】
これらの構成のいずれが適用されたメモリシステムでは、「暗号鍵が異なるデータは別々の圧縮単位に分離する」という制約を満たしつつ、圧縮単位を大きくすることができる。よって、圧縮単位を4KiBに固定するという構成を使用した場合よりも、高い圧縮効率を得ることができる。
【0081】
以下では、第1の実施形態に係るメモリシステム3において、第1の構成が適用される場合について説明する。
【0082】
まず、データ書き込み処理と、データ読み出し処理について説明する。図7は、第1実施形態に係るメモリシステム3において実行されるデータ書き込み処理およびデータ読み出し処理の例を示す図である。
【0083】
ここで、コントローラ4は、図1を参照して説明した構成に加えて、ネームスペース設定情報管理回路421と、圧縮単位生成回路422とをさらに含む。
【0084】
ネームスペース設定情報管理回路421は、メモリシステム3において管理されている複数のネームスペースの各々に対応するネームスペース設定情報を管理する回路である。あるネームスペースに対応するネームスペース設定情報は、例えば、対応するネームスペースで使用される暗号鍵の数を示す情報、および対応するネームスペースの論理アドレス空間に含まれる一つの論理アドレス当たりのデータサイズを示す情報を含む。一つの論理アドレス当たりのデータサイズは、LBAデータサイズとも称される。ネームスペース設定情報は、対応するネームスペースにおける暗号鍵の数の代わりに、対応するネームスペースに含まれるLBAレンジの数を示す情報を含んでいてもよい。また、ネームスペース設定情報管理回路421は、最小アクセス粒度を管理する。最小アクセス粒度は、TCG Opal SSC規格で規定されたAlignmentGranularityである。暗号化に使用されるべき暗号鍵は、AlignmentGranularity内では切り替わらない。換言すれば、LBAレンジのサイズ(LBAの数)は、AlignmentGranularity以上のサイズに設定される。AlignmentGranularityは、コントローラ4によって管理されている複数のネームスペースに共通の設定値である。つまり、これらネームスペースのAlignmentGranularityは、同じ値に設定される。
【0085】
ネームスペース設定情報管理回路421は、図7に示されているように、データ書き込み処理において使用されるネームスペース設定情報管理回路421aと、データ読み出し処理において使用されるネームスペース設定情報管理回路421bとを含んでいてもよい。書き込み先のネームスペースのネームスペース識別子(NSID)を指定するライトコマンドが受信された場合、ネームスペース設定情報管理回路421aは、この書き込み先のネームスペースの設定を示すネームスペース設定情報(暗号鍵の数、AlignmentGranularity、LBAデータサイズ)を選択し、選択したネームスペース設定情報を出力する。また、リード対象ネームスペースのNSIDを指定するリードコマンドが受信された場合、ネームスペース設定情報管理回路421bは、このリード対象ネームスペースの設定を示すネームスペース設定情報(暗号鍵の数、AlignmentGranularity、LBAデータサイズ)を選択し、選択したネームスペース設定情報を出力する。
【0086】
圧縮単位生成回路422は、圧縮回路406によって使用される圧縮単位を生成する回路である。上述したように、圧縮単位は、データを圧縮するための単位である。具体的には、圧縮単位は、圧縮回路406によって一度に圧縮される書き込みデータのサイズを示す。
【0087】
圧縮単位生成回路422は、複数のネームスペースの各々について、圧縮単位を生成する。圧縮単位生成回路422は、データ書き込み処理において使用される圧縮単位生成回路422aと、データ読み出し処理において使用される圧縮単位生成回路422bと、を含んでいてもよい。
【0088】
書き込み先のネームスペースのNSIDを指定するライトコマンドが受信された場合、圧縮単位生成回路422aは、書き込み先のネームスペースに対応する圧縮単位(第1の圧縮単位とも称される)を生成する。第1の圧縮単位は、ネームスペース設定情報管理回路421aから出力される書き込み先ネームスペースのネームスペース設定情報(第1のネームスペース設定情報とも称される)に基づいて算出される。第1の圧縮単位は、書き込み先のネームスペースに書き込まれるべきデータを暗号化するための暗号鍵が第1の圧縮単位内で切り替わらないという制約を満たすサイズを有する圧縮単位である。そして、圧縮単位生成回路422aは、生成した第1の圧縮単位を圧縮回路406に設定する。
【0089】
このように、第1のネームスペース設定情報に基づいて、暗号鍵が第1の圧縮単位内で切り替わらないという制約を満たすサイズを有する第1の圧縮単位が生成される。これにより、書き込み先のネームスペースの設定に好適な圧縮単位を生成することができる。
【0090】
第1の圧縮単位は、例えば、以下の手順で算出される。
【0091】
圧縮単位生成回路422aは、まず、第1のネームスペース設定情報に基づき、暗号鍵切り替え単位を算出する。暗号鍵切り替え単位は、書き込み先のネームスペースにおいて暗号鍵が切り替えられる単位である。
【0092】
次いで、圧縮単位生成回路422aは、第1のネームスペース設定情報から、書き込み先のネームスペースのLBAデータサイズを取得し、算出した暗号鍵切り替え単位と取得したLBAデータサイズとのうちの小さい方のサイズを、第1の圧縮単位として算出する。
【0093】
具体的には、圧縮単位生成回路422aは、第1のネームスペース設定情報に基づき、次式(1),(2)で書き込み先のネームスペースNSの圧縮単位を算出する。
【0094】
暗号鍵切り替え単位=(NS内で鍵が1個)? ∞ : AlignmentGranularity・・・式(1)
圧縮単位=min{NSの暗号鍵切り替え単位,NSのLBAデータサイズ}・・・式(2)
式(1)に示されるように、NS内で暗号鍵が1個という条件が満たされた場合、無限大(∞)が暗号鍵切り替え単位として算出される。例えば、NSにネームスペースグローバルレンジのみが設定されている場合、NS内で使用される暗号鍵の数は1であるので、NS内で暗号鍵が1個という条件が満たされる。書き込み先のネームスペースNS全体に対するシーケンシャルライトが実行されるケースでは、無限大は、書き込み先のネームスペースNSのサイズに相当する。
【0095】
式(1)に示されるように、NS内で暗号鍵が1個という条件が満たされない場合、AlignmentGranularityが暗号鍵切り替え単位として算出される。例えば、NSに複数のLBAレンジが設定されている場合、NS内で使用される暗号鍵の数は複数個であるので、NS内で暗号鍵が1個という条件は満たされない。
【0096】
このように、NS内で暗号鍵が1個である場合には、原理的には、圧縮単位はいくらでも大きくできる。しかしながら、圧縮単位があまりに大きいと、圧縮データの伸張に要する時間(伸張レイテンシ)が大きくなり、ランダムリードの性能が低下される。このため、式(2)を使用して、圧縮単位の最大値は、LBAデータサイズまでに規定されている。
【0097】
ここで、圧縮単位の計算例について説明する。
【0098】
例えば、コントローラ4によって二つのネームスペース(NS1,NS2)が管理されており、以下のような設定がされていたとする。
【0099】
(1)(ネームスペース共通): AlignmentGranularity=4KiB
(2)NS1: NS1内で使用される暗号鍵は複数個、LBAデータサイズ=4KiB
(3)NS2: NS2内で使用される暗号鍵は1個、LBAデータサイズ=16KiB
この時、圧縮単位を4KiBに固定するケースにおいては、ネームスペースNS1およびネームスペースNS2のいずれにおいても、圧縮単位は4KiBである。
【0100】
本実施形態では、
NS1の圧縮単位=min{NS1の暗号鍵切り替え単位,NS1のLBAデータサイズ}=min{4KiB,4KiB}=4KiBであるので、ネームスペースNS1の圧縮単位は4KiBである。
【0101】
一方、NS2の圧縮単位=min{NS2の暗号鍵切り替え単位,NS2のLBAデータサイズ}=min{∞,16KiB}=16KiBであるので、ネームスペースNS2の圧縮単位は16KiBである。
【0102】
このように、本実施形態では、ネームスペースNS2については、圧縮単位を4KiBに固定するケースに比べ、大きい圧縮単位を設定することができ、これによって、圧縮単位を4KiBに固定するケースよりも高い圧縮効率を得ることができる。
【0103】
次に、例えば、コントローラ4によって二つのネームスペース(NS1,NS2)が管理されており、以下のような設定がされていたとする。
【0104】
(1)(ネームスペース共通): AlignmentGranularity=8KiB
(2)NS1: NS1内で使用される暗号鍵は複数個、LBAデータサイズ=4KiB
(3)NS2: NS2内で使用される暗号鍵は複数個、LBAデータサイズ=16KiB
この時、圧縮単位を4KiBに固定するケースにおいては、ネームスペースNS1およびネームスペースNS2のいずれにおいても、圧縮単位は4KiBである。
【0105】
本実施形態では、
NS1の圧縮単位=min{NS1の暗号鍵切り替え単位,NS1のLBAデータサイズ}=min{8KiB,4KiB}=4KiBであるので、ネームスペースNS1の圧縮単位は、4KiBである。
【0106】
一方、NS2の圧縮単位=min{NS2の暗号鍵切り替え単位,NS2のLBAデータサイズ}=min{8KiB,16KiB}=8KiBであるので、ネームスペースNS2の圧縮単位は、8KiBである。
【0107】
このように、本実施形態では、ネームスペースNS2については、圧縮単位を4KiBに固定するケースに比べ、大きい圧縮単位を設定することができ、これによって、圧縮単位を4KiBに固定するケースよりも高い圧縮効率を得ることができる。
【0108】
なお、圧縮単位生成回路422aは、複数のネームスペースにそれぞれ対応する複数のネームスペース設定情報に基づいて、複数のネームスペースにそれぞれ対応する複数の圧縮単位を予め算出し、算出した複数の圧縮単位を保持してもよい。この場合、ライトコマンドがホスト2から受信された場合、圧縮単位生成回路422aは、受信されたライトコマンドによって指定されるNSIDによって識別される書き込み先ネームスペースに対応する圧縮単位を、保持されている複数の圧縮単位から選択する。そして、圧縮単位生成回路422aは、選択した圧縮単位を圧縮回路406に設定する。
【0109】
リード対象のネームスペースのNSIDを指定するリードコマンドが受信された場合、圧縮単位生成回路422bは、リード対象のネームスペースのネームスペース設定情報に基づき、リード対象のネームスペースに対応する圧縮単位を生成する。そして、圧縮単位生成回路422bは、生成した圧縮単位を伸張回路407に設定する。伸張回路407に設定される圧縮単位は、伸張回路407が、伸張回路407によって生成された非圧縮データのサイズが、この非圧縮データの書き込み時に使用された圧縮単位、つまりこの非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位に一致するか否かを判定するために使用される。
【0110】
次に、データ書き込み処理について説明する。書き込み先のネームスペースを示すネームスペース識別子NSIDと、書き込み先の論理アドレスと、を指定するライトコマンドをホスト2から受信したことに応じて、コントローラ4は、データ書き込み処理を開始する。
【0111】
コントローラ4のCPU402は、ネームスペース識別子NSIDと書き込み先の論理アドレスとを暗号鍵管理回路403に出力し、ネームスペース識別子NSIDをネームスペース設定情報管理回路421aに出力する。さらに、CPU402は、受信されたライトコマンドに関連付けられた書き込みデータをホスト2のメモリ22から取得し、取得した書き込みデータを圧縮回路406に出力する。
【0112】
ネームスペース設定情報管理回路421aは、ライトコマンドによって指定されるNSIDに対応するネームスペース設定情報を特定する。ネームスペース設定情報管理回路421aは、特定したネームスペース設定情報を圧縮単位生成回路422aに出力する。出力されるネームスペース設定情報は、例えば、AlignmentGranularityと、書き込み先のネームスペースにおける暗号鍵の数と、書き込み先のネームスペースにおけるLBAデータサイズとを含む。
【0113】
圧縮単位生成回路422aは、出力されたネームスペース設定情報に基づいて、ライトコマンドによって指定された書き込み先のネームスペースに対応する圧縮単位を生成する。圧縮単位生成回路422aは、ネームスペース設定情報によって示される、AlignmentGranularity、暗号鍵の数、およびLBAデータサイズに基づいて、圧縮単位を生成する。圧縮単位生成回路422aは、生成した圧縮単位を圧縮回路406に設定する。
【0114】
圧縮単位生成回路422aは、上述したように、複数のネームスペースにそれぞれ対応する複数の圧縮単位を予め算出し、算出した複数の圧縮単位を保持しておいてもよい。この場合、圧縮単位生成回路422aは、保持されている複数の圧縮単位から、書き込み先のネームスペースに対応する圧縮単位を選択することによって、書き込み先のネームスペースに対応する圧縮単位を圧縮回路406に設定する。
【0115】
圧縮回路406は、設定された圧縮単位を使用して、受信した書き込みデータを圧縮する。圧縮単位は、圧縮単位内で暗号鍵が切り替わらないという制約を満たしているため、圧縮回路406は、一つの暗号鍵に対応するデータを圧縮して、圧縮データを生成する。圧縮回路406は、生成した圧縮データを暗号化回路408に出力する。
【0116】
暗号化回路408は、暗号鍵を使用して、圧縮回路406から出力された圧縮データを暗号化する。暗号化回路408は、暗号鍵管理回路403から暗号鍵を取得する。暗号鍵管理回路403は、受信したライトコマンドによって指定されたNSIDおよび論理アドレスに基づいて、書き込み先のネームスペースと、書き込み先の論理アドレスが属す論理アドレス範囲(LBAレンジ)と、を特定する。そして、暗号鍵管理回路403は、特定した書き込み先のネームスペースの特定した論理アドレス範囲に対応する暗号鍵を暗号化回路408に出力する。暗号化回路408は、出力された暗号鍵を使用して圧縮データを暗号化することによって、暗号化データを生成する。生成された暗号化データは、ECC処理回路404によって誤り訂正符号化処理が施された後、不揮発性メモリ5に書き込まれる。
【0117】
次に、データ読み出し処理について説明する。コントローラ4は、リード対象のデータが書き込まれているリード対象のネームスペースを示すネームスペース識別子NSIDと、リード対象のデータに対応するリード対象の論理アドレスと、を指定するリードコマンドをホスト2から受信したことに応じて、データ読み出し処理を実行する。
【0118】
コントローラ4は、リード対象のデータを含む暗号化データを不揮発性メモリ5から読み出す。読み出された暗号化データは、ECC処理回路404によって誤りが訂正された後、復号回路409に出力される。復号回路409は、復号鍵(ここでは、暗号鍵管理回路403から受信した暗号鍵)を使用して、暗号化データを復号する。このとき、暗号鍵管理回路403は、リードコマンドによって指定されたNSIDおよび論理アドレスに基づいて、暗号鍵を特定する。暗号鍵管理回路403は、特定した暗号鍵を復号回路409に出力する。復号回路409は、暗号化データを復号することによって、圧縮データを生成する。復号回路409は、生成した圧縮データを伸張回路407に出力する。
【0119】
ネームスペース設定情報管理回路421bは、受信したリードコマンドによって指定されたNSIDに基づいて、リード対象のネームスペースのネームスペース設定情報を特定する。ネームスペース設定情報管理回路421bは、特定したネームスペース設定情報を圧縮単位生成回路422bに出力する。
【0120】
圧縮単位生成回路422bは、ネームスペース設定情報管理回路421bから出力されたネームスペース設定情報に基づいて、リード対象のネームスペースに対応する圧縮単位を生成する。生成される圧縮単位は、このネームスペースへのデータの書き込み時に使用された圧縮単位と同じである。圧縮単位生成回路422bは、生成した圧縮単位を伸張回路407に出力する。
【0121】
伸張回路407は、復号回路409によって復号されたデータ(圧縮データ)を伸張し、非圧縮データを生成する。そして、非圧縮データからリード対象データが抽出されることにより、ホスト2に転送されるべき読み出しデータが生成される。非圧縮データを生成した後、伸張回路407は、生成された非圧縮データのサイズが、この非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位(つまり、圧縮単位生成回路422bから出力される圧縮単位)と一致するか否かを判定する。
【0122】
非圧縮データのサイズが、この非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位と一致しない場合、伸張回路407は、エラーが発生したことをCPU402に通知する。CPU402の制御の下、コントローラ4は、データ読み出し処理を再び実行するといった処理(エラー処理)を実行する。
【0123】
非圧縮データのサイズが、この非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位と一致する場合、コントローラ4は、非圧縮データから抽出されたリード対象データを、読み出しデータとして、ホスト2に送信する。
【0124】
次に、ネームスペース設定情報について説明する。図8は、第1実施形態に係るメモリシステムにおいて管理されるネームスペース設定情報の例を示す図である。
【0125】
コントローラ4によって管理されている複数のネームスペースにそれぞれに対応する複数のネームスペース設定情報は、ネームスペース設定情報管理回路421の管理テーブル461において管理される。ここでは、メモリシステム3において、ネームスペースNS1、ネームスペースNS2、およびネームスペースNS3が管理されている場合を想定する。
【0126】
例えば、管理テーブル461は、最小アクセス粒度と、ネームスペースNS1の暗号鍵の数と、ネームスペースNS2の暗号鍵の数と、ネームスペースNS3の暗号鍵の数と、ネームスペースNS1のLBAデータサイズと、ネームスペースNS2のLBAデータサイズと、ネームスペースNS3のLBAデータサイズとを保持する。
【0127】
最小アクセス粒度は、AlignmentGranularityを示す値である。AlignmentGranularityは、コントローラ4によって管理されている全てのネームスペースで共通の値である。
【0128】
ネームスペースNS1に四つのLBAレンジが含まれている場合、ネームスペースNS1の暗号鍵の数は、4である。
【0129】
ネームスペースNS2に一つのグローバルレンジのみが含まれている場合、ネームスペースNS2の暗号鍵の数は、1である。
【0130】
ネームスペースNS3に一つのグローバルレンジのみが含まれている場合、ネームスペースNS3の暗号鍵の数は、1である。
【0131】
ネームスペースNS1のLBAデータサイズは、例えば、4KiBである。
【0132】
ネームスペースNS2のLBAデータサイズは、例えば、16KiBである。
【0133】
ネームスペースNS3のLBAデータサイズは、例えば、4KiBである。
【0134】
ネームスペース設定情報管理回路421は、ネームスペースNS1に対応するネームスペース設定情報として、最小アクセス粒度と、ネームスペースNS1の暗号鍵の数と、ネームスペースNS1のLBAデータサイズと、を出力する。
【0135】
ネームスペース設定情報管理回路421は、ネームスペースNS2に対応するネームスペース設定情報として、最小アクセス粒度と、ネームスペースNS2の暗号鍵の数と、ネームスペースNS2のLBAデータサイズと、を出力する。
【0136】
ネームスペース設定情報管理回路421は、ネームスペースNS3に対応するネームスペース設定情報として、最小アクセス粒度と、ネームスペースNS3の暗号鍵の数と、ネームスペースNS3のLBAデータサイズと、を出力する。
【0137】
次に、データ書き込み処理について説明する。図9は、第1実施形態に係るメモリシステムおいて実行されるデータ書き込み処理の手順を示すフローチャートである。
【0138】
ホスト2からライトコマンドを受信した場合、コントローラ4は、ホスト2から書き込みデータを受信する(ステップS11)。書き込みデータは、ホスト2から受信されたライトコマンドに関連付けられたデータである。コントローラ4は、受信したライトコマンドが指定するメモリ22内の位置を示すデータポインタに基づいて、書き込みデータを受信する。
【0139】
コントローラ4は、受信したライトコマンドによって指定されるNSIDによって識別される書き込み先のネームスペースに対応する圧縮単位が生成済みであるか否かを判定する(ステップS12)。複数のネームスペースにそれぞれ対応する複数の圧縮単位が予め算出されているケースにおいては、書き込み先のネームスペースに対応する圧縮単位は生成済みである。
【0140】
書き込み先のネームスペースに対応する圧縮単位が未だ生成されていない場合(S12でNo)、コントローラ4は、書き込み先のネームスペースに対応する圧縮単位を生成するための圧縮単位生成処理を実行する。(ステップS13)。
【0141】
書き込み先のネームスペースに対応する圧縮単位が生成済みである場合(S12でYes)、コントローラ4は、S13の処理をスキップする。そして、コントローラ4は、圧縮単位生成回路422が保持している、書き込み先のネームスペースに対応する圧縮単位を取得する。
【0142】
コントローラ4は、書き込み先のネームスペースに対応する圧縮単位を圧縮回路406に設定する(ステップS14)。
【0143】
コントローラ4の圧縮回路406は、S14で設定された圧縮単位を使用して、書き込みデータを圧縮単位毎に圧縮する(ステップS15)。コントローラ4の圧縮回路406は、書き込みデータを圧縮することによって、圧縮データを生成する。
【0144】
コントローラ4の暗号鍵管理回路403は、書き込みデータに対応する暗号鍵を特定し、その特定した暗号鍵を暗号化回路408に出力する。そして、コントローラ4の暗号化回路408は、S15で生成された圧縮データを、暗号鍵管理回路403から出力された暗号鍵を使用して暗号化する(ステップS16)。
【0145】
コントローラ4は、S16で圧縮データを暗号化することによって生成された暗号化データを不揮発性メモリ5に書き込む(ステップS17)。このとき、コントローラ4は、S17で暗号化データが書き込まれた不揮発性メモリ5における記憶位置を管理する(ステップS18)。
【0146】
このように、データ書き込み処理によって、コントローラ4は、書き込みデータを圧縮および暗号化した後に不揮発性メモリ5に書き込む。これにより、コントローラ4は、不揮発性メモリ5の記憶スペースの有効利用とユーザデータの保護とを実現できる。
【0147】
次に、圧縮単位生成処理について説明する。図10は、第1実施形態に係るメモリシステム3において実行される圧縮単位生成処理の手順を示すフローチャートである。
【0148】
コントローラ4は、暗号鍵切り替え単位算出処理を実行する(ステップS131)。暗号鍵切り替え単位算出処理は、書き込み先のネームスペースのネームスペース設定情報(AlignmentGranularity、および暗号鍵の数)に基づいて、書き込み先のネームスペースの暗号鍵切り替え単位を算出する処理である。暗号鍵切り替え単位は、書き込み先のネームスペースにおいて暗号鍵が切り替えられる単位である。
【0149】
コントローラ4は、書き込み先のネームスペースのネームスペース設定情報から、書き込み先のネームスペースのLBAデータサイズを取得する(ステップS132)。
【0150】
コントローラ4は、算出した暗号鍵切り替え単位と取得したLBAデータサイズとのうちの小さい方のサイズを圧縮単位として生成する(ステップS133)。
【0151】
そして、コントローラ4は、必要に応じて、生成した圧縮単位を保存する(ステップS134)。
【0152】
このように、圧縮単位は、書き込み先のネームスペースの設定を示すネームスペース設定情報に基づいて、圧縮単位内で暗号鍵が切り替わらないという制約を満たすように生成される。
【0153】
次に、暗号鍵切り替え単位算出処理を説明する。図11は、第1実施形態に係るメモリシステムにおいて実行される暗号鍵切り替え単位算出処理の手順を示すフローチャートである。
【0154】
コントローラ4は、書き込み先のネームスペースのネームスペース設定情報から、AlignmentGranularityを取得する(ステップS1311)。次いで、コントローラ4は、書き込み先のネームスペースのネームスペース設定情報から、書き込み先のネームスペースの暗号鍵の数を取得する(ステップS1312)。
【0155】
コントローラ4は、書き込み先のネームスペースの暗号鍵の数が1であるか否かを判定する(ステップS1313)。つまり、コントローラ4は、書き込み先のネームスペースにネームスペースグローバルレンジのみが設定されているか否かを判定する。
【0156】
書き込み先のネームスペースの暗号鍵の数が1である場合(S1313でYes)、コントローラ4は、無限大(例えば、書き込み先のネームスペースのサイズ)を、書き込み先ネームスペースの暗号鍵切り替え単位として算出する(ステップS1314)。
【0157】
書き込み先のネームスペースの暗号鍵の数が1でない場合(S1313でNo)、コントローラ4は、S21で取得したAlignmentGranularityを、書き込み先ネームスペースの暗号鍵切り替え単位として算出する(ステップS1315)。
【0158】
次に、データ読み出し処理について説明する。図12は、第1実施形態に係るメモリシステム3において実行されるデータ読み出し処理の手順を示すフローチャートである。
【0159】
コントローラ4は、リード対象のデータが書き込まれているリード対象のネームスペースを示すネームスペース識別子NSIDと、リード対象のデータに対応するリード対象の論理アドレスと、を指定するリードコマンドをホスト2から受信する(ステップS31)。
【0160】
コントローラ4は、リード対象のデータを含む暗号化データを不揮発性メモリ5から読み出す(ステップS32)。
【0161】
コントローラ4は、S32で読み出された暗号化データに対応する暗号鍵を取得し、暗号鍵をコントローラ4の復号回路409に設定する(ステップS33)
コントローラ4の復号回路409は、設定された暗号鍵を使用して、S32で読み出された暗号化データを復号する(ステップS34)。
【0162】
コントローラ4の伸張回路407は、S34で生成された圧縮データを伸張することによって、非圧縮データを生成する(ステップS35)。
【0163】
コントローラ4の伸張回路407は、S35で伸張されたデータのサイズ、つまり非圧縮データのサイズが、この非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位と一致しているか否かを判定する(ステップS36)。
【0164】
非圧縮データのサイズが、この非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位と一致する場合(S36でYes)、コントローラ4は、この非圧縮データからリード対象データを抽出し、抽出したリード対象データをホスト2に送信する(ステップS37)。
【0165】
非圧縮データのサイズが、この非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位と一致しない場合(S36でNo)、コントローラ4は、データ読み出し処理を再び実行するといった処理(エラー処理)を実行する(ステップS38)。
【0166】
このように、コントローラ4は、データ読み出し処理よって、圧縮され暗号化されたデータを不揮発性メモリ5から読み出し、復号および伸張してから、ホスト2に送信する。
【0167】
以上説明したように、第1実施形態によれば、コントローラ4は、書き込み先のネームスペースの設定を示すネームスペース設定情報に基づいて算出される、書き込み先のネームスペースに対応する圧縮単位を生成する。この圧縮単位は、書き込み先のネームスペースに書き込まれるべきデータを暗号化するための暗号鍵がこの圧縮単位内で切り替わらないという制約を満たすサイズを有する。
【0168】
したがって、ネームスペース毎に、そのネームスペースの設定に好適な圧縮単位を生成できる。よって、ネームスペースの設定によっては、例えば4KiBよりも大きなサイズを圧縮単位として使用しつつ、暗号鍵がこの圧縮単位内で切り替わらないという制約を満たすことが可能となる。この結果、セキュリティ性を低下させることなく、メモリシステム3の実効容量を拡大できる。拡大された実効容量とメモリシステム3の表記容量との差分は、例えば、オーバープロビジョニング容量として使用できる。この場合、メモリシステム3の性能向上、ライトアンプリフィケーションファクタ(WAF)の低減によるメモリシステム3の寿命延長、不揮発性メモリ5への書き込み量の低減による消費電力の削減、などの効果を得ることができる。
【0169】
(第2実施形態)
第2実施形態について説明する。第2実施形態に係るメモリシステム3においては、上述した第2の構成が適用されている。つまり、第2実施形態に係るメモリシステム3においては、LBAレンジ毎に一つの暗号鍵が管理される。そして、ホスト2から受信された最新のライトコマンドによって指定される論理アドレスが属するLBAレンジ(第1のLBAレンジとも称する)が一つ前のライトコマンドによって指定される論理アドレスが属するLBAレンジ(第2のLBAレンジとも称する)と一致するか否に基づいて、圧縮単位を拡張するか否かが決定される。
【0170】
換言すれば、データが書き込まれるべきLBAレンジが切り替わるタイミングでデータの圧縮単位が区切られ、これによって、同じLBAレンジに書き込まれるべきデータは一緒に圧縮され、異なるLBAレンジに書き込まれるべきデータは別々に圧縮される。
【0171】
第2実施形態に係るメモリシステム3に含まれる構成要素のうちの幾つかは、第1実施形態に係るメモリシステム3の構成要素と同じである。そのため、以下では、第1実施形態に係るメモリシステム3と異なる点について注目して第2実施形態に係るメモリシステム3を説明する。
【0172】
図13は、第2実施形態に係るメモリシステムにおけるデータ書き込み処理およびデータ読み出し処理の例を示す図である。
【0173】
ここで、第2実施形態に係るメモリシステム3のコントローラ4は、LBAレンジチェッカ431をさらに含む。
【0174】
LBAレンジチェッカ431は、ホスト2から受信されたライトコマンドによって指定される論理アドレスが属するLBAレンジを特定する、論理アドレス範囲チェック回路である。LBAレンジチェッカ431は、ホスト2から受信されたライトコマンドによって指定されたNSIDおよび論理アドレス(書き込み先のLBA)に基づいて、書き込み先のLBAレンジを特定する。書き込み先のLBAレンジは、受信されたライトコマンドによって指定される論理アドレスが属するLBAレンジである。LBAレンジチェッカ431は、特定したLBAレンジを示す情報を、圧縮単位生成回路432、および暗号鍵管理回路403に出力する。
【0175】
暗号鍵管理回路403は、複数のLBAレンジに1対1の関係でそれぞれ対応付けられた複数の暗号鍵を管理する回路である。暗号鍵管理回路403は、LBAレンジチェッカ431から出力されるLBAレンジに対応する暗号鍵を暗号化回路408または復号回路409に出力する。
【0176】
また、第2実施形態に係るメモリシステム3のコントローラ4は、第1実施形態の圧縮単位生成回路422の代わりに、圧縮単位生成回路432を含む。圧縮単位生成回路432は、LBAレンジチェッカ431から出力されるLBAレンジそれぞれを参照し、LBAレンジチェッカ431によって出力された最新のLBAレンジが、LBAレンジチェッカ431から出力された一つ前のLBAレンジと一致するか否かを判定する。すなわち、圧縮単位生成回路432は、ホスト2から受信された最新のライトコマンドによって指定される論理アドレスが属するLBAレンジが、ホスト2から受信された一つ前のライトコマンドによって指定される論理アドレスが属するLBAレンジと一致するか否かを判定する。
【0177】
ホスト2から受信された最新のライトコマンドによって指定される論理アドレスが属するLBAレンジが、ホスト2から受信された一つ前のライトコマンドによって指定される論理アドレスが属するLBAレンジと一致する場合、圧縮単位生成回路432は、ホスト2から受信された最新のライトコマンドに関連付けられた書き込みデータが、ホスト2から受信された一つ前のライトコマンドに関連付けられた書き込みデータを少なくとも含むデータと一緒に圧縮されるように、圧縮単位の現在のサイズを拡張する。つまり、最新のライトコマンドに関連付けられた書き込みデータと、ホスト2から受信された一つ前のライトコマンドに関連付けられた書き込みデータを少なくとも含むデータと、が同じ圧縮単位に含まれるように、圧縮単位の現在のサイズが拡張される。この場合、圧縮単位の現在のサイズは、最新のライトコマンドに関連付けられた書き込みデータのサイズだけ増加される。
【0178】
一方、ホスト2から受信された最新のライトコマンドによって指定される論理アドレスが属するLBAレンジが、ホスト2から受信された一つ前のライトコマンドによって指定される論理アドレスが属するLBAレンジと一致しない場合、圧縮単位生成回路432は、ホスト2から受信された最新のライトコマンドに関連付けられた書き込みデータと、ホスト2から受信された一つ前のライトコマンドに関連付けられた書き込みデータを少なくとも含むデータと、が別々に圧縮されるように、圧縮単位の現在のサイズを圧縮単位として生成(確定)し、生成した圧縮単位を圧縮回路406に設定する。つまり、最新のライトコマンドに関連付けられた書き込みデータと、ホスト2から受信された一つ前のライトコマンドに関連付けられた書き込みデータを少なくとも含むデータと、が異なる圧縮単位に含まれるように、圧縮単位の現在のサイズが圧縮単位として生成される。
【0179】
このように、データが書き込まれるべきLBAレンジが切り替わるタイミングでデータの圧縮単位を区切る(確定する)制御が実行されることにより、同じLBAレンジに書き込まれるべきデータを一緒に圧縮し、異なるLBAレンジに書き込まれるべきデータを別々に圧縮することができる。
【0180】
なお、最新のライトコマンド(CMDn)が受信された後は、圧縮単位生成回路432は、次のライトコマンド(CMD(n+1))の受信を待つ。次のライトコマンド(CMD(n+1))が受信されると、圧縮単位生成回路432は、受信された次のライトコマンド(CMD(n+1))によって指定された論理アドレスが属するLBA範囲が、その一つ前のライトコマンド(CMDn)によって指定された論理アドレスが属するLBA範囲と一致するか否かを判定する。
【0181】
このように、次のライトコマンド(CMD(n+1))が受信されるまでは、最新のライトコマンド(CMDn)に関連付けられた書き込みデータを少なくとも含むデータの圧縮は、実行されない。また、同じLBAレンジに属する論理アドレスをそれぞれ指定する多数のライトコマンドが受信されると、圧縮単位が多くなりすぎる場合がある。
【0182】
したがって、最新のライトコマンド(CMDn)がホスト2から受信されてから経過した時間が所定時間に達するまでの間に次のライトコマンド(CMD(n+1))が受信されない場合、あるいは拡張された圧縮単位が上限値に達した場合、圧縮単位生成回路432は、最新のライトコマンド(CMDn)に関連付けられた書き込みデータを少なくとも含むデータと、次のライトコマンド(CMD(n+1))に関連付けられた書き込みデータと、が別々に圧縮されるように、圧縮単位の現在のサイズを圧縮単位として生成(確定)し、生成した圧縮単位を圧縮回路406に設定する。
【0183】
圧縮単位保持回路433は、圧縮単位生成回路433によって生成された圧縮単位の各々を保持する回路である。圧縮単位保持回路433によって保持される各圧縮単位は、第1実施形態と同様に、伸張回路407が、伸張回路407によって生成された非圧縮データのサイズが、この非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位と一致するか否かを判定するために使用される。
【0184】
まず、データ書き込み処理について説明する。以下では、書き込み先のネームスペースを示すネームスペース識別子NSIDと、書き込み先の論理アドレスと、を指定するライトコマンドを、例として説明するが、ライトコマンドは、NSIDを含んでいなくてもよい。第2実施形態では、LBAレンジ毎に一つの暗号鍵が管理されている構成であればよく、必ずしもネームスペースが使用される必要は無いからである。
【0185】
書き込み先のネームスペースを示すネームスペース識別子NSIDと、書き込み先の論理アドレスと、を指定するライトコマンドをホスト2から受信したことに応じて、コントローラ4は、ライトコマンドに関連付けられた書き込みデータをホスト2のメモリ22から取得し、データ書き込み処理を開始する。
【0186】
LBAレンジチェッカ431は、受信されたライトコマンドによって指定される論理アドレスが属するLBAレンジを特定する。LBAレンジチェッカ431は、特定したLBAレンジを示す情報を圧縮単位生成回路432に出力する。また、LBAレンジチェッカ431は、特定したLBAレンジを示す情報と、受信されたライトコマンドによって指定されるNSIDと、を暗号鍵管理回路403に出力する。
【0187】
圧縮単位生成回路432は、LBAレンジチェッカ431によって出力されたLBAレンジを示す情報に基づいて、受信された書き込みデータを圧縮する際に使用される圧縮単位を生成する。圧縮単位生成回路432は、LBAレンジチェッカ431によって出力された最新のLBAレンジがLBAレンジチェッカ431によって出力された一つ前のLBAレンジと同じ場合、最新のライトコマンドに関連付けられた書き込みデータと、一つ前のライトコマンドに関連付けられた書き込みデータを少なくとも含むデータと、が同じ圧縮単位に含まれるように、圧縮単位の現在のサイズを拡張する。拡張された圧縮単位が上限に達した場合、圧縮単位生成回路432は、圧縮単位の現在のサイズを書き込みデータの圧縮に使用される圧縮単位として生成する。また、最新のライトコマンドが受信されてから、次のライトコマンドが受信されることなく、所定の時間が経過すると、圧縮単位生成回路432は、圧縮単位の現在のサイズを書き込みデータの圧縮に使用される圧縮単位として生成する。
【0188】
最新のLBAレンジが、一つ前のLBAレンジと異なる場合、圧縮単位生成回路432は、最新のライトコマンドに関連付けられた書き込みデータと、一つ前のライトコマンドに関連付けられた書き込みデータを少なくとも含むデータと、が異なる圧縮単位に含まれるように、圧縮単位の現在のサイズを書き込みデータの圧縮に使用される圧縮単位として生成する。
【0189】
圧縮単位生成回路432は、生成した圧縮単位を圧縮回路406に設定する。また、圧縮単位保持回路433は、圧縮単位生成回路432によって生成された圧縮単位を保持する。
【0190】
そして、圧縮回路406は、設定された圧縮単位を使用して書き込みデータを圧縮することによって、圧縮データを生成する。
【0191】
また、暗号鍵管理回路403は、LBAレンジチェッカ431から出力されたLBAレンジに基づいて、書き込みデータに対応する暗号鍵を特定し、特定した暗号鍵を暗号化回路408に出力する。
【0192】
暗号化回路408は、圧縮回路406によって生成された圧縮データを、暗号鍵管理回路403によって出力された暗号鍵を使用して暗号化することによって、暗号化データを生成する。生成された暗号化データは、ECC処理回路404によって誤り訂正符号化処理が施された後、不揮発性メモリ5に書き込まれる。
【0193】
次に、データ読み出し処理について説明する。コントローラ4は、リード対象のデータが書き込まれているリード対象のネームスペースを示すネームスペース識別子NSIDと、リード対象のデータに対応するリード対象の論理アドレスと、を指定するリードコマンドをホスト2から受信したことに応じて、データ読み出し処理を実行する。
【0194】
コントローラ4は、リード対象のデータを含む暗号化データを不揮発性メモリ5から読み出す。不揮発性メモリ5から読み出された暗号化データは、ECC処理回路404によって誤りが訂正された後、復号回路409に出力される。復号回路409は、復号鍵(ここでは、暗号鍵管理回路403から受信される暗号鍵)を使用して、暗号化データを復号する。このとき、LBAレンジチェッカ431は、リードコマンドによって指定されたNSIDおよび論理アドレスに基づいて、LBAレンジを特定する。そして、LBAレンジチェッカ431は、特定したLBAレンジを示す情報を暗号鍵管理回路403に出力する。暗号鍵管理回路403は、出力されたLBAレンジに基づいて、復号鍵を特定する。暗号鍵管理回路403は、特定した復号鍵を復号回路409に出力する。復号回路409は、暗号化データを復号することによって、圧縮データを生成する。復号回路409は、生成した圧縮データを伸張回路407に出力する。
【0195】
伸張回路407は、復号回路409によって復号されたデータ(圧縮データ)を伸張し、非圧縮データを生成する。そして、非圧縮データからリード対象データが抽出されることにより、ホスト2に転送されるべき読み出しデータが生成される。非圧縮データを生成した後、伸張回路407は、生成された非圧縮データのサイズをチェックする。この場合、伸張回路407は、生成された非圧縮データのサイズが、この非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位と一致するか否かを判定する。例えば、この非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位は、圧縮単位保持回路433から伸張回路407に通知されてもよい。例えば、圧縮単位保持回路433においては、圧縮単位毎に、その圧縮単位に含まれるデータを特定するための情報が保持されていてもよい。これにより、例えば、リードコマンドによって指定されたNSIDと論理アドレスとに基づいて、伸張回路407によって生成された非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位を特定することができる。
【0196】
非圧縮データのサイズが、この非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位と一致しない場合、伸張回路407は、エラーが発生したことをCPU402に通知する。CPU402の制御の下、コントローラ4は、データ読み出し処理を再び実行するといった処理(エラー処理)を実行する。
【0197】
非圧縮データのサイズが、この非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位と一致する場合、コントローラ4は、非圧縮データから抽出されたリード対象データを、読み出しデータとして、ホスト2に送信する。
【0198】
次に、複数の書き込みデータに対するデータ圧縮の第1の例について説明する。図14は、第2実施形態に係るメモリシステムにおいて実行される、複数の書き込みデータに対する圧縮処理の第1の例を示す図である。ここでは、圧縮単位の上限が8KiBより大きい場合を想定する。また、ライトコマンドCMD1、ライトコマンドCMD2、ライトコマンドCMD3、ライトコマンドCMD4、およびライトコマンドCMD5がこの順序でホスト2から受信された場合を想定する。
【0199】
ライトコマンドCMD1は、例えば、LBAレンジRxに含まれる論理アドレスを書き込み先LBAとして指定する。ライトコマンドCMD1に関連付けられた書き込みデータd1は、例えば、4KiBのサイズを有する。そして、書き込みデータd1に対する暗号化で使用されるべき暗号鍵は、LBAレンジRxに関連付けられている暗号鍵Kxである。
【0200】
ライトコマンドCMD2は、例えば、LBAレンジRyに含まれる論理アドレスを書き込み先LBAとして指定する。ライトコマンドCMD2に関連付けられた書き込みデータd2は、例えば、4KiBのサイズを有する。そして、書き込みデータd2に対する暗号化で使用されるべき暗号鍵は、LBAレンジRyに関連付けられている暗号鍵Kyである。
【0201】
ライトコマンドCMD3は、例えば、LBAレンジRzに含まれる論理アドレスを書き込み先LBAとして指定する。ライトコマンドCMD3に関連付けられた書き込みデータd3は、例えば、4KiBのサイズを有する。そして、書き込みデータd3に対する暗号化で使用されるべき暗号鍵は、LBAレンジRzに関連付けられている暗号鍵Kzである。
【0202】
ライトコマンドCMD4は、例えば、LBAレンジRzに含まれる論理アドレスを書き込み先LBAとして指定する。ライトコマンドCMD4に関連付けられた書き込みデータd4は、例えば、4KiBのサイズを有する。そして、書き込みデータd4に対する暗号化で使用されるべき暗号鍵は、LBAレンジRzに関連付けられている暗号鍵Kzである。
【0203】
ライトコマンドCMD5は、例えば、LBAレンジRwに含まれる論理アドレスを書き込み先LBAとして指定する。ライトコマンドCMD5に関連付けられた書き込みデータd5は、例えば、4KiBのサイズを有する。そして、書き込みデータd5に対する暗号化で使用されるべき暗号鍵は、LBAレンジRwに関連付けられた暗号鍵Kwである。
【0204】
まず、コントローラ4は、一つ目のライトコマンドCMD1をホスト2から受信する。
【0205】
次いで、コントローラ4は、二つ目のライトコマンドCMD2をホスト2から受信する。ライトコマンドCMD2に関連付けられた書き込みデータd2の書き込み先LBAは、LBAレンジRyに属し、一つ前のライトコマンドCMD1に関連付けられた書き込みデータd1の書き込み先LBAは、LBAレンジRxに属する。そのため、書き込みデータd1と書き込みデータd2とが異なる圧縮単位にそれぞれ含まれるように、書き込みデータd1と書き込みデータd2との間の境界でデータの圧縮単位が区切られる。この結果、書き込みデータd1に対する圧縮では、書き込みデータd1のサイズである4KiBを示す圧縮単位が使用される。
【0206】
コントローラ4は、三つ目のライトコマンドCMD3をホスト2から受信する。ライトコマンドCMD3に関連付けられた書き込みデータd3の書き込み先LBAは、LBAレンジRzに属し、ライトコマンドCMD2に関連付けられた書き込みデータd2の書き込み先LBAは、LBAレンジRyに属する。そのため、書き込みデータd2と書き込みデータd3とが異なる圧縮単位にそれぞれ含まれるように、書き込みデータd2と書き込みデータd3との間の境界でデータの圧縮単位が区切られる。この結果、書き込みデータd2に対する圧縮では、書き込みデータd2のサイズである4KiBを示す圧縮単位が使用される。
【0207】
次いで、コントローラ4は、四つ目のライトコマンドCMD4をホスト2から受信する。ライトコマンドCMD4に関連付けられたデータd4の書き込み先LBAは、ライトコマンドCMD3に関連付けられた書き込みデータd3の書き込み先LBAが属するLBAレンジと同じLBAレンジRzに属する。そのため、書き込みデータd3と書き込みデータd4とが同じ圧縮単位に含まれるように、圧縮単位が拡張される。この場合、圧縮単位の現在のサイズは、書き込みデータd3のサイズである4KiBから、書き込みデータd3のサイズと書き込みデータd4のサイズとの和である8KiBに拡張される。
【0208】
コントローラ4は、五つ目のライトコマンドCMD5をホスト2から受信する。ライトコマンドCMD5に関連付けられた書き込みデータd5の書き込み先LBAは、LBAレンジRwに属し、ライトコマンドCMD4に関連付けられた書き込みデータd4の書き込み先LBAは、LBAレンジRzに属する。そのため、書き込みデータd4と書き込みデータd5とが異なる圧縮単位にそれぞれ含まれるように、書き込みデータd4と書き込みデータd5との間の境界でデータの圧縮単位が区切られる。この結果、書き込みデータd3および書き込みデータd4を含むデータに対する圧縮では、拡張された8KiBの圧縮単位が使用される。そして、書き込みデータd3および書き込みデータd4は、一緒に圧縮される。
【0209】
その後、ライトコマンドCMD5に後続するライトコマンドが受信されることなく、所定の時間が経過すると、コントローラ4は、書き込みデータd5に対する圧縮を、4KiBを示す圧縮単位を使用して実行する。
【0210】
次に、複数の書き込みデータに対するデータ圧縮の第2の例について説明する。図15は、第2実施形態に係るメモリシステムにおいて実行される、複数の書き込みデータに対する圧縮の第2の例を示す図である。ここでは、圧縮単位の上限が16KiB以上であり、同じLBAレンジに含まれる論理アドレスを指定する複数のライトコマンドが連続で受信される場合を想定する。
【0211】
ライトコマンドCMD11は、LBAレンジRzに含まれる論理アドレスを書き込み先LBAとして指定する。ライトコマンドCMD11に関連付けられた書き込みデータd11は、4KiBのサイズを有する。そして、書き込みデータd11に対する暗号化で使用されるべき暗号鍵は、暗号鍵Kzである。
【0212】
ライトコマンドCMD12は、LBAレンジRzに含まれる論理アドレスを書き込み先LBAとして指定する。ライトコマンドCMD12に関連付けられた書き込みデータd12は、4KiBのサイズを有する。そして、書き込みデータd12に対する暗号化で使用されるべき暗号鍵は、暗号鍵Kzである。
【0213】
ライトコマンドCMD13は、LBAレンジRzに含まれる論理アドレスを書き込み先LBAとして指定する。ライトコマンドCMD13に関連付けられた書き込みデータd13は、4KiBのサイズを有する。そして、書き込みデータd13に対する暗号化で使用されるべき暗号鍵は、暗号鍵Kzである。
【0214】
ライトコマンドCMD14は、LBAレンジRzに含まれる論理アドレスを書き込み先LBAとして指定する。ライトコマンドCMD14に関連付けられた書き込みデータd14は、4KiBのサイズを有する。そして、書き込みデータd14に対する暗号化で使用されるべき暗号鍵は、暗号鍵Kzである。
【0215】
ライトコマンドCMD15は、LBAレンジRwに含まれる論理アドレスを書き込み先LBAとして指定する。ライトコマンドCMD15に関連付けられた書き込みデータd15は、4KiBのサイズを有する。そして、書き込みデータd15に対する暗号化で使用されるべき暗号鍵は、暗号鍵Kwである。
【0216】
まず、コントローラ4は、一つ目のライトコマンドCMD11をホスト2から受信する。
【0217】
次いで、コントローラ4は、二つ目のライトコマンドCMD12をホスト2から受信する。ライトコマンドCMD12に関連付けられた書き込みデータd12の書き込み先LBAは、ライトコマンドCMD11に関連付けられた書き込みデータd11の書き込み先LBAが属するLBAレンジと同じLBAレンジRzに属する。そのため、書き込みデータd11と書き込みデータd12とが同じ圧縮単位に含まれるように、圧縮単位の現在のサイズが、書き込みデータd11のサイズである4KiBから、書き込みデータd11のサイズと書き込みデータd12のサイズとの和である8KiBに拡張される。
【0218】
コントローラ4は、三つ目のライトコマンドCMD13をホスト2から受信する。ライトコマンドCMD13に関連付けられた書き込みデータd13の書き込み先LBAは、ライトコマンドCMD12に関連付けられた書き込みデータd12の書き込み先LBAが属するLBAレンジと同じLBAレンジRzに属する。そのため、書き込みデータd11と書き込みデータd12と書き込みデータd13とが同じ圧縮単位に含まれるように、圧縮単位の現在のサイズが、8KiBから、書き込みデータd11のサイズと書き込みデータd12のサイズと書き込みデータd13のサイズとの和である12KiBに拡張される。
【0219】
次いで、コントローラ4は、四つ目のライトコマンドCMD14をホスト2から受信する。ライトコマンドCMD14に関連付けられたデータd14の書き込み先LBAは、ライトコマンドCMD13に関連付けられた書き込みデータd13の書き込み先LBAが属するLBAレンジと同じLBAレンジRzに属する。そのため、書き込みデータd11と書き込みデータd12と書き込みデータd13と書き込みデータd14とが同じ圧縮単位に含まれるように、圧縮単位が、12KiBから、書き込みデータd11のサイズと書き込みデータd12のサイズと書き込みデータd13のサイズと書き込みデータd14のサイズとの和である16KiBに拡張される。
【0220】
コントローラ4は、五つ目のライトコマンドCMD15をホスト2から受信する。ライトコマンドCMD15に関連付けられた書き込みデータd15の書き込み先LBAは、LBAレンジRwに属し、ライトコマンドCMD14に関連付けられた書き込みデータd14の書き込み先LBAは、LBAレンジRzに属する。そのため、書き込みデータd14と書き込みデータd15とが異なる圧縮単位にそれぞれ含まれるように、書き込みデータd14と書き込みデータd15との間の境界で圧縮単位が区切られる。この結果、書き込みデータd11、書き込みデータd12、書き込みデータd13および書き込みデータd14を含むデータに対する圧縮では、16KiBを示す圧縮単位が使用される。そして、書き込みデータd11、書き込みデータd12、書き込みデータd13および書き込みデータd14は、一緒に圧縮される。
【0221】
その後、ライトコマンドCMD5に後続するライトコマンドが受信されることなく、所定の時間が経過すると、コントローラ4は、書き込みデータd15に対する圧縮を、4KiBを示す圧縮単位を使用して実行する。
【0222】
次に、複数の書き込みデータに対するデータ圧縮の第3の例について説明する。図16は、第2実施形態に係るメモリシステムにおいて実行される、複数の書き込みデータに対する圧縮の第3の例を示す図である。ここでは、圧縮単位の上限が16KiB以上であり、同じLBAレンジに含まれる論理アドレスをそれぞれ指定する複数のライトコマンドが連続で受信される場合を想定する。この場合、基本的には、これらライトコマンドに関連付けられた全ての書き込みデータが同じ圧縮単位に含まれるように圧縮単位を拡張してもよいが、これらライトコマンドのうちの少なくとも最後のライトコマンドに関連付けられた書き込みデータを圧縮しない制御を実行してもよい。
【0223】
図16に示されるライトコマンドCMD11~CMD15は、図15で説明したライトコマンドCMD11~CMD15と同じである。
【0224】
図16では、ライトコマンドCMD15を受信したとき、コントローラ4は、ライトコマンドCMD15によって指定される論理アドレスが属するLBAレンジRwが、ライトコマンドCMD14によって指定されるLBAが属するLBAレンジRzと異なっていると判定する。
【0225】
このとき、圧縮単位生成回路422は、少なくとも書き込みデータd14が、書き込みデータd11と同じ圧縮単位に含まれないように、16KiBを示す圧縮単位から4KiBを減算する。このとき、書き込みデータd14だけでなく、他の書き込みデータ(例えば、書き込みデータd13など)も、書き込みデータd11と同じ圧縮単位に含まれないように制御されてもよい。
【0226】
そして、圧縮回路406は、書き込みデータd11、書き込みデータd12、および書き込みデータd13を一緒に圧縮して圧縮データを生成する。
【0227】
また、書き込みデータd14は、圧縮されないまま、暗号化回路408によって暗号化された後に、不揮発性メモリ5に書き込まれる。
【0228】
このように、ホスト2から受信された最新のライトコマンド(図16では、ライトコマンドCMD15)によって指定された論理アドレスが属するLBA範囲がホスト2から受信された一つ前のライトコマンド(図16では、ライトコマンドCMD14)によって指定された論理アドレスが属するLBA範囲と一致しない場合、コントローラ4は、一つ前のライトコマンド(ライトコマンドCMD14)に関連付けられた書き込みデータ(d14)を少なくとも含むデータ(d11~d14)のうち、一つ前のライトコマンド(ライトコマンドCMD14)に関連付けられた書き込みデータ(d14)を圧縮しない制御を行う。同じLBAレンジを指定する複数のライトコマンドがホスト2から連続して受信されるケースでは、十分に大きな圧縮単位を使用することができる。したがって、たとえ少なくとも一つのライトコマンドの書き込みデータを圧縮せずとも、十分な高い圧縮効率を得ることができる。
【0229】
次に、データ書き込み処理の手順について説明する。図17Aは、第2実施形態に係るメモリシステム3において実行されるデータ書き込み処理の一部の手順を示すフローチャートである。図17Bは、第2実施形態に係るメモリシステム3において実行されるデータ書き込み処理の残りの手順を示すフローチャートである。
【0230】
まず、コントローラ4は、ホスト2から書き込みデータd(i)を受信する(ステップS401)。書き込みデータd(i)は、ホスト2からi番目に受信されたライトコマンドに関連付けられた書き込みデータである。
【0231】
コントローラ4のLBAレンジチェッカ431は、S401で受信された書き込みデータd(i)の書き込み先LBAが属するLBAレンジR(d(i))を特定する(ステップS402)。LBAレンジR(d(i))は、i番目のライトコマンドによって指定される論理アドレスが属するLBAレンジである。
【0232】
コントローラ4は、書き込みデータd(i+1)を、書き込みデータd(i)の受信から所定時間内に受信したか否かを判定する(ステップS403)。書き込みデータd(i+1)は、ホスト2からi+1番目に受信されたライトコマンドに関連付けられた書き込みデータである。換言すれば、コントローラ4は、i番目のライトコマンドの受信から所定時間内にi+1番目のライトコマンドをホスト2から受信したか否かを判定する。
【0233】
書き込みデータd(i+1)を、書き込みデータd(i)の受信から所定時間内に受信した場合、つまり、i+1番目のライトコマンドを、i番目のライトコマンドの受信から所定時間内に受信した場合(S403でYes)、コントローラ4は、書き込みデータd(i+1)の書き込み先LBAが属するLBAレンジR(d(i+1))を特定する(ステップS404)。
【0234】
コントローラ4は、S404で特定された書き込みデータd(i+1)のLBAレンジR(d(i+1))が、S402で特定された書き込みデータd(i)のLBAレンジR(d(i))と一致しているか否かを判定する(ステップS405)。
【0235】
書き込みデータd(i+1)を、書き込みデータd(i)の受信から所定時間内に受信していない場合(S403でNo)、コントローラ4は、S404およびS405の手順をスキップし、圧縮単位を確定する(ステップS406)。そして、コントローラ4は、確定された圧縮単位を生成し、圧縮回路406に出力する。
【0236】
また、S404で特定された書き込みデータd(i+1)のLBAレンジR(d(i+1))がS402で特定された書き込みデータd(i)のLBAレンジR(d(i))と一致していない場合も(ステップS405でNo)、コントローラ4は、圧縮単位を確定する(ステップS406)。そして、コントローラ4は、確定された圧縮単位を生成し、圧縮回路406に出力する。
【0237】
コントローラ4は、S406で確定された圧縮単位のサイズを有するデータ、つまり書き込みデータd(i)を少なくとも含むデータ、を圧縮する(ステップS407)。例えば、書き込みデータd(i)のLBAレンジR(d(i))が書き込みデータd(i-1)のLBAレンジR(d(i-1))と一致する場合には、書き込みデータd(i)を少なくとも含むデータは、書き込みデータd(i)と、書き込みデータd(i-1)と、を含むデータである。
【0238】
コントローラ4は、圧縮単位の現在のサイズを初期化して、圧縮単位の現在のサイズを初期値に戻す(ステップS408)。初期値は、例えば、4KiBである。
【0239】
コントローラ4は、S407で圧縮された圧縮データを、暗号鍵を使用して暗号化する(ステップS409)。
【0240】
コントローラ4は、S409で暗号化された暗号化データを不揮発性メモリ5に書き込む(ステップS410)。
【0241】
コントローラ4は、S410で暗号化データが書き込まれた不揮発性メモリ5における記憶位置を管理する(ステップS411)。
【0242】
コントローラ4は、iを1だけインクリメントして、iをi+1に設定する(ステップS412)。
【0243】
コントローラ4は、S403でYesの条件を満たしていたか否かを判定する(ステップS413)。
【0244】
S403でYesであった場合(S413でYes)、コントローラ4は、S403に戻り、既に受信されている書き込みデータに後続する書き込みデータが受信されたか否かを判定する。iは既にインクリメントされているので、S403では、コントローラ4は、書き込みデータd(i+2)を、書き込みデータd(i+1)の受信から所定時間内に受信したか否かを判定する。
【0245】
S403でNoであった場合(S413でNo)、コントローラ4は、S401に戻り、不揮発性メモリ5に書き込まれたデータに後続する書き込みデータを受信する。iは既にインクリメントされているので、S401では、コントローラ4は、不揮発性メモリ5に書き込まれたデータに後続する最初の書き込みデータ、つまり書き込みデータd(i+1)を受信する。
【0246】
一方、S404で特定された書き込みデータd(i+1)のLBAレンジR(d(i+1))が、S402で特定された書き込みデータd(i)のLBAレンジR(d(i))と一致する場合(ステップS405でYes)、コントローラ4は、書き込みデータd(i)を少なくとも含むデータと書き込みデータd(i+1)とが同じ圧縮単位に含まれるように、圧縮単位の現在のサイズを、書き込みデータd(i+1)のサイズだけ拡張する(図17BにおけるステップS414)。
【0247】
コントローラ4は、S414で拡張された圧縮単位の現在のサイズが上限値に達したか否かを判定する(ステップS415)。
【0248】
S414で拡張された圧縮単位の現在のサイズが上限値に達した場合(S415でYes)、コントローラ4は、圧縮単位の現在のサイズをデータの圧縮単位として確定する(ステップS416)。コントローラ4は、確定された圧縮単位を圧縮回路406に出力する。
【0249】
コントローラ4は、S416で確定された圧縮単位のサイズを有するデータ、つまり、書き込みデータd(i)を少なくとも含むデータと、書き込みデータd(i+1)と、を圧縮する(ステップS417)。例えば、書き込みデータd(i)のLBAレンジR(d(i))が書き込みデータd(i-1)のLBAレンジR(d(i-1))と一致する場合には、書き込みデータd(i)を少なくとも含むデータは、書き込みデータd(i)と、書き込みデータd(i-1)と、を含むデータである。したがって、この場合には、書き込みデータd(i-1)と、書き込みデータd(i)と、書き込みデータd(i+1)と、が一緒に圧縮される。
【0250】
コントローラ4は、圧縮単位の現在のサイズを初期化して、圧縮単位の現在のサイズを初期値に戻す(ステップS418)。
【0251】
コントローラ4は、S417で圧縮された圧縮データを、暗号鍵を使用して暗号化する(ステップS419)。
【0252】
コントローラ4は、S419で暗号化された暗号化データを不揮発性メモリ5に書き込む(ステップS420)。
【0253】
コントローラ4は、S420で暗号化データが書き込まれた不揮発性メモリ5における記憶位置を管理する(ステップS421)。
【0254】
コントローラ4は、iを2だけインクリメントして、iをi+2に設定する(ステップS422)。そして、コントローラ4は、S401に戻り、不揮発性メモリ5に書き込まれたデータに後続する書き込みデータを受信する。
【0255】
S414で拡張された圧縮単位が上限値に達していない場合(S415でNo)、コントローラ4は、iを1だけインクリメントして、iをi+1に設定する(ステップS423)。そして、コントローラ4は、S403に戻り、既に受信されている書き込みデータに後続する書き込みデータが受信されたか否かを判定する。
【0256】
以上説明したように、第2実施形態においても、第1実施形態と同様に、より大きなサイズを圧縮単位として使用しつつ、暗号鍵がこの圧縮単位内で切り替わらないという制約を満たすことが可能となる。
【0257】
(第3実施形態)
第3実施形態について説明する。第3実施形態に係るメモリシステム3においては、上述した第3の構成が適用されている。つまり、第3実施形態に係るメモリシステム3においては、ネームスペース毎に一つの暗号鍵が管理される。そして、ホスト2から受信された最新のライトコマンドによって指定されるNSIDが一つ前のライトコマンドによって指定されるNSIDと一致するか否に基づいて、圧縮単位を拡張するか否かが決定される。
【0258】
換言すれば、データが書き込まれるべきネームスペースが切り替わるタイミングでデータの圧縮単位が区切られ、これによって、同じネームスペースに書き込まれるべきデータは一緒に圧縮され、異なるネームスペースに書き込まれるべきデータは別々に圧縮される。
【0259】
第3実施形態に係るメモリシステム3に含まれるほとんど全ての構成要素は、第2実施形態に係るメモリシステム3と同じである。そのため、第2実施形態に係るメモリシステム3と異なる点について注目して説明する。
【0260】
第3実施形態では、メモリシステム3において管理されている複数のネームスペースそれぞれが、一つのLBAレンジのみを含む場合を想定する。一つのネームスペースで使用される暗号鍵の数は一つである。つまり、コントローラ4は、複数のネームスペースに1対1の関係でそれぞれ関連付けられた複数の暗号鍵を管理する。
【0261】
図18は、第3実施形態に係るメモリシステムにおけるデータ書き込み処理およびデータ読み出し処理の例を示す図である。
【0262】
ここで、第3実施形態における圧縮単位生成回路441は、ホスト2から受信された最新のライトコマンドによって指定されるNSIDが、ホスト2から受信された一つ前のライトコマンドによって指定されるNSIDと一致する場合、ホスト2から受信された最新のライトコマンドに関連付けられた書き込みデータが、ホスト2から受信された一つ前のライトコマンドに関連付けられた書き込みデータを少なくとも含むデータと一緒に圧縮されるように、圧縮単位の現在のサイズを拡張する。つまり、最新のライトコマンドに関連付けられた書き込みデータと、ホスト2から受信された一つ前のライトコマンドに関連付けられた書き込みデータを少なくとも含むデータと、が同じ圧縮単位に含まれるように、圧縮単位の現在のサイズが拡張される。この場合、圧縮単位の現在のサイズは、最新のライトコマンドに関連付けられた書き込みデータのサイズだけ増加される。
【0263】
一方、ホスト2から受信された最新のライトコマンドによって指定されるNSIDが、ホスト2から受信された一つ前のライトコマンドによって指定されるNSIDと異なる場合、圧縮単位生成回路441は、ホスト2から受信された最新のライトコマンドに関連付けられた書き込みデータと、ホスト2から受信された一つ前のライトコマンドに関連付けられた書き込みデータを少なくとも含むデータと、が別々に圧縮されるように、圧縮単位の現在のサイズを圧縮単位として生成(確定)し、生成した圧縮単位を圧縮回路406に設定する。つまり、最新のライトコマンドに関連付けられた書き込みデータと、ホスト2から受信された一つ前のライトコマンドに関連付けられた書き込みデータを少なくとも含むデータと、が異なる圧縮単位に含まれるように、圧縮単位の現在のサイズが圧縮単位として生成される。
【0264】
このように、データが書き込まれるべきネームスペースが切り替わるタイミングでデータの圧縮単位を区切る(確定する)制御が実行されることにより、同じネームスペースに書き込まれるべきデータを一緒に圧縮し、異なるネームスペースに書き込まれるべきデータを別々に圧縮することができる。
【0265】
また、最新のライトコマンドがホスト2から受信されてから経過した時間が所定時間に達するまでの間に次のライトコマンドが受信されない場合、あるいは拡張された圧縮単位が上限値に達した場合、圧縮単位生成回路441は、現在の圧縮単位を、最新のライトコマンドに関連付けられた書き込みデータを含むデータに対する圧縮に使用されるべき圧縮単位として生成する。
【0266】
圧縮単位保持回路442は、圧縮単位生成回路441によって生成された圧縮単位の各々を保持する回路である。圧縮単位保持回路442によって保持される各圧縮単位は、第1実施形態と同様に、伸張回路407が、伸張回路407によって生成された非圧縮データのサイズが、この非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位と一致するか否かを判定するために使用される。
【0267】
まず、データ書き込み処理について説明する。コントローラ4は、書き込み先のネームスペースを示すネームスペース識別子NSIDと、書き込み先の論理アドレスと、を指定するライトコマンドをホスト2から受信したことに応じて、データ書き込み処理を開始する。
【0268】
圧縮単位生成回路441は、ホスト2から受信された最新のライトコマンドによって指定されたNSIDが、ホスト2から受信された一つ前のライトコマンドによって指定されたNSIDと同じ場合、最新のライトコマンドに関連付けられた書き込みデータと、一つ前のライトコマンドに関連付けられた書き込みデータを少なくとも含むデータと、が同じ圧縮単位に含まれるように、圧縮単位の現在のサイズを拡張する。拡張された圧縮単位が上限に達した場合、圧縮単位生成回路441は、現在の圧縮単位を書き込みデータの圧縮に使用される圧縮単位として生成する。また、最新のライトコマンドが受信されてから、次のライトコマンドが受信されることなく、所定の時間が経過すると、圧縮単位生成回路441は、圧縮単位の現在のサイズを書き込みデータの圧縮に使用される圧縮単位として生成する。
【0269】
ホスト2から受信された最新のライトコマンドによって指定されたNSIDが、ホスト2から受信された一つ前のライトコマンドによって指定されたNSIDと異なる場合、圧縮単位生成回路441は、最新のライトコマンドに関連付けられた書き込みデータと、一つ前のライトコマンドに関連付けられた書き込みデータを少なくとも含むデータと、が異なる圧縮単位に含まれるように、圧縮単位の現在のサイズを書き込みデータの圧縮に使用される圧縮単位として生成する。
【0270】
圧縮単位生成回路441は、生成した圧縮単位を圧縮回路406に設定する。また、圧縮単位保持回路442は、圧縮単位生成回路442によって生成された圧縮単位を保持する。
【0271】
そして、圧縮回路406は、設定された圧縮単位を使用して書き込みデータを圧縮することで、圧縮データを生成する。
【0272】
また、暗号鍵管理回路403は、ホスト2から受信されたライトコマンドによって指定されたNSIDに基づいて、書き込みデータに対応する暗号鍵を特定し、特定した暗号鍵を暗号化回路408に出力する。
【0273】
暗号化回路408は、圧縮回路406によって生成された圧縮データを、暗号鍵管理回路403によって出力された暗号鍵を使用して暗号化することによって、暗号化データを生成する。生成された暗号化データは、ECC処理回路404によって誤り訂正符号化処理が施された後、不揮発性メモリ5に書き込まれる。
【0274】
次に、データ読み出し処理について説明する。コントローラ4は、リード対象のデータが書き込まれているリード対象のネームスペースを示すネームスペース識別子NSIDと、リード対象のデータに対応するリード対象の論理アドレスと、を指定するリードコマンドをホスト2から受信したことに応じて、データ読み出し処理を実行する。
【0275】
コントローラ4は、リード対象のデータを含む暗号化データを不揮発性メモリ5から読み出す。読み出された暗号化データは、ECC処理回路404によって誤りが訂正された後、復号回路409に出力される。復号回路409は、復号鍵(ここでは、暗号鍵管理回路403から受信される暗号鍵)を使用して、暗号化データを復号する。このとき、暗号鍵管理回路403は、ホスト2から受信されたリードコマンドによって指定されたNSIDに基づいて、復号鍵を特定する。暗号鍵管理回路403は、特定した復号鍵を復号回路409に出力する。復号回路409は、暗号化データを復号することによって、圧縮データを生成する。復号回路409は、生成した圧縮データを伸張回路407に出力する。
【0276】
伸張回路407は、復号回路409によって復号されたデータ(圧縮データ)を伸張し、非圧縮データを生成する。そして、非圧縮データからリード対象データが抽出されることにより、ホスト2に転送されるべき読み出しデータが生成される。非圧縮データを生成した後、伸張回路407は、生成された非圧縮データのサイズをチェックする。この場合、伸張回路407は、生成された非圧縮データのサイズが、この非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位と一致するか否かを判定する。例えば、この非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位は、圧縮単位保持回路442から伸張回路407に通知されてもよい。例えば、圧縮単位保持回路442においては、圧縮単位毎に、その圧縮単位に含まれるデータを特定するための情報が保持されていてもよい。これにより、例えば、リードコマンドによって指定されたNSIDと論理アドレスとに基づいて、伸張回路407によって生成された非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位を特定することができる。
【0277】
非圧縮データのサイズが、この非圧縮データに対応する書き込みデータを圧縮する際に使用された圧縮単位と一致しない場合、伸張回路407は、エラーが発生したことをCPU402に通知する。CPU402の制御の下、コントローラ4は、データ読み出し処理を再び実行するといった処理(エラー処理)を実行する。
【0278】
次に、複数の書き込みデータに対するデータ圧縮の第1の例について説明する。図19は、第3実施形態に係るメモリシステムにおいて実行される、複数の書き込みデータに対する圧縮処理の第1の例を示す図である。ここでは、圧縮単位の上限が8KiB以上である場合を想定する。また、ライトコマンドCMD1、ライトコマンドCMD2、ライトコマンドCMD3、ライトコマンドCMD4、およびライトコマンドCMD5がこの順序でホスト2から受信された場合を想定する。
【0279】
ライトコマンドCMD1は、書き込み先のネームスペースNxのNSID(Nx)と、書き込み先のネームスペースNxに含まれる論理アドレスと、を指定する。ライトコマンドCMD1に関連付けられた書き込みデータd1は、例えば、4KiBのサイズを有する。そして、書き込みデータd1に対する暗号化で使用されるべき暗号鍵は、書き込み先のネームスペースNxに関連付けられている暗号鍵Kxである。
【0280】
ライトコマンドCMD2は、書き込み先のネームスペースNyのNSID(Ny)と、書き込み先のネームスペースNyに含まれる論理アドレスと、を指定する。ライトコマンドCMD2に関連付けられた書き込みデータd2は、例えば、4KiBのサイズを有する。そして、書き込みデータd2に対する暗号化で使用されるべき暗号鍵は、書き込み先のネームスペースNyに関連付けられた暗号鍵Kyである。
【0281】
ライトコマンドCMD3は、書き込み先のネームスペースNzのNSID(Nz)と、書き込み先のネームスペースNzに含まれる論理アドレスと、を指定する。ライトコマンドCMD3に関連付けられた書き込みデータd3は、例えば、4KiBのサイズを有する。そして、書き込みデータd3に対する暗号化で使用されるべき暗号鍵は、書き込み先のネームスペースNzに関連付けられた暗号鍵Kzである。
【0282】
ライトコマンドCMD4は、書き込み先のネームスペースNzのNSID(Nz)と、書き込み先のネームスペースNzに含まれる論理アドレスを指定する。ライトコマンドCMD4に関連付けられた書き込みデータd4は、例えば、4KiBのサイズを有する。そして、書き込みデータd4に対する暗号化で使用されるべき暗号鍵は、書き込み先のネームスペースNzに関連付けられた暗号鍵Kzである。
【0283】
ライトコマンドCMD5は、書き込み先のネームスペースNwのNSID(Nw)と、書き込み先のネームスペースNwに含まれる論理アドレスと、を指定する。ライトコマンドCMD5に関連付けられた書き込みデータd5は、例えば、4KiBのサイズを有する。そして、書き込みデータd5に対する暗号化で使用されるべき暗号鍵は、書き込み先のネームスペースNwに関連付けられた暗号鍵Kwである。
【0284】
まず、コントローラ4は、一つ目のライトコマンドCMD1をホスト2から受信する。
【0285】
次いで、コントローラ4は、二つ目のライトコマンドCMD2をホスト2から受信する。ライトコマンドCMD2に関連付けられた書き込みデータd2の書き込み先ネームスペースのNSIDは、NSID(Ny)であり、ライトコマンドCMD1に関連付けられた書き込みデータd1の書き込み先ネームスペースのNSIDは、NSID(Nx)である。そのため、書き込みデータd1と書き込みデータd2とが異なる圧縮単位にそれぞれ含まれるように、書き込みデータd1と書き込みデータd2との間の境界でデータの圧縮単位が区切られる。この結果、書き込みデータd1に対する圧縮では、書き込みデータd1のサイズである4KiBを示す圧縮単位が使用される。
【0286】
コントローラ4は、三つ目のライトコマンドCMD3をホスト2から受信する。ライトコマンドCMD3に関連付けられた書き込みデータd3の書き込み先ネームスペースのNSIDは、NSID(Nz)であり、ライトコマンドCMD2に関連付けられた書き込みデータd2の書き込み先ネームスペースのNSIDは、NSID(Ny)である。そのため、書き込みデータd2と書き込みデータd3とが異なる圧縮単位にそれぞれ含まれるように、書き込みデータd2と書き込みデータd3との間の境界でデータの圧縮単位が切られる。そのため、書き込みデータd2に対する圧縮では、書き込みデータd2のサイズである4KiBを示す圧縮単位が使用される。
【0287】
次いで、コントローラ4は、四つ目のライトコマンドCMD4をホスト2から受信する。ライトコマンドCMD4に関連付けられたデータd4の書き込み先ネームスペースのNSIDは、ライトコマンドCMD3に関連付けられた書き込みデータd3の書き込み先ネームスペースのNSIDと同じNSID(Nz)である。そのため、書き込みデータd3と書き込みデータd4とが同じ圧縮単位に含まれるように、圧縮単位が拡張される。この場合、圧縮単位の現在のサイズは、書き込みデータd3のサイズである4KiBから、書き込みデータd3のサイズと書き込みデータd4のサイズとの和である8KiBに拡張される。
【0288】
コントローラ4は、五つ目のライトコマンドCMD5をホスト2から受信する。ライトコマンドCMD5に関連付けられた書き込みデータd5の書き込み先ネームスペースのNSIDは、NSID(Nw)であり、ライトコマンドCMD4に関連付けられた書き込みデータd4の書き込み先ネームスペースのNSIDは、NSID(Nz)である。そのため、書き込みデータd4と書き込みデータd5とが異なる圧縮単位にそれぞれ含まれるように、書き込みデータd4と書き込みデータd5との間の境界でデータの圧縮単位が区切られる。この結果、書き込みデータd3および書き込みデータd4を含むデータに対する圧縮では、書き込みデータd3および書き込みデータd4のサイズの和である8KiBを示す圧縮単位が使用される。そして、書き込みデータd3および書き込みデータd4は、一緒に圧縮される。
【0289】
その後、ライトコマンドCMD5に後続するライトコマンドが受信されることなく、所定の時間が経過すると、コントローラ4は、書き込みデータd5に対する圧縮を、4KiBを示す圧縮単位を使用して実行する。
【0290】
次に、複数の書き込みデータに対するデータ圧縮の第2の例について説明する。図20は、第3実施形態に係るメモリシステムにおいて実行される複数の書き込みデータに対する圧縮の第2の例を示す図である。ここでは、圧縮単位の上限が16KiB以上であり、同じ書き込み先ネームスペースのNSIDを指定する複数のライトコマンドが連続で受信される場合を想定する。
【0291】
ライトコマンドCMD11は、書き込み先のネームスペースNzのNSID(Nz)と、書き込み先のネームスペースNzに含まれる論理アドレスと、を指定する。ライトコマンドCMD11に関連付けられた書き込みデータd11は、例えば、4KiBのサイズを有する。そして、書き込みデータd11に対する暗号化で使用されるべき暗号鍵は、書き込み先のネームスペースNzに関連付けられている暗号鍵Kzである。
【0292】
ライトコマンドCMD12は、書き込み先のネームスペースNzのNSID(Nz)と、書き込み先のネームスペースNzに含まれる論理アドレスと、を指定する。ライトコマンドCMD12に関連付けられた書き込みデータd12は、例えば、4KiBのサイズを有する。そして、書き込みデータd12に対する暗号化で使用されるべき暗号鍵は、書き込み先のネームスペースNzに関連付けられている暗号鍵Kzである。
【0293】
ライトコマンドCMD13は、書き込み先のネームスペースNzのNSID(Nz)と、書き込み先のネームスペースNzに含まれる論理アドレスと、を指定する。ライトコマンドCMD13に関連付けられた書き込みデータd13は、例えば、4KiBのサイズを有する。そして、書き込みデータd13に対する暗号化で使用されるべき暗号鍵は、書き込み先のネームスペースNzに関連付けられている暗号鍵Kzである。
【0294】
ライトコマンドCMD14は、書き込み先のネームスペースNzのNSID(Nz)と、書き込み先のネームスペースNzに含まれる論理アドレスと、を指定する。ライトコマンドCMD14に関連付けられた書き込みデータd14は、例えば、4KiBのサイズを有する。そして、書き込みデータd14に対する暗号化で使用されるべき暗号鍵は、書き込み先のネームスペースNzに関連付けられている暗号鍵Kzである。
【0295】
ライトコマンドCMD15は、書き込み先のネームスペースNwのNSID(Nw)と、書き込み先のネームスペースNwに含まれる論理アドレスと、を指定する。ライトコマンドCMD15に関連付けられた書き込みデータd15は、例えば、4KiBのサイズを有する。そして、書き込みデータd15に対する暗号化で使用されるべき暗号鍵は、書き込み先のネームスペースNwに関連付けられている暗号鍵Kwである。
【0296】
まず、コントローラ4は、一つ目のライトコマンドCMD11をホスト2から受信する。
【0297】
次いで、コントローラ4は、二つ目のライトコマンドCMD12をホスト2から受信する。ライトコマンドCMD12に関連付けられた書き込みデータd12の書き込み先ネームスペースのNSIDは、ライトコマンドCMD11に関連付けられた書き込みデータd11の書き込み先ネームスペースのNSIDと同じNSID(Nz)である。そのため、書き込みデータd11と書き込みデータd12とが同じ圧縮単位に含まれるように、圧縮単位が8KiBに拡張される。
【0298】
コントローラ4は、三つ目のライトコマンドCMD13をホスト2から受信する。ライトコマンドCMD13に関連付けられた書き込みデータd13の書き込み先ネームスペースのNSIDは、ライトコマンドCMD12に関連付けられた書き込みデータd12の書き込み先ネームスペースのNSIDと同じNSID(Nz)である。そのため、書き込みデータd11と書き込みデータd12と書き込みデータd13とが同じ圧縮単位に含まれるように、圧縮単位が12KiBに拡張される。
【0299】
次いで、コントローラ4は、四つ目のライトコマンドCMD14をホスト2から受信する。ライトコマンドCMD14に関連付けられたデータd14の書き込み先ネームスペースのNSIDは、ライトコマンドCMD13に関連付けられた書き込みデータd13の書き込み先ネームスペースのNSIDと同じNSID(Nz)である。そのため、書き込みデータd11と書き込みデータd12と書き込みデータd13と書き込みデータd14とが同じ圧縮単位に含まれるように、圧縮単位が16KiBに拡張される。
【0300】
コントローラ4は、五つ目のライトコマンドCMD15をホスト2から受信する。ライトコマンドCMD15に関連付けられた書き込みデータd15の書き込み先ネームスペースのNSIDは、NSID(Nw)であり、ライトコマンドCMD14に関連付けられた書き込みデータd14の書き込み先ネームスペースのNSIDは、NSID(Nz)である。そのため、書き込みデータd14と書き込みデータd15とが異なる圧縮単位にそれぞれ含まれるように、書き込みデータd14と書き込みデータd15との間の境界でデータの圧縮単位が切られる。この結果、書き込みデータd11、書き込みデータd12、書き込みデータd13および書き込みデータd14を含むデータに対する圧縮では、16KiBを示す圧縮単位が使用される。そして、書き込みデータd11、書き込みデータd12、書き込みデータd13および書き込みデータd14は、一緒に圧縮される。
【0301】
その後、ライトコマンドCMD5に後続するライトコマンドが受信されることなく、所定の時間が経過すると、コントローラ4は、書き込みデータd15に対する圧縮を、4KiBを示す圧縮単位を使用して実行する。
【0302】
次に、複数の書き込みデータに対するデータ圧縮の第3の例について説明する。図21は、第3実施形態に係るメモリシステムにおいて実行される複数の書き込みデータに対する圧縮の第3の例を示す図である。ここでは、圧縮単位の上限が16KiB以上であり、同じネームスペース識別子を指定する複数のライトコマンドが連続で受信される場合を想定する。この場合、基本的には、これらライトコマンドに関連付けられた全ての書き込みデータが同じ圧縮単位に含まれるように圧縮単位を拡張してもよいが、これらライトコマンドのうちの少なくとも最後のライトコマンドに関連付けられた書き込みデータを圧縮しない制御を実行してもよい。
【0303】
図21に示されるライトコマンドCMD11~CMD15は、図20で説明したライトコマンドCMD11~CMD15と同じである。
【0304】
図21では、ライトコマンドCMD15を受信したとき、コントローラ4は、ライトコマンド15によって指定されるNSID(Nw)が、ライトコマンドCMD14によって指定されるNSID(Nz)と異なっていると判定する。
【0305】
このとき、コントローラ4は、少なくとも書き込みデータd14が、書き込みデータd11と同じ圧縮単位に含まれないように、16KiBを示す圧縮単位から4KiBを減算する。このとき、書き込みデータd14だけでなく、他の書き込みデータ(例えば、書き込みデータd13など)も、書き込みデータd11と同じ圧縮単位に含まれないように制御されてもよい。
【0306】
そして、圧縮回路406は、書き込みデータd11、書き込みデータd12、および書き込みデータd13を一緒に圧縮して圧縮データを生成する。
【0307】
また、書き込みデータd14は、圧縮されないまま、暗号化回路408によって暗号化される。
【0308】
次に、データ書き込み処理の手順について説明する。図22Aは、第3実施形態に係るメモリシステム3において実行されるデータ書き込み処理の一部の手順を示すフローチャートである。図22Bは、第3実施形態に係るメモリシステム3において実行されるデータ書き込み処理の残りの手順を示すフローチャートである。
【0309】
まず、コントローラ4は、ホスト2から書き込みデータd(i)を受信する(ステップS501)。書き込みデータd(i)は、ホスト2からi番目に受信されたライトコマンドに関連付けられた書き込みデータである。
【0310】
コントローラ4は、ホスト2から受信されたi番目のライトコマンドによって指定されたネームスペース識別子に基づいて、S501で受信された書き込みデータd(i)の書き込み先のネームスペースのNSID(d(i))を特定する(ステップS502)。
【0311】
コントローラ4は、書き込みデータd(i+1)を、書き込みデータd(i)の受信から所定時間内に受信したか否かを判定する(ステップS503)。書き込みデータd(i+1)は、ホスト2からi+1番目に受信されたライトコマンドに関連付けられた書き込みデータである。換言すれば、コントローラ4は、i番目のライトコマンドの受信から所定時間内にi+1番目のライトコマンドをホスト2から受信したか否かを判定する。
【0312】
書き込みデータd(i+1)を、書き込みデータd(i)の受信から所定時間内に受信した場合、つまり、i+1番目のライトコマンドを、i番目のライトコマンドの受信から所定時間内に受信した場合(S503でYes)、コントローラ4は、書き込みデータd(i+1)の書き込み先のネームスペースのNSID(d(i+1))を特定する(ステップS504)。
【0313】
コントローラ4は、S504で特定された書き込みデータd(i+1)の書き込み先のネームスペースのNSID(d(i+1))が、S502で特定された書き込み先のネームスペースのNSID(d(i))と一致しているか否かを判定する(ステップS505)。
【0314】
書き込みデータd(i+1)を、書き込みデータd(i)の受信から所定時間内に受信していない場合(S503でNo)、コントローラ4は、S504およびS505の手順をスキップし、圧縮単位を確定する(ステップS506)。コントローラ4は、確定された圧縮単位を生成し、圧縮回路406に出力する。
【0315】
S504で特定された書き込みデータd(i+1)の書き込み先のネームスペースのNSID(d(i+1))が、S502で特定された書き込み先のネームスペースのNSID(d(i))と一致していない場合も(ステップS505でNo)、コントローラ4は、圧縮単位を確定する(ステップS506)。コントローラ4は、確定された圧縮単位を生成し、圧縮回路406に出力する。
【0316】
コントローラ4は、S506で確定された圧縮単位のサイズを有するデータ、つまり書き込みデータd(i)を少なくとも含むデータを圧縮する(ステップS507)。例えば、書き込みデータd(i)の書き込み先のネームスペースのNSID(d(i))が書き込みデータd(i-1)の書き込み先のネームスペースのNSID(d(i-1))と一致する場合には、書き込みデータd(i)を少なくとも含むデータは、書き込みデータd(i)と、書き込みデータd(i-1)と、を含むデータである。
【0317】
コントローラ4は、圧縮単位の現在のサイズを初期化して、圧縮単位の現在のサイズを初期値に戻す(ステップS508)。初期値は、例えば、4KiBである。
【0318】
コントローラ4は、S507で圧縮された圧縮データを、暗号鍵を使用して暗号化する(ステップS509)。
【0319】
コントローラ4は、S509で暗号化された暗号化データを不揮発性メモリ5に書き込む(ステップS510)。
【0320】
コントローラ4は、S510で暗号化データが書き込まれた不揮発性メモリ5における記憶位置を管理する(ステップS511)。
【0321】
コントローラ4は、iを1だけインクリメントして、iをi+1に設定する(ステップS512)。
【0322】
コントローラ4は、S503でYesの条件を満たしていたか否かを判定する(ステップS513)。
【0323】
S503でYesであった場合(S513でYes)、コントローラ4は、S503に戻り、既に受信されている書き込みデータに後続する書き込みデータが受信されたか否かを判定する。iは既にインクリメントされているので、S503では、コントローラ4は、書き込みデータd(i+2)を、書き込みデータd(i+1)の受信から所定時間内に受信したか否かを判定する。
【0324】
S503でNoであった場合(S513でNo)、コントローラ4は、S501に戻り、不揮発性メモリ5に書き込まれたデータに後続する書き込みデータを受信する。iは既にインクリメントされているので、S501では、コントローラ4は、不揮発性メモリ5に書き込まれたデータに後続する最初の書き込みデータ、つまり書き込みデータd(i+1)を受信する。
【0325】
一方、S504で特定された書き込みデータd(i+1)の書き込み先のネームスペースのNSID(d(i+1))が、S502で特定された書き込みデータd(i)の書き込み先のネームスペースのNSID(d(i))と一致する場合(ステップS505でYes)、コントローラ4は、書き込みデータd(i)を少なくとも含むデータと書き込みデータd(i+1)とが同じ圧縮単位に含まれるように、圧縮単位の現在のサイズを、書き込みデータd(i+1)のサイズだけ拡張する(図22BにおけるステップS514)。
【0326】
コントローラ4は、S514で拡張された圧縮単位の現在のサイズが上限値に達したか否かを判定する(ステップS515)。
【0327】
S514で拡張された圧縮単位の現在のサイズが上限値に達した場合(S515でYes)、コントローラ4は、の現在のサイズをデータの圧縮単位として確定する(ステップS516)。コントローラ4は、確定された圧縮単位を生成し、圧縮回路406に出力する。
【0328】
コントローラ4は、S516で確定された圧縮単位のサイズを有するデータ、つまり、書き込みデータd(i)を少なくとも含むデータと、書き込みデータd(i+1)と、を圧縮する(ステップS517)。例えば、書き込みデータd(i)の書き込み先のネームスペースのNSID(d(i))が書き込みデータd(i-1)の書き込み先のネームスペースのNSID(d(i-1))と一致する場合には、書き込みデータd(i)を少なくとも含むデータは、書き込みデータd(i)と、書き込みデータd(i-1)と、を含むデータである。したがって、この場合には、書き込みデータd(i-1)と、書き込みデータd(i)と、書き込みデータd(i+1)と、が一緒に圧縮される。
【0329】
コントローラ4は、圧縮単位の現在のサイズを初期化して、圧縮単位の現在のサイズを初期値に戻す(ステップS518)。
【0330】
コントローラ4は、S517で圧縮された圧縮データを、暗号鍵を使用して暗号化する(ステップS519)。
【0331】
コントローラ4は、S519で暗号化された暗号化データを不揮発性メモリ5に書き込む(ステップS520)。
【0332】
コントローラ4は、S520で暗号化データが書き込まれた不揮発性メモリ5における記憶位置を管理する(ステップS521)。
【0333】
コントローラ4は、iを2だけインクリメントして、iをi+2に設定する(ステップS522)。そして、コントローラ4は、S501に戻り、不揮発性メモリ5に書き込まれたデータに後続する書き込みデータを受信する。
【0334】
S514で拡張された圧縮単位が上限値に達していない場合(S515でNo)、コントローラ4は、iを1だけインクリメントして、iをi+1に設定する(ステップS523)。そして、コントローラ4は、S503に戻り、既に受信されている書き込みデータに後続する書き込みデータが受信されたか否かを判定する。
【0335】
以上説明したように、第3実施形態においても、第1実施形態と同様に、より大きなサイズを圧縮単位として使用しつつ、暗号鍵がこの圧縮単位内で切り替わらないという制約を満たすことが可能となる。
【0336】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0337】
1…情報処理システム、2…ホスト、3…メモリシステム、4…コントローラ、5…不揮発性メモリ、6…DRAM、7…バス、20…内部バス、21…プロセッサ、22…メモリ、400…内部バス、401…ホストインタフェース、402…CPU、403…暗号鍵管理回路、404…ECC処理回路、405…DRAMインタフェース、406…圧縮回路、407…伸張回路、408…暗号化回路、409…復号回路、410…バッファメモリ、411…不揮発性メモリインタフェース、421a…ネームスペース設定情報管理回路、422a…圧縮単位生成回路。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17A
図17B
図18
図19
図20
図21
図22A
図22B