JP2014160502A - 情報処理装置およびメモリアクセス方法 - Google Patents

情報処理装置およびメモリアクセス方法 Download PDF

Info

Publication number
JP2014160502A
JP2014160502A JP2014093197A JP2014093197A JP2014160502A JP 2014160502 A JP2014160502 A JP 2014160502A JP 2014093197 A JP2014093197 A JP 2014093197A JP 2014093197 A JP2014093197 A JP 2014093197A JP 2014160502 A JP2014160502 A JP 2014160502A
Authority
JP
Japan
Prior art keywords
cpu
node
physical address
address
processor
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.)
Pending
Application number
JP2014093197A
Other languages
English (en)
Inventor
Hideyuki Koinuma
秀之 鯉沼
Masayuki Okada
誠之 岡田
Takeshi Sugizaki
剛 杉崎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014093197A priority Critical patent/JP2014160502A/ja
Publication of JP2014160502A publication Critical patent/JP2014160502A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】それぞれがプロセッサ及び記憶装置を備える複数のノード間における効率的なメモリアクセスを行うことが可能な情報処理装置およびメモリアクセス方法を提供する。
【解決手段】情報処理システムが有する複数のCPU21は、論理アドレスと物理アドレスとの変換を行うアドレス変換部35を有する。また、各CPU21は、物理アドレスと各ノードのCPU21を識別するCPUIDとの変換を行うノードマップ34を有する。また、各CPU21は、論理アドレスから変換された物理アドレスと、物理アドレスから変換されたCPUIDを含む転送データをXB2を介して送信する。また、各CPU21は、XB2を介して転送データを受信すると、転送データに含まれる物理アドレスに基づいて、自身がアクセスするメモリ22のローカル領域と共有領域のいずれの領域へのアクセスであるか判定する。
【選択図】図7

Description

本発明は、情報処理装置およびメモリアクセス方法に関する。
従来、複数の演算処理装置が主記憶装置を共有するSMP(Symmetric MultiProcessor)の技術が知られている。このようなSMPの技術が適用された情報処理システムの一例として、演算処理装置と主記憶装置とを有する複数のノードを同一のバスで接続し、バスを介して、各演算処理装置が各主記憶装置を共有する情報処理システムが知られている。
このような情報処理システムでは、例えばスヌープ方式を用いて、各ノードの演算処理装置がキャッシュしたデータのコヒーレンシを保持する。しかし、スヌープ方式では、各演算処理装置がキャッシュしたデータの更新状況をバスを介してやり取りするので、ノード数が増加するに従って、バスがボトルネックとなり、メモリアクセスの性能が悪化する。
このようなバスのボトルネックを回避するため、インターコネクトを用いて、複数のノードを接続し、各ノードの演算処理装置が各ノードの主記憶装置を共有するNUMA(Non Uniform Memory Access)の技術が知られている。
このようなNUMAの技術が適用された情報処理システムでは、各ノードの主記憶装置の記憶領域が共通の物理アドレス空間に対して一意にマップされる。そして、各ノードの演算装置は、アクセス対象の物理アドレスが示す記憶領域が存在するノードを識別し、インターコネクトを介して、識別したノードの主記憶装置にアクセスする。
特開2000−235558号公報
Computer Architecture: A Quantitative Approach, Second Edition , John L. Hennessy ,David A. Patterson ,§8.4
ここで、上述したNUMAの技術では、各ノードの演算処理装置がキャッシュしたデータのコヒーレンシを保つことができない。そこで、各ノードの演算処理装置がキャッシュしたデータのコヒーレンシを保つ機構を備えるccNUMA(Cache Coherent NUMA)を採用することが考えられる。
しかしながら、ccNUMAを適用した情報処理システムでは、各ノードがアクセス対象となる記憶領域が存在するノードを識別するので、アドレス変換を効率良く行う必要がある。また、各ノードは、主記憶装置を自ノードのみが利用する記憶領域と、他ノードと共用する記憶領域とに分割する場合がある。このような場合には、各ノードは、アクセス対象記憶領域が、他のノードと共用する記憶領域であるかを効率良く行う必要がある。
本発明は、1つの側面では、各演算処理装置によるメモリアクセスを効率的に行うことができる。
1つの側面では、それぞれがプロセッサ及び記憶装置を備える複数のノードと、各ノード間を接続するインターコネクトとを有する情報処理装置である。このような情報処理装置が有する前記複数のノードは、それぞれが同一のプログラムを動作させる論理パーティションを形成する複数のノード群として動作し、前記ノードの各々は、前記ノードを含むノード群が形成する論理パーティションに含まれるプロセッサを識別するプロセッサ識別情報と、当該プロセッサ識別情報が示すプロセッサを備えるノードの記憶装置に割当てられた物理アドレスとを対応付けて記憶する記憶部と、論理アドレスと物理アドレスとの変換を行う第1変換部と、物理アドレスを、前記記憶部に当該物理アドレスと対応付けて記憶されたプロセッサ識別情報に変換する第2変換部と、前記物理アドレス及び前記プロセッサ識別情報を含む転送データを送信する送信部と、を有することを特徴とする。
1実施形態によれば、各演算処理装置によるメモリアクセスを効率的に行うことができる。
図1は、実施例1に係る情報処理システムの一例を説明するための図である。 図2は、実施例1に係るビルディングブロックの機能構成を説明するための図である。 図3は、実施例1に係るビルディングブロックのメモリに振り分けられる物理アドレスの範囲を説明するための図である。 図4は、実施例1に係る情報処理システムが各メモリに振り分ける物理アドレスを説明するための図である。 図5は、物理アドレスの振り分けのバリエーションを説明するための第1の図である。 図6は、物理アドレスの振り分けのバリエーションを説明するための第2の図である。 図7は、実施例1に係るCPUの機能構成を説明するための図である。 図8は、実施例1に係るノードマップが記憶する情報の一例を説明するための図である。 図9は、ノードマップが記憶する情報のバリエーションの一例を説明するための第1の図である。 図10は、ノードマップが記憶する情報のバリエーションの一例を説明するための第2の図である。 図11Aは、キャッシュタグの一例を説明するための図である。 図11Bは、実施例1に係るCPUが送信するパケットを説明するための図である。 図12は、実施例1に係るCPUがリクエストを送信する処理の一例を説明するための図である。 図13は、実施例1に係るCPUがパケットを受信した際に実行する処理の一例を説明するための図である。 図14は、ノードマップを設定する処理の流れを説明するためのフローチャートである。 図15は、共有領域を制御する処理の流れを説明するためのフローチャートである。 図16は、共有メモリの割当処理を説明するためのフローチャートである。 図17は、共有メモリアタッチ処理を説明するためのフローチャートである。 図18は、アプリケーションが共有メモリを使用する処理を説明するためのフローチャートである。 図19は、ノード間の共有メモリデタッチ処理を説明するためのフローチャートである。 図20は、ノード間共有メモリの解放処理を説明するためのフローチャートである。 図21は、リクエストを発行する処理の流れを説明するためのフローチャートである。 図22は、リクエストを受信した際に実行する処理の流れを説明するためのフローチャートである。 図23は、CPUが応答を受信した際に実行する処理の流れを説明するためのフローチャートである。 図24は、実施例2に係る情報処理システムを説明するための図である。 図25は、パーティションの一例を説明するための図である。 図26Aは、パーティション#AのCPUが記憶するノードマップの一例を説明するための図である。 図26Bは、パーティション#Aを示すノードマップの一例を説明するための図である。 図26Cは、パーティション#Bを示すノードマップの一例を説明するための図である。
以下に添付図面を参照して本願に係る情報処理装置及びメモリアクセス方法について説明する。
まず、本願に係る実施例の説明の前に、従来の情報処理システムが有する問題の具体例について説明する。例えば、従来の情報処理システムは、CPU(Central Processing Unit)が共有メモリ領域にアクセスするために出力した論理アドレスを共有メモリ空間アドレスに変換する。そして、情報処理システムは、共有メモリ空間をアドレスを物理アドレスに変換することで、CPUのアクセス対象となる記憶領域を識別する。
しかし、このように論理アドレスを共有メモリ空間アドレスに変換し、変換後の共有メモリ空間アドレスを物理アドレスに変換する手法では、アドレス変換に要するハードウェアの物量が多くなってしまう。また、論理アドレスを共有メモリ空間アドレスに変換し、変換後の共有メモリ空間アドレスを物理アドレスに変換する手法では、アドレス変換に要する時間が増加してしまう。
また、従来の情報処理システムは、CPUが共有メモリ空間のデータをキャッシュする際に、全てのCPUに対してキャッシュ情報を送信することで、コヒーレンシを保持する。しかし、このように、全てのCPUに対してキャッシュ情報を送信する手法では、ボトルネックが発生し、メモリアクセスの性能が悪化してしまう。また、従来の情報処理システムは、CPUの増設を行った場合は、CPUの個数の増加に比例してバストラフィックが増加するので、ボトルネックが発生し、メモリアクセスの性能が悪化してしまう。
また、例えば、ノードは、自ノードのみがアクセスするローカル領域にカーネルデータやユーザデータを格納する。このため、各ノードは、ローカル領域に格納したデータのセキュリティを確保し、ソフトウェアバグに対する耐性を高くするため、アクセス対象となる記憶領域が他ノードからアクセス可能である共有メモリ域かアクセス不能なローカルメモリ域かの判断を要する。
このため、従来の情報処理システムにおいては、ローカル領域に記憶されたデータはキャッシュ可能とし、共有領域に記憶されたデータはキャッシュ不能とする。しかし、このように共有領域に記憶されたデータをキャッシュ不能とする手法では、メモリアクセスにおけるレイテンシが増大してしまう。なお、他のノードからメモリアクセスが行われる度にアクセス対象が共有領域であるかローカル領域であるかを判断する場合には、判断を行うための回路規模が増大するとともに、アクセスにおけるレイテンシが増大してしまう。
また、従来の情報処理システムにおいては、ノードは、他のノードが有するメモリにアクセスする度に、特殊なチャネル装置やDMA(Direct Memory Access)エンジンのプログラムの実行を要するため、メモリアクセスの性能が劣化してしまう。また、従来の情報処理システムでは、メモリが有する記憶領域のどの領域を共有領域とするかを固定的に設定する。このため、例えば、従来の情報処理システムでは、システムを停止させることなく、ノードを追加することで共有領域を追加することができない。
また、従来の情報処理システムにおいては、チャネルやDMA経路を介したメモリアクセスを行うためのハードウェアが追加される。このため、従来の情報処理システムにおいては、ノード間でメモリを共有しないシステムと比較して、設置されるハードウェアが大きく異なる。この結果、従来の情報処理システムにおいては、ノード間でメモリを共有する場合には、OS(Operating System)等のプログラムを大幅に変更しなければならない。
以下の説明では、実施例1として、上述した問題を解決する情報処理システムの一例について説明する。まず、図1を用いて、情報処理システムの構成例について説明する。図1は、実施例1に係る情報処理システムの一例を説明するための図である。図1に示す例では、情報処理システム1は、XB(クロスバスイッチ)2と複数のビルディングブロック10〜10eとを有する。また、各ビルディングブロック10〜10eは、管理用ネットワークを介して管理端末3と接続されている。また、XB2は、サービスプロセッサ2bを有する。
ビルディングブロック10は、複数のCPU21〜21cと複数のメモリ22〜22cとサービスプロセッサ24とを有する。また、他のビルディングブロック10〜10eも、ビルディングブロック10と同様の構成を有するものとし、以下の説明を省略する。なお、図1に示す例では、CPU21b、21bおよびメモリ22b、22cについては、記載を省略した。
XB2は、各ビルディングブロック10〜10eを相互に接続するクロスバスイッチである。また、XB2が有するサービスプロセッサ2bは、各ビルディングブロック10〜10eが有するサービスプロセッサを管理するサービスプロセッサ、すなわち、マスタとなるサービスプロセッサである。また、管理端末3は、管理用ネットワークを介して、各ビルディングブロック10〜10eが有するサービスプロセッサの設定や制御を行う端末である。なお、少数のノードが接続される小規模構成の場合、XB2を介さずにビルディングブロック同士を直接接続してもよい。
各ビルディングブロック10〜10eは、それぞれ独立してOSを動作させる。すなわち、各ビルディングブロック10〜10eが実行するOSは、ビルディングブロック毎に異なるパーティションで動作する。ここで、パーティションとは、同一のOSが動作し、動作しているOSから見て1つのシステムとして動作するビルディングブロックの群を示す。
例えば、ビルディングブロック10〜10aがパーティション#Aとして動作し、ビルディングブロック10b〜10dがパーティション#Bとして動作する。このような場合には、ビルディングブロック10が動作させるOSは、ビルディングブロック10、10aが1つのシステムとして動作していると識別し、ビルディングブロック10bが動作させるOSは、ビルディングブロック10b〜10dが1つのシステムとして動作していると識別する。
次に、図2を用いて、ビルディングブロックの構成例について説明する。図2は、実施例1に係るビルディングブロックの機能構成を説明するための図である。図2に示す例では、ビルディングブロック10は、ノード20、サービスプロセッサ24、XB接続部27、27a、PCIe(Peripheral Component Interconnect Express)接続部28を有する。
また、ノード20は、複数のCPU21〜21cと複数のメモリ22〜22cと通信部23とを有する。また、サービスプロセッサ24は、制御部25と通信部26とを有する。また、図2に示す例では、各CPU21〜21cは、相互に直接接続されるとともに、通信部23と接続されている。また、各メモリ22〜22cは、各CPU21〜21cと接続されている。
また、各CPU21〜21cは、XB接続部27またはXB接続部27aと接続されている。なお、XB接続部27、27aは、同一のXB接続部であってもよい。また、各CPU21〜21cは、PCIe接続部28と接続されている。また、通信部23は、サービスプロセッサ24が有する通信部26と接続されている。なお、制御部25、通信部26、通信部23、各CPU21〜21cは、例えば、JTAG(Joint Test Action Group)やI2C(Inter-Integrated Circuit)で接続されている。
例えば、図2に示す例では、CPU21〜21cは、演算処理を実行する演算処理装置である。また、各CPU21〜21cには、それぞれ独立したメモリ22〜22cが接続されている。また、各CPU21〜21cは、メモリ22〜22cや、他のビルディングブロック10a〜10eが有するメモリを共有メモリとして利用する。また、各CPU21〜21cは、後述するように、物理アドレスと、物理アドレスが割り振られたメモリと接続されたCPUの識別子であるCPUID(identification)とを対応付けたノードマップを有する。
そして、例えば、CPU21は、アクセス対象となる物理アドレスと対応付けられたCPUIDが、ノード20とは異なるノードが有するCPUを示す場合には、XB接続部27およびXB2を介して他のノードにメモリアクセスのリクエストを送信する。また、CPU21は、アクセス対象となる物理アドレスと対応付けられたCPUIDが、CPU21a〜21cを示す場合には、CPU間の直接接続を介して、メモリアクセスのリクエストを送信する。すなわち、CPU21は、アクセス対象となる物理アドレスと対応付けられたCPUIDが、CPU21以外のCPUであって、自身と同じノード20に存在するCPUを示す場合には、CPU間の直接接続を介して、メモリアクセスのリクエストを送信する。
また、CPU21は、自身と接続されたメモリに対するリクエストを他のノードから受信した場合には、リクエストの対象となるデータを自身と接続されたメモリ22から読出し、リクエスト元へ送信する。
なお、各CPU21〜21cは、実行中のアプリケーションが共有メモリの割り当てを要求した場合には、相互に通信を行い、アプリケーションが使用する共有メモリの割当てを行う機能を有する。また、各CPU21〜21cは、TLBを用いたアドレス変換を行うとともに、TLBミスが発生した際に、トラップ処理を実行するなど、従来のCPUと同様の処理を実行する機能を有するものとする。
メモリ22〜22cは、情報処理システム1が有する全てのCPUが共用するメモリである。また、情報処理システム1においては、全てのビルディングブロック10〜10eが有するメモリに対して、各ビルディングブロック10〜10eのサービスプロセッサが、同一の物理アドレス空間にマッピングされる物理アドレスを振分ける。すなわち、情報処理システム1が有する全てのメモリには、重複しない値の物理アドレスが割当てられている。
また、メモリ22〜22cは、記憶領域の一部を、情報処理システム1が有する全てのCPUが共用する共有領域とし、他の部分を、自身にアクセスするCPU21〜21cがカーネルデータやユーザデータを格納するローカル領域とする。また、メモリ22〜22cには、情報処理システム1が用いる物理アドレス空間のうち、ある位置のビットが同一の値となる範囲の物理アドレスが有領域に振り分けられる。また、メモリ22〜22cには、ある位置のビットが共有領域に振り分けた物理アドレスとは異なる値となる範囲の物理アドレスがーカル領域に振り分けられる。
例えば、メモリ22〜22cには、46ビット目のビットが「0」となる物理アドレスがローカル領域に振り分けられ、46ビット目のビットが「1」となる物理アドレスが共有領域に振り分けられる。詳細な例を挙げると、メモリ22〜22cのローカル領域に対しては、物理アドレス空間のうち、「0」〜「0x63ff ffff ffff」に含まれる物理アドレスが振り分けられる。また、メモリ22〜22cの共有領域に対しては、物理アドレス空間のうち、「0x6400 000 0000」〜「0x1 27ff ffff ffff」に含まれる物理アドレスが振り分けられる。
なお、情報処理システム1においては、各ビルディングブロック10〜10gごとに、異なる範囲に含まれる物理アドレスをメモリに振り分ける。以下、図面を用いて、情報処理システム1において、各ビルディングブロック10〜10eごとに、メモリに振り分ける物理アドレスの範囲を説明する。
図3は、実施例1に係るビルディングブロックのメモリに振り分けられる物理アドレスの範囲を説明するための図である。なお、図3に示す例では、各ビルディングブロックをBB(Bilding Block)と記載した。また、BB#0とは、ビルディングブロック10を示し、BB#1とは、ビルディングブロック10aを示し、BB#15とは、ビルディングブロック10eを示す。すなわち、図3に示す例では、情報処理システム1は、16個のビルディングブロックを有するものとする。
また、図3に示す例では、各ビルディングブロックには、最大で4TB(Terabyte)のメモリを搭載可能であるものとする。また、以下の説明においては、メモリアドレスの表記を簡易化するため、例えば「242」となるアドレス番地を「4TB」と記載する。
図3に示す例では、ビルディングブロック10が有するメモリ22〜22cにおいては、物理アドレス空間のうち、「0」〜「4TB−1」までの範囲に含まれる物理アドレスがローカル領域に振り分けられる。また、ビルディングブロック10が有するメモリ22〜22cにおいては、物理アドレス空間のうち、「64TB」〜「68TB−1」までの範囲に含まれる物理アドレスが共有領域に振り分けられる。
また、ビルディングブロック10aが有するメモリにおいては、物理アドレス空間のうち、「4TB」〜「8TB−1」までの範囲に含まれる物理アドレスがローカル領域に振り分けられる。また、ビルディングブロック10aが有するメモリにおいては、物理アドレス空間のうち、「68TB」〜「72TB−1」までの範囲に含まれる物理アドレスが共有領域に振り分けられる。
また、ビルディングブロック10eが有するメモリにおいては、物理アドレス空間のうち、「60TB」〜「64TB−1」までの範囲に含まれる物理アドレスがローカル領域に振り分けられる。また、ビルディングブロック10aが有するメモリにおいては、物理アドレス空間のうち、「124B」〜「128TB−1」までの範囲に含まれる物理アドレスが共有領域に振り分けられる。
この結果、情報処理システム1は、図4に示すように、物理アドレス空間を各ビルディングブロック10〜10eが有する全てのメモリに対して振り分けることとなる。図4は、実施例1に係る情報処理システムが各メモリに振り分ける物理アドレスを説明するための図である。
具体的には、図4に示す例では、情報処理システム1は、「0」〜「256TB−1」までの物理アドレスのうち、「0」〜「64TB−1」までの範囲をローカル領域に振り分ける物理アドレスとする。また、情報処理システム1は、「64TB」〜「128TB−1」までの範囲を共有領域に振り分ける物理アドレスとする。
すなわち、情報処理システム1は、最下位のビットを0ビット目として46ビット目のビットが「0」の範囲をローカル領域に振り分け、「1」の範囲を共有領域に振り分ける。なお、情報処理システム1は、「128TB」〜「256TB−1」までの範囲をI/O空間として用いる。
なお、図3、4に示す例は、あくまで一例であり、情報処理システム1は、異なる振り分け方を採用してもよい。以下、情報処理システム1が、物理アドレスを振り分けるバリエーションの例について図を用いて説明する。
図5は、物理アドレスの振り分けのバリエーションを説明するための第1の図である。図5に示す例では、各ビルディングブロック10〜10eが有するメモリにおいては、「0」〜「4TB−1」までの範囲に含まれる物理アドレスがローカル領域に振り分けられる。また、図5に示す例では、ビルディングブロック10が有するメモリ22においては、「4TB」〜「8TB−1」までの範囲に含まれる物理アドレスが共有領域に振り分けられる。
また、図5に示す例では、ビルディングブロック10aが有するメモリにおいては、「8TB」〜「12TB−1」までの範囲に含まれる物理アドレスが共有領域に振り分けられる。また、図5に示す例では、ビルディングブロック10eが有するメモリにおいては、「64TB」〜「68TB−1」までの範囲に含まれる物理アドレスが共有領域に振り分けられる。
この結果、図5に示す例では、情報処理システム1は、物理アドレス空間のうち、「0」〜「4TB−1」までの範囲の物理アドレスをローカル領域に振り分け、「4TB」〜「128TB−1」までの範囲の物理アドレスを共有領域に振り分ける。また、図5に示す例では、情報処理システム1は、「128TB」〜「256TB−1」までの範囲をI/O空間として用いる。すなわち、情報処理システム1は、最下位のビットを0ビット目として42ビット目のビットが「0」の範囲をローカル領域に振り分け、「1」の範囲を共有領域に振り分ける。
また図6は、物理アドレスの振り分けのバリエーションを説明するための第2の図である。図6に示す例では、各ビルディングブロック10〜10eが有するメモリにおいては、「0」〜「4TB−1」までの範囲に含まれる物理アドレスがI/O空間用に保存される。また、図6に示す例では、各ビルディングブロック10〜10eが有するメモリにおいては、「4TB」〜「8TB−1」までの範囲に含まれる物理アドレスがローカル領域に振り分けられる。
また、図6に示す例では、ビルディングブロック10が有するメモリ22〜22cにおいては、「8TB」〜「12TB−1」までの範囲に含まれる物理アドレスが共有領域に振り分けられる。また、図6に示す例では、ビルディングブロック10aが有するメモリにおいては、「12TB」〜「16TB−1」までの範囲に含まれる物理アドレスが共有領域に振り分けられる。また、図6に示す例では、ビルディングブロック10eが有するメモリにおいては、「68TB」〜「72TB−1」までの範囲に含まれる物理アドレスが共有領域に振り分けられる。
この結果、図6に示す例では、情報処理システム1は、物理アドレス空間のうち、「0」〜「4TB−1」までの範囲をI/O空間とし、「4TB」〜「8TB−1」までの範囲の物理アドレスをローカル領域に振り分けることとなる。また、図5に示す例では、情報処理システム1は、「8TB」〜「256TB−1」までの範囲の物理アドレスを共有領域に振り分けることとなる。すなわち、情報処理システム1は、最下位のビットを0ビット目として43ビット目のビットが「0」の範囲をローカル領域に振り分け、「1」の範囲を共有領域に振り分ける。
図2に戻って、制御部25は、ビルディングブロック10の制御を行う。例えば、制御部25は、ビルディングブロック10の電源管理や、ビルディングブロック10内の異常の監視や制御等を実行する。また、制御部25は、管理用ネットワークを介して、管理端末3や他のビルディングブロック10〜10eが有するサービスプロセッサの制御部とも接続されており、管理端末3によって指示された制御や、各ビルディングブロック10〜10e間で連係した制御を実行できる。また、制御部25は、各CPU21〜21cが実行するOSと通信を行うことができる。
なお、実施例1では、各ビルディングブロック10〜10eが有するサービスプロセッサは、管理用ネットワークを介して接続されているが、実施例はこれに限定されるものではない。たとえば、各ビルディングブロック10〜10eを接続するXBを介して相互に通信しても良い。
また、制御部25は、通信部26と通信部23を介して、各CPU21〜21cにアクセスする。そして、制御部25は、後述するように、各ビルディングブロック10〜10eが有するノードマップの更新や制御等を実行する。
なお、通信部23は、サービスプロセッサ24が有する通信部26を介して、制御部25による制御信号を各CPU21〜21cに伝達する。また、通信部26は、制御部25による制御信号をノード20が有する通信部23に伝達する。また、XB接続部27、27aは、各CPU21〜21cをXB2と接続し、各ビルディングブロック10〜10eが有するCPU間の通信を中継する。また、PCIe接続部28は、各CPU21〜21cによるI/O(Input Output)装置へのアクセスを中継する。
次に、図7を用いて、各CPU21〜21cが有する機能構成について説明する。図7は、実施例1に係るCPUの機能構成を説明するための図である。なお、CPU21a〜21cは、CPU21と同様の機能を発揮するものとして、説明を省略する。また、図7に示す例では、サービスプロセッサ24とCPU21とを接続する接続部23、26については、記載を省略した。
図7に示す例では、CPU21は、演算処理部30、ルータ40、メモリアクセス部41、PCIe制御部42を有する。また、演算処理部30は、演算部31、L1(Level 1)キャッシュ32、L2キャッシュ33、ノードマップ34、アドレス変換部35、キャッシュディレクトリ管理部36、パケット制御部37を有する。また、パケット制御部37は、リクエスト生成部38、リクエスト受信部39を有する。また、PCIe制御部42は、リクエスト生成部43、PCIeバス制御部44を有する。
まず、演算処理部30が有するノードマップ34について説明する。ノードマップ34は、物理アドレスと、物理アドレスが示す記憶領域を有するメモリと接続されたCPUのCPUIDとを対応付けて記憶する。以下、ノードマップ34が記憶する情報の例を図面を用いて説明する。
図8は、実施例1に係るノードマップが記憶する情報の一例を説明するための図である。図8に示す例では、ノードマップ34は、アドレス、バリッド、ノードID、CPUIDとを対応付けたエントリを記憶する。ここで、各エントリのアドレスには、連続する複数の物理アドレスを含むアドレス域を示す情報が格納される。
例えば、情報処理システム1は、全てのメモリに対して振り分けた物理アドレス空間を均等な大きさのアドレス域に分割し、各アドレス域に#0、#1、#2等の識別子を付与する。そして、情報処理システム1は、各アドレス域を示す識別子を、ノードマップ34が有する各エントリのアドレスに格納する。
また、各エントリのバリッドには、物理アドレスが示す記憶領域にアクセスすることができるか否かを示すバリッドビットが格納される。例えば、物理アドレスが示す記憶領域が、各CPUで共有される共有領域である場合には、アクセスを行う事ができる旨のバリッドビット(例えば「1」)が格納される。
また、ノードIDとは、物理アドレスが振り分けられたメモリが存在するノードを示す識別子である。また、CPUIDとは、物理アドレスが振り分けられたメモリと接続されたCPUを示す識別子である。すなわち、ノードマップ34は、アクセス対象となる物理アドレスが、どのCPUと接続されたメモリの物理アドレスであるかを示す情報を記憶する。
例えば、図8に示す例では、ノードマップ34は、識別子が「#0」のアドレス域が、ノードID「0」で示されるノードに存在し、CPUIDが「0」のCPUがアクセスを行う旨を示す。また、ノードマップ34は、識別子が「#1」のアドレス域が、ノードID「0」で示されるノードに存在し、CPUIDが「1」のCPUがアクセスを行う旨を示す。また、ノードマップ34は、識別子が「#2」のアドレス域が、CPU21がアクセスを行わない、又は、マッピングされていないアドレス域であるため、ノードIDとCPUIDとが設定されていない旨を示す。
なお、ノードマップ34は、アクセス対象となる物理アドレスがどのCPUと接続された物理アドレスであるかを示すことができれば、本実施例以外の任意の形式で情報を登録することとしてよい。以下、ノードマップ34のバリエーションの例について、図9および図10を用いて説明する。
図9は、ノードマップが記憶する情報のバリエーションの一例を説明するための第1の図である。図9に示す例では、ノードマップ34は、バリッド、スタートアドレス、アドレスマスク、ノードID、CPUIDを対応付けてエントリを記憶する。ここで、スタートアドレスとは、アドレス域に含まれる物理アドレスのうち、最若番の物理アドレスが格納される。
また、アドレスマスクには、CPUが管理する物理アドレスの範囲を示すアドレスマスクが格納される。例えば、あるエントリは、アドレスマスクが「0xffff ffff ffff 0000」である場合には、同一エントリのスタートアドレスと上位48ビットが一致するアドレス領域を、同一エントリのCPUIDが示すCPUが管理することを示す。
例えば、図9に示す例では、ノードマップ34は、最初のエントリとして、アドレス「0x00000」からアドレスマスク「0x3fff」でマスクされる範囲、すなわち「0x03fff」までの範囲が1つのアドレス域である旨を示す。また、ノード34は、「0x00000」から「0x03fff」のアドレス域が、ノードID「0」で示されるノードに存在し、CPUIDが「0」のCPUがアクセスするアドレス域である旨を示す。
同様に、ノードマップ34は、「0x10000」から「0x13fff」のアドレス域が、ノードID「1」で示されるノードに存在し、CPUIDが「4」のCPUがアクセスするアドレス域である旨を示す。また、ノードマップ34は、「0x14000」から「0x17fff」のアドレス域が、ノードID「1」で示されるノードに存在し、CPUIDが「5」のCPUがアクセスするアドレス域である旨を示す。また、ノードマップ34は、「0x20000」から「0x21fff」のアドレス域が、ノードID「2」で示されるノードに存在し、CPUIDが「8」のCPUがアクセスするアドレス域である旨を示す。
なお、ノードマップ34は、図9に示すように、アドレス域をスタートアドレスとアドレスマスクとで表現した場合には、物理アドレスが各アドレス域に含まれるか否かを論理和と論理積の組合せで実行することができるため、回路構成が容易となる。
また、図10は、ノードマップが記憶する情報のバリエーションの一例を説明するための第2の図である。図10に示す例では、ノードマップ34は、バリッド、スタートアドレス、レングス、ノードID、CPUIDを対応付けたエントリを記憶する。ここで、レングスとは、アドレス域の大きさを設定する情報である。
例えば、スタートアドレスが「0x12 0000」で、レングスが「0x1 ffff」とすると、同一エントリのCPUIDが示すCPUは、管理するメモリに対して、物理アドレス「0x12 0000」から「0x13 ffff」を割当てることとなる。
例えば、図10に示す例では、ノードマップ34は、最初のエントリとして、アドレス「0x00000」からレングスが「0x3fff」に含まれる範囲、すなわち「0x03fff」までの範囲が1つのアドレス域である旨を示す。また、ノード34は、「0x00000」から「0x03fff」のアドレス域が、ノードID「0」で示されるノードに存在し、CPUIDが「0」のCPUがアクセスするアドレス域である旨を示す。
同様に、ノードマップ34は、「0x10000」から「0x13fff」のアドレス域が、ノードID「1」で示されるノードに存在し、CPUIDが「4」のCPUがアクセスするアドレス域である旨を示す。また、ノードマップ34は、「0x14000」から「0x17ff」のアドレス域が、ノードID「1」で示されるノードに存在し、CPUIDが「5」のCPUがアクセスするアドレス域である旨を示す。また、ノードマップ34は、「0x20000」から「0x202ef」のアドレス域が、ノードID「2」で示されるノードに存在し、CPUIDが「8」のCPUがアクセスするアドレス域である旨を示す。
なお、ノードマップ34は、図10に示すように、アドレス域をスタートアドレスとレングスとで表現した場合には、各アドレス域の長さを柔軟に設定することができる。すなわち、ノードマップ34は、アドレス域をスタートアドレスとアドレスマスクとで表現した場合は、LSB(Least Significant Bit)から1が連続する範囲のアクセス域を指定することとなる。一方、各アドレス域をスタートアドレスとレングスとで表現した場合には、各アドレス域の長さを任意の長さに設定することができる。
図7に戻って、演算部31は、演算処理を実行し、OSやアプリケーションを実行する演算装置のコアである。また、演算部31は、データの読み込みを行う場合には、読み込み対象となるデータが格納された記憶領域の論理アドレスをアドレス変換部35に出力する。
L1キャッシュ32は、データやディレクトリのうち頻繁に利用されるデータを一時的に記憶するキャッシュメモリである。L2キャッシュ33は、L1キャッシュ32と同様に、データやディレクトリのうち頻繁に利用されるデータを一時的に記憶するが、L1キャッシュ32よりも記憶容量が大きく、データを読み書きする速度が低速なキャッシュメモリである。なお、ディレクトリとは、メモリ22の各記憶領域に記憶されたデータをキャッシュしたCPUや、キャッシュされたデータの更新状況を示す情報である。
アドレス変換部35は、TLB(Translation Lookaside Buffer)を用いて、演算部31が出力した論理アドレスを物理アドレスに変換する。例えば、アドレス変換部35は、論理アドレスと物理アドレスとを対応付けたエントリを記憶するTLBを有し、演算部31から取得した論理アドレスと対応付けて記憶する物理アドレスをキャッシュディレクトリ管理部36に出力する。なお、アドレス変換部35は、TLBミスが発生した場合は、トラップ処理を実行し、TLBミスした物理アドレスと論理アドレスの組をTLBに登録する。
また、アドレス変換部35は、CPU21が実行するアプリケーションから共有メモリへの割当てを要求された場合には、以下の処理を実行する。すなわち、アドレス変換部35は、各CPU21〜21cが共用する共有領域にアクセスする際にアプリケーションが用いる論理アドレスと、共有領域に割当てられる範囲の物理アドレスとを対応付けたエントリをTLBに設定する。
また、アドレス変換部35は、アプリケーションやOSからローカル領域の割当を要求された場合は、以下の処理を実行する。すなわち、アドレス変換部35は、アプリケーションやOSがCPU21専用のローカル領域にアクセスするための論理アドレスと、ローカル領域に割当てられる範囲の物理アドレスとを対応付けたエントリをTLBに設定する。
キャッシュディレクトリ管理部36は、キャッシュデータおよびディレクトリの管理を行う。具体的には、キャッシュディレクトリ管理部36は、アドレス変換部35から、演算部31が出力した論理アドレスを変換した物理アドレスを取得する。
そして、キャッシュディレクトリ管理部36は、アドレス変換部35から物理アドレスを取得した場合には、ディレクトリをチェックし、物理アドレスが示すデータの状態が正常かチェックする。また、物理アドレスが示すデータをL1キャッシュ32またはL2キャッシュ33がキャッシュしている場合には、キャッシュしているデータを演算部31に出力する。
一方、キャッシュディレクトリ管理部36は、物理アドレスが示すデータをL1キャッシュ32またはL2キャッシュ33がキャッシュしていない場合は、物理アドレスが示す記憶領域が、メモリ22に存在するか否かを判別する。そして、キャッシュディレクトリ管理部36は、物理アドレスが示す記憶領域がメモリ22に存在しない場合には、ノードマップ34を参照する。
また、キャッシュディレクトリ管理部36は、ノードマップ34を参照し、取得した物理アドレスを含む範囲のエントリを識別する。そして、キャッシュディレクトリ管理部36は、識別したエントリのCPUIDがCPU21のCPUIDであるか否かを判別する。その後、キャッシュディレクトリ管理部36は、識別したエントリのCPUIDがCPU21のCPUIDである場合は、メモリアクセス部41に、物理アドレスを出力する。
また、キャッシュディレクトリ管理部36は、識別したエントリのCPUIDがCPU21のCPUIDではない場合には、以下の処理を実行する。すなわち、キャッシュディレクトリ管理部36は、識別したエントリのCPUIDとノードIDとを取得する。そして、キャッシュディレクトリ管理部36は、パケット制御部37に対して、取得したCPUIDと物理アドレスとを出力する。
なお、キャッシュディレクトリ管理部36は、出力した物理アドレスが示す記憶領域に格納されているデータをメモリアクセス部41やパケット制御部37から取得した場合には、取得したデータをL1キャッシュ32およびL2キャッシュ33に格納する。そして、キャッシュディレクトリ管理部36は、L1キャッシュ32にキャッシュさせたデータを演算部31に出力する。
また、キャッシュディレクトリ管理部36は、パケット制御部37から物理アドレスを取得した場合、すなわち、他のCPUからのメモリアクセスのリクエストの対象となる物理アドレスを取得した場合には、以下の処理を実行する。すなわち、キャッシュディレクトリ管理部36は、取得した物理アドレスのうち、所定の位置のビットが「0」であるか「1」であるかに応じて、取得した物理アドレスがローカル領域に振り分けられた物理アドレスであるか否かを判別する。
例えば、キャッシュディレクトリ管理部36は、情報処理システム1の各メモリに対して、図3、図4に例示した範囲の物理アドレスが振り分けられている場合には、最下位のビットを0ビット目として46ビット目が「0」であるか「1」であるかを判別する。そして、キャッシュディレクトリ管理部36は、46ビット目が「0」である場合には、取得した物理アドレスがローカル領域に振り分けられた物理アドレスであると判別する。このような場合には、キャッシュディレクトリ管理部36は、パケット制御部37に対して、リクエスト元に否定応答(アクセスエラー)を送信するように指示する。
また、キャッシュディレクトリ管理部36は、46ビット目が「1」である場合には、取得した物理アドレスが共有領域に振り分けられた物理アドレスであると判別する。このような場合には、キャッシュディレクトリ管理部36は、取得した物理アドレスが示す記憶領域に記憶されたデータを取得し、取得したデータをパケット制御部37に出力し、リクエスト元へ送信するよう指示する。
なお、キャッシュディレクトリ管理部36は、メモリ22に格納されたデータにアクセスする場合には、物理アドレスが示す記憶領域のデータと、キャッシュされたデータとのコヒーレンスを保持する処理を行う。例えば、キャッシュディレクトリ管理部36は、キャッシュエントリごとにキャッシュデータの状態を示すキャッシュタグと、ディレクトリとを参照する。そして、キャッシュディレクトリ管理部36は、キャッシュタグとディレクトリとに基づいて、キャッシュコヒーレンスを保持する処理、および、メモリアクセス処理を実行する。
ここで、図11Aは、キャッシュタグの一例を説明するための図である。図11Aに示す例では、キャッシュタグは、縮退フラグ、ECC(Error Check and Correct memory)チェックビット、IF(Instruction Fetch)/オプコード、L1キャッシュステート、L2キャッシュステート、AAとを有する。
ここで、縮退フラグとは、縮退するか否かを示すキャッシュライン縮退情報である。また、ECCチェックビットとは、冗長化のために付加されるチェックビットである。IF/オプコードとは、データがインストラクションであるかデータであるかを示す情報である。
また、AAとは、アドレス情報であり、詳細には、物理アドレスのフレームアドレスが格納される。また、L1キャッシュステート、および、L2キャッシュステートとは、L1キャッシュ32およびL2キャッシュ33に格納されたデータの状態を示す情報である。
例えば、L1キャッシュステートやL2キャッシュステートには、「M(Modified)」、「E(Exclusive)」、「S(Shared)」、「I(Invalid)」のいずれかを示すビットが格納される。ここで、Modifiedとは、いずれか1つのCPUがデータをキャッシュしており、かつ、キャッシュされたデータが更新されている状態を示す。なお、キャッシュされたデータの状態がModigiedである場合には、ライトバックを実行する必要がある。
また、Exclusiveとは、いずれか1つのCPUがデータをキャッシュしており、かつ、キャッシュされたデータが更新されていない状態を示す。また、Sharedとは、複数のCPUがデータをキャッシュしており、かつ、キャッシュされたデータが更新されていないことを示す。なお、Invalidとは、キャッシュのステータスが登録されていないことを示す。
一方、ディレクトリは、2ビットのCKビット、63ビットのPRC、4ビットのUE
を管理する。ここで、CKビットとは、キャッシュされたデータの状態をコード化した情報である。また、PRCとは、当該キャッシュラインのデータをキャッシュしたCPUの位置をビットマップで示す情報である。また、UEとは、ディレクトリの異常と要因とを示す情報である。
キャッシュディレクトリ管理部36は、取得した物理アドレスに格納されたデータをキャッシュするCPUや、キャッシュされたデータの状態等を識別する。そして、キャッシュディレクトリ管理部36は、キャッシュされたデータの状態に基づいて、スヌープを発行してメモリのデータを更新する等の処理を行い、キャッシュされたデータとメモリのデータとのコヒーレンスを保持する。その後、キャッシュディレクトリ管理部36は、データを要求元に出力する。
ここで、キャッシュディレクトリ管理部36がキャッシュコヒーレンスを保持する処理の一例について説明する。例えば、キャッシュディレクトリ管理部36は、ステータスがM(Modified)であるデータをキャッシュしたCPUに対してライトバックを指示する命令を送信するようパケット生成部38に指示する。そして、キャッシュディレクトリ管理部36は、データのステータスを更新し、更新後のステータスに応じた処理を実行する。なお、キャッシュディレクトリ管理部36が送受信するリクエストや命令の種別については、後述する。
リクエスト生成部38は、キャッシュディレクトリ管理部36から物理アドレスと、CPUIDとを取得した場合には、取得した物理アドレスと、CPUIDとを格納したパケット、すなわち、メモリアクセスのリクエストとなるパケットを生成する。そして、リクエスト生成部38は、生成したパケットをルータ40に送信する。
ここで、図11Bは、実施例1に係るCPUが送信するパケットを説明するための図である。なお、図11Bに示す例では、物理アドレスをPA(Physical Address)と記載した。図11Bに示す例では、リクエスト生成部38は、CPUIDと物理アドレスと、リクエストの内容を示すデータとが格納されたリクエストを生成し、生成したリクエストをルータ40に出力する。このような場合には、ルータ40は、リクエスト生成部38が生成したリクエストをXB接続部27を解してXB2に出力する。すると、XB2は、リクエストに格納されたCPUIDが示すCPUへとリクエストを転送する。
なお、リクエスト生成部38は、キャッシュディレクトリ管理部36からコヒーレンシを保持するためのリクエストや命令の発行の指示を受付けた場合には、指示されたリクエストや命令を生成する。そして、リクエスト生成部38は、生成したリクエストや命令をルータ40、XB接続部27、XB2を介して、指示されたCPUに送信する。なお、リクエスト生成部38は、I/O装置からデータを取得する場合は、I/Oに対するアクセス要求をルータ40に出力する。
図7に戻って、リクエスト受信部39は、XB2、XB接続部27、ルータ40を介して、他のCPUが出力したパケットを受信すると、受信したパケットに含まれる物理アドレスを取得する。そして、リクエスト受信部39は、取得した物理アドレスをキャッシュディレクトリ管理部36に出力する。また、リクエスト受信部39は、他のCPUが送信したデータを受信した場合には、受信したデータをキャッシュディレクトリ管理部36に出力する。
なお、リクエスト受信部39は、コヒーレンシを保持するためのリクエストや命令を受信した場合には、受信したリクエストや命令をキャッシュディレクトリ管理部36に出力する。また、リクエスト受信部39は、I/Oに対するアクセス要求の応答やデータをルータ40から受信した場合は、受信した応答やデータをキャッシュディレクトリ管理部36に出力する。このような場合には、キャッシュディレクトリ管理部36は、例えば、取得したデータをメモリアクセス部41に出力し、メモリ22に格納する処理を行う。
ルータ40は、パケット制御部37が有するリクエスト生成部38が出力したパケットを受信した場合には、受信したリクエストをXB接続部27に出力する。また、ルータ40は、XB接続部27を介して、他のCPUが送信したパケットやデータをリクエスト受信部39に出力する。また、ルータ40は、パケット制御部37がI/O等に対して出力したパケットをPCIe制御部42に出力する。また、ルータ40は、I/Oからの応答等をPCIe制御部42から受信した場合には、受信した応答等をパケット制御部37に出力する。
メモリアクセス部41は、いわゆるMAC(Memory Access Controller)であり、メモリ22に対するアクセスの制御を行う。例えば、メモリアクセス部41は、キャッシュディレクトリ管理部36から物理アドレスを受信した場合には、受信した物理アドレスに格納されたデータをメモリ22から取得し、取得したデータをキャッシュディレクトリ管理部36に出力する。なお、メモリアクセス部41は、メモリーミラー機能を用いて、共有領域を冗長化してもよい。
PCIe制御部42が有するリクエスト生成部43は、ルータ40を介してI/Oに対するアクセス要求を取得した場合には、アクセス要求の対象となるI/O装置に送信するリクエストを生成し、生成したリクエストをPCIeバス制御部44に出力する。PCIeバス制御部44は、リクエスト生成部43が生成したリクエストを取得した場合には、PCIe接続部28を介して、I/O装置にリクエストを送信する。
次に、図12を用いて、CPU21が他のCPUに対してリクエストを送信する処理の一例について説明する。図12は、実施例1に係るCPUがリクエストを送信する処理の一例を説明するための図である。例えば、図12中(A)に示すように、サービスプロセッサ24からノードマップ34に対して、物理アドレスが振り分けられるメモリにアクセスするCPUのCPUIDと物理アドレスとを対応付けたエントリの設定が行われる。
また、演算部31は、演算処理を実行し、図12中(B)に示すように、アクセス対象となる論理アドレスをアドレス変換部35に出力する。すると、アドレス変換部35は、論理アドレスを物理アドレスに変換し、変換した物理アドレスを図12中(C)に示すように、キャッシュディレクトリ管理部36に出力する。
ここで、キャッシュディレクトリ管理部36は、アドレス変換部35から物理アドレスを取得すると、図12中(D)に示すように、ノードマップ34を参照し、取得した物理アドレスと対応付けられたCPUIDを取得する。そして、キャッシュディレクトリ管理部36は、取得したCPUIDがCPU21のCPUIDではない場合には、図12中(E)に示すように、取得したCPUIDと物理アドレスとをパケット制御部37に出力する。
このような場合には、リクエスト生成部38は、キャッシュディレクトリ管理部36から取得した物理アドレスとCPUIDとを格納したパケットを生成し、図12中(F)に示すように、生成したパケットをルータ40に出力する。すると、図12中(G)に示すように、ルータ40は、リクエスト生成部38から取得したパケットをXB接続部27に出力する。その後、図12中(H)に示すように、XB接続部27は、取得したパケットをXB2に出力する。すると、XB2は、パケットに格納されたCPUIDが示すCPUへパケットを伝達することとなる。
次に、図13を用いて、CPU21が他のCPUからパケットを受信した際に実行する処理の一例について説明する。図13は、実施例1に係るCPUがパケットを受信した際に実行する処理の一例を説明するための図である。例えば、図13中(I)に示すようにリクエスト受信部39は、他のCPUからCPU21のCPUIDとメモリ22に振り分けられた物理アドレスとが格納されたパケットを受信する。
このような場合には、リクエスト受信部39は、受信したパケットから物理アドレスを取得し、図13中(J)に示すように、取得した物理アドレスをキャッシュディレクトリ管理部36に出力する。すると、キャッシュディレクトリ管理部36は、取得した物理アドレスの46ビット目が「0」であるか「1」であるかを判別する。
すなわち、キャッシュディレクトリ管理部36は、情報処理システム1が図3、図4に示すように、共有領域とローカル領域に振り分ける物理アドレスを設定している場合には、物理アドレスの全ビットを識別せずともよい。すなわち、キャッシュディレクトリ管理部36は、46ビット目が「0」であるか「1」であるかを判別するだけで、物理アドレスが示す記憶領域が、共有領域であるかローカル領域であるかを正確に判別することができる。
そして、キャッシュディレクトリ管理部36は、受信した物理アドレスの46ビット目が「1」である場合には、共有領域に対するアクセスであると判別する。このような場合には、キャッシュディレクトリ管理部36は、図13中(K)に示すように、物理アドレスが示す記憶領域のデータがL1キャッシュ32およびL2キャッシュ33にキャッシュされているか判別する。
また、キャッシュディレクトリ管理部36は、データがキャッシュされていないと判別した場合には、図13中(L)に示すように、物理アドレスをメモリアクセス部41に出力する。すると、図13中(M)に示すように、メモリアクセス部41は、メモリ22から物理アドレスが示す記憶領域のデータを取得し、キャッシュディレクトリ管理部36に出力する。
そして、キャッシュディレクトリ管理部36は、L1キャッシュ32、L2キャッシュ33、またはメモリアクセス部41からデータを取得した場合には、取得したデータをパケット制御部37に出力し、リクエスト元のCPUに送信するよう指示する。
例えば、CPU21〜21c、通信部23、サービスプロセッサ24、制御部25、通信部26、XB接続部27、PCIe接続部28とは、電子回路である。また、演算部31、アドレス変換部35、キャッシュディレクトリ管理部36、パケット制御部37、リクエスト生成部38、リクエスト受信部39とは、電子回路である。
また、ルータ40、メモリアクセス部41、PCIe制御部42、リクエスト生成部43、PCIeバス制御部44とは、電子回路である。ここで、電子回路の例として、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路、またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などを適用する。
また、メモリ22〜22aとは、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ(flash memory)などの半導体メモリ素子である。また、L1キャッシュ32、L2キャッシュ33は、SRAM(Static Random Access Memory)等の高速な半導体メモリ素子である。
次に、各CPU21〜21cがキャッシュコヒーレンスを保持する処理について簡単に説明する。なお、以下の説明においては、情報処理システム1の各CPUはイリノイプロトコルを用いて、キャシュコヒーレンスを保持するものとする。
なお、以下の説明においては、情報処理システム1が有する各メモリは、全てのCPUからキャッシュ可能な空間を有するメモリとして識別されるものとする。また、以下の説明においては、キャッシュ対象となるデータを記憶するメモリに、そのCPU内のMACを介して物理的に直接接続されているCPUをホームCPUとし、キャッシュを要求したCPUをローカルCPUと記載する。
また、ホームCPUに対して既にリクエストを送信し、データをキャッシュ済みであるCPUをリモートCPUと記載する。なお、ローカルCPUとホームCPUが同一のCPUとなる場合や、ローカルCPUとリモートCPUとは同一のCPUとなる場合も存在する。
例えば、ローカルCPUは、自身のノードマップを参照し、アクセス対象となる物理アドレスがホームCPUがアクセスするメモリに振り分けられていると判別する。そして、ローカルCPUは、物理アドレスを格納したリクエストをホームCPUに対して発行する。なお、ローカルCPUが発行するリクエストには、複数の種別のリクエストが存在する。このため、ホームCPUが有するキャッシュディレクトリ管理部は、取得したリクエストの種別に応じたキャッシュコヒーレンス制御を実行することとなる。
例えば、ローカルCPUが発行するリクエストの種別としては、共有型フェッチアクセス、排他型フェッチアクセス、キャッシュ無効化要求、キャッシュリプレース要求等が存在する。共有型フェッチアクセスとは、MoveIn to Shareの実行要求であり、ホームCPUがアクセスするメモリからデータの読出しを行う際に発行されるリクエストである。
また、排他型フェッチアクセスとは、例えばMoveIn Exclusivelyの実行要求であり、ホームCPUがアクセスするメモリへデータストアを行う際の、キャッシュへのデータロードを行う際に発行される。また、キャッシュ無効化要求とは、例えばMoveOutの実行要求であり、キャッシュラインの無効化をホームCPUに対して要求する際に発行される。なお、ホームCPUは、キャッシュ無効化要求を受信すると、リモートCPUに対してキャッシュ無効化要求を発行する場合や、キャッシュをInvalidationとさせる命令を発行する場合がある。
キャッシュリプレース要求とは、例えばWriteBackの実行要求であり、更新されたキャッシュデータ、すなわちModified状態のキャッシュデータをホームCPUがアクセスするメモリに書き戻す際に発行される。なお、キャッシュリプレース要求には、例えば、FlushBackの実行要求であり、更新されていないキャッシュデータ、すなわち、Shared又はExclusive状態のキャッシュの破棄を行う際に発行される。
ホームCPUは、上述したリクエストをローカルCPUから受信した場合には、リクエストを処理するために、ローカルCPUやリモートCPUに対して、命令を発行する。ここで、ホームCPUは、取得したリクエストの種別に応じてたキャッシュコヒーレンス制御を実行するため、複数の種別の命令を発行することとなる。例えば、ホームCPUは、リモートCPUがキャッシュしているデータをローカルCPUにロードさせるMoveOut and Bypass to Shareを発行する。
また、例えば、ホームCPUは、ローカルCPU以外のすべてのリモートCPUのキャッシュを無効化し、その後、ホームCPUがローカルCPUにデータを送信するためのMoveOut and Bypass Exclusivelyを発行する。また、ホームCPUは、リモートCPUにキャッシュの無効化を要求するMoveOut WITH Invalidationを発行する。なお、ホームCPUがMoveOut WITH Invalidationを発行した場合には、全てのCPUのキャッシュが、対象となるアドレスについてInvalidate状態となる。
また、ホームCPUは、リモートCPUにキャッシュラインの無効化を要求するMoveOut for Flushを発行する。なお、ホームCPUがMoveOut for Flushを発行した場合には、対象となるデータを、ホームCPUのみがキャッシュした状態となる。また、ホームCPUは、対象となるデータの状態がSharedであるときに、リモートCPUにキャッシュの破棄を要求するBuffer Invalidationを発行する。
ホームCPUは、リクエストの種別に応じて、上述した命令を発行し、各CPUがキャッシュしたデータのステートを遷移させる。また、ローカルCPUやリモートCPUは、命令を受信した場合には、命令が示す処理を実行し、自身がキャッシュしたデータのステートを遷移させる。
その後、ローカルCPUやリモートCPUは、命令に対する完了応答やデータ付の完了応答をホームCPUに送信する。また、ホームCPUやリモートCPUは、命令処理を実行した後に、ローカルCPUに対して、データ付のリクエスト応答を送信することとなる。
[CPUの処理の流れ]
次に、図14を用いて、情報処理システム1において各CPUが有するノードマップ34を設定する処理の流れについて説明する、図14は、ノードマップを設定する処理の流れを説明するためのフローチャートである。なお、以下の説明においては、1つのCPUとCPUがアクセスするメモリとの組をノードとして記載する。また、以下の説明においては、新たなノードを情報処理システム1に追加する例について説明する。
まず、情報処理システム1のオペレータは、ノードの新規増設を行う(ステップS101)。次に、各ビルディングブロック10〜10eのサービスプロセッサが追加されたノードのハードウェアの構成の読み取りを行う(ステップS102)。次に、情報処理システム1のオペレータは、新たなノードが有するメモリの共有領域の割り当てをサービスプロセッサに指示する(ステップS103)。
次に、情報処理システム1のオペレータは、新たなノードのサービスプロセッサに電源投入を指示する(ステップS104)。すると、各ビルディングブロック10〜10eのサービスプロセッサは、読み取った構成の情報を元に、各ビルディングブロック10〜10eが有するCPUのノードマップ34をI2Cを用いて設定する(ステップS105)。その後、情報処理システム1は、各ビルディングブロック10〜10eの電源投入を行い(ステップS106)、処理を終了する。
次に、図15を用いて、情報処理システム1が共有領域を制御する処理の流れについて説明する。図15は、共有領域を制御する処理の流れを説明するためのフローチャートである。まず、情報処理システム1は、アプリケーションの要求に応じて、ノード間の共有メモリの割当処理を実行する(ステップS201)。次に、情報処理システム1は、ノード間で共有する共有メモリのアタッチ処理を実行する(ステップS202)。
その後、情報処理システム1が有する各CPUによって実行されるアプリケーションが各メモリを使用する(ステップS203)。次に、情報処理システム1は、共有メモリのデタッチ処理を実行する(ステップS204)。その後、情報処理システム1は、共有メモリの解放処理を実行し(ステップS205)、処理を終了する。なお、ステップS201、および、ステップS205は、その共有メモリのホームノード上のアプリケーションのみが実施してもよいし、実際の処理は、nopとなるものの、その共有メモリのホームノード以外のノード上のアプリケーションも実施するものとしても良い。
次に、図16を用いて、図15中ステップS201で示した共有メモリの割当処理を実行する処理の流れについて説明する。図16は、共有メモリの割当処理を説明するためのフローチャートである。図16に示す例では、例えば、CPU21が実行するアプリケーションがOSに対して、ノード間の共有メモリ割当処理の実行を要求する(ステップS301)。
すると、CPU21が実行するOSが共有領域用の物理アドレスの領域から要求されたサイズのメモリ割当を行う(ステップS302)。次に、OSが割り当てた共有メモリの管理用IDをアプリケーションに引渡し(ステップS303)、共有メモリの割当処理を終了する。
次に、図17を用いて、図15中ステップS202で示したノード間の共有メモリアタッチ処理の流れについて説明する。図17は、共有メモリアタッチ処理を説明するためのフローチャートである。まず、アプリケーションは、OSに対して管理用IDを引渡し、ノード間の共有メモリのアタッチ処理を要求する(ステップS401)。このような場合には、OSは、他のノードで実行されているOSと通信を行い、管理用IDに対応する物理アドレスを獲得する(ステップS402)。
ここで、OSが他のノードで実行されているOSと通信を行う場合には、LAN(Local Area Network)などによる通信、サービスプロセッサ24を介した各ノード間の通信等を用いる。また、例えば、各ノードで実行されるOSは、特定の共有領域を、ノード間通信に用いる領域として設定し、設定した領域に対する情報の格納や読み取りを行う事で、通信を行うこととしても良い。
次に、OSは、物理アドレスに対応する論理アドレス(Virtual Address)を決定し、割当を行う(ステップS403)。例えば、CPU21で実行されるOSは、物理アドレスと論理アドレスとのTLBをアドレス変換部35に設定する。
なお、各CPU21〜21cが用いる論理アドレスは、重複する範囲であっても良く、また、CPUごとに異なる範囲でもよい。また、各CPU21〜21cが用いる論理アドレスは、アプリケーションがOSに指定できるようにしてもよい。その後、OSは、論理アドレスの値をアプリケーションに引渡し(ステップS404)、処理を終了する。
次に、図18を用いて、図15中ステップS203で示したアプリケーションがノード間の共有メモリを使用する処理の流れについて説明する。図18は、アプリケーションが共有メモリを使用する処理を説明するためのフローチャートである。例えば、CPU21が実行するアプリケーションは、論理アドレスを発行し、論理アドレスが示す記憶領域へのアクセスを行う(ステップS501)。
すると、CPU21は、TLBミスが発生したか否かを判別する(ステップS502)。そして、CPU21は、TLBミスが発生した場合は(ステップS502肯定)、トラップ処理を実行し、TLBに論理アドレスと物理アドレスとの組のエントリを設定する(ステップS503)。
次に、アプリケーションは、再度論理アドレスを発行し、TLBによる物理アドレスへの変換を経て、正常に共有メモリに対するアクセスを実行する(ステップS504)。一方、TLBミスが発生しなかった場合は(ステップS502否定)、正常に共有メモリに対するアクセスが実行され(ステップS505)、処理が終了する。
次に、図19を用いて、図15中ステップS204で示したノード間の共有メモリデタッチ処理の流れについて説明する。図19は、ノード間の共有メモリデタッチ処理を説明するためのフローチャートである。例えば、CPU21が実行するアプリケーションは、OSに対して、ノード間共有メモリの論理アドレス、または管理用IDを指定して、デタッチ処理を要求する(ステップS601)。
すると、CPU21が実行するOSは、キャッシュのフラッシュを行う(ステップS602)。すなわち、OSは、共有メモリの割り当て解除後、再度共有メモリとして割当てを行った場合に、共有メモリとして割当てが行われていない際に共有メモリの実メモリにアクセスするCPUがリブートすると、キャッシュと実メモリの状態が食い違う恐れがある。このため、OSは、キャッシュのフラッシュを行い、キャッシュと実メモリの状態とが食い違う状態を防止する。
そして、OSは、ノード間共有メモリ、すなわち、アプリケーションが利用していた範囲の論理アドレスの割当を解除し、解除した論理アドレスに関連するTLBのエントリを削除する(ステップS603)。また、OSは、ノード間で通信を行い、本アプリケーションが対象PAの使用を完了したことを通知する(ステップS604)。そして、OSは、ノード間通信により、解放済みの共有メモリについて、最後の利用者がデタッチを行ったことをホームノードが認識した場合、指定された共有メモリ用のメモリ割当て解除を行う(ステップS605)。なお、ステップS605の処理は、図20に示すステップS702の処理と関連する。
なお、ステップS603以降は、OSは、本ノード上で、デタッチが完了しているメモリアドレスについてTLBミス(ステップS502肯定)が発生しても、デタッチが完了している論理アドレスに対応する物理アドレスをTLBに設定しない。このような場合には、ステップS504の処理は、正常に終了せず、アクセスエラーとなる。また、デタッチ完了後、ステップS402と逆に、OSがノード間で通信し、本アプリケーションがこの共有メモリのPAに対してアクセスを完了したことを通知する。もし、この共有メモリがホームノード上で解放済みで、かつ、このアプリケーションがこの共有メモリの最後の利用者であった場合は、ホームノードに解放処理を依頼する。
次に、図20を用いて、図15中ステップS205で示したノード間共有メモリの解放処理の流れについて説明する。図20は、ノード間共有メモリの解放処理を説明するためのフローチャートである。例えば、CPU21が実行するアプリケーションは、OSに対してノード間共有メモリの解放処理を要求する(ステップS701)。すると、OSは、指定された共有領域の使用者が全てでタッチしていた場合は、割当てを解放し(ステップS702)、処理を終了する。もし、デタッチが完了していなければ、割当ての解放処理は行わず、処理を終了する。なお、実際の割当ての完了処理は、ステップS605で行われる。
次に、図21を用いて、CPU21が他のCPUに対して、メモリアクセスのリクエストを送信する処理の流れについて説明する。図21は、リクエストを発行する処理の流れを説明するためのフローチャートである。例えば、CPU21の演算部は、論理アドレスを発行する(ステップS801)。
すると、アドレス変換部35において、論理アドレスから物理アドレスへの変換が行われる(ステップS802)。次に、キャッシュディレクトリ管理部36が、物理アドレスを取得し、キャッシュディレクトリ管理を実行する(ステップS803)。すなわち、キャッシュディレクトリ管理部36は、取得した物理アドレスが示す記憶領域についてのキャッシュステートを遷移させる。
次に、キャッシュディレクトリ管理部36は、ノードマップ34を参照し、取得した物理アドレスが他ノードのメモリに振り分けられた物理アドレスであるか否かを判別する(ステップS804)。そして、キャッシュディレクトリ管理部36は、取得した物理アドレスが他ノードのメモリに振り分けられた物理アドレスではないと判別した場合には(ステップS804否定)、取得した物理アドレスを用いてメモリアクセスを実行する(ステップS805)。
一方、キャッシュディレクトリ管理部36は、取得した物理アドレスが他ノードのメモリに振り分けられた物理アドレスである場合には(ステップS804肯定)、ノードマップ34から物理アドレスと対応付けられたCPUIDを取得する(ステップS806)。そして、パケット送信部が、CPUIDと物理アドレスとを格納したパケット、すなわち、メモリアクセスのリクエストを生成し、XB2に送出し(ステップS807)、処理が終了する。
次に、図22を用いて、CPU21が他のCPUからメモリアクセスのリクエストを受信した際に実行する処理の流れについて説明する。図22は、リクエストを受信した際に実行する処理の流れを説明するためのフローチャートである。なお、図22に示す例では、CPU21が、他のCPUからMoveIn to ShareやMoveIn Exclusivelyを受信した際に実行する処理の流れについて説明する。例えば、CPU21は、他のCPUからXB2を介してリクエストを受信する(ステップS901)。
このような場合には、CPU21は、リクエストの対象となる物理アドレスの所定のビットが「1」であるか否かを判別することで、リクエストの対象となる物理アドレスがローカル領域であるか否かを判別する(ステップS902)。そして、CPU21は、リクエストの対象となる物理アドレスがローカル領域であると判別した場合には(ステップS902肯定)、リクエスト元のCPUに否定応答を返信し(ステップS903)、処理を終了する。
また、CPU21は、リクエストの対象となる物理アドレスがローカル領域でない場合には(ステップS902否定)、コヒーレンスを保持するキャッシュディレクトリ管理を実行する(ステップS904)。また、CPU21は、物理アドレスが示す記憶領域のステータスを判定する(ステップS905)。
そして、CPU21は、判定したステータスに応じた命令を他のCPUに対して発行し(ステップS906)、ステータスを遷移させる(ステップS907)。その後、CPU21は、物理アドレスが示す記憶領域のデータをリクエスト元のCPUに送信する応答を行い(ステップS908)、処理を終了する。
次に、図23を用いて、CPU21が応答を受信した際に実行する処理の流れについて説明する。図23は、CPUが応答を受信した際に実行する処理の流れを説明するためのフローチャートである。例えば、CPU21は、応答を受信する(ステップS1001)。このような場合には、CPU21は、応答の内容が正常な応答であるか否かを判別する(ステップS1002)。
そして、CPU21は、応答の内容が正常である場合、すなわち、リクエスト対象となるデータを受信した場合には(ステップS1002肯定)、データを用いた正常な処理を実行し(ステップS1003)、処理を終了する。一方、CPU21は、否定応答を受信した場合は(ステップS1002否定)、否定応答の理由がアクセスエラーであるか否かを判別する(ステップS1004)。
そして、CPU21は、否定応答の理由がアクセスエラーではない場合には(ステップS1004否定)、通常のエラー処理を実行し(ステップS1005)、処理を終了する。一方、CPU21は、否定応答の理由がアクセスエラーではない場合には(ステップS1004肯定)、エラーが発生した物理アドレスをエラーレジスタに設定して、トラップ処理を実行し(ステップS1006)、処理を終了する。
[実施例1の効果]
上述したように、情報処理システム1は、CPU21〜21cとメモリ22〜22cと、各CPU21〜21cを接続するXB2とを有する。また、CPU21は、論理アドレスと物理アドレスとの変換を行うアドレス変換部と、物理アドレスとCPUIDとを変換するノードマップ34を有する。
そして、CPU21は、物理アドレスとCPUIDとを有するリクエストのパケットを送信する。また、CPU21は、他のCPUからリクエストのパケットを受信した場合には、受信したパケットに格納された物理アドレスに基づいて、アクセス対象となる記憶領域が、共有領域であるかローカル領域であるかを判別する。
このようにすることで、情報処理システム1は、効率的、かつ小さなハードウェア物量でノード間共有メモリに対するメモリアクセスを行うことができる。すなわち、情報処理システム1は、CPU21が物理アドレスとCPUIDとを変換するノードマップ34を用いてアドレス変換を行うので、効率的なメモリアクセスを行うことができる。
また、CPU21は、他のCPUがアクセスするメモリの共有領域にアクセスする場合には、物理アドレスとCPUIDを格納したパケットをXB2に送出するのみでよい。このため、情報処理システム1は、効率的なメモリアクセスを行うことができる。
また、情報処理システム1は、CPU21が他のCPUからリクエストのパケットを受信した場合には、受信したパケットに格納された物理アドレスに基づいて、アクセス対象となる記憶領域が、共有領域であるかローカル領域であるかを判別する。このため、情報処理システム1は、ローカル領域に格納するカーネルデータやユーザデータのセキュリティレベルを高く保つことができる。また、情報処理システム1は、全てのメモリをキャッシュ可能とするので、メモリアクセスにおけるレイテンシを容易に隠蔽することができる。
また、CPU21は、他のCPUがアクセスするメモリの共有領域に対して、メモリ22にアクセスする場合と同様の方法でアクセスする。すなわち、CPU21が有する演算部31は、アクセス対象となる記憶領域がメモリ22上に存在する場合にも、他のメモリ上に存在する場合にも、論理アドレスを出力するだけでよい。
このため、情報処理システム1は、I/Oの排他制御等の処理やプログラミング等を実行せずとも、容易に共有領域にアクセスできるため、メモリアクセス性能を向上させることができる。また、CPU21は、実行するプログラムやOSに改変を行わずとも、共有メモリを適切に利用することができる結果、プリフェッチ処理の実行を従来と同様に行う事ができるため、メモリアクセスの性能を向上させることができる。
また、情報処理システム1は、所定のビットが「1」となる物理アドレスを共有領域に割り当て、所定のビットが「0」となる物理アドレスをローカル領域に割り当てる。このため、CPU21は、物理アドレスのうち、所定の1ビットが「1」であるか否かを判別するだけで、アクセス対象の物理アドレスが共有領域の物理アドレスであるか否かを容易に判別することができる。この結果、情報処理システム1は、効率的なメモリアクセスを行うことができる。
また、CPU21は、他のCPUからのメモリアクセスの対象がローカル領域へのアクセスであると判定した場合には、否定応答を返信する。このため、情報処理システム1は、共有領域以外へのアクセスを防止する結果、エラーを防ぐことができる。
また、キャッシュディレクトリ管理部36は、ノードマップ34を用いて、物理アドレスをノードマップ34に対応付けて記憶されたCPUIDに変換する。このため、CPU21は、アクセス対象となる物理アドレスが振り分けられたメモリにアクセスするCPUを識別することができる。
また、各ビルディングブロック10〜10eは、ノードマップ34の書き換えを行うサービスプロセッサを有する。このため、情報処理システム1は、メモリ22〜22cごとに、ローカル領域と共有領域とを自由に割り当てることができる。例えば、情報処理システム1は、メモリ22が4TBの容量を有する場合に、ローカル領域に1TBを割り当て、共有領域に3TBを割り当てるというように、任意の容量の記憶領域をノード間で共有することができる。
また、情報処理システム1は、新たなCPUとメモリを追加した場合やCPUやメモリの削除を行った場合にも、サービスプロセッサを介して容易にローカル領域と共有領域との割り当てを行うことができる。
また、CPU21は、メモリ22に記憶されたデータをキャッシュしたCPUを管理するディレクトリを用いて、キャッシュコヒーレンスの制御を行う。このため、情報処理システム1は、情報処理システム1が有するCPUの数が増加した場合にも、XB2のトラフィックを増加させることなく、効率的にキャッシュコヒーレンスを保持することができる。
具体的には、情報処理システム1においては、各CPU間の通信が、リモートCPUとホームCPU間、または、リモートCPUとホームCPUと更新したデータをキャッシュするローカルCPU間に限定される。このため、情報処理システム1は、効率的にキャッシュコヒーレンスを保持することができる。
また、CPU21は、キャッシュミスが発生した場合に、キャッシュミスした物理アドレスが他のCPUがアクセスするメモリに割り当てられた物理アドレスであるか否かを判別する。そして、CPU21は、キャッシュミスした物理アドレスが他のCPUがアクセスするメモリに割り当てられた物理アドレスであると判別した場合には、物理アドレスをCPUIDに変換し、物理アドレスとCPUIDとを格納したパケットの生成および送出を行う。このため、CPU21は、無駄なアドレス変換処理を行うことなくメモリアクセスを行うことができる。
また、CPU21は、実行するアプリケーションが共有領域の獲得を要求した場合には、アプリケーションが利用する論理アドレスと、共有領域に割り当てられる物理アドレスとを変換するTLBを設定する。このため、CPU21は、実行するアプリケーションやOSに共有領域やローカル領域へのアクセスを意識した改変を加えずとも、メモリアクセスを行うことができる。
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例2として本発明に含まれる他の実施例を説明する。
(1)ビルディングブロックについて
上述した情報処理システム1は、4つのCPUを有するビルディングブロック10〜10eを有していた。しかし、実施例はこれに限定されるものではなく、ビルディングブロック10〜10eは、任意の数のCPU及び各CPUがアクセスするメモリを有することができる。また、CPUとメモリは、1対1で対応している必要はなく、メモリに直接アクセスするCPUは全体の一部であってもよい。
(2)共有領域とローカル領域の割り当てについて
上述した共有領域とローカル領域に対する物理アドレスの割り当ては、あくまで一例であり、情報処理システム1は、任意の物理アドレスを各領域に割当てることができる。
例えば、情報処理システム1は、物理アドレスの最下位1ビットが「0」となる物理アドレスを共有領域に割り当て、物理アドレスの最下位1ビットが「1」となる物理アドレスを共有領域に割当てることとしてもよい。このような場合には、各CPUは、物理アドレスの最下位1ビットが「0」であるか「1」であるかを判別することで、アクセス対象が共有領域であるかを容易に判別できる。
また、情報処理システム1は、物理アドレス空間の前半に含まれる任意の物理アドレスを共有領域に割り当て、物理アドレス空間の後半に含まれる任意の物理アドレスをローカル領域に割当ててもよい。このような場合には、各CPUは、物理アドレスの最上位1ビットが「0」であるか「1」であるかを判別することで、アクセス対象が共有領域であるかを容易に判別できる。なお、情報処理システム1は、物理アドレス空間の前半に含まれる任意の物理アドレスをローカル領域に割当て、後半に含まれる任意の物理アドレスを共有領域に割当ててもよい。
すなわち、情報処理システム1は、任意の物理アドレスを共有領域とローカル領域に割当てることができるが、所定のビットが同一の値となる物理アドレスを共有領域に割り当て、所定のビットが共有領域とは異なる値の物理アドレスをローカル領域に割当てることで、アクセス対象が共有領域であるかローカル領域であるかを容易に判別できる。
(3)CPUが送信するパケットについて
上述したCPU21は、CPUIDとPAとを有するパケットをメモリアクセスのリクエストとして送信した。しかし、実施例は、これに限定されるものではない。すなわち、CPU21は、アクセス対象となるメモリにアクセスするCPUを一意に識別できるのであれば、任意の情報を格納したパケットを出力してよい。
また例えば、CPU21は、CPUIDからVC(Virtual Connection)IDに変換し、VCIDを格納することとしてもよい。また、CPU21は、パケットに、データ長を示すレングス等の情報を格納することとしてもよい。
(4)CPUが発行する命令について
上述したように、各CPU21〜21cは、リクエストや命令を発行して、キャッシュのコヒーレンスを保持した。しかし、上述したリクエストや命令は、あくまで一例であり、例えばCPU21〜21cは、CAS(Compare AndSwap)命令を発行してもよい。
このように、CPU21〜21cがCAS命令を発行した場合には、排他制御のコンテンションが複数のCPU間で頻発しても、各CPUのキャッシュ上で処理が行われる。この結果、CPU21〜21cは、メモリアクセスの発生による遅延を防止するとともに、各CPU間のドランザクションが混雑するのを防ぐことができる。
(5)ハイパーバイザを経由した制御について
上述した情報処理システム1では、OSによってハードウェアであるアドレス変換部35にアクセスを行う例について説明した。しかし、実施例はこれに限定されるものではなく、たとえは、仮想マシンを動作させるハイパーバイザ(HPV:Hypervisor)がアドレス変換部35にアクセスを行っても良い。
すなわち、ハイパーバイザが動作するノードにおいては、OSは、キャッシュやMMUなどのCPU21〜21cのハードウェア資源に対して直接の操作を行わず、操作をハイパーバイザに依頼することとなる。このように、各CPU21〜21cは、ハイパーバイザを介した制御を受付ける場合には、仮想アドレスを実アドレス(RA:Real Address)に変換し、その後、実アドレスを物理アドレスに変換することとなる。
また、ハイパーバイザが動作するノードにおいては、割り込み処理は、OSには直接割り込まず、HPVに対して割り込みを行う。このような場合には、ハイパーバイザが、OSの割り込み処理ハンドラを読出すことで割り込みを行う。なお、上述したハイパーバイザが実行する処理は、仮想マシンを動作させるために実行される公知な処理である。
(6)パーティションを用いた処理について
上述した情報処理システム1では、各CPU21〜21cは、1つのノードマップを用いてメモリアクセスを送信していた。しかし、実施例はこれに限定されるものではない。例えば、各ビルディングブロック10〜10eは、複数のノード群として動作し、各ノード群毎に、同一のファームウェア(ハイパーバイザ)を動作させる1つの論理パーティションを構成しても良い。
このような場合には、各CPU21〜21cは、アクセス先のCPUを示すノードマップと、同一論理パーティション内のCPUを示すノードマップとを有する。このように、各CPU21〜21cは、同一論理パーティション内に含まれるCPUを示すノードマップを有することで、エラー発生通知、ダウン要求、リセット要求パケット等の、論理パーティションを超えて転送すべきではない特殊パケットの転送範囲を識別することができる。
以下、同一論理パーティション内に含まれるCPUを示すノードマップを有するCPUについて説明する。図24は、実施例2に係る情報処理システムを説明するための図である。図24に示すように、ビルディングブロック10、10aは、論理パーティション#Aを動作させ、ビルディングブロック10b〜10dは、論理パーティション#Bを動作させる。
ここで、論理パーティション#Aでは、複数のドメイン#A〜#Cと、ファームウェア#Aが動作する。また、論理パーティション#Bでは、複数のドメイン#D〜#Gとファームウェア#Bが動作する。なお、ファームウェア#Aおよびファームウェア#Bとは、例えばハイパーバイザである。また、ドメイン#Aでは、アプリケーションとOSとが動作しており、他のドメイン#B〜#Gもドメイン#Aと同様に、アプリケーションとOSとが動作する。
つまり、各ドメイン#A〜#Gは、それぞれ独立してアプリケーションとOSが動作する仮想マシンである。ここで、ビルディングブロック10が有する各CPU21〜21cは、パーティション#Aに含まれる各CPUに対して上述した特殊パケットを送信してもよいが、パーティション#Bに含まれる各CPUに対しては特殊パケットを送信すべきではない。
このため、各ビルディングブロック10〜10dのCPUは、同一の論理パーティションに含まれるCPUのCPUIDを示すノードマップを有する。例えば、CPU21は、物理アドレスと、物理アドレスが示す記憶領域を有するメモリと接続されたCPUのCPUIDとを対応付けて記憶するノードマップ34を有する。また、CPU21は、CPU21と同一のパーティション、すなわち、パーティション#Aに含まれるCPUのCPUIDを記憶するノードマップ34aを有する。なお、ノードマップ34aは、ノードマップ34と同様に、サービスプロセッサ24によって設定されるものとする。
以下、図面を用いて、同一の論理パーティションに含まれるCPUのCPUIDを示すノードマップの一例について説明する。図25は、パーティションの一例を説明するための図である。例えば、図25に示す例では、パーティション#Aは、ビルディングブロック#0を有する。また、ビルディングブロック#0は、CPU#0とアドレス域「#0」が割当てられたメモリとを有する。
また、パーティション#Bは、ビルディングブロック#1とビルディングブロック#2とを有する。また、ビルディングブロック#1は、CPU#4、CPU#5、アドレス域「#1」が割当てられたメモリ、アドレス域「#2」が割当てられたメモリを有する。なお、アドレス域「#1」が割当てられたメモリには、CPU#4がアクセスし、アドレス域「#2」が割当てられたメモリには、CPU#5がアクセスする。また、ビルディングブロック#2は、CPU#8とアドレス域「#3」が割当てられたメモリを有する。
次に、図26A〜26Cを用いて、図25に示すCPU#0が有するノードマップと、CPU#4が有するノードマップとについて説明する。まず、図26Aおよび図26Bを用いて、パーティション#AのCPUが記憶するノードマップについて説明する。なお、図26Aは、パーティション#AのCPUが記憶するノードマップの一例を説明するための図である。また、図26Bは、パーティション#Aを示すノードマップの一例を説明するための図である。
なお、以下の説明では、ノードID「0」は、ビルディングブロック#0を示し、ノードID「1」は、ビルディングブロック#1を示す、ノードID「2」は、ビルディングブロック#2を示す。また、CPUID「0」は、CPU#0のCPUIDであり、CPUID「4」は、CPU#4のCPUIDであり、CPUID「5」は、CPU#5のCPUIDであり、CPUID「8」は、CPU#8のCPUIDであるものとする。
例えば、図26Aに示す例では、ノードマップ34は、アドレス域「#0」が、ビルディングブロック#0に存在し、CPU#0がアクセスを行う旨を示す。また、ノードマップ34は、アドレス域「#1」が、ビルディングブロック#1に存在し、CPU#4がアクセスを行う旨を示す。また、ノードマップ34は、アドレス域「#2」が、ビルディングブロック#1に存在し、CPU#5がアクセスを行う旨を示す。また、ノードマップ34は、アドレス域「#3」がビルディングブロック#2に存在し、CPU#8がアクセスを行う旨を示す。
また、図26Bには、パーティション#Aを示すノードマップを示した。図26Bに示すように、パーティション#Aを示すノードマップは、各エントリに、バリッドと、ノードIDとCPUIDとを有する。例えば、図26Bに示す例では、ノードマップは、パーティション#Aにビルディングブロック#0のCPU#0が含まれる旨を示す。
例えば、図25に示す例では、CPU#0は、図26Aおよび図26Bに示すノードマップを有する。そして、CPU#0は、メモリアクセスを行う場合には、図26Aに示すノードマップを用いて、アクセス先のCPUを識別する。一方、CPU#0は、同一パーティション内のCPUのみに特殊パケットを送信する場合には、図26Bに示すノードマップを用いて、送信先のCPUを識別する。すなわち、CPU#0は、図26Bに例示するノードマップが示すパーティション#A内のCPUに対して、特殊パケットを送信する。
一方、CPU#4は、メモリアクセスを行うために、図26Aに示すノードマップと、図26Cに示すノードマップとを有する。ここで、図26Cは、パーティション#Bを示すノードマップの一例を説明するための図である。図26Cに示す例では、パーティション#Bを示すノードマップは、パーティション#Bに、ビルディングブロック#1のCPU#4およびCPU#5、ビルディングブロック#2のCPU38が存在することを示す。CPU#4は、図26Cに例示するノードマップが示すパーティション#B内のCPUに対して、特殊パケットを送信する。
このように、CPU#1およびCPU#4は、アドレス域とCPUIDとを対応付けたノードマップと、パーティションを示すノードマップとを記憶する。そして、CPU#1およびCPU#4は、アドレス域とCPUIDとを対応付けたノードマップを用いて、他のノードが有するメモリに対して直接メモリアクセスを行う。また、CPU#1は、パーティション#Aを示すノードマップを用いて、特殊パケットの送信を行う。また、CPU#4は、パーティション#Bを示すノードマップを用いて、特殊パケットの送信を行う。
このように、各CPUは、自身を含むパーティションごとに、異なる値を有するノードマップを有してもよい。また、各CPUは、自身を含むパーティションごとに異なる値を有するノードマップを有する場合は、特殊パケットをパーティションを超えた送信を行うことを防ぐことができる。
なお、各CPUは、実施例1と同様、スタートアドレスとアドレスマスク、又は、スタートアドレスとレングスでアクセス対象となるアドレス域を示しても良い。すなわち、CPU#1とCPU#4とは、スタートアドレスとアドレスマスク、又は、スタートアドレスとレングスとを用いて、アクセス対象となるアドレス域を示すノードマップを用いて、アクセス対象となるノードを識別する。また、CPU#1とCPU#4とは、それぞれ異なるパーティションを示すノードマップを用いて、特殊パケットの送信を行う。
1 情報処理システム
2 XB
10〜10e ビルディングブロック
20 ノード
21〜21c CPU
22〜22c メモリ
23、26 通信部
24 サービスプロセッサ
25 制御部
27、27a XB接続部
28 PCIe接続部
30 演算処理部
31 演算部
32 L1キャッシュ
33 L2キャッシュ
34 ノードマップ
35 アドレス変換部
36 キャッシュディレクトリ管理部
37 パケット制御部
38 リクエスト生成部
39 リクエスト受信部
40 ルータ
41 メモリアクセス部
42 PCIe制御部
43 リクエスト生成部
44 PCIeバス制御部

Claims (12)

  1. それぞれがプロセッサ及び記憶装置を備える複数のノードと、前記複数のノード間を接続するインターコネクトとを有する情報処理装置であって、
    前記複数のノードは、それぞれが同一のプログラムを動作させる論理パーティションを形成する複数のノード群として動作し、
    前記ノードの各々は、
    前記ノードを含むノード群が形成する論理パーティションに含まれるプロセッサを識別するプロセッサ識別情報と、当該プロセッサ識別情報が示すプロセッサを備えるノードの記憶装置に割当てられた物理アドレスとを対応付けて記憶する記憶部と、
    論理アドレスと物理アドレスとの変換を行う第1変換部と、
    物理アドレスを、前記記憶部に当該物理アドレスと対応付けて記憶されたプロセッサ識別情報に変換する第2変換部と、
    前記物理アドレス及び前記プロセッサ識別情報を含む転送データを送信する送信部と、 を有することを特徴とする情報処理装置。
  2. 前記記憶部は、各論理パーティションに含まれるプロセッサを識別するプロセッサ識別情報と当該プロセッサ識別情報が示すプロセッサを備えるノードの記憶装置に割当てられた物理アドレスとを対応付けた第1のノードマップと、前記ノードを含むノード群が形成する論理パーティションに含まれるプロセッサのプロセッサ識別情報を含む第2のノードマップとを記憶し、
    前記第2変換部は、前記第1のノードマップを用いて、前記物理アドレスを前記プロセッサ識別情報に変換し、
    前記送信部は、いずれかのノードが有する記憶装置に対して前記プロセッサがアクセスする場合は、前記物理アドレスと前記第2変換部が当該物理アドレスから変換したプロセッサ識別情報とを含む転送データを送信し、前記プロセッサが同一の論理パーティションに含まれるプロセッサに特殊パケットを送信する場合は、前記記憶部が記憶する前記第2のノードマップを用いて、当該特殊パケットを送信する
    ことを特徴とする請求項1に記載の情報処理装置。
  3. 前記プロセッサは、当該プロセッサと同一の論理パーティションに含まれるプロセッサを示す前記第2のノードマップを記憶する前記記憶部を有する
    ことを特徴とする請求項2に記載の情報処理装置。
  4. 前記ノードの各々は、
    他のノードから前記インターコネクトを介して送信された転送データを受信する受信部と、
    前記受信部により受信された転送データに含まれる物理アドレスに基づいて、自ノードの記憶装置のデータ格納領域のうち、自ノード内のアクセスに用いられるローカル領域と、他のノードからもアクセス可能な共有領域とのいずれの領域へのアクセスであるかを判定するローカル判定部と
    を有することを特徴とする請求項1〜3のいずれか1つに記載の情報処理装置。
  5. 前記ノードの各々は、
    前記ノードの各々が備える記憶装置の物理アドレスのうち、所定の位置のビットが同一の値である物理アドレスを前記共有領域に割当てるとともに、前記所定の位置のビットが前記共有領域に割当てた物理アドレスとは異なる値である物理アドレスを前記ローカル領域に割当し、
    前記ローカル判定部は、前記転送データに含まれる物理アドレスのうち、前記所定の位置のビットの値に応じて、前記ローカル領域と前記共有領域とのいずれの領域へのアクセスであるかを判定する
    ことを特徴とする請求項4に記載の情報処理装置。
  6. 前記ノードの各々は、
    前記ノードの各々が備える記憶装置の全物理アドレスを前記ローカル領域と前記共有領域とに分けて割り当て、
    前記ローカル判定部は、前記転送データに含まれる物理アドレスのうち、最上位のビットの値に応じて、前記ローカル領域と前記共有領域とのいずれの領域へのアクセスであるかを判定する
    ことを特徴とする請求項4または5に記載の情報処理装置。
  7. 前記ノードの各々は、
    前記ローカル判定部が前記ローカル領域へのアクセスであると判定した場合には、前記転送データの送信元となるノードに対してアクセスを許可しない旨の否定応答を送信することを特徴とする請求項4〜6のいずれか1つに記載の情報処理装置。
  8. 前記ノードの各々は、前記他のノードから前記転送データを受信した場合には、当該転送データの対象となるデータにつき、自ノードが備える記憶装置のデータをキャッシュした他のノードを示すディレクトリを用いて、自ノードが備える記憶装置上のデータと他のノードがキャッシュしたデータとの同一性を保持するディレクトリ制御部を有することを特徴とする請求項4〜7のいずれか1つに記載の情報処理装置。
  9. 前記ノードの各々は、
    記憶装置からデータをキャッシュするキャッシュメモリと、
    キャッシュミスが発生した場合は、キャッシュミスした物理アドレスが他のノードが有する記憶装置の物理アドレスであるか否かを判別する判別部とをさらに有し、
    前記第2変換部は、前記キャッシュミスした物理アドレスが他のノードが有する記憶装置の物理アドレスであると前記ローカル判定部が判定した場合は、当該物理アドレスをプロセッサ識別情報に変換することを特徴とする請求項4〜8のいずれか1つに記載の情報処理装置。
  10. 前記ノードの各々が備えるプロセッサにより実行される各OSは、アプリケーションから前記共有領域の獲得が要求された場合には、当該アプリケーションが使用する論理アドレスと、前記共有領域に割当てられる物理アドレスとの変換を行うように前記第1変換部を設定することを特徴とする請求項4〜9のいずれか1つに記載の情報処理装置。
  11. 前記情報処理装置は、前記ノードの各々が備える前記記憶部に記憶されたプロセッサ識別情報と物理アドレスとの対応付けを、利用者の指示に従って書換る制御装置をさらに備えることを特徴とする請求項1〜10のいずれか1つに記載の情報処理装置。
  12. それぞれがプロセッサ及び記憶装置を備える複数のノードと前記複数のノード間を接続するインターコネクトとを有する情報処理装置の各ノードが実行するメモリアクセス方法であって、
    前記複数のノードは、それぞれが同一のプログラムを動作させる論理パーティションを形成する複数のノード群を構成し、
    アクセス対象の論理アドレスと物理アドレスとの変換を行い、
    前記ノードを含むノード群が形成する論理パーティションに含まれるプロセッサを識別するプロセッサ識別情報と、当該プロセッサ識別情報が示すプロセッサを備えるノードの記憶装置に割当てられた物理アドレスとを対応付けて記憶する記憶部を参照し、前記物理アドレスを当該物理アドレスと対応付けて記憶されたプロセッサ識別情報に変換し、
    前記物理アドレス及び前記プロセッサ識別情報を含む転送データを送信する
    処理を実行することを特徴とするメモリアクセス方法。
JP2014093197A 2014-04-28 2014-04-28 情報処理装置およびメモリアクセス方法 Pending JP2014160502A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014093197A JP2014160502A (ja) 2014-04-28 2014-04-28 情報処理装置およびメモリアクセス方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014093197A JP2014160502A (ja) 2014-04-28 2014-04-28 情報処理装置およびメモリアクセス方法

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2011279022A Division JP5573829B2 (ja) 2011-12-20 2011-12-20 情報処理装置およびメモリアクセス方法

Publications (1)

Publication Number Publication Date
JP2014160502A true JP2014160502A (ja) 2014-09-04

Family

ID=51612093

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014093197A Pending JP2014160502A (ja) 2014-04-28 2014-04-28 情報処理装置およびメモリアクセス方法

Country Status (1)

Country Link
JP (1) JP2014160502A (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014197402A (ja) * 2014-05-26 2014-10-16 富士通株式会社 情報処理装置、制御方法および制御プログラム
CN109997122A (zh) * 2016-11-30 2019-07-09 株式会社索思未来 信息处理系统、半导体集成电路以及信息处理方法
WO2021045809A1 (en) * 2019-09-04 2021-03-11 Xilinx, Inc. Producer-to-consumer active direct cache transfers
US11586578B1 (en) 2019-04-26 2023-02-21 Xilinx, Inc. Machine learning model updates to ML accelerators
US11693805B1 (en) 2019-07-24 2023-07-04 Xilinx, Inc. Routing network using global address map with adaptive main memory expansion for a plurality of home agents
US11983575B2 (en) 2019-09-25 2024-05-14 Xilinx, Inc. Cache coherent acceleration function virtualization with hierarchical partition hardware circuity in accelerator

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02244253A (ja) * 1989-03-17 1990-09-28 Hitachi Ltd 分散共有メモリを持つマルチプロセッサシステム
JPH0830568A (ja) * 1994-07-20 1996-02-02 Fujitsu Ltd 分散メモリ型並列計算機のキャッシュ制御方式
JPH10240707A (ja) * 1997-02-27 1998-09-11 Hitachi Ltd 主記憶共有型マルチプロセッサ
JP2000067009A (ja) * 1998-08-20 2000-03-03 Hitachi Ltd 主記憶共有型マルチプロセッサ
JP2001147903A (ja) * 1999-09-15 2001-05-29 Internatl Business Mach Corp <Ibm> 効率的なバス機構及びコヒーレンス制御を有する繰り返しチップ構造を有するスケーラブル共用メモリ・マルチプロセッサ・コンピュータ・システム
JP2002229806A (ja) * 2001-02-02 2002-08-16 Hitachi Ltd 計算機システム
JP2007199999A (ja) * 2006-01-26 2007-08-09 Nec Computertechno Ltd マルチプロセッサシステム及びその動作方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02244253A (ja) * 1989-03-17 1990-09-28 Hitachi Ltd 分散共有メモリを持つマルチプロセッサシステム
JPH0830568A (ja) * 1994-07-20 1996-02-02 Fujitsu Ltd 分散メモリ型並列計算機のキャッシュ制御方式
JPH10240707A (ja) * 1997-02-27 1998-09-11 Hitachi Ltd 主記憶共有型マルチプロセッサ
JP2000067009A (ja) * 1998-08-20 2000-03-03 Hitachi Ltd 主記憶共有型マルチプロセッサ
JP2001147903A (ja) * 1999-09-15 2001-05-29 Internatl Business Mach Corp <Ibm> 効率的なバス機構及びコヒーレンス制御を有する繰り返しチップ構造を有するスケーラブル共用メモリ・マルチプロセッサ・コンピュータ・システム
JP2002229806A (ja) * 2001-02-02 2002-08-16 Hitachi Ltd 計算機システム
JP2007199999A (ja) * 2006-01-26 2007-08-09 Nec Computertechno Ltd マルチプロセッサシステム及びその動作方法

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014197402A (ja) * 2014-05-26 2014-10-16 富士通株式会社 情報処理装置、制御方法および制御プログラム
CN109997122A (zh) * 2016-11-30 2019-07-09 株式会社索思未来 信息处理系统、半导体集成电路以及信息处理方法
CN109997122B (zh) * 2016-11-30 2023-06-30 株式会社索思未来 信息处理系统、半导体集成电路以及信息处理方法
US11586578B1 (en) 2019-04-26 2023-02-21 Xilinx, Inc. Machine learning model updates to ML accelerators
US11693805B1 (en) 2019-07-24 2023-07-04 Xilinx, Inc. Routing network using global address map with adaptive main memory expansion for a plurality of home agents
US12045187B2 (en) 2019-07-24 2024-07-23 Xilinx, Inc. Routing network using global address map with adaptive main memory expansion for a plurality of home agents
WO2021045809A1 (en) * 2019-09-04 2021-03-11 Xilinx, Inc. Producer-to-consumer active direct cache transfers
US11113194B2 (en) 2019-09-04 2021-09-07 Xilinx, Inc. Producer-to-consumer active direct cache transfers
US11983575B2 (en) 2019-09-25 2024-05-14 Xilinx, Inc. Cache coherent acceleration function virtualization with hierarchical partition hardware circuity in accelerator

Similar Documents

Publication Publication Date Title
JP5573829B2 (ja) 情報処理装置およびメモリアクセス方法
KR101442913B1 (ko) 정보 처리 장치, 제어 방법, 및 제어 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체
JP6434168B2 (ja) スイッチへのアドレスキャッシュ
KR101476001B1 (ko) 정보 처리 장치, 제어 방법 및 제어 프로그램을 기록한 컴퓨터 판독가능한 기록 매체
KR100465583B1 (ko) 판독 요청을 원격 처리 노드에 추론적으로 전송하는 비정형 메모리 액세스 데이터 처리 시스템 및 이 시스템에서의 통신 방법
US8966222B2 (en) Message passing in a cluster-on-chip computing environment
JP2014160502A (ja) 情報処理装置およびメモリアクセス方法
US20130227219A1 (en) Processor, information processing apparatus, and arithmetic method
US8990513B2 (en) Accelerated recovery for snooped addresses in a coherent attached processor proxy
TW201339836A (zh) 資訊處理設備、算術裝置及資訊傳送方法
US8938587B2 (en) Data recovery for coherent attached processor proxy
US20120124297A1 (en) Coherence domain support for multi-tenant environment
US10437725B2 (en) Master requesting missing segments of a cache line for which the master has coherence ownership
US11449489B2 (en) Split transaction coherency protocol in a data processing system
JP5800058B2 (ja) 情報処理装置、制御方法および制御プログラム
US10394636B2 (en) Techniques for managing a hang condition in a data processing system with shared memory

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150126

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150303

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150430

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20150616