(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024151123
(43)【公開日】2024-10-24
(54)【発明の名称】情報処理システム
(51)【国際特許分類】
G06F 12/0868 20160101AFI20241017BHJP
【FI】
G06F12/0868 110
【審査請求】未請求
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2023064266
(22)【出願日】2023-04-11
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】佐野 伸太郎
(72)【発明者】
【氏名】鈴木 智哉
(72)【発明者】
【氏名】梶原 裕嗣
(72)【発明者】
【氏名】檜田 和浩
【テーマコード(参考)】
5B205
【Fターム(参考)】
5B205MM11
5B205NN92
(57)【要約】
【課題】読み出し性能を向上させることが可能な情報処理システムを提供することにある。
【解決手段】実施形態に係る情報処理システムは、プロセッサと、第1メモリデバイスと、不揮発性メモリを含み、ロード/ストアコマンドによって不揮発性メモリにアクセスされる第2メモリデバイスとを具備する。プロセッサは、不揮発性メモリに格納されているデータをロードするためのロードコマンドを発行する前に、データのプリフェッチを指示するリクエストを第1メモリデバイスに書き込む。第2メモリデバイスは、第1メモリデバイスに書き込まれたリクエストに基づいて不揮発性メモリに格納されているデータのプリフェッチを行う制御部を含む。
【選択図】
図1
【特許請求の範囲】
【請求項1】
プロセッサと、
第1メモリデバイスと、
不揮発性メモリを含み、ロード/ストアコマンドによって前記不揮発性メモリにアクセスされる第2メモリデバイスと
を具備し、
前記プロセッサは、前記不揮発性メモリに格納されているデータをロードするためのロードコマンドを発行する前に、前記データのプリフェッチを指示するリクエストを前記第1メモリデバイスに書き込み、
前記第2メモリデバイスは、前記第1メモリデバイスに書き込まれたリクエストに基づいて前記不揮発性メモリに格納されているデータのプリフェッチを行う制御部を含む
情報処理システム。
【請求項2】
前記プリフェッチが行われたデータは、前記リクエストが前記第1メモリデバイスに書き込まれた後に前記プロセッサによって発行されたロードコマンドに基づいてロードされる請求項1記載の情報処理システム。
【請求項3】
前記第2メモリデバイスは、前記不揮発性メモリよりも高速にアクセス可能なキャッシュメモリを含み、
前記制御部は、前記データを前記不揮発性メモリから読み出し、前記読み出されたデータを前記キャッシュメモリに書き込むことによって、前記データのプリフェッチを行う
請求項1記載の情報処理システム。
【請求項4】
前記ロードコマンドに基づいて前記不揮発性メモリに格納されているデータをロードするのに必要な前記プロセッサの第1処理時間は、前記データのプリフェッチを行うのに必要な前記プロセッサの第2処理時間と前記プリフェッチが行われることによって前記キャッシュメモリに書き込まれたデータをロードするのに必要な前記プロセッサの第3処理時間との合計値よりも大きい請求項3記載の情報処理システム。
【請求項5】
前記キャッシュメモリは、SRAMまたはDRAMで構成される請求項3記載の情報処理システム。
【請求項6】
前記制御部は、前記データを前記不揮発性メモリから読み出し、前記読み出されたデータを前記第1メモリデバイスに書き込むことによって、前記データのプリフェッチを行う請求項1記載の情報処理システム。
【請求項7】
前記プロセッサは、前記リクエストが前記第1メモリデバイスに書き込まれたことを前記制御部に通知し、
前記制御部は、前記プロセッサからの通知が検知された場合に、前記リクエストに基づいて前記データのプリフェッチを行う
請求項1記載の情報処理システム。
【請求項8】
前記制御部は、前記第1メモリデバイスを定期的に監視することによって前記リクエストが前記第1メモリデバイスに書き込まれたことが検知された場合に、前記リクエストに基づいて前記データのプリフェッチを行う請求項1記載の情報処理システム。
【請求項9】
前記リクエストは、前記不揮発性メモリに格納されているデータにアクセスするための仮想アドレスを含み、
前記制御部は、前記仮想アドレスをメモリアドレスに変換するための変換テーブルを含み、前記変換テーブルを参照して前記仮想アドレスから変換された物理アドレスを使用して前記データのプリフェッチを行う
請求項1記載の情報処理システム。
【請求項10】
前記リクエストは、プリフェッチが行われるデータのサイズを示すサイズ情報を含み、
前記制御部は、前記リクエストに含まれるサイズ情報に基づいて、前記データのプリフェッチを行う
請求項1記載の情報処理システム。
【請求項11】
前記制御部は、前記データのプリフェッチが完了した場合に、前記リクエストに対するレスポンスを前記第1メモリデバイスに書き込み、
前記プロセッサは、前記レスポンスが前記第1メモリデバイスに書き込まれたことが検知された場合に、前記ロードコマンドを発行する
請求項1記載の情報処理システム。
【請求項12】
前記制御部は、前記リクエストに対するレスポンスを前記第1メモリデバイスに書き込み、
前記レスポンスは、前記データのプリフェッチを行う際に生じる第1レイテンシを示すレイテンシ情報を含み、
前記プロセッサは、前記第1メモリデバイスに書き込まれたレスポンスに含まれるレイテンシ情報によって示される第1レイテンシに基づいて前記ロードコマンドを発行する
請求項1記載の情報処理システム。
【請求項13】
前記レスポンスは、前記データのプリフェッチが行われる前に前記第1メモリデバイスに書き込まれる請求項12記載の情報処理システム。
【請求項14】
前記制御部は、前記第1レイテンシ及び前記プロセッサにおいて指定された第2レイテンシに基づいて前記レスポンスを前記第1メモリデバイスに書き込むか否かを判定し、
前記プロセッサは、前記レスポンスが前記第1メモリデバイスに書き込まれていない場合、前記第2レイテンシに相当する時間が経過した後に前記ロードコマンドを発行する
請求項12記載の情報処理システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、情報処理システムに関する。
【背景技術】
【0002】
近年では、不揮発性メモリ(例えば、NAND型フラッシュメモリ)を備えるメモリデバイスが知られており、このようなメモリデバイスをDRAM(Dynamic Random Access Memory)等で構成されるメインメモリ(主記憶装置)の一部として用いられることが検討されている。
【0003】
しかしながら、上記したメモリデバイスはDRAMよりも低コストであるという利点がある一方で、当該DRAMよりもデータの読み出しレイテンシが長い。したがって、メモリデバイスの読み出し性能を向上させることが求められている。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
そこで、本発明が解決しようとする課題は、メモリデバイスの読み出し性能を向上させることが可能な情報処理システムを提供することにある。
【課題を解決するための手段】
【0006】
実施形態に係る情報処理システムは、プロセッサと、第1メモリデバイスと、不揮発性メモリを含み、ロード/ストアコマンドによって前記不揮発性メモリにアクセスされる第2メモリデバイスとを具備する。前記プロセッサは、前記不揮発性メモリに格納されているデータをロードするためのロードコマンドを発行する前に、前記データのプリフェッチを指示するリクエストを前記第1メモリデバイスに書き込む。前記第2メモリデバイスは、前記第1メモリデバイスに書き込まれたリクエストに基づいて前記不揮発性メモリに格納されているデータのプリフェッチを行う制御部を含む。
【図面の簡単な説明】
【0007】
【
図1】第1実施形態に係る情報処理システムの構成の一例を示すブロック図。
【
図2】第1実施形態に係る情報処理システムの処理手順の一例を示すシーケンスチャート。
【
図3】第1実施形態におけるプリフェッチリクエストキューについて説明するための図。
【
図4】第1実施形態におけるCXLデバイスの読み出し性能について説明するための図。
【
図5】第2実施形態に係る情報処理システムの構成の一例を示すブロック図。
【
図6】第2実施形態に係る情報処理システムの処理手順の一例を示すシーケンスチャート。
【
図7】第2実施形態において実行されるポーリングの概要について説明するための図。
【
図8】第3実施形態に係る情報処理システムの構成の一例を示すブロック図。
【
図9】第3実施形態に係る情報処理システムの処理手順の一例を示すシーケンスチャート。
【
図10】第3実施形態におけるアドレス変換テーブルのデータ構造の一例を示す図。
【
図11】第3実施形態におけるアドレス変換テーブルのデータ構造の他の例を示す図。
【
図12】第4実施形態に係る情報処理システムの構成の一例を示すブロック図。
【
図13】第4実施形態に係る情報処理システムの処理手順の一例を示すシーケンスチャート。
【
図14】第4実施形態に係る情報処理システムの動作の概要について説明するための図。
【
図15】第4実施形態においてコンプリーションキューの代わりにコンプリーションマップが使用される場合の情報処理システムの動作の概要について説明するための図。
【
図16】第4実施形態の第1変形例に係る情報処理システムの処理手順の一例を示すシーケンスチャート。
【
図17】第4実施形態の第1変形例に係る情報処理システムの他の構成を示すブロック図。
【
図18】第4実施形態の第1変形例に係る情報処理システムの更に別の構成を示すブロック図。
【
図19】第4実施形態の第2変形例に係る情報処理システムの処理手順の一例を示すシーケンスチャート。
【
図20】第4実施形態の第2変形例におけるコンプリーション通知判定処理の処理手順の一例を示すフローチャート。
【発明を実施するための形態】
【0008】
以下、図面を参照して、各実施形態について説明する。
(第1実施形態)
まず、第1実施形態について説明する。
図1は、本実施形態に係る情報処理システムの構成の一例を示すブロック図である。
図1に示すように、情報処理システム1は、CPU10、DRAM(Dynamic Random Access Memory)20及びCXLデバイス30を備える。なお、情報処理システム1において、CPU10、DRAM20及びCXLデバイス30は互いにバスを介して接続されている。
【0009】
CPU10は、ホストとして動作する情報処理装置に備えられるプロセッサであり、DRAM20及びCXLデバイス30にアクセス可能に構成されている。なお、CPU10は、例えばマルチコアプロセッサであり、複数のプログラム(アプリケーションプログラム)を並列に実行するように構成されている。
【0010】
DRAM20は、情報処理システム1におけるメインメモリを構成するメモリデバイスである。
【0011】
ここで、本実施形態においては、メインメモリの大容量化のために、CXLデバイス30を更にメインメモリ(の一部)として動作させるものとする。
【0012】
CXLデバイス30は、例えばアプリケーションプログラムを実行するCPU10によってアクセス(ロード/ストア)される各種データを格納するメモリデバイスである。なお、CPU10及びCXLデバイス30を接続するバス(メモリバス)は、例えばCXL(Compute Express LinkTM)規格に準拠したCXLバスである。
CXLは、PCI Express(PCIe)をベースに、CXL.io、CXL.cache及びCXL.memという3つの独立したプロトコルによって構成された規格である。CXLデバイス30は、CPU10からのロード/ストアコマンドによってメディア(不揮発性メモリ)にアクセス可能なCXL.memプロトコルによるインターフェースを備える。また、CXLデバイス30は、CXL.ioプロトコルによるインターフェースを備えていてもよい。CXL.ioは、主にCXLデバイス内のレジスタアクセスに使用される。同様に、CXLデバイス30は、CXL.cacheプロトコルによるインターフェースを備えていてもよい。CXL.cacheは、メディア(不揮発性メモリ)へのアクセスを含み、ホストメモリやキャッシュに対してコヒーレント制御可能なプロトコルとして使用される。以降、本実施形態において特に明記されない限りは、CXLデバイス30へのアクセスにはCXL.memが使用されるものとする。なお、CXLデバイス30は、メモリシステムと称されてもよい。
【0013】
なお、本実施形態においてはCXLバスを介してCPU10と接続されるCXLデバイス30について主に説明するが、当該CXLデバイス30は、他の規格に準拠したバスを介してCPU10と接続される他のメモリデバイスであってもよい。
【0014】
ところで、CXLデバイス30は、後述するように不揮発性メモリを有し、DRAM20とストレージ装置(例えば、SSD等)との中間的な性能を有する。具体的には、CXLデバイス30の記憶容量はDRAM20よりも大きく、CXLデバイス30に対するアクセス速度はストレージ装置よりも高速である。本実施形態においては、このようなCXLデバイス30を用いることによって、実質的にメインメモリの大容量化を実現することができる。
【0015】
しかしながら、CXLデバイス30はDRAM20と比較して不揮発性メモリからデータを読み出す際のレイテンシ(遅延時間)が長いため、当該CXLデバイス30の読み出し性能を向上させる仕組みが必要である。
【0016】
ここで、
図1に示すように、CXLデバイス30は、NAND型フラッシュメモリ(メモリ部)31及びキャッシュメモリ(キャッシュ部)32を含む。
【0017】
NAND型フラッシュメモリ31は、上記した不揮発性メモリに相当する。NAND型フラッシュメモリ31は、例えば3次元構造のフラッシュメモリである。NAND型フラッシュメモリ31は、複数のブロックを有する。複数のブロックの各々は、データ消去動作の単位である。また、複数のブロックの各々は、複数の物理ページを含む。複数の物理ページの各々は、同一ワード線に接続された複数のメモリセルを含む。複数の物理ページの各々は、データ書き込み動作及びデータ読み出し動作の単位である。
【0018】
キャッシュメモリ32は、NAND型フラッシュメモリ31に対してキャッシュメモリとして動作する揮発性メモリであり、CPU10からのストアデータ及び当該NAND型フラッシュメモリ31から読み出されるデータをキャッシュするように動作する。キャッシュメモリ32は、例えばダイレクトマップ方式やマルチウェイセットアソシアティブ方式によって制御される。本実施形態においては、キャッシュメモリ32が例えばCXLデバイス30に備えられるSRAM(Static Random Access Memory)で構成される場合を想定しているが、当該キャッシュメモリ32は、当該CXLデバイス30に備えられるDRAMで構成されても構わない。
【0019】
ここで、上記したNAND型フラッシュメモリ31及びキャッシュメモリ32の動作について簡単に説明する。
【0020】
例えばCPU10がCXLデバイス30からデータをロードする(読み出す)場合には、当該CPU10は、当該データを要求するロードコマンド(MemRd Request)を発行する。このようにCPU10によって発行されたロードコマンドにおいて要求されたデータがキャッシュメモリ32に格納されている場合には、CXLデバイス30は、当該データをキャッシュメモリ32から読み出し、当該データをCPU10に返す。
【0021】
一方、ロードコマンドにおいて要求されたデータがキャッシュメモリ32に格納されていない場合には、CXLデバイス30は、当該データをNAND型フラッシュメモリ31から読み出し、当該データをCPU10に返す。なお、このタイミングでNAND型フラッシュメモリ31から読み出されたデータをキャッシュメモリ32に格納しておくことで、当該データへの後続のロードコマンドに対しては、キャッシュメモリ32から当該データを読み出してCPU10に返すことが可能となる。
【0022】
キャッシュメモリ32(例えば、SRAM)はNAND型フラッシュメモリ31よりも高速にデータを読み出すことが可能であるため、ロードコマンドにおいて要求されたデータがキャッシュメモリ32に格納されている場合には、CXLデバイス30の読み出し性能を向上させることができる。一方、ロードコマンドにおいて要求されたデータがキャッシュメモリ32に格納されていない場合には、CXLデバイス30の読み出し性能を向上させることができない。
【0023】
このため、本実施形態に係る情報処理システム1においては、CPU10がロードコマンドを発行する前にNAND型フラッシュメモリ31に格納されている当該ロードコマンドに基づいてロードされる予定のデータ(以下、対象データと表記)のプリフェッチを行うことにより、当該CXLデバイス30(NAND型フラッシュメモリ31)からデータを読み出す際のレイテンシを隠蔽するものとする。
【0024】
この場合、本実施形態におけるDRAM20は、プリフェッチリクエストキュー21を含む。プリフェッチリクエストキュー21には、CXLデバイス30(NAND型フラッシュメモリ31)に格納されている対象データのプリフェッチを指示するリクエスト(以下、プリフェッチリクエストと表記)が書き込まれる。
【0025】
更に、本実施形態におけるCXLデバイス30は、上記したNAND型フラッシュメモリ31及びキャッシュメモリ32に加えて、プリフェッチ制御部33を含む。また、プリフェッチ制御部33は、ドアベルレジスタ331を含む。
【0026】
本実施形態において、プリフェッチ制御部33は、ハードウェア及びソフトウェアのいずれか一方で実現されることが可能であるし、ハードウェア及びソフトウェアの両方を組み合わせたもので実現されることも可能である。また、CXLデバイス30が、NAND型フラッシュメモリ31に対するデータの書き込み及び読み出しを制御するコントローラを備え、当該コントローラがプリフェッチ制御部33を含むように構成されてもよい。ここで、このコントローラは、System-on-a-Chip(SoC)のような制御回路であり、キャッシュメモリ32に対するデータの書き込み及び読み出しも制御するように構成される。
【0027】
ドアベルレジスタ331には、プリフェッチリクエストキュー21にプリフェッチリクエストが書き込まれたこと(つまり、プリフェッチリクエストキュー21の現在の書き込みポインタ位置)が通知される。プリフェッチ制御部33は、ドアベルレジスタ331におけるプリフェッチリクエストキュー21の書き込みポインタ位置が更新されたことが検知された場合にプリフェッチリクエストキュー21に書き込まれたプリフェッチリクエストを当該プリフェッチリクエストキュー21から読み出し、当該読み出されたプリフェッチリクエストに基づいて対象データのプリフェッチを行う。
【0028】
なお、本実施形態においてプリフェッチとは、例えばNAND型フラッシュメモリ31から対象データを読み出し、当該対象データをキャッシュメモリ32に書き込む(格納する)ことをいう。すなわち、上記したプリフェッチリクエストは、NAND型フラッシュメモリ31からキャッシュメモリ32への対象データの転送命令であるということができる。
【0029】
以下、
図2のシーケンスチャートを参照して、本実施形態に係る情報処理システム1の処理手順の一例について説明する。
【0030】
ここで、上記したようにCPU10を備える情報処理装置(ホスト)において所定のアプリケーションプログラムが実行されることにより、当該CPU10がCXLデバイス30に格納されているデータをロードする場合、CPU10は、当該データを要求するロードコマンドを発行してCXLデバイス30にアクセスする必要がある。
【0031】
しかしながら、本実施形態においてCPU10は、ロードコマンドを発行する前にプリフェッチリクエストを発行し、DRAM20に含まれるプリフェッチリクエストキュー21に当該プリフェッチリクエストを書き込む(ステップS1)。なお、
図2のシーケンスチャートにおいてステップS1等のCPU10の処理に対応づけて示されている矩形のブロックは、当該CPU10の処理時間を表している。以下において説明するシーケンスチャートにおいても同様である。
【0032】
本実施形態においてプリフェッチリクエストキュー21に書き込まれるプリフェッチリクエストには、上記した対象データ(ロードコマンドに基づいてロードされる予定のデータ)に割り当てられているアドレスが含まれる。プリフェチリクエストに含まれるアドレスは、例えばシステムによってCXLデバイス30に割り当てられたメモリアドレス(物理アドレス)を含む。
【0033】
ここで、
図3を参照して、プリフェッチリクエストキュー21について説明する。
図3に示すように、プリフェッチリクエストキュー21は、リングキュー(リングバッファ)として実現されており、複数のプリフェッチリクエストを積むことができる。
【0034】
プリフェッチリクエストキュー21においては、
図3に示す矢印21aの方向に沿って順にプリフェッチリクエストが格納される。また、プリフェッチリクエストキュー21に格納されるプリフェッチリクエストは、読み出しポインタ(Headポインタ)及び書き込みポインタ(Tailポインタ)を用いて管理される。読み出しポインタは、次に読み出されるべきプリフェッチリクエストが格納されている位置を示すポインタであり、プリフェッチ制御部33内で管理される。書き込みポインタは、最後に書き込まれたプリフェッチリクエストが格納されている位置を示すポインタであり、ホスト(CPU10)側で管理される。
【0035】
再び
図2に戻ると、CPU10は、ステップS1においてプリフェッチリクエストキュー21にプリフェッチリクエストが書き込まれたことを通知するために、プリフェッチリクエストキュー21のドアベルレジスタを更新する(ステップS2)。具体的には、CPU10は、CXLデバイス30に含まれるプリフェッチ制御部33のドアベルレジスタ331に書き込みポインタ位置を書き込む。また、上記したようにCXLデバイス30はCXLバスを介してCPU10と接続されているが、ステップS2の処理は、例えばCXL.ioに従って実行されることを想定している。
【0036】
ここで、プリフェッチ制御部33は、ステップS2の処理が実行されることによってドアベルレジスタ331に書き込まれた書き込みポインタ位置が更新されたこと(つまり、CPU10からの通知)を検知した場合、DRAM20にアクセスし、当該書き込みポインタ位置に従ってプリフェッチリクエストキュー21からプリフェッチリクエストを読み出す(ステップS3)。
【0037】
ステップS3の処理が実行されると、プリフェッチ制御部33は、当該ステップS3において読み出されたプリフェッチリクエストに基づいて対象データのプリフェッチを行う(ステップS4)。この場合、プリフェッチ制御部33は、プリフェッチリクエストに含まれるアドレスに基づいてNAND型フラッシュメモリ31から対象データを読み出し、当該読み出された対象データをキャッシュメモリ32に書き込む処理を実行する。
【0038】
ここで、上記したステップS1~S5の処理が実行された後にCPU10によって対象データをロードするためのロードコマンド(MemRd Request)が発行されたものとする(ステップS5)。この場合、上記したステップS4の処理が実行されていることによって対象データがキャッシュメモリ32に格納されているため、CPU10は、当該キャッシュメモリ32から対象データをロードする(読み出す)ことができる(ステップS6)。
【0039】
上記したように本実施形態において、CPU10(プロセッサ)は、ロードコマンドを発行する前に、CXLデバイス30(第2メモリデバイス)に含まれるNAND型フラッシュメモリ31(不揮発性メモリ)に格納されている対象データのプリフェッチを指示するプリフェッチリクエストをDRAM20(第1メモリデバイス)に書き込む。また、本実施形態において、CXLデバイス30に含まれるプリフェッチ制御部33は、DRAM20に書き込まれたプリフェッチリクエストを当該DRAM20から読み出し、当該読み出されたプリフェッチリクエストに基づいて対象データのプリフェッチを行う。
【0040】
本実施形態においては、このような構成により、CPU10はプリフェッチリクエストに基づいてプリフェッチが行われた対象データ(つまり、キャッシュメモリ32に格納されている対象データ)をロードすることができるため、NAND型フラッシュメモリ31から対象データを読み出す際のレイテンシを隠蔽し、CXLデバイス30の読み出し性能を向上させることができる。
【0041】
なお、本実施形態におけるプリフェッチリクエストキュー21は、DRAM20内に複数構成してもよい。また、各プリフェッチリクエストキューの深さは、CXLデバイス30が制御可能な範囲で任意の深さに設定してもよい。
【0042】
ここで、本実施形態の比較例として、CXL規格上のMemSpecRd(speculative_read)を使用して対象データのプリフェッチを行う構成を考える。
【0043】
このような本実施形態の比較例であれば、NAND型フラッシュメモリから対象データを読み出す際のレイテンシを隠蔽することが可能であるが、MemSpecRdの発行可能数についてはCPUにおいて制約がある可能性がある。
【0044】
具体的には、上記したようにCPUがマルチコアプロセッサであり、複数のアプリケーションプログラムを並列に実行するような場合において、CXLデバイスがMemSpecRdを処理(実行)している間にCPUが他の処理を実行するためには、同時にMemSpecRd(つまり、プリフェッチリクエスト)を発行することができる数(outstanding数)が数百~数千程度であると好ましいと考えられる。しかしながら、CPUのハードウェアではこのような数百~数千程度のMemSpecRdの発行可能数を実現することができない可能性が高い。
【0045】
すなわち、上記した本実施形態の比較例においては、MemSpecRd(プリフェッチリクエスト)の発行可能数に限りがあり、CPUの効率的な処理を実現することができない。
【0046】
これに対して、本実施形態におけるプリフェッチリクエストキュー21はDRAM20上に構成されているソフトウェアのキューに相当し、複数のプリフェッチリクエストキュー21を構成することも、各プリフェッチリクエストキュー21の深さを深くすることも可能である。したがって、本実施形態においてプリフェッチリクエストキュー21にプリフェッチリクエストを書き込むことができる数(outstanding数)には上限がないため、CPU10の効率的な処理を実現することが可能である。なお、本実施形態においては、例えばoutstanding数が1000以上のプリフェッチリクエストを発行可能なシステムを想定している。
【0047】
また、本実施形態においては、プリフェッチリクエストがDRAM20に書き込まれたことをCPU10がプリフェッチ制御部33に通知し、当該CPU10からの通知(つまり、ドアベルレジスタ331に書き込まれた書き込みポインタ位置が更新されたこと)が検知された場合にプリフェッチ制御部33がプリフェッチリクエストに基づいて対象データのプリフェッチを行う。本実施形態においては、このような構成により、CPU10から発行されたプリフェッチリクエストを適切に検知して対象データのプリフェッチを行うことが可能となる。
【0048】
なお、本実施形態においては対象データに割り当てられているアドレスがプリフェッチリクエストに含まれるが、当該対象データは、当該アドレスに基づいてNAND型フラッシュメモリ31から読み出されるキャッシュラインサイズ(例えば、64バイト)のデータである。換言すれば、本実施形態においては、キャッシュライン単位でプリフェッチリクエストキュー21にプリフェッチリクエストが書き込まれる場合を想定している。
【0049】
しかしながら、このような構成においては、対象データが複数のキャッシュラインサイズに相当するデータである場合には、複数のプリフェッチリクエストをプリフェッチリクエストキュー21に書き込む(プリフェッチを複数回行う)必要があり、当該プリフェッチリクエスト数が多くなる(outstanding数を多く消費してしまう)。
【0050】
このため、本実施形態は、アドレスに加えてデータサイズ(プリフェッチが行われるデータのサイズを示すサイズ情報)を含むプリフェッチリクエストがプリフェッチリクエストキュー21に書き込まれ、当該データサイズに基づいて対象データのプリフェッチが行われる構成としてもよい。このような構成においては、対象データが複数のキャッシュラインサイズに相当するデータであっても、1つのプリフェッチリクエストに基づいて当該対象データのプリフェッチを行うことが可能であるため、効率的なプリフェッチを実現することができる。
【0051】
また、本実施形態においてはプリフェッチが行われた対象データがCPU10によって発行されたロードコマンドに基づいてロード(アクセス)されるものとして説明したが、当該対象データは必ずしもロードされる必要はない。すなわち、本実施形態は、DRAM20に書き込まれたプリフェッチリクエストに基づいて対象データのプリフェッチを行う構成であればよく、当該プリフェッチされた対象データがロードコマンドに基づいてロードされることなくキャッシュメモリ32から破棄されるような場合も想定され得る。
【0052】
また、本実施形態においては、対象データをNAND型フラッシュメモリ31から読み出し、当該読み出されたデータをキャッシュメモリ32に書き込むことによって、対象データのプリフェッチを行うものとして説明したが、NAND型フラッシュメモリ31は不揮発性メモリの一例であり、当該キャッシュメモリ32の一例はSRAMである。なお、本実施形態において不揮発性メモリとキャッシュメモリ32とはメモリ素子が異なり、キャッシュメモリ32は不揮発性メモリよりも高速にアクセス可能なメモリデバイスで構成されていればよい。具体的には、本実施形態においては、例えばデータの読み出しレイテンシが1μs以上の不揮発性メモリ及びデータの読み出しレイテンシが1μs未満であるキャッシュメモリ32を使用することを想定している。
【0053】
なお、本実施形態においては主にキャッシュメモリ32がSRAMで構成されている場合を想定しているが、当該キャッシュメモリ32は、例えばDRAMで構成されていてもよい。また、キャッシュメモリ32は、例えば他のメモリデバイスによって実現されてもよい。
【0054】
また、不揮発性メモリの一例がNAND型フラッシュメモリ31であるものとして説明したが、当該不揮発性メモリは、NAND型フラッシュメモリ31以外のメモリであってもよい。更に、上記したキャッシュメモリ32がSRAMで構成される場合には、本実施形態は、不揮発性メモリをDRAMに置き換えたような構成であってもよい。
【0055】
更に、本実施形態においてはNAND型フラッシュメモリ31から読み出された対象データがキャッシュメモリ32に書き込まれるものとして説明したが、当該対象データは、キャッシュメモリ32ではなく、例えばDRAM20に格納されてもよい。また、対象データは、CXLデバイス30の外部に設けられているDRAM20以外のメモリデバイス(NAND型フラッシュメモリ31よりも高速にアクセスすることが可能なメモリデバイス)に格納されてもよい。
【0056】
ここで、
図4に示すように、CPU10によって発行されたロードコマンドに基づいてNAND型フラッシュメモリ31に格納されているデータをロードするのに必要なCPU10の処理時間(第1処理時間)を処理時間Aと定義する。一方、
図2に示すように、データのプリフェッチを行うのに必要なCPU10の処理時間(第2処理時間)を処理時間B、当該プリフェッチが行われることによってキャッシュメモリ32に書き込まれたデータをロードするのに必要なCPU10の処理時間(第3処理時間)を処理時間Cと定義する。この場合、処理時間Aが処理時間Bと処理時間Cとの合計値よりも大きいという関係(つまり、B+C<Aの関係)を満たすのであれば、本実施形態の構成により、CXLデバイス30の読み出し性能の向上を達成することができる。
【0057】
なお、本実施形態においてはキャッシュメモリ32が対象データのプリフェッチに用いられるものとして主に説明したが、当該キャッシュメモリ32は、例えばプリフェッチが行われていないデータ(ロードコマンドに基づいてNAND型フラッシュメモリ31からロードされたデータまたはストアコマンドに基づいてNAND型フラッシュメモリ31にストアされたデータ)をキャッシュするために用いられても構わない。
【0058】
(第2実施形態)
次に、第2実施形態について説明する。前述した第1実施形態においてはプリフェッチリクエストがプリフェッチリクエストキューに書き込まれた場合にCPUがドアベルレジスタを更新するものとして説明したが、本実施形態は、CXLデバイスが当該プリフェッチリクエストキューに対するポーリング(定期的にデータを読み出して監視する動作のこと)を実行する。
【0059】
図5は、本実施形態に係る情報処理システムの構成の一例を示すブロック図である。
図5においては、前述した
図1と同様の部分に同一参照符号を付して、その詳しい説明を省略する。ここでは、
図1と異なる部分について主に述べる。
【0060】
図5に示すように、本実施形態におけるプリフェッチ制御部33は、キュー監視部332を含む。
【0061】
キュー監視部332は、DRAM20(に含まれるプリフェッチリクエストキュー21)をポーリングするように動作する。
【0062】
以下、
図6のシーケンスチャートを参照して、本実施形態に係る情報処理システム1の処理手順の一例について説明する。
【0063】
本実施形態において、プリフェッチ制御部33に含まれるキュー監視部332は、プリフェッチリクエストキュー21に対するポーリングを実行する(ステップS11)。
【0064】
ここで、前述した
図2に示すステップS1の処理に相当するステップS12の処理が実行された後にポーリングが実行された場合を想定する(ステップS13)。
【0065】
この場合、キュー監視部332は、ポーリングが実行されることによってプリフェッチリクエストがプリフェッチリクエストキュー21に書き込まれたことを検知し、当該プリフェッチリクエストに基づいて対象データのプリフェッチを行う(ステップS14)。なお、このステップS14の処理は、前述した
図2に示すステップS4の処理と同様の処理である。
【0066】
ステップS14の処理が実行されると、前述した
図2に示すステップS5及びS6の処理が実行される。
【0067】
ここで、
図7を参照して、本実施形態において実行されるポーリングの概要について説明する。
【0068】
前述した第1実施形態においてはプリフェッチリクエストに対象データ(ロードコマンドに基づいてロードされる予定のデータ)に割り当てられているアドレスが含まれるものとして説明したが、本実施形態におけるプリフェッチリクエストには、当該アドレスに加えて、当該プリフェッチリクエストがCXLデバイス30によって未だ処理されていない新たに発行されたプリフェッチリクエスト(以下、新規のプリフェッチリクエストと表記)であるか否かを示すフラグが含まれるものとする。
【0069】
ポーリングにおいて、キュー監視部332は、DRAM20にアクセスし、プリフェッチリクエストキュー21からプリフェッチリクエストを読み出す。具体的には、キュー監視部332は、前述した読み出しポインタに基づいて所定の数のプリフェッチリクエスト(エントリ)をプリフェッチリクエストキュー21から読み出す。
図7に示す例では、8つのプリフェッチリクエストが読み出される例が示されている。
【0070】
次に、キュー監視部332は、プリフェッチリクエストキュー21から読み出されたプリフェッチリクエストの各々に含まれるフラグを参照し、新規のプリフェッチリクエストを特定する。
図7に示す例では、フラグ401が「1」である4つのプリフェッチリクエストが新規のプリフェッチリクエストであり、当該プリフェッチリクエストに基づいて対象データ(当該プリフェッチリクエストに含まれるアドレスが割り当てられているデータ)のプリフェッチが行われる。一方、フラグ401が「0」である4つのプリフェッチリクエストは、破棄される。
【0071】
このようなポーリングによれば、新規のプリフェッチリクエストがプリフェッチリクエストキュー21に書き込まれていることを検知することができる。
【0072】
上記したポーリングにおいては一度に複数のプリフェッチリクエストが読み出されるため、DRAM20及びCXLデバイス30間の通信の回数を削減することができ、当該DRAM20及びCXLデバイス30を接続するバスのトランザクション数を低減することができる。
【0073】
なお、上記したポーリングが実行された場合、プリフェッチリクエストキュー21から読み出されたプリフェッチリクエストのうちフラグ401が有効なプリフェッチリクエストの数に基づいてプリフェッチ制御部33内の読み出しポインタが更新される。
【0074】
ところで、本実施形態においてはプリフェッチリクエストに含まれるフラグに基づいて新規のプリフェッチリクエストがプリフェッチリクエストキュー21に書き込まれていることを検知するが、「1(High)」を有効なフラグとして定義した場合、当該プリフェッチリクエストの読み出し処理あるいはプリフェッチ処理が完了した時点でフラグを「0(Low)」に戻すクリア処理を行う必要がある。
【0075】
しかしながら、クリア処理は、プリフェッチリクエストキュー21からプリフェッチリクエストを読み出す処理を阻害する要因となり得る。
【0076】
そこで、ここでは上記したクリア処理を不要とするフラグの管理方法の一例について説明する。
【0077】
前述した第1実施形態と同様にプリフェッチリクエストキュー21がリングキュー(リングバッファ)として実現されている場合、本実施形態におけるフラグの管理方法としては、当該プリフェッチリクエストキュー21の周回毎にフラグを反転して書き込むフェーズビット方式が適用され得る。
【0078】
フェーズビット方式において、CPU10は、プリフェッチリクエストキュー21内のプリフェッチリクエストに含まれるフラグ(のフィールド)を例えば「0(Low)」で初期化する。
【0079】
CPU10は、奇数周回時において書き込みポインタに基づいてプリフェッチリクエストキュー21にプリフェッチリクエストを書き込む場合、当該プリフェッチリクエストに含まれるフラグを「1(High)」にセットする。
【0080】
この場合、キュー監視部332は、奇数周回時にプリフェッチリクエストキュー21内のプリフェッチリクエストに含まれるフラグが「1」である場合には当該プリフェッチリクエストが新規のプリフェッチリクエストであることを認識し、当該フラグが「0」である場合には当該プリフェッチリクエストが新規のプリフェッチリクエストでないことを認識することができる。
【0081】
一方、CPU10は、偶数周回時において書き込みポインタに基づいてプリフェッチリクエストキュー21にプリフェッチリクエストを書き込む場合、当該プリフェッチリクエストに含まれるフラグを「0」にセットする。
【0082】
この場合、キュー監視部332は、偶数周回時にプリフェッチリクエストキュー21内のプリフェッチリクエストに含まれるフラグが「0」である場合には当該プリフェッチリクエストが新規のプリフェッチリクエストであることを認識し、当該フラグが「1」である場合には当該プリフェッチリクエストが新規のプリフェッチリクエストでないことを認識することができる。
【0083】
すなわち、上記したフェーズビット方式において、新規のプリフェッチリクエストであるか否かを示すフラグは、プリフェッチリクエストキュー21の周回に従って反転する。この場合、キュー監視部332は、プリフェッチリクエストキュー21の周回に従って、新規のプリフェッチリクエストであるか否かを認識する基準を反転するように動作する。
【0084】
このようなフェーズビット方式によれば、新規のプリフェッチリクエストに基づいて対象データのプリフェッチが行われた場合に当該プリフェッチリクエストに含まれるフラグを変更するクリア処理を実行する必要がないため、当該クリア処理によってプリフェッチリクエストキュー21からプリフェッチリクエストを読み出す処理が阻害されることはない。
【0085】
上記したように本実施形態においては、DRAM20を定期的に監視する(つまり、ポーリングを実行する)ことによってプリフェッチリクエストが当該DRAM20(プリフェッチリクエストキュー21)に書き込まれたことが検知された場合に、当該プリフェッチリクエストに基づいて対象データのプリフェッチを行う。
【0086】
本実施形態においては、前述した第1実施形態と比較して、CPU10はドアベルレジスタ331を更新する(ドアベルレジスタ331に書き込みポインタ位置を書き込む)必要がないため、当該CPU10の負荷を低減することができる。
【0087】
(第3実施形態)
次に、第3実施形態について説明する。前述した第1実施形態においてはプリフェッチリクエストに例えばシステムによってCXLデバイス30に割り当てられたメモリアドレス(物理アドレス)が含まれるものとして主に説明したが、本実施形態は、当該プリフェッチリクエストに仮想アドレスが含まれ、CXLデバイス側で当該仮想アドレスをメモリアドレス(物理アドレス)に変換する。
【0088】
なお、仮想アドレスとは、アプリケーション毎に割り当てられたアドレスを指す。すなわち、このような仮想アドレスにおいては、例えばアプリケーション1の仮想アドレス0x0が物理アドレス0x1000を示し、アプリケーション2の仮想アドレス0x0が物理アドレス0x2000を示すような場合があり得る。
【0089】
図8は、本実施形態に係る情報処理システムの構成の一例を示すブロック図である。
図8においては、前述した
図1と同様の部分に同一参照符号を付して、その詳しい説明を省略する。ここでは、
図1と異なる部分について主に述べる。
【0090】
図8に示すように、本実施形態におけるプリフェッチ制御部33は、アドレス変換部333を含む。
【0091】
ここで、本実施形態においてCPU10がプリフェッチリクエストキュー21に書き込むプリフェッチリクエストには、対象データ(ロードコマンドに基づいてロードされる予定のデータ)にアクセスするための仮想アドレスが含まれる。
【0092】
アドレス変換部333は、アドレス変換テーブルを含む。アドレス変換部333は、アドレス変換テーブルを参照して、プリフェッチリクエストに含まれる仮想アドレスをメモリアドレス(物理アドレス)に変換する。
【0093】
本実施形態においては、このようにアドレス変換部333によって仮想アドレスから変換された物理アドレスを使用して対象データのプリフェッチが行われる。
【0094】
以下、
図9のシーケンスチャートを参照して、本実施形態に係る情報処理システム1の処理手順の一例について説明する。
【0095】
まず、前述した
図2に示すステップS1~S3の処理に相当するステップS21~S23の処理が実行される。なお、ステップS21においてプリフェッチリクエストキュー21に書き込まれたプリフェッチリクエスト(つまり、ステップS23においてプリフェッチリクエストキュー21から読み出されたプリフェッチリクエスト)には、上記したように仮想アドレスが含まれているものとする。
【0096】
この場合、プリフェッチ制御部33に含まれるアドレス変換部333は、アドレス変換テーブルを参照して、プリフェッチリクエストに含まれる仮想アドレスをメモリアドレス(物理アドレス)に変換する(ステップS25)。
【0097】
図10は、アドレス変換テーブルのデータ構造の一例を示す。
図10に示すように、アドレス変換テーブルは、仮想アドレス及び物理アドレスを対応づけて格納する。
【0098】
図10に示す例では、アドレス変換テーブルには、仮想アドレス0及び物理アドレス0が対応づけて格納されている。これによれば、例えばプリフェッチリクエストに仮想アドレス0が含まれている場合、アドレス変換部333は、当該仮想アドレス0を物理アドレス0に変換することができる。
【0099】
同様に、アドレス変換テーブルには、仮想アドレス1及び物理アドレス1が対応づけて格納されている。これによれば、例えばプリフェッチリクエストに仮想アドレス1が含まれている場合、アドレス変換部333は、当該仮想アドレス1を物理アドレス1に変換することができる。
【0100】
更に、アドレス変換テーブルには、仮想アドレス2及び物理アドレス2が対応づけて格納されている。これによれば、例えばプリフェッチリクエストに仮想アドレス2が含まれている場合、アドレス変換部333は、当該仮想アドレス2を物理アドレス2に変換することができる。
【0101】
ここでは仮想アドレス0~2がそれぞれ物理アドレス0~2に変換される場合について説明したが、プリフェッチリクエストに他の仮想アドレスが含まれている場合であっても同様にアドレス変換テーブルを参照して当該仮想アドレスを物理アドレスに変換することができる。
【0102】
なお、
図10に示すアドレス変換テーブルは、例えばCPU10によってアドレス変換部333に予め設定されているものとする。
【0103】
再び
図9に戻ると、
図2に示すステップS4~S6の処理に相当するステップS25~S27の処理が実行される。なお、ステップS25において、プリフェッチ制御部33は、ステップS24において仮想アドレスから変換された物理アドレスに基づいてNAND型フラッシュメモリ31から対象データを読み出し、当該読み出された対象データをキャッシュメモリ32に書き込む処理を実行する。
【0104】
上記したように本実施形態においては、プリフェッチリクエストが対象データにアクセスするための仮想アドレスを含み、アドレス変換テーブルを参照して当該仮想アドレスから変換された物理アドレスを使用して対象データのプリフェッチを行う。
【0105】
本実施形態においては、このような構成により、CPU10は仮想アドレスを使用してプリフェッチを指示することができるため、当該CPU10(を備える情報処理装置)において実行されるアプリケーションプログラムを開発する容易性が向上する。
【0106】
また、通常、アプリケーションは仮想アドレスのみで記憶領域を管理しており、仮想アドレスから物理アドレスへの変換はシステムが行う。このため、プリフェッチリクエスト内に物理アドレスを指定するためには、システムが行う変換と同じ処理をアプリケーションが行わなければならず、アプリケーション処理の負荷が増大する要因となる。本実施形態においては、この仮想アドレスから物理アドレスへの変換をCXLデバイス30が行うことで、アプリケーションは仮想アドレスのみで記憶領域を管理することが可能となり、アドレス変換にかかる負荷の増大を回避することができる。
【0107】
なお、本実施形態においては
図10に示す仮想アドレス及び物理アドレスを対応づけて格納するアドレス変換テーブルについて説明したが、当該アドレス変換テーブルは、
図11に示すように仮想アドレス範囲及び物理アドレス範囲を対応づけて格納するように構成されていてもよい。仮想アドレス範囲とは、複数の仮想アドレスから構成される範囲である。同様に、物理アドレス範囲とは、複数の物理アドレスから構成される範囲である。なお、仮想アドレス範囲及び物理アドレス範囲は、それぞれ開始アドレス及びサイズで表されてもよい。
【0108】
このようなアドレス変換テーブルによれば、例えばプリフェッチリクエストに仮想アドレス範囲が含まれている場合に、当該仮想アドレス範囲を物理アドレス範囲に変換し、当該物アドレス範囲を構成する複数の物理アドレスを使用して対象データのプリフェッチを行うことが可能となる。このような構成においては、仮想アドレス毎にプリフェッチリクエストを発行する(プリフェッチリクエストキュー21に書き込む)必要がないため、効率的なプリフェッチを実現することが可能となる。
【0109】
また、本実施形態においてはプリフェッチリクエストに仮想アドレスが含まれるものとして説明したが、当該仮想アドレスは、NAND型フラッシュメモリ31内の物理アドレスに変換することが可能な他の情報であってもよい。具体的には、例えば情報処理装置(CPU10)側でメモリ領域を分割して管理しているような場合には、対象データが格納されているメモリ領域を識別するためのメモリ領域ID及び当該メモリ領域内における対象データの位置に相当するオフセット(領域内offset)の組み合わせを仮想アドレスの代わりに使用してもよい。この場合、アドレス変換テーブルには、メモリ領域ID及びオフセットの組と当該メモリ領域ID及びオフセットの組から変換される物理アドレスとが対応づけて格納されていればよい。すなわち、本実施形態における仮想アドレスは、情報処理装置におけるデータの管理方法に応じて変更されても構わない。
【0110】
なお、本実施形態においては前述した第1実施形態において説明したプリフェッチ制御部33にアドレス変換部333が追加された構成について説明したが、本実施形態は、前述した第2実施形態に適用されても構わない。具体的には、本実施形態は、前述した
図5に示すプリフェッチ制御部33にアドレス変換部333が追加された構成であってもよい。
【0111】
(第4実施形態)
次に、第4実施形態について説明する。前述した第1実施形態においては単にプリフェッチリクエストがプリフェッチリクエストキューに書き込まれた後にロードコマンドが発行されるものとして説明したが、本実施形態は、プリフェッチリクエストに基づくプリフェッチの完了を示すレスポンス(以下、コンプリーション通知と表記)に基づいてロードコマンドを発行する。
【0112】
図12は、本実施形態に係る情報処理システムの構成の一例を示すブロック図である。
図12においては、前述した
図1と同様の部分に同一参照符号を付して、その詳しい説明を省略する。ここでは、
図1と異なる部分について主に述べる。
【0113】
図12に示すように、本実施形態におけるDRAM20は、コンプリーションキュー22(コンプリーション領域)を含む。コンプリーションキュー22には、プリフェッチリクエストキュー21に書き込まれたプリフェッチリクエストに基づいて対象データのプリフェッチが完了した場合に、上記したコンプリーション通知が書き込まれる。
【0114】
本実施形態において、CPU10は、コンプリーション通知がコンプリーションキュー22に書き込まれたことが検知された場合に、ロードコマンドを発行する。
【0115】
以下、
図13のシーケンスチャートを参照して、本実施形態に係る情報処理システム1の処理手順の一例について説明する。
【0116】
まず、前述した
図2に示すステップS1~S4の処理に相当するステップS31~S34の処理が実行される。
【0117】
ここで、本実施形態においてはプリフェッチリクエストに基づいて対象データのプリフェッチが完了した場合にコンプリーションキュー22にコンプリーション通知が書き込まれるが、CPU10は、上記したステップS32の処理が実行された後に、当該コンプリーション通知がコンプリーションキュー22に書き込まれたことを検知するためのポーリングを実行する(ステップS35)。
【0118】
上記したステップS34における対象データのプリフェッチが完了した場合、プリフェッチ制御部33は、コンプリーション通知をコンプリーションキュー22に書き込む(ステップS36)。
【0119】
次に、ステップS36の処理が実行された後にCPU10によるポーリングが実行された場合を想定する(ステップS37)。この場合、コンプリーションキュー22にコンプリーション通知が書き込まれたことがCPU10において検知され、前述した
図2に示すステップS5及びS6の処理に相当するステップS38及びS39の処理が実行される。
【0120】
ここで、
図14を参照して、本実施形態に係る情報処理システム1の動作の概要について説明する。
【0121】
図14に示すように、本実施形態におけるコンプリーションキュー22は、プリフェッチリクエストキュー21と同様にリングキュー(リングバッファ)として実現されているものとする。
【0122】
また、プリフェッチ制御部33によって読み出しポインタに基づいてプリフェッチリクエストキュー21からプリフェッチリクエストが読み出され、当該プリフェッチリクエストに基づいて対象データのプリフェッチが完了した場合を想定する。
【0123】
この場合、プリフェッチ制御部33は、コンプリーションキュー22にコンプリーション通知を書き込む。なお、コンプリーション通知は、例えばプリフェッチリクエスト(が読み出されたプリフェッチリクエストキュー21の領域)に対応するコンプリーションキュー22の領域に書き込まれる。
【0124】
CPU10は、このようなコンプリーションキュー22に対するポーリングを実行することによって、上記したように対象データのプリフェッチが完了したプリフェッチリクエストに対応するコンプリーション通知がコンプリーションキュー22に書き込まれたことを検知し、当該対象データを要求するロードコマンドを発行することができる。
【0125】
ここではコンプリーションキュー22にコンプリーション通知が書き込まれるものとして説明したが、コンプリーション通知は、
図15に示すようなコンプリーションマップ23に書き込まれてもよい。なお、コンプリーションマップ23によるコンプリーション通知は、CPU10がプリフェッチリクエストに対応するコンプリーション通知の格納位置(インデックス)をプリフェッチリクエスト内のフィールドで指定する方式によって実現される。CPU10は、プリフェッチリクエストで指定したインデックス位置を監視してコンプリーション通知が書き込まれていることを検知することによって、当該プリフェッチリクエストの処理が完了したことを判別する。このようにプリフェッチリクエストの処理が完了したことが判別された(つまり、プリフェッチの完了が検知された)場合、CPU10は、対象データを要求するロードコマンドを発行することができる。この方式によれば、コンプリーションキュー22にかかる制御負荷を削減することが可能となり、CPU10の負荷が軽減される。
【0126】
上記したように本実施形態においては、コンプリーション通知(プリフェッチリクエストに対するレスポンス)がDRAM20に書き込まれたことが検知された場合にロードコマンドが発行される構成により、CPU10は、対象データのプリフェッチが完了していないにもかかわらずロードコマンドを発行することを回避する(つまり、プリフェッチ対象データのプリフェッチが完了したことを確認してロードコマンドを発行する)ことが可能となる。
【0127】
ところで、本実施形態においては
図13に示す処理が実行されるものとして説明したが、当該
図13に示す処理においては、対象データのプリフェッチにおいてNAND型フラッシュメモリ31から対象データを読み出す際のレイテンシに加えて、対象データのプリフェッチが完了してからCPU10がロードコマンドを発行するまでのレイテンシが更に発生する。
【0128】
以下、
図16のシーケンスチャートを参照して、上記した対象データのプリフェッチが完了してからCPU10がロードコマンドを発行するまでに発生するレイテンシを低減する情報処理システム1(以下、本実施形態の第1変形例と表記)の処理手順の一例について説明する。
【0129】
まず、上記した
図13に示すステップS31~S33の処理に相当するステップS41~S43の処理が実行される。
【0130】
また、CPU10は、ステップS42処理が実行された後に、コンプリーション通知がコンプリーションキュー22に書き込まれたことを検知するためのポーリングを実行する(ステップS44)。
【0131】
ここで、本変形例において、プリフェッチ制御部33は、ステップS43においてプリフェッチリクエストキュー21から読み出されたプリフェッチリクエストに基づいて対象データのプリフェッチを行う前に、コンプリーション通知をコンプリーションキュー22に書き込む(ステップS45)。
【0132】
なお、本変形例においてコンプリーションキュー22に書き込まれるコンプリーション通知には、対象データのプリフェッチを行う(つまり、対象データをNAND型フラッシュメモリ31から読み出し、当該読み出された対象データをキャッシュメモリ32に書き込む)際に発生するレイテンシを示すレイテンシ情報が含まれる。このレイテンシ情報は、例えば予めCXLデバイス30(プリフェッチ制御部33)において管理(設定)されていればよい。
【0133】
ステップS45の処理が実行されると、上記した
図13に示すステップS34の処理に相当するステップS46の処理が実行される。
【0134】
次に、ステップS45の処理が実行された後にCPU10によるポーリングが実行された場合を想定する(ステップS47)。この場合、CPU10は、コンプリーションキュー22にコンプリーション通知が書き込まれたことを検知し、当該コンプリーションキュー22に書き込まれたコンプリーション通知に含まれるレイテンシ情報によって示されるレイテンシに相当する時間(以下、待機時間と表記)が経過するまで待機する(ステップS48)。なお、ステップS48においてはCPU10が待機するものとして説明したが、当該ステップS48においてCPU10は待機時間が経過するまでの間に他の処理を実行しても構わない。
【0135】
ステップS48の処理が実行されると、上記した
図13に示すステップS38及びS39の処理に相当するステップS49及びS50の処理が実行される。なお、ステップS49及びS50の処理は、待機時間が経過した後の任意のタイミングで実行されればよい。
【0136】
上記した本変形例においては、CXLデバイス30からコンプリーションキュー22に書き込まれるコンプリーション通知に含まれるレイテンシ情報(つまり、CXLデバイス30から通知されるレイテンシ)に基づいてCPU10がロードコマンドを発行する構成により、対象データのプリフェッチが完了してからCPU10がロードコマンドを発行するまでに発生するレイテンシを低減することができる。
【0137】
なお、ここでは対象データがNAND型フラッシュメモリ31に格納されている(つまり、キャッシュメモリ32には格納されていない)ことを想定しているが、対象データが既にキャッシュメモリ32に格納されている場合がある。この場合、CPU10は、上記した待機時間が経過するまで待機することなく、ロードコマンドを発行することができる。
【0138】
このため、本変形例においては、
図17に示すように、プリフェッチ制御部33がレイテンシ決定部334を含む構成であってもよい。
【0139】
レイテンシ決定部334は、CXLデバイス30内のデータが格納されているメディア(NAND型フラッシュメモリ31またはキャッシュメモリ32)を示すメディア情報を含み、当該メディア情報に基づいてCPU10に通知するレイテンシを決定する。
【0140】
具体的には、例えばメディア情報によって対象データがNAND型フラッシュメモリ31に格納されていることが示される場合、レイテンシ決定部334は、対象データをNAND型フラッシュメモリ31から読み出し、当該読み出された対象データをキャッシュメモリ32に書き込む際のレイテンシ(以下、NAND型フラッシュメモリ31用のレイテンシと表記)を、CPU10に通知するレイテンシとして決定する。
【0141】
一方、例えばメディア情報によって対象データがキャッシュメモリ32に格納されていることが示される場合、対象データのプリフェッチを行う必要がないため、レイテンシ決定部334は、少なくとも上記したNAND型フラッシュメモリ31用のレイテンシよりも短いレイテンシ(以下、キャッシュメモリ32用のレイテンシと表記)を、CPU10に通知するレイテンシとして決定することができる。なお、キャッシュメモリ32用のレイテンシは0であってもよい。
【0142】
この場合、上記したようにレイテンシ決定部334によって決定されたレイテンシを示すレイテンシ情報を含むコンプリーション通知がコンプリーションキュー22に書き込まれる。
【0143】
なお、対象データが格納されているメディアとレイテンシとの対応関係(つまり、メディア情報に基づいてレイテンシを決定するために用いられる情報)は、予めレイテンシ決定部334において管理(設定)されているものとする。
【0144】
ここでは対象データがNAND型フラッシュメモリ31またはキャッシュメモリ32(例えば、SRAM)に格納されている場合について説明したが、
図18に示すように、キャッシュメモリ32はSRAM321に加えてDRAM322を備えた多段キャッシュを構成していてもよい。このような構成において、プリフェッチリクエストの対象データがDRAM322に存在する場合は、当該DRAM322から対象データを読み出してSRAM321に書き込みを行う。つまり、レイテンシ決定部334は、DRAM322から対象データを読み出し、当該対象データをSRAM321に書き込む際に発生するレイテンシをCPU10に通知するレイテンシとして決定する。
【0145】
このように、階層化されたメモリ構成においては、対象データが存在するメモリの読み出しレイテンシからプリフェッチ先のメモリへの書き込みレイテンシを、CPU10に通知するレイテンシ(情報)として決定する。なお、階層化されたメモリ構成においては、SRAM321とNAND型フラッシュメモリ31との中間の性能を有するメモリ素子としてのDRAM322や磁気メモリ等を用いることが考えられるが、例えばNAND型フラッシュメモリ31よりも低速でアクセスされるメモリ素子やSSDのようなストレージ装置を下位の記憶領域として用いることも考えられる。いずれの構成においても、前述したB+C<Aの関係を満たすのであれば、CXLデバイス30の読み出し性能の向上を達成することができる。
【0146】
上記したように本変形例においては、対象データが格納されているメディア(を示すメディア情報)に応じて異なるレイテンシを示すレイテンシ情報を含むコンプリーション通知をコンプリーションキュー22に書き込む構成により、CPU10が必要以上に待機してしまうような状況(CPU10の非効率的な動作)を回避することが可能となる。
【0147】
なお、例えば対象データのプリフェッチを行う際に発生するレイテンシは、NAND型フラッシュメモリ31に対する他のデータの書き込み処理(ストアコマンド)や読み出し処理(ロードコマンド)等の影響を受けると考えられる。このため、上記したコンプリーション通知に含まれるレイテンシ情報は、既に発行されているコマンド(ストアコマンド及びロードコマンド)の数等に応じて変更されても構わない。
【0148】
ところで、上記した本実施形態の第1変形例においてはプリフェッチ制御部33がコンプリーション通知をコンプリーションキュー22に書き込み(つまり、CXLデバイス30がコンプリーション通知をDRAM20に送信し)、かつ、CPU10がポーリングを実行する(コンプリーション通知を複数回読み出す)必要があり、情報処理システム1の負荷が大きくなる可能性がある。
【0149】
以下、
図19のシーケンスチャートを参照して、上記した負荷を低減する情報処理システム1(以下、本実施形態の第2変形例と表記)の処理手順の一例について説明する。以下の説明においては、上記した本実施形態の第1変形例において説明したレイテンシ情報によって示されるレイテンシを、便宜的に、第1レイテンシと称する。
【0150】
まず、本変形例においては、CPU10において想定されているレイテンシ(以下、第2レイテンシと表記)が当該CPU10からCXLデバイス30に通知されるものとする(ステップS61)。第2レイテンシは、CPU10において指定される値であればよいが、例えば情報処理装置(CPU10)において実行されるアプリケーションプログラムに従って決定される。具体的には、第2レイテンシは、例えばプリフェッチ後の別の処理にかかる時間に従って決定され得る。また、情報処理装置において複数のアプリケーションプログラムの処理を切り替えて実行するような場合には、第2レイテンシは、例えば当該処理を切り替える間隔等に従って決定され得る。
【0151】
次に、上記した
図16に示すステップS41~S43の処理に相当するステップS62~S64の処理が実行される。
【0152】
ステップS64の処理が実行されると、プリフェッチ制御部33は、上記した第1レイテンシ及びステップS61においてCPU10からCXLデバイス30に通知された第2レイテンシに基づいて、コンプリーション通知をコンプリーションキュー22に書き込むか否かを判定する処理(以下、コンプリーション通知判定処理と表記)を実行する(ステップS65)。
【0153】
なお、コンプリーション通知判定処理の詳細については後述するが、ここではコンプリーション通知をコンプリーションキュー22に書き込まないと判定された場合を想定する。この場合、
図19に示すように、コンプリーション通知は、コンプリーションキュー22に書き込まれない。
【0154】
ステップS65の処理が実行されると、
図16に示すステップS46の処理に相当するステップS66の処理が実行される。
【0155】
一方、ステップS63の処理が実行されると、CPU10は、第2レイテンシに相当する時間が経過するまで待機する(ステップS67)。なお、ステップS67において、CPU10は、第2レイテンシに相当する時間が経過するまでの間に他の処理を実行してもよい。
【0156】
ステップS67の処理が実行されると、CPU10は、DRAM20にアクセスし、コンプリーションキュー22からコンプリーション通知を読み出す(ステップS68)。
【0157】
しかしながら、ここでは上記したようにコンプリーション通知がコンプリーションキュー22に書き込まれていないため、CPU10は、コンプリーション通知を読み出すことができない。この場合、
図16に示すステップS49及びS50の処理に相当するステップS69及びS70の処理が実行される。
【0158】
次に、
図20のフローチャートを参照して、上記したコンプリーション通知判定処理の処理手順の一例について説明する。
【0159】
まず、プリフェッチ制御部33は、上記した第1レイテンシを示すレイテンシ情報を取得する(ステップS651)。なお、ステップS651において取得されるレイテンシ情報によって示される第1レイテンシは、対象データがNAND型フラッシュメモリ31に格納されていることを前提とするのであれば、当該対象データのプリフェッチを行う際に生じるレイテンシである。また、ステップS651において取得されるレイテンシ情報によって示される第1レイテンシは、上記したように対象データが格納されているメディアを示すメディア情報に基づいて決定されたレイテンシであってもよい。
【0160】
次に、プリフェッチ制御部33は、ステップS651において取得されたレイテンシ情報によって示される第1レイテンシが
図19に示すステップS61においてCPU10からCXLデバイス30に通知された第2レイテンシ未満であるか否かを判定する(ステップS652)。
【0161】
第1レイテンシが第2レイテンシ未満であると判定された場合(ステップS652のYES)、プリフェッチ制御部33は、コンプリーションキュー22にコンプリーション通知を書き込まないと判定する(ステップS653)。
【0162】
この場合、コンプリーション通知はコンプリーションキュー22には書き込まれず、上記した
図19に示すステップS66以降の処理が実行される。すなわち、本変形例においては、例えば対象データがキャッシュメモリ32に格納されていることによって上記した第1レイテンシが第2レイテンシ未満であるような場合には、コンプリーション通知の書き込みを省略し、第2レイテンシに相当する時間が経過したタイミングでロードコマンドを発行することができる。
【0163】
一方、第1レイテンシが第2レイテンシ未満でないと判定された場合(ステップS652のNO)、プリフェッチ制御部33は、コンプリーションキュー22にコンプリーション通知を書き込むと判定する(ステップS654)。
【0164】
この場合、上記したステップS651において取得されたレイテンシ情報を含むコンプリーション通知がコンプリーションキュー22に書き込まれる。これによれば、CPU10は、
図19に示すステップS68においてCPU10はコンプリーション通知をコンプリーションキュー22から読み出すことができる。この場合、図示されていないが、CPU10は、例えばステップS67の処理が開始された時刻を基準として第1レイテンシ(つまり、コンプリーションキュー22から読み出されたコンプリーション通知に含まれるレイテンシ情報によって示されるレイテンシ)に相当する時間が経過するまで待機した後に、ステップS69の処理を実行する。すなわち、本変形例においては、上記した第1レイテンシが第2レイテンシを超える(つまり、第2レイテンシに相当する時間が経過したタイミングでは対象データのプリフェッチが完了していないと推測される)場合には、当該レイテンシ情報を含むコンプリーション通知をコンプリーションキュー22に書き込むことによって、CPU10は、当該レイテンシ情報に基づく適切なタイミングでロードコマンドを発行することができる。
【0165】
上記したように本変形例において、プリフェッチ制御部33は、対象データのプリフェッチを行う際に生じる第1レイテンシ及びCPU10において指定された第2レイテンシに基づいてコンプリーション通知をコンプリーションキュー22に書き込むか否かを判定する。また、本変形例において、コンプリーション通知がコンプリーションキュー22に書き込まれていない場合、第2レイテンシに相当する時間が経過した後にロードコマンドを発行する。
【0166】
本変形例においては、このような構成により、第1及び第2レイテンシに基づいてコンプリーションキュー22に対するコンプリーション通知の書き込みを省略する(コンプリーション通知の送信を削減する)ことができるとともに、CPU10はポーリングを実行する必要がない(つまり、コンプリーションキュー22に対する読み込みの回数を最小化することができる)ため、情報処理システム1の負荷を低減することが可能となる。
【0167】
なお、上記した本実施形態の第1及び第2変形例においてはDRAM20がコンプリーションキュー22を有するものとして説明したが、当該第1及び第2変形例は、DRAM20がコンプリーションキュー22に代えてコンプリーションマップ23を含む構成に適用されても構わない。
【0168】
また、本実施形態においては前述した第1実施形態において説明したDRAM20にコンプリーションキュー22が追加された構成について説明したが、本実施形態は、前述した第2実施形態に適用されても構わない。具体的には、本実施形態は、
図5に示すDRAM20にコンプリーションキュー22が追加された構成であってもよい。更に、本実施形態は、前述した第3実施形態と組み合わせても構わない。本実施形態の第1及び第2変形例についても同様である。
【0169】
以上述べた少なくとも1つの実施形態によれば、読み出し性能を向上させることが可能な情報処理システムを提供することができる。
【0170】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【0171】
1…情報処理システム、10…CPU(プロセッサ)、20…DRAM(第1メモリデバイス)、21…プリフェッチリクエストキュー、22…コンプリーションキュー、23…コンプリーションマップ、30…CXLデバイス(第2メモリデバイス)、31…NAND型フラッシュメモリ(不揮発性メモリ)、32…キャッシュメモリ、33…プリフェッチ制御部、331…ドアベルレジスタ、332…キュー監視部、333…アドレス変換部、334…レイテンシ決定部。