(57)【特許請求の範囲】
【請求項１】
複数のノードを具備する分散共有メモリ型マルチプロセッサシステムにおいて、
前記複数のノードの各々は、
アクセス量が閾値を超えた第１メモリの一部のデータを、他のノードの第２メモリに移動し、前記第１メモリと前記第２メモリとでインタリーブを行うメモリ制御部を備え、
前記複数のノードは、前記第１メモリを備える第１ノードと、前記第２メモリを備える第２ノードを含み、
前記第１ノードは現用ノードであり、前記第２ノードは、障害が発生した現用ノードの代わりに用いられる予備ノードである
分散共有メモリ型マルチプロセッサシステム。
【請求項２】
請求項１に記載の分散共有メモリ型マルチプロセッサシステムにおいて、
前記複数のノードの各々は、
フレームに付与される宛先アドレスと、移動先のメモリ上のアドレスとを対応付けて保持するルーティングレジスタと、
前記複数のノードのいずれかのメモリに対するアクセス量に基づいて、前記ルーティングレジスタの設定を変更するルーティング設定部と、
前記ルーティングレジスタに基づいて、入力したフレームの宛先アドレスに対応するメモリに前記フレームを出力するトランザクションルーティング制御部と、
を備え、
前記第１メモリに対するアクセス量が閾値を超える場合、前記複数のノードの各々の前記ルーティング設定部は、各々の前記ルーティングレジスタにおいて第１宛先アドレスに対応付けられているメモリを、前記第１メモリから前記第２メモリに変更し、
前記複数のノードの各々の前記トランザクションルーティング制御部は、設定が変更された前記ルーティングレジスタに基づいて、前記第１宛先アドレスが付与されたフレームを前記第２メモリに出力する
分散共有メモリ型マルチプロセッサシステム。
【請求項３】
請求項２に記載の分散共有メモリ型マルチプロセッサシステムにおいて、
前記第１メモリに対するアクセス量が閾値を超えた状態から閾値以下に変化した場合、前記複数のノードの各々の前記ルーティング設定部は、各々の前記ルーティングレジスタにおいて第１宛先アドレスに対応付けられている前記第２メモリ上のアドレスを、前記第１メモリ上のアドレスに変更し、
前記複数のノードの各々の前記トランザクションルーティング制御部は、設定が変更された前記ルーティングレジスタに基づいて、前記第１宛先アドレスが付与されたフレームを前記第１メモリに出力する
分散共有メモリ型マルチプロセッサシステム。
【請求項４】
請求項１から３のいずれか１項に記載の分散共有メモリ型マルチプロセッサシステムにおいて、
前記第１ノードは、
前記第１メモリに対するアクセス量が閾値を超える場合、前記第１メモリ上の所定のアドレスに対応する第１領域へのトランザクションを待機させ、前記第１領域内のデータを前記第２メモリ上の第２領域にコピーする第１メモリコピー実行制御部を更に具備する
分散共有メモリ型マルチプロセッサシステム。
【請求項５】
請求項４に記載の分散共有メモリ型マルチプロセッサシステムにおいて、
前記第２ノードは、
前記第１メモリに対するアクセス量が閾値を超えた状態から閾値以下に変化した場合、前記第２領域へのトランザクションを待機させ、前記第２領域内のデータを前記第１領域にコピーする第２メモリコピー実行制御部を更に具備する
分散共有メモリ型マルチプロセッサシステム。
【請求項６】
請求項１から５のいずれか１項に記載の分散共有メモリ型マルチプロセッサシステムにおいて、
前記第１ノードは、
前記第１メモリに対するアクセス量を監視する監視部を更に具備し、
前記複数のノードの各々のルーティング設定部は、前記監視部における監視結果に基づいて、各々の前記ルーティングレジスタの設定を変更する
分散共有メモリ型マルチプロセッサシステム。
【請求項７】
請求項１から６のいずれか１項に記載の分散共有メモリ型マルチプロセッサシステムで利用される前記第１ノードである
ノード。
【請求項８】
請求項１から６のいずれか１項に記載の分散共有メモリ型マルチプロセッサシステムで利用される前記第２ノードである
ノード。
【請求項９】
複数のノードを具備する分散共有メモリ型マルチプロセッサシステムにおける負荷分散方法において、
メモリ制御部が、アクセス量が閾値を超えた現用ノードの第１メモリの一部のデータを、障害が発生した現用ノードの代わりに用いられる予備ノードの第２メモリに移動するステップと、
前記メモリ制御部が、前記第１メモリと前記第２メモリとでインタリーブを行うステップと、
を具備する負荷分散方法。
【請求項１０】
請求項９に記載の負荷分散方法において、
ルーティングレジスタが、フレームに付与される宛先アドレスと、移動先のメモリ上のアドレスとを対応付けて保持するステップと、
ルーティング設定部が、前記複数のノードのいずれかのメモリに対するアクセス量に基づいて、前記ルーティングレジスタの設定を変更するステップと、
トランザクションルーティング制御部が、前記ルーティングレジスタに基づいて、入力したフレームの宛先アドレスに対応するメモリに前記フレームを出力するステップと、
を備え、
前記設定を変更するステップは、前記第１メモリに対するアクセス量が閾値を超える場合、前記ルーティング設定部が、前記複数のノードの各々の前記ルーティングレジスタにおいて第１宛先アドレスに対応付けられているメモリを、前記第１メモリから前記第２メモリに変更するステップを備え、
前記フレームを出力するステップは、前記トランザクションルーティング制御部が、前記設定が変更されたルーティングレジスタに基づいて、前記第１宛先アドレスが付与されたフレームを前記第２メモリに出力するステップを備える
負荷分散方法。
【請求項１１】
請求項１０に記載の負荷分散方法において、
前記設定を変更するステップは、前記第１メモリに対するアクセス量が閾値を超えた状態から閾値以下に変化した場合、前記ルーティング設定部が、前記複数のノードの各々の前記ルーティングレジスタにおいて第１宛先アドレスに対応付けられている前記第２メモリ上のアドレスを、前記第１メモリ上のアドレスに変更するステップを備え、
前記フレームを出力するステップは、前記トランザクションルーティング制御部が、前記設定が変更されたルーティングレジスタに基づいて、前記第１宛先アドレスが付与されたフレームを前記第１メモリに出力するステップを備える
負荷分散方法。
【請求項１２】
請求項９から１１のいずれか１項に記載の負荷分散方法において、
前記第１メモリに対するアクセス量が閾値を超える場合、第１メモリコピー実行制御部が、前記第１メモリ上の所定のアドレスに対応する第１領域へのトランザクションを待機させ、前記第１領域内のデータを前記第２メモリ上の第２領域にコピーするステップを更に具備する
負荷分散方法。
【請求項１３】
請求項１２に記載の負荷分散方法において、
前記第１メモリに対するアクセス量が閾値を超えた状態から閾値以下に変化した場合、第２メモリコピー実行制御部が、前記第２領域へのトランザクションを待機させ、前記第２領域内のデータを前記第１領域にコピーするステップを更に具備する
負荷分散方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサシステムに関し、特に、分散共有メモリ型マルチプロセッサシステムに関する。
【背景技術】
【０００２】
分散メモリによるスケーラビリティと、共有メモリによる並列プログラミングを両立させた分散共有メモリ（ＤＳＭ：Ｄｉｓｔｒｉｂｕｔｅｄ  Ｓｈａｒｅｄ  Ｍｅｍｏｒｙ）型マルチプロセッサシステムが注目されている。分散共有メモリ型マルチプロセッサは、１つ以上のプロセッサとメモリ（主記憶装置）とで構成されるノードを複数備える。各ノードは、メモリへのアクセスを制御するメモリコントローラを備える。メモリコントローラは、自ノード又は他ノードにおけるプロセッサからのトランザクションに応じて、自身が管理するメモリへのアクセスを制御する。
【０００３】
このような分散共有メモリ型マルチプロセッサシステムでは、複数のプロセッサが発行するメモリアクセスリクエストが、ある１つのメモリコントローラが管理するメモリに集中的にアクセスされる場合がある。このような場合、当該メモリコントローラにおける負荷が増大するため、システム全体におけるメモリコントローラの作業負荷が不均一となり、システム全体における性能が低下する恐れがある。
【０００４】
このような負荷の集中を防止するため、負荷を分散させることは有効である。例えば、負荷分散に関連する技術が、特開２０００−１３７６９２号公報（特許文献１参照）、特開２００４−０１３５６７号公報（特許文献２参照）、特開平０７−２７１７３６号公報（特許文献３参照）に記載されている。これらの技術では、ソフトウェアによるメモリ空間の割り当て変更や、プログラムを実行するプロセスの割り当てを変更することによって、コントローラに集中した作業負荷を分散化している。
【０００５】
しかし、上述の特許文献に記載の技術では、分散共有メモリ型マルチプロセッサシステムにおいて負荷分散するために、ソフトウェア（ＯＳ）によってシステムで使用するメモリ領域を変更している。すなわち、負荷分散を行うため、各ノードのプロセッサによるアドレス変換やマッピングの再割り当てが必要となる。
【０００６】
又、ハードウェアの持つ性能測定機構においてメモリアクセスの偏りを特定し、ソフトウェア的な性能チューニングやアドレスインタリーブ方式へのモード変更によりメモリアクセスの偏りを均等化することで性能改善を図る方法が、特開２００６−２３５７６１号公報に記載されている（特許文献４参照）。しかしながら、このような動作モードの変更にはシステムをリブートさせる必要がある。
【０００７】
以上のように、特許文献に記載の技術では、ソフトウェアによるプログラムの最適化が行われ、あるいは一般的なメモリのアクセス方式として利用されているスタックモードやアドレスインタリーブモードを切り替えることで性能改善を図っている。しかし、メモリへのアクセス量に基づいて動的にこれらのモード切り替えを行うことは困難であるため、モードを切り替える際にはシステムのリブートが必要である。又、ソフトウェアによって負荷分散を行うため、プロセッサに対する処理負荷が増大するとともに、負荷分散処理のため、大幅なプログラムの追加や変更が必要となる。
【０００８】
一方、特開２００６−２４３８５２号公報には、運用系のメモリに何らかの障害が発生した場合、運用系メモリの全データを待機系のメモリにコピーし、次後、待機系メモリを運用系のメモリとして使用する技術が記載されている（特許文献５参照）。又、特開平０９−１７９８３４号公報には、メモリの使用状況を監視し、監視結果に応じてメモリの確保／開放を行う技術が記載されている（特許文献６参照）。しかし、これらの特許文献にも、システムのリブートを必要とせず、プロセッサの処理負荷が少ない負荷分散方法は記載されていない。
【特許文献１】特開２０００−１３７６９２号公報
【特許文献２】特開２００４−０１３５６７号公報
【特許文献３】特開平０７−２７１７３６号公報
【特許文献４】特開２００６−２３５７６１号公報
【特許文献５】特開２００６−２４３８５２号公報
【特許文献６】特開平０９−１７９８３４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明の目的は、システムのリブートを必要せずに負荷分散が行える分散共有メモリ型マルチプロセッサシステム、それに用いられるノード、及び負荷分散方法を提供することにある。
【００１０】
本発明の他の目的は、分散共有メモリ型マルチプロセッサシステムにおいて負荷分散を行うプロセッサの処理負荷を軽減することにある。
【課題を解決するための手段】
【００１１】
本発明による分散共有メモリ型マルチプロセッサシステムは、複数のノードを具備する。複数のノードの各々は、アクセス量が閾値を超えた第１メモリの一部のデータを、他のノードの第２メモリに移動し、第１メモリと第２メモリとでインタリーブを行うメモリ制御部を備える。
【００１２】
又、本発明によるノードは、上述の分散共有メモリ型マルチプロセッサシステムにおいて第１メモリを備える現用ノードである。あるいは、本発明によるノードは、上述の分散共有メモリ型マルチプロセッサシステムにおいて第２メモリを備える予備ノードである。
【００１３】
更に、本発明による負荷分散方法は、複数のノードを具備する分散共有メモリ型マルチプロセッサシステムにおける負荷分散方法である。本発明による負荷分散方法は、アクセス量が閾値を超えた第１メモリの一部のデータを、他のノードの第２メモリに移動するステップと、第１メモリと第２メモリとでインタリーブを行うステップとを具備する。
【発明の効果】
【００１４】
本発明による分散共有メモリ型マルチプロセッサシステム、それに用いられるノード、及び負荷分散方法によれば、システムをリブートせずに負荷分散を行うことができる。
【００１５】
又、分散共有メモリ型マルチプロセッサシステムにおいて負荷分散を行うプロセッサの処理負荷を軽減することができる。
【発明を実施するための最良の形態】
【００１６】
以下、添付図面を参照して、本発明による分散共有メモリ型マルチプロセッサシステム及び負荷分散方法の実施の形態を説明する。図面において同一、又は類似の参照符号は、同一、類似、又は等価な構成要素を示している。
【００１７】
（概要）
分散配置されたある１つのメモリコントローラが管理するメモリに対して、複数のプロセッサから集中的にアクセスされると、当該メモリコントローラが管理するメモリアクセスレイテンシやスループットが悪化し、システム全体の処理能力低下の要因となる。
【００１８】
本発明による分散共有メモリマルチプロセッサでは、システム内のメモリに対するアクセス量をソフトウェアにより監視する。そして、この監視によって負荷が集中していると特定されたメモリの内容の一部を、ハードウェアによって他のメモリコントローラが管理するメモリへ移動させる。その後、移動したメモリの内容に対応するメモリアドレスにアクセスするリクエストは、移動後のメモリにアクセスするように制御することで、ある１つのメモリコントローラが管理するメモリへの集中したアクセスを、他のメモリコントローラが管理するメモリへのアクセスとして分散させる。
【００１９】
本発明では、ハードウェアによってメモリの一部のデータを他のメモリに移動させる。このため、システム運用中にメモリの一部を移動させることが可能であり、システムのリブートを行うことなく、動的に負荷分散させることが可能である。又、メモリ移動後もハードウェアにより、使用するメモリへの経路を変更するため、アドレス変換やメモリマッピングの再割り当てが不要であり、ＯＳやソフトウェアに影響を及ぼすことなく、運用が可能となる。
【００２０】
（構成）
図１は、本発明による分散共有メモリ型マルチプロセッサシステムの実施の形態における構成図である。図１を参照して、本発明による分散共有メモリ型マルチプロセッサシステムは、ノード間インタフェース３００を介して相互に接続された複数のノード１００〜１０２、２００を具備する。ここで、ノード１００〜１０２、２００のそれぞれは、１つ以上のＣＰＵとメモリ（主記憶装置）を備えるコンピュータ装置である。ノード１００〜１０２、２００のそれぞれにおけるメモリは、それぞれが備えるメモリコントローラ（メモリ制御部１１５）によって管理される。ここで、ノード１００〜１０２は、現用系のノードとして使用され、ノード２００は、現用系のノードに何らかの障害が発生した場合に当該現用系ノードの代わりに処理を行う予備系のノードである。現用系のノード１００〜１０２のそれぞれにおける複数のＣＰＵは、分散共有しているそれぞれのメモリ１２３に対してアクセスすることができる。予備系として用いられるノード２００に対するアクセスは行われていない。しかし、ノード２００が現用系の替わりに用いられる場合、ノード１００〜１０２と同様に動作するため、ノード２００の構成はノード１００〜１０２と同様な構成となっている。
【００２１】
ノード１００〜１０２のそれぞれは、メモリ１２３及びメモリ１２３を管理するメモリ制御部１１５を備える。ノード１００〜１０２のそれぞれは、自ノード内のメモリ１２３のみならず、他のノードのメモリ１２３にもアクセスすることができる。予備系として用いられるノード２００は、メモリ２２３及びメモリ２２３を管理するメモリ制御部２１５を備える。ノード１００〜１０２のいずれかメモリ１２３に対するアクセス量が閾値を超える場合、当該メモリ１２３の一部の領域に格納されたデータは、ノード２００のメモリ２２３に移される。そして、メモリ１２３に対するアクセス量が閾値以下に減少するまで当該メモリ１２３の一部の領域に対するアクセスは、メモリ２２３に対するアクセスに変更される。
【００２２】
図２を参照して、本発明によるノード１００の実施の形態における構成の詳細を説明する。上述のように、ノード１０１、１０２、２００の構成は、ノード１００と同様であるため、その説明は省略する。ただし、予備系として使用されるノード２００において、現用系と異なる動作については後述する。以下では、自ノード（ノード１００）の構成について説明する場合、単に名称のみで説明する。例えば、「ノード１００のメモリ１２３にアクセスする」と説明する場合、単に「メモリ１２３にアクセスする」とし、「ノード１００のメモリ１２３から他ノードのメモリ１２３にデータを移動させる」と説明する場合、「メモリ１２３から他ノードのメモリ１２３にデータを移動する」とする。
【００２３】
ノード１００は、１つ以上のＣＰＵを含むＣＰＵ群１０３、ＣＰＵ群１０３を管理するＣＰＵ制御部１０９、メモリ（Ｍｅｍｏｒｙ）１２３、メモリ１２３を管理するメモリ制御部１１５、メモリ負荷監視部１２５を備える。本実施の形態におけるＣＰＵ群１０３は、４つのＣＰＵ１０５〜１０８を備える。又、ノード１００〜１０２、２００のそれぞれにおけるＣＰＵ群１０３が備えるＣＰＵの数や処理能力は、同じでも異なってもどちらでも良い。
【００２４】
ＣＰＵ制御部１０９は、ＣＰＵトランザクション制御部（ＣＰＵ  ＴＸＮ制御部）１１０、ルーティング制御部１１１、セレクタ１１２、１１３、トランザクション受信制御部（ＴＸＮ受信制御部）１１４を備える。
【００２５】
ＣＰＵ  ＴＸＮ制御部１１０は、ＣＰＵ１０５〜１０８のいずれか（ＣＰＵ群１０３）から発行されるリクエストや、ＣＰＵ１０５〜１０８のいずれか（ＣＰＵ群１０３）へのリプライを制御する。詳細には、ＣＰＵ  ＴＸＮ制御部１１０は、ＣＰＵ１０３からのリクエスト及びリプライを処理し、セレクタ１１２へ出力する。あるいは、ルーティング制御部１１１から受け付けるＣＰＵ群１０３へのリクエスト及びリプライの処理を行い、ＣＰＵ群１０３への出力を制御する。
【００２６】
ルーティング制御部１１１は、他ノードから自ノードへ受け付けたリクエスト及びリプライのルーティングを行う。メモリ１２３へのリクエストであればセレクタ１１２へ出力し、ＣＰＵ群１０３へのリクエスト及びリプライであれば、ＣＰＵ  ＴＸＮ制御部１１０へ出力する。
【００２７】
セレクタ１１２は、ＣＰＵ  ＴＸＮ制御部１１０から受け付けたリクエスト及びリプライと、ルーティング制御部１１１から受け付けたリクエストの一方を選択し、メモリ制御部１１５（後述するトランザクション実行管理部１１６）へ出力する。
【００２８】
セレクタ１１３は、メモリ制御部１１５（後述するメモリトランザクションルーティング制御部１１９）から受け付けたＣＰＵ群１０３へのリプライと、ＴＸＮ受信制御部１１４において他ノードから受け付けたＣＰＵ群１０３へのリクエスト及びリプライの一方を選択して、ルーティング制御部１１１へ出力する。
【００２９】
ＴＸＮ受信制御部１１４は、他ノードから受け付けた自ノードへのリクエスト及びリプライを制御し、セレクタ１１３へ出力する。
【００３０】
メモリ制御部１１５は、トランザクション実行管理部（ＴＸＮ実行管理部）１１６、メモリコピー実行制御部（ＭｅｍＣｏｐｙ実行制御部）１１７、セレクタ１１８、１２２、メモリトランザクションルーティング制御部（ＭｅｍＴＸＮルーティング制御部）１１９、メモリアクセス制御部（ＭｅｍＡｃｃｅｓｓ制御部）１２０、メモリライト生成部（ＭｅｍＷｒｉｔｅ生成部）１２１を備える。
【００３１】
ＴＸＮ実行管理部１１６は、ＣＰＵ制御部１０９（セレクタ１１２）から受け付けたトランザクション（リクエスト及びリプライ、略称：ＴＸＮ）の実行制御を行う。ＴＸＮ実行管理部１１６は、メモリ１２３の一部の領域のデータをノード２００のメモリ２２３にコピーしている間、セレクタ１１２からのトランザクションの待ち合わせを行う。通常モード時、ＴＸＮ実行管理部１１６は、セレクタ１１２からのトランザクションをセレクタ１１８に出力する。ＴＸＮ実行管理部１１６は、ＭｅｍＣｏｐｙ実行制御部１１７からの待ち合わせ指示（待機指示）に応じて、セレクタ１１２から受け付けたトランザクションの実行を待ち合わせる。この際、コピー対象となるアドレス範囲（以下、コピー領域３００と称す）に対するトランザクションのみを待ち合わせることが好ましい。データのコピーが終了し、トランザクションの実行が可能となる場合、すなわち、ＭｅｍＣｏｐｙ実行制御部１１７から待ち合わせ解除の指示（解除指示）を受け付けると、ＴＸＮ実行管理部１１６は、待ち合わせていたトランザクションをセレクタ１１８に出力する。これにより、メモリ１２３においてコピー中のアドレス範囲（コピー領域３００）に対するリクエストを停止し、メモリ１２３におけるデータの一貫性を保証することができる。
【００３２】
ＭｅｍＣｏｐｙ実行制御部１１７は、メモリ１２３のアクセス量や使用率が閾値を超えた高負荷状態である場合、メモリ１２３の一部又は全てを物理的に移動させるために、メモリ１２３における所定のアドレス範囲（コピー領域３００）内のデータを、予備系のノード２００のメモリ２２３にコピーさせる制御を行う。詳細には、ＭｅｍＣｏｐｙ実行制御部１１７は、メモリ負荷監視部１２５からのコピー動作開始指示（メモリコピー開始指示）に応じて、メモリ１２３におけるコピー領域３００からデータをリードするためのメモリリードリクエスト（以下メモリコピーリクエストと称す）を生成し、セレクタ１１８に出力する。ここで、ＭｅｍＣｏｐｙ実行制御部１１７はメモリ負荷監視部１２５から、メモリコピー開始指示に先んじて、予備系のメモリ２２３に移動させるメモリブロック（コピー領域３００）のアドレス範囲と、コピー先となるメモリ２２３のメモリブロック（コピー領域４００）のアドレス範囲を特定するための情報が設定される。この情報は、例えば、メモリ１２３において高負荷状態として検出された高負荷領域１０のアドレス範囲を示す情報である。
【００３３】
又、ＭｅｍＣｏｐｙ実行制御部１１７は、コピー領域３００からメモリ２２３にデータをコピーしている間、メモリ１２３のデータ一貫性を保証するため、ＴＸＮ実行管理部１１６に対し待機指示を通知する。この際、ＭｅｍＣｏｐｙ実行制御部１１７は、コピー領域３００となるアドレス範囲をＴＸＮ実行管理部１１６に通知する。メモリコピーが完了すると、ＭｅｍＣｏｐｙ実行制御部１１７は、ソフトウェアに対して終了通知を行う。この通知方法は、割り込みであっても、ソフトウェアにより、フラグをポーリングさせる方法でも良い。この際、ＭｅｍＣｏｐｙ実行制御部１１７は、ＴＸＮ実行管理部１１６に対し、待ち合わせを解除するための解除指示を通知する。
【００３４】
セレクタ１１８は、ＴＸＮ実行管理部１１６から出力されるリクエスト及びリプライ（通常のトランザクション）と、ＭｅｍＣｏｐｙ実行制御部１１７より発行されるメモリコピーリクエストの一方を選択し、ＭｅｍＴＸＮルーティング制御部１１９に出力する。セレクタ１１８は、メモリコピー動作が行われていない通常モード時は、ＴＸＮ実行管理部１１６からの出力を選択する。
【００３５】
ＭｅｍＴＸＮルーティング制御部１１９は、セレクタ１１８より出力されるリクエスト及びリプライのルーティングを行う。メモリ１２３へのアクセスであれば、ＭｅｍＡｃｃｅｓｓ制御部１２０へ出力し、他ノードのメモリ１２３又はメモリ２２３へのアクセスであれば、セレクタ１２２へ出力する。又、ＭｅｍＴＸＮルーティング制御部１１９は、メモリ１２３から読み出したリプライがＣＰＵ群１０３行きであれば、ＭｅｍＡｃｃｅｓｓ制御部１２０から受け付けたリプライをセレクタ１１３へ出力し、他のノードのＣＰＵ群１０３行きであれば、セレクタ１２２に出力する。
【００３６】
又、ＭｅｍＴＸＮルーティング制御部１１９は、アクセス先のメモリを決定するルーティングレジスタを備える。ルーティングレジスタには、フレームヘッダに付与される宛先アドレスとメモリ上のアドレスが対応付けて設定される。ＭｅｍＴＸＮルーティング制御部１１９は、ルーティングレジスタを参照して、宛先アドレスに対応するメモリ上のアドレスをトランザクションの宛先アドレスとして決定し、当該メモリに出力する。
【００３７】
ＭｅｍＡｃｃｅｓｓ制御部１２０は、メモリ１２３に対するアクセス制御を行う。ＭｅｍＴＸＮルーティング制御部１１９からメモリ１２３へのリクエストを受け付け、メモリ１２３に対するライト制御又はリード制御を行う。ＭｅｍＡｃｃｅｓｓ制御部１２０は、ＭｅｍＴＸＮルーティング制御部１１９より受け付けたリクエストを実行し、リプライを生成してＭｅｍＴＸＮルーティング制御部１１９へ返却する。又、ＭｅｍＡｃｃｅｓｓ制御部１２０は、メモリコピーリクエストを受け付けると、メモリ１２３のコピー領域からデータを読み出し、この結果をＭｅｍＷｒｉｔｅ生成部１２１へ出力する。
【００３８】
ＭｅｍＷｒｉｔｅ生成部１２１は、予備系のノード２００内のメモリ２２３にデータをコピーするため、ＭｅｍＡｃｃｅｓｓ制御部１２０から受け付けたメモリコピーリクエストのリード結果をライトデータとしてセレクタ１２２に出力する。この際、ＭｅｍＷｒｉｔｅ生成部１２１は、メモリ２２３に対するメモリライトリクエストを生成し、ライトデータとともにセレクタ１２２に出力する。又、ＭｅｍＷｒｉｔｅ生成部１２１は、メモリライトリクエストを生成後、アドレスインクリメント指示をＭｅｍＣｏｐｙ実行制御部１１７へ出力する。
【００３９】
セレクタ１２２は、ＭｅｍＷｒｉｔｅ生成部１２１で生成されたメモリライトリクエストと、ＭｅｍＴＸＮルーティング制御部１１９より受け付けた他ノード行きのリクエスト及びリプライの一方を選択し、ノード間インタフェース３００に出力する。
【００４０】
ノード間インタフェース３００は、ノード１００〜１０２、２００を接続するインタフェースであり、本インタフェースの接続により分散共有メモリ型マルチプロセッサシステムが構成される。各ノードのセレクタ１２２より出力されるリクエスト及びリプライは他ノードのＴＸＮ受信制御部１１４へ出力される。この際、セレクタ１２２の出力先のノード（メモリ）は、コピー領域３００内のデータをノード２００のメモリ２２３にコピーする間（コピーモード時）では、ＭｅｍＷｒｉｔｅ生成部１２１によって設定され、通常モードや、コピーモードと通常モードとの間の負荷分散モード時においては、ＭｅｍＴＸＮルーティング制御部１１９によって設定される。
【００４１】
メモリ負荷監視部１２５はＣＰＵによって実行されることで負荷管理部１、負荷測定部２、負荷検出部３、及びルーティング設定部４の各機能を実現するプログラム（ソフトウェア）である。負荷検出部３は、システム運用中における情報処理量やプロセスの稼働時間等を検出する。負荷測定部２は、検出された情報処理量やプロセスの稼働時間からＣＰＵ群１０３（ＣＰＵ１０５〜１０８のそれぞれ）やメモリ１２３の使用量や使用率を算出する。
【００４２】
負荷管理部１は、負荷測定部２における測定結果と、予め設定された閾値（基準値）とに基づいてメモリ１２３が高負荷状態となっているかどうかを判定する。例えば、メモリ１２３の使用率（単位時間のアクセス量）が閾値を超える場合、メモリ１２３が高負荷状態であると判定される。負荷管理部１は、メモリ１２３の監視結果（負荷状態の判定結果）に基づいた指示をメモリ制御部１１５に発行する。詳細には、負荷管理部１は、メモリ１２３が高負荷状態と判定すると、コピー動作の開始指示（メモリコピー開始指示）をＭｅｍＣｏｐｙ実行制御部１１７に発行する。又、負荷管理部１は、メモリ１２３が高負荷状態から回復したと判定すると、メモリ復旧指示をルーティング設定部４及びＭｅｍＣｏｐｙ実行制御部１１７に発行する。
【００４３】
負荷管理部１は、メモリ１２３が高負荷状態である判定し、ＭｅｍＣｏｐｙ実行制御部１１７からコピー完了通知を受け付けると、ルーティング設定指示をルーティング設定部４、及びシステム内の全てのノード（ノード１０１、１０２、２００）に通知する。又、負荷管理部１は、他のノードからルーティング設定指示を受け取ると、当該ルーティング指示に基づいた指示をルーティング設定部４に発行する。更に、負荷管理部１は、負荷測定部２で測定されたメモリ１２３の使用量や使用率等のメモリ１２３の負荷状態を図示しない記憶装置に履歴として記録することが好ましい。又、負荷管理部１は、メモリ１２３の負荷状態のみならず他のノードから通知された他ノードのメモリ１２３の負荷状態を図示しない記憶装置に記録することが好ましい。
【００４４】
ルーティング設定部４は、負荷管理部１から発行されるルーティング設定指示に基づいてＭｅｍＴＸＮルーティング制御部１１９内のルーティングレジスタの設定を変更する。ルーティング設定指示には、予備系のメモリ２２３に移動させるメモリブロック（コピー領域３００）のアドレス範囲と、コピー先となるメモリ２２３のメモリブロック（コピー領域４００）のアドレス範囲を特定する情報が含まれる。ルーティング設定部４は、ルーティング設定指示に従い、コピー領域３００宛ての宛先アドレスと、コピー領域４００のアドレスとを対応付けてルーティングレジスタに設定する。
【００４５】
メモリ１２３の監視結果に基づいたルーティングレジスタの設定処理は、システム内の全てのノード１００〜１０２、２００において実施される。
【００４６】
メモリ負荷監視部１２５によるメモリ監視処理は、定期的に行われても任意の時期の行われてもどちらでも良い。又、メモリ負荷監視部１２５におけるメモリ監視処理は、上述の方法の他、例えば特許文献１〜３に記載の方法でも構わない。ただし、これらの方法をソフトウェアで実現することが好ましい。
【００４７】
（動作）
次に、図２から図７を参照して、本発明による分散共有メモリ型マルチプロセッサシステムの動作の詳細を説明する。以下では、（１）通常モード時の監視動作、（２）通常モードから負荷分散モードへの切り替え時におけるリソース移動動作、（３）負荷分散モード時の監視動作、（４）負荷分散モードから通常モードへの切り替え時におけるリソース復旧動作、（５）トランザクション処理動作について説明する。又、以下では、複数のプロセッサから発行されたメモリアクセスリクエストが、ノード１０１のメモリ制御部１１５が管理するメモリ１２３に対し、集中してアクセスされた場合について説明する。
【００４８】
（１）通常モード時における監視動作
図２及び図３を参照して、通常モード時におけるメモリ１２３の負荷状態を監視する動作の詳細を説明する。通常モード時では、図３におけるステップＳ１０１〜Ｓ１０５の処理が行われる。
【００４９】
システム運用中、メモリ負荷監視部１２５によってメモリ１２３に対する負荷状態が監視されている。詳細には、メモリ負荷監視部１２５は、稼働システムにおける情報処理量やプロセス稼働時間やメモリブロックのアクセス遅延時間等によりメモリ１２３の負荷状態を検出する。メモリ負荷監視部１２５は、メモリ１２３のリソースの移動及び負荷状態を確認する（ステップＳ１０１、Ｓ１０２）。通常モード時、メモリ１２３内のリソースは、メモリ２２３に移動されていない（ステップＳ１０１Ｎｏ）。この間、メモリ１２３の高負荷状態が検出されない場合、メモリ負荷監視部１２５は監視処理を継続し、通常モードを維持する（ステップＳ１０２Ｎｏ）。
【００５０】
メモリ１２３へは、ＣＰＵ１０５〜１０８や他ノードにおけるＣＰＵ１０５〜１０８がアクセスしている。メモリ１２３へのアクセスが増大し、アクセス量が基準値を超える場合、メモリ負荷監視部１２５は、メモリ１２３に対するアクセスが過負荷状態（高負荷状態）であることを検出する（ステップＳ１０２Ｙｅｓ）。メモリ１２３の高負荷状態が検出されると、メモリ負荷監視部１２５は、メモリ使用量の高いリソースを高負荷領域として特定する（ステップＳ１０３）。例えば、負荷管理部１は、メモリ使用量が閾値以上の領域を高負荷領域１０として特定する。負荷管理部１は、特定した高負荷領域１０を示すアドレス範囲をＭｅｍＣｏｐｙ実行制御部１１７に設定する（ステップＳ１０４）。
【００５１】
又、負荷管理部１は、ＭｅｍＣｏｐｙ実行制御部１１７に対する高負荷領域１０の設定を終了すると、メモリコピー開始指示をＭｅｍＣｏｐｙ実行制御部１１７に発行する（ステップＳ１０５）。
【００５２】
以上のように、本発明では、ソフトウェアによってメモリ１２３の高負荷状態が検出され、高負荷領域１０を特定するアドレス範囲がハードウェアであるメモリ制御部１１５に設定される。又、高負荷状態の検出に応じて、ソフトウェアは、この高負荷メモリ領域を負荷分散させるためのメモリコピー開始指示を発行する。後述するが、メモリコピー開始指示に基づき、メモリ制御部１１５は高負荷状態のメモリ１２３内のデータを、予備系のメモリ２２３に移動し、移動完了後、システム全体が負荷分散モードに切り替えらる。
【００５３】
（２）通常モードから負荷分散モードへの切り替え時におけるリソース移動動作
図２、図４及び図５を参照して、通常モードから負荷分散モードへの切り替え時におけるリソース移動動作（メモリコピー動作）の詳細を説明する。ＭｅｍＣｏｐｙ実行制御部１１７で実施するメモリコピー動作は、ソフトウェア（メモリ負荷監視部１２５）により設定されたＭｅｍｏｒｙブロックに対して、現用ノード１００内のメモリ１２３と移動先の予備ノード２００内のメモリ２２３とでアドレスインタリーブされるような構成に切り替わる。例えば、図５に示すように、メモリ１２３におけるデータのＬｉｎｅ  Ｓｉｚｅを１２８Ｂとした場合、アドレスのｂｉｔ（７）をＥｖｅｎ／Ｏｄｄ判定として行い、ｂｉｔ（７）＝１ｂであるＬｉｎｅをコピー領域３００とし、メモリ２２３のコピー領域４００にコピー領域３００内のデータがコピーされる。又、ｂｉｔ（７）＝０ｂであれば、メモリコピーは実施されず、ｂｉｔ（７）＝１ｂとなるように次Ｌｉｎｅのアドレスにインクリメントされる。
【００５４】
図４を参照して、メモリ負荷監視部１２５からのメモリコピー開始指示に応じて、メモリ制御部１１５は、メモリ１２３における高負荷領域１０の一部を予備系のノード２００（メモリ２２３）に移動するリソース移動処理（メモリコピー）を開始する（ステップＳ２０１）。ここで、ＭｅｍＣｏｐｙ実行制御部１１７は、メモリコピー開始指示に応じてメモリ１２３における高負荷領域１０の一部を予備系のメモリ２２３に移動するためのメモリコピーリクエストを生成し、セレクタ１１８に出力する。又、ＭｅｍＣｏｐｙ実行制御部１１７は、メモリコピー開始指示に応じてＴＸＮ実行管理部１１６に対し、高負荷領域１０（又はコピー領域３００）に対するアクセスを待ち合わせるための待機指示を発行する。この際、ＭｅｍＣｏｐｙ実行制御部１１７は、ＴＸＮ実行管理部１１６に対して、待機指示として、コピー領域３００のレンジ情報と実行中であることを示す情報を通知する。ＴＸＮ実行管理部１１６は、ＭｅｍＣｏｐｙ実行制御部１１７に指定された領域（高負荷領域１０又はコピー領域３００）に対してアクセスを要求するリクエストの出力を待ち合わせる。ここでは、コピー領域３００へのアクセスを待ち合わせる様にＭｅｍＣｏｐｙ実行制御部１１７から指示されるものとする。
【００５５】
当初、ＭｅｍＣｏｐｙ実行制御部１１７は、高負荷領域１０の先頭アドレス範囲を指定したメモリコピーリクエストを生成し、セレクタ１１８を介してＭｅｍＴＸＮルーティング制御部１１９に出力する。ＭｅｍＴＸＮルーティング制御部１１９は、メモリコピーリクエストから自ノードに対するメモリリードリクエストであることを判定するとともに、ＭｅｍＡｃｃｅｓｓ制御部１２０へルーティングする。
【００５６】
ＭｅｍＣｏｐｙ実行制御部１１７からのメモリコピーリクエストがコピー領域３００と異なる領域へのアクセスである場合（ステップＳ２０２Ｎｏ）、ＭｅｍＡｃｃｅｓｓ制御部１２０は、メモリコピーリクエストのリプライをＭｅｍＷｒｉｔｅ生成部１２１へ出力する。ＭｅｍＷｒｉｔｅ生成部１２１は、ＭｅｍＡｃｃｅｓｓ制御部１２０から受け付けたリプライに応じて、アドレスインクリメント指示をＭｅｍＣｏｐｙ実行制御部１１７へ出力する（ステップＳ２０６）。ＭｅｍＣｏｐｙ実行制御部１１７は、アドレスインクリメント指示に従い、次のラインのアドレス範囲を指定したメモリコピーリクエストを生成し、セレクタ１１８を介してＭｅｍＴＸＮルーティング制御部１１９に出力する。
【００５７】
ＭｅｍＣｏｐｙ実行制御部１１７からのメモリコピーリクエストがコピー領域３００へのアクセスである場合（ステップＳ２０２Ｙｅｓ）、ＭｅｍＡｃｃｅｓｓ制御部１２０は、メモリ１２３（コピー領域３００）からデータをリードし、予備系のメモリ２２３にコピーする（ステップＳ２０３、Ｓ２０４）。詳細には、ＭｅｍＡｃｃｅｓｓ制御部１２０は、メモリコピーリクエストを受け付けると、メモリ１２３のコピー領域３００からデータを読み出し、この結果をＭｅｍＷｒｉｔｅ生成部１２１へ出力する。ＭｅｍＷｒｉｔｅ生成部１２１は、ＭｅｍＡｃｃｅｓｓ制御部１２０から受け付けたメモリコピーリクエストのリード結果をライトデータとしてメモリライトリクエストとともにセレクタ１２２を介してノード２００のメモリ２２３に出力する。メモリライトリクエストを受け付けたノード２００のＭｅｍＡｃｃｅｓｓ制御部１２０は、コピー領域３００からリードされたデータをメモリ２２３のコピー領域４００に書き込む。
【００５８】
ＭｅｍＷｒｉｔｅ生成部１２１は、メモリライトリクエストを生成後、インクリメント指示をＭｅｍＣｏｐｙ実行制御部１１７へ出力する（ステップＳ２０５Ｎｏ、Ｓ２０６）。ＭｅｍＣｏｐｙ実行制御部１１７は、アドレスインクリメント指示に従い、次のラインのアドレス範囲を指定したメモリコピーリクエストを生成し、セレクタ１１８を介してＭｅｍＴＸＮルーティング制御部１１９に出力しステップＳ２０２に移行する。
【００５９】
メモリ制御部１１５は、ステップＳ２０２からステップＳ２０６の処理を、高負荷領域１０の全アドレス範囲が終了するまで繰り返す。全アドレス範囲に対するメモリコピーリクエストの出力が完了すると、メモリ制御部１１５は、リソース移動処理を終了し、メモリ負荷監視部１２５にコピー完了を通知する（ステップＳ２０７）。コピー完了の通知方法については、割り込み方式であっても、ソフトウェアによってフラグをポーリングする方法でも良い。
【００６０】
以上のようにして、本発明によれば、ソフトウェアとの連携により、高負荷状態検出以降、メモリアクセスが集中している現用系のノード１００内のメモリ１２３の一部を予備系のノード２００に移動させることができる。尚、ＭｅｍＣｏｐｙ実行制御部１１７で行われるメモリコピー動作は、ソフトウェアによるメモリコピー開始指示以降、ハードウェアによって全領域のコピーが自動的に行われる。
【００６１】
現用系のノード１００と予備系のノード２００との間でリソース移動が行われた結果、移動後のメモリ割り当て状態は図５に示すような構成になる。尚、本例で示したインタリーブの設定は、上述のようなアルゴリズムに限定されず、設定により、アドレスインタリーブのｂｉｔ判定位置やＬｉｎｅ  Ｓｉｚｅを変更可能なようにしておいても良い。
【００６２】
メモリ制御部１１５からコピー完了通知を受け付けた負荷管理部１は、ルーティング設定部４及び他のノード１０１、１０２、２００に対してルーティング設定指示を発行する。システム内全てのノード１００〜１０２、２００のルーティング設定部４は、ルーティング設定指示に含まれる高負荷領域１０を示すアドレス範囲に基づいて、リソース移動したコピー領域３００、４００を特定し、ＭｅｍＴＸＮルーティング制御部１１９（ルーティングレジスタ）の設定を変更する。詳細には、ルーティングレジスタ（ハードウェア側）において、リソース移動の対象となるコピー領域３００宛ての宛先アドレスと、移動先となるコピー領域４００のアドレスとが紐つけられる。これにより、分散共有メモリ型マルチプロセッサシステムは、負荷分散モードとなる。
【００６３】
詳細は後述するが、負荷分散モードとなったシステムでは、コピー領域３００宛てのアクセスは、コピー領域４００宛てのアクセスに変更されるため、高負荷状態となったメモリ１２３へのアクセス集中が緩和される。
【００６４】
（３）負荷分散モード時の監視動作
負荷分散後もソフトウェアは定期的（又は任意の時期）に負荷状態を監視している。図２及び図３を参照して、負荷分散モード時におけるメモリ１２３の負荷状態を監視する動作の詳細を説明する。負荷分散モード時では、図３におけるステップＳ１０１、Ｓ１０６〜Ｓ１０８の処理が行われる。ただし、負荷分散モード時においても、通常モード時と同様に高負荷状態の監視処理が並行して行われても良い。
【００６５】
メモリ負荷監視部１２５は、メモリ制御部１１５からのコピー完了通知によって、リソースが予備系のメモリ２２３に移動済みであることを確認する（ステップＳ１０１Ｙｅｓ）。コピー領域３００へのアクセスの転送が行われる負荷分散モード時においても、通常モード時と同様に、システム運用中、メモリ負荷監視部１２５によってメモリ１２３に対する負荷状態が監視されている。この間、メモリ１２３の高負荷状態が解消されない場合、すなわち負荷状態回復が検出されない場合、メモリ負荷監視部１２５は監視処理を継続し、負荷分散モードを維持する（ステップＳ１０６Ｎｏ）。
【００６６】
コピー領域３００へのアクセスがコピー領域４００に転送されることでメモリ１２３に対するアクセスが減少し、そのアクセス量が基準値以下となる場合、メモリ負荷監視部１２５は、メモリ１２３の高負荷状態が解消されたと判定する（負荷状態回復の検出）（ステップＳ１０６Ｙｅｓ）。メモリ１２３の負荷状態回復が検出されると、負荷管理部１は、ルーティング設定部４及び他のノードに対しメモリ復旧指示を発行する（ステップＳ１０７、Ｓ１０８）。詳細には、メモリ負荷監視部１２５は、負荷状態が回復した高負荷領域１０を特定し、リソースの移動元のコピー領域３００と、移動先のコピー領域４００を復旧対象領域としてＭｅｍＣｏｐｙ実行制御部１１７に設定する（ステップＳ１０７）。そして、負荷管理部１は、ＭｅｍＣｏｐｙ実行制御部１１７に対する復旧対象領域の設定を終了すると、予備系のメモリ２２３におけるコピー領域４００からメモリ１２３のコピー領域３００にデータをコピーするためのメモリコピー開始指示（メモリ復旧指示）をＭｅｍＣｏｐｙ実行制御部１１７に発行する（ステップＳ１０８）。
【００６７】
以上のように、本発明では、ソフトウェアによってメモリ１２３の負荷状態回復が検出され、復旧対象領域を特定するアドレス範囲がハードウェアであるメモリ制御部１１５に設定される。又、負荷状態回復の検出に応じて、ソフトウェアは、この復旧対象領域を復旧させるためのメモリ復旧指示を発行する。後述するが、メモリ復旧指示に基づき、予備系のメモリ２２３から負荷状態が回復したメモリ１２３にデータが移動され、システム全体が通常モードに切り替えらる。ここで、負荷状態回復を検出したメモリ負荷監視部１２５は、他のノード１０１、１０２、２００に対して、メモリ１２３の負荷状態が回復したことを通知するとともに、コピー領域３００、４００のアドレスを特定するための情報を通知する。他のノード１０１、１０２、２００のそれぞれのメモリ負荷監視部１２５は、ノード１００から負荷状態回復の通知を受け取ると、ノード１００から通知されたコピー領域３００、４００を示す情報に基づいて、それぞれのルーティングレジスタを設定する。
【００６８】
（４）負荷分散モードから通常モードへの切り替え時におけるリソース復旧動作
図２、図５及び図６を参照して、負荷分散モードから通常モードへの切り替え時におけるリソース移動動作（メモリ復旧動作）の詳細を説明する。ＭｅｍＣｏｐｙ実行制御部１１７で実施するメモリ復旧動作は、ソフトウェア（メモリ負荷監視部１２５）により設定されたＭｅｍｏｒｙブロックに対して、予備ノード２００内のメモリ２２３と移動先のメモリ１２３とでアドレスインタリーブされるような構成に切り替わる。例えば、図５に示すように、メモリ２２３におけるデータのＬｉｎｅ  Ｓｉｚｅを１２８Ｂとした場合、アドレスのｂｉｔ（７）をＥｖｅｎ／Ｏｄｄ判定として行い、ｂｉｔ（７）＝１ｂであるＬｉｎｅをコピー領域４００とし、メモリ１２３のコピー領域３００にコピー領域４００内のデータがコピーされる。又、ｂｉｔ（７）＝０ｂであれば、メモリコピーは実施されず、ｂｉｔ（７）＝１ｂとなるように次Ｌｉｎｅのアドレスにインクリメントされる。
【００６９】
図６を参照して、メモリ負荷監視部１２５からのメモリ復旧指示に応じて、予備系のノード２００におけるメモリ制御部１１５は、メモリ２２３におけるコピー領域４００内のデータをノード１００（メモリ１２３）に移動するリソース移動処理（メモリ復旧）を開始する（ステップＳ３０１）。ここでは、ステップＳ２０１〜Ｓ２０７の処理と同様に、ノード２００において、メモリ２２３からメモリ１２３にデータがコピーされる。ノード２００のＭｅｍＣｏｐｙ実行制御部１１７は、メモリ復旧指示に応じてメモリ２２３におけるコピー領域４００内のデータをノード１００に移動するためのメモリコピーリクエストを生成し、ノード２００のセレクタ１１８に出力する。又、ノード２００のＭｅｍＣｏｐｙ実行制御部１１７は、メモリ復旧指示に応じてノード２００のＴＸＮ実行管理部１１６に対し、コピー領域４００に対するアクセスを待ち合わせるための待機指示を発行する。ＴＸＮ実行管理部１１６は、ＭｅｍＣｏｐｙ実行制御部１１７に指定されたコピー領域４００に対してアクセスを要求するリクエストの出力を待ち合わせる。
【００７０】
当初、ノード２００のＭｅｍＣｏｐｙ実行制御部１１７は、メモリ２２３の所定の領域における先頭アドレス範囲を指定したメモリコピーリクエストを生成し、セレクタ１１８を介してＭｅｍＴＸＮルーティング制御部１１９に出力する。ＭｅｍＴＸＮルーティング制御部１１９は、メモリコピーリクエストをＭｅｍＡｃｃｅｓｓ制御部１２０に出力する。
【００７１】
ＭｅｍＣｏｐｙ実行制御部１１７からのメモリコピーリクエストがコピー領域４００と異なる領域へのアクセスである場合（ステップＳ３０２Ｎｏ）、ＭｅｍＡｃｃｅｓｓ制御部１２０は、メモリコピーリクエストのリプライをＭｅｍＷｒｉｔｅ生成部１２１へ出力する。ＭｅｍＷｒｉｔｅ生成部１２１は、ＭｅｍＡｃｃｅｓｓ制御部１２０から受け付けたリプライに応じて、アドレスインクリメント指示をＭｅｍＣｏｐｙ実行制御部１１７へ出力する（ステップＳ３０６）。ＭｅｍＣｏｐｙ実行制御部１１７は、アドレスインクリメント指示に従い、次のラインのアドレス範囲を指定したメモリコピーリクエストを生成し、セレクタ１１８を介してＭｅｍＴＸＮルーティング制御部１１９に出力する。
【００７２】
ＭｅｍＣｏｐｙ実行制御部１１７からのメモリコピーリクエストがコピー領域４００へのアクセスである場合（ステップＳ３０２Ｙｅｓ）、ＭｅｍＡｃｃｅｓｓ制御部１２０は、メモリ２２３（コピー領域４００）からデータをリードし、ノード１００のメモリ１２３にコピーする（ステップＳ３０３、Ｓ３０４）。詳細には、ＭｅｍＡｃｃｅｓｓ制御部１２０は、メモリコピーリクエストを受け付けると、メモリ２２３のコピー領域４００からデータを読み出し、この結果をＭｅｍＷｒｉｔｅ生成部１２１へ出力する。ＭｅｍＷｒｉｔｅ生成部１２１は、ＭｅｍＡｃｃｅｓｓ制御部１２０から受け付けたメモリコピーリクエストのリード結果をライトデータとしてメモリライトリクエストとともにセレクタ１２２を介してノード１００のメモリ１２３に出力する。メモリライトリクエストを受け付けたノード１００のＭｅｍＡｃｃｅｓｓ制御部１２０は、コピー領域４００からリードされたデータをメモリ１２３のコピー領域３００に書き込む。
【００７３】
ノード２００のＭｅｍＷｒｉｔｅ生成部１２１は、メモリライトリクエストを生成後、インクリメント指示をノード２００のＭｅｍＣｏｐｙ実行制御部１１７へ出力する（ステップＳ３０５Ｎｏ、Ｓ３０６）。ＭｅｍＣｏｐｙ実行制御部１１７は、アドレスインクリメント指示に従い、次のラインのアドレス範囲を指定したメモリコピーリクエストを生成し、セレクタ１１８を介してＭｅｍＴＸＮルーティング制御部１１９に出力しステップＳ３０２に移行する。
【００７４】
ノード２００のメモリ制御部１１５は、ステップＳ３０２からステップＳ３０６の処理を、メモリ２２３の所定の領域の全アドレス範囲が終了するまで繰り返す。全アドレス範囲に対するメモリコピーリクエストの出力が完了すると、メモリ制御部１１５は、リソース移動処理を終了し、ノード２００のメモリ負荷監視部１２５にコピー完了（復旧完了）を通知する（ステップＳ３０７）。復旧完了の通知方法については、割り込み方式であっても、ソフトウェアによってフラグをポーリングする方法でも良い。
【００７５】
予備系のノード２００と現用系のノード１００との間でリソース移動が行われた結果、移動後のメモリ割り当て状態は通常モード時の状態に復旧する。尚、本例で示したインタリーブの設定は、上述のようなアルゴリズムに限定されず、設定により、アドレスインタリーブのｂｉｔ判定位置やＬｉｎｅ  Ｓｉｚｅを変更可能なようにしておいても良い。
【００７６】
ノード２００において、メモリ制御部１１５からコピー完了通知を受け付けた負荷管理部１は、ルーティング設定部４及び他のノード１００〜１０２に対してルーティング設定解除指示を発行する。システム内全てのノード１００〜１０２、２００のルーティング設定部４は、ルーティング設定解除指示に応じてコピー領域３００、４００を特定し、ＭｅｍＴＸＮルーティング制御部１１９（ルーティングレジスタ）の設定を変更する。詳細には、ノード１００〜１０２、２００のルーティングレジスタ（ハードウェア側）において、コピー領域３００宛ての宛先アドレスに紐付けられたコピー領域４００のアドレスは解除され、コピー領域３００宛ての宛先アドレスとコピー領域３００上のアドレスとが紐つけられる。すなわち、負荷分散されていた領域が、予備系のノード２００から負荷分散前のノード１００へ戻されたルーティングとなるようにルーティング設定が現用状態に戻される。その結果、各ノード１００〜１０２は、負荷分散時の予備ノード２００行きのルーティングから現用ノード１００へのルーティングに戻された状態に移行する。これにより、分散共有メモリ型マルチプロセッサシステムは、通常モードに復帰する。
【００７７】
以上のようにして、本発明によれば、ソフトウェアとの連携により、高負荷状態からの回復を検出すると、負荷分散のためコピー領域３００の替わりにアクセス先となっていたノード２００内のメモリ２２３を、元のノード１００に移動させることができる。尚、ＭｅｍＣｏｐｙ実行制御部１１７で行われるメモリコピー動作は、ソフトウェアによる復旧指示以降、ハードウェアによって全領域のコピーが自動的に行われる。
【００７８】
（５）トランザクション処理動作
図２及び図７を参照して、本発明による分散共有メモリ型マルチプロセッサシステムにおけるトランザクション処理の動作の詳細を説明する。以下では、ノード１００におけるトランザクション処理について説明する。
【００７９】
ＣＰＵ制御部１０９は、通常モード時、データコピー時、負荷分散モード時のいずれにおいても同様な動作を行う。すなわち、ＣＰＵ群１０３又は他のノードのＣＰＵ群１０３からのトランザクションを選択的にメモリ制御部１１５に出力する（ステップＳ４０１）。本発明による分散共有メモリマルチプロセッサシステムは、各現用ノードのメモリ１２３に対してアクセスが集中せず、高負荷状態が検出されていない間、通常モードとして動作する。この場合、ＣＰＵからのトランザクションは、その宛先アドレスどおりの領域（メモリ１２３）に出力される（ステップＳ４０２Ｙｅｓ、Ｓ４０７）。ステップＳ４０７における処理の詳細を以下に示す。
【００８０】
ＴＸＮ実行管理部１１６は、ＣＰＵ制御部１０９（セレクタ１１２）からのトランザクションをセレクタ１１８に出力する。セレクタ１１８は、ＴＸＮ実行管理部１１６からのトランザクションをＭｅｍＴＸＮルーティング制御部１１９に出力する。ＭｅｍＴＸＮルーティング制御部１１９は、セレクタ１１８（ＣＰＵ制御部１０９）からのトランザクションが要求するアクセス先に応じて当該トランザクションの出力先を決定する。
【００８１】
トランザクションが要求するアクセス先が自ノードのメモリ１２３である場合、ＭｅｍＴＸＮルーティング制御部１１９は、トランザクションをＭｅｍＡｃｃｅｓｓ制御部１２０に出力する。ＭｅｍＡｃｃｅｓｓ制御部１２０はＭｅｍＴＸＮルーティング制御部１１９から受け取ったトランザクションに応じてメモリ１２３に対するアクセス制御を行い、メモリ１２３からのリプライ（リードデータ）をＭｅｍＴＸＮルーティング制御部１１９に出力する。
【００８２】
一方、トランザクションが要求するアクセス先が、他ノードのメモリ１２３である場合、ＭｅｍＴＸＮルーティング制御部１１９は、トランザクションをセレクタ１２２に出力する。セレクタ１２２は、トランザクションをノード間インタフェースを介して宛先となる他のノード（ノード１０１、１０２）に出力する。
【００８３】
他のノード１０１、１０２も同様に動作し、ノード間でメモリ１２３を共有する。予備系のノード２００は、動作せずに待機しているが、ノード１００〜１０２のいずれかで障害が発生した場合、障害が発生したノードの替わりに現用系ノードとして動作する。この場合、上述と同様に動作する。
【００８４】
一方、トランザクションを受け付けた際、通常モードではない場合、すなわち、データコピー時又は負荷分散モード時の場合についてのトランザクション処理について説明する（ステップＳ４０２Ｎｏ）。
【００８５】
トランザクションがコピー領域３００以外の領域へのアクセスを要求する場合、トランザクションは、その宛先アドレスどおりの領域（メモリ１２３）に出力される（ステップＳ４０３Ｎｏ、Ｓ４０７）。詳細には、トランザクションが要求するアクセス先が自ノードのメモリ１２３で、且つコピー領域３００以外の領域である場合、ＭｅｍＴＸＮルーティング制御部１１９は、トランザクションをＭｅｍＡｃｃｅｓｓ制御部１２０に出力する。ＭｅｍＡｃｃｅｓｓ制御部１２０はＭｅｍＴＸＮルーティング制御部１１９から受け取ったトランザクションに応じてメモリ１２３に対するアクセス制御を行い、メモリ１２３からのリプライ（リードデータ）をＭｅｍＴＸＮルーティング制御部１１９に出力する。一方、トランザクションが要求するアクセス先が、他ノードのメモリ１２３である場合、ＭｅｍＴＸＮルーティング制御部１１９は、トランザクションをセレクタ１２２に出力する。セレクタ１２２は、トランザクションをノード間インタフェースを介して宛先となる他のノード（ノード１０１、１０２）に出力する。
【００８６】
ノード１００において、高負荷状態が検出され、ステップＳ２０１〜Ｓ２０７のコピー処理が実行されている間にトランザクションを受け付け、当該トランザクションがコピー領域３００へのアクセスを要求する場合、ＴＸＮ実行管理部１１６は、当該トランザクションの出力を待ち合わせる（ステップＳ４０３Ｙｅｓ、Ｓ４０４Ｙｅｓ、Ｓ４０５）。すなわち、コピー領域３００のデータを移動中ＴＸＮ実行管理部１１６は、コピー領域３００に対するトランザクションを待機させ、コピー完了通知に応じて、当該トランザクションをセレクタ１１８に出力する。コピー完了後に出力されたコピー領域３００宛てのトランザクションは、ＭｅｍＴＸＮルーティング制御部１１９によって、メモリ２００のコピー領域４００へのアクセスとして処理される。
【００８７】
ＴＸＮ実行管理部１１６は、コピー時においても通常系の動作としてのリクエストやリプライに対する処理を行っている。リソース移動時や復旧時におけるコピーの実行中、あるいはコピーが完了していない間において、コピー領域３００とアドレス競合するトランザクションの入力があり得る。このため、上述のようにコピー領域３００に対するトランザクションを待機させることで、メモリ１２３のデータの一貫性を保証することができる。
【００８８】
負荷分散モード時、すなわちルーティングレジスタの設定後に、コピー領域３００へのアクセスを要求するトランザクションを受け付けた場合、当該トランザクションは、ルーティングレジスタの設定に従ったメモリ２２３のコピー領域４００に出力される（Ｓ４０３Ｙｅｓ、Ｓ４０４Ｎｏ、Ｓ４０６）。詳細には、負荷分散モード時、ＭｅｍＴＸＮルーティング制御部１１９は、ルーティング設定部４によって設定されたルーティングレジスタに従って、トランザクションのルーティングを行う。例えば、トランザクションに付与された宛先アドレス範囲（フレームヘッダ内のアドレス）がコピー領域３００宛である場合、当該宛先アドレスに対応付けられたコピー領域４００に対し、当該フレーム（トランザクション）を出力する。
【００８９】
以上のように、本発明によれば、負荷分散モード時、高負荷状態と判定されたメモリ１２３の一部（コピー領域３００）に対するアクセスは、ハードウェアによって自動的に、予備系のノード２００に対するアクセスに変更される。又、コピー領域３００のデータの移動している最中に、ＣＰＵからの当該コピー領域３００にアクセス要求がある場合、当該アクセスを待機させ、コピー完了後、アクセス先を予備系のノード２００に変更することができる。これにより、メモリ１２３におけるデータの一貫性を保つことができる。
【００９０】
本発明では、Ｍｅｍｏｒｙ制御部１１５が管理するメモリ１２３に対して集中してアクセスされた場合、負荷集中しているメモリ１２３の内容を物理的に移動させ、過負荷状態であるメモリへのアクセスを動的に変更することで負荷分散させることができる。この負荷分散の結果、過負荷状態であるメモリへのアクセスが低減されると、元のシステム稼働時の運用状態に復旧される。
【００９１】
又、メモリのアクセス方式としてスタックモードやアドレスインタリーブモードが採用されるが、一般的に分散共有メモリ型マルチプロセッサシステムでは、レイテンシ重視のため、低負荷状態ではスタックモードが有効であり、高負荷状態ではレイテンシが悪化する可能性があるため、連続したアドレスに同時にアクセスするためにアドレスインタリーブモードが有効である。しかし、動的にこの２つのモードを切り替えることは困難であり、モード変更のためにリブートが必要とされる。本発明では、本来保守対象として使用する予備系のノード２００内のメモリ２２３を高負荷状態時に一時的に利用し、動的に負荷分散させることで、負荷集中したリソースの使用率を低減することができる。このため、本発明では、システムをリブートすることなく高負荷時の性能低下を抑えることができる。
【００９２】
更に、ハードウェアによってアクセス先を変更することによって動的負荷分散を行っているため、リソース移動したメモリは、ＯＳやソフトウェア見えには現用メモリに組み込まれた状態のままである。このため、ＯＳやソフトウェアが論理的に使用するアドレスを変換することなく、予備系のノード２００の物理メモリ（メモリ２２３）をそのまま使用することが可能となる。
【００９３】
以上、本発明の実施の形態を詳述してきたが、具体的な構成は上記実施の形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【図面の簡単な説明】
【００９４】
【図１】図１は、本発明による分散共有メモリ型マルチプロセッサシステムの実施の形態における構成を示す図である。
【図２】図２は、本発明によるノードの実施の形態における構成を示すブロック図である。
【図３】図３は、本発明による負荷状態監視処理の実施の形態における動作を示すフロー図である。
【図４】図４は、本発明によるリソース移動処理の実施の形態における動作を示すフロー図である。
【図５】図５は、本発明によるリソース移動後の使用メモリ領域の状態を示す概略図である。
【図６】図６は、本発明によるリソース復旧処理の実施の形態における動作を示すフロー図である。
【図７】図７は、本発明によるトランザクション処理の実施の形態における動作を示すフロー図である。
【符号の説明】
【００９５】
１００〜１０２、２００：ノード
１０３：ＣＰＵ群
１０５〜１０８：ＣＰＵ
１０９：ＣＰＵ制御部
１１０：ＣＰＵトランザクション制御部
１１１：ルーティング制御部
１１２、１１３、１１８、１２２：セレクタ
１１４：トランザクション受信制御部
１１５：メモリ制御部
１１６：トランザクション実行管理部
１１７：メモリコピー実行制御部
１１９：メモリトランザクションルーティング制御部
１２０：メモリアクセス制御部
１２１：メモリライト生成部
１２３、２２３：メモリ
１２５：メモリ負荷監視部
１：負荷管理部
２：負荷測定部
３：負荷検出部
４：ルーティング制御部
３００：ノード間インタフェース
【図１】
0004985512.tif 000002
【図２】
0004985512.tif 000003
【図３】
0004985512.tif 000004
【図４】
0004985512.tif 000005
【図５】
0004985512.tif 000006
【図６】
0004985512.tif 000007
【図７】
0004985512.tif 000008