図1は、本実施形態による情報処理装置の構成例を示す図である。情報処理装置は、複数のプロセッサ101と、システムコントローラ102と、メモリデバイス103と、入出力(I/O)デバイス104と、他ノード105とを有する。図1の情報処理装置のうちの他ノード105以外の部分は、自ノードである。他ノード105は、自ノードと同様の構成を有する。メモリデバイス103は、データを記憶する主記憶装置である。I/Oデバイス104は、ハードディスク装置又はネットワークインタフェース等の入出力装置である。
プロセッサ101は、演算処理を行う演算処理装置である。複数のプロセッサ101の各々は、コア111及びキャッシュユニット112を有する。コア111は、ソフトウェアの命令を解釈及び実行する演算処理部である。キャッシュユニット112は、キャッシュデータ部113及びキャッシュ制御部114を有する。キャッシュデータ部113は、キャッシュデータを記憶する。例えば、キャッシュデータ部113はSRAM(Static Random Access Memory)であり、メモリデバイス103はDIMM(Dual Inline Memory Module)のDRAM(Dynamic Random Access Memory)である。キャッシュデータ部113は、メモリデバイス103に比べて高速にアクセスが可能である。キャッシュデータ部113は、メモリデバイス103のデータの一部を格納可能である。コア111は、必要なデータがキャッシュデータ部113に存在する場合(キャッシュヒット)には、メモリデバイス103までアクセスせずにキャッシュデータ部113からデータを読み出すことにより、データのアクセスを高速化する。
キャッシュ制御部114は、キャッシュデータ部113を管理し、キャッシュデータ部113にデータが存在しなかった場合にメモリアクセス要求を出力する。キャッシュ制御部114は、I/Oキャッシュ登録部115を有する。I/Oキャッシュ登録部115は、システムコントローラ102からI/Oキャッシュ登録要求を入力し、キャッシュ登録用資源を確保し、システムコントローラ102からダイレクトメモリアクセス(DMA)書き込みデータを入力した後に、そのデータをキャッシュデータ部113に登録する(書き込む)。
システムコントローラ102は、プロセッサインタフェース121と、コヒーレンシ制御部122と、コヒーレンシリクエスト格納部123と、メモリリクエスト制御部124と、I/O制御部125とを有する。プロセッサインタフェース121は、複数のプロセッサ101とシステムコントローラ102との間のインタフェースである。メモリリクエスト制御部124は、主記憶装置制御部であり、メモリデバイス103に対して、読み出し要求及び書き込み要求を出力する。I/O制御部125は、入出力装置制御部であり、I/Oデバイス104を制御する。コヒーレンシ制御部122は、プロセッサ101を制御する演算処理装置制御部であり、具体的には、複数のプロセッサ101内のキャッシュデータ部113内のデータのコヒーレンシを保つための制御を行う。コヒーレンシリクエスト格納部123は、他ノード105に対するキャッシュデータ部113の掃出し要求及び無効化要求を一時的に格納する。コヒーレンシ制御部122は、I/Oキャッシュ指示部127を有する。I/Oキャッシュ指示部127は、I/Oデバイス104からDMA書き込み要求を入力した場合、プロセッサ101に対してDMA書き込みデータのキャッシュ登録処理を指示する。
図2(A)〜(E)は、情報処理装置の課題を説明するための情報処理装置の制御方法を示す図である。なお、プロセッサ101は、複数のコア111を有していてもよい。まず、図2(A)では、複数のコア111のうちのいずれか1個のコア111は、I/Oデバイス104のデータを読み出すため、DMA書き込み要求をシステムコントローラ102を介してI/Oデバイス104に出力する。すると、I/Oデバイス104は、I/Oデバイス104のデータ201のDMA書き込み要求をシステムコントローラ102に出力する。すると、システムコントローラ102は、I/Oデバイス104のデータ201を、DMA書き込み要求のアドレスに書き込む。
次に、図2(B)において、I/Oデバイス104は、システムコントローラ102からDMA書き込み要求完了通知を入力すると、DMA書き込み要求完了の割り込みをプロセッサ101内のコア111に通知する。
次に、図2(C)において、コア111は、DMA書き込みを行ったアドレスを指定して読み出し要求をキャッシュユニット112に出力する。
次に、図2(D)において、キャッシュユニット112は、読み出し要求に応じて、システムコントローラ102を介して、メモリデバイス103のDMA書き込みを行った領域からデータ201を読み出してキャッシュデータ部113に書き込む。
次に、図2(E)において、キャッシュユニット112は、読み出し要求の応答として、データ201を要求元のコア111に出力する。
上記のように、DMA書き込み要求では、I/Oデバイス104のデータ201がメモリデバイス103に書き込まれる。コア111は、DMA書き込み要求の完了後に、メモリデバイス103からデータ201を読み出す。しかし、メモリデバイス103の読み出し速度は低速なため、読み出し要求の応答までの時間が長く、その結果、I/Oデバイス104のアクセスを伴う処理速度が遅くなってしまう課題がある。この課題を解決するための実施形態を以下に説明する。
図3(A)〜(D)は、本実施形態による情報処理装置の制御方法を示す図である。まず、図3(A)では、複数のコア111のうちのいずれか1個のコア111は、I/Oデバイス104のデータを読み出すため、DMA書き込み要求をシステムコントローラ102を介してI/Oデバイス104に出力する。すると、I/Oデバイス104は、I/Oデバイス104のデータ201のDMA書き込み要求をシステムコントローラ102に出力する。すると、システムコントローラ102は、I/Oデバイス104のデータ201を、データ201の内容に依らず、メモリデバイス103を介さずに、直接、DMA書き込み要求のアドレスに対応するキャッシュユニット112内のキャッシュデータ部113に書き込む。
次に、図3(B)において、I/Oデバイス104は、システムコントローラ102からDMA書き込み要求完了通知を入力すると、DMA書き込み要求完了の割り込みをプロセッサ101内のコア111に通知する。
次に、図3(C)において、コア111は、DMA書き込みを行ったアドレスを指定して読み出し要求をキャッシュユニット112に出力する。
次に、図2(D)において、キャッシュユニット112は、読み出し要求に応じて、キャッシュデータ部113からデータ201を読み出して要求元のコア111に出力する。
本実施形態によれば、DMA書き込み要求では、I/Oデバイス104のデータ201がキャッシュデータ部113に直接書き込まれる。そのため、コア111は、DMA書き込み要求の完了後に、キャッシュデータ部113からデータ201を読み出すことができる。キャッシュデータ部113の読み出し速度は、メモリデバイス103の読み出し速度に比べて高速である。そのため、コア111の読み出し要求の応答までの時間が短くなり、その結果、I/Oデバイス104のアクセスを伴う処理速度を高速化することができる。
また、本実施形態では、I/Oデバイス104のデータ201は、データ201の内容に依らず、またソフトウェアの設定や指示なく、ハードウェア自律で、メモリデバイス103を介さずに、キャッシュデータ部113に書き込まれる。このため、本実施形態では、I/Oデバイス104のドライバやソフトウェアの修正、及びI/Oデバイス104の対応等を行わずに上記の効果を得ることができる。
図4は、システムコントローラ102の構成例を示す図である。システムコントローラ102は、プロセッサインタフェース121と、コヒーレンシ制御部122と、コヒーレンシリクエスト格納部123と、メモリリクエスト制御部124と、I/O制御部125とを有する。コヒーレンシ制御部122は、キャッシュ要求格納部401と、I/O要求格納部402と、キャッシュタグ更新要求格納部403と、要求調停部404と、コヒーレンシ制御パイプライン405と、ホームリクエスト処理部406と、キャッシュタグ部407とを有する。コヒーレンシ制御パイプライン405は、I/Oキャッシュ指示部127を有する。I/Oキャッシュ指示部127は、登録プロセッサ決定回路408を有する。
プロセッサインタフェース121は、複数のプロセッサ101からメモリアクセス要求を入力し、それをキャッシュ要求格納部401に転送する。また、プロセッサインタフェース121は、コヒーレンシ制御パイプライン405から出力されるI/Oキャッシュ登録要求や、ホームリクエスト処理部406から出力される応答データを対象のプロセッサ101に転送する。
コヒーレンシ制御部122は、複数のプロセッサ101内のキャッシュデータ部113のコヒーレンシを保つための制御を行う。
メモリリクエスト制御部124は、コヒーレンシ制御部122から出力されるメモリアクセス要求をキューに格納し、メモリアクセス要求を順にメモリデバイス103に対して出力する。
I/O制御部125は、I/Oデバイス104からDMAアクセス要求(DMA書き込み要求)を入力すると、それをI/O要求格納部402に転送する。また、I/O制御部125は、そのDMAアクセス要求に対してI/O要求格納部402から応答を受けると、その応答をI/Oデバイス104に対して出力する。
コヒーレンシリクエスト格納部123は、ホームリクエスト処理部406が出力するキャッシュ掃出し要求又は無効化要求をキューに格納し、それを順に他ノード105へ出力する。
キャッシュ要求格納部401は、プロセッサインタフェース121を介してプロセッサ101から入力したメモリアクセス要求をキューに格納し、キューに格納されたメモリアクセス要求を順に要求調停部404に出力し、調停参加する。
I/O要求格納部402は、I/O制御部125から入力したDMAアクセス要求をキューに格納し、キューに格納されたDMAアクセス要求を順に要求調停部404に出力し、調停参加する。さらに、I/O要求格納部402は、要求調停部404に発行したDMAアクセス要求に対するホームリクエスト処理部406からのDMA処理完了通知を待ち、DMA処理完了通知を入力すると、I/O制御部125に対してDMAアクセス応答を出力する。
キャッシュタグ更新要求格納部403は、ホームリクエスト処理部406から入力したキャッシュタグ更新要求をキューに格納し、キューに格納されたキャッシュタグ更新要求を順に要求調停部404に出力し、調停参加する。
要求調停部404は、キャッシュ要求格納部401、I/O要求格納部402、及びキャッシュタグ更新要求格納部403から出力される各要求を調停し、コヒーレンシ制御パイプライン405に転送する。
コヒーレンシ制御パイプライン405は、要求調停部404から出力された各要求に応じて、キャッシュタグの検索、キャッシュタグの内容に応じたプロセッサ101へのキャッシュ掃出し要求又は無効化要求の出力、及びキャッシュタグ更新を行う。また、コヒーレンシ制御パイプライン405は、要求調停部404から出力された各要求が自ノードが管理するメモリ領域に対するアクセス要求だった場合、その要求をホームリクエスト処理部406に出力する。また、コヒーレンシ制御パイプライン405は、その要求が他ノード105が管理するメモリ領域に対するアクセス要求だった場合、その要求を他ノード105のシステムコントローラに出力する。
コヒーレンシ制御パイプライン405は、I/Oキャッシュ指示部127を有する。I/Oキャッシュ指示部127は、要求調停部404から出力された要求が自ノードが管理するメモリ領域に対するDMA書き込み要求だった場合、プロセッサ101に対してI/Oキャッシュ登録要求を出力し、DMA書き込みデータ転送用のムーブインバッファ確保を要求する。このときの登録要求先プロセッサは、登録プロセッサ決定回路408により決定される。
キャッシュタグ部407は、自ノード内のプロセッサ101内のキャッシュデータ部113が保持するデータのキャッシュタグ(アドレス及びキャッシュの状態)を格納する。キャッシュの状態は、自己のプロセッサ101内のキャッシュデータ部113のデータが排他型、共有型、及び無効型のいずれであるのかを示す。排他型は、自ノード内において、自己のプロセッサ101のキャッシュデータ部113だけに存在し、他のプロセッサ101のキャッシュデータ部113には存在しないデータである。共有型は、自ノード内において、自己のプロセッサ101及び他のプロセッサ101のキャッシュデータ部113に存在するデータを示す。無効型は、自己のプロセッサ101のキャッシュデータ部113のそのキャッシュライン(128バイト)のデータが無効であることを示す。
ホームリクエスト処理部406は、コヒーレンシ制御パイプライン405から出力された各要求に応じて、メモリデバイス103内のディレクトリ情報を読み出す。ディレクトリ情報は、メモリデバイス103の各アドレスに記憶されているデータが他ノード105内のプロセッサ101内のキャッシュデータ部113に記憶されている場合に、そのデータをキャッシュデータ部113に記憶しているノードのプロセッサ101を特定するためのノード番号を示す。ホームリクエスト処理部406は、ディレクトリ情報を基に、該当ラインのデータを他ノード105のプロセッサがキャッシュしている場合は、そのノードにキャッシュ掃出し要求又は無効化要求を出力する。ホームリクエスト処理部406は、入力要求がDMA書き込み要求の場合、同時にDMA書き込みデータ(I/Oデバイス104のデータ201)をI/O要求格納部402から入力するとともに、プロセッサ101からムーブインバッファ獲得成否通知の入力を待つ。ホームリクエスト処理部406は、ムーブインバッファ獲得成功通知を入力した場合、DMA書き込みデータをプロセッサ101へ転送した後、キャッシュタグ部407のキャッシュタグを「転送先プロセッサ=排他型」に更新するためのキャッシュタグ更新要求をキャッシュタグ更新要求格納部403に出力する。一方、ホームリクエスト処理部406は、プロセッサ101からムーブインバッファ獲得失敗通知を入力した場合、DMA書き込みデータをメモリデバイス103に書き込む。
図5は、プロセッサ101の構成例を示す図である。プロセッサ101は、コア111と、キャッシュデータ部113と、キャッシュ制御部114と、セレクタ501とを有する。キャッシュ制御部114は、キャッシュ要求格納部502と、I/Oキャッシュ要求格納部508と、要求調停部503と、キャッシュ制御パイプライン506と、キャッシュタグ部504と、ムーブインバッファ505とを有する。キャッシュ制御パイプライン506は、ムーブインバッファ獲得可否判定回路507を有する。キャッシュ制御部114は、I/Oキャッシュ登録部115を有する。I/Oキャッシュ登録部115は、ムーブインバッファ獲得可否判定回路507及びI/Oキャッシュ要求格納部508とを有する。
コア111は、ソフトウェアの命令に応じて命令を解釈及び実行し、必要に応じてメモリアクセス要求をキャッシュ制御部114に出力する。
キャッシュ制御部114は、コア111からメモリアクセス要求を入力し、キャッシュタグ部504のキャッシュタグを検索し、キャッシュヒットの場合は、ヒットしたデータを、キャッシュデータ部113からセレクタ501を介してコア111に応答データとして出力する。また、キャッシュ制御部114は、キャッシュミスの場合は、システムコントローラ102にメモリアクセス要求を出力する。
キャッシュデータ部113は、メモリデバイス103の一部のアドレスのデータを格納可能である。セレクタ501は、ムーブインバッファ505が出力する応答データとキャッシュデータ部113が出力する応答データとのいずれかを選択し、選択した応答データをコア111に出力する。
キャッシュ要求格納部502は、コア111から入力したメモリアクセス要求をキューに格納し、キューに格納されたメモリアクセス要求を順に要求調停部503に出力し、調停参加する。
I/Oキャッシュ要求格納部508は、システムコントローラ102から入力したI/Oキャッシュ登録要求をキューに格納し、キューに格納されたI/Oキャッシュ登録要求を順に要求調停部503に出力し、調停参加する。
要求調停部503は、キャッシュ要求格納部502、I/Oキャッシュ要求格納部508及びムーブインバッファ505から出力される各要求を調停し、キャッシュ制御パイプライン506に転送する。
キャッシュ制御パイプライン506は、要求調停部503から出力された各要求に応じて、キャッシュタグ部504のキャッシュタグの検索、及びキャッシュデータ部113のデータのアクセスを行う。キャッシュ制御パイプライン506は、キャッシュタグ部504のキャッシュタグを検索し、キャッシュミスだった場合は、システムコントローラ102に対してメモリアクセス要求を出力する。
I/Oキャッシュ登録部115は、要求調停部503から入力した要求がI/Oキャッシュ登録要求だった場合、ムーブインバッファ獲得可否判定回路507により、ムーブインバッファ獲得要求をムーブインバッファ505に出力する。その後、I/Oキャッシュ登録部115は、ムーブインバッファ獲得可否判定回路507により、ムーブインバッファ獲得成否通知をシステムコントローラ102に出力する。
キャッシュタグ部504は、自己のプロセッサ101内のキャッシュデータ部113が記憶するデータのキャッシュタグ(アドレス及びキャッシュの状態)を格納する。
ムーブインバッファ505は、システムコントローラ102から応答データを入力してバッファリングするためのバッファである。I/Oキャッシュ登録要求時は、システムコントローラ102からDMA書き込みデータが応答データとしてムーブインバッファ505に転送される。ムーブインバッファ505は、システムコントローラ102からの応答データの転送が完了すると、要求調停部503に対してキャッシュ登録要求を出力する。
図6は、本実施形態による情報処理装置の制御方法を示すフローチャートである。複数のプロセッサ101のうちの1個のプロセッサ101は、システムコントローラ102にDMA書き込み要求を出力する。すると、システムコントローラ102内のI/O制御部125は、DMA書き込み要求をI/Oデバイス104に出力する。すると、I/Oデバイス104は、DMA書き込み要求及びDMA書き込み要求のデータをI/O制御部125に出力する。I/O制御部125は、DMA書き込み要求及びDMA書き込み要求のデータをI/O要求格納部402に出力する。ホームリクエスト処理部406は、コヒーレンシ制御パイプライン405のリクエスト処理要求に応じて、メモリリクエスト制御部124を介して、DMA書き込み要求のアドレスのディレクトリ情報をメモリデバイス103から読み出す。
ステップS601では、コヒーレンシ制御パイプライン405及びホームリクエスト処理部406は、キャッシュタグ情報及びディレクトリ情報を基に、DMA書き込み要求のアドレスのデータをキャッシュデータ部113に記憶しているプロセッサ101があるか否かを判定し、ある場合にはステップS602に処理を進め、ない場合にはステップS603に処理を進める。
ステップS602では、コヒーレンシ制御パイプライン405は、キャッシュタグ部407のキャッシュタグを参照し、DMA書き込み要求のアドレスのデータをキャッシュデータ部113に記憶している自ノード内のプロセッサ101に対し、排他型のキャッシュ状態である場合には掃出し要求を出力し、共有型のキャッシュ状態である場合には無効化要求を出力する。ホームリクエスト処理部406は、ディレクトリ情報を基に、他ノード105内のプロセッサ101がDMA書き込み要求のアドレスのデータをキャッシュデータ部113に記憶している場合、その他ノード105に対して掃出し要求又は無効化要求を出力する。この処理は、そのアドレスのキャッシュコヒーレンシを保つために行われる。その後、ホームリクエスト処理部406は、ステップS603に処理を進める。
ここで、プロセッサ101は、掃出し要求を入力した場合には、キャッシュデータ部113内のDMA書き込み要求のアドレスに対応するデータのキャッシュラインを掃出し、そのキャッシュラインには新たな別のアドレスのデータを書き込み可能にする。掃出されたキャッシュラインのデータは、ホームリクエスト処理部406内のバッファに格納される。
ステップS603では、システムコントローラ102は、複数のプロセッサ101の中から、I/Oデバイス104のデータをキャッシュする1個のI/Oキャッシュ登録プロセッサを決定する。システムコントローラ102は、本来であれば、上記のDMA書き込み要求の発行元のプロセッサ101をI/Oキャッシュ登録プロセッサとして決定することが望ましい。しかし、現状の情報処理装置では、システムコントローラ102がその発行元のプロセッサ101をハードウェア的に認識するための手段が存在しない。そこで、本実施形態では、その手段を新たに追加することなく、複数のプロセッサ101の中から1個のI/Oキャッシュ登録プロセッサを決定する。なお、システムコントローラ102は、その発行元のプロセッサ101を認識するための手段を設け、その発行元のプロセッサ101をI/Oキャッシュ登録プロセッサとして決定してもよい。
図7は、図6のステップS603の処理の詳細を示すフローチャートである。登録プロセッサ決定回路408は、複数のプロセッサ101の中から1個のI/Oキャッシュ登録プロセッサを決定する。なお、情報処理装置が1個のプロセッサ101を有する場合には、登録プロセッサ決定回路408は、その1個のプロセッサ101をI/Oキャッシュ登録プロセッサとして決定する。例えば、登録プロセッサ決定回路408は、DMA書き込み要求のアドレスのデータがDMA書き込み要求の前に自ノードのプロセッサ101にどのようなキャッシュ状態で所持されていたかによって、I/Oキャッシュ登録プロセッサを決定する。登録プロセッサ決定回路408は、DMA書き込み要求の前にI/Oデバイス104のアドレスのデータを所有していたプロセッサ101がDMA書き込み要求の後もそのアドレスのデータを使用する確率が高いであろうという想定の下、将来、そのアドレスのデータを使用する可能性が高いと考えられるそのプロセッサ101をI/Oキャッシュ登録プロセッサとして決定する。なお、登録プロセッサ決定回路408は、上記の決定方法に限定されず、他のアルゴリズム(例えばラウンドロビン等)により、I/Oキャッシュ登録プロセッサを決定してもよい。
ステップS701では、登録プロセッサ決定回路408は、DMA書き込み要求のアドレスについて、キャッシュタグ部407のキャッシュタグを検索する。次に、ステップS702では、登録プロセッサ決定回路408は、キャッシュタグを基に、DMA書き込み要求のアドレスのデータについて、プロセッサ101のキャッシュ状態を判定する。
登録プロセッサ決定回路408は、自ノード内の1個のプロセッサ101のキャッシュタグが排他型の場合には、ステップS705に処理を進め、そのキャッシュタグが排他型であるプロセッサ101をI/Oキャッシュ登録プロセッサとして選択する。
すなわち、ステップS705では、コヒーレンシ制御部122は、複数のプロセッサ101のうち、ステップS602の掃出し要求又は無効化要求の出力前にDMA書き込み要求のアドレスのデータをキャッシュデータ部113に記憶していたプロセッサ101が1個であった場合には、そのデータを記憶していた1個のプロセッサ101をI/Oキャッシュ登録プロセッサとして選択する。
また、登録プロセッサ決定回路408は、自ノード内の複数のプロセッサ101のキャッシュタグが共有型の場合には、ステップS704に処理を進め、そのキャッシュタグが共有型である複数のプロセッサ101の中から1個のI/Oキャッシュ登録プロセッサをラウンドロビンで選択する。
すなわち、ステップS704では、コヒーレンシ制御部122は、複数のプロセッサ101のうち、ステップS602の掃出し要求又は無効化要求の出力前にDMA書き込み要求のアドレスのデータをキャッシュデータ部113に記憶していたプロセッサ101が複数あった場合には、そのデータを記憶していた複数のプロセッサ101のうちの1個のプロセッサ101をI/Oキャッシュ登録プロセッサとしてラウンドロビンで選択する。
また、登録プロセッサ決定回路408は、自ノード内の全てのプロセッサ101のキャッシュタグが無効型である場合には、ステップS703に処理を進め、自ノード内の全プロセッサ101の中から1個のI/Oキャッシュ登録プロセッサをラウンドロビンで選択する。
すなわち、ステップS703では、コヒーレンシ制御部122は、複数のプロセッサ101のうち、ステップS602の掃出し要求又は無効化要求の出力前にDMA書き込み要求のアドレスのデータをキャッシュデータ部113に記憶していたプロセッサ101がなかった場合には、複数のプロセッサ101のうちの1個のプロセッサ101をI/Oキャッシュ登録プロセッサとしてラウンドロビンで選択する。
図6において、システムコントローラ102は、ステップS603の後、ステップS604に処理を進める。ステップS604では、I/Oキャッシュ指示部127は、ステップS603で選択されたI/Oキャッシュ登録プロセッサに対して、I/Oキャッシュ登録要求を出力する。
次に、ステップS605では、プロセッサ101は、I/Oキャッシュ登録要求を入力した場合、DMA書き込み要求のデータをムーブインバッファ505にバッファリングするために、ムーブインバッファ505の空き領域を獲得する。
次に、ステップS606では、プロセッサ101は、システムコントローラ102に対して、ムーブインバッファ獲得成否通知を出力する。
図8は、図6のステップS605及びS606の処理の詳細を示すフローチャートである。ステップS801では、I/Oキャッシュ登録部115がI/Oキャッシュ登録要求を入力した場合、ムーブインバッファ獲得可否判定回路507は、ムーブインバッファ505がフルであるか否かを判定し、フルでない場合にはステップS802に処理を進め、フルである場合にはステップS805に処理を進める。すなわち、ムーブインバッファ獲得可否判定回路507は、ムーブインバッファ505に空き領域がある場合にはステップS802に処理を進め、ムーブインバッファ505に空き領域がない場合にはステップS805に処理を進める。
ステップS802では、ムーブインバッファ獲得可否判定回路507は、I/Oキャッシュ登録要求のアドレスについて他のトランザクションにより既にムーブインバッファ505の空き領域の獲得中であるか否かを判定し、獲得中でない場合にはステップS803に処理を進め、獲得中である場合にはステップS805に処理を進める。
ステップS803では、ムーブインバッファ獲得可否判定回路507は、ムーブインバッファ獲得要求をムーブインバッファ505に出力し、ムーブインバッファ505の空き領域を獲得する。
次に、ステップS804では、ムーブインバッファ獲得可否判定回路507は、システムコントローラ102に対して、ムーブインバッファ獲得成功通知を出力する。
ステップS805では、ムーブインバッファ獲得可否判定回路507は、システムコントローラ102に対して、ムーブインバッファ獲得失敗通知を出力する。
図6において、情報処理装置は、ステップS606の後、ステップS607に処理を進める。ステップS607では、システムコントローラ102は、ムーブインバッファ505の獲得の成否を判定する。ホームリクエスト処理部406は、プロセッサ101からムーブインバッファ獲得成功通知を入力した場合にはステップS608に処理を進め、プロセッサ101からムーブインバッファ獲得失敗通知を入力した場合にはステップS611に処理を進める。
ステップS608では、システムコントローラ102内のホームリクエスト処理部406は、DMAデータ転送要求に応じて、DMA書き込み要求のデータを応答データとして、プロセッサ101内のムーブインバッファ505に転送する。
次に、ステップS609では、プロセッサ101内のキャッシュ制御パイプライン506は、転送されたDMA書き込み要求のデータをキャッシュデータ部113に登録し(書き込み)、そのデータのキャッシュタグをキャッシュタグ部504に登録する。
次に、ステップS610では、システムコントローラ102内のコヒーレンシ制御パイプライン405は、キャッシュタグ更新要求に応じて、転送先のI/Oキャッシュ登録プロセッサについてのDMA書き込み要求のデータのキャッシュタグを排他型に更新し、キャッシュタグ部407に登録する。
ステップS611では、システムコントローラ102内のホームリクエスト処理部406は、メモリリクエスト制御部124を介して、メモリデバイス103にDMA書き込み要求のデータを書き込む。
次に、ステップS612では、システムコントローラ102内のコヒーレンシ制御パイプライン405は、キャッシュタグ更新要求に応じて、全てのプロセッサ101についてのDMA書き込み要求のデータのキャッシュタグを無効型に更新し、キャッシュタグ部407に登録する。
ステップS610及びS612の後、I/O制御部125は、DMA処理完了通知をI/Oデバイス104に出力する。すると、I/Oデバイス104は、DMA書き込み要求完了の割り込みをプロセッサ101に通知する。
以上のように、情報処理装置は、ムーブインバッファ獲得成功通知が出力される場合には、ステップS608〜S610により図3(A)〜(D)の処理を行う。コヒーレンシ制御部122は、プロセッサ101のムーブインバッファ505に空き領域がある場合には、プロセッサ101のキャッシュデータ部113に書き込む要求をプロセッサ101に出力する。その場合、キャッシュ制御部114は、I/Oデバイス104から入力したデータをムーブインバッファ505を介してキャッシュデータ部113に書き込み、読み出し要求に応じて、キャッシュデータ部113に記憶されているデータをコア111に出力する。
また、情報処理装置は、ムーブインバッファ獲得失敗通知が出力される場合には、ステップS611〜S612により図2(A)〜(E)の処理を行う。ホームリクエスト処理部406は、プロセッサ101のムーブインバッファ505に空き領域がない場合には、I/Oデバイス104が出力したデータをメモリデバイス103に書き込む要求をメモリデバイス103に出力する。I/Oデバイス104が出力したデータは、メモリデバイス103に書き込まれる。その場合、キャッシュ制御部114は、読み出し要求に応じて、メモリデバイス103に記憶されているデータを入力し、その入力したデータをキャッシュデータ部113に書き込むと共に、その入力したデータをコア111に出力する。
図9(A)及び(B)は、図2(A)〜(E)の処理を示すタイミングチャートである。情報処理装置は、まず、図9(A)のDMA書き込み要求の処理を行い、その後、図9(B)の読み出し要求の処理を行う。
まず、図9(A)において、I/Oデバイス104は、DMA書き込み要求(DMAアクセス要求)及びDMA書き込み要求のデータを、I/O制御部125を介して、I/O要求格納部402に出力する。
次に、I/O要求格納部402は、要求調停部404を介して、DMA書き込み要求をコヒーレンシ制御パイプライン405に出力する。
次に、コヒーレンシ制御パイプライン405は、DMA書き込み要求をホームリクエスト処理部406に出力する。
次に、ホームリクエスト処理部406は、メモリリクエスト制御部124を介して、DMA書き込み要求のアドレスのディレクトリ情報の読み出し要求を、メモリデバイス103に出力する。
次に、メモリデバイス103は、DMA書き込み要求のアドレスのディレクトリ情報を読み出し、読み出し要求の応答として、メモリリクエスト制御部124を介して、読み出したディレクトリ情報をホームリクエスト処理部406に出力する。ホームリクエスト処理部406は、そのディレクトリ情報に応じて、掃出し要求又は無効化要求をプロセッサ101に出力する。
次に、ホームリクエスト処理部406は、DMAデータ転送要求をI/O要求格納部402に出力する。
次に、I/O要求格納部402は、DMA書き込み要求のデータをホームリクエスト処理部406に出力する。
次に、ホームリクエスト処理部406は、メモリリクエスト制御部124を介して、DMA書き込み要求のデータの書き込み要求をメモリデバイス103に出力する。
次に、メモリデバイス103は、DMA書き込み要求のデータを書き込み、メモリリクエスト制御部124を介して、書き込み要求に対する応答をホームリクエスト処理部406に出力する。
次に、ホームリクエスト処理部406は、DMA処理完了通知をI/O要求格納部402に出力する。
次に、I/O要求格納部402は、I/O制御部125を介して、I/Oデバイス104にDMA書き込み要求の応答(DMAアクセス応答)を出力する。
次に、図9(B)において、コア111は、DMA書き込みを行ったアドレスの読み出し要求をキャッシュ要求格納部502に出力する。
次に、キャッシュ要求格納部502は、要求調停部503を介して、その読み出し要求をキャッシュ制御パイプライン506に出力する。
次に、キャッシュ制御パイプライン506は、ムーブインバッファ505にムーブインバッファ獲得要求を出力し、獲得できた場合には、プロセッサインタフェース121を介して、その読み出し要求をキャッシュ要求格納部401に出力する。
次に、キャッシュ要求格納部401は、要求調停部404を介して、その読み出し要求をコヒーレンシ制御パイプライン405に出力する。
次に、コヒーレンシ制御パイプライン405は、その読み出し要求をホームリクエスト処理部406に出力する。
次に、ホームリクエスト処理部406は、メモリリクエスト制御部124を介して、その読み出し要求をメモリデバイス103に出力する。
次に、メモリデバイス103は、その読み出し要求のアドレスのデータを読み出し、読み出し要求の応答として、メモリリクエスト制御部124を介して、読み出したデータをホームリクエスト処理部406に出力する。
次に、ホームリクエスト処理部406は、読み出したデータを読み出し要求の要求元のプロセッサ101のキャッシュデータ部113に登録するため、コヒーレンシ制御パイプライン405を介して、キャッシュタグ部407のキャッシュタグを排他型として登録する。また、ホームリクエスト処理部406は、プロセッサインタフェース121を介して、読み出したデータを応答データとして、ムーブインバッファ505に出力する。
次に、ムーブインバッファ505は、応答データをバッファリングし、キャッシュ制御パイプライン506を介して、その応答データをキャッシュデータ部113に登録し、キャッシュタグ部504のキャッシュタグを更新する。また、ムーブインバッファ505は、セレクタ501を介して、その応答データをコア111に出力する。上記の図9(B)の読み出し時間がリードレイテンシである。
図10(A)及び(B)は、本実施形態による図3(A)〜(D)の処理を示すタイミングチャートである。情報処理装置は、まず、図10(A)のDMA書き込み要求の処理を行い、その後、図10(B)の読み出し要求の処理を行う。
まず、図10(A)において、I/Oデバイス104は、DMA書き込み要求(DMAアクセス要求)及びDMA書き込み要求のデータを、I/O制御部125を介して、I/O要求格納部402に出力する。
次に、I/O要求格納部402は、要求調停部404を介して、DMA書き込み要求をコヒーレンシ制御パイプライン405に出力する。
次に、コヒーレンシ制御パイプライン405は、プロセッサインタフェース121を介して、I/Oキャッシュ登録要求をI/Oキャッシュ要求格納部508に出力する。また、コヒーレンシ制御パイプライン405は、DMA書き込み要求をホームリクエスト処理部406に出力する。
次に、I/Oキャッシュ要求格納部508は、要求調停部503を介して、I/Oキャッシュ登録要求をキャッシュ制御パイプライン506に出力する。
次に、キャッシュ制御パイプライン506は、ムーブインバッファ505にムーブインバッファ獲得要求を出力し、獲得できた場合には、プロセッサインタフェース121を介して、ムーブインバッファ獲得成功通知をホームリクエスト処理部406に出力する。
次に、ムーブインバッファ505は、ホームリクエスト処理部406から応答データを入力すると、その応答データをバッファリングし、キャッシュ制御パイプライン506を介して、その応答データをキャッシュデータ部113に登録し、キャッシュタグ部504のキャッシュタグを更新する。
ホームリクエスト処理部406は、コヒーレンシ制御パイプライン405からDMA書き込み要求を入力すると、メモリリクエスト制御部124を介して、DMA書き込み要求のアドレスのディレクトリ情報の読み出し要求を、メモリデバイス103に出力する。
次に、メモリデバイス103は、DMA書き込み要求のアドレスのディレクトリ情報を読み出し、読み出し要求の応答として、メモリリクエスト制御部124を介して、読み出したディレクトリ情報をホームリクエスト処理部406に出力する。ホームリクエスト処理部406は、そのディレクトリ情報に応じて、掃出し要求又は無効化要求をプロセッサ101に出力する。
次に、ホームリクエスト処理部406は、DMAデータ転送要求をI/O要求格納部402に出力する。
次に、I/O要求格納部402は、DMA書き込み要求のデータをホームリクエスト処理部406に出力する。
次に、ホームリクエスト処理部406は、キャッシュ制御パイプライン506からムーブインバッファ獲得成功通知を入力すると、プロセッサインタフェース121を介して、DMA書き込み要求のデータを応答データとして、ムーブインバッファ505に出力する。
次に、ホームリクエスト処理部406は、コヒーレンシ制御パイプライン405を介して、キャッシュタグ部407のキャッシュタグを排他型として登録する。また、ホームリクエスト処理部406は、DMA処理完了通知をI/O要求格納部402に出力する。
次に、I/O要求格納部402は、I/O制御部125を介して、I/Oデバイス104にDMA書き込み要求の応答(DMAアクセス応答)を出力する。
次に、図10(B)において、コア111は、DMA書き込みを行ったアドレスの読み出し要求をキャッシュ要求格納部502に出力する。
次に、キャッシュ要求格納部502は、要求調停部503を介して、その読み出し要求をキャッシュ制御パイプライン506に出力する。
次に、キャッシュ制御パイプライン506は、キャッシュタグ部504のキャッシュタグを参照し、その読み出し要求に対応するデータをキャッシュデータ部113から読み出してコア111に出力する。上記の図10(B)の読み出し時間がリードレイテンシであり、図9(B)のリードレイテンシより短い。これにより、プロセッサ101は、I/Oデバイス104のデータを高速に読み出すことが可能になる。
ここで、I/Oキャッシュ登録プロセッサ以外のプロセッサ101が読み出し要求を出力する場合を説明する。その場合、システムコントローラ102は、その読み出し要求を入力すると、その読み出し要求に対応するデータをI/Oキャッシュ登録プロセッサ内のキャッシュデータ部113から読み出し、I/Oキャッシュ登録プロセッサ以外のプロセッサ101に出力する。この場合のリードレイテンシも、図9(B)のリードレイテンシより短い。
以上のように、本実施形態によれば、DMA書き込み要求により、I/Oデバイス104のデータは、データの内容に依らず、メモリデバイス103を介さずに、プロセッサ101のキャッシュデータ部113に書き込まれる。これにより、プロセッサ101は、読み出し要求による読み出し時間を短縮することができる。
プロセッサ101のキャッシュ制御部114は、I/Oデバイス104が自己のプロセッサ101又は他のプロセッサ101のDMA書き込み要求に応じて出力したデータをメモリデバイス103を介さずに入力し、その入力したデータをデータの内容に依らずDMA書き込み要求のアドレスに対応するキャッシュデータ部113に書き込む。
システムコントローラ102のコヒーレンシ制御部122は、DMA書き込み要求に応じて、I/Oデバイス104が出力したデータをデータの内容に依らずメモリデバイス103を介さずにDMA書き込み要求のアドレスのプロセッサ101内のキャッシュデータ部113に書き込む要求をプロセッサ101に出力する。
なお、プロセッサ101とシステムコントローラ102は、1個のCPUチップで構成してもよい。また、システムコントローラ102は、1個のホームリクエスト処理部406を有する例を示したが、複数のホームリクエスト処理部406を有していてもよい。実用的な回路では、メモリデバイス103やプロセッサ101間のアクセスバスの帯域を使い切るために、システムコントローラ102が複数(8〜32セット程度)のホームリクエスト処理部406を備え、アクセス要求を並列処理することができる。
I/Oキャッシュ登録プロセッサの決定方法は、図7の方法に限定されない。例えば、システムコントローラ102にDMA書き込み要求完了時の割り込み宛先プロセッサを指定するレジスタを設け、プロセッサ101がソフトウェアによりI/Oキャッシュ登録プロセッサを指定してもよい。これにより、データを使いたいプロセッサ101のキャッシュデータ部113にDMA書き込み要求のデータを登録することが可能になる。
情報処理装置は、全てのDMA書き込み要求に対して、プロセッサ101のキャッシュデータ部113にデータを登録する例に限定されず、特定の条件に応じて、プロセッサ101のキャッシュデータ部113にデータを登録してもよい。例えば、キャッシュデータ部113に登録させるアドレス領域をソフトウェアから指定できるレジスタを用意して、DMA書き込み要求のアドレスがそのレジスタ内のアドレスに一致したときのみ、キャッシュデータ部113に登録してもよい。
また、PCI Express仕様に準拠したソフトウェア指示を用いて、キャッシュデータ部113にデータを登録してもよい。例えば、PCI Express Base Specification Revision 3.0で規定されているTLP Processing Hints (TPH) を用いて、キャッシュデータ部113の登録可否やI/Oキャッシュ登録プロセッサを決定してもよい。
また、プロセッサ101のキャッシュデータ部113にDMA書き込み要求のデータが過剰に登録され、I/Oデバイス104のデータ以外のデータがキャッシュデータ部113から追い出されるのを防ぐため、I/Oデバイス104のデータのキャッシュデータ部113への登録数を制限してもよい。例えば、キャッシュタグにI/Oキャッシュビットを追加し、同一キャッシュインデックスにI/Oデバイス104のデータを登録できるウェイ(way)数を制限することができる。
また、キャッシュデータ部113への登録が効果的なDMA書き込み要求のデータを選択的に登録することを目的として、DMA書き込み要求のデータサイズがキャッシュラインサイズよりも小さいもののみキャッシュデータ部113に登録してもよい。例えば、DMA書き込み要求が部分的書き込み(パーシャルライト)だった場合のみキャッシュデータ部113への登録の対象とすることができる。
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。