(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024103191
(43)【公開日】2024-08-01
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
G06F 13/16 20060101AFI20240725BHJP
G06F 12/00 20060101ALI20240725BHJP
G06F 13/10 20060101ALI20240725BHJP
G06F 13/36 20060101ALI20240725BHJP
G06F 13/12 20060101ALI20240725BHJP
【FI】
G06F13/16 510D
G06F12/00 550E
G06F12/00 560A
G06F12/00 597U
G06F13/10 310E
G06F13/36 530B
G06F13/12 330A
【審査請求】未請求
【請求項の数】17
【出願形態】OL
(21)【出願番号】P 2023007389
(22)【出願日】2023-01-20
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】石黒 孝
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA14
5B160MB06
(57)【要約】
【課題】 データ伝送に関する性能と消費電力のバランスを保つことができるメモリシステムを実現する。
【解決手段】 実施形態によれば、メモリシステムは、ホストに接続可能である。メモリシステムは、不揮発性メモリと、コントローラとを具備する。コントローラは、不揮発性メモリを制御する。コントローラは、ホストからメモリシステムに対して発行された1つ以上のコマンドに関する情報に基づいて、ホストとメモリシステムとの間のリンクに含まれる複数のレーンの内、動作状態に設定されるレーンの数を決定する。コントローラは、複数のレーンの内、決定された数のレーンを動作状態に設定する。コントローラは、複数のレーンの内、決定された数のレーン以外のレーンを低消費電力状態に設定する
【選択図】
図3
【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリを制御し、
前記ホストから前記メモリシステムに対して発行された1つ以上のコマンドに関する情報に基づいて、前記ホストと前記メモリシステムとの間のリンクに含まれる複数のレーンの内、動作状態に設定されるレーンの数を決定し、
前記複数のレーンの内、前記決定された数のレーンを前記動作状態に設定し、
前記複数のレーンの内、前記決定された数のレーン以外のレーンを低消費電力状態に設定するように構成されるコントローラと、
を具備する、
メモリシステム。
【請求項2】
前記情報は、前記ホストによって発行された後、対応する処理が前記メモリシステムにおいてまだ行われていないコマンドの数である第1コマンド数に関する情報を含む、
請求項1に記載のメモリシステム。
【請求項3】
前記コントローラは、
前記第1コマンド数が増加した場合、前記複数のレーンの内、前記動作状態に設定されるレーンの数を増加させ、
前記第1コマンド数が減少した場合、前記複数のレーンの内、前記動作状態に設定されるレーンの数を減少させるように構成される、
請求項2に記載のメモリシステム。
【請求項4】
前記情報は、前記ホストによって発行された後、前記メモリシステムによってまだ受け付けられていないコマンドの数である第2コマンド数に関する情報を含む、
請求項1に記載のメモリシステム。
【請求項5】
前記コントローラは、
前記第2コマンド数が増加した場合、前記複数のレーンの内、前記動作状態に設定されるレーンの数を増加させ、
前記第2コマンド数が減少した場合、前記複数のレーンの内、前記動作状態に設定されるレーンの数を減少させるように構成される、
請求項4に記載のメモリシステム。
【請求項6】
前記情報は、前記ホストによって発行され、前記メモリシステムによって受け付けられた後、対応する処理が前記メモリシステムにおいてまだ行われていないコマンドの数である第3コマンド数に関する情報を含む、
請求項1に記載のメモリシステム。
【請求項7】
前記コントローラは、
前記第3コマンド数が増加した場合、前記複数のレーンの内、前記動作状態に設定されるレーンの数を増加させ、
前記第3コマンド数が減少した場合、前記複数のレーンの内、前記動作状態に設定されるレーンの数を減少させるように構成される、
請求項6に記載のメモリシステム。
【請求項8】
前記情報は、前記ホストによって発行され、前記メモリシステムによって受け付けられた後、対応する処理が前記メモリシステムにおいて一部行われたもののまだすべての処理が完了していないコマンドの数である第4コマンド数に関する情報を含む、
請求項1に記載のメモリシステム。
【請求項9】
前記コントローラは、
前記第4コマンド数が増加した場合、前記複数のレーンの内、前記動作状態に設定されるレーンの数を増加させ、
前記第4コマンド数が減少した場合、前記複数のレーンの内、前記動作状態に設定されるレーンの数を減少させるように構成される、
請求項8に記載のメモリシステム。
【請求項10】
前記情報は、前記1つ以上のコマンドの少なくともいずれかに応じて前記ホストから前記メモリシステムに転送されるべきデータの内、まだ転送されていないデータの量である第1データ量を示す情報と、前記1つ以上のコマンドの少なくともいずれかに応じて前記メモリシステムから前記ホストに転送されるべきデータの内、まだ転送されていないデータの量である第2データ量を示す情報とを含む、
請求項1に記載のメモリシステム。
【請求項11】
前記コントローラは、
前記第1データ量と、前記第2データ量と、の合計が増加した場合、前記複数のレーンの内、前記動作状態に設定されるレーンの数を増加させ、
前記合計が減少した場合、前記複数のレーンの内、前記動作状態に設定されるレーンの数を減少させるように構成される、
請求項10に記載のメモリシステム。
【請求項12】
前記1つ以上のコマンドの少なくともいずれかに応じて前記ホストから前記メモリシステムに転送されるべきデータは、前記不揮発性メモリに書き込まれるべきデータである、
請求項10に記載のメモリシステム。
【請求項13】
前記1つ以上のコマンドの少なくともいずれかに応じて前記メモリシステムから前記ホストに転送されるべきデータは、前記不揮発性メモリから読み出されたデータである、
請求項12に記載のメモリシステム。
【請求項14】
ランダムアクセスメモリをさらに具備し、
前記情報は、前記1つ以上のコマンドの少なくともいずれかに応じて前記不揮発性メモリに書き込まれるべきデータの、前記ランダムアクセスメモリへの格納が完了したことを示す格納完了情報を含み、
前記コントローラは、前記格納完了情報に応じ、前記複数のレーンの内、前記動作状態に設定されるレーンの数を減少させるように構成される、
請求項1に記載のメモリシステム。
【請求項15】
ランダムアクセスメモリをさらに具備し、
前記情報は、前記1つ以上のコマンドの少なくともいずれかに応じて前記不揮発性メモリから読み出されたデータの、前記ランダムアクセスメモリへの格納が完了したことを示す格納完了情報を含み、
前記コントローラは、前記格納完了情報に応じ、前記複数のレーンの内、前記動作状態に設定されるレーンの数を増加させるように構成される、
請求項1に記載のメモリシステム。
【請求項16】
ランダムアクセスメモリをさらに具備し、
前記情報は、前記1つ以上のコマンドの少なくともいずれかに応じて前記不揮発性メモリから読み出されるべきデータを前記不揮発性メモリから前記ランダムアクセスメモリへ出力する準備が完了したことを示す出力準備完了情報を含み、
前記コントローラは、前記出力準備完了情報に応じ、前記複数のレーンの内、前記動作状態に設定されるレーンの数を増加させるように構成される、
請求項1に記載のメモリシステム。
【請求項17】
前記リンクは、PCIe規格で規定されたリンクパワーステートL0pに設定されている、
請求項1乃至請求項16のいずれか一項に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【0002】
ホストとメモリシステムとを接続するためのインタフェース規格の1つとして、PCI ExpressTM(PCIeTM)規格が知られている。PCIe規格に準拠したインタフェースにより、ホストとメモリシステムとはリンクと称される伝送経路を介して接続される。リンク上では、パケットを用いてデータが伝送される。パケットを用いて伝送されるデータは、例えば、ホストからメモリシステムへの要求、メモリシステムからホストへの応答、またはユーザデータを含む。
【0003】
PCIe規格では、デバイスが動作状態であってもリンクを低消費電力状態に設定可能な機能が規定されている。この機能は、Active State Power Management(ASPM)と称される。
【0004】
リンクを介したパケット伝送が特定の期間無い場合、デバイスは、ASPM機能により、リンクを通常動作状態から低消費電力状態に遷移させる。PCIe規格において、通常動作状態は、例えば、リンクパワーステートL0として規定される。また、低消費電力状態は、例えば、リンクパワーステートL1として規定される。
【0005】
PCIe Gen6(PCIe 6.0規格)では新たに、リンクパワーステートL0内に、flow control unit(FLIT)モードにおけるリンクパワーステートL0pが規定されている。リンクパワーステートL0pは、データ伝送可能であり、且つ消費電力を低減可能なリンクパワーステートである。リンクパワーステートL0pでは、リンク幅(link width)が動的に制御されることによって、消費電力が低減され得る。リンク幅は、リンクに含まれる複数のレーンの内の、通常動作状態に設定されているレーンの数である。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】米国特許出願公開第2021/0042248号明細書
【特許文献2】米国特許出願公開第2019/0250930号明細書
【特許文献3】米国特許第11080212号明細書
【発明の概要】
【発明が解決しようとする課題】
【0007】
本発明の一実施形態は、データ伝送に関する性能と消費電力とのバランスを保つことができるメモリシステムを提供する。
【課題を解決するための手段】
【0008】
実施形態によれば、メモリシステムは、ホストに接続可能である。メモリシステムは、不揮発性メモリと、コントローラとを具備する。コントローラは、不揮発性メモリを制御する。コントローラは、ホストからメモリシステムに対して発行された1つ以上のコマンドに関する情報に基づいて、ホストとメモリシステムとの間のリンクに含まれる複数のレーンの内、動作状態に設定されるレーンの数を決定する。コントローラは、複数のレーンの内、決定された数のレーンを動作状態に設定する。コントローラは、複数のレーンの内、決定された数のレーン以外のレーンを低消費電力状態に設定する。
【図面の簡単な説明】
【0009】
【
図1】実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【
図2】実施形態のメモリシステムにおいて、リンク幅に応じて設定されるレーンの状態の例を示す図。
【
図3】実施形態のメモリシステムにおけるリンク幅の第1の制御例を示すタイムチャート。
【
図4】実施形態のメモリシステムにおいて実行される第1リンク幅制御処理の手順の例を示すフローチャート。
【
図5】実施形態のメモリシステムにおけるリンク幅の第2の制御例を示すタイムチャート。
【
図6】実施形態のメモリシステムにおいて実行される第2リンク幅制御処理の手順の例を示すフローチャート。
【発明を実施するための形態】
【0010】
以下、実施の形態について図面を参照して説明する。
【0011】
まず
図1を参照して、第1実施形態に係るメモリシステムを含む情報処理システム1の構成の例を説明する。情報処理システム1は、ホストデバイス2とメモリシステム3とを含む。
【0012】
ホストデバイス2は、データをメモリシステム3に格納する情報処理装置である。ホストデバイス2は、例えば、大量且つ多様なデータをメモリシステム3に格納するストレージサーバ、またはパーソナルコンピュータである。以下では、ホストデバイス2を、ホスト2と称する。
【0013】
メモリシステム3は、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。不揮発性メモリは、例えば、NAND型フラッシュメモリである。メモリシステム3は、ストレージデバイスとも称される。メモリシステム3は、例えば、ソリッドステートドライブ(SSD)として実現される。
【0014】
メモリシステム3は、ホスト2のストレージとして使用され得る。メモリシステム3は、ホスト2に接続され得る。
【0015】
ホスト2とメモリシステム3とを接続するためのインタフェースは、PCIe、NVM ExpressTM(NVMeTM)等の規格に準拠する。
【0016】
メモリシステム3は、例えば、NAND型フラッシュメモリ4、ダイナミックランダムアクセスメモリ(DRAM)5、およびコントローラ6を備える。
【0017】
NAND型フラッシュメモリ4は、1つ以上のメモリチップを含む。各メモリチップは、ページバッファ41とメモリセルアレイ42とを含む。ページバッファ41は、例えばスタティックランダムアクセスメモリ(SRAM)で構成される。メモリセルアレイ42は、複数のブロックを含む。各ブロックは、それぞれがデータを不揮発に記憶するように構成された複数のメモリセルを含む。1つのブロックは、データ消去動作の最小単位として機能する。ブロックは、「消去ブロック」、または「物理ブロック」と称されることもある。複数のブロックのそれぞれは、複数のページを含む。複数のページのそれぞれは、単一のワード線に接続された複数のメモリセルを含む。1つのページは、データ書き込み動作およびデータ読み出し動作の単位として機能する。なお、ワード線がデータ書き込み動作およびデータ読み出し動作の単位として機能してもよい。
【0018】
データ書き込み動作の際、コントローラ6から受信されたデータは、ページバッファ41に一時的に格納された後、メモリセルアレイ42にプログラムされる。コントローラ6から受信されたデータをページバッファ41に一時的に格納する動作をデータイン動作と称する。また、ページバッファ41に一時的に格納されたデータをメモリセルアレイ42にプログラムする動作をプログラム動作と称する。
【0019】
データ読み出し動作の際、メモリセルアレイ42から読み出されたデータは、ページバッファ41に一時的に格納された後、コントローラ6に出力される。メモリセルアレイ42から読み出されたデータをページバッファ41に一時的に格納する動作をセンス動作と称する。また、ページバッファ41に一時的に格納されたデータをコントローラ6に出力する動作をデータアウト動作と称する。
【0020】
DRAM5は、揮発性のメモリである。DRAM5の記憶領域は、例えば、ファームウェア(FW)の格納領域、および論理物理アドレス変換テーブルのキャッシュ領域として割り当てられる。DRAM5の記憶領域は、ユーザデータを一時的に記憶するバッファ領域として割り当てられてもよい。
【0021】
コントローラ6は、NAND型フラッシュメモリ4およびDRAM5を制御するメモリコントローラである。コントローラ6は、例えば、System-on-a-chip(SoC)のような回路によって実現される。
【0022】
コントローラ6は、例えば、セントラルプロセッシングユニット(CPU)11、NANDインタフェース(NAND I/F)12、DRAMインタフェース(DRAM I/F)13、SRAMインタフェース(SRAM I/F)14、ホストインタフェース(ホストI/F)15、およびSRAM16を含む。これらCPU11、NAND I/F12、DRAM I/F13、SRAM I/F14、およびホストI/F15は、バス10を介して接続されていてもよい。
【0023】
CPU11は、NAND I/F12、DRAM I/F13、SRAM I/F14、およびホストI/F15を制御するように構成されたプロセッサである。CPU11は、NAND型フラッシュメモリ4からDRAM5にロードされたFWを実行することによって、様々な処理を行う。FWは、CPU11に様々な処理を実行させるための命令群を含む制御プログラムである。CPU11は、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU11の動作は、CPU11によって実行されるFWによって制御される。コントローラ6内の各部の機能は、コントローラ6内の専用ハードウェアによって実現されてもよいし、CPU11がFWを実行することによって実現されてもよい。
【0024】
NAND I/F12は、コントローラ6とNAND型フラッシュメモリ4とを電気的に接続する。NAND I/F12は、Toggle DDR、Open NAND Flash Interface(ONFI)等のインタフェース規格に対応する。
【0025】
NAND I/F12は、NAND型フラッシュメモリ4を制御するように構成されたNAND制御回路として機能する。NAND I/F12は、複数のチャネルを介して、NAND型フラッシュメモリ4内の複数のメモリチップにそれぞれ接続されていてもよい。複数のメモリチップが並列に駆動されることにより、NAND型フラッシュメモリ4とコントローラ6との間のアクセスを広帯域化することができる。
【0026】
NAND I/F12は、出力準備完了情報121をコントローラ6内の各部、例えばホストI/F15に送出可能である。出力準備完了情報121は、リードコマンドに応じて読み出されるべきユーザデータをNAND型フラッシュメモリ4から出力する準備が完了したことを示す情報を含む。NAND型フラッシュメモリ4(より詳しくはメモリセルアレイ42)から読み出されたユーザデータは、データアウト動作によって、例えば、SRAM16へ送出され、SRAM16に一時的に格納される。なお、NAND型フラッシュメモリ4から読み出されたユーザデータは、DRAM5へ送出され、DRAM5に一時的に格納されてもよい。NAND I/F12は、例えば、リードコマンドに応じてNAND型フラッシュメモリ4から読み出されるべきユーザデータを、SRAM16またはDRAM5へ出力する準備が完了したことに応じ、出力準備完了情報121をホストI/F15に送出する。NAND I/F12は、例えば、リードコマンドに応じてセンス動作が完了したことに応じ、出力準備完了情報121をホストI/F15に送出する。
【0027】
DRAM I/F13は、DRAM5へのアクセスを制御するように構成されたDRAM制御回路として機能する。
【0028】
SRAM I/F14は、SRAM16を制御するように構成されたSRAM制御回路として機能する。SRAM16は、揮発性のメモリである。SRAM16の記憶領域は、例えば、ユーザデータを一時的に記憶するバッファ領域(データバッファ)として割り当てられる。SRAM16に格納されるユーザデータは、例えば、ライトコマンドに応じてNAND型フラッシュメモリ4に書き込まれるべきユーザデータ、およびリードコマンドに応じてNAND型フラッシュメモリ4から読み出されたユーザデータである。ライトコマンドに応じてNAND型フラッシュメモリ4に書き込まれるべきユーザデータを、ライトデータとも称する。リードコマンドに応じてNAND型フラッシュメモリ4から読み出されたユーザデータを、リードデータとも称する。
【0029】
SRAM I/F14は、データ格納完了情報141をコントローラ6内の各部、例えばホストI/F15に送出可能である。データ格納完了情報141は、ライトデータのSRAM16への格納が完了したことを示す情報と、リードデータのSRAM16への格納が完了したことを示す情報の少なくともいずれかを含む。具体的には、SRAM I/F14は、例えば、ライトデータのSRAM16への格納が完了したことに応じ、データ格納完了情報141をホストI/F15に送出する。SRAM I/F14は、例えば、ライトデータに対するデータイン動作の準備が完了したことに応じ、データ格納完了情報141をホストI/F15に送出する。また、SRAM I/F14は、例えば、リードデータのSRAM16への格納が完了したことに応じ、データ格納完了情報141をホストI/F15に送出する。SRAM I/F14は、例えば、リードデータに対するデータアウト動作が完了したことに応じ、データ格納完了情報141をホストI/F15に送出する。
【0030】
なお、ライトデータがDRAM5に格納される場合には、DRAM I/F13が、ライトデータのDRAM5への格納が完了したことを示す情報をホストI/F15に送出する。また、リードデータがDRAM5に格納される場合には、DRAM I/F13が、リードデータのDRAM5への格納が完了したことを示す情報をホストI/F15に送出する。
【0031】
以下では、SRAM16にライトデータおよびリードデータが格納される場合について例示する。
【0032】
ホストI/F15は、メモリシステム3とホスト2との間の通信を行うインタフェースとして機能する回路である。ホストI/F15は、ホスト2にパケットを送信するための回路と、ホスト2からパケットを受信するための回路とを含む。パケットは、例えば、PCIe規格に準拠したパケットである。パケットは、例えば、コマンド、応答、またはユーザデータを含む。コマンドは、例えば、入出力(I/O)コマンド、または各種制御コマンドである。I/Oコマンドは、例えば、リードコマンド、またはライトコマンドである。
【0033】
ホストI/F15は、例えば、PCIe PHY21、PCIeリンクコントローラ22、およびNVMeコントローラ23を備える。
【0034】
PCIe PHY21は、シリアルインタフェースを介してホスト2と接続される回路である。このシリアルインタフェースは、ホスト2とメモリシステム3とを相互接続可能なリンク31を含む。PCIe PHY21は、PCIe規格で規定された物理レイヤに相当する。PCIe PHY21は、例えば、PCIe規格に準拠した物理的な接続形式を有する。PCIe PHY21は、リンク31を介してデータを物理的に送受信するインタフェース動作を行う。
【0035】
リンク31は、複数のレーンで構成される。複数のレーンそれぞれは、ホスト2からメモリシステム3へ伝送される信号用の信号線と、メモリシステム3からホスト2へ伝送される信号用の信号線とのペアである。複数のレーンそれぞれは、例えば、レーン番号で特定される。
図1では、リンク31が8つのレーン0、レーン1、……、およびレーン7で構成される場合を例示している。8つのレーン0、レーン1、……、およびレーン7は、例えば、0から7までのレーン番号でそれぞれ特定される。
【0036】
PCIeリンクコントローラ22は、リンク31を管理し、PCIe PHY21とNVMeコントローラ23との間でデータをやり取りするための処理を行う回路である。より具体的には、PCIeリンクコントローラ22は、リンク31およびPCIe PHY21を介してホスト2からパケットを受信する。PCIeリンクコントローラ22は、パケットを処理して、例えば、NVMeコントローラ23に送出されるべきデータを取得する。PCIeリンクコントローラ22は、取得されたデータをNVMeコントローラ23に送出する。NVMeコントローラ23に送出されるべきデータは、例えば、NAND型フラッシュメモリ4へのアクセスに関連するデータである。より詳しくは、NVMeコントローラ23に送出されるべきデータは、例えば、NAND型フラッシュメモリ4に対するリードコマンド、ライトコマンド、およびユーザデータである。
【0037】
PCIeリンクコントローラ22は、リンク幅制御部221を備える。リンク幅制御部221は、ホスト2からメモリシステム3に対して発行されたコマンドに関する情報に基づいて、リンク幅を制御する。リンク幅制御部221の具体的な動作については、
図3から
図6を参照して後述する。
【0038】
NVMeコントローラ23は、NAND型フラッシュメモリ4に対するリードコマンド、またはライトコマンドのようなトランザクションを処理する回路である。NVMeコントローラ23は、PCIe PHY21およびPCIeリンクコントローラ22を介してホスト2から受信したデータに含まれるコマンドに応じた動作を行う。また、NVMeコントローラ23は、コマンドに対する応答を含むデータをPCIeリンクコントローラ22およびPCIe PHY21を介してホスト2へ送信するための動作を行う。NVMeコントローラ23による動作は、例えば、NVMe規格に準拠する。また、NVMeコントローラ23は、コマンド情報231を管理する。
【0039】
コマンド情報231は、ホスト2からメモリシステム3に対して発行された1つ以上のコマンドに関する情報を含む。より具体的には、コマンド情報231は、例えば、ホスト2によって発行された後、対応する処理がメモリシステム3においてまだ行われていないコマンドの数に関する情報を含む。ホスト2によって発行された後、対応する処理がメモリシステム3においてまだ行われていないコマンドを、未処理コマンドと称する。未処理コマンドは、(a)ホスト2によって発行された後、メモリシステム3によってまだ受け付けられていないコマンド(以下、未受付コマンドと称する)と、(b)ホスト2によって発行され、メモリシステム3によって受け付けられた後、対応する処理がメモリシステム3においてまだ行われていないコマンド(以下、未実行コマンドと称する)と、(c)ホスト2によって発行され、メモリシステム3によって受け付けられた後、対応する処理がメモリシステム3において一部行われたもののまだすべての処理が完了していないコマンド(以下、未完了コマンドと称する)と、を含む。ホスト2によって発行され、メモリシステム3によって受け付けられたコマンドは、PCIe PHY21およびPCIeリンクコントローラ22を介してホスト2から受信したデータに含まれるコマンドである。コマンド情報231は、例えば、未処理コマンドの総数を示す情報を含む。未処理コマンドの総数は、未受付コマンドの総数、未実行コマンドの総数、および未完了コマンドの総数、のうちのいずれかであってもよい。あるいは、未処理コマンドの総数は、未受付コマンドの総数、未実行コマンドの総数、および未完了コマンドの総数、のうちの任意の2つ以上の総数の和であってもよい。
【0040】
なお、コマンド情報231によって管理される対象のコマンドは、特定の種類のコマンドであってもよい。特定の種類のコマンドは、例えば、リードコマンド、およびライトコマンドである。この場合、コマンド情報231は、例えば、ホスト2によって発行された後、対応する処理がメモリシステム3においてまだ行われていないリードコマンドおよびライトコマンドの総数に関する情報を含む。
【0041】
また、ホスト2によるコマンドの発行は、例えば、ホスト2が、ホスト2内のメモリ(例えば、サブミッションキュー)にコマンドを格納して、コマンドが格納される位置を示すポインタの値を、メモリシステム3内のレジスタ(すなわち、サブミッションキュー・テール・ドアベル・レジスタ)に書き込むことを意味する。メモリシステム3によるコマンドの受け付けは、例えば、メモリシステム3(より詳しくはコントローラ6)がホスト2内のメモリからコマンドをフェッチしたことを意味する。コントローラ6は、例えば、コマンドをフェッチすべき位置を示すポインタ(すなわち、サブミッションキュー・ヘッド・ドアベル・レジスタ)と、サブミッションキュー・テール・ドアベル・レジスタとの差分から、未受付コマンドの数を管理し得る。
【0042】
コマンド情報231は、コマンドに応じてホスト2からメモリシステム3に転送されるべきデータの内、まだ転送されていないデータの量を示す情報と、コマンドに応じてメモリシステム3からホスト2に転送されるべきデータの内、まだ転送されていないデータの量を示す情報とを含んでいてもよい。コマンドに応じてホスト2からメモリシステム3に転送されるべきデータは、例えば、ライトコマンドに応じてNAND型フラッシュメモリ4に書き込まれるべきユーザデータである。コマンドに応じてメモリシステム3からホスト2に転送されるべきデータは、例えば、リードコマンドに応じてNAND型フラッシュメモリ4から読み出されたユーザデータである。以下では、コマンドに応じてホスト2からメモリシステム3に転送されるべきデータの内、まだ転送されていないデータの量と、コマンドに応じてメモリシステム3からホスト2に転送されるべきデータの内、まだ転送されていないデータの量と、の合計を、残りデータ転送量と称する。
【0043】
このように、PCIe PHY21、PCIeリンクコントローラ22、およびNVMeコントローラ23は、ホスト2とメモリシステム3との間のデータ伝送を制御および管理する。
【0044】
ここで、リンクに対して設定されるリンクパワーステートについて説明する。リンクパワーステートは、リンクに対して設定される電力状態である。リンクパワーステートは、例えば、PCIe規格で規定されたASPM機能によって設定される。より具体的には、リンクパワーステートは、例えば、ASPM機能を有するPCIeリンクコントローラ22によって制御される。ASPM機能は、デバイス(例えば、メモリシステム3)が動作状態であってもリンクを低消費電力状態に設定可能な機能である。リンクパワーステートは、例えば、リンクパワーステートL0とリンクパワーステートL1とを含む。リンクパワーステートL0は、通常動作状態(アクティブ状態)である。リンクパワーステートL1は、低消費電力状態(インアクティブ状態)である。
【0045】
リンクパワーステートL0は、リンクパワーステートL0pを含むことがある。リンクパワーステートL0pは、PCIe Gen6で新たに規定されたFLITモードにおけるリンクパワーステートである。FLITモードは、物理レイヤでデータの再送が可能なモードである。FLITモードでは、上位レイヤから受け取ったデータが、例えば256バイト単位のFLITパケットに分解され、FLITパケット単位で再送制御が行われる。リンクパワーステートL0pは、データ伝送可能であり、且つ消費電力を低減可能なリンクパワーステートである。リンクパワーステートL0pでは、少なくとも1つのレーンが通常動作状態(すなわち、データ伝送可能な状態)に維持される。そのため、リンクパワーステートL0pでは、リンクが切れることがない。リンクパワーステートL0pでは、リンク幅が動的に制御されることによって、消費電力が低減され得る。
【0046】
リンクがリンクパワーステートL0pに設定されている間、リンクに含まれる複数のレーンそれぞれは、通常動作状態と低消費電力状態のいずれかに設定される。低消費電力状態における消費電力は、通常動作状態における消費電力よりも低い。通常動作状態に設定されているレーンを、アクティブなレーンとも称する。低消費電力状態に設定されているレーンを、インアクティブなレーンとも称する。リンクパワーステートL0pに遷移したリンク内のインアクティブなレーンでは、リンクパワーステートL1に遷移したリンク内のレーンと同程度の消費電力の低減が期待される。リンク幅は、リンクに含まれる複数のレーンの内のアクティブなレーンの数Nで表される。リンク幅は、例えば、“xN”と表記される。PCIe規格では、例えば、リンクが8つのレーンで構成される場合、リンク幅は、x1、x2、x4、およびx8のいずれかに設定される。つまり、リンクがリンクパワーステートL0pに設定されている間、8つのレーンの内、1つ、2つ、4つ、または8つのレーンが通常動作状態に設定される。残りのレーンは、低消費電力状態に設定される。
【0047】
リンク31がリンクパワーステートL0pに遷移した場合に、8つのレーンそれぞれが設定される状態について具体的に説明する。8つのレーンを、レーン0、レーン1、……、およびレーン7とする。
【0048】
図2は、リンク幅に応じて設定されるレーンの状態の例を示す。
図2では、リンク幅がxNである場合の、アクティブなレーンのレーン番号と、インアクティブなレーンのレーン番号とを示している。なお、レーン0は、リンク幅に関わらず常に通常動作状態に設定されるレーンである。つまり、レーン0は、リンク幅に関わらず常にアクティブなレーンである。
【0049】
リンク幅がx1である場合、レーン0は通常動作状態に設定され、レーン1からレーン7までの7つのレーンは低消費電力状態に設定される。つまり、この場合、リンク幅x1に相当する1つのレーン(レーン0)がアクティブなレーンであり、残りの7つのレーン(レーン1~レーン7)はインアクティブなレーンである。
【0050】
リンク幅がx2である場合、レーン0とレーン1の2つのレーンは通常動作状態に設定され、レーン2からレーン7までの6つのレーンは低消費電力状態に設定される。つまり、この場合、リンク幅x2に相当する2つのレーン(レーン0およびレーン1)がアクティブなレーンであり、残りの6つのレーン(レーン2~レーン7)はインアクティブなレーンである。
【0051】
リンク幅がx4である場合、レーン0からレーン3までの4つのレーンは通常動作状態に設定され、レーン4からレーン7までの4つのレーンは低消費電力状態に設定される。つまり、この場合、リンク幅x4に相当する4つのレーン(レーン0~レーン3)がアクティブなレーンであり、残りの4つのレーン(レーン4~レーン7)はインアクティブなレーンである。
【0052】
リンク幅がx8である場合、レーン0からレーン7までの8つのレーンは通常動作状態に設定される。つまり、この場合、リンク幅x8に相当する8つのレーン(レーン0~レーン7)はアクティブなレーンである。
【0053】
ここで、リンク幅が広げられる、または狭められる場合に状態が遷移するレーンの単位について説明する。
【0054】
リンク幅が広げられる場合、リンク31では、広げられるリンク幅に応じた特定の単位で、レーンが低消費電力状態から通常動作状態に遷移する。具体的には、リンク幅がx1からx2に広げられる場合、1つのレーン(レーン1)が低消費電力状態から通常動作状態に遷移する(
図2中のT1)。リンク幅がx2からx4に広げられる場合、2つのレーン(レーン2およびレーン3)が低消費電力状態から通常動作状態に遷移する(
図2中のT2)。リンク幅がx4からx8に広げられる場合、4つのレーン(レーン4、レーン5、レーン6、およびレーン7)が低消費電力状態から通常動作状態に遷移する(
図2中のT3)。
【0055】
リンク幅が狭められる場合にも同様に、リンク31では、狭められるリンク幅に応じた特定の単位で、レーンが通常動作状態から低消費電力状態に遷移する。具体的には、リンク幅がx8からx4に狭められる場合、4つのレーン(レーン4、レーン5、レーン6、およびレーン7)が通常動作状態から低消費電力状態に遷移する(
図2中のT3)。リンク幅がx4からx2に狭められる場合、2つのレーン(レーン2およびレーン3)が通常動作状態から低消費電力状態に遷移する(
図2中のT2)。リンク幅がx2からx1に狭められる場合、1つのレーン(レーン1)が通常動作状態から低消費電力状態に遷移する(
図2中のT1)。
【0056】
このように、リンク31では、リンク幅が広げられること、または狭められることに応じて、対応する単位のレーンの状態が遷移する。以下では、リンク幅がx1とx2との間で変化する場合に状態が遷移する1つのレーン(レーン1)を、第1グループのレーンとも称する。リンク幅がx2とx4との間で変化する場合に状態が遷移する2つのレーン(レーン2およびレーン3)を、第2グループのレーンとも称する。リンク幅がx4とx8との間で変化する場合に状態が遷移する4つのレーン(レーン4、レーン5、レーン6、およびレーン7)を、第3グループのレーンとも称する。なお、リンク幅に関わらず通常動作状態に設定されるレーン0を、第0グループのレーンとも称する。
【0057】
次いで、
図3から
図6を参照して、PCIeリンクコントローラ22のリンク幅制御部221の具体的な動作について説明する。リンク幅制御部221は、コマンド情報231に基づいて、リンク幅を決定する。そして、リンク幅制御部221は、PCIe PHY21を介して、決定されたリンク幅に対応する数のレーンを通常動作状態に設定し、残りのレーンを低消費電力状態に設定する。
【0058】
具体的には、リンク幅制御部221は、コマンド情報231に基づいて、リンク幅を狭める動作、またはリンク幅を広げる動作を行う。リンク幅を狭める動作は、未処理コマンドの数、および残りデータ転送量のいずれかの減少に応じて、リンク31に含まれるレーンの内、通常動作状態に設定されるレーンの数を減少させ、低消費電力状態に設定されるレーンの数を増加させる動作である。リンク幅を広げる動作は、未処理コマンドの数、および残りデータ転送量のいずれかの増加に応じて、リンク31に含まれるレーンの内、通常動作状態に設定されるレーンの数を増加させ、低消費電力状態に設定されるレーンの数を減少させる動作である。以下では、リンク幅を狭める動作と、リンク幅を広げる動作とをそれぞれ具体的に説明する。なお、ここでは、コマンド情報231が、リードコマンドおよびライトコマンドについての未処理コマンドの総数(以下、未処理リード/ライトコマンド数と称する)を示す場合について例示する。また、リンク31の最大リンク幅がx8であるものとする。
【0059】
(リンク幅を狭める動作)
リンク幅制御部221が未処理リード/ライトコマンド数の減少に応じてリンク幅を狭める動作について説明する。リンク幅を狭める場合のリンク幅xnに対応する閾値を、TNnとする。閾値TNnは、リンク幅をリンク幅xnからリンク幅x(n/2)に狭めるか否かの判定に用いられる閾値である。閾値TNnは、0以上の整数である。リンク幅xnに対応する閾値TNnは、リンク幅x(n/2)に対応する閾値TN(n/2)よりも大きい。
【0060】
具体的には、リンク31の最大リンク幅がx8である場合、リンク幅をx8からx4に狭めるか否かの判定に用いられる閾値は、TN8である。リンク幅をx4からx2に狭めるか否かの判定に用いられる閾値は、TN4である。リンク幅をx2からx1に狭めるか否かの判定に用いられる閾値は、TN2である。リンク幅をx1からx0に狭めるか否か(すなわち、リンクパワーステートL0pからリンクパワーステートL1に遷移させるか否か)の判定に用いられる閾値は、TN1である。TN8は、TN4よりも大きい。TN4は、TN2よりも大きい。TN2は、TN1よりも大きい。TN1は、例えば、0である。
【0061】
図3は、リンク幅制御部221によるリンク幅の第1の制御例を示すタイムチャートである。第1の制御例は、未処理リード/ライトコマンド数の減少に応じて、リンク幅が狭められる場合の制御例を示す。
【0062】
ここでは、時刻t10において、未処理リード/ライトコマンド数がa個であり、リンク31がパワーステートL0に設定されていることを想定する。リンク31がパワーステートL0に設定されている場合、リンク幅はx8(最大リンク幅)である。リンク幅がx8であるので、全てのレーン(レーン0、レーン1、レーン2、レーン3、レーン4、レーン5、レーン6、およびレーン7)が通常動作状態に設定されている。なお、
図3に示した(a-1)は、(TN8+1)よりも大きいものとする。
【0063】
時刻t11において、未処理リード/ライトコマンド数は、(a-1)個に減少している。リンク幅制御部221は、(a-1)が閾値TN8より大きいので、リンク幅x8を維持する。
【0064】
時刻t12において、未処理リード/ライトコマンド数は、(TN8+1)個に減少している。リンク幅制御部221は、(TN8+1)が閾値TN8より大きいので、リンク幅x8を維持する。
【0065】
時刻t13において、未処理リード/ライトコマンド数は、TN8個に減少している。そして、未処理リード/ライトコマンド数は、時刻t13から時刻t14までの期間pの間、TN8個に維持されている。
【0066】
時刻t14において、リンク幅制御部221は、未処理リード/ライトコマンド数が閾値TN8以下である状態が期間p以上継続したことに応じ、リンク31をリンクパワーステートL0からリンクパワーステートL0pに遷移させ、リンク幅をx8からx4に狭める。期間pは、任意に設定される継続時間である。リンク幅制御部221は、リンク幅をx8からx4に狭める場合、PCIe PHY21を介して、例えば、第3グループのレーン(レーン4、レーン5、レーン6、およびレーン7)を低消費電力状態に設定する。
【0067】
次いで、時刻t15において、未処理リード/ライトコマンド数は、(TN4+1)個に減少している。リンク幅制御部221は、(TN4+1)が閾値TN4より大きいので、リンク幅x4を維持する。
【0068】
時刻t16において、未処理リード/ライトコマンド数は、TN4個に減少している。そして、未処理リード/ライトコマンド数は、時刻t16から時刻t17までの期間pの間、TN4個に維持されている。
【0069】
時刻t17において、リンク幅制御部221は、未処理リード/ライトコマンド数が閾値TN4以下である状態が期間p以上継続したことに応じ、リンク幅をx4からx2に狭める。リンク幅制御部221は、リンク幅をx4からx2に狭める場合、PCIe PHY21を介して、例えば、第2グループのレーン(レーン2、およびレーン3)をさらに低消費電力状態に設定する。
【0070】
次いで、時刻t18において、未処理リード/ライトコマンド数は、(TN2+1)個に減少している。リンク幅制御部221は、(TN2+1)が閾値TN2より大きいので、リンク幅x2を維持する。
【0071】
時刻t19において、未処理リード/ライトコマンド数は、TN2個に減少している。そして、未処理リード/ライトコマンド数は、時刻t19から時刻t20までの期間pの間、TN2個に維持されている。
【0072】
時刻t20において、リンク幅制御部221は、未処理リード/ライトコマンド数が閾値TN2以下である状態が期間p以上継続したことに応じ、リンク幅をx2からx1に狭める。リンク幅制御部221は、リンク幅をx2からx1に狭める場合、PCIe PHY21を介して、例えば、第1グループのレーン(レーン1)をさらに低消費電力状態に設定する。
【0073】
次いで、時刻t21において、未処理リード/ライトコマンド数は、(TN1+1)個に減少している。リンク幅制御部221は、(TN1+1)が閾値TN1より大きいので、リンク幅x1を維持する。
【0074】
時刻t22において、未処理リード/ライトコマンド数は、TN1個に減少している。そして、未処理リード/ライトコマンド数は、時刻t22から時刻t23までの期間pの間、TN1個に維持されている。
【0075】
時刻t23において、リンク幅制御部221は、未処理リード/ライトコマンド数が閾値TN1以下である状態が期間p以上継続したことに応じ、リンク31をリンクパワーステートL0pからリンクパワーステートL1に遷移させる。したがって、リンク幅はx0になる。
【0076】
このような制御により、リンク幅制御部221は、未処理リード/ライトコマンド数の減少に応じて、段階的にリンク幅を狭めることができる。なお、
図3に示した第1の制御例において、未処理リード/ライトコマンド数は、残りデータ転送量に置き換えられてもよい。その場合、リンク幅制御部221は、残りデータ転送量の減少に応じて、段階的にリンク幅を狭めることができる。
【0077】
図4は、リンク幅制御部221によって実行される第1リンク幅制御処理の手順の例を示すフローチャートである。第1リンク幅制御処理は、未処理リード/ライトコマンド数の減少に応じてリンク幅を狭める処理である。リンク幅制御部221は、例えば、リンクパワーステートがL0とL0pのいずれかに設定されている間、例えば、期間p毎に第1リンク幅制御処理を実行する。なお、第1リンク幅制御処理で用いられるフラグ(以下、第1フラグと称する)は、例えばメモリシステム3の起動後の初期状態において、クリアされているものとする。第1フラグは、未処理リード/ライトコマンド数が閾値以下になったことを示すフラグである。
【0078】
まず、リンク幅制御部221は、未処理リード/ライトコマンド数を取得する(ステップS101)。リンク幅制御部221は、リンク幅を現在のリンク幅xnから狭める場合の判定に用いられる閾値TNnを取得する(ステップS102)。そして、リンク幅制御部221は、未処理リード/ライトコマンド数が閾値TNn以下であるか否かを判定する(ステップS103)。
【0079】
未処理リード/ライトコマンド数が閾値TNnを上回っている場合(ステップS103でno)、リンク幅制御部221は、第1フラグがセットされているか否かを判定する(ステップS104)。
【0080】
第1フラグがセットされている場合(ステップS104でyes)、リンク幅制御部221は、第1フラグをクリアし(ステップS105)、第1リンク幅制御処理を終了する。つまり、未処理リード/ライトコマンド数が閾値TNn以下である状態が期間p以上継続していないので、リンク幅を狭めることなく、第1リンク幅制御処理を終了する。
【0081】
第1フラグがセットされていない場合(ステップS104でno)、リンク幅制御部221は第1リンク幅制御処理を終了する。つまり、未処理リード/ライトコマンド数が閾値TNnを上回っているので、リンク幅を狭めることなく、第1リンク幅制御処理を終了する。
【0082】
未処理リード/ライトコマンド数が閾値TNn以下である場合(ステップS103でyes)、リンク幅制御部221は、第1フラグがセットされているか否かを判定する(ステップS106)。
【0083】
第1フラグがセットされていない場合(ステップS106でno)、リンク幅制御部221は、第1フラグをセットし(ステップS107)、第1リンク幅制御処理を終了する。
【0084】
第1フラグがセットされている場合(ステップS106でyes)、リンク幅制御部221は、リンク31がリンクパワーステートL0に設定されているか否かを判定する(ステップS108)。
【0085】
リンク31がリンクパワーステートL0に設定されている場合(ステップS108でyes)、リンク幅制御部221は、リンク31を、リンクパワーステートL0からリンクパワーステートL0pに遷移させる(ステップS109)。リンク幅制御部221は、リンク幅を半分に狭める(ステップS110)。そして、リンク幅制御部221は、第1フラグをクリアし(ステップS111)、第1リンク幅制御処理を終了する。
【0086】
リンク31がリンクパワーステートL0に設定されていない場合(ステップS108でno)、すなわち、リンク31がリンクパワーステートL0pに設定されている場合、リンク幅制御部221は、未処理リード/ライトコマンド数が0であるか否かを判定する(ステップS112)。
【0087】
未処理リード/ライトコマンド数が0でない場合(ステップS112でno)、リンク幅制御部221は、リンク幅を半分に狭める(ステップS110)。そして、リンク幅制御部221は、第1フラグをクリアし(ステップS111)、第1リンク幅制御処理を終了する。
【0088】
未処理リード/ライトコマンド数が0である場合(ステップS112でyes)、リンク幅制御部221は、リンク31を、リンクパワーステートL0pからリンクパワーステートL1に遷移させる(ステップS113)。そして、リンク幅制御部221は、第1フラグをクリアし(ステップS111)、第1リンク幅制御処理を終了する。
【0089】
以上の第1リンク幅制御処理により、未処理リード/ライトコマンド数が閾値TNn以下である状態が期間p以上継続した場合、リンク幅制御部221は、リンク幅を半分に狭める。また、未処理リード/ライトコマンド数が閾値TNn以下である状態が期間p以上継続し、且つ未処理リード/ライトコマンド数が0である場合、リンク幅制御部221は、リンク31をリンクパワーステートL0pからリンクパワーステートL1に遷移させる。これにより、メモリシステム3では、未処理リード/ライトコマンド数が減少した場合に、リンク31における必要なデータ転送の性能を維持しながら、消費電力を低減できる。したがって、メモリシステム3では、未処理リード/ライトコマンド数に応じて、リンク31のデータ転送の性能と消費電力のバランスを保つことができる。
【0090】
なお、リンク幅制御部221は、第1リンク幅制御処理において、未処理リード/ライトコマンド数を、残りデータ転送量に置き換えて実行してもよい。その場合、メモリシステム3では、残りデータ転送量に応じて、リンク31のデータ転送の性能と消費電力のバランスを保つことができる。
【0091】
(リンク幅を広げる動作)
次いで、リンク幅制御部221が未処理リード/ライトコマンド数の増加に応じてリンク幅を広げる動作について説明する。リンク幅を広げる場合のリンク幅xnに対応する閾値を、TWnとする。閾値TWnは、リンク幅をリンク幅xnからリンク幅x(2n)に広げるか否かの判定に用いられる閾値である。閾値TWnは、1以上の整数である。リンク幅xnに対応する閾値TWnは、リンク幅x(2n)に対応する閾値TW(2n)よりも小さい。
【0092】
具体的には、リンク31の最大リンク幅がx8である場合、リンク幅をx1からx2に広げるか否かの判定に用いられる閾値は、TW1である。リンク幅をx2からx4に広げるか否かの判定に用いられる閾値は、TW2である。リンク幅をx4からx8に広げるか否かの判定に用いられる閾値は、TW4である。TW1は、TW2よりも小さい。TW2は、TW4よりも小さい。
【0093】
図5は、リンク幅制御部221によるリンク幅の第2の制御例を示すタイムチャートである。第2の制御例は、未処理リード/ライトコマンド数の増加に応じて、リンク幅が広げられる場合の制御例を示す。
【0094】
ここでは、時刻t50において、未処理リード/ライトコマンド数が0個であり、リンク31が、リンク幅がx1であるパワーステートL0pに設定されていることを想定する。リンク幅がx1であるので、第0グループのレーン(レーン0)は通常動作状態に設定され、他の第1グループ、第2グループ、および第3グループのレーン(レーン1、レーン2、レーン3、レーン4、レーン5、レーン6、およびレーン7)は低消費電力状態に設定されている。なお、
図5に示した(TW1-1)は、1よりも大きいものとする。
【0095】
時刻t51において、未処理リード/ライトコマンド数は、1個に増加している。リンク幅制御部221は、1が閾値TW1より小さいので、リンク幅x1を維持する。
【0096】
時刻t52において、未処理リード/ライトコマンド数は、(TW1-1)個に増加している。リンク幅制御部221は、(TW1-1)が閾値TW1より小さいので、リンク幅x1を維持する。
【0097】
時刻t53において、未処理リード/ライトコマンド数は、TW1個に増加している。そして、未処理リード/ライトコマンド数は、時刻t53から時刻t54までの期間qの間、TW1個に維持されている。
【0098】
時刻t54において、リンク幅制御部221は、未処理リード/ライトコマンド数が閾値TW1以上である状態が期間q以上継続したことに応じ、リンク幅をx1からx2に広げる。期間qは、任意に設定される継続時間である。期間qは、期間pと同一であってもよいし、異なっていてもよい。リンク幅制御部221は、リンク幅をx1からx2に広げる場合、PCIe PHY21を介して、例えば、第1グループのレーン(レーン1)を通常動作状態に設定する。
【0099】
次いで、時刻t55において、未処理リード/ライトコマンド数は、(TW2-1)個に増加している。リンク幅制御部221は、(TW2-1)が閾値TW2より小さいので、リンク幅x2を維持する。
【0100】
時刻t56において、未処理リード/ライトコマンド数は、TW2個に増加している。そして、未処理リード/ライトコマンド数は、時刻t56から時刻t57までの期間qの間、TW2個に維持されている。
【0101】
時刻t57において、リンク幅制御部221は、未処理リード/ライトコマンド数が閾値TW2以上である状態が期間q以上継続したことに応じ、リンク幅をx2からx4に広げる。リンク幅制御部221は、リンク幅をx2からx4に広げる場合、PCIe PHY21を介して、例えば、第2グループのレーン(レーン2、およびレーン3)をさらに通常動作状態に設定する。
【0102】
次いで、時刻t58において、未処理リード/ライトコマンド数は、(TW4-1)個に増加している。リンク幅制御部221は、(TW4-1)が閾値TW4より小さいので、リンク幅x4を維持する。
【0103】
時刻t59において、未処理リード/ライトコマンド数は、TW4個に増加している。そして、未処理リード/ライトコマンド数は、時刻t59から時刻t60までの期間qの間、TW4個に維持されている。
【0104】
時刻t60において、リンク幅制御部221は、未処理リード/ライトコマンド数が閾値TW4以上である状態が期間q以上継続したことに応じ、リンク31をリンクパワーステートL0pからリンクパワーステートL0に遷移させる。したがって、リンク幅はx8になる。
【0105】
このような制御により、リンク幅制御部221は、未処理リード/ライトコマンド数の増加に応じて、段階的にリンク幅を広げることができる。なお、
図5に示した第2の制御例において、未処理リード/ライトコマンド数は、残りデータ転送量に置き換えられてもよい。その場合、リンク幅制御部221は、残りデータ転送量の増加に応じて、段階的にリンク幅を広げることができる。
【0106】
また、リンク幅制御部221によるリンク幅を狭める動作とリンク幅を広げる動作とにヒステリシスを持たせてもよい。この場合、例えば、リンク幅をリンク幅xnからリンク幅x(2n)に広げるか否かの判定に用いられる閾値TWnは、リンク幅x(2n)からリンク幅xnに狭めるか否かの判定に用いられる閾値TN(2n)よりも大きな値に設定される。閾値TWnと閾値TN(2n)とが同じ値であったならば、未処理リード/ライトコマンド数が1変化したことに応じて、リンク幅xnとリンク幅x(2n)との間でリンク幅が頻繁に切り替えられる可能性がある。本実施形態のメモリシステム3では、閾値TWnが閾値TN(2n)よりも大きな値に設定されることにより、リンク幅xnとリンク幅x(2n)との間の頻繁な切り替えを回避できる。
【0107】
図6は、リンク幅制御部221によって実行される第2リンク幅制御処理の手順の例を示すフローチャートである。第2リンク幅制御処理は、未処理リード/ライトコマンド数の増加に応じてリンク幅を広げる処理である。リンク幅制御部221は、例えば、リンクパワーステートがL0pに設定されている間、例えば、期間q毎に第2リンク幅制御処理を実行する。なお、第2リンク幅制御処理で用いられるフラグ(以下、第2フラグと称する)は、例えばメモリシステム3の起動後の初期状態において、クリアされているものとする。第2フラグは、未処理リード/ライトコマンド数が閾値以上になったことを示すフラグである。
【0108】
まず、リンク幅制御部221は、未処理リード/ライトコマンド数を取得する(ステップS201)。リンク幅制御部221は、リンク幅を現在のリンク幅xnから広げる場合の判定に用いられる閾値TWnを取得する(ステップS202)。そして、リンク幅制御部221は、未処理リード/ライトコマンド数が閾値TWn以上であるか否かを判定する(ステップS203)。
【0109】
未処理リード/ライトコマンド数が閾値TWn未満である場合(ステップS203でno)、リンク幅制御部221は、第2フラグがセットされているか否かを判定する(ステップS204)。
【0110】
第2フラグがセットされている場合(ステップS204でyes)、リンク幅制御部221は、第2フラグをクリアし(ステップS205)、第2リンク幅制御処理を終了する。つまり、未処理リード/ライトコマンド数が閾値TWn以上である状態が期間q以上継続していないので、リンク幅を広げることなく、第2リンク幅制御処理を終了する。
【0111】
第2フラグがセットされていない場合(ステップS204でno)、リンク幅制御部221は第2リンク幅制御処理を終了する。つまり、未処理リード/ライトコマンド数が閾値TWn未満であるので、リンク幅を広げることなく、第2リンク幅制御処理を終了する。
【0112】
未処理リード/ライトコマンド数が閾値TWn以上である場合(ステップS203でyes)、リンク幅制御部221は、第2フラグがセットされているか否かを判定する(ステップS206)。
【0113】
第2フラグがセットされていない場合(ステップS206でno)、リンク幅制御部221は、第2フラグをセットし(ステップS207)、第2リンク幅制御処理を終了する。
【0114】
第2フラグがセットされている場合(ステップS206でyes)、リンク幅制御部221は、現在のリンク幅から広げられた場合のリンク幅が最大リンク幅であるか否かを判定する(ステップS208)。
【0115】
現在のリンク幅から広げられた場合のリンク幅が最大リンク幅である場合(ステップS208でyes)、リンク幅制御部221は、リンク31を、リンクパワーステートL0pからリンクパワーステートL0に遷移させる(ステップS209)。そして、リンク幅制御部221は、第2フラグをクリアし(ステップS210)、第2リンク幅制御処理を終了する。
【0116】
現在のリンク幅から広げられた場合のリンク幅が最大リンク幅でない場合(ステップS208でno)、リンク幅制御部221は、リンク幅を2倍に広げる(ステップS211)。そして、リンク幅制御部221は、第2フラグをクリアし(ステップS210)、第2リンク幅制御処理を終了する。
【0117】
以上の第2リンク幅制御処理により、リンク幅制御部221は、未処理リード/ライトコマンド数が閾値TWn以上である状態が期間q以上継続した場合に、リンク幅を2倍に広げる。また、広げられたリンク幅が最大リンク幅である場合には、リンク幅制御部221は、リンク31をリンクパワーステートL0pからリンクパワーステートL0に遷移させる。これにより、メモリシステム3では、未処理リード/ライトコマンド数が増加した場合に、消費電力を低減しながら、リンク31において必要なデータ転送の性能を確保できる。したがって、メモリシステム3では、未処理リード/ライトコマンド数に応じて、リンク31のデータ転送の性能と消費電力のバランスを保つことができる。
【0118】
なお、リンク幅制御部221は、第2リンク幅制御処理において、未処理リード/ライトコマンド数を、残りデータ転送量に置き換えて実行してもよい。その場合、メモリシステム3では、残りデータ転送量に応じて、リンク31のデータ転送の性能と消費電力のバランスを保つことができる。
【0119】
また、リンク幅制御部221は、リンク幅を狭める動作とリンク幅を広げる動作のそれぞれにおいて、データ格納完了情報141および出力準備完了情報121をさらに用いてもよい。
【0120】
具体的には、例えば、リンク幅制御部221は、ライトデータのSRAM16への格納が完了したことを示すデータ格納完了情報141に応じ、現在のリンク幅xnをリンク幅x(n/2)に狭める。これは、ホスト2からメモリシステム3に転送されるべきライトデータのSRAM16への格納が完了したことにより、ホスト2からメモリシステム3へのデータ転送に必要なバンド幅が減少することが予測されるためである。
【0121】
例えば、リンク幅制御部221は、リードデータのSRAM16への格納が完了したことを示すデータ格納完了情報141に応じ、現在のリンク幅xnをリンク幅x(2n)に広げる。これは、SRAM16に格納されたリードデータが、メモリシステム3からホスト2に転送されるべきデータであるので、メモリシステム3からホスト2へのデータ転送に必要なバンド幅が増加することが予測されるためである。
【0122】
また例えば、リンク幅制御部221は、リードコマンドに応じてNAND型フラッシュメモリ4から読み出されるべきユーザデータ(リードデータ)を、SRAM16へ出力する準備が完了したことを示す出力準備完了情報121に応じ、現在のリンク幅xnをリンク幅x(2n)に広げる。これは、NAND型フラッシュメモリ4から出力されるリードデータが、SRAM16に格納された後、メモリシステム3からホスト2に転送されるべきデータであるので、メモリシステム3からホスト2へのデータ転送に必要なバンド幅が増加することが予測されるためである。
【0123】
リンク幅制御部221は、データ格納完了情報141および出力準備完了情報121をさらに用いることにより、コマンド情報231だけを用いる場合と比較して、リンク幅をより細かく制御できる。
【0124】
以上説明したように、本実施形態によれば、データ伝送に関する性能と消費電力とのバランスを保つことができる。リンク幅制御部221は、ホスト2からメモリシステム3に対して発行された1つ以上のコマンドに関する情報に基づいて、ホスト2とメモリシステム3との間のリンク31に含まれる複数のレーンの内、動作状態(通常動作状態)に設定されるレーンの数を決定する。リンク幅制御部221は、複数のレーンの内、決定された数のレーンを動作状態(通常動作状態)に設定する。リンク幅制御部221は、複数のレーンの内、決定された数のレーン以外のレーンを低消費電力状態に設定する。低消費電力状態における消費電力は、動作状態(通常動作状態)における消費電力よりも低い。
【0125】
このように、メモリシステム3では、ホスト2からメモリシステム3に対して発行された1つ以上のコマンドに関する情報に基づいて、リンク幅が制御される。これにより、リンク31を介したデータ伝送に関する性能と消費電力とのバランスを保つことができる。
【0126】
本実施形態に記載された様々な機能の各々は、回路(処理回路)によって実現されてもよい。処理回路の例には、中央処理装置(CPU)のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム(命令群)を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。本実施形態に記載されたCPU以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
【0127】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0128】
1…情報処理システム、2…ホスト、3…メモリシステム、4…NAND型フラッシュメモリ、41…ページバッファ、42…メモリセルアレイ、5…DRAM、6…コントローラ、11…CPU、12…NAND I/F、13…DRAM I/F、14…SRAM I/F、16…SRAM、15…ホストI/F、21…PCIe PHY、22…PCIeリンクコントローラ、23…NVMeコントローラ、31…リンク、121…出力準備完了情報、141…データ格納完了情報、221…リンク幅制御部、231…コマンド情報。