(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023161884
(43)【公開日】2023-11-08
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
G06F 13/38 20060101AFI20231031BHJP
G06F 13/42 20060101ALI20231031BHJP
G06F 12/00 20060101ALI20231031BHJP
【FI】
G06F13/38 310D
G06F13/42 310
G06F13/38 350
G06F12/00 560B
G06F12/00 597U
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2022072506
(22)【出願日】2022-04-26
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】原村 颯
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160CB01
(57)【要約】
【課題】 不揮発性メモリに対するアクセス性能を向上できるメモリシステムを実現する。
【解決手段】 実施形態によれば、メモリシステムは、バッファ、不揮発性メモリ、およびコントローラを具備する。バッファは、ホストに送信されるべきパケットを第1上限数まで記憶可能である。コントローラは、不揮発性メモリに対するアクセスに関連するパケットを生成し、生成されたパケットをバッファに格納する。コントローラは、パケットを、バッファに記憶されていることが許可される数が第1上限数に制限される第1タイプのパケットと、バッファに記憶されていることが許可される数が第1上限数より小さい第2上限数に制限される第2タイプのパケットと、に分類し、バッファに記憶されている第2タイプのパケットの数を示す第2滞留パケット数が第2上限数以上であるならば、第2タイプの第2パケットを生成しないか、生成された第2パケットをバッファに格納しない。
【選択図】
図13
【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
前記ホストに送信されるべきパケットを第1上限数まで記憶可能であるバッファと、
不揮発性メモリと、
前記不揮発性メモリに対するアクセスに関連するパケットを生成し、前記生成されたパケットを前記バッファに格納し、前記バッファに1つ以上の前記パケットが記憶されている場合、前記1つ以上のパケットを前記バッファに記憶された順に前記ホストに送信するコントローラと、
を具備し、
前記コントローラは、
前記パケットを、前記バッファに記憶されていることが許可される数が前記第1上限数に制限される第1タイプのパケットと、前記バッファに記憶されていることが許可される数が前記第1上限数より小さい第2上限数に制限される第2タイプのパケットと、に分類し、
前記第1タイプのパケットが生成されるべき場合、
前記バッファに記憶されている前記パケットの数を示す第1滞留パケット数が、前記第1上限数未満であるならば、前記第1タイプの第1パケットを生成し、生成された前記第1パケットを前記バッファに格納し、
前記第1滞留パケット数が前記第1上限数以上であるならば、前記第1パケットを生成しないか、あるいは前記生成された第1パケットを前記バッファに格納せず、
前記第2タイプのパケットが生成されるべき場合、
前記バッファに記憶されている前記第2タイプのパケットの数を示す第2滞留パケット数が、前記第2上限数未満であるならば、前記第2タイプの第2パケットを生成し、生成された前記第2パケットを前記バッファに格納し、
前記第2滞留パケット数が前記第2上限数以上であるならば、前記第2パケットを生成しないか、あるいは前記生成された第2パケットを前記バッファに格納しない、
メモリシステム。
【請求項2】
前記第1タイプは、コマンドを前記ホストのメモリから読み出すための第1メモリリード要求タイプと、応答を前記ホストの前記メモリに書き込むための第1メモリライト要求タイプと、のいずれかであり、
前記第2タイプは、前記不揮発性メモリから読み出されたデータを前記ホストの前記メモリに書き込むための第2メモリライト要求タイプと、前記不揮発性メモリに書き込まれるべきデータを前記ホストの前記メモリから読み出すための第2メモリリード要求タイプと、のいずれかである、
請求項1に記載のメモリシステム。
【請求項3】
前記コントローラは、
前記第1滞留パケット数が前記第2上限数以上であり、且つ、前記第2滞留パケット数が前記第2上限数未満であるならば、前記第2パケットを生成し、生成された前記第2パケットを前記バッファに格納する、
請求項1に記載のメモリシステム。
【請求項4】
前記第1滞留パケット数は、前記バッファに記憶されている前記第1タイプのパケットの数と前記第2タイプのパケットの数の合計である、
請求項1に記載のメモリシステム。
【請求項5】
前記コントローラは、さらに、
前記第2タイプのパケットが前記バッファに格納されたことに応じ、前記第2滞留パケット数に1を加算し、
前記第2タイプのパケットが前記バッファから消去されたことに応じ、前記第2滞留パケット数から1を減算する、
請求項1に記載のメモリシステム。
【請求項6】
前記第2上限数は、前記パケットが前記バッファを通過する速度を表すデータレートに基づいて決定される、
請求項1に記載のメモリシステム。
【請求項7】
前記コントローラは前記バッファを含む、
請求項1に記載のメモリシステム。
【請求項8】
前記第1上限数に対応する前記パケットのサイズの合計は、前記バッファの記憶容量よりも小さい、
請求項1に記載のメモリシステム。
【請求項9】
前記不揮発性メモリはNAND型フラッシュメモリである、
請求項1に記載のメモリシステム。
【請求項10】
PCI Express規格に準拠したシリアルインタフェースを介して前記ホストに接続可能である、
請求項1乃至請求項9のいずれか一項に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【0002】
ホストとメモリシステムとを接続するためのインタフェース規格の1つとして、PCI Express(PCIe)(登録商標)規格が知られている。PCIe規格に準拠したインタフェースにより、ホストとメモリシステムとはリンクと称される伝送経路を介して接続される。リンク上では、パケットを用いてデータが伝送される。パケットを用いて伝送されるデータは、例えば、ホストからメモリシステムへのコマンド、メモリシステムからホストへの応答、またはユーザデータを含む。
【0003】
メモリシステムからホストに送信されるべきパケットは、メモリシステムのバッファに格納される。バッファに複数のパケットが記憶されている場合、それら複数のパケットは、バッファに格納された順に、ホストに送信される。つまり、あるパケットは、そのパケットが格納された際にバッファに既に記憶されているパケット全てがホストに送信された後に、送信される。そのため、バッファに既に記憶されているパケットの送信に要する時間は、後に格納されたパケットをホストに送信する際のオーバーヘッドになる。
【0004】
ホストは、メモリシステムから送信されるある種のパケットに対して、メモリシステムに応答を送信する。そのようなパケットがメモリシステムから送信される際のオーバーヘッドが大きいほど、パケットに対する応答をメモリシステムが取得するまでの時間は遅延する。その場合、メモリシステムでは、例えば、単位期間においてホストから取得されるコマンドの数が減少する可能性がある。不揮発性メモリに対するアクセスを要求するコマンドが、単位期間においてホストから取得される数が減少したならば、不揮発性メモリに対するアクセス性能が低下し得る。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】米国特許出願公開第2019/0229901号明細書
【特許文献2】米国特許出願公開第2017/0091108号明細書
【特許文献3】米国特許出願公開第2021/0109681号明細書
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明の一実施形態は、不揮発性メモリに対するアクセス性能を向上できるメモリシステムを提供する。
【課題を解決するための手段】
【0007】
実施形態によれば、メモリシステムは、ホストに接続可能である。メモリシステムは、バッファ、不揮発性メモリ、およびコントローラを具備する。バッファは、ホストに送信されるべきパケットを第1上限数まで記憶可能である。コントローラは、不揮発性メモリに対するアクセスに関連するパケットを生成し、生成されたパケットをバッファに格納し、バッファに1つ以上のパケットが記憶されている場合、1つ以上のパケットをバッファに記憶された順にホストに送信する。コントローラは、パケットを、バッファに記憶されていることが許可される数が第1上限数に制限される第1タイプのパケットと、バッファに記憶されていることが許可される数が第1上限数より小さい第2上限数に制限される第2タイプのパケットと、に分類する。コントローラは、第1タイプのパケットが生成されるべき場合、バッファに記憶されているパケットの数を示す第1滞留パケット数が、第1上限数未満であるならば、第1タイプの第1パケットを生成し、生成された第1パケットをバッファに格納し、第1滞留パケット数が第1上限数以上であるならば、第1パケットを生成しないか、あるいは生成された第1パケットをバッファに格納しない。コントローラは、第2タイプのパケットが生成されるべき場合、バッファに記憶されている第2タイプのパケットの数を示す第2滞留パケット数が、第2上限数未満であるならば、第2タイプの第2パケットを生成し、生成された第2パケットをバッファに格納し、第2滞留パケット数が第2上限数以上であるならば、第2パケットを生成しないか、あるいは生成された第2パケットをバッファに格納しない。
【図面の簡単な説明】
【0008】
【
図1】実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【
図2】同実施形態に係るメモリシステムにおけるPCIeインタフェースおよびNVMeコントローラの構成例を示すブロック図。
【
図3】同実施形態に係るメモリシステムにおいて用いられるトランザクションレイヤパケット(TLP)管理テーブルの構成例を示す図。
【
図4】同実施形態に係るメモリシステムからホストに送信されるTLPのオーバーヘッドの例を示す図。
【
図5】同実施形態に係るメモリシステムからホストに送信されるTLPのオーバーヘッドの別の例を示す図。
【
図6】ホストから同実施形態に係るメモリシステムに送信されるTLPのオーバーヘッドの例を示す図。
【
図7】同実施形態に係るメモリシステムにおけるTLP格納制御動作の例を示すシーケンス図。
【
図8】同実施形態に係るメモリシステムにおいて更新されたTLP管理テーブルの例を示す図。
【
図9】同実施形態に係るメモリシステムにおけるTLP消去制御動作の例を示すシーケンス図。
【
図10】同実施形態に係るメモリシステムにおいて更新されたTLP管理テーブルの別の例を示す図。
【
図11】同実施形態に係るメモリシステムにおいて、(A)上限数が設定されていない場合のバッファ滞留時間の例と、(B)上限数が設定されている場合のバッファ滞留時間の例とを示す図。
【
図12】同実施形態に係るメモリシステムにおいて、TLPが送信バッファを通過する速度を表すデータレートの例を示す図。
【
図13】同実施形態に係るメモリシステムにおいて実行される格納制御処理の手順の例を示すフローチャート。
【
図14】同実施形態に係るメモリシステムにおいて実行される第1更新処理の手順の例を示すフローチャート。
【
図15】同実施形態に係るメモリシステムにおいて実行される第2更新処理の手順の例を示すフローチャート。
【発明を実施するための形態】
【0009】
以下、実施の形態について図面を参照して説明する。
【0010】
まず
図1を参照して、第1実施形態に係るメモリシステムを含む情報処理システム1の構成の例を説明する。情報処理システム1は、ホストデバイス2とメモリシステム3とを含む。
【0011】
ホストデバイス2は、データをメモリシステム3に格納する情報処理装置である。ホストデバイス2は、例えば、大量且つ多様なデータをメモリシステム3に格納するストレージサーバ、またはパーソナルコンピュータである。以下では、ホストデバイス2を、ホスト2と称する。
【0012】
メモリシステム3は、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。不揮発性メモリは、例えば、NAND型フラッシュメモリである。メモリシステム3は、ストレージデバイスとも称される。メモリシステム3は、例えば、ソリッドステートドライブ(SSD)として実現される。
【0013】
メモリシステム3は、ホスト2のストレージとして使用され得る。メモリシステム3は、ホスト2に接続される。
【0014】
ホスト2とメモリシステム3とを接続するためのインタフェースは、PCI Express(PCIe)(登録商標)、NVM Express(NVMe)(登録商標)等の規格に準拠する。
【0015】
メモリシステム3は、例えば、NAND型フラッシュメモリ4、ダイナミックランダムアクセスメモリ(DRAM)5、およびコントローラ6を備える。
【0016】
NAND型フラッシュメモリ4は、1つ以上のメモリチップを含む。各メモリチップは、複数のブロックを含む。1つのブロックは、データ消去動作の最小単位として機能する。ブロックは、「消去ブロック」、または「物理ブロック」と称されることもある。複数のブロックのそれぞれは、複数のページを含む。複数のページのそれぞれは、単一のワード線に接続された複数のメモリセルを含む。1つのページは、データ書き込み動作およびデータ読み出し動作の単位として機能する。なお、ワード線がデータ書き込み動作およびデータ読み出し動作の単位として機能してもよい。
【0017】
DRAM5は、揮発性のメモリである。DRAM5の記憶領域は、例えば、ファームウェア(FW)の格納領域、論理物理アドレス変換テーブルのキャッシュ領域、およびユーザデータのバッファ領域として割り当てられる。
【0018】
コントローラ6は、NAND型フラッシュメモリ4およびDRAM5を制御するメモリコントローラである。コントローラ6は、例えば、System-on-a-chip(SoC)のような回路によって実現される。コントローラ6は、SRAMまたはDRAMを内蔵していてもよい。この場合、コントローラ6の外部のDRAM5が設けられていなくてもよい。
【0019】
コントローラ6は、例えば、CPU11、NANDインタフェース(NAND I/F)12、DRAMインタフェース(DRAM I/F)13、およびホストインタフェース(ホストI/F)14を含む。これらCPU11、NAND I/F12、DRAM I/F13、およびホストI/F14は、バス10を介して接続されていてもよい。
【0020】
CPU11は、NAND I/F12、DRAM I/F13、およびホストI/F14を制御するように構成されたプロセッサである。CPU11は、NAND型フラッシュメモリ4からDRAM5にロードされたFWを実行することによって、様々な処理を行う。FWは、CPU11に様々な処理を実行させるための命令群を含む制御プログラムである。CPU11は、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU11の動作は、CPU11によって実行されるFWによって制御される。
【0021】
NAND I/F12は、コントローラ6とNAND型フラッシュメモリ4とを電気的に接続する。NAND I/F12は、Toggle DDR、Open NAND Flash Interface(ONFI)等のインタフェース規格に対応する。
【0022】
NAND I/F12は、NAND型フラッシュメモリ4を制御するように構成されたNAND制御回路として機能する。NAND I/F12は、複数のチャネル(Ch)を介して、NAND型フラッシュメモリ4内の複数のメモリチップにそれぞれ接続されていてもよい。複数のメモリチップが並列に駆動されることにより、NAND型フラッシュメモリ4全体に対するアクセスを広帯域化することができる。
【0023】
DRAM I/F13は、DRAM5へのアクセスを制御するように構成されたDRAM制御回路として機能する。
【0024】
ホストI/F14は、メモリシステム3とホスト2との間の通信を行うインタフェースとして機能する回路である。ホストI/F14は、ホスト2にパケットを送信するための回路と、ホスト2からパケットを受信するための回路とを含む。パケットは、例えば、PCIe規格に準拠したパケットである。パケットは、例えば、コマンド、応答、またはユーザデータを含む。コマンドは、例えば、入出力(I/O)コマンド、または各種制御コマンドである。I/Oコマンドは、例えば、リードコマンド、またはライトコマンドである。
【0025】
ホストI/F14は、例えば、PCIe I/F21とNVMeコントローラ22とを備える。
【0026】
PCIe I/F21は、シリアルインタフェースを介してホスト2と接続する回路である。このシリアルインタフェースは、ホスト2とメモリシステム3とを相互接続可能なリンク31を含む。PCIe I/F21は、例えば、PCIe規格に準拠した物理的な接続形式を有する。PCIe I/F21は、リンク31を介してデータを物理的に送受信するインタフェース動作を行う。リンク31では、パケットの形態でデータが伝送される。以下では、リンク31を介して伝送されるパケットを、物理パケットと称する。
【0027】
PCIe I/F21はさらに、リンク31を管理し、NVMeコントローラ22とデータをやり取りするための処理を行う。より具体的には、PCIe I/F21は、NVMeコントローラ22からトランザクションレイヤパケット(TLP)を受け取る。PCIe I/F21は、受け取ったTLPを含む物理パケットを、リンク31を介してホスト2に送信する。また、PCIe I/F21は、リンク31を介してホスト2から物理パケットを受信する。PCIe I/F21は、受信された物理パケットを処理して、TLPを取得する。PCIe I/F21は、取得されたTLPをNVMeコントローラ22に送出する。
【0028】
TLPは、PCIe規格で規定されたトランザクションレイヤのパケットである。TLPは、例えば、NAND型フラッシュメモリ4に対するアクセスに関連するパケットである。TLPは、例えば、要求と応答のいずれかを含む。TLPは、ユーザデータをさらに含み得る。TLPにはシーケンス番号が付与される。シーケンス番号により、対応する1つのTLPが一意に特定される。また、PCIe規格で規定されたTLPのトランザクションタイプには、例えば、メモリリード要求(MRd)、メモリライト要求(MWr)、応答(Cpl)、データ付き応答(CplD)、タイプ0およびタイプ1のコンフィグレーションリード(CfgRd0およびCfgRd1)、並びにタイプ0およびタイプ1のコンフィグレーションライト(CfgWr0およびCfgWr1)が含まれる。
【0029】
本実施形態のメモリシステム3では、トランザクションタイプと用途との組み合わせに基づくTLPのタイプを規定する。用途は、例えば、コマンドの伝送、コマンドに対する応答の伝送、およびユーザデータの伝送のいずれかである。以下では、トランザクションタイプと用途との組み合わせに基づくTLPのタイプを、TLPタイプと称する。TLPタイプには、例えば、サブミッションキュー(SQ)fetch用のメモリリード要求(SQ fetch用MRd)タイプ、SQ fetch用のデータ付き応答(SQ fetch用CplD)タイプ、コンプリーションキュー(CQ)entry用のメモリライト要求(CQ entry用MWr)タイプ、リードデータ用のメモリライト要求(リードデータ用MWr)タイプ、ライトデータ用のメモリリード要求(ライトデータ用MRd)タイプ、ライトデータ用のデータ付き応答(ライトデータ用CplD)タイプ、およびポインタ用のメモリライト要求(ポインタ用MWr)タイプが含まれる。TLPタイプには、トランザクションタイプと用途との様々な組み合わせに基づくタイプがさらに含まれ得る。
【0030】
SQ fetch用MRdタイプは、ホスト2に設けられたサブミッションキューからコマンドを読み出すメモリリード要求を表すタイプである。サブミッションキューは、複数のコマンドを記憶可能なキューである。サブミッションキューから読み出されたコマンドは、例えば、NAND型フラッシュメモリ4に対するアクセスを要求するI/Oコマンドである。
【0031】
SQ fetch用CplDタイプは、SQ fetch用MRdタイプのTLPに対するデータ付き応答を表すタイプである。SQ fetch用CplDタイプのTLPは、SQ fetch用MRdタイプのTLPに応じてサブミッションキューから読み出されたコマンドを含む。
【0032】
CQ entry用MWrタイプは、ホスト2に設けられたコンプリーションキューに、コマンドに対する応答を書き込むメモリライト要求を表すタイプである。コンプリーションキューは、複数の応答を記憶可能なキューである。
【0033】
リードデータ用MWrタイプは、リードデータをホスト2内の記憶領域に書き込むメモリライト要求を表すタイプである。リードデータは、リードコマンドに応じてNAND型フラッシュメモリ4から読み出されたユーザデータである。
【0034】
ライトデータ用MRdタイプは、ライトデータをホスト2内の記憶領域から読み出すメモリリード要求を表すタイプである。ライトデータは、ライトコマンドに応じてNAND型フラッシュメモリ4に書き込まれるべきユーザデータである。
【0035】
ライトデータ用CplDタイプは、ライトデータ用MRdタイプのTLPに対するデータ付き応答を表すタイプである。ライトデータ用CplDタイプのTLPは、ライトデータ用MRdタイプのTLPに応じてホスト2内の記憶領域から読み出されたユーザデータ(すなわち、ライトデータ)を含む。
【0036】
ポインタ用MWrタイプは、SQ TailポインタとCQ Headポインタのいずれかの値を、対応するドアベルレジスタに書き込むメモリライト要求を表すタイプである。SQ Tailポインタは、コマンドが書き込まれるべきサブミッションキュー内の位置を示す。CQ Headポインタは、応答が取得されるべきコンプリーションキュー内の位置を示す。SQ TailポインタとCQ Headポインタそれぞれのドアベルレジスタは、メモリシステム3に設けられる。
【0037】
PCIe I/F21は、TLPを、TLPタイプ毎に分類して処理し得る。
【0038】
NVMeコントローラ22は、NAND型フラッシュメモリ4へのアクセスに関するトランザクションを処理する回路である。NVMeコントローラ22による動作は、例えば、NVMe規格に準拠する。NVMeコントローラ22は、TLPを、TLPタイプ毎に分類して処理し得る。
【0039】
具体的には、NVMeコントローラ22は、PCIe I/F21からTLPを受け取る。NVMeコントローラ22が受け取るTLPのTLPタイプは、例えば、SQ fetch用CplDタイプ、ライトデータ用CplDタイプ、およびポインタ用MWrタイプのいずれかである。NVMeコントローラ22は、受け取ったTLPによる要求または応答に基づくトランザクションを処理する。
【0040】
また、NVMeコントローラ22は、ホスト2に送信されるべき要求または応答がある場合、その要求または応答に相当するTLPを生成する。NVMeコントローラ22が生成するTLPのTLPタイプは、例えば、SQ fetch用MRdタイプ、CQ entry用MWrタイプ、リードデータ用MWrタイプ、およびライトデータ用MRdタイプのいずれかである。NVMeコントローラ22は、生成されたTLPをPCIe I/F21に送出する。送出されたTLPは、リンク31を介してホスト2に送信される。
【0041】
なお、コントローラ6内の各部の機能は、コントローラ6内の専用ハードウェアによって実現されてもよいし、CPU11がFWを実行することによって実現されてもよい。
【0042】
ここで、PCIe I/F21およびNVMeコントローラ22の構成について、より具体的に説明する。
【0043】
図2は、メモリシステム3におけるPCIe I/F21およびNVMeコントローラ22の構成例を示すブロック図である。
【0044】
PCIe I/F21は、送信バッファ211と管理部212とを備える。
【0045】
送信バッファ211は、例えば、揮発性のメモリである。送信バッファ211の記憶領域は、複数のTLPを記憶可能である。送信バッファ211の記憶容量は、例えば、送信バッファ211が記憶可能なTLP数(すなわち、TLPのエントリ数)の上限で表される。送信バッファ211が記憶可能なTLP数の上限を、最大TLP数とも称する。なお、最大TLP数に対応するTLPのサイズの合計は、送信バッファ211の記憶容量より小さくてもよい。すなわち、送信バッファ211の記憶領域は、TLPの記憶に使用されない領域を含んでいてもよい。
【0046】
送信バッファ211に記憶されている1つ以上のTLPは、送信バッファ211に格納された順に、リンク31を介してホスト2に送信される。送信バッファ211に記憶されている1つ以上のTLPの順序は、変更できない。つまり、送信バッファ211に記憶されている1つ以上のTLPがホスト2に送信される順序は、変更できない。
【0047】
送信バッファ211に記憶されているTLPは、ホスト2に送信された後、そのTLPがホスト2によって正常に受信されたことを示す肯定応答(ACK)が受信された場合に、送信バッファ211から消去(パージ)される。また、送信バッファ211に記憶されているTLPは、ホスト2に送信された後、そのTLPがホスト2によって正常に受信されなかったことを示す否定応答(NAK)が受信された場合に、ホスト2に再送される。送信バッファ211を用いてTLPが再送可能であることにより、リンク31を介したメモリシステム3からホスト2へのTLPの送信はロバスト性を有している。
【0048】
管理部212は、送信バッファ211に記憶されているTLPの数を、TLPタイプ毎に管理する。あるTLPタイプのTLPが送信バッファ211に記憶されている数を、そのTLPタイプの滞留TLP数と称する。滞留TLP数は、対応するTLPタイプのTLPが送信バッファ211に格納されたことに応じて、1増加する。滞留TLP数は、対応するTLPタイプのTLPが送信バッファ211から消去されたことに応じて、1減少する。管理部212は、例えば、TLP管理テーブル213を用いて、TLPタイプ毎の滞留TLP数を管理する。TLP管理テーブル213の構成例については、
図3を参照して後述する。また、管理部212は、TLPタイプ毎の滞留TLP数をNVMeコントローラ22に通知する。
【0049】
NVMeコントローラ22は、複数のTLP生成部220を備える。複数のTLP生成部220それぞれは、1つのTLPタイプに対応する。複数のTLP生成部220それぞれは、対応するTLPタイプのTLPを生成して、送信バッファ211に格納する。以下では、複数のTLP生成部220の特定しない1つを指して、TLP生成部220と称することがある。また、TLP生成部220が対応するTLPタイプを、対象TLPタイプとも称する。
【0050】
TLP生成部220は、対象TLPタイプの滞留TLP数と上限数(credit値)とに基づいて、TLPの生成を、あるいはTLPの送信バッファ211への格納を、制御し得る。対象TLPタイプに対応する上限数は、送信バッファ211に記憶されていることが許可される、対象TLPタイプのTLPの数の上限である。対象TLPタイプに対応する上限数は、例えば、バッファ通過データレートに基づいて決定される。バッファ通過データレートは、TLPが送信バッファ211を通過する速度を表すデータレートである。バッファ通過データレートは、例えば、リンク31が準拠する世代(リビジョン)のPCIe規格で規定されたデータレートおよび最大ペイロードサイズ(MPS)に応じて変化する。対象TLPタイプに対して、上限数は設定されてもよいし、設定されなくてもよい。例えば、NAND型フラッシュメモリ4に対するアクセス性能に関連する(あるいは、関連度が高い)TLPタイプに対しては、上限数が設定されない。例えば、NAND型フラッシュメモリ4に対するアクセス性能に関連しない(あるいは、関連度が低い)TLPタイプに対しては、上限数が設定される。また、例えば、同一のTLPタイプの多数のTLPが連続して送信バッファ211に格納される可能性が高い場合、そのTLPタイプに対して上限数が設定される。
【0051】
対象TLPタイプに対して上限数が設定されている場合、TLP生成部220は、対象TLPタイプの滞留TLP数が、設定された上限数に達するまで、対象TLPタイプのTLPを送信バッファ211に格納可能である。より詳しくは、滞留TLP数が上限数未満である場合、TLP生成部220は、対象TLPタイプのTLPを生成して、送信バッファ211に新たに格納可能である。滞留TLP数が上限数に達している場合、TLP生成部220は、対象TLPタイプのTLPを新たに生成しないか、あるいは対象TLPタイプのTLPを送信バッファ211に新たに格納しない。なお、滞留TLP数が上限数未満であっても、送信バッファ211に記憶されているTLPの総数(以下、総滞留TLP数と称する)が最大TLP数に達しているならば、TLP生成部220は、対象TLPタイプのTLPを新たに生成しないか、あるいは対象TLPタイプのTLPを送信バッファ211に新たに格納しない。総滞留TLP数は、例えば、全TLPタイプそれぞれの滞留TLP数の総和である。また、総滞留TLP数が上限数以上であり、且つ、滞留TLP数が上限数未満であるならば、TLP生成部220は、対象TLPタイプのTLPを生成して、送信バッファ211に新たに格納可能である。つまり、総滞留TLP数がやや多い状態であったとしても、滞留TLP数が少なければ、TLP生成部220は、対象TLPタイプのTLPを送信バッファ211に格納できる。
【0052】
対象TLPタイプに対して上限数が設定されていない場合、TLP生成部220は、総滞留TLP数が最大TLP数に達するまで、対象TLPタイプのTLPを送信バッファ211に新たに格納可能である。より詳しくは、総滞留TLP数が最大TLP数未満である場合、TLP生成部220は、対象TLPタイプのTLPを生成して、送信バッファ211に新たに格納可能である。総滞留TLP数が最大TLP数に達している場合、TLP生成部220は、対象TLPタイプのTLPを新たに生成しないか、あるいは対象TLPタイプのTLPを送信バッファ211に新たに格納しない。
【0053】
複数のTLP生成部220について、具体的な例を挙げて説明する。複数のTLP生成部220は、例えば、SQ fetch用MRd TLP生成部221、CQ entry用MWr TLP生成部222、リードデータ用MWr TLP生成部223、およびライトデータ用MRd TLP生成部224を含む。
【0054】
SQ fetch用MRd TLP生成部221は、SQ fetch用MRdタイプのTLPを生成する。以下では、SQ fetch用MRdタイプのTLPを、SQ fetch用MRd TLPと表記する。SQ fetch用MRd TLP生成部221は、生成されたSQ fetch用MRd TLPを送信バッファ211に格納する。
【0055】
SQ fetch用MRdタイプには、例えば、上限数が設定されない。この場合、総滞留TLP数が最大TLP数に達するまで、SQ fetch用MRd TLP生成部221は、SQ fetch用MRd TLPを生成して、送信バッファ211に新たに格納可能である。なお、総滞留TLP数が最大TLP数に達しているならば、SQ fetch用MRd TLP生成部221は、SQ fetch用MRd TLPを新たに生成しないか、あるいは生成されたSQ fetch用MRd TLPを送信バッファ211に新たに格納しない。
【0056】
CQ entry用MWr TLP生成部222は、CQ entry用MWrタイプのTLPを生成する。以下では、CQ entry用MWrタイプのTLPを、CQ entry用MWr TLPと表記する。CQ entry用MWr TLP生成部222は、生成されたCQ entry用MWr TLPを送信バッファ211に格納する。
【0057】
CQ entry用MWrタイプには、例えば、上限数が設定されない。この場合、総滞留TLP数が最大TLP数に達するまで、CQ entry用MWr TLP生成部222は、CQ entry用MWr TLPを生成して、送信バッファ211に新たに格納可能である。なお、総滞留TLP数が最大TLP数に達しているならば、CQ entry用MWr TLP生成部222は、CQ entry用MWr TLPを新たに生成しないか、あるいは生成されたCQ entry用MWr TLPを送信バッファ211に新たに格納しない。
【0058】
リードデータ用MWr TLP生成部223は、リードデータ用MWrタイプのTLPを生成する。以下では、リードデータ用MWrタイプのTLPを、リードデータ用MWr TLPと表記する。リードデータ用MWr TLP生成部223は、生成されたリードデータ用MWr TLPを送信バッファ211に格納する。
【0059】
リードデータ用MWrタイプには、例えば、上限数が設定される。この場合、リードデータ用MWr TLP生成部223は、リードデータ用MWrタイプの滞留TLP数が、設定された上限数に達するまで、リードデータ用MWr TLPを送信バッファ211に格納可能である。より詳しくは、リードデータ用MWrタイプの滞留TLP数がリードデータ用MWrタイプの上限数未満である場合、リードデータ用MWr TLP生成部223は、リードデータ用MWr TLPを送信バッファ211に新たに格納可能である。リードデータ用MWrタイプの滞留TLP数がリードデータ用MWrタイプの上限数に達している場合、リードデータ用MWr TLP生成部223は、リードデータ用MWr TLPを新たに生成しないか、あるいはリードデータ用MWr TLPを送信バッファ211に新たに格納しない。なお、滞留TLP数がリードデータ用MWrタイプの上限数未満であっても、総滞留TLP数が最大TLP数に達しているならば、リードデータ用MWr TLP生成部223は、リードデータ用MWr TLPを新たに生成しないか、あるいはリードデータ用MWr TLPを送信バッファ211に新たに格納しない。また、総滞留TLP数がリードデータ用MWrタイプの上限数以上であり、且つ、滞留TLP数がリードデータ用MWrタイプの上限数未満であるならば、リードデータ用MWr TLP生成部223は、リードデータ用MWrタイプのTLPを生成して、送信バッファ211に新たに格納可能である。
【0060】
ライトデータ用MRd TLP生成部224は、ライトデータ用MRdタイプのTLPを生成する。以下では、ライトデータ用MRdタイプのTLPを、ライトデータ用MRd TLPと表記する。ライトデータ用MRd TLP生成部224は、生成されたライトデータ用MRd TLPを送信バッファ211に格納する。
【0061】
ライトデータ用MRdタイプには、例えば、上限数が設定される。この場合、ライトデータ用MRd TLP生成部224は、ライトデータ用MRdタイプの滞留TLP数が、設定された上限数に達するまで、ライトデータ用MRd TLPを送信バッファ211に格納可能である。より詳しくは、ライトデータ用MRdタイプの滞留TLP数がライトデータ用MRdタイプの上限数未満である場合、ライトデータ用MRd TLP生成部224は、ライトデータ用MRd TLPを送信バッファ211に新たに格納可能である。ライトデータ用MRdタイプの滞留TLP数がライトデータ用MRdタイプの上限数に達している場合、ライトデータ用MRd TLP生成部224は、ライトデータ用MRd TLPを新たに生成しないか、あるいはライトデータ用MRd TLPを送信バッファ211に新たに格納しない。なお、滞留TLP数がライトデータ用MRdタイプの上限数未満であっても、総滞留TLP数が最大TLP数に達しているならば、ライトデータ用MRd TLP生成部224は、ライトデータ用MRd TLPを新たに生成しないか、あるいはライトデータ用MRd TLPを送信バッファ211に新たに格納しない。また、総滞留TLP数がライトデータ用MRdタイプの上限数以上であり、且つ、滞留TLP数がライトデータ用MRdタイプの上限数未満であるならば、ライトデータ用MRd TLP生成部224は、ライトデータ用MRdタイプのTLPを生成して、送信バッファ211に新たに格納可能である。
【0062】
次いで、管理部212によって用いられるTLP管理テーブル213について説明する。
図3は、TLP管理テーブル213の構成例を示す。TLP管理テーブル213は、1つ以上のエントリを含む。1つ以上のエントリそれぞれは、1つのTLPタイプに対応する。各エントリは、例えば、TLPタイプフィールド、滞留TLP数フィールド、およびシーケンス番号フィールドを含む。
【0063】
1つのエントリにおいて、TLPタイプフィールドは、対応するTLPタイプを示す。滞留TLP数フィールドは、対応するTLPタイプの滞留TLP数を示す。シーケンス番号フィールドは、送信バッファ211に記憶されている、対応するTLPタイプのTLPに付与されたシーケンス番号を示す。対応するTLPタイプのTLPが送信バッファ211に複数記憶されている場合、シーケンス番号フィールドは、それら複数のTLPそれぞれに付与された複数のシーケンス番号を示す。
【0064】
図3に示す例では、TLP管理テーブル213は、4つのエントリ51、52、53、および54を含む。
【0065】
エントリ51のTLPタイプフィールドは、エントリ51に対応するTLPタイプがSQ fetch用MRdタイプであることを示す。エントリ51の滞留TLP数フィールドは、SQ fetch用MRdタイプの滞留TLP数が0であることを示す。また、SQ fetch用MRdタイプの滞留TLP数が0であるので、エントリ51のシーケンス番号フィールドには、いずれのTLPのシーケンス番号も設定されていない。
【0066】
エントリ52のTLPタイプフィールドは、エントリ52に対応するTLPタイプがCQ entry用MWrタイプであることを示す。エントリ52の滞留TLP数フィールドは、CQ entry用MWrタイプの滞留TLP数が1であることを示す。また、CQ entry用MWrタイプの滞留TLP数が1であるので、エントリ52のシーケンス番号フィールドには、1つのTLPのシーケンス番号“0”が設定されている。つまり、送信バッファ211には、シーケンス番号“0”が付与された1つのCQ entry用MWr TLPが記憶されている。
【0067】
エントリ53のTLPタイプフィールドは、エントリ53に対応するTLPタイプがリードデータ用MWrタイプであることを示す。エントリ53の滞留TLP数フィールドは、リードデータ用MWrタイプの滞留TLP数が5であることを示す。また、リードデータ用MWrタイプの滞留TLP数が5であるので、エントリ53のシーケンス番号フィールドには、5つのTLPのシーケンス番号“1”、“2”、“3”、“4”、および“5”が設定されている。つまり、送信バッファ211には、シーケンス番号“1”、“2”、“3”、“4”、および“5”がそれぞれ付与された5つのリードデータ用MWr TLPが記憶されている。
【0068】
エントリ54のTLPタイプフィールドは、エントリ54に対応するTLPタイプがライトデータ用MRdタイプであることを示す。エントリ54の滞留TLP数フィールドは、ライトデータ用MRdタイプの滞留TLP数が3であることを示す。また、ライトデータ用MRdタイプの滞留TLP数が3であるので、エントリ54のシーケンス番号フィールドには、3つのTLPのシーケンス番号“6”、“7”、および“8”が設定されている。つまり、送信バッファ211には、シーケンス番号“6”、“7”、および“8”がそれぞれ付与された3つのライトデータ用MRd TLPが記憶されている。
【0069】
このようなTLP管理テーブル213を用いることにより、管理部212は、TLPタイプ毎の滞留TLP数を管理できる。
【0070】
メモリシステム3に設けられる送信バッファ211の最大TLP数は、例えば、メモリシステム3が準拠しているPCIe規格の世代で規定された最大データレートに基づいて設計される。メモリシステム3が準拠しているリビジョンの最大データレートよりもリンク31が低いデータレートで動作する場合、送信バッファ211の最大TLP数は、その低いデータレートに対して過剰になる。例えば、送信バッファ211にTLPが格納される速度が、リンク31が動作するデータレートに関わらず一定(例えばメモリシステム3が準拠しているPCIe規格の世代で規定された最大データレートに応じた速度)であるならば、送信バッファ211にTLPが格納される速度と、リンク31が実際に動作する低いデータレートとの速度差により、送信バッファ211にTLPが滞留しやすくなる。これにより、例えば、過剰な数のTLPが送信バッファ211に滞留することになる。
【0071】
あるTLPが送信バッファ211に記憶されている時間を、そのTLPのバッファ滞留時間と称する。あるTLPのバッファ滞留時間は、そのTLPが送信バッファ211に格納された際に送信バッファ211に既に格納されていたTLPが、ホスト2に送信されるまでの時間を、オーバーヘッドとして含む。そのため、あるTLPのバッファ滞留時間は、そのTLPが送信バッファ211に格納された際に送信バッファ211に既に記憶されていたTLPの数に応じて、長くなり得る。したがって、送信バッファ211の最大TLP数が、リンク31が実際に動作するデータレートに対して過剰である場合、TLPのバッファ滞留時間は長くなり得る。
【0072】
図4から
図6を参照して、リンク31を介してTLPが伝送される場合に発生するオーバーヘッドについて説明する。
【0073】
図4は、メモリシステム3からホスト2に送信されるTLPのオーバーヘッドの例を示す。ここでは、NVMeコントローラ22が、複数のリードデータ用MWr TLP711、712、713、714、……、715と、SQ fetch用MRd TLP716とを順に、送信バッファ211に格納することを想定する。
【0074】
PCIe I/F21は、送信バッファ211内のリードデータ用MWr TLP711、712、713、714、……、715と、SQ fetch用MRd TLP716とを、送信バッファ211に格納された順に、リンク31を介してホスト2に送信する。したがって、SQ fetch用MRd TLP716は、リードデータ用MWr TLP711、712、713、714、……、715全てが送信された後に、送信される。そのため、リードデータ用MWr TLP711、712、713、714、……、715の送信に要する時間は、SQ fetch用MRd TLP716を送信する際のオーバーヘッド72になる。
【0075】
オーバーヘッド72が大きいほど、SQ fetch用MRd TLP716に応じたコマンドをメモリシステム3がホスト2から取得するまでの時間は遅延する。その場合、メモリシステム3では、単位期間においてホスト2から取得されるコマンドの数が減少する。これによって、例えば、NAND型フラッシュメモリ4に対するリードコマンドの数が減少したならば、NAND型フラッシュメモリ4に対するリード性能が低下し得る。
【0076】
このように、SQ fetch用MRd TLP716が送信バッファ211に記憶されている時間(バッファ滞留時間)が、オーバーヘッド72によって長くなることは、NAND型フラッシュメモリ4に対するアクセス性能の低下を招く。
【0077】
図5は、メモリシステム3からホスト2に送信されるTLPのオーバーヘッドの別の例を示す。ここでは、NVMeコントローラ22が、複数のライトデータ用MRd TLP731、732、733、734、……、735と、SQ fetch用MRd TLP736とを順に、送信バッファ211に格納することを想定する。
【0078】
PCIe I/F21は、送信バッファ211内のライトデータ用MRd TLP731、732、733、734、……、735と、SQ fetch用MRd TLP736とを、送信バッファ211に格納された順に、リンク31を介してホスト2に送信する。したがって、SQ fetch用MRd TLP736は、ライトデータ用MRd TLP731、732、733、734、……、735全てが送信された後に、送信される。そのため、ライトデータ用MRd TLP731、732、733、734、……、735の送信に要する時間は、SQ fetch用MRd TLP736を送信する際のオーバーヘッド74になる。
【0079】
オーバーヘッド74が大きいほど、SQ fetch用MRd TLP736に応じたコマンドをメモリシステム3がホスト2から取得するまでの時間は遅延する。その場合、メモリシステム3では、単位期間においてホスト2から取得されるコマンドの数が減少する。これによって、例えば、NAND型フラッシュメモリ4に対するリードコマンドの数が減少したならば、NAND型フラッシュメモリ4に対するリード性能が低下し得る。
【0080】
このように、SQ fetch用MRd TLP736が送信バッファ211に記憶されている時間が、オーバーヘッド74によって長くなることは、NAND型フラッシュメモリ4に対するアクセス性能の低下を招く。
【0081】
図6は、ホスト2からメモリシステム3に送信されるTLPのオーバーヘッドの例を示す。メモリシステム3に設けられる送信バッファ211と同様に、ホスト2にも送信バッファ251が設けられる。ここでは、複数のライトデータ用CplD TLP751、752、753、754、……、755と、SQ fetch用CplD TLP756とが順に、送信バッファ251に格納されることを想定する。
【0082】
ライトデータ用CplD TLPは、メモリシステム3から受信したライトデータ用MRd TLPに対して応答するTLPである。ライトデータ用CplD TLPは、ホスト2内の記憶領域から読み出されたライトデータを含む。
【0083】
SQ fetch用CplD TLPは、メモリシステム3から受信したSQ fetch用MRd TLPに対して応答するTLPである。SQ fetch用CplD TLPは、ホスト2内のサブミッションキューから取得されたコマンドを含む。
【0084】
ホスト2では、送信バッファ251内のライトデータ用CplD TLP751、752、753、754、……、755と、SQ fetch用CplD TLP756とが、送信バッファ251に格納された順に、リンク31を介してメモリシステム3に送信される。したがって、SQ fetch用CplD TLP756は、ライトデータ用CplD TLP751、752、753、754、……、755全てが送信された後に、送信される。そのため、ライトデータ用CplD TLP751、752、753、754、……、755の送信に要する時間は、SQ fetch用CplD TLP756を送信する際のオーバーヘッド76になる。
【0085】
オーバーヘッド76が大きいほど、SQ fetch用CplD TLP756に含まれるコマンドをメモリシステム3がホスト2から取得するまでの時間は遅延する。その場合、メモリシステム3では、単位期間においてホスト2から取得されるコマンドの数が減少する。これによって、例えば、NAND型フラッシュメモリ4に対するリードコマンドの数が減少したならば、NAND型フラッシュメモリ4に対するリード性能が低下し得る。
【0086】
このように、SQ fetch用CplD TLP756が送信バッファ251に記憶されている時間が、オーバーヘッド76によって長くなることは、NAND型フラッシュメモリ4に対するアクセス性能の低下を招く。
【0087】
本実施形態に係るメモリシステム3は、送信バッファ211に記憶されているTLPの上限数を、TLPタイプ毎に設定可能であるように構成される。上限数は、送信バッファ211の最大TLP数よりも小さい。特定のTLPタイプに対して上限数が設定された場合、メモリシステム3では、送信バッファ211に記憶されているその特定のTLPタイプのTLPの数は、上限数以下に制約される。これにより、送信バッファ211を用いてTLPをホスト2に送信する際のオーバーヘッドを低減できる。オーバーヘッドが低減されるほど、TLPに対する応答をホスト2から取得するまでの時間が短縮される。そして、単位期間においてホスト2から取得されるコマンドの数が増加し得る。したがって、メモリシステム3では、上限数が設定されない場合と比較して、例えば、NAND型フラッシュメモリ4に対するアクセスを要求するコマンドが、単位期間においてホスト2から取得される数を増加させて、NAND型フラッシュメモリ4に対するアクセス性能を向上できる。
【0088】
図7は、メモリシステム3におけるTLP格納制御動作の例を示すシーケンス図である。TLP格納制御動作は、例えば、TLP生成部220が新たなTLPを生成すべき場合に行われる。ここでは、TLP生成部220に対応するTLPタイプ(対象TLPタイプ)に対して上限数が設定されており、総滞留TLP数が最大TLP数に達していないことを想定する。
【0089】
まず、管理部212は、TLP管理テーブル213を用いて、対象TLPタイプの滞留TLP数を、TLP生成部220に通知する(A1)。管理部212は、TLP格納制御動作が開始される前に、滞留TLP数が変化したことに応じて、対象TLPタイプの滞留TLP数をTLP生成部220に通知してもよい。あるいは、管理部212は、TLP生成部220による要求に応じて、対象TLPタイプの滞留TLP数をTLP生成部220に通知してもよい。
【0090】
次いで、TLP生成部220は、通知された滞留TLP数が上限数未満であるか否かを判定する(A2)。
【0091】
通知された滞留TLP数が上限数未満である場合、TLP生成部220は新たなTLPを生成する(A3)。TLP生成部220は、生成されたTLPを送信バッファ211に格納する(A4)。管理部212は、TLP生成部220がTLPを送信バッファ211に格納したことを検出する(A5)。そして、管理部212は、対象TLPタイプに対応するTLP管理テーブル213のエントリを更新する(A6)。具体的には、管理部212は、そのエントリにおいて、滞留TLP数に1を加算する。また、管理部212は、そのエントリのシーケンス番号フィールドに、格納されたTLPのシーケンス番号を追加する。さらに、管理部212は、増加した滞留TLP数をTLP生成部220に通知してもよい(A7)。
【0092】
このように、管理部212は、滞留TLP数が上限数未満である場合に、新たなTLPが送信バッファ211に格納されたことに応じて、滞留TLP数を更新する。したがって、管理部212は滞留TLP数を適切に管理できる。
【0093】
これに対して、通知された滞留TLP数が上限数以上である場合、TLP格納制御動作は終了する。つまり、滞留TLP数が上限数に達しているので、TLP生成部220は新たなTLPを生成しない。これにより、上限数を超える数の対象TLPタイプのTLPが、送信バッファ211に格納されない。
【0094】
以上のTLP格納制御動作により、メモリシステム3では、滞留TLP数を適切に管理できると共に、上限数を超える数の対象TLPタイプのTLPが送信バッファ211に格納されないように制御できる。なお、対象TLPタイプに対して上限数が設定されていない場合には、例えば、A3からA6の動作が行われる。
【0095】
図8は、
図7に示したTLP格納制御動作によって更新されたTLP管理テーブル213の例を示す。ここでは、SQ fetch用MRd TLP生成部221が新たなTLPを生成して送信バッファ211に格納したことに応じて、
図3に示したTLP管理テーブル213を管理部212が更新した場合を例示する。
【0096】
この場合、管理部212は、SQ fetch用MRdタイプに対応するエントリ51において、滞留TLP数に1を加算する。つまり、エントリ51において、SQ fetch用MRdタイプの滞留TLP数が0から1に更新される。
【0097】
また、管理部212は、エントリ51のシーケンス番号フィールドに、新たに格納されたSQ fetch用MRd TLPに付与されたシーケンス番号“9”を追加する。つまり、シーケンス番号“9”が付与されたSQ fetch用MRd TLPが送信バッファ211に記憶されていることを示すように、エントリ51が更新される。
【0098】
これにより、管理部212は、送信バッファ211に1つのSQ fetch用MRd TLPが記憶されていることを、管理できる。
【0099】
図9は、メモリシステム3におけるTLP消去制御動作の例を示すシーケンス図である。TLP消去制御動作は、メモリシステム3からホスト2に送信されたTLPに対するACKがホスト2から受信された場合に行われる。ACKは、対応するTLPのシーケンス番号を含む。PCIe I/F21は、ACKに含まれるシーケンス番号を用いて、ACKに対応するTLPを特定する。PCIe I/F21は、特定されたTLPを送信バッファ211から消去する。
【0100】
管理部212は、TLPが送信バッファ211から消去されたことを検出する(B1)。そして、管理部212は、消去されたTLPのTLPタイプに対応するTLP管理テーブル213のエントリを更新する(B2)。具体的には、管理部212は、そのエントリにおいて、滞留TLP数から1を減算する。また、管理部212は、そのエントリのシーケンス番号フィールドから、消去されたTLPのシーケンス番号を削除する。さらに、管理部212は、減少した滞留TLP数をTLP生成部220に通知してもよい(B3)。
【0101】
このように、管理部212は、送信バッファ211からTLPが消去されたことに応じて、滞留TLP数を更新する。したがって、管理部212は滞留TLP数を適切に管理できる。
【0102】
図10は、
図9に示したTLP消去制御動作によって更新されたTLP管理テーブル213の例を示す。ここでは、ホスト2からACKが受信され、そのACKに対応するCQ entry用MWr TLPが送信バッファ211から消去されたことに応じて、
図8に示したTLP管理テーブル213を管理部212が更新した場合を例示する。
【0103】
この場合、管理部212は、CQ entry用MWrタイプに対応するエントリ52において、滞留TLP数から1を減算する。つまり、エントリ52において、CQ entry用MWrタイプの滞留TLP数が1から0に更新される。
【0104】
また、管理部212は、エントリ52のシーケンス番号フィールドから、消去されたCQ entry用MWr TLPに付与されたシーケンス番号“0”を削除する。つまり、送信バッファ211から消去された、シーケンス番号“0”が付与されたCQ entry用MWr TLPを示さないように、エントリ52が更新される。
【0105】
これにより、管理部212は、送信バッファ211にいずれのCQ entry用MWr TLPも記憶されていないことを、管理できる。
【0106】
ここで、上限数の設定の有無に応じたバッファ滞留時間の差について説明する。
図11は、メモリシステム3において、(A)上限数が設定されていない場合のバッファ滞留時間の例と、(B)上限数が設定されている場合のバッファ滞留時間の例とを示す。
【0107】
上限数が設定されていない場合、NVMeコントローラ22(より詳しくは、TLP生成部220)は、送信バッファ211の最大TLP数に達するまで、TLPを送信バッファ211に格納可能である。送信バッファ211に記憶されている複数のTLPは、送信バッファ211に格納された順に、リンク31を介してホスト2に送信される。
【0108】
例えば、
図11(A)に示すように、NVMeコントローラ22が、送信バッファ211の最大TLP数に達するまで、TLP811~820を順に送信バッファ211に格納した場合を想定する。PCIe I/F21は、TLP811~820を、格納された順に、リンク31を介してホスト2に送信する。したがって、最後に格納されたTLP820は、先に格納されていたTLP811~819全てが送信された後に、送信される。
【0109】
あるTLPが送信バッファ211に記憶されている時間(バッファ滞留時間)は、そのTLPが送信バッファ211に格納された際に送信バッファ211に既に格納されていたTLPが、ホスト2に送信されるまでの時間を含む。そのため、あるTLPのバッファ滞留時間は、そのTLPが送信バッファ211に格納された際に送信バッファ211に既に格納されていたTLPの数に応じて、長くなり得る。例えば、最後に格納されたTLP820のバッファ滞留時間83は、TLP820が格納された際に送信バッファ211に既に格納されていたTLP811~819がホスト2に送信されるまでの時間を含む。バッファ滞留時間83が長いほど、TLP820に対するホスト2による応答は遅延する。そのため、例えば、TLP820がSQ fetch用MRd TLPであるならば、NVMeコントローラ22がTLP820を送信バッファ211に格納してから、TLP820に対するホスト2からの応答に含まれるコマンドを取得するまでの時間が長くなる。
【0110】
これに対して、上限数が設定されている場合、NVMeコントローラ22は、あるTLPタイプのTLPを、そのTLPタイプに対して設定されている上限数に達するまで、送信バッファ211に格納可能である。
【0111】
例えば、
図11(B)に示すように、NVMeコントローラ22がTLP851~855を順に送信バッファ211に格納した場合を想定する。ここでは、TLP851~855が特定のTLPタイプのTLPであるものとする。また、この特定のTLPタイプに対して設定されている上限数が5であるものとする。
【0112】
PCIe I/F21は、TLP851~855を、格納された順に、リンク31を介してホスト2に送信する。したがって、最後に格納されたTLP855は、先に格納されていたTLP851~854全てが送信された後に、送信される。最後に格納されたTLP855のバッファ滞留時間86は、TLP855が格納された際に送信バッファ211に既に格納されていたTLP851~854がホスト2に送信されるまでの時間を含む。バッファ滞留時間86は、送信バッファ211に同時に記憶されている特定のTLPタイプのTLPの数が上限数以下に制限されるので、
図11(A)に示した上限数が設定されていない場合(より詳しくは、送信バッファ211の最大TLP数に達するまでTLPが格納された場合)のバッファ滞留時間83よりも短くなる。そのため、例えば、TLP855の後にSQ fetch用MRd TLP856が送信バッファ211に格納されたならば、上限数が設定されていない場合と比較して、NVMeコントローラ22がTLP856を送信バッファ211に格納してから、TLP856に対するホスト2からの応答に含まれるコマンドを取得するまでの時間が短縮され得る。
【0113】
図12は、TLPが送信バッファ211を通過する速度を表すデータレート(バッファ通過データレート)の例を示す。TLPが送信バッファ211を通過する速度を表すデータレートは、例えば、リンク31が準拠する世代のPCIe規格で規定されたデータレートおよびMPSに応じて変化する。
【0114】
リンク31がPCIe Gen2で規定されたデータレートで動作し、MPSが256バイトである場合、バッファ通過データレートは、例えば、1.83GB/sである。リンク31がPCIe Gen2で規定されたデータレートで動作し、MPSが1Kバイトである場合、バッファ通過データレートは、例えば、1.95GB/sである。
【0115】
リンク31がPCIe Gen4で規定されたデータレートで動作し、MPSが256バイトである場合、バッファ通過データレートは、例えば、7.20GB/sである。リンク31がPCIe Gen4で規定されたデータレートで動作し、MPSが1Kバイトである場合、バッファ通過データレートは、例えば、7.70GB/sである。
【0116】
リンク31がPCIe Gen5で規定されたデータレートで動作し、MPSが256バイトである場合、バッファ通過データレートは、例えば、14.40GB/sである。リンク31がPCIe Gen5で規定されたデータレートで動作し、MPSが1Kバイトである場合、バッファ通過データレートは、例えば、15.39GB/sである。
【0117】
したがって、リンク31がPCIe Gen4で規定されたデータレートで動作する場合のバッファ通過データレートは、リンク31がPCIe Gen2で規定されたデータレートで動作する場合のバッファ通過データレートの約4倍になる。また、リンク31がPCIe Gen5で規定されたデータレートで動作する場合のバッファ通過データレートは、リンク31がPCIe Gen2で規定されたデータレートで動作する場合のバッファ通過データレートの約8倍になる。
【0118】
送信バッファ211の最大TLP数は、例えば、メモリシステム3で想定される最大データレートに基づいて決定される。メモリシステム3で想定される最大データレートは、メモリシステム3が準拠しているPCIe規格の世代で規定された最大データレートである。メモリシステム3で想定される最大データレートよりもリンク31が低いデータレートで動作する場合、送信バッファ211の最大TLP数は、その低いデータレートに対して過剰になる。つまり、過剰な数のTLPが送信バッファ211に滞留することになる。これによって、各TLPのバッファ滞留時間は長くなる。
【0119】
本実施形態に係るメモリシステム3では、
図11(B)に示すように、特定のTLPタイプのTLPが送信バッファ211に記憶されていることが許可される上限数が設定される。上限数は、例えば、バッファ通過データレートに基づいて決定される。リンク31のデータレートが、メモリシステム3で想定される最大データレートよりも低い場合、上限数は、送信バッファ211の最大TLP数よりも小さい。そして、上限数が設定されたTLPタイプに対応するTLP生成部220は、そのTLPタイプの滞留TLP数が上限数を超えない範囲で、TLPを送信バッファ211に格納する。これにより、送信バッファ211を用いてTLPをホスト2に送信する際のオーバーヘッドを低減できる。オーバーヘッドが低減されるほど、TLPに対する応答をホスト2から取得するまでの時間が短縮される。そして、単位期間においてホスト2から取得されるコマンドの数が増加し得る。したがって、メモリシステム3では、上限数が設定されない場合と比較して、例えば、NAND型フラッシュメモリ4に対するアクセスを要求するコマンドが、単位期間においてホスト2から取得される数を増加させて、NAND型フラッシュメモリ4に対するアクセス性能を向上できる。
【0120】
一例として、送信バッファ211の最大TLP数が128であるケースを想定する。この最大TLP数は、リンク31がPCIe Gen5で規定されたデータレートで動作することが想定された設計に基づくものである。リンク31がPCIe Gen5で規定されたデータレートで動作する場合、1つのTLP当たりの送信バッファ流出時間は、例えば、0.2マイクロ秒(μs)である。リンク31がPCIe Gen2で規定されたデータレートで動作する場合、1つのTLP当たりの送信バッファ流出時間は、例えば、1.6μsである。送信バッファ流出時間は、送信バッファ211において、あるTLPが送信対象になってからホスト2への送信が完了するまでの時間の平均である。あるTLPは、そのTLPが送信バッファ211に格納された際に既に記憶されていた全てのTLPがホスト2に送信されたことに応じて、送信対象になる。
【0121】
このケースにおいて、リンク31が想定通りにPCIe Gen5で規定されたデータレートで動作する場合のバッファ滞留時間は、最大25.6μs(=0.2μs×128)である。
【0122】
ここで、リンク31が実際にはPCIe Gen2で規定されたデータレートで動作する際に、上限数を設定しない場合と、上限数を設定した場合とを考える。
【0123】
リンク31が実際にはPCIe Gen2で規定されたデータレートで動作し、上限数を設定しない場合、バッファ滞留時間は、最大204.8μs(=1.6μs×128)である。したがって、PCIe Gen2でのバッファ滞留時間の最大値は、PCIe Gen5でのバッファ滞留時間の約10倍になる。
【0124】
これに対して、リンク31が実際にはPCIe Gen2で規定されたデータレートで動作し、上限数を16に設定した場合、バッファ滞留時間は、最大25.6μs(=1.6μs×16)である。したがって、上限数を16に設定することで、リンク31がPCIe Gen2で規定されたデータレートで動作する場合にも、リンク31がPCIe Gen5で規定されたデータレートで動作する場合と同様に、バッファ滞留時間の最大値を25.6μsに短縮できる。
【0125】
次いで、
図13から
図15を参照して、メモリシステム3において実行される処理について説明する。
【0126】
図13は、NVMeコントローラ22のTLP生成部220によって実行される格納制御処理の手順の例を示すフローチャートである。格納制御処理は、送信バッファ211へのTLPの格納を制御する処理である。TLP生成部220は、TLP生成部220に対応するTLPタイプ(対象TLPタイプ)のTLPを生成すべき場合に、格納制御処理を実行する。ここでは、送信バッファ211にTLPを記憶可能な空き領域があること(すなわち、総滞留TLP数が最大TLP数に達していないこと)を想定する。
【0127】
まず、TLP生成部220は、対象TLPタイプに対して上限数が設定されているか否かを判定する(ステップS11)。対象TLPタイプに対する上限数は、送信バッファ211に記憶されていることが許可される対象TLPタイプのTLPの数の上限である。
【0128】
対象TLPタイプに対して上限数が設定されていない場合(ステップS11でno)、TLP生成部220はTLP(すなわち、対象TLPタイプのTLP)を生成する(ステップS12)。そして、TLP生成部220は、生成されたTLPを送信バッファ211に格納し(ステップS13)、格納制御処理を終了する。
【0129】
これに対して、対象TLPタイプに対して上限数が設定されている場合(ステップS11でyes)、TLP生成部220は、送信バッファ211に記憶されている対象TLPタイプのTLPの数(第1滞留TLP数)を取得する(ステップS14)。第1滞留TLP数は、例えば、管理部212によってTLP生成部220に通知される。TLP生成部220は、第1滞留TLP数の通知を、管理部212に要求してもよい。TLP生成部220は、取得された第1滞留TLP数が、対象TLPタイプに対する上限数未満であるか否かを判定する(ステップS15)。
【0130】
第1滞留TLP数が対象TLPタイプに対する上限数以上である場合(ステップS15でno)、TLP生成部220による処理はステップS14に戻る。つまり、送信バッファ211に滞留している対象TLPタイプのTLPの数が、対象TLPタイプに対する上限数に達している間、TLP生成部220は、対象TLPタイプのTLPを送信バッファ211に新たに格納することを待つように動作する。
【0131】
第1滞留TLP数が対象TLPタイプに対する上限数未満である場合(ステップS15でyes)、TLP生成部220はTLPを生成する(ステップS12)。そして、TLP生成部220は、生成されたTLPを送信バッファ211に格納し(ステップS13)、格納制御処理を終了する。
【0132】
以上の格納制御処理により、TLP生成部220は、対象TLPタイプに対して上限数が設定されていない場合と、第1滞留TLP数が対象TLPタイプに対する上限数未満である場合とに、対象TLPタイプのTLPを送信バッファ211に格納できる。また、TLP生成部220は、第1滞留TLP数が対象TLPタイプに対する上限数以上である場合、対象TLPタイプのTLPを送信バッファ211に新たに格納しないように制御できる。
【0133】
図14は、PCIe I/F21の管理部212によって実行される第1更新処理の手順の例を示すフローチャートである。第1更新処理は、送信バッファ211に新たに格納されたTLPに基づいて、TLP管理テーブル213を更新する処理である。管理部212は、例えば、TLPが送信バッファ211に新たに格納されたことに応じて、第1更新処理を実行する。以下では、送信バッファ211に新たに格納されたTLPを、対象TLPと称する。
【0134】
まず、管理部212は、対象TLPのシーケンス番号(以下、第1シーケンス番号と称する)を取得する(ステップS21)。管理部212は、TLP管理テーブル213において、対象TLPのTLPタイプに対応するエントリ(以下、第1エントリと称する)を特定する(ステップS22)。管理部212は、例えば、複数のTLP生成部220のいずれが対象TLPを送信バッファ211に格納したかに基づいて、対象TLPのTLPタイプを特定する。あるいは、対象TLPに、対応するTLPタイプを示す情報が付与されていてもよい。
【0135】
次いで、管理部212は、第1エントリにおいて、滞留TLP数に1を加算する(ステップS23)。そして、管理部212は、第1エントリのシーケンス番号フィールドに、第1シーケンス番号を追加し(ステップS24)、第1更新処理を終了する。
【0136】
以上の第1更新処理により、管理部212は、TLPが送信バッファ211に格納されたことに応じて、そのTLPのTLPタイプに関連付けられた滞留TLP数を1増加させることができる。また、管理部212は、シーケンス番号を用いて、そのTLPが送信バッファ211に記憶されていることを管理できる。
【0137】
図15は、PCIe I/F21の管理部212によって実行される第2更新処理の手順の例を示すフローチャートである。第2更新処理は、送信バッファ211から消去されたTLPに基づいて、TLP管理テーブル213を更新する処理である。TLPは、対応するACKがホスト2から受信された場合に、送信バッファ211から消去される。管理部212は、例えば、送信バッファ211からTLPが消去されたことに応じて、第2更新処理を実行する。
【0138】
まず、管理部212は、ホスト2から受信されたACKから、TLPのシーケンス番号(以下、第2シーケンス番号と称する)を取得する(ステップS31)。管理部212は、TLP管理テーブル213において、第2シーケンス番号を含むエントリ(以下、第2エントリと称する)を特定する(ステップS32)。つまり、特定される第2エントリは、第2シーケンス番号を少なくとも示すシーケンス番号フィールドを含む。
【0139】
次いで、管理部212は、第2エントリにおいて、滞留TLP数から1を減算する(ステップS33)。そして、管理部212は、第2エントリのシーケンス番号フィールドから、第2シーケンス番号を削除し(ステップS34)、第2更新処理を終了する。
【0140】
以上の第2更新処理により、管理部212は、TLPが送信バッファ211から消去されたことに応じて、そのTLPのTLPタイプに関連付けられた滞留TLP数を1減少させることができる。また、管理部212は、第2シーケンス番号をTLP管理テーブル213(より詳しくは、第2エントリ)から削除することにより、消去されたTLPの管理を終了できる。
【0141】
以上説明したように、実施形態によれば、不揮発性メモリに対するアクセス性能を向上できる。送信バッファ211は、ホスト2に送信されるべきパケット(例えば、TLP)を第1上限数まで記憶可能である。NVMeコントローラ22(より詳しくは、TLP生成部220)は、NAND型フラッシュメモリ4に対するアクセスに関連するパケットを生成し、生成されたパケットを送信バッファ211に格納する。PCIe I/F21は、送信バッファ211に1つ以上のパケットが記憶されている場合、1つ以上のパケットを送信バッファ211に記憶された順にホスト2に送信する。NVMeコントローラ22またはPCIe I/F21は、パケットを、送信バッファ211に記憶されていることが許可される数が第1上限数に制限される第1タイプのパケットと、送信バッファ211に記憶されていることが許可される数が第1上限数より小さい第2上限数に制限される第2タイプのパケットと、に分類する。NVMeコントローラ22は、第1タイプのパケットが生成されるべき場合、送信バッファ211に記憶されているパケットの数を示す第1滞留パケット数が、第1上限数未満であるならば、第1タイプの第1パケットを生成し、生成された第1パケットを送信バッファ211に格納し、第1滞留パケット数が第1上限数以上であるならば、第1パケットを生成しないか、あるいは生成された第1パケットを送信バッファ211に格納しない。NVMeコントローラ22は、第2タイプのパケットが生成されるべき場合、送信バッファ211に記憶されている第2タイプのパケットの数を示す第2滞留パケット数が、第2上限数未満であるならば、第2タイプの第2パケットを生成し、生成された第2パケットを送信バッファ211に格納し、第2滞留パケット数が第2上限数以上であるならば、第2パケットを生成しないか、あるいは生成された第2パケットを送信バッファ211に格納しない。
【0142】
以上の構成により、送信バッファ211に記憶されている第2タイプのパケットの数は、第2上限数以下に制約される。これにより、送信バッファ211を用いてパケットをホスト2に送信する際のオーバーヘッドを低減できる。オーバーヘッドが低減されるほど、パケットに対する応答をホスト2から取得するまでの時間が短縮される。そして、単位期間においてホスト2から取得されるコマンドの数が増加し得る。したがって、メモリシステム3では、上限数が設定されない場合と比較して、例えば、NAND型フラッシュメモリ4に対するアクセスを要求するコマンドが、単位期間においてホスト2から取得される数を増加させて、NAND型フラッシュメモリ4に対するアクセス性能を向上できる。
【0143】
本実施形態に記載された様々な機能の各々は、回路(処理回路)によって実現されてもよい。処理回路の例には、中央処理装置(CPU)のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム(命令群)を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。本実施形態に記載されたCPU以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
【0144】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0145】
1…情報処理システム、2…ホスト、3…メモリシステム、4…NAND型フラッシュメモリ、5…DRAM、6…コントローラ、10…バス、11…CPU、12…NAND I/F、13…DRAM I/F、14…ホストI/F、21…PCIe I/F、22…NVMeコントローラ、31…リンク、211…送信バッファ、212…管理部、213…TLP管理テーブル、220…TLP生成部、221…SQ fetch用MRd TLP生成部、222…CQ entry用MWr TLP生成部、223…リードデータ用MWr TLP生成部、224…ライトデータ用MRd TLP生成部。