(57)【特許請求の範囲】
【請求項１】
一以上のプロセッサと主記憶装置を有する複数個のノードでシステムを構成する分散共有メモリ装置であって、
前記各ノードに、
インタリーブするノード数を保有するレジスタ、各ノードにユニークに割り当てられた番号を保有するレジスタ、各ノードの主記憶が割り当てられるアドレスレンジの最上位のアドレスを保有するレジスタ、各ノードの主記憶が割り当てられるアドレスレンジの最下位のアドレスを保有するレジスタ、ノード間インタリーブ単位を保有するレジスタ、及びノード番号演算部を有し、前記プロセッサから出力されたリクエストのアドレスと、前記各レジスタがそれぞれ保有するノード数、各ノードにユニークに割り当てられた番号、最上位のアドレス、最下位のアドレス、及びノード間インタリーブ単位にもとづいて、ノード番号を算出するノード間インタリーブ制御部を備え、各ノードの主記憶装置間でインタリーブを行い、
前記ノード間インタリーブ単位が、複数の候補から選択でき、
前記インタリーブが、同じ主記憶容量をもつ２のべき乗個のノードをグループ化して行うものであり、これらのグループのアドレスレンジから主記憶空間が形成されるものである
ことを特徴とする分散共有メモリ装置。
【請求項２】
前記分散共有メモリ装置が、
前記各ノードに、
前記プロセッサから出力されたリクエストのアドレスを、前記ノード間インタリーブ制御部に出力するとともに、このノード間インタリーブ制御部から出力されたノード番号を使用して、このノード番号に対応するノードの主記憶装置へアクセスする処理を行うプロセッサバス制御部を備える
ことを特徴とする請求項１記載の分散共有メモリ装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一以上のプロセッサと主記憶装置を有する複数個のノードで構成されたシステムにおいて、各ノードの主記憶装置間でインタリーブを行う分散共有メモリ装置及び分散処理方法に関する。
【０００２】
【従来の技術】
従来、一つ以上のプロセッサと主記憶装置を有する複数のノードからなるシステムが提案されている。
このようなシステムを用いることにより、システムのスケーラビリティを向上させることができるとともに、同等の性能に対するコストを削減することも可能となった。
また、一のノードの故障などによって、システムがとまることがなく、システムの安定性を向上させることも可能となった。
【０００３】
【発明が解決しようとする課題】
しかしながら、このような従来のシステムにおいては、各ノードの主記憶をスタックして、装置の主記憶空間を形成していた。
このため、複数のノードのプロセッサが、同一のアドレスレンジに対してアクセスを行うと、一つのノードの主記憶にアクセスが集中するため、性能のボトルネックが発生するという問題があった。
【０００４】
本発明は、上記の事情にかんがみなされたものであり、一以上のプロセッサと主記憶装置を有する複数個のノードで構成されたシステムにおいて、複数ノードのプロセッサが同一のアドレスレンジに対してアクセスを行う場合でも、複数のノードの主記憶にアクセスを分散することの可能な分散共有メモリ装置及び分散処理方法の提供を目的とする。
【０００５】
【課題を解決するための手段】
上記目的を達成するため、本発明の請求項１記載の分散共有メモリ装置は、一以上のプロセッサと主記憶装置を有する複数個のノードでシステムを構成する分散共有メモリ装置であって、各ノードに、インタリーブするノード数を保有するレジスタ、各ノードにユニークに割り当てられた番号を保有するレジスタ、各ノードの主記憶が割り当てられるアドレスレンジの最上位のアドレスを保有するレジスタ、各ノードの主記憶が割り当てられるアドレスレンジの最下位のアドレスを保有するレジスタ、ノード間インタリーブ単位を保有するレジスタ、及びノード番号演算部を有し、プロセッサから出力されたリクエストのアドレスと、各レジスタがそれぞれ保有するノード数、各ノードにユニークに割り当てられた番号、最上位のアドレス、最下位のアドレス、及びノード間インタリーブ単位にもとづいて、ノード番号を算出するノード間インタリーブ制御部を備え、各ノードの主記憶装置間でインタリーブを行い、ノード間インタリーブの単位が、複数の候補から選択でき、インタリーブが、同じ主記憶容量をもつ２のべき乗個のノードをグループ化して行うものであり、これらのグループのアドレスレンジから主記憶空間が形成されるものである構成としてある。
分散共有メモリ装置をこのような構成にすれば、主記憶装置の特定の領域へのアクセスが集中する場合のトラフィックを分散させることができる。
これにより、複数のプロセッサが主記憶装置の特定の領域にアクセスした場合でも、トラフィックが各ノードに分散されるため、システムの性能低下を防止することが可能となる。
また、分散共有メモリ装置をこのような構成にすれば、プロセッサによる処理のリクエストに対して、この処理を実行させる主記憶装置を有するノードを、ノード番号演算部により決定することができる。
さらに、分散共有メモリ装置をこのような構成にすれば、主記憶装置の容量や分散共有メモリ装置の使用目的に合わせて、インタリーブするノードの組み合わせを選択することが可能となる。
【０００７】
また、分散共有メモリ装置をこのような構成にすれば、ノード間インタリーブ制御部の設定を変えるだけで、多様な用途に対応したシステムを容易に構成することが可能となる。
また、分散共有メモリ装置をこのような構成にすれば、プロセッサのもつキャッシュのキャッシュラインサイズの整数倍を、ノード間のインタリーブの単位として、柔軟に設定することができる。
これによって、用途に応じて柔軟に変更可能な分散共有メモリシステムを構成することが可能となる。
【０００８】
次に、本発明の請求項２記載の分散共有メモリ装置は、この分散共有メモリ装置が、各ノードに、プロセッサから出力されたリクエストのアドレスを、ノード間インタリーブ制御部に出力するとともに、このノード間インタリーブ制御部から出力されたノード番号を使用して、このノード番号に対応するノードの主記憶装置へアクセスする処理を行うプロセッサバス制御部を備える構成としてある。
分散共有メモリ装置をこのような構成にすれば、プロセッサからのデータ処理リクエストに対し、プロセッサバス制御部を介して、適切なノードの主記憶装置へアクセスすることができる。
【００１５】
【発明の実施の形態】
以下、本発明の実施形態につき、図面を参照して説明する。
［第一実施形態］
まず、本発明の第一実施形態について、図１を参照して説明する。同図は、本実施形態の分散共有メモリ装置の構成を示すブロック図である。
【００１６】
同図に示すように、分散共有メモリ装置には、複数のノードが存在する。本実施形態においては、システム内に８個のノード１０１〜１０８が存在し、これらはシステムバス１０９で接続されている。
本実施形態では、ノード間をシステムバス１０９を用いてバス接続しているが、スター接続で構成することも可能である。
【００１７】
また、各ノードは、複数のプロセッサを有する。図１において、ノード１０１は、４個のプロセッサ１１１〜１１４を有しており、プロセッサバス１１５を介してシステム制御装置１１６に接続されている。
システム制御装置１１６は、システムバス１０９と主記憶装置１１７へ接続する。
本実施形態では、各プロセッサとシステム制御装置１１６を、プロセッサバス１１５を用いてバス接続しているが、スター接続で構成することも可能である。
【００１８】
その他のノード１０２〜１０８についても、ノード１０１と同様の構成を有しており、システム内には合計で３２個のプロセッサと８個の主記憶装置が存在する。
ノード間のインタリーブの単位は、プロセッサのもつキャッシュのキャッシュラインサイズの整数倍である。
本実施形態では、キャッシュラインサイズを１２８バイトとし、ノード間のインタリーブの単位も１２８バイトとする。
【００１９】
次に、図２を用いて、システム制御装置１１６の構成について説明する。同図は、本実施形態の分散共有メモリ装置におけるシステム制御装置の構成を示すブロック図である。
図２において、システム制御装置１１６は、プロセッサバス制御部２１１、主記憶装置インターフェース部２１２、システムバス制御部２１３及びノード間インタリーブ制御部１２１を有している。
【００２０】
プロセッサバス制御部２１１はプロセッサバス１１５へ接続し、主記憶装置インターフェース部２１２は主記憶装置１１７へ接続し、システムバス制御部２１３はシステムバス１０９へ接続する。
また、プロセッサバス制御部２１１は、システムバス制御部２１３と主記憶装置インターフェース部２１２とノード間インタリーブ制御部１２１へ接続し、システムバス制御部２１３は主記憶装置インターフェース部２１２へ接続する。
【００２１】
プロセッサバス制御部２１１は、システム制御装置１１６とプロセッサバス１１５とのデータの入出力を制御するものであり、システムバス制御部２１３は、システム制御装置１１６とシステムバス１０９とのデータの入出力を制御するものである。
また、主記憶装置インターフェース部２１２は、システム制御装置１１６と主記憶装置１１７とのデータの入出力を制御する。
そして、ノード間インタリーブ制御部１２１は、プロセッサバス制御部２１１から入力したデータにもとづいて演算を行い、この演算結果をプロセッサバス制御部２１１へ出力する。
【００２２】
次に、図３を用いて、ノード間インタリーブ制御部１２１の構成について説明する。同図は、本実施形態の分散共有メモリ装置におけるノード間インタリーブ制御部の構成を示すブロック図である。
図３において、ノード間インタリーブ制御部１２１は、レジスタ３１０〜３１３及びノード番号演算部３１４を有している。
【００２３】
本実施形態は、８個のノードで構成されるシステムを想定しており、インタリーブを行うノード数としては、１、２、４、８のいずれかを設定することが可能である。
また、これらの数のノードにより構成されたグループを、混在させることも可能である。
【００２４】
レジスタ３１０〜３１３は、システムの初期化時に、各ノードのプロセッサ又はサービスプロセッサ（図示していない。）によって設定される。
また、これらのレジスタ３１０〜３１３は、それぞれ８ワードのエントリ０〜７を有しており、エントリ０〜７は、それぞれノード１０１〜１０８に対応している。
【００２５】
レジスタ３１０には、各ノードの主記憶が割り当てられるアドレスレンジが、いくつのノード間でインタリーブされるかが設定される。
インタリーブされない場合は１が設定され、２個のノードでインタリーブされる場合は２が設定される。
同様に、４個のノードでインタリーブされる場合は４が、８個のノードでインタリーブされる場合は８が設定される。
【００２６】
レジスタ３１１には、各ノードの主記憶が割り当てられるアドレスレンジがノード間でインタリーブされる場合に、各ノードのインタリーブ番号が設定される。
例えば、８ノードでインタリーブされる場合は、各ノードに対応するエントリには０〜７がユニークに割り当てられ、４ノードでインタリーブされる場合は、インタリーブ対象の各ノードに対応するエントリには０〜３がユニークに割り当てられる。
【００２７】
レジスタ３１２には、各ノードの主記憶が割り当てられるアドレスレンジの最上位のアドレスが設定される。
また、レジスタ３１３には、各ノードの主記憶が割り当てられるアドレスレンジの最下位のアドレスが設定される。
【００２８】
例えば、各ノードに実装される主記憶の増設単位が５１２Ｍバイトで、システムの主記憶が最大１Ｔバイトである場合は、レジスタ３１２及び３１３の各エントリをそれぞれ１１ビットとすればよい。
これらのレジスタ３１２及び３１３に設定される情報は、リクエストアドレスのビット３９−２９に対応するものであり、ノード番号演算の際に、これらの情報が比較される。
【００２９】
この場合のリクエストアドレスとレジスタ３１２及び３１３について、さらに詳細に説明する。
まず、システムの最大メモリ容量を１Ｔバイトとすると、このメモリ空間を表現するためには、４０ビットのアドレスが必要となる（２の４０乗＝１，０９９，５１１，６２７，７７６）。このため、リクエストのアドレスは、ビット３９−０で構成される。
【００３０】
また、１Ｔバイト内の５１２Ｍバイト単位のアドレスを表現するには、アドレスの３９−２９が必要となる（２の２９乗＝５３６，８７０，９１２）。
このため、レジスタ３１２及び３１３も１１ビットであればよく、この１１ビットを、アドレスの３９−２９に対応させて、５１２Ｍバイト単位で、１Ｔバイト内のアドレス空間を指定するために使用する。
【００３１】
また、ノード間でインタリーブが行われる場合、対象のノードに関して、主記憶が割り当てられるアドレスレンジは同じに設定される。
この場合、レジスタ３１２の対象のノードに対応するエントリには同じ最上位アドレスが設定され、レジスタ３１３の対象ノードに対応するエントリには同じ最下位アドレスが設定される。
【００３２】
これらのレジスタ３１０〜３１３への設定を、以下に具体例を挙げて説明する。
例えば、各ノードの主記憶容量が各４Ｇバイトで、８ノード間でインタリーブされる場合は、レジスタ３１０の各エントリには８が設定され、レジスタ３１１の各エントリには０〜７がユニークに設定される。
【００３３】
また、レジスタ３１２の各エントリには０００００１１１１１１（２進法）が設定され、レジスタ３１３の各エントリには０００００００００００（２進法）が設定される。
次に、ノード１０１〜１０４の主記憶容量が各４Ｇバイトで、４ノード間でインタリーブが行われ、ノード１０５〜１０８の主記憶容量が各１Ｇバイトで、４ノード間でインタリーブが行われる場合は、レジスタ３１０の各エントリには４が設定される。
【００３４】
また、レジスタ３１１のノード１０１〜１０４に対応するエントリには、それぞれ０〜３がユニークに設定されるとともに、ノード１０５〜１０８に対応するエントリにもそれぞれ０〜３がユニークに設定される。
さらに、レジスタ３１２のノード１０１〜１０４に対応するエントリには００００００１１１１１（２進法）が設定され、ノード１０５〜１０８に対応するエントリには０００００１００１１１（２進法）が設定される。
【００３５】
また、レジスタ３１３のノード１０１〜１０４に対応するエントリには０００００００００００（２進法）が設定され、ノード１０５〜１０８に対応するエントリには０００００１０００００（２進法）が設定される。
ノード番号演算部３１４は、プロセッサバス制御部２１１から、リクエストアドレス３０１を受け取ると、レジスタ３１０〜３１３の値と演算を行い、そのリクエストのアドレスが割り当てられている主記憶をもつノード番号を算出して、プロセッサバス制御部２１１へ出力する。
【００３６】
このとき、ノード番号演算部３１４は、リクエストアドレス３０１のビット３９−２９と、レジスタ３１２及びレジスタ３１３の値を、各ノードに対応するエントリ毎に比較する。
そして、リクエストアドレス３０１のビット３９−２９が、レジスタ３１２の値以下で、かつ、レジスタ３１３の値以上であるという条件を満たすノードを算出する。
【００３７】
例えば、ノード間でインタリーブが行われない場合は、１個のノードに対応するエントリが上記の条件を満たすため、ノード番号演算部３１４は、このエントリに対応するノード番号を出力する。
また、２個のノード間でインタリーブが行われる場合は、２個のノードに対応するエントリが上記の条件を満たす。
このとき、ノード番号演算部３１４は、レジスタ３１１における上記の条件を満たしたノードに対応するエントリの下位１ビットが、リクエストアドレス３０１のビット７に一致するノード番号を出力する。
【００３８】
さらに、４個のノード間でインタリーブが行われる場合は、４個のノードに対応するエントリが上記の条件を満たす。
このとき、ノード番号演算部３１４は、レジスタ３１１における上記の条件を満たしたノードに対応するエントリの下位２ビットが、リクエストアドレス３０１のビット８−７に一致するノード番号を出力する。
【００３９】
同様にして、８個のノード間でインタリーブが行われる場合は、８個のノードに対応するエントリが上記の条件を満たすため、ノード番号演算部３１４は、レジスタ３１１における上記の条件を満たしたノードに対応するエントリの下位３ビットが、リクエストアドレス３０１のビット９−７に一致するノード番号を出力する。
【００４０】
なお、このときキャッシュラインサイズ（１２８バイト）でインタリーブする場合、アドレスのビット７以上を使用することで１２８バイト単位のアドレスとなる（２の７乗＝１２８）。
このため、上記場合においては、リクエストアドレス３０１の７ビット以上を使用し、８ノードでインタリーブする場合は、８ノードを表現するために３ビット必要であるため、アドレスのビット９−７を使用している。
【００４１】
次に、本実施形態における分散共有メモリ装置の動作について、図２及び図３を用いて説明する。
プロセッサから主記憶へアクセスするリクエストが、プロセッサバス１１５を介して発行されると、プロセッサバス制御部２１１は、そのリクエストのアドレス３０１をノード間インタリーブ制御部１２１へ出力する。
【００４２】
ノード間インタリーブ制御部１２１のノード番号演算部３１４は、このリクエストアドレス３０１及びレジスタ３１０〜３１３の値を入力するとともに、これらの情報にもとづいてリクエストのアドレスが割り当てられている主記憶をもつノード番号３０２を算出する。
【００４３】
そして、ノード番号演算部３１４は、算出したノード番号３０２をプロセッサバス制御部２１１へ出力する。
プロセッサバス制御部２１１は、リクエストのターゲットの主記憶をもつノードのノード番号３０２を使用して、主記憶へアクセスするリクエストの処理を行う。
以上のように、本実施形態によれば、プロセッサがノードを意識することなく処理のリクエストを発行しても、ノード間へリクエストが均等に分散することとなる。
【００４４】
［第二実施形態］
次に、本発明の第二実施形態につき、図４を参照して説明する。同図は、本実施形態の分散共有メモリ装置におけるノード間インタリーブ制御部の構成を示すブロック図である。
本実施形態は、ノード間のインタリーブの単位を、１２８バイトと１６Ｍバイトから選択できるようにした点で第一実施形態と相違する。
【００４５】
ノード間のインタリーブの単位は、第一実施形態におけるようにキャッシュラインサイズと同じにする以外に、ＯＳの管理するページ単位にすることなども可能である。
これ以外の構成については、第一実施形態と同様であり、図１及び図２に示すものを用いることができる。
【００４６】
図４において、レジスタ３１０〜３１３については、第一実施形態におけるものと同様である。
レジスタ３１６は、ノード間のインタリーブの単位を指定するレジスタであり、システム初期化時に、各ノードのプロセッサや、サービスプロセッサ（図示はしていない。）により設定される。
本実施形態においては、レジスタ３１６の値が０（２進法）の場合は、１２８バイト単位でノード間のインタリーブが行われることを指定し、１（２進法）の場合は１６Ｍバイトの単位でノード間のインタリーブが行われることを指定する。
【００４７】
ノード番号演算部３１５は、プロセッサバス制御部２１１から、リクエストアドレス３０１を受け取ると、レジスタ３１０〜３１３及び３１６の値と演算を行い、そのリクエストのアドレスが割り当てられている主記憶をもつノードのノード番号を算出して、プロセッサバス制御部２１１へ出力する。
レジスタ３１６に設定される値が０（２進法）である場合は、ノード間のインタリーブの単位は、１２８バイトであるため、ノード番号演算部３１５は、上述と同様にしてノード番号３０２を算出する。
【００４８】
すなわち、ノード番号演算部３１５は、リクエストアドレス３０１のビット３９−２９と、レジスタ３１２及びレジスタ３１３の値を、各ノードに対応するエントリ毎に比較する。
そして、リクエストアドレス３０１のビット３９−２９が、レジスタ３１２の値以下で、かつ、レジスタ３１３の値以上であるノードを算出する。
【００４９】
例えば、ノード間でインタリーブが行われない場合は、１個のノードに対応するエントリが上記の条件を満たすため、ノード番号演算部３１５は、このエントリに対応するノード番号を出力する。
また、２個のノード間でインタリーブが行われる場合は、２個のノードに対応するエントリが上記の条件を満たす。
このとき、ノード番号演算部３１５は、レジスタ３１１における上記の条件を満たしたノードに対応するエントリの下位１ビットが、リクエストアドレス３０１のビット７に一致するノード番号を出力する。
【００５０】
さらに、４個のノード間でインタリーブが行われる場合は、４個のノードに対応するエントリが上記の条件を満たす。
このとき、ノード番号演算部３１５は、レジスタ３１１における上記の条件を満たしたノードに対応するエントリの下位２ビットが、リクエストアドレス３０１のビット８−７に一致するノード番号を出力する。
【００５１】
同様にして、８個のノード間でインタリーブが行われる場合は、８個のノードに対応するエントリが上記の条件を満たすため、ノード番号演算部３１５は、レジスタ３１１における上記の条件を満たしたノードに対応するエントリの下位３ビットが、リクエストアドレス３０１のビット９−７に一致するノード番号を出力する。
【００５２】
レジスタ３１６に設定される値が１（２進法）である場合は、ノード間のインタリーブの単位は、１６Ｍバイトと指定される。
このとき、アドレスの２４以上を使用することにより１６Ｍ単位のアドレスとなるため（２の２４乗＝１６，７７７，２１６）、アドレスの２４以上を使用する。そして、８ノードでインタリーブする場合は、８ノードを表現するために３ビットが必要であるため、アドレスの２６−２４を使用することとなる。
【００５３】
この場合も、インタリーブ単位が１２８バイトの場合と同様に、ノード番号演算部３１５は、リクエストアドレス３０１のビット３９−２９と、レジスタ３１２及びレジスタ３１３の値を、各ノードに対応するエントリ毎に比較する。
そして、リクエストアドレス３０１のビット３９−２９が、レジスタ３１２の値以下で、かつ、レジスタ３１３の値以上であるノードを算出する。
【００５４】
ここで、ノード間でインタリーブが行われない場合は、１個のノードに対応するエントリが上記の条件を満たすため、ノード番号演算部３１５は、このエントリに対応するノード番号を出力する。
また、２個のノード間でインタリーブが行われる場合は、２個のノードに対応するエントリが上記の条件を満たす。
このとき、ノード番号演算部３１５は、レジスタ３１１における上記の条件を満たしたノードに対応するエントリの下位１ビットが、リクエストアドレス３０１のビット２４に一致するノード番号を出力する。
【００５５】
さらに、４個のノード間でインタリーブが行われる場合は、４個のノードに対応するエントリが上記の条件を満たす。
このとき、ノード番号演算部３１５は、レジスタ３１１における上記の条件を満たしたノードに対応するエントリの下位２ビットが、リクエストアドレス３０１のビット２５−２４に一致するノード番号を出力する。
【００５６】
そして、８個のノード間でインタリーブが行われる場合は、８個のノードに対応するエントリが上記の条件を満たすため、ノード番号演算部３１５は、レジスタ３１１における上記の条件を満たしたノードに対応するエントリの下位３ビットが、リクエストアドレス３０１のビット２６−２４に一致するノード番号を出力する。
このように、本実施形態によれば、ノード間のインタリーブの単位を複数の候補から選択することができ、多様な用途に対応したシステムを構成することが可能となる。
【００５７】
【発明の効果】
以上のように、本発明によれば、ノード間で主記憶のインタリーブが可能となるため、主記憶の特定の領域へのアクセスが集中する場合のトラフィックを分散させることができる。
これによって、複数のプロセッサが主記憶の特定の領域にアクセスした場合でも、トラフィックがノード間に分散されるため、装置の性能低下を防止することが可能となる。
【００５８】
また、本発明においては、同じ主記憶容量をもつ、２のべき乗個のノードをグループにして、ノード間のインタリーブを設定することができ、インタリーブを行うノードのグループを複数設定した場合は、これらのアドレスレンジをスタックして、主記憶空間を形成することができる。
これにより、主記憶の容量や装置の使用目的に合わせて、インタリーブするノードの組み合わせを選択できるという効果が得られる。
【００５９】
さらに、本発明においては、ノード間のインタリーブの単位を複数の候補から選択することができる。
このため、その設定を変えるだけで、多様な用途に対応したシステムを構成することが可能となる。
【図面の簡単な説明】
【図１】本発明の実施形態の分散共有メモリ装置の構成を示すブロック図である。
【図２】本発明の実施形態の分散共有メモリ装置におけるシステム制御装置の構成を示すブロック図である。
【図３】本発明の第一実施形態のシステム制御装置におけるノード間インタリーブ制御部の構成を示すブロック図である。
【図４】本発明の第二実施形態のシステム制御装置におけるノード間インタリーブ制御部の構成を示すブロック図である。
【符号の説明】
１０１〜１０８  ノード
１０９  システムバス
１１１〜１１４  プロセッサ
１１５  プロセッサバス
１１６  システム制御装置
１１７  主記憶装置
１２１  ノード間インタリーブ制御装置
２１１  プロセッサバス制御装置
２１２  主記憶装置インターフェース部
２１３  システムバス制御部
３１０〜３１３，３１６  レジスタ
３１４，３１５  ノード番号演算部
【図１】
0003808373.tif 000002
【図２】
0003808373.tif 000003
【図３】
0003808373.tif 000004
【図４】
0003808373.tif 000005