(57)【特許請求の範囲】
【請求項１】
コンピュータシステムは、
相互に接続され、それぞれにおいて個別のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が動作し、それぞれにおけるＯＳが個別に利用する主記憶装置と外部記憶装置を有する複数のノードと、
を具備し、
前記複数のノードは、システム起動時における起動処理の主体となるマスタノードと、前記システム起動時に前記マスタノードの前記起動処理の少なくとも一部を前記マスタノードに代って処理するスレーブノードで構成され、
前記外部記憶装置は、前記複数のノードでそれぞれ処理する起動処理が指定された分担情報が記憶され、
前記スレーブノードは、自身の前記分担情報に基づき分担された起動処理を実行し、前記マスタノードの前記起動処理の一部を前記マスタノードに代って処理し、前記処理により変更された主記憶装置中の状態情報を前記マスタノードへ送信し、
前記マスタノードは、前記スレーブノードから受信した前記状態情報を前記マスタノードの主記憶装置に反映させる
コンピュータシステム。
【請求項２】
請求項１に記載のコンピュータシステムにおいて、
前記分担された起動処理は、初期化対象となるデバイスドライバ又は起動対象となるプロセスである
コンピュータシステム。
【請求項３】
請求項１又は２に記載のコンピュータシステムにおいて、
前記スレーブノードは、自身の前記分担情報に基づき分担されたデバイスドライバを初期化し、少なくとも、前記デバイスドライバが使用する前記主記憶装置上の実行コードとデータと、前記ＯＳが使用する前記主記憶装置上の前記デバイスドライバの管理情報を前記状態情報として前記マスタノードに送信する
コンピュータシステム。
【請求項４】
請求項１から３のいずれか１項に記載のコンピュータシステムにおいて、
前記スレーブノードは、自身の前記分担情報に基づき分担されたプロセスを起動し、少なくとも、前記プロセスが使用する主記憶装置上の実行コードとデータと、前記ＯＳが使用する前記主記憶装置上のプロセスの管理情報を前記状態情報として前記マスタノードに送信する
コンピュータシステム。
【請求項５】
請求項１から４いずれか１項に記載のコンピュータシステムにおいて、
前記複数のノードは内部バスを介して相互に接続される複数のプロセッサコアであり、前記複数のプロセッサコアの各々は個別のＯＳを実行する
マルチコアプロセッサシステム。
【請求項６】
複数のノードのそれぞれが処理する起動処理を指定する分担情報を保持するステップと、
前記複数のノードのそれぞれにおいて個別のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が動作し、
複数のノードにおけるスレーブノードが、自身の前記分担情報に基づき分担された起動処理を実行することで、前記複数のノードにおいてシステム起動時における起動処理の主体となるマスタノードの起動処理の一部を、前記マスタノードに代って処理するステップと、
前記スレーブノードが前記マスタノードの起動処理の一部の処理結果により変更されたである主記憶装置中の状態情報を、前記マスタノードへ送信するステップと、
前記前記マスタノードが、前記スレーブノードから受信した前記状態情報を前記マスタノードの主記憶装置に反映させるステップと
を具備する
並列初期化方法。
【請求項７】
請求項６に記載の並列初期化方法において、
前記分担された起動処理は、初期化対象となるデバイスドライバ又は起動対象となるプロセスである
並列初期化方法。
【請求項８】
請求項６又は７に記載の並列初期化方法において、
前記状態情報を送信するステップは、
前記スレーブノードが、自身の前記分担情報に基づき分担されたデバイスドライバを初期化するステップと、
前記スレーブノードが、少なくとも、前記デバイスドライバが使用する前記主記憶装置上の実行コードとデータと、前記ＯＳが使用する前記主記憶装置上の前記デバイスドライバの管理情報を前記状態情報として前記マスタノードに送信するステップと
を備える
並列初期化方法。
【請求項９】
請求項６から８のいずれか１項に記載の並列初期化方法において、
前記状態情報を送信するステップは、
前記スレーブノードが、自身の前記分担情報に基づき分担されたプロセスを起動するステップと、
前記スレーブノードが、少なくとも、前記プロセスが使用する主記憶装置上の実行コードとデータと、前記ＯＳが使用する前記主記憶装置上のプロセスの管理情報を前記状態情報として前記マスタノードに送信するステップと
を備える
並列初期化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のノードを備えるコンピュータ装置及びその初期化方法に関し、特に複数のコンピュータ装置を接続したクラスタシステム、又は複数のプロセッサコアを接続したマルチコアプロセッサシステム、それらに用いられる並列初期化方法、及びブートプログラムに関する。
【背景技術】
【０００２】
近年、クラスタシステムが広く利用されている。クラスタシステムとは、少なくともプロセッサとメモリとネットワークデバイスを搭載したコンピュータ同士をネットワークで結合したものである。クラスタシステムは、共有メモリを持たず、各コンピュータ上で別々のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が動作する。このようなクラスタシステムでは、各コンピュータはそれぞれ独立して動作するが、ＯＳやライブラリ、アプリケーションが協調し、コンピュータ同士を連携させることにより、ユーザや他のコンピュータに対して全体で１台のコンピュータであるかのように動作させることも可能である。すなわち、複数のコンピュータを１台のコンピュータを扱うように管理することができる。このため、クラスタシステム内のいずれかのコンピュータが停止してもシステム全体が止まることはなく、処理を続行したまま修理や交換が行える。
【０００３】
一方、複数のプロセッサから構成されるコンピュータとして、ＳＭＰ（Ｓｙｍｍｅｔｒｉｃ  Ｍｅｍｏｒｙ  Ｐｒｏｃｅｓｓｏｒ）型コンピュータシステムがある。ＳＭＰ型コンピュータシステムでは、メモリもデバイスも共有されており、又、１つのＯＳで全てのプロセッサを制御する点がクラスタシステムと異なる。更に、最近、１つのチップの中に複数のプロセッサコアを搭載したマルチコアプロセッサシステムが現れてきた。マルチコアプロセッサシステムにはクラスタ型とＳＭＰ型がある。クラスタ型マルチコアプロセッサのプロセッサコア内ではそれぞれ独立したＯＳを動作させる。このため、クラスタ型マルチコアプロセッサシステムはＯＳからは複数のマイクロプロセッサとして扱われる。一方、ＳＭＰ型マルチコアプロセッサではプロセッサ全体で1つのＯＳを動作させる。クラスタ型マルチコアプロセッサの代表的なものとして、ＮＥＣエレクトロニクス社のＭＰ２１１、ＳＭＰ型マルチコアプロセッサの代表的なものとしてＡＲＭ社のＭＰｃｏｒｅ、Ｉｎｔｅｌ社のＣｏｒｅＤｕｏがある。
【０００４】
このように複数のコンピュータあるいはプロセッサ、プロセッサコア（以下、これらを総称してノードと呼ぶ）を有するコンピュータシステムでは、並列処理を行うことで計算を高速に行うことができる。この並列処理は、アプリケーションプログラムの高速化のために広く使われてきた。又、近年はコンピュータシステムの起動時間を短縮する目的で、ＯＳの起動処理を並列処理する取り組みが現れている。
【０００５】
従来の並列ブート可能なコンピュータの一例が、特開２００４−２１３５３０号公報に記載されている（特許文献１参照）。特許文献１では、スレッドが利用不可能な状態でＯＳの初期化処理を行う第１の初期化処理手段と、スレッドが利用可能な状態でＯＳの初期化処理を行う第２の初期化処理手段と、ユーザスレッドが利用可能な状態でＯＳの初期化処理を行う第３の初期化処理手段を有するコンピュータ（情報処理装置）が示されている。第１の初期化処理手段は、デバイスドライバ（Ｉ／Ｏ装置）の初期化を逐次的に行う。第２の初期化処理手段はスレッドを利用することで複数のデバイスドライバの初期化を並列に実行する。第３の初期化処理手段は、ユーザレベルのプロセスが利用可能になってから、通常の並列処理を用いてデバイスドライバの初期化を並列に実行する。ＳＭＰ型のコンピュータでは、第２及び第３の初期化処理手段により複数のプロセッサ上でデバイスドライバの初期化を並列実行できるため起動時間を短縮することが可能である。
【０００６】
特許文献１に記載の並列初期化方法によれば、１つのＯＳを複数のスレッドでブートさせるため、複数のノードで同時に複数のスレッドを動作させられるＳＭＰ型コンピュータシステムやＳＭＰ型マルチコアプロセッサシステムに対して高速化の効果が得られる。しかし、各コンピュータ上で別々にＯＳを動作させるクラスタシステムでは、１つのＯＳで制御するプロセッサ数がスレッド数よりも少ないため、複数のスレッドに分割した効果を十分に得られない。すなわち、特許文献１に記載のブート高速化方式では、それぞれ個別のＯＳを動作させる複数のノードを備えたクラスタシステムやマルチコアプロセッサシステムでは期待する効果を得ることができない。すなわち、従来の並列ブート方式は、ＳＭＰ型コンピュータシステムやＳＭＰ型マルチコアプロセッサシステムでは高速化の効果が高かったが、クラスタシステムやクラスタ型マルチコアプロセッサシステムに適用しても高速化の効果は高くなかった。
【０００７】
一方、並列初期化処理に関連する従来技術が、特開２００２−１８９７０６号公報（特許文献２参照）、及び特開平６−２５９３９３号公報（特許文献３参照）に記載されている。特許文献２には、複数プロセッサ構成のシステムにおいて個別処理部のプロセッサ間における通信量の増大を抑止してシステム全体の起動時間を短縮する技術が記載されている。特許文献２の技術によれば、システム起動時、個別処理部毎に保持する初期設定情報を利用して各処理部の初期設定処理を並列に行い、各処理部間の通信を不要にしている。又、特許文献３には、ネットワークを介して接続されたホスト計算機とプロセッサエレメントとを具備する分散メモリ型並列計算機におけるブート制御方法が記載されている。特許文献３の技術によれば、１つ目のノード（プロセッサエレメント）を起動した後のメモリ上のデータを使用して、２つ目以降のノードを起動することで、２つ目以降のノードの起動を高速化できる。
【０００８】
複数のノードを備えるコンピュータシステムでは、システム起動時に初期化されるデバイスドライバの数や起動されるプロセス量はノード毎に異なる。特にメインとなるノード（以下、マスタノードと称す）は、初期化するデバイスや起動するプロセスは多く、起動する時間も他のノードに比べて多くなる。このため、システム全体の起動時間は増大してしまう。特許文献２及び３に記載の技術では、ノード毎に起動処理を並列して実施しているため、ノード毎の起動時間に差が生じる。すなわち、システム全体の起動時間は、起動時間が最長のノードに依存して増大してしまう。
【特許文献１】特開２００４−２１３５３０号公報
【特許文献２】特開２００２−１８９７０６号公報
【特許文献３】特開平０６−２５９３９３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明の目的は、それぞれ個別のＯＳが動作する複数のノードを備えるコンピュータシステムにおいて、システム全体の起動時間を短縮できる並列初期化方法を提供することにある。
【課題を解決するための手段】
【００１０】
以下に、［発明を実施するための最良の形態］で使用される番号・符号を括弧付きで用いて、［課題を解決するための手段］を説明する。この番号・符号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］の記載との対応関係を明らかにするために付加されたものであるが、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１１】
本発明によるコンピュータシステム（１、１’）は、相互に接続された複数のノード（１００１〜１００ｎ、１００１’〜１００ｎ’）を具備する。複数のノード（１００１〜１００ｎ、１００１’〜１００ｎ’）は、第１のノード（１００２、１００２’）と第２のノード（１００１、１００１’）とを備える。第１のノード（１００２、１００２’）は、所定の初期化処理（所定のデバイスドライバの初期化及び／又は所定のプロセスの起動）を実行する第１の初期化処理部（２２）と、第１の初期化処理部（２２）における初期化処理によって変更された状態情報（４０）を第２のノード（１００１、１００１’）に送信する実行状態通信部（２３）とを備える。第２のノード（１００１、１００１’）は状態情報（４０）に基づき自身の内部状態を変更する実行状態反映部（１４）を備える。このように、本発明に係る第２のノード（１００１、１００１’）は、システム内の他のノード（１００２、１００２’）によって初期化処理した結果を自身に反映することができる。すなわち、第２のノードにおける初期化処理を他のノードで分散処理し、自身に反映することができる。又、第２のノード（１００１、１００１’）で従来実行していた初期化処理を他のノード（１００２〜１００ｎ、１００２’〜１００ｎ’）に分散処理させることができる。
【００１２】
又、第２のノード（１００１、１００１’）は、所定の初期化処理（所定のデバイスドライバの初期化及び／又は所定のプロセスの起動）を実行する第２の初期化処理部（１２）を更に備えることが好ましい。実行状態反映部（１４）は、第１のノード（１００２、１００２’）から転送された状態情報（４０）と、第２の初期化処理部（１２）における初期化処理によって内部状態を変更する。このため、第２のノード（１００１、１００１’）自身でもデバイスドライバの初期化処理及びプロセスの起動処理の一部を実行し、一部を他のノード（１００２〜１００ｎ、１００２’〜１００ｎ’）に実行させ、その結果を自身に反映することができる。
【００１３】
本発明に係る複数のノード（１００１〜１００ｎ、１００１’〜１００ｎ’）のそれぞれは、自ノードの役割がマスタノードであるかスレーブノードであるかを決定する役割指定部（１１、２１）と、自ノードにおいて初期化処理の対象（初期化するデバイスドライバ及び／又は起動するプロセス）を指定する分担指定部（１１、２１）と、分担指定部（１１、２１）の指定に基づき初期化処理（デバイスドライバの初期化及び又は（プロセスの起動）を実行する初期化処理部（１２、２２）と、役割指定部（１１、２１）において、自ノードがスレーブノードであると決定された場合、初期化処理部（２２）における初期化処理（デバイスドライバの初期化及び／又はプロセスの起動）によって変更された状態情報（４０）を他ノード（１００１、１００１’）に転送する実行状態通信部（２３）とを具備する。
【００１４】
又、役割指定部（１１、２１）において自ノードがマスタノードであると決定された場合、他ノード（１００２、１００２’）から転送される状態情報（４０）を自ノードの内部状態に反映させる実行状態反映部（１４）とを具備する。
【００１５】
ノード（１００、１００’）は、初期化すべきデバイスドライバ（３２０）か、起動すべきプロセス（３３０）の少なくとも一方を指定する分担情報（３０）を格納する記憶装置（１０３）を更に備えることが好ましい。分担指定部（１１、２１）は、分担情報（３０）を参照して初期化対象のデバイスドライバ及び起動対象のプロセスを決定する。
【００１６】
ノード（１００、１００’）は、マスタノード又はスレーブノードを指定するための役割情報（２２０）と、複数のノードのいずれかの識別子とが対応付づけられた役割指定情報（２０）を格納する記憶装置（１０４）を更に備えることが好ましい。役割指定部（１１、２１）は、役割指定情報（２０）に基づき自ノードの識別子に対応する役割情報（２２０）を参照して、自ノードの役割を決定する。又、実行状態通信部（２３）は、役割指定部（２１）において自ノードがスレーブノードとして指定された場合、役割指定情報（２０）を参照してマスタノードに指定されたノード（１００１、１００１’）に状態情報（４０）を転送する実行状態通信部を更に具備することが好ましい。各ノード（１００、１００’）が役割指定情報（２０）を保持することで、どのノードがマスタノードであるのかを確認することができる。
【００１７】
状態情報（４０）は、デバイスドライバの初期化、及びプロセスの起動によって変更されたメモリ内の状態を示す情報であることが好ましい。マスタノードに指定されたノードは、この状態情報（４０）に基づいて自身のメモリ内の内容を変更できる。
【００１８】
複数のノード（１００１〜１００ｎ）は、ネットワーク（２００）を介して相互に接続される複数のコンピュータ装置（１００）であることが好ましい。複数のコンピュータ装置（１００１〜１００ｎ）の各々は、個別のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を実行するＣＰＵ（１０１）を備えることが好ましい。
【００１９】
又、他の態様に係るコンピュータシステムとして、複数のノード（１００’）は内部バス（２００’）を介して相互に接続される複数のプロセッサコア（１００１’〜１００ｎ’）であることが好ましい。複数のプロセッサコア（１００１’〜１００ｎ’）の各々は、個別のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を実行することが好ましい。
【発明の効果】
【００２０】
本発明によるコンピュータシステム、並列初期化方法、及びブートプログラムによれば、それぞれ個別のＯＳが動作する複数のノードを備えるコンピュータシステムにおいて、システム全体の起動時間を短縮することができる。
【発明を実施するための最良の形態】
【００２１】
以下、添付図面を参照して、本発明によるコンピュータシステムの実施の形態が説明される。図面において同一、又は類似の参照符号は、同一、類似、又は等価な構成要素を示している。本発明によるコンピュータシステムの実施の形態はクラスタシステムを一例に実施の形態が説明される。
【００２２】
（構成）
図１は、本発明によるクラスタシステム１の実施の形態における構成図である。図１を参照して、本発明によるクラスタシステム１は、ネットワーク２００にを介して相互に接続された複数のコンピュータ１００１〜１００ｎを具備している。ネットワーク２００には、図示しないネットワークスイッチが設けられ、このネットワークスイッチを介してコンピュータ１００１〜１００ｎは相互に通信接続されている。以下では、コンピュータ１００１〜１００ｎを総称して説明される場合、コンピュータ１００とされる。
【００２３】
図２は、本発明によるコンピュータ１００の構成図である。図２を参照して、コンピュータ１００は、バスで相互に接続されたプロセッサ１０１、主記憶装置１０２、外部記憶装置１０３、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）１０４を具備している。外部記憶装置１０３はハードディスクに例示され、ブートプログラム１０、役割指定情報２０、分担情報３０を格納している。プロセッサ１０１は、システム起動時にブートプログラム１０を実行することでデバイスドライバを初期化し、プロセスを起動する。主記憶装置１０２はＲＡＭに例示され、プロセッサ１０１で実行されるブートプログラム１０を一時記憶する。ＮＩＣ１０４は、ネットワーク２００上の図示しないネットワークスイッチに接続されるネットワークインタフェースである。ＮＩＣ１０４は、ネットワーク２００上にある他のコンピュータとの間におけるデータの伝送を制御する。コンピュータ１００１〜１００ｎ間の通信はＴＣＰ／ＩＰ通信を用いることができる。すなわち、コンピュータ１００１〜１００ｎのそれぞれは固有のＩＰアドレスを有している。
【００２４】
ブートプログラム１０は、プロセッサ１０１で実行されるＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）の一部であり、起動処理を実行するためのプログラムである。尚、コンピュータ１００１〜１００ｎはそれぞれ独立した個別のＯＳ上で動作している。本実施の形態ではＯＳとしてＬｉｎｕｘを用いた場合について説明される。又、役割指定情報２０及び分担情報３０は、外部記憶措置１０３にファイルとして格納される。役割指定情報２０は、自コンピュータがマスタノード（マスタコンピュータ）であるかスレーブノード（スレーブコンピュータ）であるかを指定する情報である。ここで、マスタノードとは、クラスタシステム１のシステム起動時における起動処理の主体となるコンピュータである。又、スレーブノードとはシステム起動時において起動処理の一部を担うコンピュータである役割指定情報２０は、マスタノードかスレーブノードかを指定する情報を含む。図３（ａ）を参照して、役割指定情報２０は、コンピュータ１００の識別子であるコンピュータＩＤ２１０（例示：ＩＰアドレス）と、マスタノードかスレーブノードかを指定する役割情報２２０とが対応付けられている。詳細には、例えば、Ｌｉｎｕｘであれば、／ｅｔｃ／ｈｏｓｔｓファイルに”ｍａｓｔｅｒ”と書かれたエントリが存在し、そのエントリのＩＰアドレスが自コンピュータのＩＰアドレスと一致すれば、マスタノードであり、そうでない場合は、スレーブノードと判断される。分担情報３０は、自コンピュータが初期化する対象となるデバイスドライバと、自コンピュータが起動する対象となるプロセスを指定する情報である。図３（ｂ）を参照して、分担情報３０は初期化対象のデバイスドライバ３２０と起動対象のプロセスとの情報を含む。詳細には、例えば、Ｌｉｎｕｘであれば、／ｅｔｃ／ｍｏｄｕｌｅｓ．ｃｏｎｆという設定ファイルに初期化すべきデバイスドライバが記述され、／ｅｔｃ／ｒｃ．ｄ以下に起動すべきプロセスに関するｒｃファイルが記述される。尚、本実施の形態では、コンピュータ１００１がマスタノードとして指定され、コンピュータ１００２〜１００ｎがスレーブノードとして指定されるものとする。本実施の形態では便宜上コンピュータ１００１とコンピュータ１００２の動作について説明されるが、スレーブノードとして指定される他のコンピュータ１００３〜１００ｎについても１００２と同様な構成・動作であるのは言うまでもない。
【００２５】
図４を参照して、本発明によるクラスタシステム１の機能ブロックが説明される。コンピュータ１００１のプロセッサ１０１はブートプログラム１０を実行することで、役割分担指定部１１、初期化処理部１２、実行状態通信部１３、実行状態反映部１４の機能を実現する。同様に、コンピュータ１００２のプロセッサ１０１は、ブートプログラム１０を実行することで、役割分担指定部２１、初期化処理部２２、実行状態通信部２３の機能を実現する。
【００２６】
役割分担指定部１１、２１は、コンピュータ１００が起動される際、役割指定情報２０に基づいて自コンピュータがマスタノードになるかスレーブノードになるかを決定する。又、分担情報３０に基づいて自コンピュータが初期化すべきデバイスドライバと、起動すべきプロセスを決定する。本実施の形態では、役割分担指定部１１はコンピュータ１００１がマスタノードであると指定し、役割分担指定部２１はコンピュータ１００２がスレーブノードであると指定する。
【００２７】
初期化処理部１２、２２は、役割分担指定部１１、２１により決定されたデバイスドライバやプロセスの初期化や起動を行う。初期化処理部１２、２２の処理内容は、従来のブート方法と同様である。例えば、Ｌｉｎｕｘの場合、デバイスドライバに関しては、ｉｎｓｍｏｄなどのコマンドをプロセッサ１０１で実行し、／ｅｔｃ／ｍｏｄｕｌｅｓ．ｃｏｎｆに含まれるカーネルモジュールをカーネルへ組み込むことで初期化処理される。又、プロセスに関しては／ｅｔｃ／ｒｃ．ｄ以下に設定されたプログラムがプロセッサ１０１で実行されることで起動処理される。
【００２８】
マスタノードとして指定されたコンピュータ１００１の実行状態通信部１３は、コンピュータ１００２によって初期化済みのデバイスドライバの状態や起動後のプロセス状態を状態情報４０として受信する。又、スレーブノードとして指定されたコンピュータ１００２の実行状態通信部２３は、初期化処理部２２で初期化済みのデバイスドライバの状態や起動後のプロセス状態を状態情報４０としてコンピュータ１００１に送信する。この際、実行状態通信部２３は、役割指定情報２０を参照してマスタノードに対応するコンピュータ１００１を宛て先に指定して状態情報４０を転送する。この際、実行状態通信部２３は、役割指定情報２０を参照してマスタノードに対応するコンピュータＩＤ２１０を宛て先に指定して状態情報４０を転送する。尚、初期化済みのデバイスドライバの状態とは、デバイスドライバの実行コードと、主記憶装置１０２で使用中のメモリデータとＯＳ内部で管理されているデバイスドライバの情報などを含む。又、起動後のプロセス状態とは、プロセスが使用する主記憶装置１０２上のデータやカーネル内のプロセス構造体の情報を含む。
【００２９】
実行状態反映部１４はコンピュータ１００２から転送された状態情報４０に基づいてデバイスドライバやプロセスの状態を送信元のコンピュータ１００２と同様な状態にする。例えば、ＯＳ内部のデータ構造を直接操作する方法が用いられる。この方法としてはプロセスマイグレーションやチェックポインティングなどが利用され得る。
【００３０】
（動作）
図５を参照して本発明によるクラスタシステム１のシステム起動処理の動作が説明される。クラスタシステム１に属するコンピュータ１００１及び１００２は、ほぼ同時に起動を開始する。起動が開始されると、最初に、役割分担指定部１１、２１は、自コンピュータがマスタノードかスレーブノードかを決定する。又、初期化すべきデバイスドライバと起動すべきプロセスを決定する（ステップＳ１１）。詳細には、役割分担指定部１１、２１は／ｅｔｃ／ｈｏｓｔｓファイルと、自コンピュータのＩＰアドレスから自コンピュータがマスタノードかスレーブノードかを決定する。すなわち、／ｅｔｃ／ｈｏｓｔｓファイルに”ｍａｓｔｅｒ”と書かれたエントリが存在し、そのエントリのＩＰアドレスが自コンピュータのＩＰアドレスと一致すれば、マスタノードであり、そうでない場合は、スレーブノードと判断する。更に、／ｅｔｃ／ｍｏｄｕｌｅｓ．ｃｏｎｆから初期化すべきデバイスドライバが決定され、／ｅｔｃ／ｒｃ．ｄ以下のファイル（起動スクリプト）により起動すべきプロセスが決定される。ここでは、コンピュータ１００１がマスタノコンピュータ、コンピュータ１００２がスレーブノードとして指定されるものとする。
【００３１】
次に、初期化処理部１２、２２は、ステップＳ１１で決定されたデバイスドライバとプロセスに関して、初期化と起動を実行する（ステップＳ１２）。詳細にはステップＳ１１で決定されたデバイスドライバとプロセスに関して、ｍｏｄｐｒｏｂｅによりデバイスドライバを初期化し、／ｅｔｃ／ｒｃ．ｄ以下のデーモン起動スクリプトの実行によりプロセスを起動する。
【００３２】
ここで、ステップＳ１１において、スレーブノードであると決定された場合（ステップＳ１３のＮｏ）、初期化済みデバイスドライバと起動後のプロセスにより変更されたメモリ内の状態（状態情報４０）をマスタノードに送信する（ステップＳ１６）。一方、ステップ１１で、マスタノードであると決定された場合（ステップＳ１３のＹｅｓ）は、スレーブノードから送信された状態情報４０を受信し（ステップＳ１４）、受信した状態情報４０を自コンピュータの内部状態に反映させる（ステップＳ１５）。詳細には、コンピュータ１００２はスレーブノードと指定されたので、実行状態通信部２３は初期化及び起動後の状態情報４０をコンピュータ１００１に送信する。この際、実行状態通信部２３はプロセスマイグレーションの機能を利用して、状態情報４０を取得してコンピュータ１００１に転送する。尚、プロセスマイグレーションはＬｉｎｕｘの標準機能ではないが研究レベルでの実装がいくつか存在しておりそれを利用できる。コンピュータ１００１の実行状態通信部１３は、状態情報４０を受信し、実行状態反映部１４に送る。実行状態反映部１４は、状態情報４０に基づき自身の主記憶装置１０２の内容を書き換える。
【００３３】
以上のように、本発明によるクラスタシステム１では、システム起動において起動の主体となるマスタノードの起動処理を他のスレーブノードに分散し、その結果をマスタノードに反映できる。このため、システム起動時に初期化するデバイスドライバ数や起動するプロセス数の多いマスタノードの処理数が減少し、システム全体の起動時間が短縮される。尚、マスタノードであるコンピュータ１００１で行うべき初期化処理及び起動処理の全てをスレーブノードであるコンピュータ１００２〜１００ｎに分散させても構わない。又、スレーブノードは１００２〜１００ｎのうち全部又は一部で良いのは言うまでもない。
【００３４】
更に、本実施の形態ではマスタノードとして１つのコンピュータ１００１が指定されたが、複数のコンピュータが指定されても構わない。この際、分担情報３０のデバイスドライバ３２０及びプロセス３３０に状態情報４０の転送先のマスタノードが対応付けられて指定されていることが望ましい。スレーブノードに指定されたコンピュータ１００は、分担情報３０に基づき、初期化したデバイスドライバ３２０、及び起動したプロセス３３０に対応するマスタノードコンピュータを状態情報４０の転送先として決定することができる。
【００３５】
以上、本発明の実施の形態を詳述してきたが、具体的な構成は上記実施の形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。本発明によれば、従来、１台のコンピュータだけで行っていたブート処理を複数のコンピュータで分担し、起動処理の最後の部分で別々に初期化したデバイスドライバやプロセスの状態を１つのコンピュータに集めることができる。このため、個別のＯＳが動作している複数のコンピュータを備えるコンピュータシステムにおいて、システム全体の起動時間を短縮することができる。例えば、本発明によるコンピュータシステムは、それぞれ固有のＯＳによって動作するプロセッサコアを備えるマルチコアプロセッサシステム１’にも応用できる。
【００３６】
図６は、本発明によるマルチコアプロセッサシステム１’の構成図である。マルチコアプロセッサシステム１’は、それぞれ個別のＯＳが動作する複数のプロセッサコア１００１’〜１００ｎ’を備える。以下では、プロセッサコアコア１００１’〜１００ｎ’を総称して説明される場合、コンピュータ装置１００’とされる。プロセッサコア１００’は、内部バス２００’及びメモリコントローラ４００を介して主記憶装置１０２’に接続され、内部バス２００’及びＩ／Ｏコントローラ５００を介して外部記憶装置１０３’、ＮＩＣ１０４’に接続されている。尚、主記憶装置１０２’にはプロセッサコア１００’毎に固定領域が割り当てられ得る。又、外部記憶装置１０３’及びＮＩＣ１０４’はプロセッサコア１００’間で共有される。外部記憶装置１０３’はブートプログラム１０’、役割指定情報２０’、及び分担情報３０’が格納されている。すなわち、プロセッサコア１００’は共通のブートプログラム１０’、役割指定情報２０’、及び分担情報３０’を利用して起動処理を実行できる。
【００３７】
マルチコアプロセッサシステム１’の構成に付された符号で、クラスタシステム１の構成と同一、又は類似の参照符号は、同一、類似、又は等価な構成要素を示しているのでその説明は省略される。又、マルチコアプロセッサシステム１’のシステム起動時の動作は、上述のクラスタシステム１の動作と同様なので説明は省略される。
【図面の簡単な説明】
【００３８】
【図１】図１は、本発明によるクラスタシステムの実施の形態における構成図である。
【図２】図２は、本発明に係るコンピュータの実施の形態における構成図である。
【図３】図３（ａ）は、本発明に係る役割指定情報の構成図である。図３（ｂ）は、本発明に係る分担情報の構成図である。
【図４】図４は、本発明によるクラスタシステムの実施の形態における機能ブロック図である。
【図５】図５は、本発明によるクラスタシステムのシステム起動時における起動処理動作を示すフロー図である。
【図６】図６は、本発明によるマルチコアプロセッサシステムの実施の形態における構成図である。
【符号の説明】
【００３９】
１：クラスタシステム
１’：マルチコアプロセッサシステム
１０、１０’：ブートプログラム
２０、２０’：役割指定情報
３０、３０’：分担情報
１１、２１：役割分担指定部
１２、２２：初期化処理部
１３、２３：実行状態通信部
１４：実行状態反映部
３２０：デバイスドライバ
３３０：プロセス
１００、１００１〜１００ｎ：コンピュータ
１００’、１００１’〜１００ｎ’：プロセッサコア
２００：ネットワーク
２００’：内部バス
２１０：コンピュータＩＤ
２２０：役割情報
１０１：プロセッサ
１０２、１０２’：主記憶装置
１０３、１０３’：外部記憶装置
１０４、１０４’：ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）  
３００：メモリコントローラ
４００：Ｉ／Ｏコントローラ
【図１】
0004817115.tif 000002
【図２】
0004817115.tif 000003
【図３】
0004817115.tif 000004
【図４】
0004817115.tif 000005
【図５】
0004817115.tif 000006
【図６】
0004817115.tif 000007