(57)【要約】【課題】異常が発生したハードウェアの置き換え時にライセンス超過を起こさないようにする。【解決手段】情報処理装置１は、複数の処理を並列に実行可能であって、並列に実行する処理ごとに個別に設けられた個別回路を有する演算回路１１，１２を備える。制御部３は、演算回路１１，１２のうち、使用権の数の演算回路の動作を許可する。また、制御部３は、動作中の演算回路１１に搭載された個別回路２１の異常を検知したとき、異常が検知された個別回路２１が搭載された演算回路１１における他の個別回路２２の動作を停止させ、動作していない他の演算回路１２の動作を開始させる。【選択図】図１
2014048907.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理を並列に実行可能であって、並列に実行する処理ごとに個別に設けられた個別回路を有する演算回路を、複数備えた情報処理装置において、
前記演算回路を単位として設定された使用権の数を記憶する記憶部と、
複数の前記演算回路のうち、前記使用権の数の前記演算回路の動作を許可するとともに、動作中の前記演算回路に搭載されたいずれかの前記個別回路の異常を検知すると、異常が検知された前記個別回路が搭載された前記演算回路における他の前記個別回路の動作を停止させ、動作していないいずれかの前記演算回路の動作を開始させる制御部と、
を有することを特徴とする情報処理装置。
【請求項２】
前記制御部は、動作中の前記演算回路に搭載されたいずれかの前記個別回路の異常を検知したとき、動作していない前記演算回路が存在しない場合には、動作中の前記演算回路の中に使用されていない前記個別回路があるかを判定し、使用されていない前記個別回路がある場合には、異常が検知された前記個別回路を用いて実行されていた処理を、使用されていない前記個別回路を用いて実行させることを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記記憶部は、動作中の前記演算回路に搭載された前記個別回路のうち、１つまたは複数のオペレーティングシステムのいずれかの処理に割り当てられた前記個別回路の情報を保持する管理情報を記憶し、
前記制御部は、前記管理情報においていずれかのオペレーティングシステムの処理に割り当てられた前記個別回路の異常を検知したとき、動作していない前記演算回路が存在しない場合には、前記管理情報に基づき、動作中の前記演算回路に搭載された前記個別回路の中にいずれのオペレーティングシステムの処理にも割り当てられていない前記個別回路があるかを判定し、いずれのオペレーティングシステムの処理にも割り当てられていない前記個別回路がある場合には、異常が検知された前記個別回路がいずれのオペレーティングシステムにも割り当てられていない前記個別回路に置き換えられるように前記管理情報を更新する、
ことを特徴とする請求項１記載の情報処理装置。
【請求項４】
前記情報処理装置は、複数のメモリ装置を有し、
前記記憶部は、前記メモリ装置を単位として設定されたメモリ使用権の数を記憶し、
前記制御部は、複数の前記メモリ装置のうち、前記メモリ使用権の数の前記メモリ装置の使用を許可するとともに、使用中の前記メモリ装置の記憶領域を分割した分割領域のいずれかから異常を検知すると、異常が検知された前記分割領域を含む前記メモリ装置における他の前記分割領域の使用を停止させ、使用されていないいずれかの前記メモリ装置の使用を開始する、
ことを特徴とする請求項１〜３のいずれか１項に記載の情報処理装置。
【請求項５】
複数の処理を並列に実行可能であって、並列に実行する処理ごとに個別に設けられた個別回路を有する演算回路を、複数備えた情報処理装置における制御方法であって、
前記演算回路を単位として設定された使用権の数を記憶する記憶部を参照して、複数の前記演算回路のうち、前記使用権の数の前記演算回路の動作を許可し、
動作中の前記演算回路に搭載されたいずれかの前記個別回路の異常を検知すると、異常が検知された前記個別回路が搭載された前記演算回路における他の前記個別回路の動作を停止させ、動作していないいずれかの前記演算回路の動作を開始させる、
ことを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および制御方法に関する。
【背景技術】
【０００２】
ＣｏＤ（Capacity on Demand）は、サーバコンピュータなどの情報処理装置において、ＣＰＵ（Central Processing Unit）などのハードウェア資源をユーザが必要な分だけ使用できるようにするものである。
【０００３】
例えば、ＣｏＤによりＣＰＵの使用数を制限する方法としては、ユーザは、複数のＣＰＵが搭載された情報処理装置を購入する際、使用するＣＰＵの数に応じた料金を支払う。これにより情報処理装置は、料金に応じた数のＣＰＵが動作する一方、その数を超えたＣＰＵの動作が禁止された状態で、ユーザに提供される。その後、情報処理装置の処理能力の増強が必要になった場合には、ユーザは、ＣＰＵの使用権を新たに購入することで、それまで使用していなかったＣＰＵを直ちに使用可能になる。
【０００４】
ＣｏＤに関する技術の一例として、使用権が設定されたプロセッサが故障した場合に、使用権が設定されていない置き換えプロセッサを始動させて、故障プロセッサを停止させるようにしたものがある。
【０００５】
また、近年のマルチコアプロセッサの中には、プロセッサ内の各コアの内部に複数のハードウェアスレッドを備えるものがある。ハードウェアスレッドは「ストランド（Strand）」と呼ばれることもある。コア内のハードウェアスレッドは、それぞれ個別の処理を並列に実行可能である。また、ハードウェアスレッドごとにレジスタなどのハードウェア資源が個別に設けられることもある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−２８８１８３号公報
【特許文献２】特開２００４−３１８８８５号公報
【特許文献３】特表２００７−０９９６０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、上記のように複数のハードウェアスレッドを備えたコアを複数含むマルチコアプロセッサが搭載された情報処理装置において、ＣｏＤによりコアごとに使用権を設定した場合には、次のような問題がある。ハードウェアスレッドごとに個別に設けられたハードウェアのいずれかに異常が発生したときに、異常が発生したハードウェアスレッドを別のハードウェアスレッドに置き換えると、その置き換えの仕方によってはライセンス超過が発生する場合がある。
【０００８】
１つの側面では、本発明は、異常が発生したハードウェアの置き換え時におけるライセンス超過の発生を防止した情報処理装置および制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの案では、複数の処理を並列に実行可能であって、並列に実行する処理ごとに個別に設けられた個別回路を有する演算回路を、複数備えた情報処理装置が提供される。この情報処理装置は、次のような記憶部および制御部を有する。記憶部は、演算回路を単位として設定された使用権の数を記憶する。制御部は、複数の演算回路のうち、使用権の数の演算回路の動作を許可する。また、制御部は、動作中の演算回路に搭載されたいずれかの個別回路の異常を検知すると、異常が検知された個別回路が搭載された演算回路における他の個別回路の動作を停止させ、動作していないいずれかの演算回路の動作を開始させる。
【００１０】
また、１つの案では、上記の情報処理装置と同様の処理を実行する制御方法が提供される。
【発明の効果】
【００１１】
１態様によれば、情報処理装置および制御方法において、異常が発生したハードウェアの置き換え時におけるライセンス超過の発生を防止できる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態に係る情報処理装置の構成例およびその動作例を示す図である。
【図２】第２の実施の形態に係るサーバ装置の全体構成例を示す図である。
【図３】ＣＰＵチップの内部構成例を示す図である。
【図４】スレッドの故障が発生した場合の処理の参考例を示す図である。
【図５】第２の実施の形態におけるスレッド故障時の処理例を示す図である。
【図６】情報処理装置が備える機能の構成例を示すブロック図である。
【図７】コア管理テーブルに登録される情報の例を示す図である。
【図８】ドメイン管理テーブルに登録される情報の例を示す図である。
【図９】スレッドの置き換え処理の例を示すフローチャートである。
【図１０】スレッドの置き換え処理の例を示すフローチャートである。
【図１１】スレッド切り離し処理の例を示すフローチャートである。
【図１２】スレッド組み込み処理の例を示すフローチャートである。
【図１３】コア管理テーブルの遷移の例を示す図である。
【図１４】ドメイン管理テーブルの遷移の例を示す図である。
【図１５】第３の実施の形態に係る情報処理装置が備える機能の構成例を示すブロック図である。
【図１６】メモリ装置に対するライセンス設定の第１の例を示す図である。
【図１７】メモリ装置に対するライセンス設定の第２の例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る情報処理装置の構成例およびその動作例を示す図である。図１に示す情報処理装置１は、記憶部２、制御部３および複数の演算回路を有している。図１の例では、情報処理装置１は２つの演算回路１１，１２を備えているが、演算回路の搭載数は２つ以上の任意の数とすることができる。
【００１４】
演算回路１１，１２は、例えば、プロセッサの内部に搭載されるプロセッサコア、またはプロセッサとして実現される。制御部３も、例えば、プロセッサコアまたはプロセッサとして実現される。制御部３は、例えば、複数の演算回路のうちの１つとして実現されてもよい。記憶部２は、ＨＤＤ（Hard Disk Drive）、ＳＳＤ（Solid State Drive）などの不揮発性記憶装置として実現される。
【００１５】
演算回路１１，１２のそれぞれは、複数の処理を並列に実行可能である。また、演算回路１１，１２のそれぞれは、並列に実行する処理ごとに個別に設けられた個別回路を有する。演算回路１１，１２がプロセッサコアまたはプロセッサである場合、個別回路は、例えば、レジスタセット、命令バッファ、演算器、またはこれらの任意の組み合わせとして実現される。
【００１６】
本実施の形態では例として、図１の右側に示すように、演算回路１１は個別回路２１，２２を有し、演算回路１２は個別回路２３，２４を有するものとする。すなわち、演算回路１１は、個別回路２１，２２を用いて２系統の処理を並列に実行でき、演算回路１２は、個別回路２３，２４を用いて２系統の処理を並列に実行できる。なお、「複数の処理を並列に実行する」とは、各処理を同時に実行することの他、各処理を時分割して交互に実行することや、各処理をパイプライン方式で実行することを含んでもよい。
【００１７】
情報処理装置１には、演算回路を単位として使用権が設定される。使用権は、例えば、情報処理装置１のユーザが所定の料金を支払うことで設定される。記憶部２は、設定された使用権の数を記憶する。
【００１８】
制御部３は、記憶部２に記憶された使用権の数の演算回路の動作を許可する。例えば、使用権の数が「１」である場合、制御部３は、演算回路１１，１２の一方の動作を許可し、他方の動作を禁止する。これにより、ユーザは、情報処理装置１に演算回路が２つ以上搭載されている場合であっても、１つの演算回路だけしか使用できない。
【００１９】
また、制御部３は、動作中の演算回路に搭載されたいずれかの個別回路の異常を検知したとき、異常が検知された個別回路が搭載された演算回路に含まれる他の個別回路の動作を停止させ、動作していないいずれかの演算回路の動作を開始させる。ここで、制御部３は、個別回路の異常を検知したとき、異常が検知された個別回路が搭載された演算回路における他の少なくとも１つの個別回路から異常が検知されていなくても、その演算回路内の他のすべての動作を停止する。このような処理により、動作中の演算回路の数が使用権の数より多くなるというライセンス超過の発生が防止される。
【００２０】
例えば、図１に「状態１」として示すように、演算回路１１が動作中であり、演算回路１２が動作していないものとする。また、設定された使用権の数が「１」であるものとする。なお、図１の右側では、動作中の回路を実線で示し、動作していない回路を点線で示している。
【００２１】
ここで、制御部３が個別回路２１での異常発生を検知したものとする。このとき制御部３は、個別回路２２の異常を検知していなくても、個別回路２２の動作を停止させる。これにより、演算回路１１自体の動作が停止する。そして、制御部３は、動作していなかった演算回路１２の動作を開始させる。このように動作する演算回路が置き換えられた状態を、図１に「状態２」として示す。この状態において制御部３は、例えば、個別回路２１を用いて実行されていた処理を、個別回路２３を用いて引き続き実行させ、個別回路２２を用いて実行されていた処理を、個別回路２４を用いて引き続き実行させる。
【００２２】
仮に、個別回路２１の異常を検知したとき、個別回路２１の動作が停止されて、演算回路１２内の個別回路２３，２４のいずれかの動作が開始された場合には、演算回路１２もユーザに使用されることになる。この場合、使用される演算回路の数が「２」になって、ライセンス超過が発生してしまう。
【００２３】
これに対して、本実施の形態の制御部３の処理によれば、個別回路の異常検知時に必ず演算回路を単位としてハードウェアの置き換えが行われることから、ライセンス超過の発生が防止される。図１の右側の動作例では、ハードウェアの置き換え前を示す状態１と、置き換え後を示す状態２では、いずれも動作中の演算回路の数は「１」であり、設定された使用権の数の範囲に収まっている。
【００２４】
〔第２の実施の形態〕
次に、情報処理装置の例として、マルチコア・マルチスレッド方式のプロセッサが搭載されたサーバ装置を挙げて説明する。
【００２５】
図２は、第２の実施の形態に係るサーバ装置の全体構成例を示す図である。図２に示すサーバ装置１００は、ビルディングブロック１１０ａ〜１１０ｄおよびサービスプロセッサ１２０を備える。ビルディングブロック１１０ａ〜１１０ｄおよびサービスプロセッサ１２０は、例えば、ラック内のスロットにそれぞれ挿入され、ラックのバックボードに設けられたバス１０１を通じて互いに接続されて、データを送受信できるようになっている。
【００２６】
ビルディングブロック１１０ａは、ＣＰＵチップ１１１ａ，１１１ｂ、メモリ１１２ａ，１１２ｂ、ディスクユニット１１３および通信インタフェース１１４を備える。ビルディングブロック１１０ａ内のこれらのハードウェア要素は、例えば、図示しないクロスバーを介して互いに接続される。また、ディスクユニット１１３には、ＨＤＤ１１５ａ，１１５ｂが搭載されている。
【００２７】
ＣＰＵチップ１１１ａ，１１１ｂはそれぞれ、後述するように複数のＣＰＵコアを備えた、マルチコア方式のプロセッサである。ＣＰＵチップ１１１ａは、ディスクユニット１１３内のＨＤＤ１１５ａ，１１５ｂなどの不揮発性記憶装置からプログラムを読み出してメモリ１１２ａ，１１２ｂの少なくとも一方にロードし、ロードしたプログラムを実行する。ＣＰＵチップ１１１ｂも同様に、ディスクユニット１１３内のＨＤＤ１１５ａ，１１５ｂなどの不揮発性記憶装置からプログラムを読み出してメモリ１１２ａ，１１２ｂの少なくとも一方にロードし、ロードしたプログラムを実行する。
【００２８】
メモリ１１２ａ，１１２ｂは、ともに揮発性の記憶装置である。メモリ１１２ａには、ＣＰＵチップ１１１ａ，１１１ｂの少なくとも一方に実行させるプログラムの少なくとも一部や、プログラムの実行に必要な各種データが一時的に格納される。メモリ１１２ｂにも同様に、ＣＰＵチップ１１１ａ，１１１ｂの少なくとも一方に実行させるプログラムの少なくとも一部や、プログラムの実行に必要な各種データが一時的に格納される。
【００２９】
ディスクユニット１１３内のＨＤＤ１１５ａ，１１５ｂには、プログラムや各種データが格納される。なお、ディスクユニット１１３には、ＳＳＤなどの他の種類の不揮発性記憶装置が搭載されてもよい。
【００３０】
通信インタフェース１１４は、バス１０１に接続し、バス１０１とＣＰＵチップ１１１ａ，１１１ｂとの間でデータを送受信する。
なお、ビルディングブロック１１０ａに搭載されるＣＰＵチップの数やＲＡＭの数、およびディスクユニット１１３に搭載される不揮発性記憶装置の数は、それぞれ任意の数とすることができる。
【００３１】
ビルディングブロック１１０ｂ〜１１０ｄのそれぞれは、ビルディングブロック１１０ａと同様のハードウェア構成を有しており、ここでは説明を省略する。
以上のように、サーバ装置１００は、それぞれに１つ以上のプロセッサ（ここではＣＰＵチップを指す）が搭載されたビルディングブロックを複数備える。このような構成により、サーバ装置１００全体としてマルチプロセッサシステムが実現される。
【００３２】
サービスプロセッサ１２０は、ビルディングブロック１１０ａ〜１１０ｄの動作状態を監視する。サービスプロセッサ１２０は、ＣＰＵ１２１、メモリ１２２、ＨＤＤ１２３および通信インタフェース１２４を備える。
【００３３】
ＣＰＵ１２１は、ＨＤＤ１２３に格納されたファームウェアプログラムをメモリ１２２にロードし、ロードしたファームウェアプログラムを実行する。これによりＣＰＵ１２１は、ビルディングブロック１１０ａ〜１１０ｄの監視を含む所定の処理を実行する。
【００３４】
メモリ１２２は、ファームウェアプログラムの少なくとも一部や各種データを一時的に記憶する揮発性記憶装置である。ＨＤＤ１２３は、不揮発性記憶装置の一例であり、例えば、ＳＳＤなどの他の種類と置換されてもよい。通信インタフェース１２４は、バス１０１に接続し、バス１０１とＣＰＵ１２１との間でデータを送受信する。
【００３５】
なお、図２のサーバ装置１００には例として４台のビルディングブロックが搭載されているが、ビルディングブロックの搭載数は任意の数とすることができる。また、図２のサーバ装置１００には例として１台のサービスプロセッサが搭載されているが、複数台のサービスプロセッサが搭載されていてもよい。例えば、動作の信頼性向上のためにサービスプロセッサが冗長化されていてもよい。
【００３６】
図３は、ＣＰＵチップの内部構成例を示す図である。この図３に示すＣＰＵチップ１１１は、ビルディングブロック１１０ａ〜１１０ｄのそれぞれに搭載されたＣＰＵチップ（例えば、図２のＣＰＵチップ１１１ａまたはＣＰＵチップ１１１ｂ）に対応する。すなわち、ビルディングブロック１１０ａ〜１１０ｄはそれぞれ、図３と同様の構成のＣＰＵチップを備えている。
【００３７】
ＣＰＵチップ１１１は、コア２０１ａ〜２０１ｄおよび二次キャッシュ２０２を備えている。コア２０１ａ〜２０１ｄは、それぞれ第１の実施の形態における演算回路に対応する。コア２０１ａ〜２０１ｄは、それぞれ個別の演算器を少なくとも備えており、それらの演算器によってそれぞれ個別の処理を並列に実行可能である。なお、ＣＰＵチップ１１１に搭載されるコアの数は、任意の数とすることができる。二次キャッシュ２０２は、コア２０１ａ〜２０１ｄに共用されるキャッシュメモリである。
【００３８】
コア２０１ａは、スレッド２１０ａ，２１０ｂおよび一次キャッシュ２２０を備えている。なお、コア２０１ａ〜２０１ｄはそれぞれ同様の構成であるので、ここでは代表してコア２０１ａについてのみ説明する。
【００３９】
一次キャッシュ２２０は、スレッド２１０ａ，２１０ｂに共用されるキャッシュメモリである。一次キャッシュ２２０は、命令をキャッシュする命令キャッシュ２２１と、データをキャッシュするデータキャッシュ２２２とを備える。
【００４０】
スレッド２１０ａ，２１０ｂは、それぞれ「ストランド」とも呼ばれるハードウェアスレッドである。スレッド２１０ａ，２１０ｂは、それぞれ個別の処理を並列に実行可能である。ここで言う個別の処理とは、例えば、ＯＳ（Operating System）上でプログラムが実行される際に、そのＯＳ自身が認識しているＣＰＵごとに実行される単位処理（例えば、ソフトウェアの意味でのスレッド）である。
【００４１】
スレッド２１０ａ，２１０ｂに対応するハードウェアの少なくとも一部は、スレッド２１０ａのためのものとスレッド２１０ｂのためのものとで個別に搭載されている。そして、スレッド２１０ａ，２１０ｂは、それぞれ個別の処理を実行する際に、自分自身に対応する個別のハードウェアを利用する。
【００４２】
図３の例では、スレッド２１０ａは、自分専用のハードウェアとして命令バッファ２１２ａおよびレジスタ部２１４ａを備える。スレッド２１０ｂも同様に、自分専用のハードウェアとして命令バッファ２１２ｂおよびレジスタ部２１４ｂを備える。一方、命令制御部２１１および演算部２１３は、スレッド２１０ａとスレッド２１０ｂとで共通化されている。
【００４３】
なお、命令バッファ２１２ａおよびレジスタ部２１４ａは、第１の実施の形態における個別回路の１つに対応し、命令バッファ２１２ｂおよびレジスタ部２１４ｂは、第１の実施の形態における個別回路の他の１つに対応する。
【００４４】
命令制御部２１１は、メモリから命令を読み込む。ここで言うメモリとは、命令キャッシュ２２１、二次キャッシュ２０２、ＣＰＵチップ１１１内の主記憶装置（図２のメモリ１１２ａ，１１２ｂに対応）のいずれかである。また、命令制御部２１１は、メモリから読み込んだ命令を命令バッファ２１２ａ，２１２ｂのいずれかに一時的に格納した後、格納した命令を読み込む場合もある。スレッド２１０ａに対応する処理では命令バッファ２１２ａが使用され、スレッド２１０ｂに対応する処理では命令バッファ２１２ｂが使用される。
【００４５】
命令制御部２１１は、読み込んだ命令をデコードし、デコード結果に応じた演算処理を演算部２１３に実行させる。演算部２１３が実行する演算処理としては、例えば、加算、減算、乗算、除算、アドレス計算などがある。演算部２１３は、演算に使用するデータの読み出しや、演算結果を書き込むために、レジスタ部２１４ａ，２１４ｂのいずれかのレジスタを利用する。また、ロード命令やストア命令が発行された場合、メモリとレジスタ部２１４ａまたはレジスタ部２１４ｂとの間でデータが転送される。ここで言うメモリとは、データキャッシュ２２２、二次キャッシュ２０２、ＣＰＵチップ１１１内の主記憶装置（図２のメモリ１１２ａ，１１２ｂに対応）のいずれかである。このような演算部２１３による処理においては、スレッド２１０ａに対応する処理ではレジスタ部２１４ａが使用され、スレッド２１０ｂに対応する処理ではレジスタ部２１４ｂが使用される。
【００４６】
このような構成のコア２０１ａによれば、例えば、一方のスレッドに対応する演算部２１３での演算処理と、他方のスレッドに対応する、メモリと命令バッファまたはレジスタ部とのデータ転送処理とを、並列に実行することができる。これにより、処理性能が向上する。
【００４７】
また、命令制御部および演算部も、スレッドごとに個別に設けられてもよい。この場合、コア２０１ａは、各スレッドに対応する演算処理を同時に実行することができる。
ところで、本実施の形態のサーバ装置１００は、ＣｏＤ技術に対応している。サーバ装置１００のユーザは、コアを単位としてライセンス（使用権）を購入する。サーバ装置１００は、ライセンスが購入された台数分のコアを動作許可状態にし、その台数に含まれない残りのコアを動作禁止状態にする。また、ユーザがライセンスを追加購入した場合には、動作禁止状態のコアのうち、追加購入された台数分のコアが動作許可状態に変更される。これにより、ユーザは、サーバ装置１００を導入する際の初期投資を抑制し、さらにその後に、必要に応じてサーバ装置１００の能力を即座に増強することができる。
【００４８】
ここで、ライセンスの単位が、コア内のスレッドではなくコアとされているのは、次のような理由による。図３に示したように、コア内の各スレッドは、コア内のハードウェアの一部を共用する。例えば図３の場合、一次キャッシュ２２０、命令制御部２１１および演算部２１３が、スレッド２１０ａ，２１０ｂによって共用される。このため、コア内の一方のスレッドのみが動作した場合と、コア内の両方のスレッドが動作した場合とでは、後者の方がスレッド当たりの処理速度が低下する場合がある。
【００４９】
このことから、スレッドごとに一定のライセンス料金を設定してしまうと、スレッドの動作状況に応じて、ライセンス料金と処理速度とのバランスが変動してしまうことになり、料金の設定の仕方が適切とは言えなくなる。これに対して、ＣＰＵチップ内の複数のコアに関しては、各コアの動作状況によるコア当たりの処理速度の変動は発生しにくい。このため、ライセンス料金と処理速度とのバランスをできるだけ保つためには、ライセンスの最小単位をスレッドではなくコアとする方が好ましい。
【００５０】
次に、スレッド内のハードウェアで故障が発生した場合の処理について説明する。以下の説明では、スレッドごとに個別に設けられたハードウェアで故障が発生した場合を想定する。
【００５１】
また、以下の説明において、「スレッドの故障」とは、スレッドのハードウェアのうち、スレッドごとに個別に設けられたハードウェアで故障が発生したことを指すものとする。例えば図３において、「スレッド２１０ａの故障」とは、スレッド２１０ａ内の命令バッファ２１２ａまたはレジスタ部２１４ａの少なくとも一方で故障が発生したことを指す。スレッドの故障の具体例としては、いずれかのスレッドにおいてレジスタのパリティエラーが発生するケースなどがある。
【００５２】
さらに、以下の説明では、識別番号「ｘ」を「＃ｘ」と表記する。例えば、識別番号が「０」のスレッドを「スレッド＃０」と表記する。
図４は、スレッドの故障が発生した場合の処理の参考例を示す図である。なお、この図４、および次の図５では、動作許可状態のハードウェアを実線で示し、動作禁止状態のハードウェアを点線で示す。
【００５３】
図４では例として、コア３台分のライセンスが設定されているものとする。そして、このようなライセンスの設定状況に従い、図４の上段に示すように、ＣＰＵチップ１１１ａ内の４つのコアのうち、コア＃０，＃１，＃２が動作中であり、コア＃３が動作していないものとする。
【００５４】
ここで例として、サーバ装置１００は、コア＃１のスレッド＃２から故障を検知したものとする。この場合、サーバ装置１００は、故障が検知されたスレッド＃２を、動作していない他のスレッドに置き換えて、スレッド＃２で実行されていた処理を置き換え後のスレッドに引き継がせる。
【００５５】
スレッドの置き換え方法としては、故障が検知されたスレッド＃２を、他のコア内の動作していないスレッドに置き換える方法が考えられる。図４の下段は、故障が検知されたスレッド＃２を、コア＃３内の動作していないスレッド＃６に置き換えた例を示している。しかしながら、この方法では、スレッド＃３を用いた処理はそのまま続行されるので、コア＃１が使用された状態のままコア＃３が新たに使用されることになる。これにより、使用されるコアの数が「３」から「４」に増加してしまい、ライセンス超過の状態になってしまう。
【００５６】
これに対して、本実施の形態では、次の図５に示すようなハードウェアの置き換え処理が行われることで、ライセンス超過の発生が防止される。図５は、第２の実施の形態におけるスレッド故障時の処理例を示す図である。
【００５７】
図５の上段は、図４の上段と同様の状態を示しており、この状態からコア＃１のスレッド＃２から故障が検知されたものとする。このとき、サーバ装置１００は、コア＃１内の他のスレッド＃３から故障が検知されていなくても、コア＃１を動作禁止状態にする。これとともに、サーバ装置１００は、動作していない他のいずれかのコアの動作を開始させる。図５の例では、動作していなかったコア＃３の動作が開始され、図５の下段はこのときの状態を示す。この場合、サーバ装置１００は、スレッド＃２で実行されていた処理を、例えばスレッド＃６に引き継がせ、スレッド＃３で実行されていた処理を、例えばスレッド＃７に引き継がせる。
【００５８】
このような置き換え処理によれば、置き換え処理の前後で、動作中のコアの数は「３」のまま変化せず、ライセンス超過は発生しない。
次に、サーバ装置１００の処理の詳細について説明する。
【００５９】
まず、図６は、情報処理装置が備える機能の構成例を示すブロック図である。サーバ装置１００は、ハイパーバイザ１３０およびドメイン管理部１４０を備える。また、サーバ装置１００の記憶装置には、コア管理テーブル１５１およびドメイン管理テーブル１５２が記憶される。
【００６０】
ここで、ハイパーバイザ１３０の処理は、サーバ装置１００が備えるプロセッサがハイパーバイザプログラムを実行することで実現される。また、ドメイン管理部１４０の処理は、サーバ装置１００が備えるプロセッサがドメイン管理プログラムを実行することで実現される。ハイパーバイザプログラムおよびドメイン管理プログラムは、例えば、いずれかのビルディングブロックに搭載された少なくとも１つのＣＰＵチップによって実行される。
【００６１】
サーバ装置１００は、１つ以上の仮想マシンを構築する。図６に示す論理ドメイン＃０〜＃３は、それぞれが仮想マシンに対応し、論理ドメイン＃０〜＃３のそれぞれには、仮想的なハードウェア資源としてＣＰＵ、メモリ、ディスク（不揮発性記憶装置）などが割り当てられる。ここで、各論理ドメインに割り当てられる仮想ＣＰＵは、コア内のスレッドに対応する。また、各論理ドメインには、複数の仮想ＣＰＵが割り当てられてもよい。
【００６２】
そして、各論理ドメインにおいては、割り当てられた１つ以上の仮想ＣＰＵ、すなわち１つ以上のスレッドが、ゲストＯＳプログラムを実行する。これにより、各論理ドメインにおいてそれぞれ個別のゲストＯＳが動作する。図６の例では、論理ドメイン＃０，＃１，＃２，＃３において、それぞれゲストＯＳ＃０，＃１，＃２，＃３が動作する。
【００６３】
ハイパーバイザ１３０は、ゲストＯＳ＃０〜＃３に対して、実ハードウェアへのインタフェースを提供する。これによりゲストＯＳ＃０〜＃３は、ハイパーバイザ１３０上で動作する。
【００６４】
また、ハイパーバイザ１３０は、ハードウェアの異常を検知する異常検知部１３１を備える。異常検知部１３１は、少なくとも、コア内のスレッドごとに個別のハードウェア（本実施の形態では命令バッファおよびレジスタ部）の異常発生を検知することができる。
【００６５】
ドメイン管理部１４０は、コア管理テーブル１５１およびドメイン管理テーブル１５２を利用して、各論理ドメインに対する実ハードウェアの割り当てを管理する。コア管理テーブル１５１には、コアのライセンスに関する情報が登録される。また、ドメイン管理テーブル１５２には、論理ドメインごとのスレッドの割り当て状況に関する情報が登録される。
【００６６】
また、ドメイン管理部１４０は、ゲストＯＳの動作を停止させずに、ゲストＯＳに対応する論理ドメインからのハードウェア資源の切り離しや、論理ドメインへのハードウェア資源の組み込みを行うための「動的再構成（Dynamic Reconfiguration）」の制御を行う。ドメイン管理部１４０は、スレッドの異常が検知された場合に、異常が検知されたスレッドが割り当てられているゲストＯＳに対して、スレッドの切り離しおよび新たなスレッドの組み込みを指示する。
【００６７】
図７は、コア管理テーブルに登録される情報の例を示す図である。コア管理テーブル１５１には、ライセンスありのコア数、ライセンスなしのコア数、および異常コア数が登録される。
【００６８】
ライセンスありのコア数は、ユーザによって購入されたコアのライセンス数を示す。コア管理テーブル１５１において、ライセンスありのコア数の欄は、さらに、ドメイン割り当て済みコア数と、ドメイン未割り当てのコア数とに分けられている。ドメイン割り当て済みのコア数は、論理ドメインに割り当てられているコアの数を示し、ドメイン未割り当てのコア数は、論理ドメインに割り当てられていないコアの数を示す。ドメイン割り当て済みのコア数およびドメイン未割り当てのコア数の各欄に登録された数の合計値が、ユーザによって購入されたライセンスの総数を示す。
【００６９】
異常コア数は、サーバ装置１００に搭載されたコアのうち、異常が検知されて他のコアに置き換えられたコアの数を示す。ライセンスなしのコア数は、サーバ装置１００に搭載されたコアの総数から、購入されたライセンスの数と、異常コア数とを減算した数を示す。従って、コア管理テーブル１５１のすべての欄に登録されたコア数を合計した値は、サーバ装置１００に搭載された、ライセンス設定対象のコアの総数を示す。
【００７０】
サーバ装置１００が出荷される段階では、例えば、ドメイン未割り当てのコア数の欄に、ユーザによって購入されたライセンスの数が登録される。これとともに、ライセンスなしのコア数の欄に、ライセンス設定対象のコアの総数から、購入されたライセンス数を減算した値が登録される。このとき、ドメイン割り当て済みのコア数および異常コア数の各欄には、「０」が登録される。
【００７１】
ドメイン管理部１４０は、例えばサーバ装置１００に接続された管理端末（図示せず）からの入力に応じて、論理ドメインの設定を行う。ドメイン管理部１４０は、論理ドメインにスレッドを割り当てる際、そのスレッドを含むコア内の他のいずれのスレッドも論理ドメインに割り当てられていない場合には、ドメイン割り当て済みのコア数に「１」を加算するとともに、ドメイン未割り当てのコア数から「１」を減算する。
【００７２】
また、ユーザによってライセンスが追加購入されたとき、ドメイン管理部１４０は、追加されたライセンス数の入力を受ける。ドメイン管理部１４０は、入力された追加ライセンス数を、ドメイン未割り当てのコア数に加算するとともに、同じ追加ライセンス数を、ライセンスなしのコア数から減算する。これにより、ユーザが使用できるコアの数が追加ライセンスの数だけ増加する。
【００７３】
さらに、ドメイン管理部１４０は、スレッドの異常を検知したとき、上記のように、異常が検知されたスレッドを含むコアを、他のコアに置き換える。異常が検知されたスレッドがいずれかの論理ドメインに割り当て済みであった場合、ドメイン管理部１４０は、ドメイン割り当て済みのコア数から「１」を減算するとともに、異常コア数に「１」を加算する。
【００７４】
図８は、ドメイン管理テーブルに登録される情報の例を示す図である。ドメイン管理テーブル１５２には、コアＩＤおよびスレッドＩＤに対応付けて、ステータスおよびドメインＩＤが登録される。
【００７５】
コアＩＤは、ライセンス設定対象のコアを識別するための情報である。スレッドＩＤは、対応するコアに含まれるスレッドを識別するための情報である。
ステータスは、対応するスレッドの状態を示す。ステータスの欄には、「in use」，「free」，「fail」のいずれかが登録される。「in use」は、対応するスレッドに論理ドメインが割り当てられていることを示す。「free」は、対応するスレッドに論理ドメインが割り当てられていないことを示す。「fail」は、対応するスレッドから異常が検出され、そのスレッドに対する論理ドメインの割り当てが禁止されていることを示す。
【００７６】
ドメイン管理部１４０は、２つのスレッドのうち少なくとも一方のステータスが「in use」であるコアを、コア管理テーブル１５１におけるドメイン割り当て済みのコアの１つとしてカウントする。また、２つのスレッドのステータスがいずれも「free」であるコアは、コア管理テーブル１５１におけるドメイン未割り当てのコアまたはライセンスなしのコアのいずれかとしてカウントされる。
【００７７】
ドメインＩＤの欄には、対応するスレッドに割り当てられた論理ドメインの識別番号が登録される。また、対応するスレッドに論理ドメインが割り当てられていない場合、ドメインＩＤの欄には「none」が登録される。
【００７８】
ドメイン管理部１４０は、管理端末などからの要求に応じて論理ドメインを設定する際や、スレッドの異常が検知された場合などに、ドメイン管理テーブル１５２におけるステータスおよびドメインＩＤの各欄を更新する。
【００７９】
なお、以上のコア管理テーブル１５１およびドメイン管理テーブル１５２は、例えば、前述したハイパーバイザプログラムおよびドメイン管理プログラムが実行されるＣＰＵチップが搭載されたビルディングブロック内のＨＤＤに格納され、同じビルディングブロック内のメモリに展開される。
【００８０】
次に、異常が検知されたスレッドを他のスレッドに置き換える際のサーバ装置１００の処理について、フローチャートを用いて説明する。図９および図１０は、スレッドの置き換え処理の例を示すフローチャートである。
【００８１】
［ステップＳ１１］異常検知部１３１は、論理ドメインが割り当てられているいずれかのスレッドから異常を検知すると、その旨をドメイン管理部１４０に通知する。これにより、ステップＳ１２以降の処理が開始される。
【００８２】
［ステップＳ１２］サーバ装置１００には、コア単位での置き換えを行うか否かを示す情報があらかじめ設定されている。この情報は、ユーザの操作によって、例えば管理端末からサーバ装置１００に入力される。この情報は、例えば、前述のドメイン管理プログラムと同じ不揮発性記憶装置に格納される。
【００８３】
スレッドの異常が検知されたことの通知を受けたドメイン管理部１４０は、設定された上記の情報に基づき、コア単位で置き換えを行うか否かを判定する。コア単位で置き換えを行う場合にはステップＳ１３の処理が実行され、行わない場合には図１０のステップＳ２１の処理が実行される。
【００８４】
［ステップＳ１３］ドメイン管理部１４０は、コア管理テーブル１５１に基づき、ライセンスなしのコアが存在するかを判定する。ライセンスなしのコアが存在する場合にはステップＳ１４の処理が実行され、存在しない場合には図１０のステップＳ２１の処理が実行される。
【００８５】
［ステップＳ１４］ドメイン管理部１４０は、ステップＳ１１で異常が検知されたスレッドの切り離し処理を行う。後述するように、ドメイン管理部１４０は、異常が検知されたスレッドに割り当てられていた論理ドメインで動作するゲストＯＳに対して、そのスレッドの切り離しを指示する。また、ドメイン管理部１４０は、ドメイン管理テーブル１５２において、異常が検知されたスレッドに対応するステータスを「in use」から「fail」に更新するとともに、そのスレッドに対応するドメインＩＤの欄を「none」に更新する。
【００８６】
［ステップＳ１５］ドメイン管理部１４０は、ドメイン管理テーブル１５２に基づき、２つのスレッドのどちらにも論理ドメインが割り当てられていないコアを選択する。ドメイン管理部１４０は、選択したコアからスレッドを１つ選択し、選択したスレッドの組み込み処理を行う。
【００８７】
ドメイン管理部１４０は、ドメイン管理テーブル１５２において、選択したスレッドに対応するステータスを「free」から「in use」に更新するとともに、そのスレッドに対応するドメインＩＤの欄に、異常が検知されたスレッドに割り当てられていた論理ドメインのＩＤを登録する。また、後述するように、ドメイン管理部１４０は、異常が検知されたスレッドに割り当てられていた論理ドメインで動作するゲストＯＳに対して、選択したスレッドの組み込みを指示する。
【００８８】
［ステップＳ１６］ドメイン管理部１４０は、ドメイン管理テーブル１５２に基づき、異常が検知されたスレッドを含むコア内の他方のスレッドに、論理ドメインが割り当てられているかを判定する。他方のスレッドに論理ドメインが割り当てられている場合にはステップＳ１７の処理が実行され、割り当てられていない場合にはステップＳ１９の処理が実行される。
【００８９】
［ステップＳ１７］ドメイン管理部１４０は、他方のスレッドの切り離し処理を行う。基本的な処理手順はステップＳ１４と同様であり、ドメイン管理部１４０は、他方のスレッドに割り当てられていた論理ドメインで動作するゲストＯＳに対して、そのスレッドの切り離しを指示する。また、ドメイン管理部１４０は、ドメイン管理テーブル１５２において、他方のスレッドに対応するステータスを「in use」から「free」に更新するとともに、そのスレッドに対応するドメインＩＤの欄を「none」に更新する。
【００９０】
［ステップＳ１８］ドメイン管理部１４０は、ステップＳ１５で選択したコア内のスレッドのうち、ステップＳ１５で選択していない他方のスレッド（以下、「非選択のスレッド」と呼ぶ）の組み込み処理を行う。基本的な処理手順はステップＳ１５と同様であり、ドメイン管理部１４０は、ドメイン管理テーブル１５２において、非選択のスレッドに対応するステータスを「free」から「in use」に更新するとともに、そのスレッドに対応するドメインＩＤの欄に、ステップＳ１７で切り離したスレッドに割り当てられていた論理ドメインのＩＤを登録する。また、後述するように、ドメイン管理部１４０は、ステップＳ１７で切り離したスレッドに割り当てられていた論理ドメインで動作するゲストＯＳに対して、非選択のスレッドの組み込みを指示する。
【００９１】
［ステップＳ１９］ドメイン管理部１４０は、コア管理テーブル１５１における異常コア数に「１」を加算するとともに、ライセンスなしのコア数から「１」を減算する。これによりコアの置き換え処理が完了し、各論理ドメインの通常の運用が続行される。
【００９２】
以上のステップＳ１４〜Ｓ１９の処理によれば、異常が検知されたスレッドを含むコアが、他のコアに置き換えられる。この場合、動作中のコアの数は変化しないため、ライセンス超過が発生することなく、異常が検知されたスレッドを置き換えることができる。
【００９３】
［ステップＳ２１］サーバ装置１００には、スレッド単位での置き換えを行うか否かを示す情報があらかじめ設定されている。この情報は、ユーザの操作によって、例えば管理端末からサーバ装置１００に入力される。この情報は、例えば、前述のドメイン管理プログラムと同じ不揮発性記憶装置に格納される。
【００９４】
ドメイン管理部１４０は、設定された上記の情報に基づき、スレッド単位で置き換えを行うか否かを判定する。スレッド単位で置き換えを行う場合にはステップＳ２２の処理が実行され、行わない場合にはステップＳ２５の処理が実行される。
【００９５】
［ステップＳ２２］ドメイン管理部１４０は、ドメイン管理テーブル１５２に基づき、ステータスが「free」であるスレッド、すなわち、論理ドメインが未割り当てであり、かつ異常が検知されていないスレッドが存在するかを判定する。ステータスが「free」のコアが存在する場合にはステップＳ２３の処理が実行され、存在しない場合にはステップＳ２５の処理が実行される。
【００９６】
［ステップＳ２３］ドメイン管理部１４０は、ステップＳ１１で異常が検知されたスレッドの切り離し処理を行う。この処理はステップＳ１４と同じであるので、説明を省略する。
【００９７】
［ステップＳ２４］ドメイン管理部１４０は、ドメイン管理テーブル１５２に基づき、ステータスが「free」であるスレッドを選択し、選択したスレッドの組み込み処理を行う。
【００９８】
基本的な処理手順はステップＳ１５と同様であり、ドメイン管理部１４０は、ドメイン管理テーブル１５２において、選択したスレッドに対応するステータスを「free」から「in use」に更新するとともに、そのスレッドに対応するドメインＩＤの欄に、異常が検知されたスレッドに割り当てられていた論理ドメインのＩＤを登録する。また、ドメイン管理部１４０は、異常が検知されたスレッドに割り当てられていた論理ドメインで動作するゲストＯＳに対して、選択したスレッドの組み込みを指示する。
【００９９】
これによりスレッド置き換え処理が完了し、各論理ドメインの通常の運用が続行される。
以上のステップＳ２３，Ｓ２４の処理によれば、異常が検知されたスレッドが、すでに一方のスレッドに論理ドメインが割り当てられていたコアにおける他方のスレッドに置き換えられる。この場合、動作中のコアの数は増加しないため、ライセンス超過が発生することなく、異常が検知されたスレッドを置き換えることができる。
【０１００】
［ステップＳ２５］ドメイン管理部１４０は、ステップＳ１１で異常が検知されたスレッドの切り離し処理を行う。この処理はステップＳ１４，Ｓ２３と同じであるので、説明を省略する。
【０１０１】
図１１は、スレッド切り離し処理の例を示すフローチャートである。この図１１の処理は、図９のステップＳ１４，Ｓ１７、図１０のステップＳ２３，Ｓ２５に対応する。
［ステップＳ３１］ドメイン管理部１４０は、切り離し対象のスレッドのＩＤを決定する。
【０１０２】
［ステップＳ３２］ドメイン管理部１４０は、切り離し対象のスレッドに割り当てられていた論理ドメインで動作するゲストＯＳに対して、切り離し対象のスレッドのＩＤを通知して、スレッドの切り離しを指示する。
【０１０３】
［ステップＳ３３］切り離し指示を受けたゲストＯＳは、切り離し対象のスレッドを用いて実行されている処理を、自身に割り当てられている他のスレッドに引き継がせる。また、ゲストＯＳは、切り離し対象のスレッドを、自身が使用しない状態に移行させる。以上の処理が完了すると、ゲストＯＳは、ハイパーバイザ１３０に対して、切り離し対象のスレッドの停止を依頼する。
【０１０４】
［ステップＳ３４］ドメイン管理部１４０は、切り離し対象のスレッドの停止依頼を、ハイパーバイザ１３０を介して受け付ける。ドメイン管理部１４０は、ドメイン管理テーブル１５２において、切り離し対象のスレッドに対応するステータスを「in use」から「fail」に更新するとともに、そのスレッドに対応するドメインＩＤの欄を「none」に更新する。
【０１０５】
図１２は、スレッド組み込み処理の例を示すフローチャートである。この図１２の処理は、図９のステップＳ１５，Ｓ１８、図１０のステップＳ２４に対応する。
［ステップＳ４１］ドメイン管理部１４０は、組み込み対象のスレッドのＩＤを決定する。
【０１０６】
［ステップＳ４２］ドメイン管理部１４０は、ドメイン管理テーブル１５２において、組み込み対象のスレッドに対応するステータスを「free」から「in use」に更新するとともに、そのスレッドに対応するドメインＩＤの欄に、置き換え前のスレッドに割り当てられていた論理ドメインのＩＤを登録する。
【０１０７】
［ステップＳ４３］ドメイン管理部１４０は、組み込み対象のスレッドに新たに割り当てた論理ドメインで動作するゲストＯＳに対して、組み込み対象のスレッドのＩＤを通知して、スレッドの組み込みを指示する。
【０１０８】
［ステップＳ４４］組み込み指示を受けたゲストＯＳは、ハイパーバイザ１３０に対して、組み込み対象のスレッドの動作開始を依頼する。また、ゲストＯＳは、組み込み対象のスレッドのレジスタ、ＴＬＢ（Translation Lookaside Buffer）などの初期化処理を行う。
【０１０９】
［ステップＳ４５］ゲストＯＳは、組み込み対象のスレッドに処理を割り当てる。
次に、コア単位の置き換えを行った場合における管理テーブルの遷移例を挙げる。図１３は、コア管理テーブルの遷移の例を示す図である。また、図１４は、ドメイン管理テーブルの遷移の例を示す図である。
【０１１０】
図１３および図１４の例では、サーバ装置１００は、それぞれ２つのスレッドを含む８つのコアを備えるものとする。そして、コア６台分のライセンスが設定されたものとする。初期状態では、図１３の上段に示すように、コア管理テーブル１５１における異常コア数は「０」であり、ライセンスなしのコア数は「２」である。
【０１１１】
また、図１４に示すように、スレッドに異常が発生する前の状態では、スレッド＃０〜＃４に対して論理ドメインが割り当てられ、その他のスレッドには論理ドメインが割り当てられていないものとする。この場合、コア＃０〜＃２が動作状態となるので、コア管理テーブル１５１においては、ドメイン割り当て済みのコア数が「３」となり、ドメイン未割り当てのコア数も「３」となる。
【０１１２】
この状態から、例としてスレッド＃２から異常が検知されたものとする。コア単位での置き換えを行う場合、ドメイン管理部１４０は、ドメイン管理テーブル１５２において、スレッド＃２に対応するステータスを「in use」から「fail」に更新する。また、ドメイン管理部１４０は、スレッド＃３に対応するステータスを「in use」から「free」に更新する。さらに、ドメイン管理部１４０は、スレッド＃２，＃３にそれぞれ対応するドメインＩＤの欄を、ともに「１」から「none」に更新する。これにより、論理ドメイン＃１からスレッド＃２，＃３が切り離され、スレッド＃２，＃３が含まれるコア＃１の動作が禁止される。
【０１１３】
また、ドメイン管理部１４０は、２つのスレッドがともに「free」であるコアとして、例えばコア＃３を選択する。この場合、ドメイン管理部１４０は、コア＃３に含まれるスレッド＃６，＃７に対応するステータスを、ともに「free」から「in use」に更新する。また、ドメイン管理部１４０は、スレッド＃６に対応するドメインＩＤの欄に、スレッド＃２に割り当てられていた論理ドメインを示すドメインＩＤ「１」を登録する。さらに、ドメイン管理部１４０は、スレッド＃７に対応するドメインＩＤの欄に、スレッド＃３に割り当てられていた論理ドメインを示すドメインＩＤ「１」を登録する。これにより、スレッド＃６，＃７が論理ドメイン＃１に組み込まれる。
【０１１４】
このとき、ドメイン管理部１４０は、コア管理テーブル１５１における異常コア数に「１」を加算するとともに、ライセンスなしのコア数から「１」を減算する。この場合、ライセンスありのコア数、すなわち、論理ドメインが割り当て済みのコア数と論理ドメインが未割り当てのコア数との合計は、「６」のまま変化しない。すなわち、ライセンス超過を発生させることなく、異常スレッドを他の正常なスレッドに置き換えることが可能になる。
【０１１５】
〔第３の実施の形態〕
図１５は、第３の実施の形態に係る情報処理装置が備える機能の構成例を示すブロック図である。
【０１１６】
図１５に示すサーバ装置１００ａは、第２の実施の形態に係るサーバ装置１００を、仮想マシンを構築する代わりに、物理パーティションを設定するように変形したものである。図１５に示す物理パーティション＃０〜＃３には、サーバ装置１００ａが備えるハードウェアリソースの一部がそれぞれ割り当てられる。ここで、各物理パーティションに割り当てられるＣＰＵは、コア内のスレッドに対応する。また、各物理パーティションには、複数のＣＰＵ、すなわち複数のスレッドが割り当てられてもよい。
【０１１７】
そして、各物理パーティションにおいては、割り当てられた１つ以上のＣＰＵ、すなわち１つ以上のスレッドが、ＯＳプログラムを実行する。これにより、各物理パーティションにおいてそれぞれ個別のＯＳを動作させることができる。図１５の例では、物理パーティション＃０，＃１，＃２，＃３において、それぞれＯＳ＃０，＃１，＃２，＃３が動作する。
【０１１８】
サーバ装置１００ａは、システム管理部１５０を備える。システム管理部１５０の処理は、第２の実施の形態におけるドメイン管理部１４０の処理に対応する。なお、システム管理部１５０の処理は、サーバ装置１００ａが備えるプロセッサがシステム管理プログラムを実行することで実現される。システム管理プログラムは、例えば、いずれかのビルディングブロックに搭載された少なくとも１つのＣＰＵチップによって実行される。
【０１１９】
また、サーバ装置１００ａの記憶装置には、コア管理テーブル１５１およびパーティション管理テーブル１５２ａが記憶される。コア管理テーブル１５１に登録される情報は、第２の実施の形態と同様である。パーティション管理テーブル１５２ａの構成は、図８のドメイン管理テーブル１５２における「ドメインＩＤ」を「パーティションＩＤ」に置き換えた構成となる。すなわち、パーティション管理テーブル１５２ａにおいて、それぞれ個別のＯＳが動作するパーティションに対するスレッドの割り当てが管理される。
【０１２０】
サービスプロセッサ１２０の処理は、サービスプロセッサ１２０のＣＰＵ１２１（図３参照）が所定のファームウェアプログラムを実行することで実現される。サービスプロセッサ１２０は、異常検知部１３１ａを備える。異常検知部１３１ａは、第２の実施の形態の異常検知部１３１と同様に、コア内のスレッドごとに個別のハードウェアの異常発生を検知することができる
以上のサーバ装置１００ａにおいては、第２の実施の形態におけるハイパーバイザ１３０、ドメイン管理部１４０およびゲストＯＳとの間の処理が、サービスプロセッサ１２０、システム管理部１５０およびＯＳとの間で実行される。すなわち、第３の実施の形態では、図９〜図１２に示した処理が、ハイパーバイザ１３０をサービスプロセッサ１２０に、ドメイン管理部１４０をシステム管理部１５０に、ゲストＯＳをＯＳにそれぞれ置き換えることで実現される。これにより、第３の実施の形態でも、スレッドに異常が発生した場合に、ライセンス超過を発生させることなく、異常が発生したスレッドを他の正常なスレッドに置き換えることができる。
【０１２１】
〔他のハードウェア資源の置き換え処理例〕
上記の第２，第３の実施の形態では、コアに対してライセンスを設定した場合について説明したが、例えば、サーバ装置が備える他のハードウェア資源に対してライセンスが設定されてもよい。
【０１２２】
ここでは、サーバ装置に搭載されたメモリ装置に対してライセンスが設定される場合について説明する。サーバ装置は、複数のメモリ装置を有しており、メモリ装置を単位としてライセンスが設定される。また、例えば、第２の実施の形態における論理ドメインごと、あるいは、第３の実施の形態における物理パーティションごとに、各メモリ装置の記憶領域を分割した分割領域を単位としてメモリ資源が割り当てられるものとする。そして、第２の実施の形態における異常検知部１３１、あるいは第３の実施の形態における異常検知部１３１ａは、上記の分割領域ごとに異常を検知できるものとする。
【０１２３】
図１６は、メモリ装置に対するライセンス設定の第１の例を示す図である。図１６に示すビルディングブロック１１０には、複数のメモリモジュール３１０が搭載されている。メモリモジュール３１０は、例えば、ＤＩＭＭ（Dual Inline Memory Module）規格などに準拠した基板である。また、メモリモジュール３１０のそれぞれには、複数のメモリチップ３２０が搭載されている。
【０１２４】
なお、ビルディングブロックは、図２に示したビルディングブロック１１０ａ〜１１０ｄのそれぞれに対応する。また、１つまたは複数のメモリモジュール３１０は、図２に示したメモリ１１２ａ，１１２ｂのいずれかに対応する。
【０１２５】
図１６において、例えば、メモリモジュール３１０が上記のメモリ装置に対応し、メモリモジュール３１０内の各メモリチップ３２０が、上記の分割領域に対応する。すなわち、サーバ装置は、論理ドメインまたは物理パーティションに対して、メモリチップ３２０を単位としてメモリ資源を割り当てる。その一方で、メモリモジュール３１０を単位としてライセンスが設定される。
【０１２６】
サーバ装置は、メモリチップ３２０ごとに異常を監視する。そして、サーバ装置は、論理ドメインまたは物理パーティションに割り当て済みのいずれかのメモリチップ３２０から異常を検知すると、異常が検知されたメモリチップ３２０を含むメモリモジュール３１０の使用を禁止する。これとともに、サーバ装置は、使用を禁止したメモリモジュール３１０を、使用されていない他のメモリモジュール３１０（すなわち、内部のすべてのメモリチップ３２０が論理ドメインまたは物理パーティションに割り当てられていないメモリモジュール３１０）に置き換え、置き換えたメモリモジュール３１０の使用を開始する。
【０１２７】
このような処理により、メモリチップ３２０の異常が発生した場合でも、ライセンス超過を起こすことなく、メモリチップ３２０を置き換えることができる。
なお、図１６の例では、メモリモジュール３１０を単位としてライセンスを設定したが、他の例として、同一メモリモジュール３１０内の隣接する複数個のメモリチップ３１０を単位としてライセンスが設定されてもよい。この場合、隣接する複数個のメモリチップ３１０の合計記憶容量を単位としてライセンスが設定されてもよい。
【０１２８】
図１７は、メモリ装置に対するライセンス設定の第２の例を示す図である。図１７の例は、上記のメモリ装置をメモリモジュール３１０内のメモリチップ３２０とし、上記の分割領域を、メモリチップ３２０のメモリ領域を例えば均等の容量で分割した部分領域３３０としたものである。
【０１２９】
図１７の例では、サーバ装置は、論理ドメインまたは物理パーティションに対して、部分領域３３０を単位としてメモリ資源を割り当てる。その一方で、メモリチップ３２０を単位としてライセンスが設定される。
【０１３０】
サーバ装置は、論理ドメインまたは物理パーティションに割り当て済みのいずれかの部分領域３３０から異常を検知すると、異常が検知された部分領域３３０を含むメモリチップ３２０の使用を禁止する。これとともに、サーバ装置は、使用を禁止したメモリチップ３２０を、使用されていない他のメモリチップ３２０に置き換え、置き換えたメモリチップ３２０の使用を開始する。
【０１３１】
このような処理により、部分領域３３０の異常が発生した場合でも、ライセンス超過を起こすことなく、部分領域３３０を置き換えることができる。
以上の各実施の形態に関し、さらに以下の付記を開示する。
【０１３２】
（付記１）  複数の処理を並列に実行可能であって、並列に実行する処理ごとに個別に設けられた個別回路を有する演算回路を、複数備えた情報処理装置において、
前記演算回路を単位として設定された使用権の数を記憶する記憶部と、
複数の前記演算回路のうち、前記使用権の数の前記演算回路の動作を許可するとともに、動作中の前記演算回路に搭載されたいずれかの前記個別回路の異常を検知すると、異常が検知された前記個別回路が搭載された前記演算回路における他の前記個別回路の動作を停止させ、動作していないいずれかの前記演算回路の動作を開始させる制御部と、
を有することを特徴とする情報処理装置。
【０１３３】
（付記２）  前記制御部は、動作中の前記演算回路に搭載されたいずれかの前記個別回路の異常を検知したとき、動作していない前記演算回路が存在しない場合には、動作中の前記演算回路の中に使用されていない前記個別回路があるかを判定し、使用されていない前記個別回路がある場合には、異常が検知された前記個別回路を用いて実行されていた処理を、使用されていない前記個別回路を用いて実行させることを特徴とする付記１記載の情報処理装置。
【０１３４】
（付記３）  前記記憶部は、動作中の前記演算回路に搭載された前記個別回路のうち、１つまたは複数のオペレーティングシステムのいずれかの処理に割り当てられた前記個別回路の情報を保持する管理情報を記憶し、
前記制御部は、前記管理情報においていずれかのオペレーティングシステムの処理に割り当てられた前記個別回路の異常を検知したとき、動作していない前記演算回路が存在しない場合には、前記管理情報に基づき、動作中の前記演算回路に搭載された前記個別回路の中にいずれのオペレーティングシステムの処理にも割り当てられていない前記個別回路があるかを判定し、いずれのオペレーティングシステムの処理にも割り当てられていない前記個別回路がある場合には、異常が検知された前記個別回路がいずれのオペレーティングシステムにも割り当てられていない前記個別回路に置き換えられるように前記管理情報を更新する、
ことを特徴とする付記１記載の情報処理装置。
【０１３５】
（付記４）  前記情報処理装置は、複数のメモリ装置を有し、
前記記憶部は、前記メモリ装置を単位として設定されたメモリ使用権の数を記憶し、
前記制御部は、複数の前記メモリ装置のうち、前記メモリ使用権の数の前記メモリ装置の使用を許可するとともに、使用中の前記メモリ装置の記憶領域を分割した分割領域のいずれかから異常を検知すると、異常が検知された前記分割領域を含む前記メモリ装置における他の前記分割領域の使用を停止させ、使用されていないいずれかの前記メモリ装置の使用を開始する、
ことを特徴とする付記１〜３のいずれか１つに記載の情報処理装置。
【０１３６】
（付記５）  複数の処理を並列に実行可能であって、並列に実行する処理ごとに個別に設けられた個別回路を有する演算回路を、複数備えた情報処理装置における制御方法であって、
前記演算回路を単位として設定された使用権の数を記憶する記憶部を参照して、複数の前記演算回路のうち、前記使用権の数の前記演算回路の動作を許可し、
動作中の前記演算回路に搭載されたいずれかの前記個別回路の異常を検知すると、異常が検知された前記個別回路が搭載された前記演算回路における他の前記個別回路の動作を停止させ、動作していないいずれかの前記演算回路の動作を開始させる、
ことを特徴とする制御方法。
【０１３７】
（付記６）  動作中の前記演算回路に搭載されたいずれかの前記個別回路の異常を検知したとき、動作していない前記演算回路が存在しない場合には、動作中の前記演算回路の中に使用されていない前記個別回路があるかを判定し、使用されていない前記個別回路がある場合には、異常が検知された前記個別回路を用いて実行されていた処理を、使用されていない前記個別回路を用いて実行させる、
処理をさらに含むことを特徴とする付記５記載の制御方法。
【０１３８】
（付記７）  前記記憶部は、動作中の前記演算回路に搭載された前記個別回路のうち、１つまたは複数のオペレーティングシステムのいずれかの処理に割り当てられた前記個別回路の情報を保持する管理情報を記憶し、
前記管理情報においていずれかのオペレーティングシステムの処理に割り当てられた前記個別回路の異常を検知したとき、動作していない前記演算回路が存在しない場合には、前記管理情報に基づき、動作中の前記演算回路に搭載された前記個別回路の中にいずれのオペレーティングシステムの処理にも割り当てられていない前記個別回路があるかを判定し、いずれのオペレーティングシステムの処理にも割り当てられていない前記個別回路がある場合には、異常が検知された前記個別回路がいずれのオペレーティングシステムにも割り当てられていない前記個別回路に置き換えられるように前記管理情報を更新する、
処理をさらに含むことを特徴とする付記５記載の制御方法。
【０１３９】
（付記８）  前記情報処理装置は、複数のメモリ装置を有し、
前記記憶部は、前記メモリ装置を単位として設定されたメモリ使用権の数を記憶し、
複数の前記メモリ装置のうち、前記メモリ使用権の数の前記メモリ装置の使用を許可し、使用中の前記メモリ装置の記憶領域を分割した分割領域のいずれかから異常を検知すると、異常が検知された前記分割領域を含む前記メモリ装置における他の前記分割領域の使用を停止させ、使用されていないいずれかの前記メモリ装置の使用を開始する、
処理をさらに含むことを特徴とする付記５〜７のいずれか１つに記載の制御方法。
【符号の説明】
【０１４０】
１  情報処理装置
２  記憶部
３  制御部
１１，１２  演算回路
２１〜２４  個別回路
【図１】
2014048907.tif 000003
【図２】
2014048907.tif 000004
【図３】
2014048907.tif 000005
【図４】
2014048907.tif 000006
【図５】
2014048907.tif 000007
【図６】
2014048907.tif 000008
【図７】
2014048907.tif 000009
【図８】
2014048907.tif 000010
【図９】
2014048907.tif 000011
【図１０】
2014048907.tif 000012
【図１１】
2014048907.tif 000013
【図１２】
2014048907.tif 000014
【図１３】
2014048907.tif 000015
【図１４】
2014048907.tif 000016
【図１５】
2014048907.tif 000017
【図１６】
2014048907.tif 000018
【図１７】
2014048907.tif 000019