JP5505516B2 - 情報処理システムおよび情報送信方法 - Google Patents
情報処理システムおよび情報送信方法 Download PDFInfo
- Publication number
- JP5505516B2 JP5505516B2 JP2012547606A JP2012547606A JP5505516B2 JP 5505516 B2 JP5505516 B2 JP 5505516B2 JP 2012547606 A JP2012547606 A JP 2012547606A JP 2012547606 A JP2012547606 A JP 2012547606A JP 5505516 B2 JP5505516 B2 JP 5505516B2
- Authority
- JP
- Japan
- Prior art keywords
- packet
- information
- response
- information processing
- control
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/167—Interprocessor communication using a common memory, e.g. mailbox
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Multi Processors (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Description
本発明は、情報処理システムおよび情報送信方法に関する。
複数のCPU(Central Processing Unit)を備えた情報処理システムのアーキテクチャの1つとして、cc−NUMA(Cache Coherent Non-Uniform Memory Access)がある。cc−NUMA方式の情報処理システムでは、共有メモリ空間の一部を構成する分散共有メモリとCPUとを含む情報処理部が、複数接続される。また、複数のCPUを備えた情報処理システムでは、各CPUが備えるキャッシュ部間のコヒーレンシ(データの整合性)を保つ機構が必要とされる。cc−NUMA方式の情報処理システムでは、ディレクトリと呼ばれる管理表を用いた機構が採用されることが多い。
ディレクトリは、分散共有メモリ内のデータが他の情報処理部内のキャッシュ部にキャッシュされた場合に、キャッシュ先の情報処理部を示す情報を保持する。情報処理部は、自身に属する分散共有メモリ内のデータへのアクセス要求が送信されたとき、ディレクトリを参照する。情報処理部は、ディレクトリに基づき、アクセス要求の対象データが他の情報処理部にキャッシュされていると判定した場合に、「スヌープ(Snoop)」と呼ばれるリクエストを他の情報処理部に送信して、キャッシュコヒーレンシを保つような制御を行う。
スヌープ要求は、少なくとも、アクセス要求の対象データをキャッシュするすべての情報処理部に対して送信される。また、それぞれキャッシュ部を備える複数のCPUが1つの情報処理部内に設けられた情報処理システムでは、スヌープ要求がCPUごとでなく情報処理部ごとに送信されるものがある。
上記のように、スヌープ要求は、少なくとも、アクセス要求の対象データを自身のキャッシュ部にキャッシュするすべての情報処理部に対して送信される。このため、対象データをキャッシュする情報処理部の数が増えるほど送信されるスヌープの数も多くなり、情報処理部間を接続する通信路の伝送負荷が大きくなるという問題があった。特に、情報処理部がリング状に接続されている場合には、複数の情報処理部のそれぞれを宛先とするスヌープが同一の通信路に伝送されることから、伝送負荷はより大きくなる。また、スヌープに限らず、他の種類の制御情報を複数の情報処理部に送信する際にも、送信先の情報処理部が多くなるほど通信路の伝送負荷は大きくなる。
本発明はこのような課題に鑑みてなされたものであり、複数の情報処理部に対して制御情報を送信する際に通信路の伝送負荷を軽減できるようにした情報処理システムおよび情報送信方法を提供することを目的とする。
上記目的を達成するために、複数の情報処理部がリング状通信路によって接続された情報処理システムが提供される。この情報処理システムに含まれる複数の情報処理部のそれぞれは、制御情報と、当該制御情報の送信先とする1つ以上の情報処理部をそれぞれ指定する宛先情報とを含む制御パケットを、リング状通信路に送信する制御情報送信部と、リング状通信路を介して受信した制御パケットに、制御情報の送信先として自身が属する情報処理部が指定されている場合には、受信した制御パケットから制御情報を取り込むとともに、自身が属する情報処理部を制御情報の送信先として指定しないように宛先情報を書き替えた制御パケットをリング状通信路に送信し、受信した制御パケットに制御情報の送信先として自身が属する情報処理部が指定されていない場合には、受信した制御パケットをリング状通信路に送信する制御情報受信部と、を有する。
また、上記目的を達成するために、上記の情報処理システムと同様の処理を行う情報送信方法が提供される。
上記の情報処理システムおよび情報送信方法によれば、複数の情報処理部に対して制御情報を送信する際にリング状通信路の伝送負荷を軽減できる。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになる。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになる。
以下、実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係る情報処理システムの構成例を示す図である。
〔第1の実施の形態〕
図1は、第1の実施の形態に係る情報処理システムの構成例を示す図である。
図1に示す情報処理システム1は、複数の情報処理部を備え、これらの複数の情報処理部はリング状に接続されている。図1の情報処理システム1は、例として4つの情報処理部10a〜10dを備え、情報処理部10a〜10dの間では、情報処理部10a,10b,10c,10d,10a,・・・の順にデータが伝送されるものとする。
情報処理部10aは、制御情報送信部11aと制御情報受信部12aとを備える。同様に、情報処理部10bは、制御情報送信部11bと制御情報受信部12bとを備え、情報処理部10cは、制御情報送信部11cと制御情報受信部12cとを備え、情報処理部10dは、制御情報送信部11dと制御情報受信部12dとを備える。ここで、制御情報送信部11a〜11dはそれぞれ同様の処理を実行し、制御情報受信部12a〜12dはそれぞれ同様の処理を実行する。そこで、ここでは代表して、情報処理部10aが備える制御情報送信部11aおよび制御情報受信部12aの各処理について説明する。
制御情報送信部11aは、制御情報と、この制御情報の送信先とする情報処理部を指定する送信先情報とを含む制御パケットを、他の情報処理部に対して送信する。ここで、送信先情報には、制御情報の送信先とする情報処理部を複数指定することができる。なお、制御情報は、例えば、送信先の情報処理部に対して何らかの処理の実行を要求することを示す情報である。
制御情報受信部12aは、他の情報処理部から送信された制御パケットを受信したとき、受信した制御パケットに格納された送信先情報を基に、次のような処理を行う。制御情報受信部12aは、受信した制御パケット内の送信先情報において自身が属する情報処理部(すなわち情報処理部10a)が指定されていない場合には、受信した制御パケットをそのまま他の情報処理部に転送する。一方、制御情報受信部12aは、受信した制御パケット内の送信先情報において自身が属する情報処理部が指定されている場合には、受信した制御パケットから制御情報を取り込む。制御情報の取り込み処理の例としては、受信した制御パケットに設定された制御情報を、情報処理部10a内の所定の回路に受け渡す処理がある。これとともに、制御情報受信部12aは、受信した制御パケット内の送信先情報を、自身が属する情報処理部を制御情報の送信先として指定しないように書き替え、送信先情報を書き替えた制御パケットを、他の情報処理部に転送する。
ここで、例として、情報処理部10aの制御情報送信部11aから制御パケットが送信される場合の動作について説明する。情報処理部10aの制御情報送信部11aは、制御情報21と送信先情報22とを含む制御パケット20を、情報処理部10bに対して送信する。このとき、送信先情報22には、制御情報21の送信先として情報処理部10b,10dが指定されているものとする。図1において、送信先情報22内の「B」「D」は、送信先として情報処理部10b,10dをそれぞれ指定したことを示す。なお、送信先情報22において、制御情報21の送信先を指定する情報が格納される形態は、図1に示すような形態に限らない。
情報処理部10bの制御情報受信部12bは、情報処理部10aから送信された制御パケット20を受信すると、受信した制御パケット20内の送信先情報22を参照する。送信先情報22には、送信先として情報処理部10bが指定されているので、制御情報受信部12bは、受信した制御パケット20から制御情報21を取り込む。なお、情報処理部10bは、取り込んだ制御情報21に応じた処理を実行する。
また、制御情報受信部12bは、受信した制御パケット20内の送信先情報22を、情報処理部10bを送信先として指定しないように書き替える。図1の例では、制御情報受信部12bは、送信先情報22に格納されていた「B」を消去することにより送信先情報22を書き替える。制御情報受信部12bは、送信先情報22を書き替えた制御パケット20を、情報処理部10cに送信する。
次に、情報処理部10cの制御情報受信部12cは、情報処理部10bから送信された制御パケット20を受信すると、受信した制御パケット20内の送信先情報22を参照する。送信先情報22には、送信先として情報処理部10cが指定されていないので、制御情報受信部12cは、受信した制御パケット20をそのまま情報処理部10dに送信する。
次に、情報処理部10dの制御情報受信部12dは、情報処理部10cから送信された制御パケット20を受信すると、受信した制御パケット20内の送信先情報22を参照する。送信先情報22には、送信先として情報処理部10dが指定されているので、制御情報受信部12dは、受信した制御パケット20から制御情報21を取り込む。なお、情報処理部10dは、取り込んだ制御情報21に応じた処理を実行する。
以上の処理によれば、1つの制御パケットを使用して、複数の情報処理部に対して制御情報が送信される。このため、複数の情報処理部のそれぞれに対して個別の制御パケットを用いて制御情報を送信する場合と比較して、通信路における伝送負荷を軽減できる。特に、制御情報の送信先とする情報処理部の数が多くなるほど、伝送負荷を軽減する効果が大きくなる。
また、制御情報受信部12a〜12dは、受信した制御パケットにおいて、制御情報の送信先として自身が属する情報処理部のみが指定されていた場合には、制御パケットを他の情報処理部に送信しないようにしてもよい。図1の例では、情報処理部10dの制御情報受信部12dが制御パケット20を受信したとき、制御パケット20内の送信先情報22には、送信先として情報処理部10dのみが指定された状態となる。この場合、制御情報受信部12dは、受信した制御パケット20から制御情報21を取り込んだ後、制御パケット20を情報処理部10aに送信しない。このように、制御情報受信部が制御パケットを受信したとき、受信した制御パケット内の送信先情報において自身が属する情報処理部のみが指定されていた場合には、それ以上制御パケットが転送されなくなるので、通信路の伝送負荷が軽減される。
次に、各情報処理部が、キャッシュ部を備えるプロセッサコアと分散共有メモリとを有するように構成された情報処理システムの実施の形態について説明する。
〔第2の実施の形態〕
図2は、第2の実施の形態に係る情報処理システムの全体構成例を示す図である。
〔第2の実施の形態〕
図2は、第2の実施の形態に係る情報処理システムの全体構成例を示す図である。
図2に示す情報処理システム100は、複数のSB(System Board)110a〜110dを備える。SB110a〜110dは、例えば、ラック内のスロットにそれぞれ挿入され、ラックのバックボードを介してリング状に接続される。SB110a〜110dは、それぞれ1つ以上のプロセッサコアを備えた情報処理部の一例であり、SB110a〜110dのそれぞれが備えるプロセッサコアが並列に処理を実行することで、情報処理システム100は並列コンピュータとして動作する。なお、本実施の形態では4つのSB110a〜110dを備えるが、SBの数はこれに限ったものではない。
SB110aは、複数のノード121a〜123a、ノードコントローラ(NC)131aおよびメモリ141a〜144aを備える。ノード121a〜123aはそれぞれCPUであり、ノード121a〜123aのそれぞれには、プロセッサコアとキャッシュ部とを備えるコア部が1つ以上設けられている。
ノード121a〜123aのそれぞれの間と、ノード121a〜123aとNC131aとの間は、例えばQPI(Quick Path Interconnect)規格のバスによって接続されている。NC131aは、自身が属するSB110a内の各ノード121a〜123aと、他のSB内のNCとを接続する。メモリ141a,142a,143aは、ノード121a,122a,123aにそれぞれ接続され、メモリ144aはNC131aに接続されている。
SB110b〜110dも、SB110aと同様の構成を有する。すなわち、SB110b内のノード121b,122b,123b、NC131bおよびメモリ141b,142b,143b,144bは、SB110a内のノード121a,122a,123a、NC131aおよびメモリ141a,142a,143a,144aにそれぞれ対応する。また、SB110c内のノード121c,122c,123c、NC131cおよびメモリ141c,142c,143c,144cは、SB110a内ノード121a,122a,123a、NC131aおよびメモリ141a,142a,143a,144aにそれぞれ対応する。さらに、SB110d内のノード121d,122d,123d、NC131dおよびメモリ141d,142d,143d,144dは、SB110a内のノード121a,122a,123a、NC131aおよびメモリ141a,142a,143a,144aにそれぞれ対応する。
なお、各SBに含まれるノードの数は、3つに限定されるものではない。
NC131a〜131dは、例えばファイバチャネルなどのインタフェースを通じて、リング状に接続されている。本実施の形態では、NC131a,131b,131c,131d,131a,・・・の順にデータが転送されるものとする。
NC131a〜131dは、例えばファイバチャネルなどのインタフェースを通じて、リング状に接続されている。本実施の形態では、NC131a,131b,131c,131d,131a,・・・の順にデータが転送されるものとする。
本実施の形態の情報処理システム100は、cc−NUMA方式のアーキテクチャを採用したものである。メモリ141a〜144a,141b〜144b、141c〜144c、141d〜144dは、情報処理システム100内の各ノードによって共有されるアドレス空間の一部が割り当てられた分散共有メモリである。メモリ141a〜144a,141b〜144b、141c〜144c、141d〜144dのそれぞれに対する制御および管理は、直結されたノードまたはNCが担う。メモリに対する制御および管理を行うノードを、そのメモリに対するホームノードと呼ぶ。例えば図2において、ノード121aはメモリ141aに対するホームノードである。
ノード内のコア部は、他のノード(ホームノード)の管理下にあるメモリのアドレスにアクセスすることができる。ここで、アクセス元のコア部が属するノードは、後述するリクエストパケットの発行元となることから、「リクエスタ(Requester)」と呼ばれる。アクセス先のメモリアドレスを管理するホームノードが、リクエスタが属するSBとは別のSBにある場合には、リクエスタはNCを介して他のSB内のホームノードにアクセスする。また、リクエスタ内のコア部は、アクセスしたメモリのアドレスから読み出したデータをキャッシュすることができる。
図3は、情報処理システムの内部において送受信されるパケットのフォーマットを示す図である。
図3に示すリクエスト(Request)パケットは、ノード内のコア部が、他のノードに対して、他のノードの管理下にあるメモリのアドレスに対するアクセスを要求する際に、ノードから他のノードに送信されるパケットである。リクエストパケットは、パケット送信先のノードを示す「宛先ID」、アクセス元のノード(リクエスタ)を示す「リクエスタID」、リクエストパケットの発生ごとにユニークな番号が付与される「トランザクションID」、アクセス先のメモリアドレスを示す「アドレス」、および、アクセスの種類を示す「コマンド」の各フィールドを含む。また、リクエストパケットは、「コマンド」フィールドに設定される情報によっては「データ」フィールドを含む場合もある。
図3に示すリクエスト(Request)パケットは、ノード内のコア部が、他のノードに対して、他のノードの管理下にあるメモリのアドレスに対するアクセスを要求する際に、ノードから他のノードに送信されるパケットである。リクエストパケットは、パケット送信先のノードを示す「宛先ID」、アクセス元のノード(リクエスタ)を示す「リクエスタID」、リクエストパケットの発生ごとにユニークな番号が付与される「トランザクションID」、アクセス先のメモリアドレスを示す「アドレス」、および、アクセスの種類を示す「コマンド」の各フィールドを含む。また、リクエストパケットは、「コマンド」フィールドに設定される情報によっては「データ」フィールドを含む場合もある。
次に、「コマンド」フィールドに設定される情報の例を説明する。「Read_S」は、アクセス先からデータを読み出し、読み出したアクセス先とリクエスタ側との共有型データを、リクエスタ側においてS(Shared)ステートでキャッシュすることを示す。「Read_E」は、アクセス先からデータを読み出し、読み出し後にリクエスタ側において変更した排他型データを、リクエスタ側においてE(Exclusive)ステートでキャッシュすることを示す。「Writeback」は、リクエスタ側でキャッシュしているデータをアクセス先のメモリに書き戻すことを示す。「コマンド」フィールドに「Writeback」が設定された場合、リクエストパケットには、書き込みデータが格納された「データ」も設定される。
データレスポンス(DATA-Response)パケットは、リクエストパケットに応答して送信されるパケットである。データレスポンスパケットは、「宛先ID」、「リクエスタID」、「トランザクションID」、「アドレス」および「コマンド」の各フィールドを含む。また、対応するリクエストパケットの「コマンド」フィールドに、「Read_S」または「Read_E」が設定されていた場合、データレスポンスパケットは、アクセス先のアドレスから読み出されたデータが設定される「データ」フィールドをさらに含む。
データレスポンスパケットにおける「リクエスタID」、「トランザクションID」および「アドレス」の各フィールドには、対応するリクエストパケット内の「リクエスタID」、「トランザクションID」および「アドレス」の各フィールドとそれぞれ同じ値が設定される。データレスポンスパケットの「コマンド」フィールドには、例えば、対応するリクエストパケットの「コマンド」フィールドに「Read_S」が設定されていた場合、読み出したデータをSステートでキャッシュ部に登録することを指示する「D−Response_S」が設定される。また、対応するリクエストパケットの「コマンド」フィールドに「Read_E」が設定されていた場合、読み出したデータをEステートでキャッシュ部に登録することを指示する「D−Response_E」が設定される。また、対応するリクエストパケットの「コマンド」フィールドに「Writeback」が設定されていた場合、データの書き戻しが完了したことを通知する「Complete」が設定される。
スヌープパケットは、リクエストパケットによるアクセス先のアドレスのデータが、ホームノード以外の他のノードに持ち出されてキャッシュされていた場合に、その持ち出し先のノードに対して送信される。スヌープパケットは、データの持ち出し先のキャッシュ部に対してキャッシュコヒーレンスを保つスヌープ処理を実行させる場合に、スヌープ処理の制御情報を送信するために使用される。本実施の形態では、スヌープパケットとして、同一SB内のノード間またはノードとNCとの間で送信されるローカルスヌープ(Local-Snoop)パケットと、ホームノードが属するNCから他のSBのNCへ送信されるNCスヌープ(NC-Snoop)パケットとが使用される。
ローカルスヌープパケットは、「宛先ID」、「リクエスタID」、「トランザクションID」、「アドレス」および「コマンド」の各フィールドを含む。ローカルスヌープパケットにおける「アドレス」フィールドには、対応するリクエストパケット内の「アドレス」フィールドと同じ値が設定される。ローカルスヌープパケットの「コマンド」フィールドには、例えば、対応するリクエストパケットの「コマンド」フィールドに「Read_S」が設定されていた場合、持ち出し先のキャッシュデータをSステートにすることを指示する「Snoop_S」が設定される。また、対応するリクエストパケットの「コマンド」フィールドに「Read_E」が設定されていた場合、持ち出し先のキャッシュデータを無効であることを示すI(Invalid)ステートにすることを指示する「Snoop_I」が設定される。
LSレスポンス(LS-Response)パケットは、スヌープリクエストを行うローカルスヌープパケットに応答して、ローカルスヌープパケットによって指定されたスヌープ処理の結果が格納されるパケットである。LSレスポンスパケットは、「宛先ID」、「リクエスタID」、「トランザクションID」、「アドレス」および「コマンド」の各フィールドを含む。LSレスポンスパケットにおける「リクエスタID」、「トランザクションID」および「アドレス」の各フィールドには、対応するローカルスヌープパケット内の「リクエスタID」、「トランザクションID」および「アドレス」の各フィールドとそれぞれ同じ値が設定される。
LSレスポンスパケットの「コマンド」には、例えば、対応するローカルスヌープパケットの「コマンド」フィールドに「Snoop_S」が設定されていた場合、「アドレス」フィールドに設定されたアドレスに対応するキャッシュデータを、ローカルスヌープパケットを送信したノードとLSレスポンスパケットを応答したノードとの共有型データにした旨のSステートにしたことを通知する「Response_S」が設定される。また、対応するローカルスヌープパケットの「コマンド」において「Snoop_I」が設定されていた場合、「アドレス」に対応するキャッシュデータを、無効化した旨のIステートにしたことを通知する「Response_I」が設定される。
NCスヌープパケットは、リクエストパケットによるアクセス先のアドレスのデータをキャッシュする1つ以上のノードに対して、キャッシュコヒーレンスを保つような処理を実行させる制御情報を、1つのパケットによって送信するものである。このNCスヌープパケットは、「宛先ID」、「リクエスタID」、「トランザクションID」、「アドレス」、「コマンド」に加え、「ブロードキャストフラグ」および「レスポンスフラグ」の各フィールドを含む。
NCスヌープパケットの「アドレス」フィールドには、対応するリクエストパケット内の「アドレス」フィールドと同じ値が設定される。NCスヌープパケットでは、「宛先ID」フィールドを使用しないため、特定のノードを指定しないような値(例えば、ブロードキャストを示す値)が設定される。なお、後述する「ブロードキャストフラグ」フィールドを用いて宛先を設定するため、NCスヌープパケットには「宛先ID」フィールドが含まれなくてもよい。
NCスヌープパケットの「コマンド」フィールドには、データの持ち出し先のノードのキャッシュ部に対して実行させる処理の種別が設定される。例えば、対応するリクエストパケットの「コマンド」フィールドに「Read_S」が設定されていた場合、NCスヌープパケットの「コマンド」フィールドには、持ち出し先のキャッシュデータを、NCスヌープパケットを送信したノードとデータの持ち出し先のノードとの共有型データにする旨のSステートにすることを指示する「NC−Snoop_S」が設定される。また、対応するリクエストパケットの「コマンド」フィールドにおいて「Read_E」が設定されていた場合、持ち出し先のキャッシュデータを無効化した旨のIステートにすることを指示する「NC−Snoop_I」が設定される。
「ブロードキャストフラグ」フィールドには、「宛先ID」フィールドの代わりに、パケットの宛先とする1つ以上のNCが設定される。「ブロードキャストフラグ」フィールドには、情報処理システム100が備えるNC131a〜131dのそれぞれに対応する複数のビットが設けられている。「ブロードキャストフラグ」フィールドのいずれかのビットに「1」が設定された場合、そのビットに対応するNCに対して、当該NCが属するSB内のノードにローカルスヌープパケットをブロードキャストすることが指示される。
「レスポンスフラグ」フィールドは、NCスヌープパケットを受信したNCのうちの1つに、受信したNCスヌープパケットに対応するNCレスポンスパケットを送信するように指示することを目的として設けられる。「レスポンスフラグ」フィールドは、1ビットの領域を備え、NCスヌープパケットが最初のNCから送信された初期状態では「1」とされる。その後、NCスヌープパケットが「ブロードキャストフラグ」フィールドに指定されたNCに最初に受信されると、「レスポンスフラグ」フィールドは「0」に変更される。従って、「レスポンスフラグ」フィールドが「0」であれば、「ブロードキャストフラグ」フィールドによって宛先として指定されたNCの少なくとも1つにおいてNCスヌープパケットが受信済みであることを示す。
NCレスポンス(NC-Response)パケットは、NCスヌープパケットに応答して、NCスヌープパケットの「コマンド」フィールドに指定された処理の結果が格納されるパケットである。NCレスポンスパケットは、対応するNCスヌープパケットのブロードキャストフラグで指定された1つ以上のNCからの処理結果を、1つの応答パケットによってNCスヌープパケットの送信元のNCに通知するものである。このNCレスポンスパケットは、「宛先ID」、「リクエスタID」、「トランザクションID」、「アドレス」、「コマンド」に加え、「レスポンスフィールド」の各フィールドを含む。
NCレスポンスパケットの「宛先ID」フィールドには、対応するNCスヌープパケットに設定されたアドレスについてのホームノードを示すIDが格納される。NCレスポンスパケットの「リクエスタID」、「トランザクションID」および「アドレス」の各フィールドには、対応するNCスヌープパケット内の「リクエスタID」、「トランザクションID」および「アドレス」の各フィールドとそれぞれ同じ値が設定される。
NCレスポンスパケットの「コマンド」フィールドには、例えば、対応するNCスヌープパケットの「コマンド」フィールドに「NC−Snoop_S」が設定されていた場合、「アドレス」に対応するキャッシュデータを、NCスヌープパケットを送信したノードとデータの持ち出し先のノードとの共有型データにする旨のSステートにしたことを通知する「NC−Response_S」が設定される。また、対応するNCスヌープパケットの「コマンド」フィールドに「NC−Snoop_I」が設定されていた場合、「アドレス」に対応するキャッシュデータを、無効化した旨のIステートにしたことを通知する「NC−Response_I」が設定される。
NCレスポンスパケットの「レスポンスフィールド」には、情報処理システム100が備えるNC131a〜131dのそれぞれに対応するビットが設けられている。「レスポンスフィールド」のビットに「1」が設定された場合、そのビットに対応するNCが属するSB内のキャッシュ部が、「コマンド」で指定された処理を完了したことを示す。例えば、「コマンド」で「NC−Response_I」が設定され、「レスポンスフィールド」の第3ビットが「1」とされていた場合、第3ビットに対応するNC131cが属するSB110cにおいて、「アドレス」に対応するキャッシュデータが、無効化された旨のIステートとされたことを示す。
図4は、ホーム判定テーブルに保持される情報の例を示す図である。
SB内のノードはそれぞれ、ホーム判定テーブル201を備える。各ノードが備えるホーム判定テーブル201は、共有メモリ空間のアドレスとホームノードのIDとを対応付けたものである。各ノードが備えるホーム判定テーブル201に登録されるノードのIDは、各SB内でローカルに使用されるIDである。そして、各ノードが備えるホーム判定テーブル201において、各ノードが属するSB内のメモリ以外のアドレスに、各ノードが属するSB内のNCのIDが対応付けられる。
SB内のノードはそれぞれ、ホーム判定テーブル201を備える。各ノードが備えるホーム判定テーブル201は、共有メモリ空間のアドレスとホームノードのIDとを対応付けたものである。各ノードが備えるホーム判定テーブル201に登録されるノードのIDは、各SB内でローカルに使用されるIDである。そして、各ノードが備えるホーム判定テーブル201において、各ノードが属するSB内のメモリ以外のアドレスに、各ノードが属するSB内のNCのIDが対応付けられる。
図4(A)では、ノード121a,122a,123aがそれぞれ備えるホーム判定テーブル201の例を示している。図4(A)のホーム判定テーブル201では、例えば、アドレス「0」からアドレス「aaaa−1」に対してノード121aが対応付けられている。この場合、アドレス「0」からアドレス「aaaa−1」は、ノード121aに接続されたメモリ141aに割り当てられていることを意味する。また、ノード121a,122a,123aがそれぞれ備えるホーム判定テーブル201では、アドレス「cccc」からアドレス「zzzz−1」に対してNC131aが対応付けられている。この場合、アドレス「cccc」からアドレス「zzzz−1」は、他のSBに接続されたメモリに割り当てられていることを意味する。
また、情報処理システム100内のNC131a〜131dは、それぞれホーム判定テーブル301を備える。NCが備えるホーム判定テーブル301は、他のSB内のメモリに割り当てられたアドレスと、他のSB内のホームノードのIDとを対応付けたものである。NCが備えるホーム判定テーブル301に登録されるノードのIDは、情報処理システム100の全SBでグローバルに使用されるIDである。すなわち、ホーム判定テーブル301に登録されるノードのIDは、情報処理システム100の全SBでユニークなものとなる。
図4(B)では、NC131aが備えるホーム判定テーブル301の例を示している。NC131aが備えるホーム判定テーブル301では、例えば、アドレス「cccc」からアドレス「dddd−1」に対してノード121bが対応付けられている。この場合、アドレス「cccc」からアドレス「dddd−1」には、SB110b内のノード121bに割り当てられていることを意味する。
図5は、持ち出し管理テーブルに保持される情報の例を示す図である。
SB内のノードはそれぞれ、持ち出し管理テーブル202を備える。各ノードが備える持ち出し管理テーブル202には、各ノードの管理下にあるメモリに格納されたデータが他のノードに持ち出されてキャッシュされている場合に、そのデータが格納されたメモリのアドレスと、データのキャッシュステートと、持ち出し先のノードIDとが対応付けられて登録される。ノードが備える持ち出し管理テーブル202に登録されるノードのIDは、各SB内でローカルに使用されるIDである。そして、持ち出し先のノードが他のSB内のノードである場合には、持ち出し先のノードIDとして、同じSB内のNCを示すIDが登録される。
SB内のノードはそれぞれ、持ち出し管理テーブル202を備える。各ノードが備える持ち出し管理テーブル202には、各ノードの管理下にあるメモリに格納されたデータが他のノードに持ち出されてキャッシュされている場合に、そのデータが格納されたメモリのアドレスと、データのキャッシュステートと、持ち出し先のノードIDとが対応付けられて登録される。ノードが備える持ち出し管理テーブル202に登録されるノードのIDは、各SB内でローカルに使用されるIDである。そして、持ち出し先のノードが他のSB内のノードである場合には、持ち出し先のノードIDとして、同じSB内のNCを示すIDが登録される。
図5(A)では、ノード123bが備える持ち出し管理テーブル202の例を示している。ノード123bが備える持ち出し管理テーブル202では、例えば、ノード123bの管理下にあるメモリ143bに割り当てられたアドレス「eeee」に対して、当該アドレス「eeee」に対するデータが排他型データである旨を表すEステートとノード121bのIDとが対応付けられている。この場合、アドレス「eeee」の位置のデータが、Eステートでノード121bに持ち出されていることを意味する。
また、情報処理システム100内のNC131a〜131dは、それぞれ持ち出し管理テーブル302を備えている。NCが備える持ち出し管理テーブル302には、NCが属するSB内のメモリに格納されたデータが他のSB内のノードに持ち出されてキャッシュされている場合に、そのデータが格納されたメモリのアドレスと、データのキャッシュステートと、持ち出し先のノードIDとがそれぞれ対応付けられて登録される。NCが備える持ち出し管理テーブル302に登録されるノードのIDは、情報処理システム100の全SBでグローバルに使用されるIDである。
図5(B)では、NC131bが備える持ち出し管理テーブル302の例を示している。NC131bが備える持ち出し管理テーブル302では、例えば、SB110b内のメモリ141b〜143bのいずれかに割り当てられたアドレス「cccc」に対して、Eステートとノード121cのIDとが対応付けられている。この場合、アドレス「cccc」の位置のデータが、Eステートでノード121cに持ち出されていることを意味する。
次に、情報処理システム100におけるメモリへのデータアクセス処理の一例を示し、図3に示したパケットの送受信処理について説明する。次の図6〜図9では一例として、SB110a内のノード121aから、SB110b内のノード123bに接続されたメモリ143bに対してアクセスした場合の処理について説明する。
図6は、送信元のSBからのリクエストパケットの送信に応じて、送信先のSBからNCスヌープパケットが送信される処理を示す図である。
図6の例では、ノード121a内のコア部が、SB110b内のノード123bに接続されたメモリ143bに割り当てられた、読み出し要求先のアドレスから、Eステートでのデータ読み出しを要求したものとする。以下、読み出し要求先のアドレスの位置に記憶されたデータを、「データ#1」と呼ぶ。
図6の例では、ノード121a内のコア部が、SB110b内のノード123bに接続されたメモリ143bに割り当てられた、読み出し要求先のアドレスから、Eステートでのデータ読み出しを要求したものとする。以下、読み出し要求先のアドレスの位置に記憶されたデータを、「データ#1」と呼ぶ。
ノード121aは、ノード121aが備えるホーム判定テーブル201を参照し、読み出し要求先のアドレスにNC131aが対応付けられていることを認識する。この場合、読み出し要求先のアドレスは他のSBに接続されたメモリに割り当てられていることから、ノード121aは、NC131aに対してリクエストパケットを送信する。リクエストパケットにおける「宛先ID」および「リクエスタID」の各フィールドには、それぞれNC131a、ノード121aを示すように設定され、「コマンド」フィールドには「Read_E」が設定される。
リクエストパケットを受信したNC131aは、受信したリクエストパケットに設定されたデータ#1のアドレスで、NC131aが備えるホーム判定テーブル301を検索する。NC131aは、ホーム判定テーブル301から、データ#1のアドレスに対応付けられたノード123bのIDを抽出し、「宛先ID」フィールドをホーム判定テーブル301から抽出したホームノード(ノード123b)のIDに書き替えたリクエストパケットを、隣接する転送先であるSB110bのNC131bに対して送信する。
SB110aのNC131aから送信されたリクエストパケットを受信したNC131bは、「宛先ID」フィールドから、受信したリクエストパケットが自身に接続されたノード宛であると判定する。NC131bは、受信したリクエストパケットに設定されたデータ#1のアドレスで、NC131bが備える持ち出し管理テーブル302を検索する。
ここで、リクエストパケットに設定されたアドレスに対応する持ち出し先ノードのIDが持ち出し管理テーブル302から抽出されなかった場合には、NC131bは、リクエストパケットを「宛先ID」が示すノード123bに送信する。この場合、データ#1がノード121b,122bにも持ち出されていなければ、ノード123bは、要求されたデータ#1をメモリ143bからEステートで読み出し、読み出したデータ#1を格納したデータレスポンスパケットをNC131bに送信する。データレスポンスパケットは、NC131bからNC131c,131dを経由してNC131aに受信され、リクエスタであるNC131a内のノード121aに転送されて、一連の処理が終了する。
一方、NC131aからのリクエストパケットに設定されたアドレスに対応する持ち出し先ノードのIDが持ち出し管理テーブル302から抽出された場合、NC131bは、データ#1のキャッシュコヒーレンシを保つように制御するコマンドを、すべての持ち出し先に対して送信する。ここで、本実施の形態では、データ#1の持ち出し先のノードが属するすべてのNCに対してそれぞれ個別にスヌープパケットを送信する代わりに、1つのNCスヌープパケットを送信することで、NC間を接続する通信路の伝送負荷を軽減する。
前述のように、NCスヌープパケットには、NC131a〜131dがそれぞれ割り当てられたビットを備えるブロードキャストフラグが設定されている。ここで、NC131bが備える持ち出し管理テーブル302に登録されたデータ#1の持ち出し先が、SB110c内のノード121c,122cおよびSB110d内のノード121d,122dであったものとする。ブロードキャストフラグの各ビットが先頭からNC131a,131b,131c,131dを示すものとすると、NC131bは、ブロードキャストフラグにおいてNC131c,131dにそれぞれ対応する第3ビットおよび第4ビットを「1」とし、他のビットを「0」としたNCスヌープパケットを、隣接する転送先であるNC131cに対して送信する。
また、元のリクエストパケットの「コマンド」フィールドでは「Read_E」が設定されていたことから、送信されるNCスヌープパケットの「コマンド」フィールドには、データ#1のキャッシュデータをIステートにするように指示する「NC−Snoop_I」が設定される。
なお、NC131aからのリクエストパケットに設定されたアドレスに対応する持ち出し先ノードのIDが、持ち出し管理テーブル302から抽出された場合であっても、リクエストパケット内の「コマンド」フィールドの設定値と、持ち出されたデータのキャッシュステートとの組み合わせによっては、NCスヌープパケットが送信されずに、リクエストパケットがホームノードに送信される場合がある。
図7は、NCスヌープパケットを受信したSB内の処理を示す図である。
NC131bからのNCスヌープパケットを受信したNC131cは、受信したNCスヌープパケット内のブロードキャストフラグを参照する。ブロードキャストフラグにおいては、NC131cに対応するビットが「1」とされていることから、NC131cは、受信したNCスヌープパケットの内容に基づくローカルスヌープパケットを生成し、SB110c内のノード121c〜123cの全てにブロードキャストする。ブロードキャストされるローカルスヌープパケットの「コマンド」フィールドには、NCスヌープパケットの「コマンド」フィールドに基づき、「Snoop_I」が設定される。
NC131bからのNCスヌープパケットを受信したNC131cは、受信したNCスヌープパケット内のブロードキャストフラグを参照する。ブロードキャストフラグにおいては、NC131cに対応するビットが「1」とされていることから、NC131cは、受信したNCスヌープパケットの内容に基づくローカルスヌープパケットを生成し、SB110c内のノード121c〜123cの全てにブロードキャストする。ブロードキャストされるローカルスヌープパケットの「コマンド」フィールドには、NCスヌープパケットの「コマンド」フィールドに基づき、「Snoop_I」が設定される。
また、NC131cは、ブロードキャストフラグにおけるNC131cに対応するビットを「0」に書き替えたNCスヌープパケットを、隣接する転送先であるNC131dに送信する。NCスヌープパケットを受信したNC131dは、受信したNCスヌープパケット内のブロードキャストフラグを参照する。ブロードキャストフラグにおいては、NC131dに対応するビットが「1」とされていることから、NC131dは、受信したNCスヌープパケットの内容に基づくローカルスヌープパケットを生成し、SB110d内のノード121d〜123dの全てにブロードキャストする。ブロードキャストされるローカルスヌープパケットの「コマンド」フィールドには、NCスヌープパケットの「コマンド」フィールドに基づき、「Snoop_I」が設定される。
また、NC131dは、受信したNCスヌープパケットのうち、ブロードキャストフラグにおけるNC131dに対応するビットを「0」に書き替える。このとき、ブロードキャストフラグの全ビットが「0」となることから、NC131dは、NCスヌープパケットが必要なすべてのNCに受信されたと判定して、NCスヌープパケットを隣接する転送先であるNC131aに送信しない。
図8は、NCレスポンスパケットが送信される際のSB内の処理を示す図である。
SB110cにおいて、NC131cからノード121c〜123cに対してローカルスヌープパケットがブロードキャストされると、ローカルスヌープパケットを受信したノード121c〜123cは、それぞれ要求された処理に対する応答を行う。図8の例では、ノード121c,122cのそれぞれにデータ#1がキャッシュされている。ノード121c,122cの各キャッシュ部は、受信したローカルスヌープパケットの「アドレス」フィールドに対応するキャッシュデータをIステートとし、「コマンド」フィールドに処理結果として「Response_I」を設定したLS−レスポンスパケットをNC131cに送信する。また、ノード123cは、ローカルスヌープパケットの「アドレス」フィールドに対応するキャッシュデータを元々保持していないことから、キャッシュ部を特に制御することなく、「コマンド」フィールドに「Response_I」を設定したLSレスポンスパケットをNC131cに送信する。
SB110cにおいて、NC131cからノード121c〜123cに対してローカルスヌープパケットがブロードキャストされると、ローカルスヌープパケットを受信したノード121c〜123cは、それぞれ要求された処理に対する応答を行う。図8の例では、ノード121c,122cのそれぞれにデータ#1がキャッシュされている。ノード121c,122cの各キャッシュ部は、受信したローカルスヌープパケットの「アドレス」フィールドに対応するキャッシュデータをIステートとし、「コマンド」フィールドに処理結果として「Response_I」を設定したLS−レスポンスパケットをNC131cに送信する。また、ノード123cは、ローカルスヌープパケットの「アドレス」フィールドに対応するキャッシュデータを元々保持していないことから、キャッシュ部を特に制御することなく、「コマンド」フィールドに「Response_I」を設定したLSレスポンスパケットをNC131cに送信する。
NCスヌープパケットに対する応答であるNCレスポンスパケットは、ブロードキャストフラグにおいて指定されたNCのうち、最初にNCスヌープパケットを受信したNC(図8ではNC131c)によって生成され、送信される。NC131cは、SB110c内のすべてのノード121c〜123cからLSレスポンスパケットを受信すると、レスポンスフィールドにおけるNC131cに対応するビットに「1」を設定したNCレスポンスパケットを、隣接する転送先であるNC131dに送信する。
なお、NCレスポンスパケットの「リクエスタID」および「トランザクションID」の各フィールドには、NCスヌープパケットの「リクエスタID」および「トランザクションID」の各フィールドと同じ値がそれぞれ設定される。また、NCレスポンスパケットの「コマンド」フィールドには「NC−Response_I」が設定される。
一方、SB110dにおいても、NC131dからノード121d〜123dに対してローカルスヌープパケットがブロードキャストされると、ローカルスヌープパケットを受信したノード121d〜123dは、要求された処理に対する応答を行う。NC131dは、SB110d内のすべてのノード121d〜123dからLSレスポンスパケットを受信し、かつ、NCスヌープパケットと同じ「リクエスタID」および「トランザクションID」の各フィールド値が設定されたNCレスポンスパケットを受信すると、次の処理を行う。NC131dは、受信したNCレスポンスパケットのうち、レスポンスフィールドにおけるNC131dに対応するビットを「1」に書き替え、書き替え後のNCレスポンスパケットを、隣接する転送先であるNC131aに送信する。
NC131aは、同じ「リクエスタID」および「トランザクションID」の各フィールド値が設定されたNCスヌープパケットに基づく処理を過去に行っていないことから、受信したNCレスポンスパケットをそのままNC131bに転送する。これにより、NC131bは、データ#1のすべての持ち出し先のノードから、NCスヌープパケットによって要求した処理についての完了通知を受信する。
なお、図示しないが、NCレスポンスパケットを受信したNC131bは、データ#1のホームノードであるノード123bに対して、持ち出されたデータに対するリクエストパケットを送信する。ノード123bは、データ#1が他のSBに持ち出されていると判定して、NC131bに対してローカルスヌープパケットを送信する。NC131bは、ローカルスヌープパケットの応答として、NCレスポンスパケットに格納された処理結果(ここでは、キャッシュデータをIステートとしたことを通知するコマンドである「Response_I」)を設定したLSレスポンスパケットを、ノード123bに送信する。
LSレスポンスパケットを受信したノード123bは、キャッシュコヒーレンシが保たれた状態であると判定し、データ#1をEステートでメモリ143bから読み出し、読み出したデータ#1を格納したデータレスポンスパケットをNC131bに送信する。データレスポンスパケットは、NC131bからNC131c,131dを経由してNC131aに受信され、リクエスタであるNC131a内のノード121aに転送されて、一連の処理が終了する。
ここで、図9は、NCスヌープパケットおよびNCレスポンスパケットが伝送される様子を示す図である。
まず、NCスヌープパケットの伝送について説明する。図7で説明したように、NC131bは、NCスヌープパケットを送信する際に、NC131c,131dにそれぞれ対応するブロードキャストフラグの第3ビットおよび第4ビットを「1」とし、他のビットを「0」とする。また、NC131bは、NCスヌープパケット内のレスポンスフラグを初期値「1」とする。
まず、NCスヌープパケットの伝送について説明する。図7で説明したように、NC131bは、NCスヌープパケットを送信する際に、NC131c,131dにそれぞれ対応するブロードキャストフラグの第3ビットおよび第4ビットを「1」とし、他のビットを「0」とする。また、NC131bは、NCスヌープパケット内のレスポンスフラグを初期値「1」とする。
NC131bからのNCスヌープパケットを受信したNC131cは、ブロードキャストフラグにおける自身を指示するビットが「0」である場合、NCスヌープパケットをそのまま隣接する転送先に送信する。しかしながら、図9の例では、ブロードキャストフラグにおけるNC131cを指示するビットが「1」であることから、NC131cは、NCスヌープパケットの内容に基づき、自身が属するSB110c内のノードにローカルスヌープパケットをブロードキャストする。
また、NC131cは、ブロードキャストフラグにおける自身を指示するビットを「0」に書き替える。さらに、NC131cは、初期値「1」とされたレスポンスフラグを「0」に書き替える。ここで、書き替え後のブロードキャストフラグに「1」が存在することから、NC131cは、ブロードキャストフラグおよびレスポンスフラグを書き替えたNCスヌープパケットを、隣接するNC131dに送信する。
NC131cからのNCスヌープパケットを受信したNC131dは、ブロードキャストフラグにおける自身を指示するビットが「1」であることから、NCスヌープパケットの内容に基づき、自身が属するSB110d内のノードにローカルスヌープパケットをブロードキャストする。また、NC131dは、ブロードキャストフラグにおける自身を指示するビットを「0」に書き替える。ここで、書き替え後のブロードキャストフラグの全ビットが「0」になることから、NC131dは、NCスヌープパケットをそれ以上送信しない。
以上のNCスヌープパケットを用いることにより、データの持ち出し先のノードが属するすべてのNCに対して、「コマンド」フィールドで指定される処理を1つのパケットによって要求することができるようになる。このため、データが複数のノードに持ち出されたときに、ホームノードに接続したNCがデータの持ち出し先のすべてのノードに対して個別にスヌープパケットを送信する場合と比較して、NC間を接続する通信路の伝送負荷を軽減することができる。
次に、NCレスポンスパケットの伝送について説明する。NCスヌープパケットのブロードキャストフラグによって指定されたNCは、NCスヌープパケットのレスポンスフラグを参照する。レスポンスフラグが「1」である場合、NCは、受信したNCスヌープパケットに対応するNCレスポンスパケットを生成して送信する。
図9の例では、NC131cがNCスヌープパケットを受信したとき、受信したNCスヌープパケットのレスポンスフラグは「1」となっている。このため、NC131cは、受信したNCスヌープパケットに対応するNCレスポンスパケットを生成する。NC131cは、SB110c内のすべてのノードからLSレスポンスパケットを受信し、SB110c内でキャッシュされたデータ#1がすべて無効化されたことを確認すると、NCレスポンスパケットをNC131dに送信する。このとき、送信されるNCレスポンスパケットにおいては、「コマンド」フィールドに対してキャッシュデータの無効化が完了したことを示す「NC−Response_I」が設定され、「レスポンスフィールド」におけるNC131cを指示するビットが「1」とされる。
NC131dは、NC131cからのNCレスポンスパケットを受信し、かつ、SB110d内のすべてのノードからLSレスポンスパケットを受信して、SB110d内でキャッシュされたデータ#1がすべて無効化されたことを確認すると、NCレスポンスパケットをNC131aに転送する。このとき、転送されるNCレスポンスパケットにおいては、「レスポンスフィールド」におけるNC131dを指示するビットが「1」とされる。
NC131aは、NC131dからのNCレスポンスパケットを受信する。しかし、NC131aは、受信したNCレスポンスパケットに設定されたものと同じ「リクエスタID」および「トランザクションID」の各フィールド値が設定されたNCスヌープパケットを過去に受信していない。この場合、NC131aは、受信したNCレスポンスパケットをそのままNC131bに転送する。
NC131bは、NC131aからのNCレスポンスパケットを受信する。NC131bは、受信したNCレスポンスパケットの「コマンド」フィールドに「NC−Response_I」が設定され、レスポンスフィールドにおけるNC131c,131dに対応するビットが「1」とされていることを確認する。NC131bは、確認したこれらの情報から、SB110cおよびSB110dの内部にそれぞれキャッシュされたデータが無効化されたことを認識する。
以上のNCレスポンスパケットを用いることにより、NCスヌープパケットの送信元のNCは、データの持ち出し先とされたすべてのノードにおいてNCスヌープパケットにより指示した処理が完了したことを、1つのパケットによって認識できるようになる。このため、データが複数のノードに持ち出された場合に、各ノードに対して処理を要求するスヌープパケットだけでなく、スヌープパケットに対するレスポンスパケットのデータ量も抑制することができる。従って、NC間を接続する通信路の伝送負荷を一層軽減することができる。
図10は、NCスヌープパケットが送信される別の処理例を示す図である。
NCは、図6の例のように他のNCからのリクエストパケットを受信した場合の他、図10に示すように、同じSB内のノードからローカルスヌープパケットを受信した場合にも、NCスヌープパケットを送信する。
NCは、図6の例のように他のNCからのリクエストパケットを受信した場合の他、図10に示すように、同じSB内のノードからローカルスヌープパケットを受信した場合にも、NCスヌープパケットを送信する。
図10では、ノード122b内のコア部が、ノード123bに接続されたメモリ143bに割り当てられたアドレスからのEステートでのデータ読み出しを要求したものとする。ノード122bは、自身が備えるホーム判定テーブル(図示せず)に基づいて、読み出し要求先のアドレスに対応するホームノードがノード123bであることを認識する。ノード122bは、ホームノードであるノード123bに対してリクエストパケットを送信する。リクエストパケットの「コマンド」フィールドには「Read_E」が設定される。
リクエストパケットを受信したノード123bは、受信したリクエストパケットに設定されたアドレスで、ノード123bが備える持ち出し管理テーブル202を検索する。ここで、リクエストパケットに設定されたアドレスに対応する持ち出し先ノードのIDが持ち出し管理テーブル202から抽出されなかった場合には、ノード123bは、要求されたデータ#1をメモリ143bからEステートで読み出し、読み出したデータ#1を格納したデータレスポンスパケットをノード122bに送信する。
一方、リクエストパケットに設定されたアドレスに対応する持ち出し先ノードのIDが持ち出し管理テーブル202から抽出された場合、ノード123bは、「コマンド」フィールドに「Snoop_I」を設定したローカルスヌープパケットをNC131bに送信する。ここで、持ち出し先ノードがSB110c,110dにそれぞれ存在するものとすると、NC131bは、ブロードキャストフラグにおけるSB110c、110dにそれぞれ対応するビットを「1」としたNCスヌープパケットを送信する。以後、NC131bがNCレスポンスパケットを受信するまでの処理は、図7,図8で説明した処理と同様である。NCスヌープパケットが送信されることで、データ#1のキャッシュコヒーレンシを保つように制御するコマンドがすべての持ち出し先ノードに対して送信される。
なお、ノード122bからのリクエストパケットの設定されたアドレスに対応する持ち出し先ノードのIDが持ち出し管理テーブル202から抽出された場合であっても、リクエストパケット内の「コマンド」フィールドの設定値と、持ち出されたデータのキャッシュステートとの組み合わせによっては、ノード123bからローカルスヌープパケットが送信されない場合がある。
図示しないが、NCレスポンスパケットを受信したNC131bは、ノード123bに対してLSレスポンスパケットを送信することで、データ#1の持ち出し先とされたすべてのノードにおいて「Snoop_I」が示す処理が完了したことをノード123bに通知する。「Snoop_I」が示す処理が完了したことを認識したノード123bは、要求されたデータ#1をメモリ143bからEステートで読み出し、読み出したデータ#1を格納したデータレスポンスパケットをノード122bに送信する。
次に、ノードおよびNCの構成例と、ノードおよびNCの詳細な動作について説明する。まず、図11は、ノードの構成例およびその動作を示す図である。この図11では例として、SB110a内のノード121aの構成例を示すが、他のノードも図11と同様の構成を有する。なお、この図11以降、ノードの内部に備えられる構成については、すべてのノードについて共通の符号を付して説明する。
ノード121aは、コア部210,220、メモリ制御部231,232、リクエスト生成部241、ローカルスヌープ生成部242、LSレスポンス生成部243、データレスポンス生成部244、アービタ251,252、ホーム判定テーブル201および持ち出し管理テーブル202を備えている。
コア部210は、図示しないプロセッサコアと、キャッシュ部211とを備える。コア部220も同様に、図示しないプロセッサコアと、キャッシュ部221とを備える。キャッシュ部211,221は、それぞれ、キャッシュメモリと、キャッシュメモリを制御するキャッシュ制御部とを備える。コア部210,220は、それぞれ同様の処理を実行可能であるので、ここではコア部210の動作についてのみ説明する。
コア部210は、他のノードの管理下にあるメモリ内のデータ(ただし、キャッシュ部211にキャッシュされていないデータ)にアクセスする場合、アクセス先のアドレスとコマンドとを含むリクエストを、アービタ251を介してリクエスト生成部241に送信する。コマンドが「Writeback」である場合、リクエストには書き戻し対象のデータが含まれる。
コア部210からのリクエストを受信したリクエスト生成部241は、ホーム判定テーブル201を参照する。前述のように、ホーム判定テーブル201には、共有メモリ空間のアドレスとホームノードのIDとが対応づけられている。リクエスト生成部241は、ホーム判定テーブル201から、コア部210からのリクエストに含まれるアドレスに対応付けられたノードIDを抽出し、抽出したノードIDを「宛先ID」フィールドに設定したリクエストパケットを送信する。ここで、アクセス先のアドレスに対応するホームノードがSB110a内のノードである場合、リクエストパケットはSB110a内のホームノードに送信される。一方、アクセス先のアドレスに対応するホームノードがSB110aの外部にある場合、リクエストパケットはSB110a内のNC131aに送信される。
また、コア部210のキャッシュ部211は、SB110a内の他のノードまたはNC131aからデータレスポンスパケットを受信すると、データレスポンスパケットの「コマンド」フィールドに応じた処理を行う。受信したデータレスポンスパケットの「コマンド」フィールドがデータ読み出しの完了を示すものである場合、キャッシュ部211は、データレスポンスパケットの「データ」フィールドから抽出した読み出しデータを、「コマンド」フィールドで示されるステートでキャッシュメモリに書き込む。一方、受信したデータレスポンスパケットの「コマンド」フィールドがデータ書き込みの完了を示すものである場合、キャッシュ部211は、書き込みの完了を認識する。
さらに、コア部210のキャッシュ部211は、SB110a内の他のノードまたはNC131aからローカルスヌープパケットを受信すると、ローカルスヌープパケットの「コマンド」フィールドで示される処理を行う。例えば、キャッシュ部211は、受信したローカルスヌープパケットの「アドレス」フィールドに対応するキャッシュデータがキャッシュメモリに存在する場合、キャッシュデータのステートを「コマンド」フィールドで指定されるステートに変更する。
キャッシュ部211は、ローカルスヌープパケットの「コマンド」フィールドで指示された処理を完了すると、指示された処理が完了されたことを、アービタ252を介してLSレスポンス生成部243に通知する。LSレスポンス生成部243は、キャッシュ部211において処理が完了したことを通知する情報を「コマンド」フィールドに設定したLSレスポンスパケットを生成し、ローカルスヌープパケットの送信元に対して送信する。
メモリ制御部231は、SB110a内の他のノードまたはNC131aからリクエストパケットを受信すると、持ち出し管理テーブル202を参照する。前述のように、持ち出し管理テーブル202には、ノード121aの管理下にあるメモリ141aに格納されたデータが他のノードに持ち出されてキャッシュされている場合に、そのデータが格納されたメモリ141aのアドレスと、データのキャッシュステートと、持ち出し先のノードIDとが対応付けられて登録されている。
メモリ制御部231は、持ち出し管理テーブル202から得られる情報と、受信したリクエストパケット内の「コマンド」フィールドの設定値とに応じて、ローカルスヌープパケットとデータレスポンスパケットのどちらを送信すべきかを判定する。受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル202のレコードに持ち出し先のノードIDが登録されていない場合、メモリ制御部231は、データレスポンスパケットを送信すべきと判定する。また、受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル202のレコードに持ち出し先のノードIDが登録されている場合でも、リクエストパケット内の「コマンド」フィールドに「Writeback」が設定されている場合、および、「コマンド」フィールドに「Read_S」が設定され、かつデータのキャッシュステートがステートSである場合には、メモリ制御部231は、データレスポンスパケットを送信すべきと判定する。一方、受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル202のレコードに持ち出し先のノードIDが登録されているときには、リクエストパケット内の「コマンド」フィールドに「Read_E」が設定されている場合、および、「コマンド」フィールドに「Read_S」が設定され、かつデータのキャッシュステートがステートEである場合には、メモリ制御部231は、ローカルスヌープパケットを送信すべきと判定する。
ローカルスヌープパケットを送信すべきと判定した場合、メモリ制御部231は、持ち出し先のノードIDをローカルスヌープ生成部242に通知する。ローカルスヌープ生成部242は、メモリ制御部231から通知されたノードIDを「宛先ID」フィールドに設定したローカルスヌープパケットを送信する。持ち出し先のノードがSB110a内のノードである場合、ローカルスヌープパケットはSB110a内のノードに送信される。一方、持ち出し先のノードがSB110aの外部にある場合、ローカルスヌープパケットはSB110a内のNC131aに送信される。
一方、データレスポンスパケットを送信すべきと判定した場合、メモリ制御部231は、メモリ141aにアクセスする。リクエストパケットの「コマンド」フィールドにより読み出しが要求されていた場合、メモリ制御部231は、リクエストパケットに設定されたアドレスの位置からデータを読み出す。また、リクエストパケットの「コマンド」フィールドに「Writeback」が設定されていた場合、メモリ制御部231は、リクエストパケットの「データ」フィールドから抽出したデータを、リクエストパケットに設定されたアドレスの位置に書き込む。
メモリ制御部231は、メモリ141aへのアクセス処理が完了すると、データレスポンス生成部244に対して処理の完了を通知する。この場合、データレスポンス生成部244は、メモリ制御部231が受信したリクエストパケットの送信元に対して、データレスポンスパケットを送信する。リクエストパケットの「コマンド」フィールドによりデータの読み出しが要求されていた場合、送信されるデータレスポンスパケットの「データ」フィールドに、メモリ制御部231によってメモリ141aから読み出されたデータが格納される。
また、データレスポンス生成部244は、メモリ制御部231が受信したリクエストパケットの「コマンド」フィールドに「Read_E」が設定されていた場合、持ち出し管理テーブル202を更新する。データレスポンス生成部244は、持ち出し管理テーブル202における、リクエストパケットに設定されたアドレスに対応するレコードに対して、ステートをEにするとともに、持ち出し先として「リクエスタID」フィールドの値を登録する。
メモリ制御部232は、SB110a内の他のノードまたはNC131aからLSレスポンスパケットを受信すると、受信したLSレスポンスパケットをデータレスポンス生成部244に転送する。このとき、メモリ制御部232は、受信したLSレスポンスパケットに対応するリクエストパケットの「コマンド」フィールドによりデータの読み出しが要求されていた場合には、メモリ141aにアクセスし、LSレスポンスパケットに設定されたアドレスからデータを読み出す。なお、ここで言う「受信したLSレスポンスパケットに対応するリクエストパケット」とは、受信したLSレスポンスパケットと「トランザクションID」フィールドの値が同じであるリクエストパケットを指す。メモリ制御部232は、メモリ141aからデータを読み出した場合、読み出したデータをデータレスポンス生成部244に送信する。
メモリ制御部232を通じてLSレスポンスパケットを受信したデータレスポンス生成部244は、「リクエスタID」フィールドが示すノードまたはNC131aを「宛先ID」フィールドに設定したデータレスポンスパケットを送信する。メモリ制御部232によってメモリ141aからデータが読み出された場合には、読み出されたデータがデータレスポンスパケットの「データ」フィールドに格納される。
また、データレスポンス生成部244は、メモリ制御部232を通じたLSレスポンスパケットの受信に応じてデータレスポンスパケットを送信した場合には、持ち出し管理テーブル202における、受信したLSレスポンスパケットに設定されたアドレスに対応するレコードを更新する。データレスポンス生成部244は、持ち出し管理テーブル202における更新前のレコード内の「アドレス」および「ステート」の各フィールドの値と、受信したLSレスポンスパケット内の「アドレス」フィールドの値との組み合わせに応じて、レコード内の「ステート」および「持ち出し先ID」の各フィールドを更新する。
次に、図12は、NCの構成例およびその動作を示す図である。この図12では例として、SB110a内のNC131aの構成例を示すが、他のNC131b〜131dも図12と同様の構成を有する。なお、この図12以降、NCの内部に備えられる構成については、すべてのNCについて共通の符号を付して説明する。
NC131aは、リクエスト送信部311、NCスヌープ生成部312、リクエスト受信処理部313、NCスヌープ処理部314、NCレスポンス処理部315、データレスポンス送信部316、リクエスタ判定部321、宛先判定部322、BC(Broadcast)判定部323、NCレスポンス判定部324、宛先判定部325およびアービタ331〜335を備えている。また、NC131aは、処理の際に利用される情報として、前述したホーム判定テーブル301および持ち出し管理テーブル302の他、ID変換テーブル303、レスポンス受信判定テーブル304およびレスポンス送信判定テーブル305を備える。
リクエスト送信部311は、NC131aが属するSB110a内のノードからリクエストパケットを受信すると、ホーム判定テーブル301から、リクエストパケットに設定されたアドレスに対応するホームノードのIDを抽出する。リクエスト送信部311は、受信したリクエストパケットの「宛先ID」フィールドを、ホーム判定テーブル301から抽出したホームノードのIDに書き替える。これとともに、リクエスト送信部311は、受信したリクエストパケットの「リクエスタID」および「トランザクションID」の各フィールドの値を、NC131aの内部でローカルに使用されるIDから、情報処理システム100に含まれる複数の各NCでグローバルに使用されるIDに書き替える。リクエスト送信部311は、「宛先ID」「リクエスタID」「トランザクションID」の各フィールドの値を書き替えたリクエストパケットを、アービタ331を介して、隣接する送信先であるNC131bに送信する。
なお、以下の説明では、SB内でローカルに使用されるIDを「ローカルID」と呼び、情報処理システム100に含まれる各SBでグローバルに使用されるIDを「グローバルID」と呼ぶ。
リクエスタ判定部321は、NC131aが属するSB110a内のノードからローカルスヌープパケットを受信すると、受信したローカルスヌープパケットにおける「宛先ID」および「リクエスタID」の各フィールドの値を比較する。「宛先ID」および「リクエスタID」の各フィールド値が同じである場合(例えば、NC131aが送信したリクエストパケットに応答してノードからローカルスヌープパケットが送信された場合)、リクエスタ判定部321は、受信したローカルスヌープパケットをNCレスポンス処理部315に送信する。一方、「宛先ID」および「リクエスタID」の各フィールドの値が異なる場合(例えば、リクエスタがホームノード以外のSB110a内のノードである場合)、リクエスタ判定部321は、受信したローカルスヌープパケットをNCスヌープ生成部312に送信する。
NCスヌープ生成部312は、リクエスタ判定部321を通じてローカルスヌープパケットを受信すると、持ち出し管理テーブル302から、ローカルスヌープパケットに設定されたアドレスに対応付けられたノードIDを取得して、データの持ち出し先のノードを判別する。NCスヌープ生成部312は、NCスヌープパケットを生成し、データの持ち出し先のノードに接続されたNCにそれぞれ対応する、ブロードキャストフラグ内のビットを「1」とするとともに、レスポンスフラグを「1」とする。また、NCスヌープ生成部312は、受信したローカルスヌープパケット内の「リクエスタID」および「トランザクションID」の各フィールドをそれぞれローカルIDからグローバルIDに変換し、変換後の各IDをNCスヌープパケットの「リクエスタID」および「トランザクションID」の各フィールドの値に設定する。NCスヌープ生成部312は、設定を完了したNCスヌープパケットを、アービタ332を介して、隣接する送信先であるNC131bに送信する。
さらに、NCスヌープパケットを送信したNCスヌープ生成部312は、レスポンス受信判定テーブル304に対して新規のレコードを登録する。登録されたレコードは、送信したNCスヌープパケットに対応するNCレスポンスパケットをNC131aが受信した際に参照される。
ここで、図13は、レスポンス受信判定テーブルに保持される情報の例を示す図である。
レスポンス受信判定テーブル304は、送信したNCスヌープパケットに対応するNCレスポンスパケットを受信するまでの間、NCスヌープパケットを送信する際のトリガとなったパケットの内容を保持するものである。レスポンス受信判定テーブル304のレコードには、送信されたNCスヌープパケットに設定されたトランザクションID、NCスヌープパケットを送信する際のトリガとなった元のパケット、NCスヌープパケットに対応するNCレスポンスパケットを受信したか否かを示す受信フラグが登録される。
レスポンス受信判定テーブル304は、送信したNCスヌープパケットに対応するNCレスポンスパケットを受信するまでの間、NCスヌープパケットを送信する際のトリガとなったパケットの内容を保持するものである。レスポンス受信判定テーブル304のレコードには、送信されたNCスヌープパケットに設定されたトランザクションID、NCスヌープパケットを送信する際のトリガとなった元のパケット、NCスヌープパケットに対応するNCレスポンスパケットを受信したか否かを示す受信フラグが登録される。
例えば、NCスヌープパケットを送信したNCスヌープ生成部312は、リクエスタ判定部321を通じて受信したローカルスヌープパケットを、レスポンス受信判定テーブル304のレコードにおける「元のパケット」の欄に登録する。また、受信フラグの値は、レコードに対応するNCスヌープパケットが送信された段階では初期値「0」とされる。
以下、図12に戻って説明する。
宛先判定部322は、他のSB内のNCからリクエストパケットを受信すると、「宛先ID」フィールドに設定されたノードIDに応じて次のような処理を行う。「宛先ID」フィールドの設定値が示すノードが他のSB内のノードである場合、宛先判定部322は、受信したリクエストパケットをそのまま、アービタ331を介してNC131bに送信する。一方、「宛先ID」フィールドの設定値が示すノードがSB110a内のノードである場合、宛先判定部322は、受信したリクエストパケットをリクエスト受信処理部313に送信する。
宛先判定部322は、他のSB内のNCからリクエストパケットを受信すると、「宛先ID」フィールドに設定されたノードIDに応じて次のような処理を行う。「宛先ID」フィールドの設定値が示すノードが他のSB内のノードである場合、宛先判定部322は、受信したリクエストパケットをそのまま、アービタ331を介してNC131bに送信する。一方、「宛先ID」フィールドの設定値が示すノードがSB110a内のノードである場合、宛先判定部322は、受信したリクエストパケットをリクエスト受信処理部313に送信する。
リクエスト受信処理部313は、宛先判定部322を通じてリクエストパケットを受信すると、持ち出し管理テーブル302を参照する。リクエスト受信処理部313は、持ち出し管理テーブル302から得られた情報と、受信したリクエストパケットにおける「コマンド」フィールドの設定値とから、SB110a内のノードへのリクエストパケットの送信と、他のSBへのNCスヌープパケットの送信のどちらを実行するべきかを判定する。
受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル302のレコードに持ち出し先のノードIDが登録されていない場合、リクエスト受信処理部313は、リクエストパケットを送信すべきと判定する。また、受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル302のレコードに持ち出し先のノードIDが登録されている場合でも、受信したリクエストパケット内の「コマンド」フィールドに「Writeback」が設定されている場合、および、「コマンド」フィールドに「Read_S」が設定され、かつデータのキャッシュステートがSである場合には、リクエスト受信処理部313は、リクエストパケットを送信すべきと判定する。
一方、受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル302のレコードに持ち出し先のノードIDが登録されているときには、受信したリクエストパケット内の「コマンド」フィールドに「Read_E」が設定されている場合、および、「コマンド」フィールドに「Read_S」が設定され、かつデータのキャッシュステートがEである場合には、リクエスト受信処理部313は、NCスヌープパケットを送信すべきと判定する。
リクエストパケットを送信すべきと判定した場合、リクエスト受信処理部313は、他のNCから受信したリクエストパケットを、「宛先ID」フィールドが示すSB110a内のホームノードに対して、アービタ335を介して送信する。このとき、リクエスト受信処理部313は、リクエストパケット内の「宛先ID」および「トランザクションID」の各フィールドをそれぞれグローバルIDからローカルIDに変換するとともに、「リクエスタID」フィールドを、グローバルIDからNC131a自身を指すローカルIDに変換する。さらに、リクエスト受信処理部313は、ID変換テーブル303に対して新規のレコードを生成し、変換前後のIDをレコードに保存する。
ここで、図14は、ID変換テーブルに保持される情報の例を示す図である。
ID変換テーブル303には、他のSBからのパケットに応じて自身のSB内のノードにパケットを送信する際に、受信パケット内に設定された変換前のIDと、送信パケット内の設定した変換後のIDとを含むレコードが登録される。図14に示すように、ID変換テーブル303のレコードには、送信パケットに設定した変換後のトランザクションIDと、受信パケットにそれぞれ設定された変換前のリクエスタIDおよび変換前のトランザクションIDとが登録される。ID変換テーブル303のレコードは、SB内に送信したパケットに対するレスポンスパケットが受信された際に、削除される。
ID変換テーブル303には、他のSBからのパケットに応じて自身のSB内のノードにパケットを送信する際に、受信パケット内に設定された変換前のIDと、送信パケット内の設定した変換後のIDとを含むレコードが登録される。図14に示すように、ID変換テーブル303のレコードには、送信パケットに設定した変換後のトランザクションIDと、受信パケットにそれぞれ設定された変換前のリクエスタIDおよび変換前のトランザクションIDとが登録される。ID変換テーブル303のレコードは、SB内に送信したパケットに対するレスポンスパケットが受信された際に、削除される。
例えば、リクエスト受信処理部313は、SB110a内のホームノードに送信したリクエストパケット内の「トランザクションID」フィールドの値と、宛先判定部322を通じて受信したリクエストパケット内の「リクエスタID」および「トランザクションID」の各フィールドの値を、ID変換テーブル303のレコードに登録する。また、リクエスト受信処理部313によって登録されたレコードは、その後、SB110a内のホームノードからのデータレスポンスパケットを受信したデータレスポンス送信部316によって削除される。
ID変換テーブル303を用いてIDの変換が行われることで、例えば、各SBで使用可能なIDの数などの各SBが個別に持つIDの制約に関係なく、ノードIDやトランザクションIDをSB間で伝送できるようになる。
以下、図12に戻って説明する。
NCスヌープパケットを送信すべきと判定した場合、リクエスト受信処理部313は、NCスヌープパケットを生成する。リクエスト受信処理部313は、宛先判定部322を通じて受信したリクエストパケット内の「リクエスタID」フィールドの値および「トランザクションID」フィールドの値を、NCスヌープパケットの「リクエスタID」フィールドおよび「トランザクションID」フィールドにそれぞれ設定する。また、リクエスト受信処理部313は、データの持ち出し先のノードに接続されたNCにそれぞれ対応する、ブロードキャストフラグ内のビットを「1」とするとともに、レスポンスフラグを「1」とする。リクエスト受信処理部313は、設定を完了したNCスヌープパケットを、アービタ332を介してNC131bに送信する。
NCスヌープパケットを送信すべきと判定した場合、リクエスト受信処理部313は、NCスヌープパケットを生成する。リクエスト受信処理部313は、宛先判定部322を通じて受信したリクエストパケット内の「リクエスタID」フィールドの値および「トランザクションID」フィールドの値を、NCスヌープパケットの「リクエスタID」フィールドおよび「トランザクションID」フィールドにそれぞれ設定する。また、リクエスト受信処理部313は、データの持ち出し先のノードに接続されたNCにそれぞれ対応する、ブロードキャストフラグ内のビットを「1」とするとともに、レスポンスフラグを「1」とする。リクエスト受信処理部313は、設定を完了したNCスヌープパケットを、アービタ332を介してNC131bに送信する。
また、NCスヌープパケットを送信したリクエスト受信処理部313は、レスポンス受信判定テーブル304に新規のレコードを登録する。リクエスト受信処理部313は、宛先判定部322を通じて受信したリクエストパケットを、レスポンス受信判定テーブル304のレコードにおける「元のパケット」の欄に登録する。また、受信フラグの値は、レコードに対応するNCスヌープパケットが送信された段階では初期値「0」とされる。
BC判定部323は、他のSB内のNCからNCスヌープパケットを受信すると、受信したNCスヌープパケットの「ブロードキャストフラグ」を参照する。「ブロードキャストフラグ」におけるNC131aに対応するビットが「0」である場合、BC判定部323は、受信したNCスヌープパケットを、アービタ332を介してNC131bに転送する。一方、「ブロードキャストフラグ」におけるNC131aに対応するビットが「1」である場合、BC判定部323は、受信したNCスヌープパケットをNCスヌープ処理部314に送信する。
NCレスポンス判定部324は、他のSB内のNCからNCレスポンスパケットを受信すると、受信したNCレスポンスパケット内の「宛先ID」フィールドの値から、NCレスポンスパケットの宛先がSB110a内のノードであるかを判定する。NCレスポンスパケットの宛先がSB110a内のノードでない場合、NCレスポンス判定部324は、受信したNCレスポンスパケットをNCスヌープ処理部314に送信する。一方、NCレスポンスパケットの宛先がSB110a内のノードである場合、NCレスポンス判定部324は、受信したNCレスポンスパケットをNCレスポンス処理部315に送信する。
NCスヌープ処理部314は、BC判定部323を通じてNCスヌープパケットを受信すると、NCスヌープパケットで指示された処理をSB110a内の各ノードに実行させるとともに、各ノードでの処理の実行結果を設定したNCレスポンスパケットを送信する。NCスヌープ処理部314は、処理の際にID変換テーブル303およびレスポンス送信判定テーブル305を参照する。
ここで、図15は、レスポンス送信判定テーブルに保持される情報の例を示す図である。
NCスヌープ処理部314は、NCスヌープパケットの受信に応じてSB110a内のノードにローカルスヌープパケットをブロードキャストした際に、レスポンス送信判定テーブル305に対してレコードを登録する。レスポンス送信判定テーブル305のレコードには、送信されたローカルスヌープパケットに設定された、ローカルIDであるトランザクションID、元のNCスヌープパケットに設定された、ともにグローバルIDであるリクエスタIDおよびトランザクションID、送信されたローカルスヌープパケットに設定されたアドレス、レスポンス数、受信フラグおよびNCレスポンスパケットが登録される。
NCスヌープ処理部314は、NCスヌープパケットの受信に応じてSB110a内のノードにローカルスヌープパケットをブロードキャストした際に、レスポンス送信判定テーブル305に対してレコードを登録する。レスポンス送信判定テーブル305のレコードには、送信されたローカルスヌープパケットに設定された、ローカルIDであるトランザクションID、元のNCスヌープパケットに設定された、ともにグローバルIDであるリクエスタIDおよびトランザクションID、送信されたローカルスヌープパケットに設定されたアドレス、レスポンス数、受信フラグおよびNCレスポンスパケットが登録される。
レコード内のレスポンス数は、SB110a内にブロードキャストされたローカルスヌープパケットに対応するLSレスポンスパケットを受信した数であり、レコード登録時は初期値「0」とされ、最大値はSB110a内のノードの数である「3」である。レコード内の受信フラグは、NCスヌープパケットに対応するNCレスポンスパケットを他のNCから受信したか否かを示すものであり、NCレスポンスパケットを受信した場合に「0」から「1」に更新される。レコード内のNCレスポンスパケットは、他のNCから受信したNCレスポンスパケットがそのまま格納される。レコード内にNCレスポンスパケットが格納されているとき、受信フラグも「1」となる。
レスポンス送信判定テーブル305に登録されたレコードは、NCレスポンスパケットが他のNCに送信されると、レスポンス送信判定テーブル305から削除される。
以下、NCスヌープ処理部314の処理についてフローチャートを用いて説明する。まず、図16は、NCスヌープ処理部によるNCスヌープパケット受信時の処理を示すフローチャートである。
以下、NCスヌープ処理部314の処理についてフローチャートを用いて説明する。まず、図16は、NCスヌープ処理部によるNCスヌープパケット受信時の処理を示すフローチャートである。
[ステップS11]NCスヌープ処理部314は、BC判定部323を通じてNCスヌープパケットを受信する。
[ステップS12]NCスヌープ処理部314は、SB110a内のノード121a,122a,123aに対して、ローカルスヌープパケットをブロードキャストする。このとき、NCスヌープ処理部314は、ローカルスヌープパケットにおける「リクエスタID」フィールドに自身を指すローカルIDを設定するとともに、「トランザクションID」フィールドにローカルIDを設定する。ローカルスヌープパケットにおける「アドレス」フィールドおよび「コマンド」フィールドには、受信したNCスヌープパケットの「アドレス」フィールドの値および「コマンド」フィールドの値がそれぞれ設定される。
[ステップS12]NCスヌープ処理部314は、SB110a内のノード121a,122a,123aに対して、ローカルスヌープパケットをブロードキャストする。このとき、NCスヌープ処理部314は、ローカルスヌープパケットにおける「リクエスタID」フィールドに自身を指すローカルIDを設定するとともに、「トランザクションID」フィールドにローカルIDを設定する。ローカルスヌープパケットにおける「アドレス」フィールドおよび「コマンド」フィールドには、受信したNCスヌープパケットの「アドレス」フィールドの値および「コマンド」フィールドの値がそれぞれ設定される。
[ステップS13]NCスヌープ処理部314は、ID変換テーブル303およびレスポンス送信判定テーブル305のそれぞれに対して新規のレコードを登録する。NCスヌープ処理部314は、ステップS12で送信したローカルスヌープパケットに設定したローカルIDであるトランザクションIDと、ステップS11で受信したNCスヌープパケットに設定されたグローバルIDであるリクエスタIDおよびトランザクションIDとを、ID変換テーブル303における新規のレコードと、レスポンス送信判定テーブル305における新規のレコードのそれぞれに登録する。また、NCスヌープ処理部314は、レスポンス送信判定テーブル305におけるレスポンス数および受信フラグの値をともに「0」とする。
[ステップS14]ステップS11で受信されたNCスヌープパケットにおける「レスポンスフラグ」が「1」である場合、ステップS15の処理が実行され、「レスポンスフラグ」が「0」である場合、ステップS17の処理が実行される。
[ステップS15]「レスポンスフラグ」が「1」である場合、NCスヌープ処理部314は、次の手順により、NCレスポンスパケットを新規に生成する。NCスヌープ処理部314は、ステップS11で受信したNCスヌープパケットの「リクエスタID」「トランザクションID」「アドレス」の各フィールド値を、NCレスポンスパケットの同じフィールドの欄に設定する。また、NCスヌープ処理部314は、ホーム判定テーブル301に基づき、ステップS11で受信したNCスヌープパケットの「アドレス」フィールドに設定された値に対応するホームノードのIDを、NCレスポンスパケットの「宛先ID」フィールドに設定する。さらに、NCスヌープ処理部314は、ステップS11で受信したNCスヌープパケットの「コマンド」フィールドで指定される処理が完了したことを示す値を、NCレスポンスパケットの「コマンド」フィールドに設定する。また、NCスヌープ処理部314は、この時点では、NCスヌープパケットにおける「レスポンスフィールド」の全ビットを「0」としておく。
NCスヌープ処理部314は、以上に手順で生成したNCレスポンスパケットを、ステップS13でレスポンス送信判定テーブル305に生成したレコードに登録するとともに、このレコード内の受信フラグを「1」に書き替える。
[ステップS16]NCスヌープ処理部314は、ステップS11で受信したNCスヌープパケット内の「レスポンスフラグ」を「0」に書き替える。
[ステップS17]NCスヌープ処理部314は、ステップS11で受信したNCスヌープパケット内の「ブロードキャストフラグ」のビットのうち、NC131aに対応するビットを「0」に書き替える。
[ステップS17]NCスヌープ処理部314は、ステップS11で受信したNCスヌープパケット内の「ブロードキャストフラグ」のビットのうち、NC131aに対応するビットを「0」に書き替える。
[ステップS18]NCスヌープ処理部314は、ステップS17での書き替え処理後の「ブロードキャストフラグ」を参照する。NCスヌープ処理部314は、「ブロードキャストフラグ」内の全ビットが「0」である場合には、処理を終了する。この場合、ステップS11で受信されたNCスヌープパケットは、これ以上他のNCに転送されない。一方、NCスヌープ処理部314は、「ブロードキャストフラグ」内のビットの中に1つでも「1」がある場合には、ステップS19の処理を実行する。
[ステップS19]NCスヌープ処理部314は、ステップS16,S17、またはステップS17のみで書き替えられたNCスヌープパケットを、アービタ332を介して、隣接する送信先であるNC131bに対して送信する。
図17は、NCスヌープ処理部によるレスポンスカウント処理を示すフローチャートである。
図16のステップS12においてローカルスヌープパケットがブロードキャストされると、ローカルスヌープパケットを受信したノードは、「コマンド」フィールドで指定される処理を実行する。ノードは、指定された処理を完了すると、「コマンド」フィールドに処理が完了したことを示す値を設定したLSレスポンスパケットを、NC131aに対して返信する。このとき、ノードは、受信したローカルスヌープパケットの「リクエスタID」「トランザクションID」「アドレス」の各フィールドに設定された値を、LSレスポンスパケットの同じフィールドに設定する。
図16のステップS12においてローカルスヌープパケットがブロードキャストされると、ローカルスヌープパケットを受信したノードは、「コマンド」フィールドで指定される処理を実行する。ノードは、指定された処理を完了すると、「コマンド」フィールドに処理が完了したことを示す値を設定したLSレスポンスパケットを、NC131aに対して返信する。このとき、ノードは、受信したローカルスヌープパケットの「リクエスタID」「トランザクションID」「アドレス」の各フィールドに設定された値を、LSレスポンスパケットの同じフィールドに設定する。
[ステップS31]NCスヌープ処理部314は、SB110a内のノードからLSレスポンスパケットを受信する。
[ステップS32]NCスヌープ処理部314は、レスポンス送信判定テーブル305内のレコードのうち、ローカルなトランザクションIDに設定された値が、受信したLSレスポンスパケット内の「トランザクションID」フィールドに設定された値と同じレコードを選択する。NCスヌープ処理部314は、選択したレコード内のレスポンス数を「1」だけカウントアップする。
[ステップS32]NCスヌープ処理部314は、レスポンス送信判定テーブル305内のレコードのうち、ローカルなトランザクションIDに設定された値が、受信したLSレスポンスパケット内の「トランザクションID」フィールドに設定された値と同じレコードを選択する。NCスヌープ処理部314は、選択したレコード内のレスポンス数を「1」だけカウントアップする。
以上の図17の処理により、ローカルスヌープパケットのブロードキャスト先のノードから、「コマンド」フィールドで指定した処理の完了通知を受信するたびに、レスポンス送信判定テーブル305のレコードにおけるレスポンス数がカウントアップされる。レコード内のレスポンス数が最大値である「3」となったとき、NCスヌープ処理部314は、SB110a内のすべてのノードからNC131aが処理の完了通知を受信したことを判定できる。
図18は、NCスヌープ処理部によるNCレスポンス受信処理を示すフローチャートである。
図16のステップS14において、受信したNCスヌープパケット内の「レスポンスフラグ」が「0」であった場合、その後、受信したNCスヌープパケットに対応するNCレスポンスデータが、他のNCから送信される。この場合、NC131aは、図18の処理により、受信したNCスヌープパケットに対応するNCレスポンスデータを受信して、レスポンス受信判定テーブル304内の対応するレコードを更新する。
図16のステップS14において、受信したNCスヌープパケット内の「レスポンスフラグ」が「0」であった場合、その後、受信したNCスヌープパケットに対応するNCレスポンスデータが、他のNCから送信される。この場合、NC131aは、図18の処理により、受信したNCスヌープパケットに対応するNCレスポンスデータを受信して、レスポンス受信判定テーブル304内の対応するレコードを更新する。
[ステップS41]NCスヌープ処理部314は、NCレスポンス判定部324を通じて、他のNCから送信されたNCレスポンスパケットを受信する。
[ステップS42]NCスヌープ処理部314は、レスポンス送信判定テーブル305内のレコードのうち、グローバルなトランザクションIDとして設定された値(すなわち、レコードに対応するNCスヌープパケットに設定されたトランザクションID)が、受信したNCレスポンスパケット内の「トランザクションID」フィールドに設定された値と同じであるレコードを選択する。NCスヌープ処理部314は、選択したレコードに対して、ステップS41で受信したNCレスポンスパケットを登録する。
[ステップS42]NCスヌープ処理部314は、レスポンス送信判定テーブル305内のレコードのうち、グローバルなトランザクションIDとして設定された値(すなわち、レコードに対応するNCスヌープパケットに設定されたトランザクションID)が、受信したNCレスポンスパケット内の「トランザクションID」フィールドに設定された値と同じであるレコードを選択する。NCスヌープ処理部314は、選択したレコードに対して、ステップS41で受信したNCレスポンスパケットを登録する。
[ステップS43]NCスヌープ処理部314は、ステップS42で選択したレコード内の受信フラグを「1」に書き替える。
図19は、NCスヌープ処理部によるNCレスポンス送信処理を示すフローチャートである。
図19は、NCスヌープ処理部によるNCレスポンス送信処理を示すフローチャートである。
[ステップS51]NCスヌープ処理部314は、レスポンス送信判定テーブル305に登録されたレスポンスのうち、レスポンス数が最大値である「3」に達し、かつ、受信フラグが「1」であるレコードを検知する。
[ステップS52]NCスヌープ処理部314は、ステップS51で検知したレコードに登録されたNCレスポンスパケット内の「レスポンスフィールド」を参照する。NCスヌープ処理部314は、参照した「レスポンスフィールド」のビットのうち、NC131aに対応するビットを「1」に書き替える。
[ステップS53]NCスヌープ処理部314は、ステップS52で書き替えを行ったNCレスポンスパケットを、アービタ333を介して、NC131aに隣接する送信先であるNC131bに送信する。
[ステップS54]NCスヌープ処理部314は、ステップS51で検知した、レスポンス送信判定テーブル305内のレコードから、ローカルなトランザクションIDを抽出する。NCスヌープ処理部314は、変換後のトランザクションIDとして、レスポンス送信判定テーブル305から抽出したトランザクションIDと同じ値が登録されたID変換テーブル303内のレコードを削除する。また、NCスヌープ処理部314は、ステップS51で検知した、レスポンス送信判定テーブル305内のレコードを削除する。
以上の図16〜図19で説明した処理によれば、NCスヌープ処理部314は、レスポンス送信判定テーブル305を利用して、NCスヌープパケットを受信してから対応するNCレスポンスパケットを送信するまでの処理を管理する。NCスヌープ処理部314は、レスポンス送信判定テーブル305内のレスポンス数および受信フラグを用いることで、NCスヌープパケットによって指示された処理の完了通知をSB110a内の全ノードから受信し、かつ、対応するNCレスポンスパケットを受信したことを確実に認識できる。従って、データの持ち出し先である全ノードにおける処理結果をNCレスポンスパケットに格納し、ホームノードに対して確実に伝達できるようになる。
以下、図12に戻って説明する。
NCレスポンス処理部315は、NCスヌープ生成部312またはリクエスト受信処理部313がNCスヌープパケットを送信した後、送信されたNCスヌープパケットに応じた処理結果をホームノードに伝達する。これとともに、NCレスポンス処理部315は、NCスヌープ生成部312またはリクエスト受信処理部313がレスポンス受信判定テーブル304に登録したパケットに関連する処理が完了するまでの間、NCスヌープパケットに応じた処理結果を、レスポンス受信判定テーブル304に保持させる。
NCレスポンス処理部315は、NCスヌープ生成部312またはリクエスト受信処理部313がNCスヌープパケットを送信した後、送信されたNCスヌープパケットに応じた処理結果をホームノードに伝達する。これとともに、NCレスポンス処理部315は、NCスヌープ生成部312またはリクエスト受信処理部313がレスポンス受信判定テーブル304に登録したパケットに関連する処理が完了するまでの間、NCスヌープパケットに応じた処理結果を、レスポンス受信判定テーブル304に保持させる。
ここで、図20は、NCレスポンス処理部の構成例およびその動作を示す図である。
NCレスポンス処理部315は、NCレスポンス受信部351、パケット判定部352、レスポンス送信部353、リクエスト送信部354およびスヌープ受信部355を備える。
NCレスポンス処理部315は、NCレスポンス受信部351、パケット判定部352、レスポンス送信部353、リクエスト送信部354およびスヌープ受信部355を備える。
また、前述のように、レスポンス受信判定テーブル304には、NCスヌープ生成部312またはリクエスト受信処理部313によってNCスヌープパケットが送信された場合に、レコードが登録される。NCスヌープ生成部312は、レスポンス受信判定テーブル304のレコードに、NCスヌープパケットを送信するトリガとされたローカルスヌープパケットを登録する。また、リクエスト受信処理部313は、レスポンス受信判定テーブル304のレコードに、NCスヌープパケットを送信するトリガとされたリクエストパケットを登録する。
NCレスポンス受信部351は、他のSB内のNCからNCレスポンスパケットを受信すると、受信したNCレスポンスパケットの「トランザクションID」フィールドに設定された値と同じトランザクションIDが登録されたレコードを、レスポンス受信判定テーブル304から選択する。NCレスポンス受信部351は、選択したレコード内の受信フラグを「1」に書き替え、NCスヌープパケットにより要求された処理が完了したことをレコードに記録する。また、NCレスポンス受信部351は、受信フラグを書き替えたレコードを示すトランザクションIDを、パケット判定部352に通知する。
パケット判定部352は、NCレスポンス受信部351からトランザクションIDの通知を受けると、通知されたトランザクションIDに対応する、レスポンス受信判定テーブル304内のレコードから、「元のパケット」の欄に登録されたパケットを受信する。パケット判定部352は、受信したパケットがローカルスヌープパケットである場合、そのパケットをレスポンス送信部353に送信する。受信したパケットがローカルスヌープパケットである場合とは、図10に示した例のように、同じSBに属するホームノードから送信されたローカルスヌープパケットをトリガとしてNCスヌープパケットが送信された後、送信されたNCスヌープパケットに対応するNCレスポンスパケットが受信された場合である。
一方、パケット判定部352は、レコードから受信したパケットがリクエストパケットである場合、そのパケットをリクエスト送信部354に送信する。受信したパケットがリクエストパケットである場合とは、図6に示した例のように、他のSBのノードから送信されたリクエストパケットをトリガとしてNCスヌープパケットが送信された後、送信されたNCスヌープパケットに対応するNCレスポンスパケットが受信された場合である。
レスポンス送信部353は、パケット判定部352からローカルスヌープパケットを受信すると、受信したローカルスヌープパケットに対応するLSレスポンスパケットを、SB110a内のホームノードに送信する。レスポンス送信部353は、パケット判定部352から受信したローカルスヌープパケット内のアドレスを管理するホームノードのIDを、LSレスポンスパケットの「宛先ID」フィールドに設定する。また、レスポンス送信部353は、パケット判定部352から受信したローカルスヌープパケット内の「リクエスタID」「トランザクションID」「アドレス」の各フィールドの値を、LSレスポンスパケット内の同じフィールドに設定する。さらに、レスポンス送信部353は、パケット判定部352から受信したローカルスヌープパケットの「コマンド」フィールドで指定された処理の完了を通知する値を、LSレスポンスパケット内の「コマンド」フィールドに設定する。
また、LSレスポンスパケットを送信したレスポンス送信部353は、持ち出し管理テーブル302のレコードのうち、送信したLSレスポンスパケットに設定されたアドレスに対応するレコードを更新する。例えば、送信したLSレスポンスパケットの「コマンド」フィールドに「Response_I」が設定される場合、レスポンス送信部353は、レコード内のキャッシュステートをIステートにし、レコードに登録されていた持ち出し先のノードIDを削除する。また、送信したLSレスポンスパケットの「コマンド」フィールドに「Response_S」が設定される場合、レスポンス送信部353は、レコード内のキャッシュステートをSステートにする。これとともに、レスポンス送信部353は、レコードに対し、持ち出し先のノードIDとして、LSレスポンスパケットの「リクエスタID」フィールドの値をローカルIDからグローバルIDに変換した値を書き加える。
さらに、LSレスポンスパケットを送信したレスポンス送信部353は、パケット判定部352から受信したローカルスヌープパケットが登録されたレコードを、レスポンス受信判定テーブル304から削除する。レスポンス送信部353は、例えば、ローカルスヌープパケット内の「トランザクションID」フィールドと、各レコードに登録された元パケット内の「トランザクションID」フィールドとを比較することで、削除するレコードを検索する。
レスポンス送信部353がLSレスポンスパケットを送信することで、NCスヌープ生成部312がレスポンス受信判定テーブル304に登録したローカルスヌープパケットに関するNC131aでの処理は完了する。NCレスポンス受信部351、パケット判定部352およびレスポンス送信部353の処理により、NCスヌープ生成部312がレスポンス受信判定テーブル304に登録したローカルスヌープパケットに関するNC131aでの処理が完了するまでの間、NC131aでの処理に必要な情報がレスポンス受信判定テーブル304に確実に保持されるようになる。
リクエスト送信部354は、パケット判定部352からリクエストパケットを受信すると、SB110a内のホームノードに対してリクエストパケットを送信する。ここで、パケット判定部352から受信したリクエストパケット内の「宛先ID」「リクエスタID」および「トランザクションID」の各フィールドのIDはそれぞれグローバルIDになっているため、リクエスト送信部354は、これらのIDをローカルIDに変換する。リクエスト送信部354は、パケット判定部352から受信したリクエストパケット内の「リクエスタID」フィールドを、NC131aを示すIDに変換するとともに、リクエストパケット内の「宛先ID」および「トランザクションID」の各フィールドの値を、ともにローカルIDに変換する。
リクエスト送信部354は、IDを変換したリクエストパケットをSB110a内のホームノードに送信する。また、リクエスト送信部354は、ID変換テーブル303に新規のレコードを生成し、生成したレコードに、変換前の「トランザクションID」フィールドの値と、変換前の「リクエスタID」および「トランザクションID」の各フィールドの値を登録する。
リクエスト送信部354からのリクエストパケットを受信したホームノードは、NC131aに対してローカルスヌープパケットを送信する。スヌープ受信部355は、ホームノードからのローカルスヌープパケットを受信する。スヌープ受信部355は、ID変換テーブル303のレコードのうち、変換後のIDとして、受信したローカルスヌープパケット内の「トランザクションID」フィールドの値が登録されたレコードを選択する。スヌープ受信部355は、ID変換テーブル303から選択したレコードから、変換前のグローバルなトランザクションIDを抽出する。さらに、スヌープ受信部355は、レスポンス受信判定テーブル304のレコードのうち、ID変換テーブル303から抽出したトランザクションIDが登録されたレコードを選択する。
スヌープ受信部355は、レスポンス受信判定テーブル304から選択したレコードにおいて、受信フラグが「1」であることを確認すると、ホームノードに対してLSレスポンスパケットを送信するとともに、選択したレコードを削除する。スヌープ受信部355は、受信したローカルスヌープパケットの「リクエスタID」および「トランザクションID」の各フィールドに設定された値を、送信するLSレスポンスパケット内の同じフィールドに設定する。
リクエスト受信処理部313がレスポンス受信判定テーブル304に登録したリクエストパケットに関するNC131aでの処理は完了する。NCレスポンス受信部351、パケット判定部352およびレスポンス送信部353の処理により、リクエスト受信処理部313がレスポンス受信判定テーブル304に登録したリクエストパケットに関するNC131aでの処理が完了するまでの間、NC131aでの処理に必要な情報がレスポンス受信判定テーブル304に確実に保持されるようになる。
以下、図12に戻って説明する。
データレスポンス送信部316は、SB110a内のホームノードからデータレスポンスパケットを受信すると、ID変換テーブル303から、変換後のトランザクションIDとして、受信したデータレスポンスパケットの「トランザクションID」フィールドの値が登録されたレコードを選択する。このときデータレスポンス送信部316が選択するレコードは、NCレスポンス処理部315のリクエスト送信部354によって登録されたものである。
データレスポンス送信部316は、SB110a内のホームノードからデータレスポンスパケットを受信すると、ID変換テーブル303から、変換後のトランザクションIDとして、受信したデータレスポンスパケットの「トランザクションID」フィールドの値が登録されたレコードを選択する。このときデータレスポンス送信部316が選択するレコードは、NCレスポンス処理部315のリクエスト送信部354によって登録されたものである。
データレスポンス送信部316は、受信したデータレスポンスパケットの「宛先ID」および「リクエスタID」の各フィールドを、ID変換テーブル303から選択したレコードに登録された、変換前のリクエスタIDに書き替える。また、データレスポンス送信部316は、受信したデータレスポンスパケットの「トランザクションID」フィールドを、ID変換テーブル303から選択したレコードに登録された、変換前のトランザクションIDに書き替える。データレスポンス送信部316は、書き替え後のデータレスポンスパケットを、アービタ334を通じてNC131bに送信するとともに、ID変換テーブル303から選択したレコードを削除する。
さらに、データレスポンス送信部316は、持ち出し管理テーブル302のレコードのうち、送信したデータレスポンスパケットに設定されたアドレスに対応するレコードを更新する。例えば、送信したデータレスポンスパケットの「コマンド」フィールドに「D−Response_E」が設定された場合、データレスポンス送信部316は、レコード内のキャッシュステートをステートEにする。これとともに、データレスポンス送信部316は、レコードに登録された持ち出し先のノードIDを、送信したデータレスポンスパケットの「リクエスタID」フィールドの値に書き替える。また、送信したデータレスポンスパケットの「コマンド」フィールドに「D−Response_S」が設定された場合、データレスポンス送信部316は、レコード内のキャッシュステートをステートSにする。これとともに、データレスポンス送信部316は、レコードに対し、持ち出し先のノードIDとして、送信したデータレスポンスパケットの「リクエスタID」フィールドの値を書き加える。また、送信したデータレスポンスパケットの「コマンド」フィールドに「Complete」が設定された場合、データレスポンス送信部316は、レコード内のキャッシュステートをIステートにする。
宛先判定部325は、他のSB内のNCからデータレスポンスパケットを受信すると、受信したデータレスポンスパケットの「宛先ID」フィールドを参照する。「宛先ID」フィールドにおいてSB110a内のノードが設定されていた場合、宛先判定部325は、受信したデータレスポンスパケット内の「宛先ID」「リクエスタID」「トランザクションID」の各フィールドの値をグローバルIDからローカルIDに書き替える。宛先判定部325は、書き替え後のデータレスポンスパケットを、SB110a内のリクエスタであるノードに送信する。一方、「宛先ID」フィールドにおいてSB110a以外の他のSB内のノードが設定されていた場合、宛先判定部325は、受信したデータレスポンスパケットを、アービタ334を通じてNC131bに転送する。
図21は、NCスヌープパケットを他のNCに送信した後のNCの処理例を示すフローチャートである。この図21では、図6の例のように、SB110bのNC131bが、他のNCからリクエストパケットを受信したことをトリガとしてNCスヌープパケットを送信した場合の処理を示す。
[ステップS71]NC131bのNCレスポンス判定部324は、他のNCからNCレスポンスパケットを受信する。NCレスポンス判定部324は、受信したNCレスポンスパケットの「宛先ID」フィールドがSB110b内のノードを指すことを判定して、受信したレスポンスパケットをNCレスポンス処理部315に送信する。
[ステップS72]NC131bのNCレスポンス処理部315は、受信したNCレスポンスパケットによって通知された、NCスヌープパケットに応じた処理の結果を、レスポンス受信判定テーブル304に登録する。具体的には、NCレスポンス処理部315のNCレスポンス受信部351は、受信したNCレスポンスパケットの「トランザクションID」フィールドに設定された値と同じトランザクションIDが登録されたレコードを、レスポンス受信判定テーブル304から選択する。NCレスポンス受信部351は、選択したレコード内の受信フラグを「1」に書き替えることで、NCスヌープパケットにより要求された処理が完了したことをレコードに記録する。
[ステップS73]NC131bのNCレスポンス処理部315は、SB110b内のホームノードにリクエストパケットを送信する。具体的には、NCレスポンス処理部315のパケット判定部352は、ステップS72で受信フラグが書き替えられた、レスポンス受信判定テーブル304のレコードから、「元のパケット」の欄に登録されたパケットを受信する。パケット判定部352は、レコードから受信したパケットがリクエストパケットであることを認識して、受信したリクエストパケットをリクエスト送信部354に送信する。リクエスト送信部354は、パケット判定部352からリクエストパケットを受信すると、受信したリクエストパケット内の「宛先ID」「リクエスタID」および「トランザクションID」の各フィールドの値をグローバルIDからローカルIDに変換し、ローカルIDに変換されたリクエストパケットをSB110b内のホームノードに送信する。
[ステップS74]リクエスト送信部354は、変換前後のIDを、ID変換テーブル303のレコードに登録する。
NC131bからのリクエストパケットを受信したホームノードは、自身が備える持ち出し管理テーブル202に基づき、受信したリクエストパケットに設定されたアドレスに記憶されたデータが他のSBのノードに持ち出されていると判断して、NC131bに対してローカルスヌープパケットを送信する。
NC131bからのリクエストパケットを受信したホームノードは、自身が備える持ち出し管理テーブル202に基づき、受信したリクエストパケットに設定されたアドレスに記憶されたデータが他のSBのノードに持ち出されていると判断して、NC131bに対してローカルスヌープパケットを送信する。
[ステップS75]NC131bのNCレスポンス処理部315は、ホームノードからのローカルスヌープパケットを受信する。
[ステップS76]NC131bのNCレスポンス処理部315は、データの持ち出し先ノードでの処理結果を格納したLSレスポンスパケットを、NC131b内のホームノードに返信する。具体的には、NCレスポンス処理部315のスヌープ受信部355は、受信したLSレスポンスパケットの「トランザクションID」フィールドの値を、ID変換テーブル303を基にグローバルIDからローカルIDに変換した後、変換後のトランザクションIDに対応するレコードを、レスポンス受信判定テーブル304から選択する。スヌープ受信部355は、レスポンス受信判定テーブル304から選択したレコードにおいて、受信フラグが「1」であることを確認すると、ホームノードに対してLSレスポンスパケットを送信する。
[ステップS76]NC131bのNCレスポンス処理部315は、データの持ち出し先ノードでの処理結果を格納したLSレスポンスパケットを、NC131b内のホームノードに返信する。具体的には、NCレスポンス処理部315のスヌープ受信部355は、受信したLSレスポンスパケットの「トランザクションID」フィールドの値を、ID変換テーブル303を基にグローバルIDからローカルIDに変換した後、変換後のトランザクションIDに対応するレコードを、レスポンス受信判定テーブル304から選択する。スヌープ受信部355は、レスポンス受信判定テーブル304から選択したレコードにおいて、受信フラグが「1」であることを確認すると、ホームノードに対してLSレスポンスパケットを送信する。
[ステップS77]NC131bのNCレスポンス処理部315におけるスヌープ受信部355は、レスポンス受信判定テーブル304から、ステップS76で選択したレコードを削除する。
NC131bからのLSレスポンスパケットを受信したホームノードは、キャッシュコヒーレンシを保たれたと判断して、NC131bに対して、ステップS73で発行されたリクエストパケットに対する応答としてのデータレスポンスパケットを送信する。
[ステップS78]NC131bのデータレスポンス送信部316は、ホームノードから送信されたデータレスポンスパケットを受信する。
[ステップS79]データレスポンス送信部316は、受信したデータレスポンスパケットの「宛先ID」「リクエスタID」「トランザクションID」の各フィールドの値を、ID変換テーブル303に基づいて変換した後、変換後のデータレスポンスパケットをNC131bに送信する。
[ステップS79]データレスポンス送信部316は、受信したデータレスポンスパケットの「宛先ID」「リクエスタID」「トランザクションID」の各フィールドの値を、ID変換テーブル303に基づいて変換した後、変換後のデータレスポンスパケットをNC131bに送信する。
[ステップS80]データレスポンス送信部316は、ステップS79で参照した、ID変換テーブル303のレコードを削除する。
以上説明した第2の実施の形態では、ホームノードに接続したNCは、データの持ち出し先のノードが属するすべてのNCに対して、1つのNCスヌープパケットによって処理の実行を要求することができる。このため、データが複数のノードに持ち出されたときに、ホームノードに接続したNCがデータの持ち出し先のすべてのノードに対して個別にスヌープパケットを送信する場合と比較して、NC間を接続する通信路の伝送負荷を軽減することができる。
以上説明した第2の実施の形態では、ホームノードに接続したNCは、データの持ち出し先のノードが属するすべてのNCに対して、1つのNCスヌープパケットによって処理の実行を要求することができる。このため、データが複数のノードに持ち出されたときに、ホームノードに接続したNCがデータの持ち出し先のすべてのノードに対して個別にスヌープパケットを送信する場合と比較して、NC間を接続する通信路の伝送負荷を軽減することができる。
また、NCスヌープパケットにより要求された処理の完了通知も、データの持ち出し先のすべてのノードから、ホームノードが接続されたNCに対して、1つのNCレスポンスパケットによって送信される。このため、データが複数のノードに持ち出された場合に、処理の完了通知が、持ち出し先のすべてのノードから個別のレスポンスパケットを用いて返信される場合と比較して、NC間を接続する通信路に伝送される完了通知のデータ量を軽減することができる。
なお、上記の第2の実施の形態では、キャッシュ部に対する状態の制御を要求する制御情報をSB間で伝送する場合の例を示したが、他の種類の制御情報をNCスヌープパケットと同様の形式の制御パケットを使用して伝送することもできる。例えば、情報処理システム100内のすべてのノードに対して割り込みを要求するような制御情報を、NCスヌープパケットと同様の形式の制御パケットを使用して伝送することができる。この場合、送信元のNCは、制御パケット内の「ブロードキャストフラグ」において全ビットを「1」とすればよい。制御パケットを受信した、送信元を含むすべてのNCは、NCに接続された全ノードに割り込みの要求をブロードキャストする。これにより、送信元のNCに接続されたノードを含むすべてのノードに対して、割り込みを要求することができる。また、割り込み要求に対するレスポンスパケットは送信されないことから、制御パケット内の「レスポンスフラグ」は初期状態で「0」とされればよい。このような制御パケットを使用することで、NC間の伝送路の負荷を抑制しながら、すべてのノードに対して割り込みを確実に要求できるようになる。
また、上記の第2の実施の形態では、外部のSBにあるデータの持ち出し先ノードに対してコマンドを送信する際にNCスヌープパケットを使用したが、データの持ち出し先ノードが1つのみである場合には、NCスヌープパケットの代わりに、ローカルスヌープパケットと同じ構成のスヌープパケットが使用されてもよい。ここでは、ローカルスヌープパケットと同じ構成の、NC間で伝送されるスヌープパケットを、「個別スヌープパケット」と呼ぶ。
図22は、送信するスヌープパケットを判定する処理を示すフローチャートである。ここでは例として、NCスヌープ処理部314がスヌープパケットを送信する際の処理について説明する。
[ステップS91]NCスヌープ処理部314は、他のSB内のNCに対してNCスヌープパケットを送信すべきであると判定する。NCスヌープパケットを送信すべきと判定する条件は、図12において説明した通りである。
[ステップS92]NCスヌープ処理部314は、持ち出し管理テーブル302に基づき、他のSBにおけるデータの持ち出し先ノードが1つであるかを判定する。データの持ち出し先ノードが複数ある場合には、ステップS93の処理が実行され、データの持ち出し先ノードが1つの場合には、ステップS94の処理が実行される。
[ステップS93]NCスヌープ処理部314は、NCスヌープパケットを送信する。
[ステップS94]NCスヌープ処理部314は、データの持ち出し先ノードのIDを「宛先ID」フィールドに設定した個別スヌープパケットを送信する。
[ステップS94]NCスヌープ処理部314は、データの持ち出し先ノードのIDを「宛先ID」フィールドに設定した個別スヌープパケットを送信する。
なお、ステップS92〜S94の処理は、NCスヌープ生成部312がNCスヌープパケットを送信する際に、NCスヌープ生成部312によって実行されてもよい。
個別スヌープパケットの「宛先ID」フィールドに対応するノードに接続されたNCは、個別スヌープパケットを受信すると、「宛先ID」フィールドが示すノードに対して、ローカルスヌープパケットを送信する。このとき、NCは、受信した個別スヌープパケットにおける「リクエスタID」および「トランザクションID」の各フィールドの値をそれぞれグローバルIDからローカルIDに変換するとともに、「宛先ID」フィールドをNCを示すように変換し、変換後の個別スヌープパケットをローカルスヌープパケットとして送信する。NCは、変換後のローカルIDと変換前のグローバルIDを、ID変換テーブル303に登録する。
個別スヌープパケットの「宛先ID」フィールドに対応するノードに接続されたNCは、個別スヌープパケットを受信すると、「宛先ID」フィールドが示すノードに対して、ローカルスヌープパケットを送信する。このとき、NCは、受信した個別スヌープパケットにおける「リクエスタID」および「トランザクションID」の各フィールドの値をそれぞれグローバルIDからローカルIDに変換するとともに、「宛先ID」フィールドをNCを示すように変換し、変換後の個別スヌープパケットをローカルスヌープパケットとして送信する。NCは、変換後のローカルIDと変換前のグローバルIDを、ID変換テーブル303に登録する。
ローカルスヌープパケットを受信したノードは、「コマンド」フィールドで指示された処理を実行した後、処理が完了したことを示す値を「コマンド」フィールドに設定したLSレスポンスパケットを、自身に接続されたNCに送信する。LSレスポンスパケットを受信したNCは、持ち出し管理テーブル302に基づいて、LSレスポンスパケットの「リクエスタID」および「トランザクションID」の各フィールドの値をローカルIDからグローバルIDに変換するとともに、「宛先ID」フィールドの値を、ホームノードを示すIDに変換する。NCは、IDが変換されたLSレスポンスパケットを、個別レスポンスパケットとして他のNCに送信する。個別スヌープパケットを送信した、ホームノードに接続されたNCは、個別レスポンスパケットを受信することで、処理の完了通知を受ける。
上記の個別スヌープパケットは、「ブロードキャストフラグ」および「レスポンスフラグ」を含まない分だけ、NCスヌープパケットよりデータ量が小さい。このため、他のSBにおけるデータの持ち出し先ノードが1つの場合には、NCスヌープパケットの代わりに個別スヌープパケットを送信することで、SB間に伝送されるデータ量をさらに抑制することができる。
また、個別レスポンスパケットも、「レスポンスフィールド」を含まない分だけ、NCレスポンスパケットよりデータ量が小さい。このため、個別スヌープパケットに対する応答として個別レスポンスパケットを送信することで、SB間に伝送されるデータ量をさらに抑制することができる。
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
1 情報処理システム
10a〜10d 情報処理部
11a〜11d 制御情報送信部
12a〜12d 制御情報受信部
20 制御パケット
21 制御情報
22 送信先情報
10a〜10d 情報処理部
11a〜11d 制御情報送信部
12a〜12d 制御情報受信部
20 制御パケット
21 制御情報
22 送信先情報
Claims (11)
- 複数の情報処理部がリング状通信路によって接続された情報処理システムにおいて、
前記複数の情報処理部のそれぞれは、
キャッシュ部を備える演算処理部と、
前記複数の情報処理部によって共有されるアドレス空間の一部が割り当てられた記憶部と、
制御情報と、当該制御情報の送信先とする1つ以上の情報処理部をそれぞれ指定する宛先情報とを含む制御パケットを、前記リング状通信路に送信する制御情報送信部であって、自身が属する情報処理部内の記憶部に対するアクセス要求対象のデータが他の情報処理部内のキャッシュ部にキャッシュされている場合に、前記アクセス要求対象のデータをキャッシュするキャッシュ部が属する1つ以上の情報処理部を制御情報の送信先として指定した制御パケットを、前記リング状通信路に送信する制御情報送信部と、
前記リング状通信路を介して受信した制御パケットに、制御情報の送信先として自身が属する情報処理部が指定されている場合には、前記受信した制御パケットから制御情報を取り込むとともに、自身が属する情報処理部を制御情報の送信先として指定しないように宛先情報を書き替えた制御パケットを前記リング状通信路に送信し、前記受信した制御パケットに制御情報の送信先として自身が属する情報処理部が指定されていない場合には、前記受信した制御パケットを前記リング状通信路に送信する制御情報受信部と、
を有することを特徴とする情報処理システム。 - 前記制御情報受信部は、前記受信した制御パケット内の宛先情報に、制御情報の送信先として自身が属する情報処理部のみが指定されていた場合には、前記受信した制御パケットを前記リング状通信路に送信しないことを特徴とする請求項1記載の情報処理システム。
- 前記複数の情報処理部のそれぞれは、自身が属する情報処理部の制御情報受信部が受信した制御パケットの送信元を宛先とする応答パケットを前記リング状通信路に送信する応答処理部をさらに有し、
前記制御情報送信部が送信する制御パケットには、制御情報の送信先に指定された情報処理部のうち少なくとも1つにおいて制御情報が受信済みかを示す受信判定情報が含まれ、
前記制御情報受信部は、前記受信した制御パケットに制御情報の送信先として自身が属する情報処理部が指定されていた場合、前記受信した制御パケット内の受信判定情報が未受信を示すときには、自身が属する情報処理部を制御情報の送信先として指定しないように前記受信した制御パケットを書き替えるとともに、当該制御パケットの受信判定情報が受信済みを示すように書き替えた制御パケットを前記リング状通信路に送信し、
前記応答処理部は、自身が属する情報処理部の制御情報受信部が受信した制御パケット内の受信判定情報が未受信を示していた場合に、当該制御パケット内の制御情報に対応する応答情報を格納した応答パケットを生成して前記リング状通信路に送信する、
ことを特徴とする請求項1または2記載の情報処理システム。 - 前記応答処理部は、自身が属する情報処理部の制御情報受信部によって制御パケットから制御情報が取り込まれた後、前記リング状通信路を介して当該制御パケットに対応する応答パケットを受信したとき、前記取り込まれた制御情報に対応する応答情報を付加した応答パケットを、前記リング状通信路に送信することを特徴とする請求項3記載の情報処理システム。
- 前記応答処理部は、自身が属する情報処理部の制御情報受信部が受信した制御パケット内の受信判定情報が受信済みを示していた場合に、前記リング状通信路を介して他の情報処理部の応答処理部から受信した応答パケットに、前記受信した応答パケットに対応する制御パケットから取り込まれた制御情報に対応する応答情報を付加して前記リング状通信路に送信することを特徴とする請求項3または4記載の情報処理システム。
- 前記複数の情報処理部のそれぞれは、演算処理部と記憶部とをそれぞれ備える情報処理ノードを複数有し、
前記制御情報受信部は、前記リング状通信路を介して受信した制御パケットから取り込んだ制御情報を、自身が属する情報処理部内の各情報処理ノードに対してブロードキャストすることを特徴とする請求項1記載の情報処理システム。 - 前記複数の情報処理部のそれぞれは、自身が属する情報処理部の制御情報受信部によってブロードキャストされた制御情報に対する応答情報を、当該情報処理部内のすべての情報処理ノードから受信すると、当該情報処理部の制御情報受信部が受信した制御パケットの送信元を宛先とする応答パケットを、前記リング状通信路に送信する応答処理部をさらに有することを特徴とする請求項6記載の情報処理システム。
- 前記制御情報送信部が送信する制御パケットには、送信先に指定された情報処理部のうち少なくとも1つにおいて制御情報が受信済みかを示す受信判定情報が含まれ、
前記制御情報受信部は、前記受信した制御パケットにおいて制御情報の送信先として自身が属する情報処理部が指定されていた場合、前記受信した制御パケット内の受信判定情報が未受信を示すときには、前記受信した制御パケットを自身が属する情報処理部を制御情報の送信先として指定しないように書き替えるとともに、前記受信した制御パケット内の受信判定情報を受信済みを示すように書き替えた制御パケットを前記リング状通信路に送信し、
前記応答処理部は、自身が属する情報処理部の制御情報受信部が受信した制御パケット内の受信判定情報が未受信を示していた場合に、応答パケットを生成し、当該情報処理部内のすべての情報処理ノードから応答情報を受信すると、受信した応答情報を生成した応答パケットに付加した応答パケットを前記リング状通信路に送信する、
ことを特徴とする請求項7記載の情報処理システム。 - 前記応答処理部は、自身が属する情報処理部の制御情報受信部が受信した制御パケット内の受信判定情報が受信済みを示していた場合、当該情報処理部内のすべての情報処理ノードから応答情報を受信し、かつ、他の情報処理部の応答処理部から前記リング状通信路を介して送信された応答パケットを受信したときに、受信した応答パケットに、前記受信した応答パケットに対応する制御パケットから取り込まれた制御情報に対応する応答情報を付加して前記リング状通信路に送信することを特徴とする請求項8記載の情報処理システム。
- 前記制御情報送信部は、前記アクセス要求対象のデータが、他の情報処理部におけるただ1つのキャッシュ部にキャッシュされている場合、前記アクセス要求対象のデータをキャッシュするキャッシュ部を含む情報処理ノードを宛先とした制御情報を含む個別制御パケットを、前記リング状通信路に送信することを特徴とする請求項1〜9のいずれか1項に記載の情報処理システム。
- 複数の情報処理部がリング状通信路によって接続された情報処理システムにおける情報送信方法であって、
前記複数の情報処理部のそれぞれは、キャッシュ部を備える演算処理部と、前記複数の情報処理部によって共有されるアドレス空間の一部が割り当てられた記憶部とを備え、
前記複数の情報処理部のうちの第1の情報処理部が、制御情報と、当該制御情報の送信先とする1つ以上の情報処理部をそれぞれ指定する宛先情報とを含む制御パケットを、前記リング状通信路に送信し、
前記複数の情報処理部のうちの第2の情報処理部が、前記リング状通信路を介して受信した制御パケットに、制御情報の送信先として自身が指定されている場合には、前記受信した制御パケットから制御情報を取り込むとともに、自身を制御情報の送信先として指定しないように宛先情報を書き替えた制御パケットを前記リング状通信路に送信し、制御情報の送信先として自身が指定されていない場合には、前記受信した制御パケットを前記リング状通信路に送信する、
処理を含み、
前記第1の情報処理部は、当該第1の情報処理部内の記憶部に対するアクセス要求対象のデータが他の情報処理部内のキャッシュ部にキャッシュされている場合に、前記アクセス要求対象のデータをキャッシュするキャッシュ部が属する1つ以上の情報処理部を制御情報の送信先として指定した制御パケットを、前記リング状通信路に送信する、
ことを特徴とする情報送信方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2010/071788 WO2012077169A1 (ja) | 2010-12-06 | 2010-12-06 | 情報処理システムおよび情報送信方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2012077169A1 JPWO2012077169A1 (ja) | 2014-05-19 |
JP5505516B2 true JP5505516B2 (ja) | 2014-05-28 |
Family
ID=46206691
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012547606A Expired - Fee Related JP5505516B2 (ja) | 2010-12-06 | 2010-12-06 | 情報処理システムおよび情報送信方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20130262553A1 (ja) |
EP (1) | EP2650794A1 (ja) |
JP (1) | JP5505516B2 (ja) |
WO (1) | WO2012077169A1 (ja) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150012679A1 (en) * | 2013-07-03 | 2015-01-08 | Iii Holdings 2, Llc | Implementing remote transaction functionalities between data processing nodes of a switched interconnect fabric |
CN103488606B (zh) | 2013-09-10 | 2016-08-17 | 华为技术有限公司 | 基于节点控制器的请求响应方法和装置 |
CN103577382B (zh) * | 2013-10-24 | 2017-01-04 | 华为技术有限公司 | 一种配置节点控制器的方法和装置 |
JP6637906B2 (ja) * | 2014-05-08 | 2020-01-29 | マイクロン テクノロジー,インク. | ハイブリッドメモリキューブシステム相互接続ディレクトリベースキャッシュコヒーレンス方法 |
US20160034191A1 (en) * | 2014-08-01 | 2016-02-04 | Kabushiki Kaisha Toshiba | Grid oriented distributed parallel computing platform |
US20200183836A1 (en) * | 2018-12-10 | 2020-06-11 | International Business Machines Corporation | Metadata for state information of distributed memory |
US11200168B2 (en) | 2018-12-10 | 2021-12-14 | International Business Machines Corporation | Caching data from remote memories |
US11531620B2 (en) * | 2021-03-25 | 2022-12-20 | Arm Limited | Distributed virtual memory management for data processing network |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05189380A (ja) * | 1992-01-14 | 1993-07-30 | Fujitsu Ltd | 共通データ管理方式 |
JPH06314239A (ja) * | 1993-04-28 | 1994-11-08 | Hitachi Ltd | プロセッサシステム |
JPH11134312A (ja) * | 1997-08-22 | 1999-05-21 | Seitai Cho | 分散共有メモリ多重プロセッサシステム |
JP2002522827A (ja) * | 1998-08-06 | 2002-07-23 | インテル・コーポレーション | 多重プロセッサ・コンピュータ・システム用の順序外れスヌーピング |
JP2002533813A (ja) * | 1998-12-21 | 2002-10-08 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | メモリキャンセルメッセージを用いたシステムメモリ帯域幅の節約およびキャッシュコヒーレンシ維持 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5878268A (en) | 1996-07-01 | 1999-03-02 | Sun Microsystems, Inc. | Multiprocessing system configured to store coherency state within multiple subnodes of a processing node |
US6922390B1 (en) * | 1999-06-15 | 2005-07-26 | Nortel Networks Limited | Method and apparatus for forecasting and controlling congestion in a data transport network |
US7076767B1 (en) * | 1999-12-30 | 2006-07-11 | Unisys Corporation | Method for controlling and collecting information in a data processing system |
US7305492B2 (en) * | 2001-07-06 | 2007-12-04 | Juniper Networks, Inc. | Content service aggregation system |
US7239669B2 (en) * | 2002-04-30 | 2007-07-03 | Fulcrum Microsystems, Inc. | Asynchronous system-on-a-chip interconnect |
JP4119380B2 (ja) | 2004-02-19 | 2008-07-16 | 株式会社日立製作所 | マルチプロセッサシステム |
JP4855162B2 (ja) * | 2006-07-14 | 2012-01-18 | 株式会社日立製作所 | パケット転送装置及び通信システム |
JP2009245323A (ja) | 2008-03-31 | 2009-10-22 | Nec Computertechno Ltd | レイテンシ短縮方式及び方法 |
-
2010
- 2010-12-06 WO PCT/JP2010/071788 patent/WO2012077169A1/ja active Application Filing
- 2010-12-06 JP JP2012547606A patent/JP5505516B2/ja not_active Expired - Fee Related
- 2010-12-06 EP EP10860413.3A patent/EP2650794A1/en not_active Withdrawn
-
2013
- 2013-05-28 US US13/903,201 patent/US20130262553A1/en not_active Abandoned
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05189380A (ja) * | 1992-01-14 | 1993-07-30 | Fujitsu Ltd | 共通データ管理方式 |
JPH06314239A (ja) * | 1993-04-28 | 1994-11-08 | Hitachi Ltd | プロセッサシステム |
JPH11134312A (ja) * | 1997-08-22 | 1999-05-21 | Seitai Cho | 分散共有メモリ多重プロセッサシステム |
JP2002522827A (ja) * | 1998-08-06 | 2002-07-23 | インテル・コーポレーション | 多重プロセッサ・コンピュータ・システム用の順序外れスヌーピング |
JP2002533813A (ja) * | 1998-12-21 | 2002-10-08 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | メモリキャンセルメッセージを用いたシステムメモリ帯域幅の節約およびキャッシュコヒーレンシ維持 |
Also Published As
Publication number | Publication date |
---|---|
JPWO2012077169A1 (ja) | 2014-05-19 |
EP2650794A1 (en) | 2013-10-16 |
WO2012077169A1 (ja) | 2012-06-14 |
US20130262553A1 (en) | 2013-10-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5505516B2 (ja) | 情報処理システムおよび情報送信方法 | |
US5900020A (en) | Method and apparatus for maintaining an order of write operations by processors in a multiprocessor computer to maintain memory consistency | |
TWI431475B (zh) | 用於在本地代理者之記憶體鏡像及遷移之裝置、系統及方法 | |
TWI463318B (zh) | 快取一致性處理系統、快取記憶體,及其方法 | |
US7174431B2 (en) | Mechanism for resolving ambiguous invalidates in a computer system | |
JP4928812B2 (ja) | タグ付きキャッシュ状態に基づいて下位レベル・キャッシュへの参照なしに相互接続ファブリック上にリクエストを送出するためのデータ処理システム、キャッシュ・システム、および方法 | |
US8176259B2 (en) | System and method for resolving transactions in a cache coherency protocol | |
CN1729458B (zh) | 状态转发方法 | |
US5802578A (en) | Multinode computer system with cache for combined tags | |
CN101802796B (zh) | 防止多核处理器中的写回竞争 | |
US7395375B2 (en) | Prefetch miss indicator for cache coherence directory misses on external caches | |
US7003635B2 (en) | Generalized active inheritance consistency mechanism having linked writes | |
US7502893B2 (en) | System and method for reporting cache coherency state retained within a cache hierarchy of a processing node | |
US10592459B2 (en) | Method and system for ordering I/O access in a multi-node environment | |
JP2000227908A (ja) | 共用介入サポ―トを有する不均等メモリ・アクセス(numa)デ―タ処理システム | |
CZ20012153A3 (cs) | Elektronický deník s ověřením pro prodejní místo a způsoby jeho použití | |
TWI386810B (zh) | 多處理器系統以目錄為主之資料傳輸協定 | |
US20080320234A1 (en) | Information processing apparatus and data transfer method | |
US6874065B1 (en) | Cache-flushing engine for distributed shared memory multi-processor computer systems | |
CN112955876B (zh) | 用于在数据处理网络中传输数据的方法和装置 | |
US7149852B2 (en) | System and method for blocking data responses | |
CN108415861B (zh) | 用于缓存内容管理的装置和方法 | |
US8145847B2 (en) | Cache coherency protocol with ordering points | |
US6678800B1 (en) | Cache apparatus and control method having writable modified state | |
US7620696B2 (en) | System and method for conflict responses in a cache coherency protocol |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20140218 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20140303 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5505516 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |