(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023169665
(43)【公開日】2023-11-30
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
G06F 12/1027 20160101AFI20231122BHJP
G06F 12/00 20060101ALI20231122BHJP
G06F 12/02 20060101ALI20231122BHJP
【FI】
G06F12/1027 120
G06F12/00 597U
G06F12/1027 100
G06F12/02 570A
【審査請求】未請求
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2022080917
(22)【出願日】2022-05-17
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】渡邊 秀一
【テーマコード(参考)】
5B160
5B205
【Fターム(参考)】
5B160AB26
5B205SS13
(57)【要約】
【課題】I/O性能の低下を軽減できるメモリシステムを実現する。
【解決手段】メモリシステムのコントローラは、第1のデータの読み出しを要求し且つ第1の仮想アドレスを指定する第1のリードコマンドをホストから受信したことに応じ、第1のデータを不揮発性メモリから読み出すためのコマンド処理を実行する。コントローラは、第1の仮想アドレスを、ホストのメモリをアクセスするための第1の物理アドレスに変換するためのアドレス変換処理を実行する。コントローラは、第1のアドレス変換情報を取得するためのアドレス変換要求をホストに送信する。コントローラは、第1のアドレス変換情報の取得が失敗したことを示す応答をホストから受信したことに応じ、第1のアドレス変換情報を取得するまで、コマンド処理を中断し、第1のアドレス変換情報を取得した後、コマンド処理を再開する。
【選択図】
図12
【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラと、を具備し、
前記コントローラは、
第1のデータの読み出しを要求し且つ前記ホストの仮想アドレス空間における第1の仮想アドレスを指定する第1のリードコマンドを前記ホストから受信したことに応じ、
前記第1のデータを前記不揮発性メモリから読み出すためのコマンド処理を実行し、
前記第1の仮想アドレスを、前記ホストのメモリをアクセスするための第1の物理アドレスに変換するためのアドレス変換処理を実行し、
前記アドレス変換処理において、前記第1の仮想アドレスを前記第1の物理アドレスに変換するための第1のアドレス変換情報を取得するためのアドレス変換要求を前記ホストに送信し、
前記第1のアドレス変換情報の取得が失敗したことを示す応答を前記ホストから受信したことに応じ、前記第1のアドレス変換情報を取得するまで、前記コマンド処理を中断し、前記第1のアドレス変換情報を取得した後、前記コマンド処理を再開するように構成されている、
メモリシステム。
【請求項2】
前記コントローラは、
前記第1の仮想アドレスが、前記第1のデータが転送されるべき前記メモリにおける記憶位置に対応する仮想アドレスである場合、
前記第1の物理アドレスによって示される記憶位置を、前記第1のデータが転送されるべき前記メモリにおける前記記憶位置として特定するように構成されている、
請求項1に記載のメモリシステム。
【請求項3】
前記コントローラは、
前記第1の仮想アドレスが、複数の仮想アドレスを含む第1のリストが格納されている前記メモリにおける記憶位置に対応する仮想アドレスである場合、
前記アドレス変換処理において、前記第1の仮想アドレスを、前記第1のリストが格納されている前記メモリにおける前記記憶位置を示す前記第1の物理アドレスに変換する第1のアドレス変換処理と、前記第1のリストに含まれる前記複数の仮想アドレスを前記メモリにおける複数の第2の物理アドレスにそれぞれ変換する第2のアドレス変換処理とを実行し、
前記複数の第2の物理アドレスによって示される前記メモリにおける複数の記憶位置のそれぞれを、前記第1のデータが転送されるべき前記メモリにおける前記記憶位置として特定するように構成されている、
請求項1に記載のメモリシステム。
【請求項4】
前記コントローラは、
前記第1のアドレス変換情報の取得が失敗したことを示す応答を前記ホストから受信したことに応じ、
前記コマンド処理を中断し、
前記第1のアドレス変換情報の準備を要求するメッセージを前記ホストに送信し、
前記第1のアドレス変換情報の準備の完了を示す応答を前記ホストから受信したことに応じ、前記アドレス変換要求を前記ホストに再び送信し、
前記第1のアドレス変換情報の準備の完了を示す応答、または前記第1のアドレス変換情報を含む、前記再び送信したアドレス変換要求に対する応答を前記ホストから受信したことに応じ、前記コマンド処理を再開するように構成されている、
請求項1に記載のメモリシステム。
【請求項5】
前記コントローラは、
前記アドレス変換処理が成功した場合、前記第1の物理アドレスに基づいて、前記第1のデータが転送されるべき前記メモリにおける記憶位置を特定し、前記不揮発性メモリから読み出された前記第1のデータを前記メモリの前記特定した記憶位置に転送し、
前記アドレス変換処理が失敗した場合、前記第1のアドレス変換情報を取得するまで、前記コマンド処理を中断し、前記第1のアドレス変換情報を取得した後、前記コマンド処理を再開するように構成されている、
請求項1に記載のメモリシステム。
【請求項6】
キャッシュメモリをさらに具備し、
前記コントローラは、
前記アドレス変換処理において、前記第1のアドレス変換情報が前記キャッシュメモリに存在しない場合、
前記コマンド処理を中断し、
前記アドレス変換要求を前記ホストに送信し、
前記第1のアドレス変換情報を含む、前記アドレス変換要求に対する応答を前記ホストから受信したことに応じ、前記コマンド処理を再開するように構成されている、
請求項1に記載のメモリシステム。
【請求項7】
前記コントローラは、
前記第1のデータを読み出すために前記不揮発性メモリに送信することが必要な複数の指示のうち、前記不揮発性メモリにまだ送信されてない指示の各々を前記不揮発性メモリに送信する処理を停止することによって、前記コマンド処理を中断するように構成されている、
請求項1に記載のメモリシステム。
【請求項8】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラと、を具備し、
前記コントローラは、
前記ホストのメモリに格納された複数のサブミッションキューの各々からI/Oコマンドをフェッチし、
第1のI/Oコマンドを取得したことに応じ、
前記不揮発性メモリにデータを書き込むまたは前記不揮発性メモリからデータを読み出すためのコマンド処理を実行し、
前記第1のI/Oコマンドの完了を前記ホストに通知するための第1の情報が転送されるべき前記ホストの前記メモリにおける記憶位置に対応する、前記ホストの仮想アドレス空間における第1の仮想アドレスを、前記メモリをアクセスするための第1の物理アドレスに変換するためのアドレス変換処理を実行し、
前記アドレス変換処理において、前記第1の仮想アドレスを前記第1の物理アドレスに変換するための第1のアドレス変換情報を取得するためのアドレス変換要求を前記ホストに送信し、
前記第1のアドレス変換情報の取得が失敗したことを示す応答を前記ホストから受信したことに応じ、前記複数のサブミッションキューのうち、前記第1のI/Oコマンドの完了応答が格納されるべき前記メモリにおける第1のコンプリーションキューに関連付けられた一つ以上の第1のサブミッションキューの各々からI/Oコマンドをフェッチする第1の処理を、前記第1のアドレス変換情報を取得するまで中断し、前記第1のアドレス変換情報を取得した後、前記第1の処理を再開するように構成されている、
メモリシステム。
【請求項9】
前記コントローラは、
前記第1のアドレス変換情報の取得が失敗したことを示す応答を前記ホストから受信したことに応じ、
前記第1の処理を中断し、
前記第1のアドレス変換情報の準備を要求するメッセージを前記ホストに送信し、
前記第1のアドレス変換情報の準備の完了を示す応答を前記ホストから受信したことに応じ、前記アドレス変換要求を前記ホストに再び送信し、
前記第1のアドレス変換情報の準備の完了を示す応答、または前記第1のアドレス変換情報を含む、前記再び送信したアドレス変換要求に対する応答を前記ホストから受信したことに応じ、前記第1の処理を再開するように構成されている、
請求項8に記載のメモリシステム。
【請求項10】
前記コントローラは、
前記アドレス変換処理が成功した場合、前記第1の物理アドレスを使用して、前記第1の情報を前記メモリに転送し、
前記アドレス変換処理が失敗した場合、前記第1の処理を中断し、前記アドレス変換処理が成功した後、前記第1の処理を再開するように構成されている、
請求項8に記載のメモリシステム。
【請求項11】
キャッシュメモリをさらに具備し、
前記コントローラは、
前記アドレス変換処理において、前記第1のアドレス変換情報が前記キャッシュメモリに存在しない場合、
前記第1の処理を中断し、
前記アドレス変換要求を前記ホストに送信し、
前記第1のアドレス変換情報を含む、前記アドレス変換要求に対する応答を前記ホストから受信したことに応じ、前記第1の処理を再開するように構成されている、
請求項8に記載のメモリシステム。
【請求項12】
前記コントローラは、
前記キャッシュメモリに格納されている前記第1のアドレス変換情報を指定する無効化要求を前記ホストから受信したことに応じ、
前記キャッシュメモリの前記第1のアドレス変換情報を無効化し、
前記第1の処理を、前記第1の仮想アドレスに対応する新たなアドレス変換情報が前記ホストから取得されるまで中断するように構成されている、
請求項11に記載のメモリシステム。
【請求項13】
前記第1の情報は、前記第1のI/Oコマンドの前記完了応答であり、
前記第1の仮想アドレスは、前記第1のコンプリーションキューが存在する前記メモリにおける記憶位置に対応する仮想アドレスである、
請求項8に記載のメモリシステム。
【請求項14】
前記第1の情報は、前記第1のコンプリーションキューに完了応答が格納されたことを前記ホストに通知するための割り込みメッセージであり、
前記第1の仮想アドレスは、前記割り込みメッセージが転送されるべき前記メモリにおける記憶位置に対応する仮想アドレスである、
請求項8に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの1つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
【0003】
メモリシステムのコントローラは、ホストから受信した入出力(I/O)コマンドを処理する。そして、コントローラは、データ、応答、割り込み、といった様々な情報をホストに送信する。
【0004】
コントローラからホストへの情報の送信が遅滞すると、ホストに送信すべき情報がコントローラ内に滞留する場合がある。このような情報の滞留は、メモリシステムのI/O性能を低下させる要因となり得る。
【0005】
したがって、メモリシステムにおいては、ホストに送信すべき情報がコントローラ内に滞留することによるI/O性能の低下を軽減可能な技術が必要とされている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】米国出願公開第2021/0182212号明細書
【特許文献2】米国特許第11,182,092号明細書
【特許文献3】米国特許第10,048,881号明細書
【発明の概要】
【発明が解決しようとする課題】
【0007】
本発明の一実施形態が解決しようとする課題は、I/O性能の低下を軽減できるメモリシステムを提供することである。
【課題を解決するための手段】
【0008】
実施形態によれば、メモリシステムは、ホストに接続可能である。前記メモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備する。前記コントローラは、第1のデータの読み出しを要求し且つ前記ホストの仮想アドレス空間における第1の仮想アドレスを指定する第1のリードコマンドを前記ホストから受信したことに応じ、前記第1のデータを前記不揮発性メモリから読み出すためのコマンド処理を実行する。前記コントローラは、前記第1の仮想アドレスを、前記ホストのメモリをアクセスするための第1の物理アドレスに変換するためのアドレス変換処理を実行する。前記コントローラは、前記アドレス変換処理において、前記第1の仮想アドレスを前記第1の物理アドレスに変換するための第1のアドレス変換情報を取得するためのアドレス変換要求を前記ホストに送信する。前記コントローラは、前記第1のアドレス変換情報の取得が失敗したことを示す応答を前記ホストから受信したことに応じ、前記第1のアドレス変換情報を取得するまで、前記コマンド処理を中断し、前記第1のアドレス変換情報を取得した後、前記コマンド処理を再開する。
【図面の簡単な説明】
【0009】
【
図1】実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【
図2】実施形態に係るメモリシステムにおいて実行される、I/Oコマンドを処理するための一連の処理の手順を示す図。
【
図3】実施形態に係るメモリシステムがホストのメモリにアクセスする動作とホストの仮想マシンがホストのメモリにアクセスする動作とを示す図。
【
図4】ホストによって使用される、ゲスト物理アドレス空間とホスト物理アドレス空間との関係を示す図。
【
図5】実施形態に係るメモリシステムに発行されるリードコマンドにおいて指定される、フィジカル・リージョン・ページ(PRP)エントリと、フィジカル・リージョン・ページ・リスト(PRPリスト)とを示す図。
【
図6】実施形態に係るメモリシステムにおいて実行されるアドレス変換処理を示す図。
【
図7】実施形態に係るメモリシステムにおいて実行されるアドレス変換処理の手順を示すフローチャート。
【
図8】実施形態に係るメモリシステムにおいて実行される、リードコマンドに対するコマンド処理の手順の第1の例を示すシーケンス図。
【
図9】実施形態に係るメモリシステムにおいて実行される、リードコマンドに対するコマンド処理の手順の第2の例を示すシーケンス図。
【
図10】実施形態に係るメモリシステムにおいて実行される、リードコマンドに対するコマンド処理の手順の第3の例を示すシーケンス図。
【
図11】実施形態に係るメモリシステムにおいて実行されるアドレス変換処理の手順を示すシーケンス図。
【
図12】実施形態に係るメモリシステムにおいて実行される、不揮発性メモリからデータを読み出すコマンド処理を中断する処理の手順の例を示すシーケンス図。
【
図13】実施形態に係るメモリシステムにおいて実行される、コマンドフェッチ動作を制御する手順の第1の例を示すシーケンス図。
【
図14】実施形態に係るメモリシステムにおいて実行される、コマンドフェッチ動作を制御する手順の第2の例を示すシーケンス図。
【
図15】実施形態に係るメモリシステムにおいて実行される無効化処理の手順を示すシーケンス図。
【発明を実施するための形態】
【0010】
以下、図面を参照して、実施形態を説明する。
以下では、実施形態に係るメモリシステムがSSDとして実現されている場合を想定する。
図1は、実施形態に係るメモリシステムを含む情報処理システム1の構成例を示すブロック図である。情報処理システム1は、ホスト(ホストデバイス)2と、ソリッドステートドライブ(SSD)3とを含む。ホスト2と、SSD3とは、バス7を介して接続可能である。
【0011】
ホスト2は、情報処理装置である。ホスト2は、例えば、パーソナルコンピュータ、サーバコンピュータ、または携帯端末である。ホスト2は、SSD3にアクセスする。具体的には、ホスト2は、データを書き込むためのコマンドであるライトコマンドをSSD3に送信する。また、ホスト2は、データを読み出すためのコマンドであるリードコマンドをSSD3に送信する。
【0012】
ホスト2は、プロセッサ21と、メモリ22と、ルートコンプレックス(RC)23と、入出力メモリ管理ユニット(IOMMU)213とを含む。プロセッサ21、メモリ22、ルートコンプレックス23、およびIOMMU213は、内部バス20を介して相互接続される。
【0013】
SSD3は、ホスト2に接続可能なストレージデバイスである。SSD3は、不揮発性メモリを含む。SSD3は、不揮発性メモリにデータを書き込む。そして、SSD3は、不揮発性メモリからデータを読み出す。
【0014】
SSD3とホスト2との間の通信は、バス7を介して実行される。バス7は、ホスト2とSSD3とを接続する伝送路である。バス7は、例えば、PCI expressTM(PCIeTM)バスである。PCIeバスは、全二重伝送路である。全二重伝送路は、ホスト2からSSD3へデータおよび入出力(I/O)コマンドを送信する伝送路と、SSD3からホスト2へデータおよび応答を送信する伝送路との双方を含む。I/Oコマンドは、不揮発性メモリへのデータの書き込み、または不揮発性メモリからのデータの読み出しを行うためのコマンドである。I/Oコマンドは、例えば、ライトコマンド、またはリードコマンドである。
【0015】
ホスト2とSSD3とを接続するための論理インタフェースの規格としては、例えば、NVM expressTM(NVMeTM)規格が使用され得る。NVMe規格のインタフェースでは、少なくとも1つのサブミッションキュー(SQ)と、この少なくとも1つのサブミッションキュー(SQ)に関連付けられたコンプリーションキュー(CQ)とを含む対のキューを用いて、ホスト2とSSD3との間の通信が行われる。この対のキューは、サブミッションキュー/コンプリーションキューペア(SQ/CQペア)と称される。
【0016】
サブミッションキュー(SQ)は、SSD3にコマンドを発行するために使用されるキューである。サブミッションキュー(SQ)は、それぞれがコマンドを格納可能な複数のスロットを含む。ホスト2は、サブミッションキュー(SQ)をホスト2のメモリ22に作成する。また、ホスト2は、サブミッションキュー(SQ)クリエイトコマンドをSSD3に発行する。サブミッションキュー(SQ)が作成されたメモリ22内の記憶位置を示すアドレス、このサブミッションキュー(SQ)のサイズ、このサブミッションキュー(SQ)に関連付けられたコンプリーションキュー(CQ)の識別子、等は、サブミッションキュー(SQ)クリエイトコマンドによってSSD3に通知される。
【0017】
コンプリーションキュー(CQ)は、コマンドの完了を示す完了応答をSSD3から受信するために使用されるキューである。完了応答は、完了したコマンドのステータスを示す情報を含む。完了応答は、コマンド完了、またはコマンド完了通知とも称される。コンプリーションキュー(CQ)は、それぞれが完了応答を格納可能な複数のスロットを含む。ホスト2は、コンプリーションキュー(CQ)をホスト2のメモリ22に作成する。また、ホスト2は、コンプリーションキュー(CQ)クリエイトコマンドをSSD3に発行する。コンプリーションキュー(CQ)が作成されたメモリ22内の記憶位置を示すアドレス、およびこのコンプリーションキュー(CQ)のサイズ、等は、コンプリーションキュー(CQ)クリエイトコマンドによってSSD3に通知される。
【0018】
次に、ホスト2の構成について説明する。
【0019】
プロセッサ21は、例えばcentral processing unit(CPU)である。プロセッサ21は、SSD3、または、ホスト2に接続された他のストレージデバイスからメモリ22にロードされるソフトウェア(ホストソフトウェア)を実行する。ホストソフトウェアは、例えば、仮想マシンモニタ、仮想マシンモニタ上で実行されるオペレーティングシステムであるゲストオペレーティングシステム(ゲストOS)、アプリケーションプログラム等を含む。
【0020】
メモリ22は、例えば揮発性のメモリである。メモリ22は、メインメモリ、システムメモリ、またはホストメモリとも称される。メモリ22は、例えばダイナミックランダムアクセスメモリ(DRAM)である。メモリ22の記憶領域の一部は、SQ/CQペアを格納するために使用される。
【0021】
ホスト2とSSD3との間の通信においては、SQ/CQペアを使用して、ホスト2からSSD3へのコマンドの発行、およびSSD3からホスト2への完了応答の送信が行われる。ホスト2とSSD3との間におけるコマンド、データ、完了応答の転送は、バス7を介して実行される。
【0022】
ルートコンプレックス23は、PCIeバスに接続されたI/Oデバイス(ここではSSD3)をプロセッサ21およびメモリ22の各々に接続する回路である。ルートコンプレックス23は、プロセッサ21およびメモリ22の各々に接続される。ルートコンプレックス23は、例えば、内部バス20を介してプロセッサ21およびメモリ22の各々と接続されてもよい。また、ルートコンプレックス23は、バス7を介してSSD3との通信を実行する。
【0023】
IOMMU213は、SSD3から受信した各種要求に含まれるアドレスを変換する回路である。IOMMU213は、SSD3が使用するアドレスを、ホスト2の内部で使用されるアドレスに変換する。
【0024】
次に、SSD3の内部構成について説明する。SSD3は、コントローラ4と、不揮発性メモリ5とを含む。不揮発性メモリ5の一例は、例えば、NAND型フラッシュメモリである。以下では不揮発性メモリ5をNANDメモリ5と称する。また、SSD3は、ランダムアクセスメモリ、例えば、ダイナミックランダムアクセスメモリ(DRAM)6をさらに含んでいてもよい。
【0025】
コントローラ4は、メモリコントローラである。コントローラ4は、例えば、system-on-a-chip(SoC)のような制御回路である。コントローラ4は、NANDメモリ5に電気的に接続されている。コントローラ4は、NANDメモリ5にデータを書き込むデータ書き込み動作と、NANDメモリ5からデータを読み出すデータ読み出し動作とを実行する。また、コントローラ4は、バス7を介して、ホスト2との通信を実行する。コントローラ4とNANDメモリ5とを接続する物理インタフェースとしては、例えば、Toggle NANDフラッシュインタフェース、またはオープンNANDフラッシュインタフェース(ONFI)が使用される。コントローラ4の各部の機能は、専用ハードウェア、プログラムを実行するプロセッサ、またはこれらの組み合わせにより実現され得る。
【0026】
NANDメモリ5は、不揮発性メモリである。NANDメモリ5は、メモリセルアレイ51とページバッファ52とを含む。メモリセルアレイ51は、マトリクス状に配置された複数のメモリセルを含む。NANDメモリ5は、2次元構造のフラッシュメモリであってもよいし、3次元構造のフラッシュメモリであってもよい。
【0027】
NANDメモリ5のメモリセルアレイ51は、複数のブロックBLK0~BLKx-1を含む。ブロックBLK0~BLKx-1の各々は、複数のページ(ここではページP0~Py-1)を含む。各ページは、例えば、同一ワード線に接続された複数のメモリセルを含む。ブロックBLK0~BLKx-1の各々は、データを消去するデータ消去動作の単位である。ページP0~Py-1の各々は、後述するプログラム動作およびセンス動作の単位である。
【0028】
ページバッファ52は、例えばスタティックRAM(SRAM)で構成される。ページバッファ52は、コントローラ4とNANDメモリ5との間を転送されるデータを一時的に格納する。
【0029】
データ書き込み動作の際、コントローラ4から受信されたデータは、ページバッファ52に一時的に格納された後、メモリセルアレイ51にプログラムされる。コントローラ4から受信されたデータをページバッファ52に一時的に格納する動作をデータイン動作と称する。また、ページバッファ52に一時的に格納されたデータをメモリセルアレイ51にプログラムする動作をプログラム動作と称する。
【0030】
データ読み出し動作の際、メモリセルアレイ51から読み出されたデータは、ページバッファ52に一時的に格納された後、コントローラ4に出力される。メモリセルアレイ51から読み出されたデータをページバッファ52に一時的に格納する動作をセンス動作と称する。また、ページバッファ52に一時的に格納されたデータをコントローラ4に出力する動作をデータアウト動作と称する。
【0031】
データイン動作およびデータアウト動作の各々は、コントローラ4とNANDメモリ5との間でデータを転送する動作である。プログラム動作およびセンス動作の各々は、コントローラ4とNANDメモリ5との間のデータの転送を伴わずに、NANDメモリ5内のデータ転送を伴う動作である。したがって、NANDメモリ5に対して実行される各I/O動作(データ書き込み動作、データ読み出し動作)は、少なくとも、コントローラ4とNANDメモリ5との間でデータを転送する動作と、コントローラ4とNANDメモリ5との間のデータの転送を伴わずにNANDメモリ5内のデータ転送を伴う動作と、を含む。
【0032】
DRAM6は、揮発性メモリである。DRAM6の記憶領域の一部は、例えば、論理物理アドレス変換テーブル(logical-to-physical translation table:L2Pテーブル)61を記憶するために使用される。L2Pテーブル61は、論理アドレスそれぞれとNANDメモリ5の物理アドレスそれぞれとの間のマッピングを示すマッピング情報を格納する。さらに、DRAM6の記憶領域の一部は、内部バッファ62としても使用される。内部バッファ62は、例えば、ホスト2から受信されたライトデータ、またはNANDメモリ5から読み出されたリードデータを一時的に保持する。
【0033】
次に、コントローラ4の内部構成を説明する。コントローラ4は、ホストインタフェース(ホストI/F)41と、CPU42と、直接メモリアクセスコントローラ(DMAC)43と、スタティックRAM(SRAM)44と、NANDインタフェース(NAND I/F)45と、ECCエンコード/デコード部46と、DRAMインタフェース(DRAM I/F)47とを含む。これらホストインタフェース41と、CPU42と、DMAC43と、SRAM44と、NANDインタフェース45と、ECCエンコード/デコード部46と、DRAMインタフェース47とは、バス40を介して相互接続される。
【0034】
コントローラ4の構成要素のうち、ホスト2との通信を制御する構成要素は、フロントエンド(FE)と称される。フロントエンド(FE)は、ホストインタフェース41を含む。
【0035】
また、コントローラ4の構成要素のうち、NANDメモリ5との通信を制御する構成要素は、バックエンド(BE)と称される。バックエンド(BE)は、NANDインタフェース45と、ECCエンコード/デコード部46とを含む。
【0036】
ホストインタフェース41は、通信インタフェース回路である。ホストインタフェース41は、ホスト2との通信を実行する。ホストインタフェース41は、例えば、PCIeコントローラである。
【0037】
ホストインタフェース41は、アービトレーション機構を含む。このアービトレーション機構は、ホスト2の複数のサブミッションキューから、コマンドがフェッチされるべきサブミッションキューを選択する機構である。アービトレーション機構は、例えば、ラウンドロビンアービトレーション機構、または重み付きラウンドロビンアービトレーション機構である。
【0038】
ホストインタフェース41は、サブミッションキュー(SQ)毎に、サブミッションキューテールポインタ(SQTP)とサブミッションキューヘッドポインタ(SQHP)とを管理する。さらに、ホストインタフェース41は、コンプリーションキュー(CQ)毎に、コンプリーションキューテールポインタ(CQTP)とコンプリーションキューヘッドポインタ(CQHP)とを管理する。
【0039】
CPU42は、プロセッサである。CPU42は、ホストインタフェース41、DMAC43、SRAM44、NANDインタフェース45、ECCエンコード/デコード部46、およびDRAMインタフェース47を制御する。CPU42は、NANDメモリ5または図示しないROMに格納されている制御プログラム(ファームウェア)をSRAM44にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアは、DRAM6にロードされてもよい。
【0040】
CPU42は、例えば、フラッシュトランスレーション層(FTL)として、NANDメモリ5に記憶されたデータの管理およびNANDメモリ5に含まれるブロックの管理を実行する。NANDメモリ5に記憶されたデータの管理は、例えば、論理アドレスそれぞれとNANDメモリ5の物理アドレスそれぞれとの間の対応関係を示す情報であるマッピング情報の管理を含む。論理アドレスは、NANDメモリ5をアクセスするためにホスト2によって使用されるアドレスである。論理アドレスは、例えば、LBA(logical block address)である。NANDメモリ5の物理アドレスは、NANDメモリ5に含まれる物理的な記憶位置を示すアドレスである。CPU42は、L2Pテーブル61を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを管理する。また、NANDメモリ5に含まれるブロックの管理は、NANDメモリ5に含まれる不良ブロック(バッドブロック)の管理と、ウェアレベリングと、ガベージコレクションとを含む。
【0041】
DMAC43は、ダイレクトメモリアクセス(DMA)を実行する回路である。DMAC43は、ホスト2のメモリ22とSRAM44またはDRAM6との間のデータ転送を実行する。コントローラ4からホスト2のメモリ22にデータを転送する際、DMAC43は、メモリライト要求をホスト2のルートコンプレックス23に送信して、データをメモリ22に書き込む。メモリライト要求は、このデータが転送されるべきメモリ22における記憶位置を示すアドレスの指定を含む。ホスト2のメモリ22からコントローラ4にデータを転送する際、DMAC43は、メモリリード要求をルートコンプレックス23に送信して、データをメモリ22から取得する。メモリリード要求は、このデータが格納されているメモリ22における記憶位置を示すメモリアドレスの指定を含む。
【0042】
SRAM44は、揮発性メモリである。SRAM44の記憶領域の一部は、CPU42によってアドレス変換キャッシュ(Address Translation Cache:ATC)441として使用される。ATC441は、アドレス変換情報を記憶するキャッシュである。アドレス変換情報は、ホスト2の仮想アドレス空間における仮想アドレスを、ホスト2のメモリ22をアクセスするための物理アドレスに変換するための情報である。ホスト2の仮想アドレス空間は、ホスト2において実行される仮想マシンに割り当てられたアドレス空間である。仮想アドレス空間内の仮想アドレスとしては、例えば、メモリ22にアクセスするためにゲストOSによって使用されるアドレスであるゲスト物理アドレス(GPA)が使用される。
【0043】
NANDインタフェース45は、NANDメモリ5を制御する回路である。NANDメモリ5が複数のNAND型フラッシュメモリダイから構成されている場合、NANDインタフェース45は、複数のチャンネルを介してこれら複数のNAND型フラッシュメモリダイそれぞれと接続されていてもよい。
【0044】
ECCエンコード/デコード部46は、データのエンコードと、データのデコードとを実行する回路である。ECCエンコード/デコード部46は、NANDメモリ5にデータを書き込む際に、エンコード処理を実行する。エンコード処理において、ECCエンコード/デコード部46は、書き込むべきデータにエラー訂正コード(ECC)を冗長コードとして付加する。ECCエンコード/デコード部46は、NANDメモリ5からデータがリードされた際に、デコード処理を実行する。デコード処理において、ECCエンコード/デコード部46は、NANDメモリ5から読み出されたデータに付加されたECCを使用して、このデータの誤り訂正処理を行う。
【0045】
DRAMインタフェース47は、DRAM6を制御する回路である。DRAMインタフェース47は、DRAM6にデータを格納し、DRAM6に格納されているデータを読み出す。
【0046】
次に、CPU42の機能構成を説明する。CPU42は、コマンドフェッチ部421、コマンド処理部422、および仮想アドレス変換制御部423を含む。コマンドフェッチ部421、コマンド処理部422、および仮想アドレス変換制御部423の各々の一部または全部は、コントローラ4の専用ハードウェアによって実現されてもよい。例えば、コマンドフェッチ部421は、ホストインタフェース41によって実現されてもよい。
【0047】
コマンドフェッチ部421は、ホストインタフェース41を介してホスト2のサブミッションキュー(SQ)からI/Oコマンドそれぞれをフェッチする。これにより、コントローラ4は、ホスト2から複数のI/Oコマンドを受信し得る。
【0048】
コマンド処理部422は、フェッチされたI/Oコマンドを解釈し、I/Oコマンドに対応するコマンド処理を実行する。I/Oコマンドに対応するコマンド処理は、例えば、NANDメモリ5にデータを書き込むまたはNANDメモリ5からデータを読み出すための処理である。具体的には、コマンド処理部422は、I/Oコマンドに対応するデータ書き込み動作またはデータ読み出し動作の実行を、NANDメモリ5に指示する。NANDメモリ5に対するデータ書き込み動作またはデータ読み出し動作の指示は、NANDインタフェース45を介してNANDメモリ5に送信される。
【0049】
例えば、ホスト2から受信(フェッチ)されたI/Oコマンドがリードコマンドである場合、コマンド処理部422は、I/Oコマンドによって指定されたリード対象データをNANDメモリ5から読み出すコマンド処理を実行する。NANDメモリ5から読み出されたリード対象データは、内部バッファ62に一時的に格納される。そして、コマンド処理部422は、内部バッファ62のリード対象データをホスト2のメモリ22に転送する。
【0050】
また、コマンド処理部422は、I/Oコマンドの完了を示す完了応答を、ホストインタフェース41を介してホスト2に送信する。この場合、コマンド処理部422は、完了応答を、このI/Oコマンドがフェッチされたサブミッションキュー(SQ)に関連付けられたコンプリーションキュー(CQ)に格納する。
【0051】
また、コマンド処理部422は、コンプリーションキュー(CQ)に新たな完了応答が格納されたことをホスト2に通知するための割り込みメッセージを、ホスト2に送信する。
【0052】
仮想アドレス変換制御部423は、ホスト2のメモリ22にアクセスするために必要なアドレス変換処理を実行する。アドレス変換処理は、ホスト2からのコマンドによってコントローラ4に通知される仮想アドレスを、ホスト2のメモリ22にアクセスするための物理アドレスに変換する処理である。ホスト2からのコマンドによってコントローラ4に通知される仮想アドレスは、例えば、(1)NANDメモリ5に書き込むべきライトデータが格納されているメモリ22における記憶位置に対応する仮想アドレス、(2)ライトデータが格納されているメモリ22における複数の記憶位置に対応する複数の仮想アドレスを含むリストが格納されている記憶位置に対応する仮想アドレス、(3)NANDメモリ5から読み出されたリードデータが転送されるべきメモリ22における記憶位置に対応する仮想アドレス、(4)リードデータが転送されるべきメモリ22における複数の記憶位置に対応する複数の仮想アドレスを含むリストが格納されている記憶位置に対応する仮想アドレス、(5)サブミッションキュー(SQ)が存在するメモリ22における記憶位置に対応する仮想アドレス、(6)コンプリーションキュー(CQ)が存在するメモリ22における記憶位置に対応する仮想アドレス、または(7)割り込みメッセージが転送されるべきメモリ22における記憶位置に対応する仮想アドレス、である。仮想アドレス変換制御部423は、例えば、ATC探索処理、アドレス変換要求発行処理、または、ページリクエスト発行処理を実行する。
【0053】
ATC探索処理において、仮想アドレス変換制御部423は、対象の仮想アドレスに対応するアドレス変換情報がATC441に格納されているか否かを判定する。アドレス変換情報がATC441に格納されていた場合、仮想アドレス変換制御部423は、ATC441に格納されているアドレス変換情報を使用して、仮想アドレスをメモリ22の物理アドレスに変換する。アドレス変換情報がATC441に格納されていない場合、ATC441を使用したアドレス変換処理は、失敗する。この場合、仮想アドレス変換制御部423は、アドレス変換要求発行処理を実行する。
【0054】
アドレス変換要求発行処理において、仮想アドレス変換制御部423は、対象の仮想アドレスをメモリ22の物理アドレスに変換するためのアドレス変換要求をホスト2に送信する。アドレス変換要求を受信すると、ホスト2は、アドレス変換要求で指定された仮想アドレスに対応するアドレス変換情報を取得する処理を実行する。アドレス変換情報を取得できた場合、ホスト2は、SSD3の仮想アドレス変換制御部423にアドレス変換情報を送信する。仮想アドレス変換制御部423は、受信したアドレス変換情報を使用して、仮想アドレスをメモリ22の物理アドレスに変換する。アドレス変換情報を取得できなかった場合、ホスト2は、アドレス変換情報の取得が失敗したことを示す応答をSSD3の仮想アドレス変換制御部423に送信する。アドレス変換情報の取得が失敗したことを示す応答をホスト2から受信すると、仮想アドレス変換制御部423は、ページリクエスト発行処理を実行する。
【0055】
ページリクエスト発行処理において、仮想アドレス変換制御部423は、ページリクエストをホスト2に送信する。ページリクエストは、アドレス変換処理に必要なアドレス変換情報を準備することを要求するメッセージである。ページリクエストを受信したホスト2は、仮想アドレスを物理メモリアドレスに変換するために必要なアドレス変換情報を準備する処理を実行する。アドレス変換情報の準備が完了すると、ホスト2は、アドレス変換情報の準備の完了を示す応答をSSD3の仮想アドレス変換制御部423に送信する。アドレス変換情報の準備の完了を示す応答を受信した仮想アドレス変換制御部423は、アドレス変換要求をホスト2に再度送信する。アドレス変換要求を受信したホスト2は、準備したアドレス変換情報を含む、アドレス変換要求に対する応答を、SSD3の仮想アドレス変換制御部423に送信する。仮想アドレス変換制御部423は、受信した応答に含まれるアドレス変換情報を使用して、仮想アドレスをメモリ22の物理アドレスに変換する。
【0056】
また、仮想アドレス変換制御部423は、アドレス変換処理の状況に関する情報、例えば、(1)ATC探索処理の成功(キャッシュヒット)または失敗(キャッシュミス)を示す情報、(2)アドレス変換要求に応じてホスト2において実行されるアドレス変換情報の取得の成功または失敗を示す情報、または(3)ページリクエストに応じてホスト2において実行されるアドレス変換情報を準備する処理の完了を示す情報、をコマンド処理部422またはコマンドフェッチ部421に通知する。
【0057】
メモリ22の物理アドレスを取得するために要する時間は、アドレス変換処理の状況によって異なる。例えば、ATC441のキャッシュミスが起きた場合、メモリ22の物理アドレスを取得するために要する時間は、ATC441のキャッシュヒットが起きた場合よりも長くなる。また、アドレス変換情報の取得が失敗したことを示す応答をホスト2から受信した場合、メモリ22の物理アドレスを取得するために要する時間は、さらに長くなる。メモリ22の物理アドレスが取得されるまで、コントローラ4は、リードデータ、完了応答、割り込みメッセージ、といった情報を、ホスト2に送信することができない。このため、もしアドレス変換処理の状況を考慮せずにI/Oコマンドに対応するコマンド処理が実行されたならば、ホスト2に送信できない情報が、例えばコントローラ4の内部バッファ62に滞留し、ホスト2に送信できない情報で内部バッファ62が占有されてしまう場合がある。この場合、このI/Oコマンドの処理が滞るだけでなく、他のI/Oコマンドを新たにフェッチすることもできなくなり、SSD3のI/O処理に関する性能の低下が引き起こされ得る。
【0058】
そこで、コントローラ4は、アドレス変換処理の状況に基づいて、I/Oコマンドに対する処理を適応的に制御する。
【0059】
例えば、ホスト2の仮想アドレス空間における仮想アドレスを指定するリードコマンドをホスト2から受信した場合、コントローラ4は、リードコマンドによって指定されたリード対象データをNANDメモリ5から読み出すためのコマンド処理を開始する。
【0060】
また、コントローラ4は、リードコマンドによって指定された仮想アドレスを、ホスト2のメモリ22をアクセスするための物理アドレスに変換するためのアドレス変換処理を実行する。
【0061】
アドレス変換処理が成功した場合、コントローラ4は、アドレス変換処理で取得された物理アドレスに基づいて、データが転送されるべきメモリ22における記憶位置を特定する。ホスト2からのコマンドによって指定された仮想アドレスが、データが転送されるべきメモリ22における記憶位置に対応する仮想アドレスである場合、コントローラ4は、取得された物理アドレスによって示される記憶位置を、データが転送されるべきメモリ22における記憶位置として特定する。リードコマンドによって指定されたデータのサイズが比較的大きい場合には、指定された仮想アドレスが、複数の仮想アドレスを含むリストが格納されているメモリ22における記憶位置に対応する仮想アドレスである場合がある。この場合、コントローラ4は、データが転送されるべきメモリ22における記憶位置を特定するために、第1のアドレス変換処理と、第2のアドレス変換処理とを実行する。第1のアドレス変換処理は、指定された仮想アドレスを、複数の仮想アドレスを含むリストが格納されている記憶位置を示す第1の物理アドレスに変換する処理である。第2のアドレス変換処理は、リストに含まれる複数の仮想アドレスを、メモリ22の複数の第2の物理アドレスにそれぞれ変換する処理である。コントローラ4は、第2の物理アドレスによって示されるメモリ22における複数の記憶位置のそれぞれを、データが転送されるべきメモリ22における記憶位置として特定する。
【0062】
そして、コントローラ4は、NANDメモリ5から読み出されたデータを、メモリ22における特定された一つ又は複数の記憶位置に転送する。
【0063】
一方、アドレス変換処理が失敗した場合、コントローラ4は、アドレス変換処理に必要なアドレス変換情報が取得可能になるまで、リード対象データをNANDメモリ5から読み出すためのコマンド処理を中断する。そして、アドレス変換情報が取得可能になると、コントローラ4は、コマンド処理を再開する。
【0064】
例えば、キャッシュミスが起きた時点で、コントローラ4は、コマンド処理を中断してもよい。あるいは、キャッシュミスが起きた時点ではなく、アドレス変換情報の取得が失敗したことを示す応答をホスト2から受信した時点で、コントローラ4は、コマンド処理を中断してもよい。
【0065】
コマンド処理を中断するために、コントローラ4は、リードコマンドによって指定されたリード対象データの読み出しに必要な複数の指示のうち、NANDメモリ5にまだ送信されていない指示の各々をNANDメモリ5に送信する処理を停止してもよい。一つのリードコマンドによって指定されたリード対象データを読み出すために、例えば、10回のセンス動作をNANDメモリ5に実行させるための10個のセンス指示をNANDメモリ5に送信することが必要な場合を例として考える。例えば、4個のセンス指示がNANDメモリ5に送信済みで、残りの6個のセンス指示がまだNANDメモリ5に送信されていない場合、コントローラ4は、残りの6個のセンス指示をNANDメモリ5に送信しない。NANDメモリ5に送信済みである4個のセンス指示に基づくデータは、NANDメモリ5からコントローラ4に転送される。コントローラ4は、このデータを内部バッファ62に維持しておき、ホスト2に送信しない。コマンド処理が再開されると、コントローラ4は、残りの6個のセンス指示をNANDメモリ5に送信して、リード対象データのうちの残りのデータをNANDメモリ5から読み出す。そして、コントローラ4は、内部バッファ62に維持されているデータと、NANDメモリ5から読み出された残りのデータとを、ホスト2に送信する。
【0066】
このように、コマンド処理を中断することにより、ホスト2に送信できないリードデータによって内部バッファ62が長期間占有されてしまうことを防止できる。また、コマンド処理を中断することにより、ホスト2に送信できないリードデータがNANDメモリ5からコントローラ4に転送されることを防止できる。これにより、NANDメモリ5とコントローラ4との間のデータ転送量のピーク値を下げることができるので、NANDメモリ5およびコントローラ4の各々の消費電力のピーク値も下げることが可能となる。
【0067】
また、コントローラ4は、I/Oコマンドの完了をホスト2に通知するための第1の情報(完了応答、または割り込みメッセージ)をホスト2に送信する際にも、アドレス変換処理を実行する。このアドレス変換処理では、第1の情報(完了応答、または割り込みメッセージ)が転送されるべきホスト2のメモリ22における記憶位置に対応する仮想アドレスを、メモリ22をアクセスするための物理アドレスに変換するための処理が実行される。
【0068】
このアドレス変換処理が成功した場合、コントローラ4は、アドレス変換処理において取得された物理アドレスを使用して、第1の情報(完了応答、または割り込みメッセージ)をメモリ22に転送する。
【0069】
一方、アドレス変換処理が失敗した場合、コントローラ4は、このI/Oコマンドの完了応答が格納されるべきコンプリーションキューに関連付けられた各サブミッションキューからI/Oコマンドをフェッチする第1の処理を、アドレス変換処理に必要なアドレス変換情報が取得可能になるまで中断し、アドレス変換情報が取得可能になった後、第1の処理を再開する。この結果、ホスト2に送信できない完了応答または割り込みメッセージによってコントローラ4内のリソース(例えばSRAM44)が占有されてしまうことを防止できる。
【0070】
次に、I/Oコマンドを処理するための一連の処理の手順について説明する。
図2は、実施形態に係るメモリシステムにおいて実行される、I/Oコマンドを処理するための一連の処理の手順を示す図である。
図2では、ホスト2によってI/Oコマンドが発行されてから、このI/Oコマンドに対応する完了応答がホスト2によって処理されるまでの手順が示されている。
【0071】
ステップ1: ホスト2は、SSD3に送信すべき1つ以上の新たなI/Oコマンドをサブミッションキュー(SQ)の1つ以上のフリーSQスロットに格納する。これら1つ以上の新たなI/Oコマンドは、サブミッションキューテールポインタ(SQTP)の現在の値によって示されるスロットから始まる1つ以上のフリーSQスロットに格納される。サブミッションキュー(SQ)に格納される新たなI/Oコマンドは、ライトコマンドであってもよいし、リードコマンドであってもよいし、他のI/Oコマンドであってもよい。
図2では、サブミッションキュー(SQ)に格納されている各I/Oコマンドは「CMD」として表記されている。
【0072】
ステップ2: サブミッションキュー(SQ)に1つ以上の新たなI/Oコマンドが格納されたことをSSD3のコントローラ4に通知するために、ホスト2は、このサブミッションキュー(SQ)に対応するSSD3内のサブミッションキューテールドアベルレジスタにライトアクセスして、このサブミッションキュー(SQ)に対応するサブミッションキューテールポインタ(SQTP)の値を更新する。サブミッションキューテールポインタ(SQTP)の値は、サブミッションキュー(SQ)に格納された新たなI/Oコマンドの数だけインクリメントされる。このようなサブミッションキューテールポインタ(SQTP)の更新は、サブミッションキュー(SQ)に格納されたI/Oコマンドそれぞれの処理をコントローラ4に開始させるトリガーとなる。
【0073】
ステップ3: コントローラ4は、サブミッションキューテールポインタ(SQTP)の新たな値とサブミッションキューヘッドポインタ(SQHP)の値との差分から、サブミッションキュー(SQ)に格納された新たなI/Oコマンドの数を認識することができる。コントローラ4は、サブミッションキュー(SQ)から1つ以上の任意の数のI/Oコマンドをフェッチする。フェッチされた各I/Oコマンドは、コントローラ4のSRAM44に一時的に格納される。
【0074】
ステップ4: コントローラ4は、このサブミッションキュー(SQ)に対応するサブミッションキューヘッドポインタ(SQHP)の値がステップ3でフェッチしたI/Oコマンドの数だけ増えるように、このサブミッションキューヘッドポインタ(SQHP)の値を更新する。
【0075】
ステップ5: コントローラ4は、フェッチしたI/Oコマンドそれぞれを実行する。つまり、コントローラ4は、フェッチしたI/Oコマンドそれぞれに対応するコマンド処理を実行する。これらI/Oコマンドにそれぞれ対応するコマンド処理が実行される順序は制限されず、これらI/Oコマンドは、これらI/Oコマンドがフェッチされた順序と異なる順序で処理されてもよい。各I/Oコマンドに対応するコマンド処理においては、コントローラ4は、必要に応じて、メモリ22から内部バッファ62へのデータの転送、または内部バッファ62からメモリ22へのデータの転送を行う。
【0076】
ステップ6: あるI/Oコマンドに対応するコマンド処理が完了すると、コントローラ4は、まず、この完了したI/Oコマンドがフェッチされたサブミッションキュー(SQ)に関連付けられたコンプリーションキュー(CQ)に対応するコンプリーションキューテールポインタ(CQTP)を更新して、このコンプリーションキューテールポインタ(CQTP)の値を1増やす。
【0077】
ステップ7: コントローラ4は、この完了したI/Oコマンドのステータスを示す新たな完了応答を、このコンプリーションキュー(CQ)の次のフリーCQスロットに格納する。
図2では、コンプリーションキュー(CQ)に格納されている完了応答の各々は「CPL」として表記されている。
【0078】
ステップ8: コントローラ4は、ステップ7で完了応答が格納されたコンプリーションキュー(CQ)に関連付けられた割り込みメッセージをホスト2に送信して、新たな完了応答がコンプリーションキュー(CQ)に格納されたことをホスト2に通知する。この場合、コントローラ4は、予め決められたメモリアドレスを指定するメモリライト要求をホスト2に送信することによって、割り込みメッセージをメモリ22に転送する。割り込みメッセージを転送すべきメモリ22における記憶位置は、例えば、ホスト2によってコンプリーションキュー(CQ)毎に予め指定されていてもよい。
【0079】
ステップ9: ホスト2は、コンプリーションキューヘッドポインタ(CQHP)の現在の値によって示されるCQスロットから完了応答を取得し、取得した完了応答を処理する。
【0080】
ステップ10: ホスト2は、このコンプリーションキュー(CQ)に対応するSSD3内のコンプリーションキューヘッドドアベルレジスタにライトアクセスして、コンプリーションキューヘッドポインタ(CQHP)の値を更新する。コンプリーションキューヘッドポインタ(CQHP)の値は、ステップ9で処理された完了応答の数だけインクリメントされる。
【0081】
次に、ホスト2のメモリ22にアクセスする動作を説明する。
図3は、実施形態に係るメモリシステムがホストのメモリにアクセスする動作と、ホストの仮想マシンがホストのメモリにアクセスする動作とを示す図である。
【0082】
ホスト2においては、仮想マシンモニタ(VMM)211が実行される。VMM211は、ホスト2として機能するコンピュータ上に一つ以上の仮想マシンを作成するソフトウェアである。VMM211は、作成した各仮想マシンを動作させる。
図3では、VMM211は、仮想マシンVM0と、仮想マシンVM1とを作成しており、仮想マシンVM0と、仮想マシンVM1とが、VMM211上で実行される。仮想マシンVM0の動作は、VMM211上で実行されるオペレーティングシステムであるゲストOS#0によって制御される。仮想マシンVM1の動作は、VMM211上で実行される別のオペレーティングシステムであるゲストOS#1によって制御される。
【0083】
仮想マシンVM0のゲストOS#0は、VMM211によって仮想マシンVM0に割り当てられたゲスト物理アドレス空間(GPA空間)におけるゲスト物理アドレス(GPA)を使用して、メモリ22にアクセスする。仮想マシンVM0に割り当てられたGPA空間は、メモリ22にアクセスするためにゲストOS#0によって使用される仮想アドレス空間である。
【0084】
仮想マシンVM1のゲストOS#1は、VMM211によって仮想マシンVM1に割り当てられたゲスト物理アドレス空間(GPA空間)におけるゲスト物理アドレス(GPA)を使用して、メモリ22にアクセスする。仮想マシンVM1に割り当てられたGPA空間は、メモリ22にアクセスするためにゲストOS#1によって使用される仮想アドレス空間である。
【0085】
ホスト2は、IOMMU213に加え、メモリ管理ユニット(MMU)212を含む。
【0086】
MMU212は、プロセッサ21(
図3におけるゲストOS#0およびゲストOS#1)の各々が発行するメモリアクセス要求に含まれるGPAを、ホスト物理アドレス(HPA)に変換する。HPAは、メモリ22をアクセスするための物理アドレスである。MMU212は、HPAを使用してメモリ22にアクセスする。
【0087】
IOMMU213は、SSD3が発行したメモリアクセス要求に含まれるメモリアドレスをHPAに変換する。つまり、SSD3がメモリ22にアクセスするために発行するアドレスは、ゲストOSによって使用されるGPA空間におけるGPAである。このため、IOMMU213は、SSD3が発行したメモリアクセス要求に含まれるGPAをHPAに変換する。例えば、SSD3が仮想マシンVM0用のI/Oデバイスとして仮想マシンVM0に対応付けられている場合、IOMMU213は、ゲストOS#0のGPA空間とメモリ22のHPA空間との対応関係に基づいて、SSD3が発行したメモリアクセス要求に含まれるGPAをHPAに変換する。
【0088】
ここで、ゲストOS#0からSSD3に対してリードコマンドが発行された場合について説明する。リードコマンドは、リード対象データに対応する開始論理ブロックアドレスと、リード対象データの長さ(論理ブロックアドレス数)とに加え、データポインタを指定する。データポインタは、リード対象データが転送されるべきメモリ22内の記憶位置に関する情報である。
【0089】
メモリ22は、メモリページと称される複数の記憶位置に論理的に区分される。メモリページのサイズは、ホスト2によって設定される。設定可能なメモリページの最小サイズは、例えば4KiBである。
【0090】
リードコマンドは、フィジカル・リージョン・ページ(PRP)エントリ、PRPリスト、またはスキャッタ・ギャザー・リスト(SGL)を使用して、リード対象データが転送されるべきメモリ22内の一つ以上の記憶位置(メモリページ)を指定することができる。ここでは、リードコマンドがPRPエントリを使用する場合を想定する。リードコマンドは、第1のPRPエントリフィールド(PRP1)と、第2のPRPエントリフィールド(PRP2)とを含む。PRP1およびPRP2の各々は、PRPエントリを使用して、メモリページを指定する。PRPエントリは、メモリページへのポインタである。PRPエントリは、メモリページのページベースアドレスと、そのメモリページ内のオフセットとを含む。ページベースアドレスは、一つのメモリページを識別するアドレスである。
【0091】
ゲストOS#0は自身のGPA空間しか認識していないので、ゲストOS#0によって発行されるリードコマンドに含まれるPRP1およびPRP2の各々は、GPAを使用して、メモリページのページベースアドレスを指定する。
【0092】
リードコマンドを受信したSSD3は、受信したリードコマンドに対応するコマンド処理を実行する。SSD3は、受信したリードコマンドに基づいて、NANDメモリ5からリード対象データを読み出すコマンド処理を開始する。そして、SSD3は、リードコマンドに含まれているPRP1およびPRP2を参照して、リード対象データが転送されるべき一つまたは二つのメモリページにそれぞれ対応するGPAを取得する。なお、リード対象データのサイズが小さい場合には、リードコマンドは、PRP1だけを使用して一つのメモリページに対応するGPAだけを指定してもよい。
【0093】
SSD3は、NANDメモリ5から読み出されたリード対象データをメモリ22に転送するために、取得したGPAを指定するメモリライト要求をホスト2に送信する。このメモリライト要求は、IOMMU213によって受信される。SSD3が、仮想マシンVM0に対応付けられたI/Oデバイスである場合、IOMMU213は、HPA空間と仮想マシンVM0のGPA空間との間の対応関係に基づいて、メモリライト要求に含まれるGPAをHPAに変換する。そして、IOMMU213は、HPAを使用して、リード対象データをメモリ22に書き込む。これによって、リード対象データは、HPAが示すメモリ22における記憶位置(メモリページ)に格納される。
【0094】
次に、GPA空間とHPA空間との関係を説明する。
図4は、ホストによって使用される、GPA空間とHPA空間との関係を示す図である。ここでは、
図3と同様に、ホスト2において二つの仮想マシン(仮想マシンVM0、VM1)が実行される場合が想定されている。
【0095】
仮想マシンVM0については、0x000000から0x0FFFFFの範囲を有するGP空間#0が割り当てられている。同様に仮想マシンVM1については、0x000000から0x0FFFFFの範囲を有するGP空間#1が割り当てられている。ここで、0xは、16進表記を表している。
【0096】
これらGP空間の各々は、HPA空間のサブセットであり、HPA空間内の特定の範囲にマッピングされる。
図4の例では、GPA空間#0は、例えば、HPA空間における0x200000~0x2FFFFFの範囲にマッピングされている。この場合、例えば、GPA空間#0における0x050000は、MMU212またはIOMMU213によって、HPA空間における0x250000に変換される。GPA空間#1は、例えば、HPA空間における0x100000~0x1FFFFFの範囲にマッピングされている。この場合、例えば、GPA空間#1における0x050000は、MMU212またはIOMMU213によって、HPA空間における0x150000に変換される。
【0097】
次に、リードコマンドにおいて指定されるPRPリストを説明する。
図5は、実施形態に係るメモリシステムに発行されるリードコマンドにおいて指定される、PRPエントリとPRPリストとを示す図である。
【0098】
リード対象データのサイズがリードコマンドの2つのPRPエントリフィールド(PRP1、PRP2)によって記述可能な総サイズよりも大きい場合、つまり二つのメモリページに対応するサイズよりも大きい場合、リードコマンドの2つのPRPエントリフィールドの少なくとも一方は、PRPリストを指定するために使用される。PRPリストは、複数のPRPエントリの集合である。複数のPRPエントリを含むPRPリストは、一つのメモリページに格納される。PRPリストを指定するPRPエントリフィールドは、PRPリストが格納されているメモリページのページベースアドレスを示す。
【0099】
図5は、リードコマンドが、PRP1、PRP2を使用して、リード対象データが転送されるべきメモリ22内の4つのメモリページを指定する場合を例示している。
図5では、リードコマンドに含まれるPRP1は、PRPエントリを使用して、1つのメモリページを指定する。また、リードコマンドに含まれるPRP2は、PRPリストを使用して、3つのメモリページを指定する。
【0100】
PRP1は、一つのメモリページのページベースアドレスを示す。ここでは、PRP1は、例えば、ページ#0のメモリページのページベースアドレスを示している。
【0101】
PRP2は、PRPリストを格納している別のメモリページのページベースアドレスを示す。PRP2によって示されるメモリページには、複数のPRPエントリが含まれている。ここでは、PRP2によって示されるメモリページには、例えば、3つのPRPエントリ、つまりPRPエントリ#0~#2、が格納されている。PRPエントリ#0~#2は、例えば、ページ#1~#3の3つのメモリページのページベースアドレスをそれぞれ示す。
【0102】
リードコマンドによって開始LBA=LBA#0およびデータ長=4LBAが指定された場合を考える。1LBAに対応するデータサイズが4KiBで、メモリページのサイズが4KiBである場合、各々が4KiBのサイズを有する、LBA#0~#3に対応する4つのデータが、ページ#0~#3に対応する4つのメモリページにそれぞれ転送される。
【0103】
なお、このリードコマンドがゲストOS#0またはゲストOS#1によってSSD3に発行されるケースにおいては、PRP1およびPRP2の各々は、GPAを使用して、あるメモリページを指定する。つまり、リードコマンドのPRP1に格納されているアドレスは、ページ#0のメモリページに対応するGPAを示す。リードコマンドのPRP2に格納されているアドレスは、PRPリストを格納しているメモリページに対応するGPAを示す。
【0104】
PRPリストに含まれる複数のPRPエントリの各々も、GPAを使用して、あるメモリページを指定する。例えば、PRPリストに含まれるPRPエントリ#0に格納されているアドレスは、ページ#1のメモリページに対応するGPAを示す。PRPリストに含まれるPRPエントリ#1に格納されているアドレスは、ページ#2のメモリページに対応するGPAを示す。PRPリストに含まれるPRPエントリ#2に格納されているアドレスは、ページ#3のメモリページに対応するGPAを示す。
【0105】
このため、3つのメモリページ(ページ#1~#3)にアクセスするためには、(1)PRP2によって示されるGPAをメモリ22のHPAに変換して、PRPリストをメモリ22から取得する処理、(2)取得したPRPリストに含まれるPRPエントリ#0によって示されるGPAを、メモリ22のHPAに変換する処理、(3)取得したPRPリストに含まれるPRPエントリ#1によって示されるGPAを、メモリ22のHPAに変換する処理、(4)取得したPRPリストに含まれるPRPエントリ#2によって示されるGPAを、メモリ22のHPAに変換する処理、を実行することが必要とされる。
【0106】
なお、リードコマンドに含まれるPRPエントリフィールド(PRP1、PRP2)と同様に、ライトコマンドに含まれるPRPエントリフィールド(PRP1、PRP2)も、PRPリストが格納されているメモリページを指定することができる。
【0107】
また、リードコマンドおよびライトコマンドのいずれにおいても、PRPリストの代わりに、SGLを使用し得る。SGLも、PRPリストと同様の仕組みによって、コマンド自体に記述可能なメモリページの数よりも多くのメモリページをデータ転送に利用するために使用される。
【0108】
次に、アドレス変換処理を説明する。
図6は、実施形態に係るメモリシステムにおいて実行されるアドレス変換処理を示す図である。IOMMU213は、変換エージェント(translation agent:TA)214と、アドレス変換保護テーブル(address translation protection table:ATPT)215とを含む。IOMMU213の各部の機能は、専用ハードウェア、プログラムを実行するプロセッサ、またはこれらの組み合わせにより実現され得る。
【0109】
PCIe規格では、IOMMU213に関する機能は、address translation services(ATS)として定義されている。ATSは、ホスト2とSSD3との間でアドレス変換に関する通信を行うためのプロトコルである。以下では、
図1を参照して説明したアドレス変換要求を、ATS変換要求と称する。ATS変換要求は、仮想アドレスを、メモリ22にアクセスするための物理アドレスに変換するアドレス変換要求である。
【0110】
変換エージェント214は、RC23を介してSSD3からATS変換要求を受信したことに応じ、ATS変換処理を実行する。ATS変換処理は、受信したATS変換要求によって指定された仮想アドレスに対応するアドレス変換情報をアドレス変換保護テーブル215から取得する処理である。ATSにおいては、仮想アドレスは、Untranslated Addressとして規定されており、また、メモリ22の物理アドレスは、Translated Addressとして規定されている。仮想アドレスは、例えば、GPAである。また、物理アドレスは、例えば、HPAである。そして、変換エージェント214は、アドレス変換保護テーブル215から取得したアドレス変換情報を含むATS完了応答を、RC23を介してSSD3に送信する。
【0111】
アドレス変換保護テーブル215は、アドレス変換情報を格納するテーブルである。
【0112】
ホスト2(例えばゲストOS)によって指定された仮想アドレスをメモリ22の物理アドレスに変換する際、まず、仮想アドレス変換制御部423は、ATC441を探索して、その仮想アドレスに対応するアドレス変換情報がATC441に格納されているか否かを判定する。アドレス変換情報がATC441に格納されていない場合、仮想アドレス変換制御部423は、その仮想アドレスを指定するATS変換要求を、ホスト2のRC23に送信する。ATS変換要求をSSD3から受信した場合、RC23は、受信したATS変換要求を変換エージェント214に送信する。
【0113】
ATS変換要求を受信した変換エージェント214は、アドレス変換保護テーブル215を探索して、ATS変換要求が指定する仮想アドレスに対応するアドレス変換情報がアドレス変換保護テーブル215に格納されているか否かを判定する。アドレス変換情報がアドレス変換保護テーブル215に格納されている場合、変換エージェント214は、探索したアドレス変換情報をアドレス変換保護テーブル215から取得する。アドレス変換保護テーブル215から取得されたアドレス変換情報は、ATS変換要求によって指定された仮想アドレスに対応する物理アドレス、またはこの物理アドレスとATS変換要求によって指定された仮想アドレスの双方を含む。変換エージェント214は、取得したアドレス変換情報を含むATS完了応答を、RC23を介して仮想アドレス変換制御部423に送信する。アドレス変換情報がアドレス変換保護テーブル215に格納されていない場合、あるいはその他のエラーが生じた場合、変換エージェント214は、ATS変換処理が失敗したこと、つまり、アドレス変換情報の取得が失敗したことを示すATS完了応答を、RC23を介して仮想アドレス変換制御部423に送信する。
【0114】
アドレス変換情報を含むATS完了応答を受信した場合、仮想アドレス変換制御部423は、受信したATS完了応答のアドレス変換情報に含まれる物理アドレス、あるいは受信したATS完了応答のアドレス変換情報に含まれる仮想アドレスと物理アドレスの双方をATC441に格納する。
【0115】
アドレス変換情報の取得が失敗したことを示すATS完了応答が変換エージェント214から受信された場合、仮想アドレス変換制御部423は、アドレス変換情報を準備することを要求するメッセージであるページリクエストをホスト2のRC23に送信する。ページリクエストを受信すると、RC23は、受信したページリクエストを、例えば、プロセッサ21またはVMM211に通知する。これによって、ホスト2(プロセッサ21、またはVMM211)は、アドレス変換情報をアドレス変換保護テーブル215に準備する処理を開始する。アドレス変換情報が準備されると、ホスト2は、アドレス変換情報の準備の完了を示す、ページリクエストに対する応答を、RC23を介して仮想アドレス変換制御部423に送信する。ページリクエストに対する応答は、アドレス変換情報の準備の完了を示す応答である。ページリクエストに対する応答を受信した仮想アドレス変換制御部423は、ATS変換要求を変換エージェント214に再度送信する。
【0116】
また、例えばGPA空間とHPA空間との対応関係が更新されることよって、アドレス変換保護テーブル215のアドレス変換情報が変更された場合、変換エージェント214は、ATC441に格納されている古いアドレス変換情報を無効化するための無効化要求を、RC23を介して仮想アドレス変換制御部423に送信する。無効化要求は、特定の仮想アドレスの範囲を指定する要求である。無効化要求を受信した仮想アドレス変換制御部423は、指定された仮想アドレスの範囲に対応するアドレス変換情報がそれぞれ格納されているATC441のエントリの各々を無効化する。
【0117】
次に、アドレス変換処理の手順を説明する。
図7は、実施形態に係るメモリシステムにおいて実行されるアドレス変換処理の手順を示すフローチャートである。メモリリード要求またはメモリライト要求をホスト2に送信する際、コントローラ4の仮想アドレス変換制御部423は、アドレス変換処理を開始する。
【0118】
仮想アドレス変換制御部423は、対象のGPAをメモリ22の物理アドレスに変換するために必要なアドレス変換情報を求めてATC441を探索し、対象のGPAに対応するアドレス変換情報がATC441に存在するか否かを判定する(ステップS101)。
【0119】
対象のGPAに対応するアドレス変換情報がATC441に存在する場合、つまりATC441のキャッシュヒットが起きた場合(ステップS101でYes)、仮想アドレス変換制御部423は、ATC441からアドレス変換情報を取得する。仮想アドレス変換制御部423は、ATC441から取得したアドレス変換情報を使用して、対象のGPAをメモリ22の物理アドレス(HPA)に変換する(ステップS102)。
【0120】
対象のGPAに対応するアドレス変換情報がATC441に存在しない場合、つまりATC441のキャッシュミスが起きた場合(ステップS101でNo)、仮想アドレス変換制御部423は、対象のGPAを指定したATS変換要求をホスト2に送信する(ステップS103)。ATS変換要求を受信したホスト2は、指定されたGPAに対応するアドレス変換情報をアドレス変換保護テーブル215から取得するATS変換処理を実行する。ATS変換処理が完了すると、ホスト2は、ATS完了応答を仮想アドレス変換制御部423に送信する。アドレス変換情報の取得が成功した場合、ホスト2は、アドレス変換情報と、アドレス変換情報の取得が成功したこと、つまり、ATS変換処理が成功したことを示すステータスとを含むATS完了応答を仮想アドレス変換制御部423に送信する。アドレス変換情報の取得が失敗した場合、ホスト2は、アドレス変換情報の取得が失敗したこと、つまり、ATS変換処理が失敗したことを示すステータスを含むATS完了応答を仮想アドレス変換制御部423に送信する。
【0121】
仮想アドレス変換制御部423は、ATS完了応答をホスト2から受信する(ステップS104)。
【0122】
仮想アドレス変換制御部423は、受信したATS完了応答が、成功を示すステータスを含んでいるか否かを判定する(ステップS105)。
【0123】
受信したATS完了応答が、成功を示すステータスを含んでいる場合(ステップS105でYes)、仮想アドレス変換制御部423は、受信したATS完了応答に含まれるアドレス変換情報を、ATC441に格納する(ステップS106)。
【0124】
仮想アドレス変換制御部423は、ステップS104で受信したアドレス変換情報を使用して、対象のGPAをHPAに変換する(ステップS102)。
【0125】
また、受信したATS完了応答が、失敗を示すステータスを含んでいた場合(ステップS105でNo)、仮想アドレス変換制御部423は、ページリクエストをホスト2に送信する(ステップS107)。ページリクエストを受信したホスト2は、ページリクエストによって指定されたGPAに対応するアドレス変換情報を準備する処理を開始する。アドレス変換情報を準備する処理では、ホスト2は、ページリクエストによって指定されたGPAに対応するアドレス変換情報をアドレス変換保護テーブル215に準備する。アドレス変換情報を準備する処理が完了すると、ホスト2は、ページリクエストに対する応答を、仮想アドレス変換制御部423に送信する。
【0126】
仮想アドレス変換制御部423は、ホスト2からページリクエストに対する応答を受信する(ステップS108)。
【0127】
仮想アドレス変換制御部423は、対象のGPAを指定するATS変換要求をホスト2に再び送信する(ステップS109)。ATS変換要求を受信したホスト2は、指定されたGPAに対応するアドレス変換情報をアドレス変換保護テーブル215から取得するATS変換処理を実行する。指定されたGPAに対応するアドレス変換情報は、既にアドレス変換保護テーブル215に準備されている。したがって、ATS変換処理は、成功することが想定される。ATS変換処理が完了すると、ホスト2は、成功を示すステータスと、アドレス変換情報とを含むATS完了応答を仮想アドレス変換制御部423に送信する。
【0128】
仮想アドレス変換制御部423は、ATS完了応答をホスト2から受信する(ステップS110)。
【0129】
仮想アドレス変換制御部423は、受信したATS完了応答が、成功を示すステータスを含んでいるか否かを判定する(ステップS111)。
【0130】
受信したATS完了応答が、成功を示すステータスを含んでいる場合(ステップS111でYes)、仮想アドレス変換制御部423は、受信したATS完了応答に含まれているアドレス変換情報をATC441に格納する(ステップS112)。
【0131】
仮想アドレス変換制御部423は、受信したATS完了応答に含まれているアドレス変換情報を使用して、対象のGPAをHPAに変換する(ステップS102)。
【0132】
もし、受信したATS完了応答が、失敗を示すステータスを含んでいた場合には(ステップS111でNo)、仮想アドレス変換制御部423は、ページリクエストをホスト2に再び送信する(ステップS107)。
【0133】
このように、アドレス変換処理を実行する際に、ATC441からアドレス変換情報を取得できる場合と、ATS変換要求を送信することによってアドレス変換情報を取得できる場合と、ページリクエストを送信した後にATS変換要求を再び送信することによってアドレス変換情報を取得できる場合とでは、アドレス変換処理に必要とされる時間が異なる。そのため、実施形態に係るSSD3では、アドレス変換処理の状況に応じて、コマンド処理が制御される。
【0134】
まず、リードコマンドに対する処理の制御について説明する。
図8は、実施形態に係るメモリシステムにおいて実行される、リードコマンドに対する処理の手順の第1の例を示すシーケンス図である。
図8では、リードコマンドに含まれているPRPエントリフィールドによってPRPリストが指定される場合、つまり、PRPエントリフィールドが、PRPリストが格納されている記憶位置(メモリページ)に対応するGPAを示す場合が想定されている。また、
図8では、全てのアドレス変換処理でキャッシュヒットが起こる場合が想定されている。
【0135】
コマンドフェッチ処理において、コントローラ4のフロントエンド(FE)は、GPAを使用して、I/Oコマンドのフェッチ要求を発行する(ステップS201)。このGPAは、I/Oコマンドがフェッチされるべきサブミッションキュー(SQ)のSQスロットに対応する仮想アドレスである。コントローラ4のFEは、発行したフェッチ要求を仮想アドレス変換制御部423に渡す。
【0136】
仮想アドレス変換制御部423は、FEから受け取ったフェッチ要求に含まれるGPAに対応するアドレス変換情報を求めてATC441を探索する(ステップS202)。このGPAに対応するアドレス変換情報がATC441に格納されている場合(キャッシュヒット)、仮想アドレス変換制御部423は、アドレス変換情報をATC441から取得し、取得したアドレス変換情報を使用して、GPAをHPAに変換する(ステップS203)。
【0137】
コマンドフェッチ部421は、仮想アドレス変換制御部423が変換したHPAを使用して、I/Oコマンドをメモリ22からフェッチするためのメモリリード要求を発行する(ステップS204)。以下では、メモリリード要求をDMAリード要求と称する。ステップS204では、コマンドフェッチ部421は、変換されたHPAを含むDMAリード要求をホスト2のRC23に送信する。RC23は、コントローラ4から受信されたDMAリード要求に含まれるHPAに基づいてメモリ22のSQスロットからI/Oコマンド(ここではリードコマンド)を読み出し、読み出したリードコマンドを、DMAリード要求に対応する応答として、コントローラ4に送信する。これにより、FEは、リードコマンドをホスト2から受信する(ステップS205)。受信されたリードコマンドは、FEからBEに渡される。BEは、リードコマンドによって指定されたリード対象データをNANDメモリ5から読み出すためのコマンド処理を開始する。そして、FEは、データ転送処理に移行する。
【0138】
データ転送処理において、FEは、受信したリードコマンドのPRPエントリフィールドに含まれているGPAを使用して、PRPリストのフェッチ要求を発行する(ステップS206)。FEは、発行したフェッチ要求を仮想アドレス変換制御部423に渡す。
【0139】
仮想アドレス変換制御部423は、FEから受け取ったフェッチ要求に含まれるGPAに対応するアドレス変換情報を求めてATC441を探索する(ステップS207)。このGPAに対応するアドレス変換情報がATC441に格納されている場合(キャッシュヒット)、仮想アドレス変換制御部423は、アドレス変換情報をATC441から取得し、取得したアドレス変換情報を使用して、GPAをHPAに変換する(ステップS208)。
【0140】
コマンドフェッチ部421は、仮想アドレス変換制御部423が変換したHPAを使用して、メモリ22からPRPリストをフェッチするためのDMAリード要求を発行する(ステップS209)。ステップS209では、コマンドフェッチ部421は、変換されたHPAを含むDMAリード要求をホスト2のRC23に送信する。RC23は、コントローラ4から受信されたDMAリード要求に含まれるHPAに基づいて、メモリ22からPRPリストを読み出し、読み出したPRPリストを、DMAリード要求に対応する応答として、コントローラ4に送信する。これにより、コントローラ4のFEは、PRPリストをホスト2から受信する(ステップS210)。
【0141】
PRPリストは、リードデータが転送されるべきメモリ22の複数の記憶位置にそれぞれ対応する複数のGPAを含む。FEは、PRPリストに含まれているGPA毎に、以下の処理を実行する。
【0142】
FEは、PRPリストに含まれている一つのGPAを選択し、選択したGPAを使用して、メモリ22へのリードデータの転送要求を発行する(ステップS211)。FEは、発行した転送要求を仮想アドレス変換制御部423に渡す。
【0143】
仮想アドレス変換制御部423は、FEから受け取った転送要求に含まれるGPAに対応するアドレス変換情報を求めてATC441を探索する(ステップS212)。キャッシュヒットが起きた場合、仮想アドレス変換制御部423は、ATC441のアドレス変換情報を使用して、GPAをHPAに変換する(ステップS213)。
【0144】
DMAC43は、仮想アドレス変換制御部423が変換したHPAを使用して、リードデータをメモリ22に転送するためのメモリライト要求を発行する(ステップS214)。以下では、メモリライト要求をDMAライト要求と称する。ステップS214では、DMAC43は、変換されたHPAとリードデータとを含むDMAライト要求を、ホスト2のRC23に送信する。RC23は、コントローラ4から受信されたDMAライト要求に含まれるHPAによって示されるメモリ22の記憶位置に、受信されたDMAライト要求に含まれるリードデータを格納する。リードデータ全ての転送処理を実行するために、コントローラ4は、ステップS211~ステップS214の処理を、PRPリストに含まれるGPAの数と同じ回数だけ実行する。そして、リードデータ全ての転送処理が完了すると、FEは、完了応答転送処理に移行する。
【0145】
完了応答転送処理において、FEは、GPAを使用して、メモリ22への完了応答の転送要求を発行する(ステップS215)。このGPAは、この完了応答が転送されるべきメモリ22における記憶位置に対応するGPA、つまり、完了したリードコマンドがフェッチされたSQに関連付けられているコンプリーションキュー(CQ)の次のフリーCQスロットに対応するGPAである。FEは、発行した転送要求を仮想アドレス変換制御部423に渡す。
【0146】
仮想アドレス変換制御部423は、FEから受け取った転送要求に含まれるGPAに対応するアドレス変換情報を求めてATC441を探索する(ステップS216)。キャッシュヒットが起きた場合、仮想アドレス変換制御部423は、ATC441のアドレス変換情報を使用して、GPAをHPAに変換する(ステップS217)。
【0147】
DMAC43は、仮想アドレス変換制御部423が変換したHPAを使用して、メモリ22に完了応答を転送するためのDMAライト要求を発行する(ステップS218)。ステップS218では、DMAC43は、変換されたHPAと完了応答とを含むDMAライト要求を、ホスト2のRC23に送信する。RC23は、コントローラ4から受信されたDMAライト要求に含まれるHPAによって示されるメモリ22の記憶位置に、受信されたDMAライト要求に含まれる完了応答を格納する。そして、FEは、割り込み送信処理に移行する。
【0148】
割り込み送信処理において、FEは、GPAを使用して、メモリ22への割り込みメッセージの送信要求を発行する(ステップS219)。このGPAは、割り込みメッセージが送信されるべきメモリ22における記憶位置に対応するGPAである。割り込みメッセージは、ステップS218で完了応答が格納されたコンプリーションキュー(CQ)に関連付けられた割り込みベクタを含む。FEは、発行した送信要求を仮想アドレス変換制御部423に渡す。
【0149】
仮想アドレス変換制御部423は、FEから受け取った送信要求に含まれるGPAに対応するアドレス変換情報を求めてATC441を探索する(ステップS220)。キャッシュヒットが起きた場合、仮想アドレス変換制御部423は、ATC441のアドレス変換情報を使用して、GPAをHPAに変換する(ステップS221)。
【0150】
DMAC43は、仮想アドレス変換制御部423が変換したHPAを使用して、メモリ22に割り込みメッセージを送信するためのDMAライト要求を発行する(ステップS222)。ステップS222では、DMAC43は、変換されたHPAと割り込みメッセージとを含むDMAライト要求を、ホスト2のRC23に送信する。RC23は、コントローラ4から受信されたDMAライト要求に含まれるHPAによって示されるメモリ22の記憶位置に、受信された割り込みメッセージを格納する。そして、リードコマンドに対する一連の処理が終了する。
【0151】
次に、ATC441のキャッシュミスが起こる場合について説明する。
図9は、実施形態に係るメモリシステムにおいて実行される、リードコマンドの処理の手順の第2の例を示すシーケンス図である。
【0152】
コマンドフェッチ処理において、コントローラ4は、ステップS301~ステップS302の処理を実行する。ステップS301~ステップS302の処理は、
図8で説明したステップS201~ステップS202の処理と同じである。ステップS302でATC441のキャッシュミスが起きた場合、仮想アドレス変換制御部423は、FEから受け取ったフェッチ要求に含まれるGPAを指定するATS変換要求を、ホスト2に送信する(ステップS303)。ホスト2は、コントローラ4から受信されたATS変換要求によって指定されたUntranslated AddressであるGPAに対応するアドレス変換情報を求めてアドレス変換保護テーブル215を探索する。アドレス変換情報をアドレス変換保護テーブル215から取得できた場合、ホスト2は、取得したアドレス変換情報と、ATS変換処理の成功を示すステータスとを含むATS完了応答を、コントローラ4に送信する。
【0153】
仮想アドレス変換制御部423は、ATS完了応答をホスト2から受信する(ステップS304)。
【0154】
ATS変換処理が成功したので、仮想アドレス変換制御部423は、受信したATS完了応答に含まれるアドレス変換情報をATC441に格納する(ステップS305)。
【0155】
仮想アドレス変換制御部423は、このアドレス変換情報を使用して、GPAをHPAに変換する(ステップS306)。ステップS302~ステップS306の処理を、ATS処理と称する。
【0156】
仮想アドレス変換制御部423は、ステップS307~ステップS308の処理を実行する。ステップS307~ステップS308の処理は、
図8で説明したステップS204~ステップS205の処理と同じである。そして、FEは、データ転送処理に移行する。
【0157】
データ転送処理において、FEは、取得したリードコマンドのPRPエントリフィールドに含まれているGPAを使用して、PRPリストのフェッチ要求を発行する(ステップS309)。FEは、発行したフェッチ要求を仮想アドレス変換制御部423に渡す。
【0158】
そして、ATC441のキャッシュミスが起きると、仮想アドレス変換制御部423は、ATS処理(または、後述のATS+ページリクエストインタフェース(PRI)処理)を実行する(ステップS310)。ステップS310で実行されるATS処理は、ステップS302~ステップS306で説明したATS処理と同じである。ステップS310で実行されるATS+PRI処理は、ATS処理においてATS変換処理が失敗した場合に実行される処理である。
【0159】
PRPリストが格納されている記憶位置に対応するHPAがATS処理(またはATS+PRI処理)で取得されると、コントローラ4は、ステップS311~ステップS313の処理を実行する。ステップS311~ステップS313の処理は、
図8で説明したステップS209~ステップS211の処理と同じでる。
【0160】
PRPリストから選択されたGPAに対応するアドレス変換情報を探索するATC探索処理でATC441のキャッシュミスが起きると、仮想アドレス変換制御部423は、ATS処理(または、ATS+PRI処理)を実行する(ステップS314)。
【0161】
DMAC43は、ステップS314のATS処理(またはATS+PRI処理)で取得されたHPAを使用して、ステップS315の処理を実行する。ステップS315の処理は、
図8で説明したステップS214の処理と同じである。そして、リードデータ全ての転送処理が完了すると、FEは、完了応答転送処理に移行する。
【0162】
完了応答転送処理において、FEは、コンプリーションキュー(CQ)の次のフリーCQスロットに対応するGPAを使用して、メモリ22への完了応答の転送要求を発行する(ステップS316)。
【0163】
この転送要求に含まれるGPAに対応するアドレス変換情報を探索するATC探索処理でATC441のキャッシュミスが起きると、仮想アドレス変換制御部423は、ATS処理(または、ATS+PRI処理)を実行する(ステップS317)。
【0164】
DMAC43は、ステップS317のATS処理(またはATS+PRI処理)で取得されたHPAを使用して、ステップS318の処理を実行する。ステップS318の処理は、
図8で説明したステップS218の処理と同じである。そして、FEは、割り込み送信処理に移行する。
【0165】
割り込み送信処理において、FEは、割り込みメッセージが送信されるべき記憶位置に対応するGPAを使用して、メモリ22への割り込みメッセージの送信要求を発行する(ステップS319)。
【0166】
この送信要求に含まれるGPAに対応するアドレス変換情報を探索するATC探索処理でATC441のキャッシュミスが起きると、仮想アドレス変換制御部423は、ATS処理(または、ATS+PRI処理)を実行する(ステップS320)。
【0167】
DMAC43は、ステップS320のATS処理(またはATS+PRI処理)で取得されたHPAを使用して、ステップS321の処理を実行する。ステップS321の処理は、
図8で説明したステップS222の処理と同じである。
【0168】
次に、ATS変換処理が失敗した場合におけるリードコマンドの処理を説明する。
図10は、実施形態に係るメモリシステムにおいて実行されるリードコマンドの処理の手順の第3の例を示すシーケンス図である。
【0169】
コマンドフェッチ処理において、コントローラ4は、ステップS401~ステップS402の処理を実行する。ステップS401~ステップS402の処理は、
図8で説明したステップS201~ステップS202の処理と同じである。ステップS402でATC441のキャッシュミスが起きた場合、仮想アドレス変換制御部423は、ステップS403の処理を実行する。ステップS403の処理は、
図9で説明したステップS303の処理と同じである。
【0170】
コントローラ4からATS変換要求を受信すると、ホスト2は、ATS変換要求によって指定されたGPAに対応するアドレス変換情報を取得するために、アドレス変換保護テーブル215を探索する。ここで、ホスト2が、指定されたGPAに対応するアドレス変換情報を取得することができなかった場合を想定する。この場合、ホスト2は、ATS変換処理の失敗を示すステータスを含むATS完了応答を、コントローラ4に送信する。このため、仮想アドレス変換制御部423は、ATS変換処理の失敗を示すステータスを含むATS完了応答を、ホスト2から受信する(ステップS404)。
【0171】
仮想アドレス変換制御部423は、アドレス変換情報を準備することを要求するためのページリクエストをホスト2に送信する(ステップS405)。ページリクエストを受信したホスト2は、ページリクエストで指定されたGPAに対応するアドレス変換情報をアドレス変換保護テーブル215に準備する処理を開始する。アドレス変換保護テーブル215にアドレス変換情報を準備する処理が完了すると、ホスト2は、アドレス変換情報の準備の完了を示す応答であるページリクエストグループ応答を仮想アドレス変換制御部423に送信する。
【0172】
仮想アドレス変換制御部423は、ページリクエストグループ応答を受信する(ステップS406)。
【0173】
ページリクエストグループ応答を受信すると、仮想アドレス変換制御部423は、ステップS403で送信したATS変換要求で指定したGPAと同じGPAを指定するATS変換要求をホスト2に再び送信する(ステップS407)。ATS変換要求を受信したホスト2は、アドレス変換保護テーブル215を探索して、指定されたGPAに対応するアドレス変換情報を取得する。ホスト2は、取得したアドレス変換情報とATS変換処理の成功を示すステータスとを含むATS完了応答を、コントローラ4の仮想アドレス変換制御部423に送信する。
【0174】
仮想アドレス変換制御部423は、ATS完了応答をホスト2から受信する(ステップS408)。
【0175】
ATS変換処理が成功したので、仮想アドレス変換制御部423は、受信したATS完了応答に含まれるアドレス変換情報をATC441に格納する(ステップS409)。
【0176】
仮想アドレス変換制御部423は、このアドレス変換情報を使用して、GPAをHPAに変換する(ステップS410)。ステップS402~ステップS410の処理をATS+PRI処理と称する。
【0177】
このように、ATS+PRI処理では、ATS処理に加え、ページリクエストをホスト2に送信する処理と、ページリクエストグループ応答がホスト2から受信された後にATS変換要求をホスト2に再び送信する処理とが実行される。
【0178】
ATS+PRI処理が完了した後、コントローラ4は、ステップS411~ステップS412の処理を実行する。ステップS411~ステップS412の処理は、
図9で説明したステップS307~ステップS308の処理と同じである。
【0179】
以降のステップS413からステップS425まで処理は、
図9で説明したステップS309からステップS321までの処理と同じである。ステップS414、ステップS418、ステップS421、ステップS424の各々では、ATS変換処理が失敗したならば、ATS+PRI処理が実行される。
【0180】
次に、アドレス変換処理の状況を仮想アドレス変換制御部423からFEおよびBEに通知する処理を説明する。
図11は、実施形態に係るメモリシステムにおいて実行されるアドレス変換処理の手順を示すシーケンス図である。
図11では、アドレス変換処理においてATS+PRI処理が実行される場合が想定されている。
【0181】
コマンドフェッチ処理、データ転送処理、完了応答転送処理、および割り込み送信処理のいずれにおいても、コントローラ4は、以下の処理を実行する。
【0182】
コントローラ4のFEは、GPAを使用して各種要求(コマンドフェッチ要求、PRPリストフェッチ要求、データ転送要求、完了応答転送要求、割り込みメッセージ送信要求)を発行する(ステップS501)。
【0183】
仮想アドレス変換制御部423は、FEから受け取った各種要求に含まれるGPAに対応するアドレス変換情報を求めてATC441を探索する(ステップS502)。ATC441のキャッシュミスが起こると、仮想アドレス変換制御部423は、GPAを指定するATS変換要求をホスト2に送信する(ステップS503)。
【0184】
ATS変換要求を送信した後、仮想アドレス変換制御部423は、ATC441のキャッシュミスが起きたことを、ATC探索の結果として、コントローラ4のFEまたはBEの少なくとも一方に通知する(ステップS504)。
【0185】
そして、失敗を示すステータスを含むATS完了応答をホスト2から受信すると(ステップS505)、仮想アドレス変換制御部423は、ATS変換処理が失敗したことを、ATS変換要求の結果として、FEまたはBEの少なくとも一方に通知する(ステップS506)。
【0186】
失敗を示すステータスを含むATS完了応答をホスト2から受信した後、仮想アドレス変換制御部423は、ページリクエストをホスト2に送信する(ステップS507)。
【0187】
ページリクエストグループ応答をホスト2から受信すると(ステップS508)、仮想アドレス変換制御部423は、アドレス変換情報の準備が完了したことを、ページリクエストの結果として、コントローラ4のFEまたはBEの少なくとも一方に通知する(ステップS509)。
【0188】
そして、仮想アドレス変換制御部423は、ATS変換要求をホスト2に再び送信する(ステップS510)。ATS変換要求を受信したホスト2は、アドレス変換保護テーブル215から、指定されたGPAに対応するアドレス変換情報を取得する。ホスト2は、取得したアドレス変換情報と、成功を示すステータスとを含むATS完了応答を、仮想アドレス変換制御部423に送信する。
【0189】
ATS完了応答をホスト2から受信すると(ステップS511)、仮想アドレス変換制御部423は、ATS変換処理が成功したことを、ATS変換要求の結果として、コントローラ4のFEまたはBEの少なくとも一方に通知する(ステップS512)。
【0190】
仮想アドレス変換制御部423は、受信したATS完了応答に含まれるアドレス変換情報をATC441に格納し(ステップS513)、このアドレス変換情報を使用して、GPAをHPAに変換する(ステップS514)。
【0191】
そして、コマンドフェッチ部421またはDMAC43は、仮想アドレス変換制御部423が変換したHPAを使用して、メモリアクセス要求(DMAリード/ライト要求)をホスト2に送信する(ステップS515)。
【0192】
このように、アドレス変換処理の状況を仮想アドレス変換制御部423からFEまたはBEの少なくとも一方に通知するという機構を用いることによって、コントローラ4は、アドレス変換処理の状況を把握することができる。
【0193】
なお、
図11では、ステップS503およびステップS504において、仮想アドレス変換制御部423が、ATS変換要求を発行した後に、ATC探索結果を通知する場合について説明した。しかし、仮想アドレス変換制御部423は、ATS変換要求を発行するとき、または発行する前に、ATC探索結果を通知してもよい。また、ステップS506およびステップS507において、ATS変換要求の結果を通知した後に、ページリクエストを送信する場合について説明した。しかし、仮想アドレス変換制御部423は、ATS変換要求の結果を通知するとき、または通知する前に、ページリクエストを発行してもよい。また、ステップS509およびステップS510において、仮想アドレス変換制御部423が、ページリクエストの結果を通知した後に、ATS変換要求を再び送信する場合について説明した。しかし、仮想アドレス変換制御部423は、ATS変換要求を再び送信したとき、または送信する後に、ページリクエストの結果を通知してもよい。
【0194】
次に、データ転送処理におけるアドレス変換処理の状況に基づいて、リードコマンドに対応するコマンド処理を中断する動作を説明する。
図12は、実施形態に係るメモリシステムにおいて実行される、不揮発性メモリからデータを読み出すコマンド処理を中断する動作の手順の例を示すシーケンス図である。
図12は、データ転送処理におけるATS変換処理の失敗が、コマンド処理を中断するトリガーとして使用される場合を例として示している。
【0195】
FEは、
図8、
図9、あるいは
図10で説明したコマンドフェッチ処理を実行して、ホスト2からリードコマンドを取得する(ステップS601)。
【0196】
FEは、リードコマンドによって指定されたリード対象データをNANDメモリ5から読み出すデータ読み出し動作の実行を、BEに要求する(ステップS602)。
【0197】
BEは、データ読み出し動作を開始して、リードコマンドに対応するコマンド処理を実行する(ステップS603)。データ読み出し動作では、BEは、まず、リード対象データのうちの一部のデータをメモリセルアレイ51からページバッファ52に転送するセンス動作をNANDメモリ5に実行させるためのセンス指示を、NANDメモリ5に送信する。BEは、NANDメモリ5におけるセンス動作が完了するまで待つ。NANDメモリ5におけるセンス動作が完了すると、BEは、データアウト動作をNANDメモリ5に実行させるための幾つかのデータアウト指示をNANDメモリ5に送信する。何回かのデータアウト動作によってページバッファ52に格納されている全てのデータがコントローラ4に転送されると、BEは、リード対象データのうちの後続の一部のデータをメモリセルアレイ51からページバッファ52に転送するセンス動作をNANDメモリ5に実行させるためのセンス指示を、NANDメモリ5に送信する。このように、データ読み出し動作では、BEは、リード対象データの読み出しに必要な複数の指示(複数のセンス指示、複数のデータアウト指示)を、NANDメモリ5に送信する。
【0198】
データ読み出し動作の実行をBEに要求した後、FEは、取得したリードコマンドのPRPエントリフィールドに含まれているGPAを使用して、PRPリストのフェッチ要求を発行する(ステップS604)。FEは、発行したフェッチ要求を仮想アドレス変換制御部423に渡す。
【0199】
仮想アドレス変換制御部423は、FEから受け取ったフェッチ要求に含まれるGPAに対応するアドレス変換情報を求めてATC441を探索する(ステップS605)。
【0200】
ATC441のキャッシュミスが起きた場合、仮想アドレス変換制御部423は、フェッチ要求に含まれるGPAを指定するATS変換要求をホスト2に送信する(ステップS606)。
【0201】
失敗を示すステータスを含むATS完了応答をホスト2から受信した場合(ステップS607)、仮想アドレス変換制御部423は、ATS変換処理が失敗したことを、ATS変換要求の結果として、BEに通知する(ステップS608)。
【0202】
ATS変換処理が失敗したことが通知されると、BEは、実行中のデータ読み出し動作を一時的に停止することによって、リードコマンドに対応するコマンド処理を中断する(ステップS609)。ステップS609では、例えば、BEは、リードコマンドによって指定されたリード対象データの読み出しに必要な複数の指示のうち、NANDメモリ5にまだ送信されていない指示の各々をNANDメモリ5に送信する処理を一時的に停止する。
【0203】
このとき、ホスト2から受信された他のリードコマンドが存在する場合、BEは、実行すべきデータ読み出し動作を、他のリードコマンドに対応するデータ読み出し動作に切り換え(ステップS610)、他のリードコマンドに対応するデータ読み出し動作を実行してもよい(ステップS611)。これにより、BEは、ATS変換処理が失敗したリードコマンドよりも優先して、他のリードコマンドに対応するデータ読み出し動作を実行することができる。
【0204】
そして、ステップS608でATS変換要求の結果をBEに通知した後、仮想アドレス変換制御部423は、アドレス変換情報を準備することを要求するためのページリクエストをホスト2に送信する(ステップS612)。ページリクエストを受信したホスト2は、アドレス変換情報を準備する処理を開始する。アドレス変換情報を準備する処理が完了すると、ホスト2は、アドレス変換情報の準備が完了したことを示す応答であるページリクエストグループ応答を、仮想アドレス変換制御部423に送信する。
【0205】
ページリクエストグループ応答をホスト2から受信すると(ステップS613)、仮想アドレス変換制御部423は、ステップS606で送信したATS変換要求で指定したGPAと同じGPAを指定するATS変換要求を、ホスト2に再び送信する(ステップS614)。ATS変換要求を受信したホスト2は、アドレス変換保護テーブル215を探索して、指定されたGPAに対応するアドレス変換情報を取得する。ホスト2は、取得したアドレス変換情報と成功を示すステータスとを含むATS完了応答を、コントローラ4の仮想アドレス変換制御部423に送信する。
【0206】
アドレス変換情報と成功を示すステータスとを含むATS完了応答をホスト2から受信すると(ステップS615)、仮想アドレス変換制御部423は、ATS変換処理が成功したことを、ATS変換要求の結果として、BEに通知する(ステップS616)。
【0207】
通知を受けたBEは、ステップS609で一時停止されていたデータ読み出し動作を再開することによって、コマンド処理を再開する(ステップS617)。ステップS617では、BEは、中断されたリードコマンドに対応するリード対象データをNANDメモリ5から読み出すために必要な複数の指示のうち、NANDメモリ5にまだ送信されていない指示をNANDメモリ5に送信する処理を開始する。
【0208】
仮想アドレス変換制御部423は、ステップS615で受信したATS完了応答に含まれているアドレス変換情報をATC441に格納する(ステップS618)。
【0209】
仮想アドレス変換制御部423は、このアドレス変換情報を使用して、GPAをHPAに変換する(ステップS619)。
【0210】
コマンドフェッチ部421は、仮想アドレス変換制御部423が変換したHPAを使用して、メモリ22からPRPリストをフェッチする(ステップS620)。ステップS620では、コマンドフェッチ部421は、仮想アドレス変換制御部423が変換したHPAを含むDMAリード要求をホスト2のRC23に送信する。RC23は、コントローラ4から受信されたDMAリード要求に含まれるHPAに基づいて、メモリ22からPRPリストを読み出し、読み出したPRPリストを、コントローラ4に送信する。これにより、FEは、PRPリストをホスト2から受信する(ステップS621)。
【0211】
データ転送処理において、ATS変換処理が失敗した場合には、ATS変換処理が成功した場合と比較して、アドレス変換情報の取得に長い時間がかかる。したがって、ATS変換処理が失敗したことに応じコマンド処理を中断することにより、ホスト2に送信できないリードデータによって占有されてしまう内部バッファ62の記憶領域を最小限にすることができる。この結果、SSD3のI/O処理の性能の低下を軽減できる。また、コマンド処理を中断することにより、コントローラ4とNANDメモリ5との間のデータ転送量のピーク値を下げることができるので、NANDメモリ5およびコントローラ4の各々の消費電力のピーク値も下げることが可能となる。
【0212】
ここでは、ステップS607で受信したATS完了応答が示す結果に応じて、BEがコマンド処理を一時停止する場合について説明した。しかし、ステップS607の代わりにステップS605でATC441を探索した際にキャッシュミスしたことを、コマンド処理を一時停止するトリガーとして使用してもよい。
【0213】
データ転送処理において、ATC441のキャッシュミスが起きた場合には、ATC441のキャッシュヒットが起きた場合と比較して、アドレス変換情報の取得に長い時間がかかる。したがって、キャッシュミスが起きたことに応じコマンド処理を中断することにより、ホスト2に送信できないリードデータによって占有されてしまう内部バッファ62の記憶領域を最小限にすることができる。
【0214】
また、ここでは、ステップS615でATS完了応答を受信したことに応じて、BEがコマンド処理を再開する場合について説明した。しかし、ステップS615の代わりに、ステップS613でページリクエストグループ応答を受信したことを、コマンド処理を再開するトリガーとして使用してもよい。
【0215】
また、ここでは、PRPリストが格納されている記憶位置に対応するGPAをHPAに変換するATS変換処理が失敗したことを、コマンド処理を中断するトリガーとして使用する場合を説明した。しかし、PRPリストが取得された後も、PRPリストに含まれるGPAの各々をHPAに変換するアドレス変換処理が実行される。このアドレス変換処理においてATS変換処理が失敗した場合も、コマンド処理を中断してもよい。
【0216】
このように、コマンド処理は、PRPリストが格納されている記憶位置に対応するGPAをHPAに変換するATS変換処理、またはPRPリストに含まれるGPAの各々をHPAに変換するATS変換処理のいずれかにおいて、アドレス変換情報の取得に失敗した場合に、中断され得る。
【0217】
また、リードコマンドに含まれるPRPエントリフィールドは、PRPリストではなく、リードデータが転送されるべき記憶位置に対応するGPAを示す場合もある。この場合には、コントローラ4は、リードコマンドに対応するコマンド処理と並行して、リードデータが転送されるべき記憶位置に対応するGPAをHPAに変換するアドレス変換処理を実行してもよい。この場合、このアドレス変換処理においてATS変換処理が失敗した場合、コントローラ4は、コマンド処理を中断する。そして、ページリクエストグループ応答をホスト2から受信したことに応じ、または成功を示すATS完了応答をホスト2から受信したことに応じ、コントローラ4は、コマンド処理を再開する。
【0218】
次に、完了応答転送処理におけるアドレス変換処理の状況に基づいて、コマンドフェッチ動作を制御する動作を説明する。
図13は、実施形態に係るメモリシステムにおいて実行される、コマンドフェッチ動作を制御する動作の手順の第1の例を示すシーケンス図である。
図13では、完了応答転送処理におけるATS変換処理が失敗したことに応じて、コマンドフェッチ動作を中断する場合が想定されている。この完了応答転送処理は、完了されたリードコマンドの完了応答を送信する処理であってもよいし、完了されたライトコマンドの完了応答を送信する処理であってもよい。
【0219】
まず、FEは、完了されたI/Oコマンドに対する完了応答が格納されるべきコンプリーションキュー(CQ)の次のフリーCQスロットに対応するGPAを使用して、この完了されたI/Oコマンドに対する完了応答の転送要求を発行する(ステップS701)。FEは、発行した転送要求を仮想アドレス変換制御部423に渡す。
【0220】
仮想アドレス変換制御部423は、転送要求に含まれるGPAに対応するアドレス変換情報を求めてATC441を探索する(ステップS702)。
【0221】
ATC441のキャッシュミスが起きた場合、仮想アドレス変換制御部423は、GPAを指定するATS変換要求をホスト2に送信する(ステップS703)。
【0222】
失敗を示すステータスを含むATS完了応答をホスト2から受信した場合(ステップS704)、仮想アドレス変換制御部423は、ATS変換処理が失敗したことを、ATS変換要求の結果として、FEに通知する(ステップS705)。
【0223】
ATS変換処理が失敗したことが通知されると、FEは、完了されたI/Oコマンドに対する完了応答が格納されるべきコンプリーションキュー(CQ)に関連付けられている全てのサブミッションキュー(SQ)からのI/Oコマンドのフェッチを中断する(ステップS706)。なぜなら、これらサブミッションキュー(SQ)に格納されているI/Oコマンドに対する完了応答が転送されるべきコンプリーションキュー(CQ)は、ステップS701で発行された転送要求に含まれる完了応答が転送されるべきコンプリーションキュー(CQ)と同じコンプリーションキュー(CQ)であるためである。したがって、このコンプリーションキュー(CQ)が存在するメモリページのアドレス変換情報がアドレス変換保護テーブル215に準備されるまでは、このコンプリーションキュー(CQ)のどのスロットのHPAも取得することはできない。よって、もしこれらサブミッションキュー(SQ)それぞれからI/Oコマンドをフェッチすると、ホスト2に送信できない多数の完了応答によってコントローラ4内のリソースが占有されてしまう可能性がある。
図13の制御を実行することにより、ホスト2に送信できない完了応答によって占有されてしまうコントローラ4内のリソースを最小限にすることができる。
【0224】
なお、FEは、完了されたI/Oコマンドに対する完了応答が転送されるべきコンプリーションキュー(CQ)以外のコンプリーションキュー(CQ)に関連付けられているサブミッションキュー(SQ)からI/Oコマンドをフェッチする処理を継続して実行してもよい。
【0225】
ステップS705でATS変換要求の結果をBEに通知した後、仮想アドレス変換制御部423は、アドレス変換情報を準備することを要求するためのページリクエストをホスト2に送信する(ステップS707)。ページリクエストを受信したホスト2は、アドレス変換情報を準備する処理を開始する。アドレス変換情報を準備する処理が完了すると、ホスト2は、アドレス変換情報の準備が完了したことを示す応答であるページリクエストグループ応答を、仮想アドレス変換制御部423に送信する。
【0226】
ページリクエストグループ応答をホスト2から受信すると(ステップS708)、仮想アドレス変換制御部423は、ステップS703で送信したATS変換要求で指定したGPAと同じGPAを指定するATS変換要求を、ホスト2に再び送信する(ステップS709)。ATS変換要求を受信したホスト2は、アドレス変換保護テーブル215を探索して、指定されたGPAに対応するアドレス変換情報を取得する。ホスト2は、取得したアドレス変換情報と成功を示すステータスとを含むATS完了応答を、コントローラ4の仮想アドレス変換制御部423に送信する。
【0227】
アドレス変換情報と成功を示すステータスとを含むATS完了応答をホスト2から受信すると(ステップS710)、仮想アドレス変換制御部423は、ATS変換処理が成功したことを、ATS変換要求の結果として、FEに通知する(ステップS711)。
【0228】
通知を受けたFEは、完了されたI/Oコマンドに対する完了応答が格納されるべきCQに関連付けられている全てのサブミッションキュー(SQ)からのI/Oコマンドのフェッチを再開する(ステップS712)。
【0229】
仮想アドレス変換制御部423は、ステップS710で受信したATS完了応答に含まれているアドレス変換情報をATC441に格納する(ステップS713)。
【0230】
仮想アドレス変換制御部423は、このアドレス変換情報を使用して、GPAをHPAに変換する(ステップS714)。
【0231】
DMAC43は、仮想アドレス変換制御部423が変換したHPAを使用して、メモリ22におけるコンプリーションキュー(CQ)に、完了応答を転送する(ステップS715)。
【0232】
ここでは、ステップS704で受信したATS完了応答が示す結果に応じて、FEがコマンドフェッチ動作を中断する場合について説明した。しかし、ステップS704の代わりに、ステップS702でATC441を探索した際に、キャッシュミスしたことを、コマンドフェッチ動作を中断するトリガーとして使用してもよい。
【0233】
また、ここでは、ステップS710でATS完了応答を受信したことに応じて、FEがコマンドフェッチ動作を再開する場合について説明した。しかし、ステップS710の代わりに、ステップS708でページリクエストグループ応答を受信したことを、コマンドフェッチ動作を再開するトリガーとして使用してもよい。
【0234】
次に、割り込み送信処理におけるアドレス変換処理の状況に基づいて、コマンドフェッチ動作を制御する手順を説明する。
図14は、実施形態に係るメモリシステムにおいて実行される、コマンドフェッチ動作を制御する手順の第2の例を示すシーケンス図である。
図14では、割り込み送信処理におけるATS変換処理が失敗したことに応じて、コマンドフェッチ動作を中断する場合が想定されている。この割り込み送信処理は、リードコマンドの完了応答がコンプリーションキュー(CQ)に格納されたことをホスト2に通知するための割り込みメッセージ、またはライトコマンドの完了応答がコンプリーションキュー(CQ)に格納されたことをホスト2に通知するための割り込みメッセージのいずれを送信する処理であってもよい。
【0235】
まず、FEは、I/Oコマンドに対する完了応答が格納されたコンプリーションキュー(CQ)に対応する割り込みメッセージが送信されるべきメモリ22における記憶位置に対応するGPAを使用して、この割り込みメッセージの送信要求を発行する(ステップS801)。FEは、発行した送信要求を仮想アドレス変換制御部423に渡す。
【0236】
仮想アドレス変換制御部423は、送信要求に含まれるGPAに対応するアドレス変換情報を求めてATC441を探索する(ステップS802)。
【0237】
ATC441のキャッシュミスが起きた場合、仮想アドレス変換制御部423は、GPAを指定するATS変換要求をホスト2に送信する(ステップS803)。
【0238】
失敗を示すステータスを含むATS完了応答をホスト2から受信した場合(ステップS804)、仮想アドレス変換制御部423は、ATS変換処理が失敗したことを、ATS変換要求の結果として、FEに通知する(ステップS805)。
【0239】
ATS変換処理が失敗したことが通知されると、FEは、この割り込みメッセージに対応する全てのコンプリーションキュー(CQ)に関連付けられている全てのサブミッションキュー(SQ)からのI/Oコマンドのフェッチを中断する(ステップS806)。なぜなら、これらサブミッションキュー(SQ)に格納されているI/Oコマンドに対する割り込みメッセージが送信されるべきメモリ22における記憶位置は、ステップS801で発行された送信要求に含まれる割り込みメッセージが送信されるべきメモリ22における記憶位置と同じであるためである。よって、もしこれらサブミッションキュー(SQ)それぞれからI/Oコマンドをフェッチすると、ホスト2に送信できない多数の割り込みメッセージによってコントローラ4内のリソースが占有されてしまう可能性がある。
図14の制御を実行することにより、ホスト2に送信できない割り込みメッセージによって占有されてしまうコントローラ4内のリソースを最小限にすることができる。
【0240】
なお、FEは、送信されるべき割り込みメッセージに対応するコンプリーションキュー(CQ)以外のコンプリーションキュー(CQ)に関連付けられているサブミッションキュー(SQ)からI/Oコマンドをフェッチする処理を継続して実行してもよい。
【0241】
ステップS805でATS変換要求の結果をFEに通知した後、仮想アドレス変換制御部423は、アドレス変換情報を準備することを要求するためのページリクエストをホスト2に送信する(ステップS807)。ページリクエストを受信したホスト2は、アドレス変換情報を準備する処理を開始する。アドレス変換情報を準備する処理が完了すると、ホスト2は、アドレス変換情報の準備が完了したことを示す応答であるページリクエストグループ応答を、仮想アドレス変換制御部423に送信する。
【0242】
ページリクエストグループ応答をホスト2から受信すると(ステップS808)、仮想アドレス変換制御部423は、ステップS803で送信したATS変換要求で指定したGPAと同じGPAを指定するATS変換要求を、ホスト2に再び送信する(ステップS809)。ATS変換要求を受信したホスト2は、アドレス変換保護テーブル215を探索して、指定されたGPAに対応するアドレス変換情報を取得する。ホスト2は、取得したアドレス変換情報と成功を示すステータスとを含むATS完了応答を、コントローラ4の仮想アドレス変換制御部423に送信する。
【0243】
アドレス変換情報と成功を示すステータスとを含むATS完了応答をホスト2から受信すると(ステップS810)、仮想アドレス変換制御部423は、ATS変換処理が成功したことを、ATS変換要求の結果として、FEに通知する(ステップS811)。
【0244】
通知を受けたFEは、この割り込みメッセージに対応するすべてのコンプリーションキュー(CQ)に関連付けられている全てのサブミッションキュー(SQ)からのI/Oコマンドのフェッチを再開する(ステップS812)。
【0245】
仮想アドレス変換制御部423は、ステップS810で受信したATS完了応答に含まれているアドレス変換情報をATC441に格納する(ステップS813)。
【0246】
仮想アドレス変換制御部423は、このアドレス変換情報を使用して、GPAをHPAに変換する(ステップS814)。
【0247】
DMAC43は、仮想アドレス変換制御部423が変換したHPAを使用して、割り込みメッセージをメモリ22に転送する(ステップS815)。
【0248】
ここでは、ステップS804で受信したATS完了応答が示す結果に応じて、FEがコマンドフェッチ動作を中断する場合について説明した。しかし、ステップS804の代わりに、ステップS802でATC441を探索した際に、キャッシュミスしたことを、コマンドフェッチ動作を中断するトリガーとして使用してもよい。
【0249】
また、ここでは、ステップS810でATS完了応答を受信したことに応じて、FEがコマンドフェッチ動作を再開する場合について説明した。しかし、ステップS810の代わりに、ステップS808でページリクエストグループ応答を受信したことを、コマンドフェッチ動作を再開するトリガーとして使用してもよい。
【0250】
次に、無効化コマンドを受信したことに応じて、コマンドフェッチ動作を制御する手順を説明する。
図15は、実施形態に係るメモリシステムにおいて実行される無効化処理の手順を示すシーケンス図である。
【0251】
まず、アドレス変換保護テーブル215のアドレス変換情報が変更された場合、ホスト2は、ATC441の古いアドレス変換情報を無効化するためのATS無効化要求をコントローラ4に送信する。このATS無効化要求は、無効化すべきアドレス変換情報に対応するGPAを指定する。
【0252】
ATS無効化要求をホスト2から受信すると(ステップS901)、仮想アドレス変換制御部423は、受信した無効化要求によって指定されるGPAに対応するATC441のエントリを特定し、このエントリに格納されているアドレス変換情報を無効化する(ステップS902)。
【0253】
仮想アドレス変換制御部423は、受信したATS無効化要求に対する完了応答をホスト2に送信する(ステップS903)。
【0254】
仮想アドレス変換制御部423は、ステップS902で無効化されたアドレス変換情報に対応するGPAを、FEに通知する(ステップS1204)。
【0255】
FEは、通知されたGPAがコンプリーションキュー(CQ)に対応するGPAであるか否かを判定する。通知されたGPAがいずれかのコンプリーションキュー(CQ)に対応するGPAである場合、FEは、コンプリーションキュー(CQ)に対応するGPAをHPAに変換するための新たなアドレス変換情報がホスト2から取得されるまで、このコンプリーションキュー(CQ)に関連付けられている全てのサブミッションキュー(SQ)からのI/Oコマンドのフェッチを中断する(ステップS905)。
【0256】
この場合も、ホスト2に送信できない多数の完了応答によってコントローラ4内のリソースが占有されてしまうことを防止することができる。
【0257】
以上説明したように、本実施形態によれば、コントローラ4は、ホスト2の仮想アドレス空間における仮想アドレスを指定するリードコマンドをホスト2から受信した場合、リードコマンドによって指定されたリード対象データをNANDメモリ5から読み出すためのコマンド処理を開始する。また、コントローラ4は、リードコマンドによって指定された仮想アドレスであるGPAを、ホスト2のメモリ22をアクセスするための物理アドレスであるHPAに変換するためのアドレス変換処理を実行する。アドレス変換処理が失敗した場合、コントローラ4は、アドレス変換処理に必要なアドレス変換情報が取得可能になるまで、リード対象データをNANDメモリ5から読み出すためのコマンド処理を中断する。そして、アドレス変換情報が取得可能になると、コントローラ4は、コマンド処理を再開する。このように、コマンド処理を中断することにより、ホスト2に送信できないリードデータによって内部バッファ62が長期間占有されてしまうことを防止できる。また、コマンド処理を中断することにより、ホスト2に送信できないリードデータがNANDメモリ5からコントローラ4に転送されることを防止できる。これにより、NANDメモリ5とコントローラ4との間のデータ転送量のピーク値を下げることができるので、NANDメモリ5およびコントローラ4の各々の消費電力のピーク値も下げることが可能となる。
【0258】
また、コントローラ4は、I/Oコマンドの完了をホスト2に通知するための情報(完了応答、または割り込みメッセージ)をホスト2に送信する際にも、アドレス変換処理を実行する。このアドレス変換処理では、完了応答、または割り込みメッセージが転送されるべきホスト2のメモリ22における記憶位置に対応する仮想アドレスであるGPAを、メモリ22をアクセスするための物理アドレスであるHPAに変換するための処理が実行される。
【0259】
このアドレス変換処理が失敗した場合、コントローラ4は、このI/Oコマンドの完了応答が格納されるべきコンプリーションキューに関連付けられた各サブミッションキューからI/Oコマンドをフェッチする処理を、アドレス変換処理に必要なアドレス変換情報が取得可能になるまで中断し、アドレス変換情報が取得可能になった後、このコンプリーションキューに関連付けられた各サブミッションキューからI/Oコマンドをフェッチする処理を再開する。この結果、ホスト2に送信できない完了応答または割り込みメッセージによってコントローラ4内のリソースが占有されてしまうことを防止できる。
【0260】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0261】
1…情報処理システム、2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、6…DRAM、7…バス、20…内部バス、21…プロセッサ、22…メモリ、23…ルートコンプレックス、40…バス、41…ホストインタフェース、42…CPU、43…DMAC、44…SRAM、45…NANDインタフェース、46…ECCエンコード/デコード部、47…DRAMインタフェース、51…メモリセルアレイ、52…ページバッファ、61…L2Pテーブル、62…内部バッファ、211…VMM、212…MMU、213…IOMMU、214…変換エージェント、215…アドレス変換保護テーブル、421…コマンドフェッチ部、422…コマンド処理部、423…仮想アドレス変換制御部、441…ATC。