【実施例1】
【0013】
図1は、実施例1に係る情報処理装置の全体構成例を示す図である。
図1に示すように、情報処理装置10は、複数のシステムボード(System Board:SB)が搭載できるシステムである。
図1では、情報処理装置10上にSB#0とSB#1とSB#2の3台のSBが搭載されている例を示したが、これに限定されるものではなく、情報処理装置の規模や性能等に応じて、任意の数のSBを搭載させることができる。
【0014】
また、各SBには、少なくとも1つのCPU(Central Processing Unit)と、メモリとが搭載されている。具体的には、SB#0には、CPU14aとCPU14bとメモリ14cとが搭載されている。SB#1には、CPU15aとCPU15bとメモリ15cとが搭載されている。SB#2には、CPU16aとCPU16bとメモリ16cとが搭載されている。
【0015】
各メモリは、プログラムやデータを記憶する記憶装置である。各CPUは、SB全体の制御を司る処理部であり、メモリ等に記憶される命令を読み出して実行する。なお、ここでは、各SB上に2台のCPUと1台のメモリとを搭載する例を示したが、これに限定されるものではなく、SBごとに任意の数のCPUやメモリを搭載させることもでき、他のハードウェアを搭載させることもできる。
【0016】
仮想制御部13は、各SBが有するハードウェアを仮想化して仮想OSを提供する処理部である。例えば、SB#0のCPU14aが、図示しないROM(Read Only Memory)から読み出して実行したハイパーバイザなどが該当する。この仮想制御部13は、SB#0とSB#1に跨って仮想OS11を実行し、SB#2上で仮想OS12を実行する。なお、仮想制御部13は、自分自身のためにメモリの一部を用いてハードウェアを管理するデータを保持し、メモリの残りの容量は仮想OSが使用する。各仮想OSは、SB内のハードウェアを直接制御することができず、仮想制御部13に処理を依頼する。
【0017】
このような構成において、SB#0のメモリ14cは、情報処理装置10上で動作する仮想マシンから要求された処理を実行する命令が記述された命令列14dを記憶する。また、SB#0のメモリには、SB#0が有するハードウェアリソースに関するリソース情報14fと、情報処理装置10が有するシステムボードを管理する管理情報14eとを記憶する。
【0018】
また、SB#1のメモリ15cは、情報処理装置10上で動作する仮想マシンから要求された処理を実行する命令が記述された命令列15dと、SB#1が有するハードウェアリソースに関するリソース情報15eとを記憶する。同様に、SB#2のメモリ16cは、情報処理装置10上で動作する仮想マシンから要求された処理を実行する命令が記述された命令列16dと、SB#2が有するハードウェアリソースに関するリソース情報16eとを記憶する。
【0019】
この管理情報14eは、仮想制御部13が動作する際に使用するデータのうち各システムボードで共有するデータである。例えば、管理情報14eとしては、仮想OSを管理するためのデータ、CPU間の通信で受け渡されるデータ、各システムボードのリソース情報を管理するデータなどがある。また、リソース情報14f、リソース情報15e、リソース情報16e各々は、仮想制御部13が動作する際に使用するデータのうち各システムボードで使用するデータである。例えば、各リソース情報としては、特定のSBを管理または制御する際に使用するデータがある。
【0020】
そして、SB#0のCPU14aまたはCPU14bは、SB#0のメモリ14cに記憶された命令列14dを実行し、SB#0のメモリ14cに記憶された管理情報14eやリソース情報14fを参照する。また、SB#1のCPU15aまたはCPU15bは、SB#1のメモリ15cに記憶された命令列15dを実行し、SB#1のメモリ15cに記憶されたリソース情報15eを参照する。同様に、SB#2のCPU16aまたはCPU16bは、SB#2のメモリ16cに記憶された命令列16dを実行し、SB#2のメモリ16cに記憶されたリソース情報16eを参照する。
【0021】
このようにすることで、各SBのCPUは、情報処理装置10上で動作する仮想マシンから要求された処理を実行する命令、すなわち、仮想マシンを提供する仮想制御部13の命令を実行することができる。つまり、各SBのCPUは、仮想OSから仮想制御部13を介して処理が依頼された場合に、該当する命令をメモリ内の命令列から読み出して実行することができる。また、各SBのCPUは、SB内に閉じた処理についてはリソース情報を参照して、SB内で処理を完了させることができる。
【0022】
このように、情報処理装置10内では管理情報14eが1つであることから、情報処理装置10上では1つの仮想制御部13が実行されている。その一方で、各SBのCPUが、仮想制御部13として動作することができる。この結果、情報処理装置10内では、初期化処理などを並列に実行することができ、情報処理装置の起動までにかかる時間を短縮することができる。
【実施例2】
【0023】
次に、
図2から
図9を用いて、情報処理装置が起動した際に、各SBを初期化する例について説明する。
【0024】
[機能ブロック図]
図2は、実施例2に係る情報処理装置の構成を示す機能ブロック図である。
図2に示すように、情報処理装置20は、SB#0とSB#1とSB#2の3つのシステムボードを搭載する。なお、3つのシステムボードを搭載する例を説明したが、情報処理装置20は、さらに複数のシステムボードを追加で搭載できるものとする。また、ここでは、SB#0が、図示しないROMからハイパーバイザのプログラムを読み出して実行するマスターボードとする。
【0025】
また、情報処理装置20では、各SBを跨ってハイパーバイザ21が実行される。ハイパーバイザ21は、情報処理装置20が起動した場合に、マスターボードであるSB#0のCPU24またはCPU25によって実行される処理部である。ハイパーバイザ21は、起動した後、自身が実行する命令列が記述されたプログラムテキストをROMから読み出してコピーを生成する。そして、情報処理装置20では、コピーしたプログラムテキストを、SB#0のメモリ22とSB#1のメモリ32とSB#2のメモリ42の各々に格納する。
【0026】
このハイパーバイザ21は、各SBが有するハードウェアを仮想化して仮想OSを提供する。例えば、ハイパーバイザ21は、SB#0とSB#1に跨って仮想OS#1を実行し、SB#1上で仮想OS#2を実行し、SB#2上で仮想OS#3を実行する。なお、仮想OSの数等について任意に設定することができる。
【0027】
(SB#0の構成)
図2に示すように、SB#0は、メモリ22と入出力部23とCPU24とCPU25とを有する。なお、ここで例示したCPUの数等はあくまで例示であり、これに限定されるものではない。また、ここでは、CPU24が、SB#0の初期化処理を実行するマスターCPUである例で説明するが、いずれのCPUをマスターCPUとするかを任意に選択することができる。
【0028】
メモリ22は、CPU24またはCPU25が実行するプログラム等を記憶する記憶装置であり、プログラムテキスト22aとローカルデータ22bとグローバルデータ22cとを記憶する。なお、各情報は、CPU24またはCPU25等によって更新される。プログラムテキスト22aは、ハイパーバイザ21の命令が記述された命令列である。
【0029】
ローカルデータ22bは、SB#0が有するハードウェアリソースを管理する情報である。
図3は、ローカルデータとして格納される構造体例を説明する図である。
図3に示すように、メモリ22は、ローカルデータ22bとしてCPU構造体とI/O構造体とを記憶する。CPU構造体は、仮想OSを動作させているSB#0内のCPUリソースを管理するデータ構造である。具体的には、メモリ22は、ローカルデータ22bとして、CPU情報#0〜CPU情報#n(nは搭載されるCPUの台数)とゲスト構造体ポインタとを記憶する。
【0030】
CPU情報は、CPUのリソース情報であり、例えば、CPUを特定する識別子と動作させている仮想OSを識別する識別子とを対応付けて情報が該当する。CPUを特定する識別子としては、CPUの製造番号や固有の識別番号などを用いることができ、仮想OSを識別する識別子としては、ゲストOSとして動作する仮想OSに割り与えられたゲストIDなどを用いることができる。ゲスト構造体ポインタは、ローカルデータ22bのCPU構造体と、グローバルデータ22cとして記憶されるゲスト構造体とを関連付けるポインタである。なお、ローカルデータ22bには、メモリの空き容量を管理するデータ構造であるmblock構造体も含まれる。
【0031】
I/O構造体は、仮想OSに割り当てられたSB#0内の入出力リソースを管理するデータ構造である。具体的には、メモリ22は、ローカルデータ22bとして、I/O情報#0〜I/O情報#n(nは搭載されるI/Oの台数)とゲスト構造体ポインタとを記憶する。I/O情報は、入出力のリソース情報であり、例えば、入出力部を特定する識別子と、当該入出力部を使用する仮想OSを識別する識別子とを対応付けて情報が該当する。入出力部を特定する識別子としては、入出力部の製造番号や固有の識別番号などを用いることができる。
【0032】
グローバルデータ22cは、情報処理装置20が有するシステムボードを管理する管理情報、すなわち、情報処理装置20全体を管理する情報である。
図4は、グローバルデータとして格納される構造体例を説明する図である。
図4に示すように、メモリ22は、グローバルデータ22cとして、ポインタ構造体とゲスト構造体とを対応付けて記憶する。ポインタ構造体は、CPU構造体に含まれるゲスト構造体ポインタを示す情報である。ゲスト構造体は、各仮想OSを管理するデータ構造であり、ポインタ構造体のゲスト構造体ポインタごとに対応付けられる。
【0033】
ゲスト構造体は、ゲスト情報とCPU構造体ポインタとI/O構造体ポインタとで構成される。ゲスト情報は、仮想OSを識別する識別子であり、例えば、ゲストOSとして動作する仮想OSに割り与えられたゲストIDなどを用いることができる。CPU構造体ポインタは、仮想OSが使用するCPU情報を特定するポインタである。I/O構造体ポインタは、仮想OSが使用するI/Oを特定するポインタである。このグローバルデータ22cには、仮想OSを管理するためのデータ、CPU間の通信で受け渡される情報、ローカルデータを管理するためのデータなども含まれる。
【0034】
さらに、グローバルデータ22cには、情報処理装置20の構成情報も含まれる。例えば、構成情報としては、搭載可能なSBの数、現在搭載されているSBの数、各SBに搭載されているハードウェアの種類や数などが含まれる。構成情報は、マスターボードのマスターCPUによって更新することもでき、管理者によって手動で更新されてもよい。
【0035】
このようなグローバルデータ22cは、システム全体の管理や制御に使われるデータであり、マスターボードに配置される。グローバルデータ22cの容量はシステム稼動中を通して一定であり、動的な構成変更により変化しない。また、一度割り当てたグローバルデータ22cは、システム稼働中を通して同じ場所にあり、移動することもない。
【0036】
このように、ローカルデータ22bのゲスト構造体ポインタを用いて、グローバルデータ22cのポインタ構造体を特定することができる。また、グローバルデータ22cのポインタ構造体を用いて、グローバルデータ22cのゲスト構造体のゲスト情報を特定することができる。また、グローバルデータ22cのゲスト構造体のゲスト情報のCPU構造体ポインタ#0等を用いて、ローカルデータ22bのCPU構造体のCPU情報#0等を特定することができる。
【0037】
図2に戻り、入出力部23は、データの入出力を実行する処理部である。例えば、入出力部23としては、NIC(Network Interface Card)などの通信インタフェース、ディスクなどの入出力インタフェースなどが該当する。
【0038】
CPU24は、SB#0全体の処理を司る処理部であり、実行制御部24aを有し、SB#0の初期化処理を実行するマスターCPUである。実行制御部24aは、SB#0の初期化を実行する処理部である。具体的には、実行制御部24aは、ハイパーバイザ21によってメモリ22にプログラムテキスト22aが格納された場合に、プログラムテキスト22a内の初期化命令を実行し、ローカルデータ22bを生成してメモリ22に格納する。そして、実行制御部24aは、各SBにおいてローカルデータが生成された後に、グローバルデータ22cを生成してメモリ22に格納する。
【0039】
例を挙げると、実行制御部24aは、プログラムテキスト22aが格納されたことを検知すると、プログラムテキスト22aから、ローカルデータ22bを生成する初期化命令を読み出して実行する。実行制御部24aは、初期化命令を実行することで、SB#0が有するハードウェアの情報を収集し、SB#0に搭載されるCPUの台数や製造番号、メモリの数や製造番号を取得する。そして、実行制御部24aは、CPU構造体と任意のゲスト構造体ポインタとを関連付けたローカルデータ22bを生成して、メモリ22に格納する。なお、ハードウェアの情報は、SB#0の設定情報をスキャンしてもよく、管理者等によって指定されたものを用いることもできる。
【0040】
その後、実行制御部24aは、各SBでローカルデータが生成されるまで待機する。そして、実行制御部24aは、各SBでローカルデータが生成されたことを検知すると、プログラムテキスト22aから、グローバルデータ22cを生成する初期化命令を読み出して実行する。実行制御部24aは、各ローカルデータのCPU情報を収集し、各ゲストOSが使用するCPUを特定する。つまり、実行制御部24aは、各ゲストOSと当該ゲストOSが使用するCPUやI/Oとの対応関係、すなわちゲスト構造体を生成する。そして、実行制御部24aは、ローカルディスクのゲスト構造体ポインタと、ゲスト構造体のゲスト情報とを関連付けたグローバルデータ22cを生成してメモリ22に格納する。
【0041】
CPU25は、SB#0全体の処理を司る処理部であり、実行制御部25aを有する。このCPU25および実行制御部25a各々は、CPU24および実行制御部24a各々と同様の処理を実行する。また、CPU25は、マスターCPUであるCPU24に異常が発生した場合に、マスターCPUとして動作する。
【0042】
(SB#1とSB#2の構成)
次に、SB#1とSB#2の構成について説明するが、SB#1とSB#2とは同様の構成を有するので、ここでは、SB#1を例にして説明する。
図2に示すように、SB#1は、SB#0と同様、メモリ32と入出力部33とCPU34とCPU35とを有する。なお、ここで例示したCPUの数等はあくまで例示であり、これに限定されるものではない。また、ここでは、CPU34が、SB#1の初期化処理を実行するマスターCPUである例で説明するが、いずれのCPUをマスターCPUとするかを任意に選択することができる。
【0043】
メモリ32は、CPU34またはCPU35が実行するプログラム等を記憶する記憶装置であり、プログラムテキスト32aとローカルデータ32bとを記憶する。なお、各情報は、CPU34またはCPU35等によって更新される。プログラムテキスト32aは、ハイパーバイザ21の命令が記述された命令列であり、SB#0のメモリ22に記憶されるプログラムテキスト22aと同じ内容である。
【0044】
ローカルデータ32bは、SB#1が有するハードウェアリソースを管理する情報である。ローカルデータ32bは、
図3に示した情報と同様の情報を記憶する。つまり、ローカルデータ32bは、仮想OSを動作させているSB#1内のCPUリソースやI/Oリソースを管理するデータ構造である。
【0045】
入出力部33は、データの入出力を実行する処理部である。例えば、入出力部33としては、NICなどの通信インタフェース、ディスクなどの入出力インタフェースなどが該当する。
【0046】
CPU34は、SB#1全体の処理を司る処理部であり、実行制御部34aを有し、SB#1の初期化処理を実行するマスターCPUである。なお、実行制御部34aが実行する初期化処理は、SB#0の実行制御部24aが実行するローカルデータの初期化処理と同様なので、詳細な説明は省略する。
【0047】
CPU35は、SB#1全体の処理を司る処理部であり、実行制御部35aを有する。このCPU35および実行制御部35a各々は、CPU34および実行制御部34a各々と同様の処理を実行する。また、CPU35は、マスターCPUであるCPU34に異常が発生した場合に、マスターCPUとして動作する。
【0048】
[処理の流れ]
次に、
図2に示した情報処理装置20が実行する処理の流れについて説明する。ここでは、起動処理の流れ、SB初期化処理の流れについて説明する。
【0049】
(起動処理の流れ)
図5は、実施例2に係る情報処理装置が実行する起動処理の流れを示すフローチャートである。
図5に示すように、情報処理装置20に電源が投入されると(S101肯定)、情報処理装置20が有するいずれかのCPUは、ROMからハイパーバイザ21のプログラムを読み出して実行し、ハイパーバイザ21を起動させる(S102)。
【0050】
続いて、ハイパーバイザ21は、マスターボードを選定する(S103)。例えば、ハイパーバイザ21は、予め定めた条件によって、複数のSBから1つのマスターボードを選定する。選定する基準としては、各SBが有する識別番号のうち最小の識別番号を有するSBをマスターボードとして選定してもよい。また、ハイパーバイザ21は、各CPUが有する識別番号のうち最小の識別番号を有するCPUが搭載されたSBをマスターボードとして選定してもよい。また、メモリ領域に変数を用意しておき、その変数を最初に更新したCPUが搭載されるSBをマスターボードとして選定することもできる。ただし、グローバルデータを配置できるメモリ容量を有するSBが好ましい。なお、ここでは、SB#0がマスターボードとして選定されたものとする。
【0051】
その後、ハイパーバイザ21は、プログラムテキストの配置場所を決定して配置する(S104)。具体的には、ハイパーバイザ21は、ROMに格納されるハイパーバイザのプログラムテキストとして各SBにコピーするために、SB内のどのメモリアドレスに配置するかを決定する。例えば、ハイパーバイザ21は、全SBでSB内の相対的な位置が同じで、かつ、プログラムテキストの格納に用いる容量を連続して確保できるメモリ領域を、配置場所として決定する。また、ハイパーバイザ21は、SBごとに、プログラムテキストの格納に用いる容量を連続して確保できるメモリ領域を、配置場所として決定することもできる。
【0052】
続いて、ハイパーバイザ21は、グローバルデータの配置場所を決定する(S105)。具体的には、ハイパーバイザ21は、マスターボードのメモリ上に、グローバルデータの配置場所を決定する。例えば、ハイパーバイザ21は、SB#0のメモリ22において、グローバルデータが格納できる連続した領域を、配置場所に決定する。
【0053】
その後、各SBでSBの初期化処理が実行された後(S106)、各SBの初期化処理が終了すると(S107肯定)、マスターボードであるSB#0のCPU24の実行制御部24aは、グローバルデータ22cの初期化を実行する(S108)。
【0054】
(SB初期化処理の流れ)
図6は、実施例2に係る情報処理装置が実行するSB初期化処理の流れを示すフローチャートである。
図6に示すように、各SBではマスターCPUが選定され(S201)、選定されたマスターCPUの実行制御部が、ローカルデータの配置場所を決定する(S202)。例えば、各SBでは、識別番号が最も小さいCPUをマスターCPUと決定する。また、各SBのマスターCPUは、各SBのメモリ内の任意の場所をローカルデータの配置場所と決定することもでき、全SBでSB内の相対的な位置が同じでかつ連続して確保できる領域を配置場所と決定することもできる。
【0055】
続いて、マスターCPUは、メモリ内にCPU管理用の配列を確保する(S203)。具体的には、マスターCPUは、
図3に示したCPU構造体を格納する配列をメモリ内に確保する。
【0056】
その後、マスターCPUは、変数(i)に0を代入し(S204)、変数(i)がSB内のCPU数以上か否かを判定する(S205)。そして、マスターCPUは、変数(i)がSB内のCPU数未満である場合(S205否定)、CPU管理用配列のi番目を初期化する(S206)。具体的には、マスターCPUは、
図3に示したCPU構造体のCPU情報#iを生成する。そして、マスターCPUは、変数(i)を1増加させた後(S207)、S205に戻って以降の処理を実行する。
【0057】
その後、マスターCPUは、変数(i)がSB内のCPU数以上となった場合(S205肯定)、メモリ内にI/O管理用の配列を確保する(S208)。具体的には、マスターCPUは、
図3に示したI/O構造体を格納する配列をメモリ内に確保する。
【0058】
続いて、マスターCPUは、変数(j)に0を代入し(S209)、変数(j)がSB内のI/O数以上か否かを判定する(S210)。そして、マスターCPUは、変数(j)がSB内のI/O数未満である場合(S210否定)、I/O管理用配列のj番目を初期化する(S211)。具体的には、マスターCPUは、
図3に示したI/O構造体のI/O情報#jを生成する。そして、マスターCPUは、変数(j)を1増加させた後(S212)、S210に戻って以降の処理を実行する。その後、マスターCPUは、変数(j)がSB内のI/O数以上となった場合(S210肯定)、処理を終了する。なお、ここでは、先にCPU構造体を生成する例を説明したが、先にI/O構造体を生成してもよい。
【0059】
[具体例]
次に、上述した初期化の具体例を説明する。
図7は、初期化の具体例を示す図である。
図7には、各SBが搭載するハードウェアが仮想化されて仮想OSを動作させた場合に、ローカルデータやグローバルデータが、どのような関係で各種情報を管理するかを示している。
図7では、各SB#0が2つのCPUと1つのメモリとを搭載する。
【0060】
このような状態において、まず、ハイパーバイザは、ROM等に格納される、自身が実行する命令列が記述されたプログラムテキストのコピーを各SBのメモリに格納する。また、ハイパーバイザは、ハードウェアリソースを仮想化するための構造を持ち、これらの構造はハードウェアリソースと1対1に対応づけられる。したがって、各SBの実行制御部は、これらの関係性を示すCPU構造体やI/O構造体を生成し、各SBのメモリ上でローカルデータとして保持する。
【0061】
続いて、仮想OSが実行される。ここでは、SB#0の2つのCPUと1つのメモリと、SB#1の1つのCPUとが協働して仮想OS#0を動作さる。また、SB#1では、1つのCPUと1つのメモリとを用いて、仮想OS#1をさらに動作させる。また、SB#2では、2つのCPUを用いて、仮想OS#2を動作させる。
【0062】
すると、マスターボードの実行制御部は、仮想OSと仮想OSが使用するハードウェアとの関係性をグローバルデータとして生成する。具体的には、マスターボードの実行制御部は、各SBにローカルデータとして格納された、CPUやI/Oがどの仮想OSを動作させているかを特定する情報を生成する。
【0063】
つまり、マスターボードの実行制御部は、仮想OS#0に割当てられた仮想ハードウェアが、SB#0内の2つのCPUとSB#1内の1つのCPUとSB#0の1つのI/Oとから形成されることを示す情報を生成する。同様に、マスターボードの実行制御部は、仮想OS#1に割当てられた仮想ハードウェアが、SB#1内の1つのCPUと1つのI/Oとから形成されることを示す情報を生成する。同様に、マスターボードの実行制御部は、仮想OS#2に割当てられた仮想ハードウェアが、SB#2内の2つのCPUから形成されることを示す情報を生成する。
【0064】
このように、実施例2に係る情報処理装置は、ハイパーバイザのプログラムテキストを各SBに配置し、各SB内に閉じた情報であるローカルデータについては各SBのメモリに格納する。また、実施例2に係る情報処理装置は、各SBに跨った情報、各SBを関連付ける情報、各SBに共通する情報、仮想OSに関する情報などであるグローバルデータについては、マスターボードのメモリに格納する。したがって、情報処理装置は、情報処理装置に現に搭載されているSBの数と同じ数のローカルデータと、1つのグローバルデータとを保持する。
【0065】
[比較]
次に、上述した実施例によって情報処理装置の起動時間が短縮できることを説明する。
図8は、従来技術に係る情報処理装置の起動シーケンス図である。
図9は、実施例2に係る情報処理装置の起動シーケンス図である。
【0066】
従来の情報処理装置は、
図14に示したように、SB#0にプログラムテキストと、ローカルデータやグローバルデータとが配置される。つまり、従来の情報処理装置では、ハイパーバイザの作業域がSBとは無関係に配置されるので、作業域の初期化処理の1つのCPUで実行される。例えば、
図8に示すように、SB#0が、SB#0の初期化、SB#1の初期化、SB#2の初期化を順に実行する。
【0067】
これに対して、各実施例に係る情報処理装置では、各SBにプログラムテキストとローカルデータとが配置される。つまり、実施例2に係る情報処理装置では、ハイパーバイザの作業域の一部が各SBに分散されるので、初期化処理のうち各SBで並行してできる部分が発生する。例えば、
図9に示すように、SB#0とSB#1とSB#2とが、ローカルデータの初期化を並行して実行する。その後、SB#0が、グローバルデータの初期化を実行する。
【0068】
このように、
図8と
図9とを比較してもわかるように、各実施例に係る情報処理装置では、ローカルデータの初期化を並行して実行することができ、SBの初期化にかかる時間を短縮することができる。
【実施例3】
【0069】
実施例2では、各SBの初期化処理について説明したが、各実施例に係る情報処理装置は初期化処理に限定されるものではない。そこで、実施例3では、初期化処理以外の通常処理の流れやOSの追加処理等について説明する。なお、実施例3に係る情報処理装置の機能構成は、実施例2で説明した情報処理装置20と同様とする。
【0070】
(通常処理の流れ)
図10は、実施例3に係る情報処理装置が実行する通常処理の流れを示すフローチャートである。
図10に示すように、情報処理装置20内のいずれかのSBで処理依頼が発生した場合に(S301肯定)、当該SBのCPUは、自SB内のプログラムテキストが読めるか否かを判定する(S302)。
【0071】
続いて、当該SBのCPUは、自SB内のプログラムテキストが読めると判定した場合(S302肯定)、自SBが有するメモリ内のプログラムテキストから該当する命令を読み出して実行する(S303)。一方、当該SBのCPUは、自SB内のプログラムテキストが読めないと判定した場合(S302否定)、他のSBが有するメモリ内のプログラムテキストを参照し(S304)、他のSB内のプログラムテキストから該当する命令を読み出して実行する(S303)。
【0072】
その後、命令を実行したSBのCPUは、自SB内が有するメモリ内のローカルデータを参照し(S305)、ローカルデータで処理が完了できるか否かを判定する(S306)。
【0073】
そして、当該SBのCPUは、ローカルデータで処理が完了できると判定した場合(S306肯定)、参照したローカルデータを使用して処理を実行する(S307)。一方、当該SBのCPUは、ローカルデータで処理が完了できないと判定した場合(S306否定)、マスターボードが有するメモリ内のグローバルデータを参照して処理を実行する(S308)。
【0074】
一般的には、OSがハイパーバイザ21に処理を依頼する場合、OSを実行中のCPUの特権レベルをハイパーバイザ特権に昇格させ、ハイパーバイザ21のプログラムテキストの命令列を実行する。この際、OSを実行していたCPUがそのまま使われる。
図10の場合、OSからハイパーバイザ21に処理が依頼されると、ハイパーバイザ21は自SB内のプログラムテキストを使用し処理を開始する。ハイパーバイザ21は、依頼された処理がローカルデータを使用して完了できる場合は、他のSBにはアクセスせずに処理を実行してOSに応答を返す。また、ハイパーバイザ21は、依頼された処理がグローバルデータを用いる場合は、マスターボードのグローバルデータを参照または更新して処理を実行する。したがって、マスターボード以外のCPUでこのような処理を行う場合は、グローバルデータを参照するために、SBを越えてメモリアクセスが実行される。
【0075】
例えば、SB#1のCPU34がOSから処理を依頼された場合、CPU34は、SB#1のメモリ32のプログラムテキスト32aを読み出して該当する命令を実行する。そして、SB#1のCPU34は、ローカルデータ32bを参照して処理を実行する。このとき、SB#1のCPU34は、ローカルデータ32bでは処理を完了できない場合には、SB#0のグローバルデータ22cを参照して処理を実行する。
【0076】
(新たなOSの動作)
図11は、新たなOSを動作させる場合のマスターボードの処理例を説明する図である。情報処理装置20において新たなOSを起動させる場合、マスターボードのCPUは、グローバルデータおよびローカルデータの空きメモリ領域から新たなOSを管理するためのデータ構造を切り出して初期化し、ハイパーバイザ21が管理するデータ構造と関連付ける。
【0077】
図11に示すように、まず、マスターボードであるSB#0のCPU24は、新たなOSを管理するためのゲスト構造体と、新たなOSが使うCPUを管理するためのデータ構造とを割り当てる。具体的には、SB#0のCPU24は、グローバルデータ22cの空き領域(free mblock)を探してゲスト構造体を作成し、ローカルデータ22bの空き領域(free mblock)を探してCPU構造体を生成する。次に、SB#0のCPU24は、ゲスト構造体とCPU構造体をポインタでつなぎ、ゲスト構造体をハイパーバイザがサービスを提供する各ゲスト構造体と関連付ける。なお、ここではCPU構造体を例にして説明したが、SB#0のCPU24は、I/O構造体についても同様に実行する。
【0078】
(SBの追加と削除)
新たなSBを追加する場合、マスターボードであるSB#0のCPU24は、新たなSBに関する管理情報をグローバルデータとして追加し、プログラムテキストを新たなSBのメモリに格納する。
【0079】
例えば、SB#0のCPU24は、SB#0内のプログラムテキストまたはROMから読み出したプログラムテキストのコピーを生成し、生成したプログラムテキストを新たに追加されたSB#3のメモリに格納する。続いて、SB#0のCPU24は、初期化命令をSB#3のCPUに発行する。
【0080】
そして、SB#3のCPUは、実施例2で説明した手法と同様、メモリに記憶されたプログラムテキストから初期化命令を実行して、ローカルデータをメモリに生成する。その後、SB#0のCPU24は、グローバルデータ22c内に、SB#3のローカルデータの格納位置を示す情報等を格納する。また、SB#0のCPU24は、既存のSB#2が削除された場合、例えばゲスト構造体のCPU構造体ポインタやI/O構造体ポインタなど、グローバルデータ22c内のSB#2の情報を削除する。
【0081】
(メモリ容量の削減例)
図12は、メモリ容量を削減できることを説明する図である。ここでは、16コアのCPUを1つのSBあたり4個搭載でき、最大16個のSBが搭載可能なシステムでのメモリ使用量を説明する。
【0082】
図12に示すように、この情報処理装置は、SBの搭載数に関係なくグローバルデータの容量が一定であり、SBの搭載数が増加するにつれてローカルデータの容量が増える。例を挙げると、1台のSBが搭載されている状況では、ローカルデータの容量が74.2MBであり、グローバルデータの容量が1191.5MBである。したがって、合計1265.7MBの領域がメモリに確保されていることを示す。
【0083】
従来では、SBの搭載数にかかわらず、常に2378.7MBの領域をハイパーバイザで確保していた。つまり、従来の場合は、
図12に示した「SB搭載数が16」に対応した「Total(MB)=2378.7MB」をSB#0のメモリに確保していた。
【0084】
これに対して、実施例1や実施例2で説明した手法を用いることで、
図12に示すように、1つのSBを搭載する状態ではハイパーバイザのメモリ使用量を1265.7MBに抑えることができる。つまり、1つのSBを搭載する状態では、従来に比較して約50%程度のメモリの使用量を削減できる。
【0085】
上述してきたように、ハイパーバイザのプログラムテキストを各SBに配置することで、システム内にプログラムテキストのコピーがSB数分存在することになる。したがって、あるCPUがハイパーバイザの処理を行う際は、そのCPUが搭載されたSBにあるプログラムテキストのコピーを使うことで、プログラム列の読み込み速度が向上し処理時間が短縮する。また、SB上のプログラムテキストが壊れたとしても、他のSB上のプログラムテキストを使用することで、SBの故障によりシステムダウンを引き起こす可能性が低くなり、可用性や信頼性が向上する。
【0086】
つまり、SB間でコピーされたプログラムコードは、論理的には同じものだが、物理的には違うプログラムコードなので、複数のハイパーバイザが協調して動作することで可用性や信頼性を向上させることができる。例えば、SB#1のCPUは、SB#1のプログラムテキストが読めない状態になった場合でも、他のSBのプログラムテキストを読み出して実行することができる。
【0087】
また、ローカルデータはシステム設計上の最大SB数ではなく、実際に使用しているSB数に応じた量でよい。また、動的変更により追加や削除されるSBを管理するためのメモリリソースは、そのSB上に確保すればよい。さらに、ハイパーバイザが自分自身で使用するメモリリソースをグローバルデータとローカルデータに分離させたので、両者を関係づけるための情報をグローバルデータに設ける。動的変更によりSBが増加することを想定すると、最大システム構成分の記録場所をあらかじめ用意しておくことになるが、各実施例に係る情報処理装置では、ローカルデータの位置を記録できる容量をグローバルデータ内に確保すればよい。これはメモリリソースと比べると無視できるほど小さい。
【0088】
なお、グローバルデータ内に確保されたローカルデータの位置を記録するデータは、ハイパーバイザの起動時、あるいは動的変更でSBが追加される時点で記録される。また、動的変更でSBが削除される場合は、ローカルデータの位置を記録するグローバルデータ内のポインタを無効化すればよい。