(57)【要約】【課題】アプリケーションを変更することなしに、アプリケーションに割り当てるプロセッサの識別情報を変換可能にすること。【解決手段】変換部１６は、第１のプロセッサの第１の識別情報を含む設定情報Ｄ１をアプリケーション１７から取得する。変換部１６は、プロセッサ１１ａ，１１ｂ，１１ｃ，１１ｄ，１２ａ，１２ｂ，１２ｃ，１２ｄの配置およびプロセッサ１１ａ，１１ｂ，１１ｃ，１１ｄ，１２ａ，１２ｂ，１２ｃ，１２ｄの利用状況に基づいて、アプリケーション１７に割り当てる第２のプロセッサの第２の識別情報を決定する。変換部１６は、第１の識別情報と第２の識別情報とを対応付けた変換情報Ｄ２をＯＳ１５に通知する。【選択図】図１
2018028769.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサを有するコンピュータに、
第１のプロセッサの第１の識別情報を含む設定情報をアプリケーションから取得し、前記複数のプロセッサの配置および前記複数のプロセッサの利用状況に基づいて、前記アプリケーションに割り当てる第２のプロセッサの第２の識別情報を決定し、
前記第１の識別情報と前記第２の識別情報とを対応付けた変換情報を前記コンピュータのオペレーティングシステムに通知する、
処理を実行させる変換プログラム。
【請求項２】
前記第２の識別情報の決定では、同一のＮＵＭＡ（Non-Uniform Memory Access）ノードに属する前記第２のプロセッサを複数選択する、請求項１記載の変換プログラム。
【請求項３】
前記第２の識別情報の決定では、前記コンピュータが有する複数のＮＵＭＡノードのノード単位の負荷に応じて、前記第２のプロセッサの選択に用いる前記ＮＵＭＡノードを選択する、請求項２記載の変換プログラム。
【請求項４】
前記第２の識別情報の決定では、前記ＮＵＭＡノードに属するプロセッサのうち、負荷の低い方から順に、前記設定情報により指定される前記第１のプロセッサの数だけ、前記第２のプロセッサを選択する、請求項２または３記載の変換プログラム。
【請求項５】
前記変換情報の通知では、前記アプリケーションのプロセスの識別情報を前記変換情報に含める、請求項１乃至４の何れか１項に記載の変換プログラム。
【請求項６】
複数のプロセッサを有するコンピュータに、
アプリケーションの設定情報に含まれる第１のプロセッサの第１の識別情報と前記アプリケーションに割り当てる第２のプロセッサの第２の識別情報とを対応付けた変換情報を取得し、
前記変換情報に基づいて、前記第１の識別情報に代えて、前記第２の識別情報に対応する前記第２のプロセッサを前記アプリケーションに割り当てる、
処理を実行させる変換プログラム。
【請求項７】
複数のプロセッサを有するコンピュータが、
第１のプロセッサの第１の識別情報を含む設定情報をアプリケーションから取得し、前記複数のプロセッサの配置および前記複数のプロセッサの利用状況に基づいて、前記アプリケーションに割り当てる第２のプロセッサの第２の識別情報を決定し、
前記第１の識別情報と前記第２の識別情報とを対応付けた変換情報を前記コンピュータのオペレーティングシステムに通知し、
前記オペレーティングシステムにより、前記変換情報に基づいて、前記第１の識別情報に代えて、前記第２の識別情報に対応する前記第２のプロセッサを前記アプリケーションに割り当てる、
変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は変換プログラムおよび変換方法に関する。
【背景技術】
【０００２】
現在、様々な処理の実行に情報処理装置が利用されている。情報処理装置では、ＮＵＭＡ（Non-Uniform Memory Access）と呼ばれる手法によりプロセッサとメモリとが実装されることがある。ＮＵＭＡでは、複数のプロセッサとメモリとを備えるノードを複数設け、各プロセッサから自ノード上のメモリ（ローカルメモリ）、および、他ノード上のメモリ（リモートメモリ）にアクセス可能にする。プロセッサは、ローカルメモリを、リモートメモリよりも高速にアクセスできる。
【０００３】
例えば、複数のノードがインターコネクトで接続されたシステムにおいて、ハイパーバイザが、仮想計算機に割り当てる論理ＣＰＵ（Central Processing Unit）を実行する物理ＣＰＵを、論理ＣＰＵから物理メモリへのアクセス性能により決定する提案がある。
【０００４】
また、仮想マシンに関する特性を示すリクエストを受信すると、当該特性とシステムの物理トポロジーに基づいて、仮想マシンの仮想ＮＵＭＡノード数を決定し、決定した仮想ＮＵＭＡノード数を有する仮想マシンをインスタンス化するシステムの提案もある。
【０００５】
また、仮想マシン・ブート時、バーチャライザが、ゲスト物理メモリおよびゲスト仮想プロセッサを仮想ノード中にグループ分けした後、仮想ノード背後のホスト物理メモリを変更し、当該ノード内の仮想プロセッサに適切な物理プロセッサを提供する提案もある。
【０００６】
更に、新しいプロセスに論理プロセッサを割り当てる際に、このプロセスと既に論理プロセッサを割当済のプロセスとの依存関係に応じて物理プロセッサの性能を引き出すように論理プロセッサを割り当てる計算機システムの提案もある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】国際公開第２０１４／１４１４１９号
【特許文献２】特表２０１２−５２１６１１号公報
【特許文献３】特開２００６−１７８９３３号公報
【特許文献４】特開２００６−２４１８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
異なる情報処理装置では、ＮＵＭＡの構造（例えば、１つのノードにおけるプロセッサの数や各ノード上のプロセッサに割り振られる識別情報など）が異なることがある。また、情報処理装置により実行されるアプリケーションは、ある情報処理装置におけるＮＵＭＡの構造に配慮して作成されていることがある。このため、ある情報処理装置では適切に動作していたアプリケーションでも、別の情報処理装置により実行すると、期待する性能を発揮できない、正しく動作しないなどの問題が生じ得る。別の情報処理装置への配備を見越して、アプリケーションを予め修正することも考えられるが、配備先の情報処理装置のＮＵＭＡの構造を、配備前に予め知ることは難しい。このため、アプリケーションの配備後に、ユーザは設定の修正作業を強いられることがあるという問題がある。
【０００９】
１つの側面では、本発明は、アプリケーションを変更することなしに、アプリケーションに割り当てるプロセッサの識別情報を変換可能にすることを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、変換プログラムが提供される。この変換プログラムは、複数のプロセッサを有するコンピュータに、第１のプロセッサの第１の識別情報を含む設定情報をアプリケーションから取得し、複数のプロセッサの配置および複数のプロセッサの利用状況に基づいて、アプリケーションに割り当てる第２のプロセッサの第２の識別情報を決定し、第１の識別情報と第２の識別情報とを対応付けた変換情報をコンピュータのオペレーティングシステムに通知する。
【００１１】
また、１つの態様では、変換プログラムが提供される。この変換プログラムは、複数のプロセッサを有するコンピュータに、アプリケーションの設定情報に含まれる第１のプロセッサの第１の識別情報とアプリケーションに割り当てる第２のプロセッサの第２の識別情報とを対応付けた変換情報を取得し、変換情報に基づいて、第１の識別情報に代えて、第２の識別情報に対応する第２のプロセッサをアプリケーションに割り当てる。
【００１２】
また、１つの態様では、変換方法が提供される。この変換方法では、複数のプロセッサを有するコンピュータが、第１のプロセッサの第１の識別情報を含む設定情報をアプリケーションから取得し、複数のプロセッサの配置および複数のプロセッサの利用状況に基づいて、アプリケーションに割り当てる第２のプロセッサの第２の識別情報を決定し、第１の識別情報と第２の識別情報とを対応付けた変換情報をコンピュータのオペレーティングシステムに通知し、オペレーティングシステムにより、変換情報に基づいて、第１の識別情報に代えて、第２の識別情報に対応する第２のプロセッサをアプリケーションに割り当てる。
【発明の効果】
【００１３】
１つの側面では、アプリケーションを変更することなしに、アプリケーションに割り当てるプロセッサの識別情報を変換できる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態の情報処理装置を示す図である。
【図２】第２の実施の形態のサーバのハードウェア例を示す図である。
【図３】第２の実施の形態のソフトウェア例を示す図である。
【図４】第２の実施の形態の変換テーブルの例を示す図である。
【図５】第２の実施の形態のアプリ起動例を示すフローチャートである。
【図６】第２の実施の形態のＣＰＵ番号の変換例を示す図である。
【図７】ＣＰＵ番号の割り当ての比較例を示す図である。
【図８】第３の実施の形態のソフトウェア例を示す図である。
【図９】第３の実施の形態のプロセステーブルの例を示す図である。
【図１０】第３の実施の形態のアプリ起動例を示すフローチャートである。
【図１１】第３の実施の形態のＣＰＵ再設定例を示すフローチャートである。
【図１２】第３の実施の形態のＣＰＵ割り当て変更例を示すフローチャートである。
【図１３】第４の実施の形態のソフトウェア例を示す図である。
【図１４】第４の実施の形態の変換テーブルの例を示す図である。
【図１５】第４の実施の形態のアプリ起動例を示すフローチャートである。
【図１６】第５の実施の形態のソフトウェア例を示す図である。
【図１７】第５の実施の形態のＣＰＵ番号の変換例を示す図である。
【図１８】仮想マシンにおけるＣＰＵ番号の割り当ての比較例を示す図である。
【発明を実施するための形態】
【００１５】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の情報処理装置を示す図である。情報処理装置１０は、複数のプロセッサおよび複数のメモリを有する。ここで、メモリは、例えばＲＡＭ（Random Access Memory）である。プロセッサは、例えばＣＰＵである。プロセッサは、複数のプロセッサの集合（マルチプロセッサ）も含み得る。情報処理装置１０は、コンピュータと呼ばれてもよい。プロセッサおよびメモリは、ＮＵＭＡの技術を用いて実装されている。情報処理装置１０は、ノード１１，１２を有する。
【００１６】
ノード１１は、プロセッサ１１ａ，１１ｂ，１１ｃ，１１ｄおよびメモリ１１ｅを有する。ノード１２は、プロセッサ１２ａ，１２ｂ，１２ｃ，１２ｄおよびメモリ１２ｅを有する。ノード１１，１２は、情報処理装置１０のハードウェアである。また、ノード１１，１２は、ＮＵＭＡノードと呼ばれてもよい。
【００１７】
ここで、プロセッサ１１ａの識別情報は“１”（ＩＤ（IDentifier）＝１）である。プロセッサ１１ｂの識別情報は“２”である。プロセッサ１１ｃの識別情報は“３”である。プロセッサ１１ｄの識別情報は“４”である。プロセッサ１２ａの識別情報は“５”である。プロセッサ１２ｂの識別情報は“６”である。プロセッサ１２ｃの識別情報は“７”である。プロセッサ１２ｄの識別情報は“８”である。
【００１８】
情報処理装置１０は、上記のハードウェアを用いて、オペレーティングシステム（ＯＳ：Operating System）１５、変換部１６およびアプリケーション１７を実行する。ＯＳ１５、変換部１６およびアプリケーション１７は、情報処理装置１０のソフトウェアである。ＯＳ１５は、情報処理装置１０のＯＳであり、ノード１１，１２を用いて実行される。アプリケーション１７は、ユーザの業務処理を実行する。
【００１９】
変換部１６は、アプリケーション１７へ割り当てるプロセッサの識別情報の変換を行うための変換情報を生成する。変換部１６は、ノード１１，１２に属する何れかのプロセッサにより実行される。変換部１６は、アプリケーション１７の外部の機能（例えば、動的共有ライブラリやスケジューラなど）として実装される。変換部１６は、アプリケーション１７の実行に用いるプロセッサを決定するために次のような処理を実行する。
【００２０】
変換部１６は、第１のプロセッサの第１の識別情報を含む設定情報Ｄ１をアプリケーション１７から取得する。例えば、設定情報Ｄ１は、アプリケーション１７の動作方法をチューニングするために、アプリケーション１７に対して予め付与される情報である。例えば、設定情報Ｄ１は、第１のプロセッサの第１の識別情報として、プロセッサ１１ｃ，１１ｄ，１２ａ，１２ｂそれぞれのＩＤ＝３，４，５，６を含む。
【００２１】
変換部１６は、複数のプロセッサの配置および複数のプロセッサの利用状況に基づいて、アプリケーション１７に割り当てる第２のプロセッサの第２の識別情報を決定する。例えば、変換部１６は、ノード１１，１２における複数のプロセッサの配置に基づいて、同一のノードに属するプロセッサをアプリケーション１７に割り当てるようにする。各プロセッサが共通のローカルメモリにアクセスした方が処理を高速化できるからである。また、変換部１６は、ノード１１の負荷およびノード１２の負荷に偏りが生じないように、アプリケーション１７にプロセッサを割り当てるようにする。
【００２２】
例えば、設定情報Ｄ１は、プロセッサのＩＤ＝３，４，５，６を含む。ＩＤ＝３，４で識別されるプロセッサ１１ｃ，１１ｄは、ノード１１に属する。ＩＤ＝５，６で識別されるプロセッサ１２ａ，１２ｂは、ノード１２に属する。プロセッサ１１ｃ，１１ｄ，１２ａ，１２ｂは、所属先がノード１１，１２に跨っている。このため、変換部１６は、ノード１１またはノード１２の何れか一方から、プロセッサを割り当てるようにする。例えば、ノード１２の負荷が、ノード１１の負荷よりも大きい場合、変換部１６は、ノード１１に属するプロセッサ１１ａ，１１ｂ，１１ｃ，１１ｄをアプリケーション１７に割り当てると決定する。この場合、第２の識別情報は、ＩＤ＝１，２，３，４である。
【００２３】
変換部１６は、第１の識別情報と第２の識別情報とを対応付けた変換情報Ｄ２を情報処理装置１０のＯＳ１５に通知する。上記の例では、第１の識別情報は、ＩＤ＝３，４，５，６である。第２の識別情報は、ＩＤ＝１，２，３，４である。すなわち、変換情報Ｄ２は、プロセッサのＩＤ＝３，４，５，６を、ＩＤ＝１，２，３，４に変換することを示す。
【００２４】
ＯＳ１５は、変換部１６から変換情報Ｄ２を取得する。ＯＳ１５は、変換情報Ｄ２に基づいて、第１の識別情報に代えて、第２の識別情報に対応する第２のプロセッサをアプリケーション１７に割り当てる。上記の例の場合、ＯＳ１５は、プロセッサのＩＤ＝３，４，５，６に代えて、ＩＤ＝１，２，３，４に対応するプロセッサ１１ａ，１１ｂ，１１ｃ，１１ｄをアプリケーション１７に割り当てる。
【００２５】
情報処理装置１０によれば、アプリケーション１７を変更することなしに、プロセッサの識別情報を変換できる。具体的には、変換部１６は、アプリケーション１７から取得した設定情報Ｄ１に基づいて、変換情報Ｄ２をＯＳ１５に通知する。このため、アプリケーション１７側では設定情報Ｄ１の変更を意識しなくてもよい。
【００２６】
特に、ＮＵＭＡを意識して作成されたアプリケーション１７では、アプリケーション１７の実行に用いるプロセッサの識別情報が予め定義されている。しかし、予め定義された識別情報が、実際に実行する情報処理装置１０のＮＵＭＡの構造（ＮＵＭＡ構造）と必ずしも一致しているとは限らない。例えば、予め定義された識別情報のプロセッサが該当の情報処理装置上に存在しないこともある。また、予め定義された識別情報の組み合わせに対応するプロセッサ群が同一のノード上にない可能性もある。別の情報処理装置への配備を見越して、アプリケーションを予め修正することも考えられるが、配備先の情報処理装置のＮＵＭＡの構造を、配備前に予め知ることは難しい。このため、アプリケーションの配備後に、ユーザはアプリケーションに対する設定の修正作業を強いられることがあるという問題がある。
【００２７】
変換部１６は、情報処理装置１０におけるＮＵＭＡの実装に応じて、アプリケーション１７に割り当てるプロセッサを決定する。このため、情報処理装置１０は、ＮＵＭＡを意識して作成されたアプリケーション１７に対して期待される性能を発揮させて、適切に動作させることができる。また、ユーザに対してアプリケーション１７の変更作業を強いずに済み、ユーザの作業の負担を軽減できる。
【００２８】
次に、アプリケーションを実行するサーバコンピュータ（単に、サーバと称することがある）を例示して、上記の機能をより詳細に説明する。
［第２の実施の形態］
図２は、第２の実施の形態のサーバのハードウェア例を示す図である。サーバ１００は、ＮＵＭＡの技術によりＣＰＵやＲＡＭが実装されている。サーバ１００は、ノード１０１，１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。各ユニットはサーバ１００のバスに接続されている。
【００２９】
ノード１０１は、ＣＰＵ１１ｐ，１２ｐ，・・・およびＲＡＭ１ｍを有する。ノード１０２は、ＣＰＵ２１ｐ，２２ｐ，・・・およびＲＡＭ２ｍを有する。ノード１０１，１０２は、ＮＵＭＡノードと呼ばれてもよい。
【００３０】
ＣＰＵ１１ｐ，１２ｐ，・・・およびＣＰＵ２１ｐ，２２ｐ，・・・は、サーバ１００の演算装置である。
ＲＡＭ１ｍ，２ｍは、サーバ１００の主記憶装置である。ＲＡＭ１ｍ，２ｍは、ＯＳのプログラムやアプリケーションのプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１ｍは、ＣＰＵ１１ｐ，１２ｐ，・・・のローカルメモリである。ＲＡＭ１ｍは、ＣＰＵ２１ｐ，２２ｐ，・・・のリモートメモリである。ＲＡＭ２ｍは、ＣＰＵ２１ｐ，２２ｐ，・・・のローカルメモリである。ＲＡＭ２ｍは、ＣＰＵ１１ｐ，１２ｐ，・・・のリモートメモリである。サーバ１００は、ノード１０１，１０２に加えて、更に１以上のノードを有してもよい。
【００３１】
ＨＤＤ１０３は、サーバ１００の補助記憶装置である。ＨＤＤ１０３は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３は、ＯＳのプログラム、アプリケーションのプログラム、および各種データを記憶する。サーバ１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
【００３２】
画像信号処理部１０４は、各ＣＰＵからの命令に従って、サーバ１００に接続されたディスプレイ２１に画像を出力する。ディスプレイ２１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００３３】
入力信号処理部１０５は、サーバ１００に接続された入力デバイス２２から入力信号を取得し、各ＣＰＵに出力する。入力デバイス２２としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００３４】
媒体リーダ１０６は、記録媒体２３に記録されたプログラムやデータを読み取る装置である。記録媒体２３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤ（Hard Disk Drive）などの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。また、記録媒体２３として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。媒体リーダ１０６は、例えば、各ＣＰＵからの命令に従って、記録媒体２３から読み取ったプログラムやデータをＲＡＭ１ｍ，２ｍまたはＨＤＤ１０３に格納する。
【００３５】
通信インタフェース１０７は、ネットワーク２４を介して他の装置と通信を行う。通信インタフェース１０７は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。
【００３６】
図３は、第２の実施の形態のソフトウェア例を示す図である。サーバ１００は、記憶部１１０、ＯＳカーネル１２０、ＣＰＵ名変換部１３０およびアプリケーション１４０を有する。記憶部１１０は、ＲＡＭ１ｍ，２ｍまたはＨＤＤ１０３に確保された記憶領域として実現される。ＯＳカーネル１２０およびＣＰＵ名変換部１３０は、ＲＡＭ１ｍ，２ｍに格納されたプログラムを、ＣＰＵ１１ｐ，１２ｐ，・・・およびＣＰＵ２１ｐ，２２ｐ，・・・の少なくとも１つが実行することで実現される。アプリケーション１４０は、後述するように、可能な限り１つのノードに属するＣＰＵ群およびＲＡＭを用いて実行される。
【００３７】
記憶部１１０は、変換テーブル１１１を記憶する。変換テーブル１１１は、ＣＰＵ名変換部１３０の処理に用いられるテーブルである。変換テーブル１１１は、変換元のＣＰＵ名と変換先のＣＰＵ名との対応関係が記録された情報である。例えば、ユーザは、変換テーブル１１１を予め作成して記憶部１１０に格納しておける。
【００３８】
ここで、ＣＰＵ名は、ＣＰＵの識別情報に相当する。第２の実施の形態では、ＣＰＵ名は、ＣＰＵの番号（ＣＰＵ番号）である。ＣＰＵ番号は、“０”を起点とした昇順の整数である。ＣＰＵ番号は、ＣＰＵのファームウェアやＯＳにより、所定のアルゴリズムを用いて各ＣＰＵに付与される。すなわち、ＣＰＵ番号の付与ルールは、サーバコンピュータに応じて異なることもある。例えば、所定数の連続の番号が同一ノードに属することもあるし、所定数の不連続の番号が同一ノードに属することもある。
【００３９】
ＯＳカーネル１２０は、サーバ１００のＯＳのカーネルである。ＯＳカーネル１２０は、サーバ１００上で実行されるアプリケーション１４０に対してＣＰＵを割り当てる。
ＣＰＵ名変換部１３０は、アプリケーション１４０の起動時における所定のシステムコール（ＣＰＵ設定用のシステムコール）を検出し、アプリケーション１４０からＣＰＵ番号の指定を受け付ける。ＣＰＵ名変換部１３０は、記憶部１１０に記憶された変換テーブル１１１に基づいて、ＣＰＵ番号を変換し、ＯＳカーネル１２０に通知する。
【００４０】
アプリケーション１４０は、ユーザの業務に関する処理を行うソフトウェアである。アプリケーション１４０は、ＮＵＭＡを意識して作成されており、アプリケーション１４０の実行に用いるＣＰＵ番号が予め定義されている。ただし、予め定義されたＣＰＵ番号が必ずしも、実際に実行するサーバのＮＵＭＡ構造と一致しているとは限らない。例えば、予め定義されたＣＰＵ番号が該当のサーバ上に存在しないこともあるし、予め定義されたＣＰＵ番号の組み合わせが同一ノード上にないこともある。なお、以下の説明では、「アプリケーション」を、「アプリ」と略記することがある。
【００４１】
図４は、第２の実施の形態の変換テーブルの例を示す図である。変換テーブル１１１は、記憶部１１０に格納される。変換テーブル１１１は、アプリ指定ＣＰＵ番号および変換後ＣＰＵ番号の項目を含む。
【００４２】
アプリ指定ＣＰＵ番号の項目には、アプリケーション１４０により指定されたＣＰＵ番号が登録される。変換後ＣＰＵ番号の項目には、変換後のＣＰＵ番号が登録される。例えば、変換テーブル１１１には、アプリ指定ＣＰＵ番号が“０”、変換後ＣＰＵ番号が“２”という情報が登録される。これは、アプリケーション１４０によりＣＰＵ番号“０”が指定された場合、ＣＰＵ番号“２”に変換することを示す。
【００４３】
変換テーブル１１１には、他のＣＰＵ番号についても同様に、アプリ指定ＣＰＵ番号と、ＣＰＵ番号との組み合わせが予め登録される。特に、変換後のＣＰＵ番号の項目には、同一ノード上のＣＰＵのＣＰＵ番号が予め登録される。
【００４４】
次に、サーバ１００によるアプリ起動時の処理手順を説明する。
図５は、第２の実施の形態のアプリ起動例を示すフローチャートである。以下、図５に示す処理をステップ番号に沿って説明する。
【００４５】
（Ｓ１１）ＣＰＵ名変換部１３０は、ユーザによるアプリ指定ＣＰＵ番号と変換後ＣＰＵ番号との組み合わせの入力を受け付け、変換テーブル１１１を作成する。ＣＰＵ名変換部１３０は、作成した変換テーブル１１１を記憶部１１０に格納する。ＣＰＵ名変換部１３０は、アプリケーション毎に変換テーブルを作成し、アプリケーションの識別情報に対応付けて、作成した変換テーブルを記憶部１１０に格納する。変換テーブル１１１は、アプリケーション１４０の識別情報に対応付けられる。
【００４６】
（Ｓ１２）ＣＰＵ名変換部１３０は、アプリ起動時のＣＰＵ設定を行うシステムコールを検出する。例えば、ＣＰＵ名変換部１３０は、アプリケーション１４０の起動時に、当該アプリケーション１４０の実行に用いるＣＰＵを設定するためのシステムコールを検出する。
【００４７】
（Ｓ１３）ＣＰＵ名変換部１３０は、システムコールをフックする。
（Ｓ１４）ＣＰＵ名変換部１３０は、記憶部１１０に記憶された変換テーブル１１１に基づいて、システムコールに含まれるＣＰＵ設定情報のＣＰＵ名を変換する。例えば、変換テーブル１１１は、アプリ指定ＣＰＵ番号“０”を、変換後ＣＰＵ番号“２”に変換する旨の情報を含む。このため、ＣＰＵ名変換部１３０は、ＣＰＵ設定情報に含まれるＣＰＵ番号“０”を、ＣＰＵ番号“２”に変換する。ＣＰＵ名変換部１３０は、ＣＰＵ設定情報に含まれる他のＣＰＵ番号も、変換テーブル１１１に基づいて同様に変換する。
【００４８】
（Ｓ１５）ＣＰＵ名変換部１３０は、変換後のＣＰＵ名をＯＳに通知する。具体的には、ＣＰＵ名変換部１３０は、ステップＳ１４により変換したＣＰＵ設定情報を、ＯＳカーネル１２０に通知する。ＯＳカーネル１２０は、ＣＰＵ名変換部１３０から受け付けたＣＰＵ設定情報に基づいて、アプリケーション１４０へのＣＰＵの割り当てを行う。
【００４９】
これにより、ＯＳカーネル１２０は、同一ノード上のＣＰＵを適切にアプリケーション１４０に割り当てることができる。
図６は、第２の実施の形態のＣＰＵ番号の変換例を示す図である。図６（Ａ）は、アプリケーション１４０により複数ノードに跨るＣＰＵ番号が指定された場合を例示している。例えば、ノード１０１は、１０個のＣＰＵを含むＣＰＵ群Ｐ１を有するとする。ＣＰＵ群Ｐ１に属するＣＰＵ番号は“０”〜“９”である（図中“０−９”と表記している。以下同様）。また、ノード１０２は、１０個のＣＰＵを含むＣＰＵ群Ｐ２を有するとする。ＣＰＵ群Ｐ２に属するＣＰＵ番号は“１０”〜“１９”である。また、変換テーブル１１１には、ＣＰＵ番号“８，９，１０，１１”それぞれを、ＣＰＵ番号“４，５，６，７”に変換するよう定義されているものとする。
【００５０】
この場合、アプリケーション１４０が、起動時にＣＰＵ番号“８，９，１０，１１”の設定を含むシステムコールを発行したとする。ＣＰＵ番号“８，９，１０，１１”に対応する４つのＣＰＵのうち、ＣＰＵ番号“８，９”のＣＰＵは、ノード１０１に属する。ＣＰＵ番号“１０，１１”のＣＰＵは、ノード１０２に属する。
【００５１】
ＣＰＵ名変換部１３０は、当該システムコールをフックし、変換テーブル１１１に基づいて、ＣＰＵ番号“８，９，１０，１１”を、ＣＰＵ番号“４，５，６，７”に変換する。ＣＰＵ名変換部１３０は、当該変換後のＣＰＵ設定情報をＯＳカーネル１２０に通知する（図６では、ＯＳカーネル１２０の図示を省略している）。ＯＳカーネル１２０は、ＣＰＵ名変換部１３０からの通知により、ＣＰＵ番号“４，５，６，７”に対応する４つのＣＰＵを、アプリケーション１４０に割り当てる。当該４つのＣＰＵは、何れもノード１０１に属する。
【００５２】
図６（Ｂ）は、ノード１０１上で、あるＣＰＵ（一例として、ＣＰＵ番号“９”のＣＰＵ）で障害が発生している場合を例示している。この場合、サーバ１００は、ノード１０１において、ＣＰＵ番号“９”の利用を停止し、縮退運転を行う。変換テーブル１１１には、ＣＰＵ番号“６，７，８，９”それぞれを、ＣＰＵ番号“５，６，７，８”に変換するよう定義されているものとする。
【００５３】
このとき、アプリケーション１４０が、起動時にＣＰＵ番号“６，７，８，９”の設定を含むシステムコールを発行したとする。図６（Ｂ）の例では、ＣＰＵ番号“９”は、障害により利用できない。ＣＰＵ名変換部１３０は、当該システムコールをフックし、変換テーブル１１１に基づいて、ＣＰＵ番号“６，７，８，９”を、ＣＰＵ番号“５，６，７，８”に変換する。ＣＰＵ名変換部１３０は、当該変換後のＣＰＵ設定情報をＯＳカーネル１２０に通知する。ＯＳカーネル１２０は、ＣＰＵ名変換部１３０からの通知により、ＣＰＵ番号“５，６，７，８”に対応する４つのＣＰＵを、アプリケーション１４０に割り当てる。当該４つのＣＰＵは、何れもノード１０１に属する。
【００５４】
こうして、ＣＰＵ名変換部１３０は、単一のノード１０１からアプリケーション１４０に割り当てるＣＰＵを決定することで、アプリケーション１４０による処理性能の向上を図れ、アプリケーション１４０を適切に動作させることができる。
【００５５】
上記のＣＰＵ名変換部１３０の機能は、アプリケーション１４０を実行するサーバのＮＵＭＡ構成が変化し得る場合に有用である。
図７は、ＣＰＵ番号の割り当ての比較例を示す図である。例えば、サーバ２００は、ＣＰＵ名変換部１３０の機能を有していない。サーバ２００は、ＣＰＵとＲＡＭとを備えるノード２０１、および、ＣＰＵとＲＡＭとを備えるノード２０２を有している。ノード２０１，２０２は、それぞれ１２個のＣＰＵを有する。ノード２０１のＣＰＵ群Ｐ３に属するＣＰＵ番号は“０“〜“１１”である。ノード２０２のＣＰＵ群Ｐ４に属するＣＰＵ番号は“１２”〜“２３”である。サーバ２００上のアプリケーション２４０は、実行するＣＰＵを固定する設定がなされており、ＣＰＵ番号“８，９，１０，１１”が予め定義されている。
【００５６】
例えば、アプリケーション２４０を別のサーバ３００に移動して（配備先を変更して）動作させることを考える（図７（Ａ）のケース）。サーバ３００は、ノード３０１，３０２を有する。ノード３０１，３０２は、それぞれ１０個のＣＰＵを有する。ノード３０１のＣＰＵ群Ｐ５に属するＣＰＵ番号は“０”〜“９”である。ノード３０２のＣＰＵ群Ｐ６に属するＣＰＵ番号は“１０”〜“１９”である。
【００５７】
一方、アプリケーション２４０では、ＣＰＵ番号“８，９，１０，１１”が予め定義されている。サーバ３００のＯＳカーネルがアプリケーション２４０の定義に従って割り当てるＣＰＵを決定すると、アプリケーション２４０を実行するＣＰＵがノード３０１，３０２に跨ることになる。前述のように、ＮＵＭＡでは、リモートメモリにアクセスするよりも、ローカルメモリにアクセスする方が処理を高速化できる。逆にいえば、ＣＰＵがリモートメモリへアクセスする場合、期待する処理性能を発揮できないことになる。このため、アプリケーション２４０を実行する複数のＣＰＵが複数のノードに跨ると、処理性能を十分に発揮できない。
【００５８】
続いて、サーバ２００でハードウェアエラーが発生し、ＣＰＵ番号“９”のＣＰＵ（図中“ＣＰＵ９”と表記）が縮退している場合を考える（図７（Ｂ）のケース）。この場合、サーバ２００のＯＳカーネルは、アプリケーション２４０側のＣＰＵ番号“８，９，１０，１１”の指定に対して、ＣＰＵ番号“９”のＣＰＵの割り当てを行えない。このため、ＯＳカーネルは、ＣＰＵ番号“９”のＣＰＵの代替となるＣＰＵを任意に決定して、アプリケーション２４０に割り当てる。ＯＳカーネルは、ノード２０２から代替のＣＰＵを、アプリケーション２４０に割り当てることもある。この場合も、図７（Ａ）と同様に、期待する処理性能を発揮できないことになる。
【００５９】
図７（Ａ）および図７（Ｂ）で例示した各ケースの場合、ノード上のＣＰＵの配置が変更されるたびに、ユーザにより、アプリケーション２４０によるＣＰＵの指定を変更することも考えられる。しかし、このような作業をユーザに強いると、ユーザの作業負担が増す。
【００６０】
一方、サーバ１００では、ＣＰＵ名変換部１３０は、変換テーブル１１１に基づいて、サーバ１００におけるＮＵＭＡの実装に応じて、アプリケーション１４０に割り当てるＣＰＵを決定する。このため、サーバ１００は、ＮＵＭＡを意識して作成されたアプリケーション１４０に対して期待される性能を発揮させて、適切に動作させることができる。また、ユーザは、変換テーブル１１１の設定を行えばよく、アプリケーション１４０の変更を行わずに済む。ユーザに対してアプリケーション１４０の変更を強いずに済むので、ユーザによる作業の負担を軽減できる。
【００６１】
［第３の実施の形態］
以下、第３の実施の形態を説明する。前述の第２の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【００６２】
第２の実施の形態では、サーバ１００は、変換テーブル１１１に基づいて、アプリケーション１４０の起動時に、アプリケーション１４０に割り当てるＣＰＵを決定するものとした。一方、アプリケーション１４０に割り当てるＣＰＵを、起動時および起動後にも動的に変更することも考えられる。各ノードにおいて利用可能なＣＰＵやＣＰＵの負荷は運用に応じて変わり得るからである。そこで、第３の実施の形態では、アプリケーション１４０に割り当てるＣＰＵを動的に変更する機能を提供する。
【００６３】
ここで、第３の実施の形態では、サーバ１００に代えて、サーバ１００ａを用いる。サーバ１００ａのハードウェアは、図２で例示した第２の実施の形態のサーバ１００と同様である。このため、サーバ１００ａのハードウェアを、サーバ１００と同様の符号・名称を用いて指し示す。
【００６４】
図８は、第３の実施の形態のソフトウェア例を示す図である。サーバ１００ａは、記憶部１１０、ＯＳカーネル１２０、アプリケーション１４０およびスケジューラ１５０を有する。記憶部１１０は、ＲＡＭ１ｍ，２ｍまたはＨＤＤ１０３に確保された記憶領域として実現される。ＯＳカーネル１２０およびスケジューラ１５０は、ＲＡＭ１ｍ，２ｍに格納されたプログラムを、ＣＰＵ１１ｐ，１２ｐ，・・・およびＣＰＵ２１ｐ，２２ｐ，・・・の少なくとも１つが実行することで実現される。アプリケーション１４０は、後述するように、可能な限り１つのノードに属するＣＰＵ群およびＲＡＭを用いて実行される。
【００６５】
サーバ１００ａは、変換テーブル１１１に代えてプロセステーブル１１２を記憶部１１０に格納する点がサーバ１００と異なる。また、サーバ１００ａは、ＣＰＵ名変換部１３０に代えてスケジューラ１５０を有する点がサーバ１００と異なる。また、記憶部１１０は、サーバ１００ａが有するＣＰＵのＣＰＵ番号、および、ＣＰＵ番号と当該ＣＰＵ番号に対応するＣＰＵが属するノードとの対応関係を示すＣＰＵの構成情報を記憶する。
【００６６】
プロセステーブル１１２は、スケジューラ１５０によるＣＰＵ番号の変換対象とするプロセスを識別するための情報を記録したテーブルである。プロセステーブル１１２は、スケジューラ１５０により作成され、記憶部１１０に格納される。
【００６７】
スケジューラ１５０は、アプリケーション１４０のプロセスに対して、ＣＰＵ番号の再設定を行う。スケジューラ１５０は、各ＣＰＵのノード上の配置および各ＣＰＵの利用状況に基づいて、アプリケーション１４０に割り当てるＣＰＵのＣＰＵ番号を決定する。スケジューラ１５０は、決定したＣＰＵ番号をＯＳカーネル１２０に通知する。
【００６８】
また、スケジューラ１５０は、ＣＰＵの構成情報、各アプリケーションの現在のＣＰＵ割り当て状況、および、各ノードにおけるＣＰＵおよびＲＡＭの負荷に関する情報を収集し、記憶部１１０に格納する。
【００６９】
ＯＳカーネル１２０は、スケジューラ１５０から通知されたＣＰＵ番号に基づいて、アプリケーション１４０にＣＰＵを割り当てる。
図９は、第３の実施の形態のプロセステーブルの例を示す図である。プロセステーブル１１２は、記憶部１１０に格納される。プロセステーブル１１２は、プロセスＩＤおよび指定ＣＰＵ番号の項目を含む。
【００７０】
プロセスＩＤの項目には、アプリケーション１４０のプロセスのプロセスＩＤが登録される。指定ＣＰＵ番号の項目には、アプリケーション１４０により指定されたＣＰＵ番号が登録される。例えば、プロセステーブル１１２には、プロセスＩＤが“１０２０３”、指定ＣＰＵ番号が“０，１”という情報が登録されている。これは、プロセスＩＤ“１０２０３”のプロセスに対応するアプリケーション１４０により指定されたＣＰＵ番号が“０，１”であることを示す。
【００７１】
次に、サーバ１００ａによるアプリ起動時の処理手順を説明する。
図１０は、第３の実施の形態のアプリ起動例を示すフローチャートである。以下、図１０に示す処理をステップ番号に沿って説明する。
【００７２】
（Ｓ２１）スケジューラ１５０は、アプリ起動時にＣＰＵ情報を取得する。例えば、サーバ１００ａは、アプリケーション１４０を起動する際、次のような起動コマンドを用いてアプリケーション１４０を起動することができる。
【００７３】
“＃ｓｅｔ−ｃｐｕ−ｒｕｎ  −ｃｐｕ  ＜ｃｐｕ名リスト＞  コマンド”
ここで、“＜ｃｐｕ名リスト＞”の箇所は、指定ＣＰＵ番号のリストが挿入される。また、“コマンド”の箇所は、アプリケーション１４０を起動するための任意のコマンドが挿入される。スケジューラ１５０は、上記の起動コマンドにより入力された指定ＣＰＵ番号のリストを取得する。
【００７４】
（Ｓ２２）スケジューラ１５０は、アプリケーション１４０のプロセスＩＤに対して、ステップＳ２１で取得したＣＰＵ情報（すなわち、指定ＣＰＵ番号のリスト）を記録する。例えば、スケジューラ１５０は、アプリケーション１４０のプロセスＩＤ“１０２０３”に対して、指定ＣＰＵ番号“０，１”を、記憶部１１０に記憶されたプロセステーブル１１２に登録する。なお、ＯＳカーネル１２０は、アプリケーション１４０の起動後、内部論理にしたがってアプリケーション１４０に割り当てるＣＰＵの設定を行う。
【００７５】
（Ｓ２３）スケジューラ１５０は、各ノードに対するＣＰＵの配置状況やサーバ１００ａの各ノードのＣＰＵ負荷の監視に応じて、アプリケーション１４０に対して割り当てるＣＰＵの再設定を行う。スケジューラ１５０は、ＣＰＵの再設定の結果をＯＳカーネル１２０に通知する。ステップＳ２３の処理の詳細は後述される。
【００７６】
ＯＳカーネル１２０は、スケジューラ１５０から受け付けたＣＰＵの再設定の結果に基づいて、アプリケーション１４０に対するＣＰＵの割り当てを変更する。
図１１は、第３の実施の形態のＣＰＵ再設定例を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。以下の手順は、図１０のステップＳ２３に相当する。
【００７７】
（Ｓ３１）スケジューラ１５０は、ホスト情報を取得する。ホスト情報は、サーバ１００ａの負荷に関する情報を含む。また、ホスト情報は、サーバ１００ａにおけるＣＰＵの構成情報（各ＣＰＵが何れのノードに属しているか）を示す情報を含む。更に、ホスト情報は、各アプリケーションに対して現在割り当てられているＣＰＵのＣＰＵ番号の情報を含む。
【００７８】
（Ｓ３２）スケジューラ１５０は、プロセステーブル１１２に記録された全てのプロセスを確認済であるか否かを判定する。全てのプロセスを確認済である場合、処理を終了する（次にＣＰＵ再設定を行うタイミングまで待機する）。全てのプロセスを確認済でない場合、処理をステップＳ３３に進める。
【００７９】
（Ｓ３３）スケジューラ１５０は、プロセステーブル１１２からプロセス（プロセスＩＤ）を１つ選択する。
（Ｓ３４）スケジューラ１５０は、ステップＳ３３で選択したプロセスに割り当てられたＣＰＵとホスト情報とを照会する。例えば、スケジューラ１５０は、該当のプロセスに割り当てられたＣＰＵのＣＰＵ番号をＯＳカーネル１２０に問い合わせることで、該当のプロセスに割り当てられたＣＰＵを照会できる。また、スケジューラ１５０は、ホスト情報を照会することで、各ＣＰＵの負荷を把握する。
【００８０】
（Ｓ３５）スケジューラ１５０は、アプリケーション１４０に対するＣＰＵ番号の変換先を変更し、変更結果をＯＳカーネル１２０に通知する。ステップＳ３５の処理の詳細は後述される。
【００８１】
なお、スケジューラ１５０は、上記のステップＳ３１〜Ｓ３５の手順を定期的に（所定の周期で）実行してもよい。
図１２は、第３の実施の形態のＣＰＵ割り当て変更例を示すフローチャートである。以下、図１２に示す処理をステップ番号に沿って説明する。以下の手順は、図１１のステップＳ３５に相当する。
【００８２】
（Ｓ４１）スケジューラ１５０は、アプリ指定のＣＰＵが存在するか否かを判定する。アプリ指定のＣＰＵが存在する場合、処理をステップＳ４２に進める。アプリ指定のＣＰＵが存在しない場合、処理をステップＳ４４に進める。ここで、スケジューラ１５０は、プロセステーブル１１２およびサーバ１００ａにおけるＣＰＵの構成情報（ＣＰＵ番号やＣＰＵ番号のノードへの所属を示す情報）を照合することで、アプリ指定のＣＰＵが存在するか否かを判定する。前述のように、ＣＰＵの構成情報は、スケジューラ１５０により収集されて、記憶部１１０に格納される。スケジューラ１５０は、アプリケーション１４０のプロセスＩＤに対応する指定ＣＰＵ番号をプロセステーブル１１２上で特定することで、アプリ指定のＣＰＵのＣＰＵ番号を取得できる。アプリ指定のＣＰＵが複数の場合、スケジューラ１５０は、全てのＣＰＵがサーバ１００ａ上に存在する場合に、処理をステップＳ４２に進める。一方、スケジューラ１５０は、少なくとも１つのＣＰＵがサーバ１００ａ上に存在しない場合に、処理をステップＳ４４に進める。
【００８３】
（Ｓ４２）スケジューラ１５０は、アプリ指定の全ＣＰＵが同一ノード上にあるか否かを判定する。全ＣＰＵが同一ノード上にある場合、処理をステップＳ４３に進める。全ＣＰＵが同一ノード上にない場合、処理をステップＳ４４に進める。例えば、スケジューラ１５０は、前述のＣＰＵの構成情報に基づいて、アプリ指定の全ＣＰＵが同一ノード上にあるか否かを判定することができる。
【００８４】
（Ｓ４３）スケジューラ１５０は、アプリ指定のＣＰＵのうち、何れかのＣＰＵが高負荷であるか否かを判定する。アプリ指定のＣＰＵのうち、何れかのＣＰＵが高負荷である場合、処理をステップＳ４６に進める。アプリ指定の何れのＣＰＵも高負荷でない場合、処理を終了する。後者の場合、ＣＰＵ番号の変換を行わない。すなわち、ＯＳカーネル１２０は、アプリケーション１４０から指定されたＣＰＵ群をそのままアプリケーション１４０に割り当てることになる。ここで、スケジューラ１５０は、例えば、ＣＰＵのビジー率が所定の閾値を超過しているか否かに応じて、該当のＣＰＵが高負荷であるか否かを判定できる。ＣＰＵのビジー率が閾値を超過している場合、該当のＣＰＵは高負荷である。ＣＰＵのビジー率が閾値を超過していない場合、該当のＣＰＵは高負荷でない。
【００８５】
（Ｓ４４）スケジューラ１５０は、アプリケーション１４０が所要するＣＰＵ数を供給できるノードがあるか否かを判定する。アプリケーション１４０が所要するＣＰＵ数を供給できるノードがない場合、処理をステップＳ４５に進める。アプリケーション１４０が所要するＣＰＵ数を供給できるノードがある場合、処理をステップＳ４６に進める。ここで、スケジューラ１５０は、アプリケーション１４０のプロセスＩＤに対応する指定ＣＰＵ番号の数をプロセステーブル１１２上でカウントすることで、アプリケーション１４０が所要するＣＰＵ数を取得できる。また、各ノードが有するＣＰＵ数は、記憶部１１０に記憶されたＣＰＵの構成情報から取得できる。所要するＣＰＵ数のＣＰＵを含むノードが、アプリケーション１４０が所要するＣＰＵ数を提供できるノードである。
【００８６】
（Ｓ４５）スケジューラ１５０は、ホスト上（すなわち、サーバ１００ａ上）のＣＰＵ一覧を取得する。ＣＰＵ一覧は、ＣＰＵ番号のリストである。そして、処理をステップＳ４８に進める。
【００８７】
（Ｓ４６）スケジューラ１５０は、サーバ１００ａのノード１０１，１０２のうち、ＣＰＵ／ＲＡＭに空きのあるノードを選択する。例えば、スケジューラ１５０は、何れのアプリケーションの実行にも使用されていないＣＰＵおよびＲＡＭをもつノードを選択する。また、例えば、スケジューラ１５０は、ＣＰＵおよびＲＡＭの負荷が所定の閾値よりも低いノードを選択してもよい。選択対象として複数のノードが候補になるなら、スケジューラ１５０は、複数の候補ノードのうち、ＣＰＵおよびＲＡＭの負荷が最も低いノードを選択してもよい。ＣＰＵの負荷としては前述のビジー率が考えられる。ＲＡＭの負荷としては、ＲＡＭの記憶領域の使用率が考えられる。スケジューラ１５０は、ＣＰＵのビジー率およびＲＡＭの使用率それぞれに重み付けして加算することで、ノード単位の負荷を評価してもよい。例えば、スケジューラ１５０は、ノード単位の負荷が最小のノードを割り当てるＣＰＵの選択に用いるノードと決定してもよい。
【００８８】
（Ｓ４７）スケジューラ１５０は、ステップＳ４６で選択したノード上のＣＰＵ一覧を取得する。そして、処理をステップＳ４８に進める。
（Ｓ４８）スケジューラ１５０は、取得したＣＰＵ一覧のＣＰＵ番号を、当該ＣＰＵ番号に対応するＣＰＵの負荷の低い順にソートする。
【００８９】
（Ｓ４９）スケジューラ１５０は、ソート結果に基づいて、負荷の低いＣＰＵのＣＰＵ番号を選択する。例えば、スケジューラ１５０は、対応するＣＰＵの負荷が小さい方から順番に、アプリケーション１４０が所要するＣＰＵ数の分だけ、アプリケーション１４０に割り当てるＣＰＵ番号を選択する。
【００９０】
（Ｓ５０）スケジューラ１５０は、アプリケーション１４０に割り当てるＣＰＵ番号を、ステップＳ４９で選択したＣＰＵ番号に変更する（変換先ＣＰＵ番号を変更する）。スケジューラ１５０は、アプリケーション１４０のプロセスＩＤと、指定ＣＰＵ番号と、変更後の変換先ＣＰＵ番号とをＯＳカーネル１２０に通知する。
【００９１】
ＯＳカーネル１２０は、スケジューラ１５０からの通知に応じて、アプリケーション１４０へのＣＰＵの割り当てを変更する。
このように、スケジューラ１５０を用いて、アプリケーション１４０に対するＣＰＵの割り当てを動的に変更することもできる。このとき、スケジューラ１５０は、同一ノード上にあるＣＰＵを優先してアプリケーション１４０に割り当てるように変換先のＣＰＵ番号を決定する。これにより、ＮＵＭＡを意識して作成されたアプリケーション１４０の処理性能を適切に発揮して、アプリケーション１４０を動作させることができる。
【００９２】
また、スケジューラ１５０は、ノード単位の負荷に応じて、負荷が最小のノードを、アプリケーション１４０に割り当てるＣＰＵの抽出対象とすることで、特定のノードに処理負荷が偏ることを防げる。更に、スケジューラ１５０は、同一ノード内において、負荷の低い方から順に、アプリケーション１４０により要求された数のＣＰＵを選択することで、ノード内のＣＰＵの負荷の平準化も図れる。これにより、サーバ１００ａにおけるリソース利用の効率化を図れる。その結果、サーバ１００ａで実行される複数のアプリケーションの処理を高速化できる。更に、ユーザに対してアプリケーション１４０の変更作業を強いずに済み、ユーザの作業の負担を軽減できる。
【００９３】
［第４の実施の形態］
以下、第４の実施の形態を説明する。前述の第２，第３の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【００９４】
第３の実施の形態では、スケジューラ１５０が、プロセスＩＤ毎に変換先のＣＰＵ番号を、ＯＳカーネル１２０に通知するものとした。一方、ＯＳカーネル１２０が内部にもつＣＰＵ番号の変換テーブルを外部から書き換えることで、ＯＳカーネル１２０によるＣＰＵ番号の変換を制御することも考えられる。そこで、第４の実施の形態では、ＯＳカーネル１２０内の変換テーブルを書き換える機能を提供する。
【００９５】
ここで、第４の実施の形態では、サーバ１００ａに代えて、サーバ１００ｂを用いる。サーバ１００ｂのハードウェアは、図２で例示した第２の実施の形態のサーバ１００と同様である。このため、サーバ１００ｂのハードウェアを、サーバ１００と同様の符号・名称を用いて指し示す。
【００９６】
図１３は、第４の実施の形態のソフトウェア例を示す図である。サーバ１００ｂは、記憶部１１０、ＯＳカーネル１２０、アプリケーション１４０およびスケジューラ１６０を有する。記憶部１１０は、ＲＡＭ１ｍ，２ｍまたはＨＤＤ１０３に確保された記憶領域として実現される。ＯＳカーネル１２０およびスケジューラ１６０は、ＲＡＭ１ｍ，２ｍに格納されたプログラムを、ＣＰＵ１１ｐ，１２ｐ，・・・およびＣＰＵ２１ｐ，２２ｐ，・・・の少なくとも１つが実行することで実現される。アプリケーション１４０は、後述するように、可能な限り１つのノードに属するＣＰＵ群およびＲＡＭを用いて実行される。
【００９７】
サーバ１００ｂは、プロセステーブル１１２に加えて、変換テーブル１１３を記憶部１１０に格納する点がサーバ１００ａと異なる。また、サーバ１００ｂは、スケジューラ１５０に代えてスケジューラ１６０を有する点がサーバ１００ａと異なる。
【００９８】
変換テーブル１１３は、ＯＳカーネル１２０によるＣＰＵ番号の変換に用いられる情報である。変換テーブル１１３は、スケジューラ１６０により作成され、記憶部１１０に格納される。
【００９９】
スケジューラ１６０は、アプリケーション１４０のプロセスに対して、ＣＰＵ番号の再設定を行う。スケジューラ１６０は、各ＣＰＵのノード上の配置および各ＣＰＵの利用状況に基づいて、アプリケーション１４０に割り当てるＣＰＵのＣＰＵ番号を決定する。スケジューラ１６０は、決定したＣＰＵ番号を、プロセスＩＤおよび変換元ＣＰＵ番号（アプリケーション１４０により指定されたＣＰＵ番号）に対応付けて、変換テーブル１１３に登録する。
【０１００】
また、スケジューラ１６０は、ＣＰＵの構成情報、各アプリケーションの現在のＣＰＵ割り当て状況、および、各ノードにおけるＣＰＵおよびＲＡＭの負荷に関する情報を収集し、記憶部１１０、または、他の記憶部に格納する。
【０１０１】
ＯＳカーネル１２０は、記憶部１１０に記憶された変換テーブル１１３に基づいて、アプリケーション１４０にＣＰＵを割り当てる。
図１４は、第４の実施の形態の変換テーブルの例を示す図である。変換テーブル１１３は、記憶部１１０に格納される。変換テーブル１１３は、プロセスＩＤ、変換元ＣＰＵ番号および変換先ＣＰＵ番号の項目を含む。
【０１０２】
プロセスＩＤの項目には、アプリケーション１４０のプロセスのプロセスＩＤが登録される。変換元ＣＰＵ番号の項目には、アプリケーション１４０により指定されたＣＰＵ番号が登録される。変換先ＣＰＵ番号の項目には、変換元ＣＰＵ番号に対する変換先のＣＰＵ番号が登録される。
【０１０３】
例えば、変換テーブル１１３には、プロセスＩＤが“１０２０３”、変換元ＣＰＵ番号が“０，１”、変換先ＣＰＵ番号が“２，３”という情報が登録されている。これは、プロセスＩＤ“１０２０３”のプロセスに対応するアプリケーション１４０により指定された変換元ＣＰＵ番号が“０，１”であることを示す。また、変換先ＣＰＵ番号が“２，３”であることを示す。すなわち、プロセスＩＤ“１０２０３”に対して、変換先ＣＰＵ番号“２，３”に対応するＣＰＵを割り当てることを示す。変換テーブル１１３にプロセスＩＤを含めることで、サーバ１００ｂ上で実行されるアプリケーションが複数存在する場合でも、ＯＳカーネル１２０は、ＣＰＵ番号の変換対象とするアプリケーションを適切に識別することができる。
【０１０４】
次に、サーバ１００ｂによるアプリ起動時の処理手順を説明する。
図１５は、第４の実施の形態のアプリ起動例を示すフローチャートである。以下、図１５に示す処理をステップ番号に沿って説明する。
【０１０５】
（Ｓ５１）スケジューラ１６０は、アプリ起動時にＣＰＵ情報を取得する。例えば、第３の実施の形態と同様に、サーバ１００ｂは、アプリケーション１４０を起動する際、次のような起動コマンドを用いてアプリケーション１４０を起動することができる。
【０１０６】
“＃ｓｅｔ−ｃｐｕ−ｒｕｎ  −ｃｐｕ  ＜ｃｐｕ名リスト＞  コマンド”
スケジューラ１６０は、上記の起動コマンドにより入力された指定ＣＰＵ番号のリストを取得する。
【０１０７】
（Ｓ５２）スケジューラ１６０は、アプリケーション１４０のプロセスＩＤに対して、ステップＳ５１で取得したＣＰＵ情報（すなわち、指定ＣＰＵ番号のリスト）を記録する。例えば、スケジューラ１６０は、アプリケーション１４０のプロセスＩＤ“１０２０３”に対して、指定ＣＰＵ番号“０，１”を、記憶部１１０に記憶されたプロセステーブル１１２に登録する。なお、ＯＳカーネル１２０は、アプリケーション１４０の起動後、内部論理にしたがってアプリケーション１４０に割り当てるＣＰＵの設定を行う。
【０１０８】
（Ｓ５３）スケジューラ１６０は、アプリケーション１４０について、ＯＳカーネル１２０内に変換テーブル１１３を作成する。具体的には、スケジューラ１６０は、変換テーブル１１３を作成し、ＯＳカーネル１２０およびスケジューラ１６０からアクセス可能な記憶部１１０に登録する。例えば、スケジューラ１６０は、変換テーブル１１３における変換元ＣＰＵ番号の設定値を、プロセステーブル１１２の該当のプロセスＩＤに対応する指定ＣＰＵ番号とする。また、スケジューラ１６０は、変換テーブル１１３における変換先ＣＰＵ番号の初期設定値を、ステップＳ５２でＯＳカーネル１２０によりアプリケーション１４０に割り当てられたＣＰＵのＣＰＵ番号とすることが考えられる。
【０１０９】
（Ｓ５４）スケジューラ１６０は、図１１および図１２の手順により、アプリケーション１４０に割り当てるＣＰＵ番号の再設定を行う（ＣＰＵ再設定）。ただし、スケジューラ１６０は、再設定の結果に応じて、ステップＳ５３で作成した変換テーブル１１３の変換先ＣＰＵ番号のエントリを更新する。ＯＳカーネル１２０は、変換テーブル１１３に基づいて、アプリケーション１４０に対するＣＰＵの割り当てを変更する。
【０１１０】
なお、第３の実施の形態と同様に、スケジューラ１６０は、当該ＣＰＵ再設定を、所定の周期で繰り返し実行する。
このように、スケジューラ１６０を用いて、アプリケーション１４０に対するＣＰＵの割り当てを動的に変更することもできる。このとき、第３の実施の形態と同様に、スケジューラ１６０は、同一ノード上にあるＣＰＵを優先してアプリケーション１４０に割り当てるように変換先のＣＰＵ番号を決定する。これにより、ＮＵＭＡを意識して作成されたアプリケーション１４０の処理性能を適切に発揮して、アプリケーション１４０を動作させることができる。
【０１１１】
また、スケジューラ１６０は、ノード単位の負荷に応じて、負荷が最小のノードを、アプリケーション１４０に割り当てるＣＰＵの抽出対象とすることで、特定のノードに処理負荷が偏ることを防げる。更に、スケジューラ１６０は、同一ノード内において、負荷の低い方から順に、アプリケーション１４０により要求された数のＣＰＵを選択することで、ノード内のＣＰＵの負荷の平準化も図れる。これにより、サーバ１００ｂにおけるリソース利用の効率化を図れる。その結果、サーバ１００ｂで実行される複数のアプリケーションの処理を高速化できる。更に、ユーザに対してアプリケーション１４０の変更作業を強いずに済み、ユーザの作業の負担を軽減できる。
【０１１２】
［第５の実施の形態］
以下、第５の実施の形態を説明する。前述の第２〜第４の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【０１１３】
第２〜第４の実施の形態で例示した機能を、仮想マシンに適用することもできる。そこで、第５の実施の形態では、一例として、スケジューラ１６０の機能を仮想マシンに組み込む例を説明する。
【０１１４】
ここで、第５の実施の形態では、サーバ１００ｂに代えて、サーバ１００ｃを用いる。サーバ１００ｃのハードウェアは、図２で例示した第２の実施の形態のサーバ１００と同様である。このため、サーバ１００ｃのハードウェアを、サーバ１００と同様の符号・名称を用いて指し示す。
【０１１５】
サーバ１００ｃは、１以上の仮想マシンを実行可能である。例えば、サーバ１００ｃは、ハイパーバイザと呼ばれるソフトウェアにより、サーバ１００ｃが有するＣＰＵおよびＲＡＭなどのリソースを、仮想マシンに割り当てる。例えば、ハイパーバイザは、ＣＰＵのリソースを時間軸上のタイムスロットで区切って、仮想マシンに割り当てる。仮想マシンに割り当てられるＣＰＵのリソースの一単位を仮想ＣＰＵ（ｖＣＰＵ：virtual CPU）と呼ぶことがある。仮想ＣＰＵも、仮想ＣＰＵのＣＰＵ番号により識別される。また、ハイパーバイザは、ＲＡＭの記憶領域の一部を仮想マシンに割り当てる。
【０１１６】
図１６は、第５の実施の形態のソフトウェア例を示す図である。サーバ１００ｃは、仮想マシン１７０を有する。仮想マシン１７０は、サーバ１００ｃ上で動作する仮想マシンである。仮想マシン１７０は、記憶部１７１、ＯＳカーネル１７２、アプリケーション１７３およびスケジューラ１７４を有する。
【０１１７】
記憶部１７１は、ＲＡＭ１ｍ，２ｍまたはＨＤＤ１０３において、仮想マシン１７０用に確保された記憶領域として実現される。ＯＳカーネル１７２、アプリケーション１７３およびスケジューラ１７４は、ＲＡＭ１ｍ，２ｍに格納されたプログラムを、仮想マシン１７０に割り当てられた仮想ＣＰＵが実行することで実現される。
【０１１８】
記憶部１７１は、プロセステーブル１７１ａおよび変換テーブル１７１ｂを有する。プロセステーブル１７１ａは、第４の実施の形態のプロセステーブル１１２に相当する。変換テーブル１７１ｂは、第４の実施の形態の変換テーブル１１３に相当する。ただし、プロセステーブル１７１ａおよび変換テーブル１７１ｂに登録されるＣＰＵ番号は、仮想ＣＰＵのＣＰＵ番号である。
【０１１９】
ＯＳカーネル１７２は、仮想マシン１７０のＯＳのカーネルである。ＯＳカーネル１７２は、仮想マシン１７０上で実行されるアプリケーション１７３に対して仮想ＣＰＵを割り当てる。ＯＳカーネル１７２は、記憶部１７１に記憶された変換テーブル１７１ｂに基づいて、アプリケーション１７３に対する仮想ＣＰＵの割り当てを変更する。
【０１２０】
アプリケーション１７３は、ユーザの業務に関する処理を行うソフトウェアである。アプリケーション１７３は、アプリケーション１４０と同様に、実行に用いるＣＰＵ番号が予め定義されている。
【０１２１】
スケジューラ１７４は、アプリケーション１７３のプロセスに対して、ＣＰＵ番号の再設定を行う。例えば、スケジューラ１７４は、各仮想ＣＰＵのノード上の配置および各仮想ＣＰＵの利用状況に基づいて、アプリケーション１４０に割り当てるＣＰＵのＣＰＵ番号を決定する。ここで、例えば、スケジューラ１７４は、共通のノードに属する複数のＣＰＵに対応する複数の仮想ＣＰＵを同一のノードに属する仮想ＣＰＵとして扱うことができる。スケジューラ１７４は、決定したＣＰＵ番号を、プロセスＩＤおよび変換元ＣＰＵ番号（アプリケーション１７３により指定されたＣＰＵ番号）に対応付けて、変換テーブル１７１ｂに登録する。
【０１２２】
また、スケジューラ１７４は、仮想ＣＰＵの構成情報、各アプリケーションの現在の仮想ＣＰＵ割り当て状況、および、仮想マシン１７０における仮想ＣＰＵおよびＲＡＭの負荷に関する情報を収集し、記憶部１７１、または、他の記憶部に格納する。ここで、仮想ＣＰＵの構成情報は、どの仮想ＣＰＵがどのノードに属しているかを示す情報である。
【０１２３】
ここで、スケジューラ１７４は、第４の実施の形態で例示したスケジューラ１６０と同様の方法で、アプリケーション１７３に割り当てる仮想ＣＰＵのＣＰＵ番号を決定することができる。例えば、スケジューラ１６０が実行する手順（図１５および図１１，図１２に相当）において説明した「ＣＰＵ」（物理ＣＰＵ）を、仮想マシン１７０に割り当てられた「仮想ＣＰＵ」と読み替えることができる。そして、スケジューラ１６０と同様の手順を、スケジューラ１７４により実行する。
【０１２４】
図１７は、第５の実施の形態のＣＰＵ番号の変換例を示す図である。まず、アプリ指定のＣＰＵ番号が存在しない場合を考える（図１７（Ａ））。例えば、仮想マシン１７０に対する仮想ＣＰＵ群Ｐ１１は、８つの仮想ＣＰＵを含むとする。各仮想ＣＰＵのＣＰＵ番号は“０”〜“７”である。このとき、アプリケーション１７３が、ＣＰＵ番号“８，９，１０，１１”を指定して起動したとする。ところが、仮想ＣＰＵ群Ｐ１１には、ＣＰＵ番号“８，９，１０，１１”の仮想ＣＰＵは含まれていない。
【０１２５】
そこで、スケジューラ１７４は、アプリケーション１７３のプロセスＩＤに対して、変換元ＣＰＵ番号“８，９，１０，１１”および変換先ＣＰＵ番号“０，１，２，３”を変換テーブル１７１ｂに登録する。ＯＳカーネル１７２は、変換テーブル１７１ｂに基づいて、アプリケーション１７３に対してＣＰＵ番号“０，１，２，３”に対応する仮想ＣＰＵを割り当てることができる。
【０１２６】
次に、アプリ指定のＣＰＵ番号が競合する場合を考える（図１７（Ｂ））。例えば、仮想マシン１７０上で、アプリケーション１７３ａ，１７３ｂが実行されている。
アプリケーション１７３ａは、ＣＰＵ番号“０，１”を指定して動作するよう予め定義されている。また、アプリケーション１７３ｂも、ＣＰＵ番号“０，１”を指定して動作するよう予め定義されている。すなわち、アプリケーション１７３ａ，１７３ｂが指定するＣＰＵ番号は何れも“０，１”で競合している。
【０１２７】
この場合、スケジューラ１７４は、例えば、アプリケーション１７３ａから要求されたＣＰＵ番号“０，１”をそのままＯＳカーネル１７２に通知する。ＯＳカーネル１７２は、スケジューラ１７４からの通知に応じて、仮想ＣＰＵ群Ｐ１１に含まれる仮想ＣＰＵのうち、ＣＰＵ番号“０，１”の仮想ＣＰＵを、アプリケーション１７３ａに割り当てる。
【０１２８】
一方、スケジューラ１７４は、例えば、アプリケーション１７３ｂから要求されたＣＰＵ番号“０，１”を、空いているＣＰＵ番号“２，３”に変換するようＯＳカーネル１７２に通知する。具体的には、スケジューラ１７４は、アプリケーション１７３ｂのプロセスＩＤと、変換元ＣＰＵ番号“０，１”と、変換先ＣＰＵ番号“２，３”との対応関係を、変換テーブル１７１ｂに登録する。ＯＳカーネル１７２は、変換テーブル１７１ｂに基づいて、アプリケーション１７３ｂに対してＣＰＵ番号“２，３”に対応する仮想ＣＰＵを割り当てることができる。
【０１２９】
図１８は、仮想マシンにおけるＣＰＵ番号の割り当ての比較例を示す図である。図１８では、スケジューラ１７４の機能を有していないサーバ４００上の仮想マシン４１０を例示して、ＣＰＵ番号の割り当ての比較例を説明する。サーバ４００は、仮想マシン４１０に割り当てる仮想ＣＰＵ群Ｐ２１を有する。仮想ＣＰＵ群Ｐ２１には８つの仮想ＣＰＵが属しており、８つの仮想ＣＰＵのＣＰＵ番号は“０”〜“７”である。
【０１３０】
図１８（Ａ）は、アプリケーションにより要求されるＣＰＵ番号に対応する仮想ＣＰＵが仮想ＣＰＵ群Ｐ２１に含まれていない場合を例示している。例えば、アプリケーションはＣＰＵ番号“８”〜“１１”を要求する。しかし、仮想ＣＰＵ群Ｐ２１は、ＣＰＵ番号“８”〜“１１”に対応する仮想ＣＰＵを含まない。仮想マシン４１０は、仮想ＣＰＵのＣＰＵ番号を変換する機能を有していない。したがって、ＯＳカーネルは、当該アプリケーションに対して、要求されたＣＰＵ番号に対応する仮想ＣＰＵを適切に割り当てることができない。すなわち、要求されるＣＰＵ番号と提供するＣＰＵ番号とが不整合となり、アプリケーションの動作に影響が及ぶおそれがある。
【０１３１】
図１８（Ｂ）は、２つのアプリケーションにより要求されるＣＰＵ番号が競合する場合を例示している。例えば、仮想マシン４１０で動作する２つのアプリケーションは、何れも、ＣＰＵ番号“０，１”を要求する。仮想マシン４１０は、仮想ＣＰＵのＣＰＵ番号を変換する機能を有していない。したがって、ＯＳカーネルは、２つのアプリケーションに対して、要求されたＣＰＵ番号に対応する仮想ＣＰＵを割り当てる。しかし、この場合、ＣＰＵ番号“０，１”の仮想ＣＰＵが両アプリケーションに重複して割り当てられることになる。このため、当該仮想ＣＰＵの負荷が増大して、両アプリケーションの動作に影響が及ぶおそれがある。
【０１３２】
一方、図１７で例示したように、サーバ１００ｃでは、スケジューラ１７４によりアプリケーションから要求されるＣＰＵ番号の変換テーブル１７１ｂを作成し、ＯＳカーネル１７２により変換テーブル１７１ｂを基にＣＰＵ番号の変換を行う。このため、ＯＳカーネル１７２は、仮想マシン１７０が有していないＣＰＵ番号に対応する仮想ＣＰＵをアプリケーションに提供することができる。また、ＯＳカーネル１７２は、仮想ＣＰＵの負荷が偏らないように、複数のアプリケーションに対して仮想ＣＰＵを割り当てることができる。これにより、各アプリケーションを適切に動作させることができる。更に、ユーザに対してアプリケーションの変更作業を強いずに済み、ユーザの作業の負担を軽減できる。
【０１３３】
なお、前述の第２の実施の形態の手法は、第３〜第５の実施の形態と組み合わせて利用されてもよい。例えば、サーバ１００に、スケジューラ１５０またはスケジューラ１６０の機能を追加してもよい。そうすると、サーバ１００は、アプリ起動時の最初の段階では、変換テーブル１１１に基づいてアプリケーション１４０に対する割り当てを行う。そして、サーバ１００は、その後の運用に応じて、スケジューラ１５０またはスケジューラ１６０の機能により、アプリケーション１４０に割り当てるＣＰＵのＣＰＵ番号を変更することもできる。
【０１３４】
また、第１の実施の形態の情報処理は、演算部１ｂにプログラムを実行させることで実現できる。また、第２〜第５の実施の形態の情報処理は、サーバ１００，１００ａ，１００ｂ，１００ｃが備えるＣＰＵにプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体２３に記録できる。
【０１３５】
例えば、プログラムを記録した記録媒体２３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体２３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１ｍ，２ｍやＨＤＤ１０２などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０１３６】
１０  情報処理装置
１１，１２  ノード
１１ａ，１１ｂ，１１ｃ，１１ｄ，１２ａ，１２ｂ，１２ｃ，１２ｄ  プロセッサ
１１ｅ，１２ｅ  メモリ
１５  ＯＳ
１６  変換部
１７  アプリケーション
Ｄ１  設定情報
Ｄ２  変換情報
【図１】
2018028769.tif 000003
【図２】
2018028769.tif 000004
【図３】
2018028769.tif 000005
【図４】
2018028769.tif 000006
【図５】
2018028769.tif 000007
【図６】
2018028769.tif 000008
【図７】
2018028769.tif 000009
【図８】
2018028769.tif 000010
【図９】
2018028769.tif 000011
【図１０】
2018028769.tif 000012
【図１１】
2018028769.tif 000013
【図１２】
2018028769.tif 000014
【図１３】
2018028769.tif 000015
【図１４】
2018028769.tif 000016
【図１５】
2018028769.tif 000017
【図１６】
2018028769.tif 000018
【図１７】
2018028769.tif 000019
【図１８】
2018028769.tif 000020