(57)【要約】【課題】ソフトウェアモジュール毎にＣＰＵ使用率を制御する。【解決手段】ＣＰＵ使用率制御装置１であって、実行環境レイヤにおいてソフトウェアモジュールを実行するための第１スレッドが生成される毎に、ＯＳレイヤの第２スレッドを生成して当該第１スレッドに１対１で対応付ける対応付け手段１２と、ソフトウェアモジュール毎に第２スレッドをまとめたグループを管理するグループ管理手段１４と、前記グループの中から制御対象サービスとそのＣＰＵ使用率とを受け付け、前記ＣＰＵ使用率と当該サービスの利用数とを用いて、制御対象グループのＣＰＵ使用率の設定値を算出する受付手段１５と、制御対象グループのＣＰＵ使用率の設定値に基づいて制御対象グループに属する第２スレッドのＣＰＵ使用時間を算出する算出手段１４と、ＣＰＵ使用時間を用いて制御対象グループのＣＰＵ使用率を制御する制御手段１１と、を備える。【選択図】図１
2014235580.tif 000002
【特許請求の範囲】
【請求項１】
単一プロセスの実行環境で動作するソフトウェアモジュールのＣＰＵ使用率を制御するＣＰＵ使用率制御装置であって、
前記実行環境レイヤにおいて、ソフトウェアモジュールを実行するための第１スレッドが生成される毎に、ＯＳレイヤの第２スレッドを生成して当該第１スレッドに１対１で対応付ける対応付け手段と、
ソフトウェアモジュール毎に第２スレッドをまとめたグループを管理するグループ管理手段と、
前記グループの中から制御対象グループにおける制御対象サービスと、当該制御対象サービスに対するＣＰＵ使用率とを受け付け、前記制御対象サービスのＣＰＵ使用率と前記制御対象サービスの利用数とを用いて、前記制御対象グループのＣＰＵ使用率の設定値を算出する受付手段と、
前記制御対象グループのＣＰＵ使用率の設定値に基づいて、前記制御対象グループに属する第２スレッドのＣＰＵ使用時間を算出する算出手段と、
前記ＣＰＵ使用時間を用いて、前記制御対象グループのＣＰＵ使用率を制御する制御手段と、を備えること、
を特徴とするＣＰＵ使用率制御装置。
【請求項２】
請求項１記載のＣＰＵ使用率制御装置であって、
前記受付手段は、前記制御対象サービスのＣＰＵ使用率と、当該サービスを利用するグループの数である利用数とを乗算して、前記制御対象グループのＣＰＵ使用率の設定値を算出すること、
を特徴とするＣＰＵ使用率制御装置。
【請求項３】
請求項１または請求項２記載のＣＰＵ使用率制御装置であって、
前記算出手段は、前記制御対象グループのＣＰＵ使用時間と、前記実行環境以外のプロセスおよび非制御対象グループに設定されたＣＰＵ使用時間の合計の比が、前記制御対象グループのＣＰＵ使用率の設定値と、前記実行環境以外のプロセスおよび非制御対象グループが利用可能なＣＰＵ使用率の比と同じになるように、前記制御対象グループに属する第２スレッドのＣＰＵ使用時間を算出すること
を特徴とするＣＰＵ使用率制御装置。
【請求項４】
請求項１から３のいずれか一項に記載のＣＰＵ使用率制御装置であって、
前記実行環境は、ＪａｖａＶｉｒｔｕａｌＭａｃｈｉｎｅであって、
前記ソフトウェアモジュールは、ＯＳＧｉバンドルであること
を特徴とするＣＰＵ使用率制御装置。
【請求項５】
コンピュータが行う、単一プロセスの実行環境で動作するソフトウェアモジュールのＣＰＵ使用率を制御するＣＰＵ使用率制御方法であって、
前記実行環境レイヤにおいて、ソフトウェアモジュールを実行するための第１スレッドが生成される毎に、ＯＳレイヤの第２スレッドを生成して当該第１スレッドに１対１で対応付ける対応付けステップと、
ソフトウェアモジュール毎に第２スレッドをまとめたグループを管理するグループ管理ステップと、
前記グループの中から制御対象グループにおける制御対象サービスと、当該制御対象サービスに対するＣＰＵ使用率とを受け付け、前記制御対象サービスのＣＰＵ使用率と前記制御対象サービスの利用数とを用いて、前記制御対象グループのＣＰＵ使用率の設定値を算出する受付ステップと、
前記制御対象グループのＣＰＵ使用率の設定値に基づいて、前記制御対象グループに属する第２スレッドのＣＰＵ使用時間を算出する算出ステップと、
前記ＣＰＵ使用時間を用いて、前記制御対象グループのＣＰＵ使用率を制御する制御ステップと、を行うこと
を特徴とするＣＰＵ使用率制御方法。
【請求項６】
請求項５記載のＣＰＵ使用率制御方法であって、
前記受付ステップは、前記制御対象サービスのＣＰＵ使用率と、当該サービスを利用するグループの数である利用数とを乗算して、前記制御対象グループのＣＰＵ使用率の設定値を算出すること
を特徴とするＣＰＵ使用率制御方法。
【請求項７】
請求項５または請求項６記載のＣＰＵ使用率制御方法であって、
前記算出ステップは、前記制御対象グループのＣＰＵ使用時間と、前記実行環境以外のプロセスおよび非制御対象グループに設定されたＣＰＵ使用時間の合計の比が、前記制御対象グループのＣＰＵ使用率の設定値と、前記実行環境以外のプロセスおよび非制御対象グループが利用可能なＣＰＵ使用率の比と同じになるように、前記制御対象グループに属する第２スレッドのＣＰＵ使用時間を算出すること
を特徴とするＣＰＵ使用率制御方法。
【請求項８】
請求項１から４のいずれか一項に記載のＣＰＵ使用率制御装置としてコンピュータを機能させるためのＣＰＵ使用率制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア実行環境でのソフトウェアモジュールに対するＣＰＵ使用率を制御するＣＰＵ使用率制御装置、ＣＰＵ使用率制御方法、およびＣＰＵ使用率制御プログラムに関する。
【背景技術】
【０００２】
ソフトウェア実行環境の一つとしてＪａｖａ（登録商標）ＶＭが存在し、ＪａｖａＶＭ上で動作するソフトウェアモジュールとしては、ＯＳＧｉバンドルがある。
【０００３】
ＪａｖａＶＭ（ＪａｖａＶｉｒｔｕａｌＭａｃｈｉｎｅ）は、ＯＳから見て単一のプロセスで動作し、そのＪａｖａＶＭ上で動作するソフトウェアモジュールは、複数のＪａｖａスレッドを生成可能であり、ＪａｖａＶＭによって並列的に複数の処理を実行することができる。アプリケーションによっては、ある一部のＪａｖａスレッドを優先的に処理させたい場合がある。Ｊａｖａ ＡＰＩ仕様では、Ｊａｖａスレッドの優先順位の変更方法が定められている（非特許文献１）。
【０００４】
また、ＯＳＧｉ（Ｏｐｅｎ Ｓｅｒｖｉｃｅｓ Ｇａｔｅｗａｙ ｉｎｉｔｉａｔｉｖｅ）は、あるソフトウェアを複数のＪａｖａソフトウェアモジュールで構成するための技術である（非特許文献２）。１つのＪａｖａＶＭ上で、ＯＳＧｉＦＷ（ＯＳＧｉ  Ｆｒｅａｍｗｏｒｋ）を動作させ、当該ＯＳＧｉＦＷ上で、複数のＯＳＧｉバンドル（以下、バンドル）を動作させることができる。このバンドルは、ＯＳＧｉＦＷ動作中に、インストール・アンインストール、スタート・ストップを動的に実行することができる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】“クラス Thread、java.lang.Thread.setPriority(int)”、Java 2  Platform Std. Ed. v1.4.0、＜URL：http://docs.oracle.com/javase/jp/1.4/api/java/lang/Thread.html#setPriority(int)＞
【非特許文献２】“OSGi Specifications”、OSGi Alliance、＜URL：http://www.osgi.org/Specifications/HomePage＞
【発明の概要】
【発明が解決しようとする課題】
【０００６】
エンドユーザもしくはソフトウェア実行環境の運用者は、特定の重要なバンドルを、確実に動作させたい場合がある。例えば、ＣＰＵ負荷の高いゲーム動作時にも緊急地震速報の計算を１秒以内に完了させたいなど、他バンドルの動作負荷状況に関わらず、あるバンドルの動作を保証したい場合がある。そのために、バンドル単位でＣＰＵ使用率の制御を行いたいというニーズがあるが、以下の課題がある。
【０００７】
（１）非特許文献１のJavaスレッド優先度変更は、実際の動作が規定されていない。
【０００８】
（２）非特許文献１のJavaスレッド優先度変更は、バンドル自身が行うため、バンドルの作成者であるエンドユーザの思惑と、ソフトウェア実行環境の運用者の思惑とが異なる場合がある。すなわち、その優先度変更を外部からコントロールできず、外部コントロールするにはバンドルをそれぞれに改修が必要であるため、とても対応しきれるものではない。
【０００９】
（３）非特許文献１のＪａｖａスレッド優先度変更は、全体を総合的に俯瞰し、優先度設定を制限する仕組みが定められていない。そのため、例えば全てのＪａｖａスレッドに最高の優先度を設定した場合、実質的に何の意味もなさない場合がある。
【００１０】
（４）ソフトウェア実行環境のＪａｖａスレッドがバンドルを動作させる場合もあり、また、１つのバンドルが複数のＪａｖａスレッドを動作させる場合もある。すなわち、必ずしも１つのバンドルに対し１つのＪａｖａスレッドが存在するわけではなく、Ｊａｖａスレッド単位での優先度設定では、バンドル単位での設定とはならない。
【００１１】
本発明は、上記の事情に鑑みなされたもので、本発明の目的は、ソフトウェアモジュール毎にＣＰＵ使用率を制御するＣＰＵ使用率制御装置、ＣＰＵ使用率制御方法、およびＣＰＵ使用率制御プログラムを提供することにある。
【課題を解決するための手段】
【００１２】
上記の課題を解決するため、第１の本発明は、単一プロセスの実行環境で動作するソフトウェアモジュールのＣＰＵ使用率を制御するＣＰＵ使用率制御装置であって、前記実行環境レイヤにおいて、ソフトウェアモジュールを実行するための第１スレッドが生成される毎に、ＯＳレイヤの第２スレッドを生成して当該第１スレッドに１対１で対応付ける対応付け手段と、ソフトウェアモジュール毎に第２スレッドをまとめたグループを管理するグループ管理手段と、前記グループの中から制御対象グループにおける制御対象サービスと、当該制御対象サービスに対するＣＰＵ使用率とを受け付け、前記制御対象サービスのＣＰＵ使用率と前記制御対象サービスの利用数とを用いて、前記制御対象グループのＣＰＵ使用率の設定値を算出する受付手段と、前記制御対象グループのＣＰＵ使用率の設定値に基づいて、前記制御対象グループに属する第２スレッドのＣＰＵ使用時間を算出する算出手段と、前記ＣＰＵ使用時間を用いて、前記制御対象グループのＣＰＵ使用率を制御する制御手段と、を備える。
【００１３】
上記ＣＰＵ使用率制御装置において、前記受付手段は、前記制御対象サービスのＣＰＵ使用率と、当該サービスを利用するグループの数である利用数とを乗算して、前記制御対象グループのＣＰＵ使用率の設定値を算出する。
【００１４】
上記ＣＰＵ使用率制御装置において、前記算出手段は、前記制御対象グループのＣＰＵ使用時間と、前記実行環境以外のプロセスおよび非制御対象グループに設定されたＣＰＵ使用時間の合計の比が、前記制御対象グループのＣＰＵ使用率の設定値と、前記実行環境以外のプロセスおよび非制御対象グループが利用可能なＣＰＵ使用率の比と同じになるように、前記制御対象グループに属する第２スレッドのＣＰＵ使用時間を算出する。
【００１５】
上記ＣＰＵ使用率制御装置において、前記実行環境は、ＪａｖａＶｉｒｔｕａｌＭａｃｈｉｎｅであって、前記ソフトウェアモジュールは、ＯＳＧｉバンドルである。
【００１６】
第２の本発明は、コンピュータが行う、単一プロセスの実行環境で動作するソフトウェアモジュールのＣＰＵ使用率を制御するＣＰＵ使用率制御方法であって、前記実行環境レイヤにおいて、ソフトウェアモジュールを実行するための第１スレッドが生成される毎に、ＯＳレイヤの第２スレッドを生成して当該第１スレッドに１対１で対応付ける対応付けステップと、ソフトウェアモジュール毎に第２スレッドをまとめたグループを管理するグループ管理ステップと、前記グループの中から制御対象グループにおける制御対象サービスと、当該制御対象サービスに対するＣＰＵ使用率とを受け付け、前記制御対象サービスのＣＰＵ使用率と前記制御対象サービスの利用数とを用いて、前記制御対象グループのＣＰＵ使用率の設定値を算出する受付ステップと、前記制御対象グループのＣＰＵ使用率の設定値に基づいて、前記制御対象グループに属する第２スレッドのＣＰＵ使用時間を算出する算出ステップと、前記ＣＰＵ使用時間を用いて、前記制御対象グループのＣＰＵ使用率を制御する制御ステップと、を行う。
【００１７】
上記ＣＰＵ使用率制御方法において、前記受付ステップは、前記制御対象サービスのＣＰＵ使用率と、当該サービスを利用するグループの数である利用数とを乗算して、前記制御対象グループのＣＰＵ使用率の設定値を算出する。
【００１８】
上記ＣＰＵ使用率制御方法において、前記算出ステップは、前記制御対象グループのＣＰＵ使用時間と、前記実行環境以外のプロセスおよび非制御対象グループに設定されたＣＰＵ使用時間の合計の比が、前記制御対象グループのＣＰＵ使用率の設定値と、前記実行環境以外のプロセスおよび非制御対象グループが利用可能なＣＰＵ使用率の比と同じになるように、前記制御対象グループに属する第２スレッドのＣＰＵ使用時間を算出する。
【００１９】
第３の本発明は、上記ＣＰＵ使用率制御装置としてコンピュータを機能させるためのＣＰＵ使用率制御プログラムである。
【発明の効果】
【００２０】
本発明によれば、ソフトウェアモジュール毎にＣＰＵ使用率を制御するＣＰＵ使用率制御装置、ＣＰＵ使用率制御方法、およびＣＰＵ使用率制御プログラムを提供することができる。
【図面の簡単な説明】
【００２１】
【図１】本発明の一実施の形態におけるＣＰＵ使用率制御装置の構成図である。
【図２】グループ情報の一例を示す図である。
【図３】ＣＰＵ使用率の制御を示すシーケンス図である。
【図４】設定画面の一例を示す図である。
【図５】バンドルグループ管理部の保持情報（初期状態）を示す図である。
【図６】バンドルグループ管理部の保持情報（ＯＳＧｉ起動態）を示す図である。
【図７】バンドルグループ管理部の保持情報（ＣＰＵリソース制御開始状態）を示す図である。
【図８】バンドルグループ管理部の保持情報（ＣＰＵリソース制御終了状態）を示す図である。
【図９】本実施形態を説明するための説明図である。
【発明を実施するための形態】
【００２２】
以下、本発明の実施の形態を、図面を用いて説明する。
【００２３】
本実施形態では、あるＯＳ上で１つのプロセスで動作するソフトウェア実行環境と、そのソフトウェア実行環境上で動作する複数のソフトウェアモジュール（ソフトウェアプログラム）について説明する。具体例として本実施形態では、ソフトウェア実行環境としてＪａｖａＶＭを、ソフトウェアモジュールとしてＯＳＧｉバンドルを例として以下説明するが、本発明はこれに限定されるものではなく、同様の仕組みを持つ他のソフトウェア実行環境およびソフトウェアジュールについても適用可能である。
【００２４】
また、本実施形態の前提として、ＣＰＵは、ＯＳによってスケジューリングされており、そのスケジューリングの単位としては、プロセス、ＬＷＰ（Light Weight Process)などがある。ＬＷＰは、ＯＳレイヤにおけるスレッドである。
【００２５】
ソフトウェアモジュールの処理を時間的に並列に動作させるための仕組みとして、ＯＳレイヤにはプロセスとＬＷＰ（スレッド）が存在する。ＪａｖａＶＭは、ＯＳから見ると１つのプロセスとして動作する。一方、ＪａｖａＶＭは、ＪａｖａＶＭ内で処理を時間的に並列に動作させる仕組みとしてＪａｖａスレッドを用意している。ＬＷＰは、自身に対応するＪａｖａスレッドを実行するが、ＪａｖａスレッドとＬＷＰとは、動作するレイヤが異なることからそれぞれ独立した存在である。
【００２６】
図１は、本発明の実施形態に係るＣＰＵ使用率制御装置１の機能構成を示すブロック図である。図示するＣＰＵ使用率制御装置１は、ＬＷＰ単位ＣＰＵ制御部１１と、Ｊａｖａスレッド・ＬＷＰ対応部１２と、バンドルスレッド化部１３と、スレッド群グループ化部１４と、ＯＳＧｉサービス登録利用監視バンドル１５とを備える。
【００２７】
［ＬＷＰ単位ＣＰＵ制御部１１］
ＬＷＰ単位ＣＰＵ制御部１１（制御手段）は、ＯＳレイヤで動作し、ＬＷＰ単位もしくはＬＷＰのグループ単位で、ＣＰＵ使用率を制御する。具体的には、各ＬＷＰまたはＬＷＰの各グループに対してのＣＰＵ使用時間の値（ＣＰＵスケジューリング比率）を保持し、その比率に従ってＣＰＵをスケジューリングすることで、ＣＰＵ使用率を制御する。
【００２８】
なお、ＣＰＵを制御する際には、例えばＬｉｎｕｘ（登録商標）のｃｇｒｏｕｐｓを利用することができる。ｃｇｒｏｕｐｓは、プロセス、ＬＷＰ単位またはＬＷＰのグループ単位で、ＣＰＵ使用率を制御するＬｉｎｕｘのカーネル機能である。ｃｇｒｏｕｐｓについては、例えば、http://ja.wikipedia.org/wiki/Cgroupsに記載されている。
【００２９】
［Ｊａｖａスレッド・ＬＷＰ対応部１２］
Ｊａｖａスレッド・ＬＷＰ対応部１２（対応付け手段）は、ＪａｖａＶＭレイヤで動作し、１つのＪａｖａスレッドを生成する毎に、それを実行するための１つのＬＷＰを生成し、ＪａｖａＶＭ上のＪａｖａスレッドをＯＳ上のＬＷＰに、１：１で対応させる。
【００３０】
［バンドルスレッド化部１３］
バンドルスレッド化部１３は、ＯＳＧｉＦＷで動作し、ＯＳＧｉＦＷによって生成されたＪａｖａスレッドが、あるバンドルの処理を呼び出す（バンドルを起動等する）際に、そのバンドルを実行するためのＪａｖａスレッドを新規に生成し、そのバンドルをＪａｖａスレッドとして起動する。バンドルの処理を呼び出す処理としては、例えば、バンドルのスタートやストップ等のＯＳＧｉＦＷからバンドルへのイベンティングなどが該当する。
【００３１】
また、Ｊａｖａスレッド・ＬＷＰ対応部１２によって、生成されたＪａｖａスレッドはＬＷＰと対応付けられるため、バンドルスレッド化部１３は、新規のＪａｖａスレッドを生成すると、同時にそれに対応するＬＷＰのＩＤを、ＯＳから取得することができる。
【００３２】
また、ＯＳＧｉＦＷは、Ｊａｖａスレッドが呼び出そうとしているバンドルのＩＤを取得することができるので、バンドルスレッド化部１３は、呼び出そうとするバンドルのＩＤを取得し、Ｊａｖａスレッド・ＬＷＰ対応部１２によって生成されたＬＷＰのＩＤと紐付けてスレッド群グループ化部１４に引き渡す。
【００３３】
また、バンドルスレッド化部１３は、バンドルが新たにインストールされた場合またはアンインストールされた場合に、それをスレッド群グループ化部１４へ通知する。通知情報には、インストールされたもしくはアンインストールされたこと、そのバンドルのＩＤなどが含まれる。
【００３４】
［スレッド群グループ化部１４］
スレッド群グループ化部１４（グループ管理手段、算出手段）は、ＯＳレイヤで動作し、バンドルスレッド化部１３によってＬＷＰに対応付けられたＪａｖａスレッド群をグループとして束ねて扱い、ＬＷＰ単位ＣＰＵ制御部１１を呼び出す。なお、スレッド群グループ化部１４は、ＯＳレイヤ以外の他のレイヤに実装され、動作することとしてもよい。
【００３５】
具体的には、スレッド群グループ化部１４は、バンドルスレッド化部１３から新たなバンドルのインストール情報が通知されると、その新たにインストールされたバンドルのＩＤ毎に「グループ」を生成し、バンドルスレッド化部１３からＬＷＰのＩＤとバンドルのＩＤとが送られるたび（つまり、Ｊａｖａスレッドが生成されるたび）に、そのＬＷＰのＩＤを該当するバンドルＩＤのグループに所属させ、グループ情報として、図示しない記憶部に記憶する。
【００３６】
図２に、グループ情報の一例を示す。図示するグループ情報には、グループ毎（バンドル毎）に、対応するバンドルのＩＤと、当該グループに含まれるＬＷＰのＩＤと、設定値と、制御値とが対応付けて記憶されている。設定値は、ユーザによりＯＳＧｉサービス登録利用監視バンドル１５に入力される値、または入力された値に基づいて算出される値であって、本実施形態ではＣＰＵ使用率を用いるものとする。なお、設定値は、当該グループに対する動作を保障するための値である。
【００３７】
制御値は、ＬＷＰ単位ＣＰＵ制御部１１へ投入するために、当該グループに設定された値である。制御値は、後述するように、設定値に基づいて算出される。ＬＷＰ単位ＣＰＵ制御部１１に上述したｃｇｒｏｕｐｓを利用する場合には、ｃｐｕ.ｓｈａｒｅｓの値が制御値として設定される。なお、ｃｐｕ.ｓｈａｒｅｓは、ｃｇｒｏｕｐｓにおいて、該当するグループに配分されるＣＰＵ使用時間の整数値（ＣＰＵスケジューリング比率）である。
【００３８】
また、スレッド群グループ化部１４が、ＪａｖａＶＭ以外のプロセスも同時に「グループ」によって管理する。
【００３９】
ここで、スレッド群グループ化部１４が、あるＬＷＰおよびプロセスを、どのグループに所属させるか、について説明する。本実施形態では、以下のルールに基づいて、所属グループを決定するものとする。
【００４０】
（１）ＪａｖａＶＭ以外のプロセスについては、ある１つのグループ（以下、「ルートグループ」）に所属させる。これは新たなプロセスが発生するたびに行う。
【００４１】
（２）バンドルスレッド化部１３から引き渡されたＬＷＰのＩＤについては、それと同時に引き渡されたバンドルのＩＤのグループに所属させる。
【００４２】
（３）いずれかのグループに所属しているＬＷＰが生成したＬＷＰについては、生成元のＬＷＰと同じグループに所属させる。これは、あるＪａｖａスレッドが別のＪａｖａスレッドを生成した場合が該当する。
【００４３】
（４）上記（１）〜（３）以外のＬＷＰは、ルートグループに所属させる。
【００４４】
（５）プロセスおよびＬＷＰが停止または消滅した場合は、所属していたグループから削除する。
【００４５】
また、グループおよびグループ情報は、以下のルールに基づいて生成または消滅させる。
【００４６】
（Ａ）ルートグループは、スレッド群グループ化部１４の起動時に、１つだけ生成する。
【００４７】
（Ｂ）各バンドルのグループについては、バンドルスレッド化部１３からインストールされたという通知があった際に生成する。既に保持しているグループと同じバンドルＩＤの場合には生成しない。
【００４８】
（Ｃ）グループおよびグループ情報については、各バンドルの動作状況およびＯＳＧｉＦＷの動作状況とは関係なく保持し続ける。なお、各グループに属するＬＷＰのＩＤは、対応するバンドルやＯＳＧｉ停止時に削除されるが、それ以外の情報は保持し続ける。
【００４９】
（Ｄ）グループの削除については、以下のいずれかのタイミングで実行する。
【００５０】
（Ｄ−１）ＣＰＵ使用率制御装置１の初期化時に削除する。
【００５１】
（Ｄ−２）バンドルスレッド化部１３からアンインストール情報の通知を受けた直後に、該当するバンドルＩＤのグループを削除する。
【００５２】
（Ｄ−３）バンドルスレッド化部１３からアンインストール情報の通知を受けてから一定期間後に、該当するバンドルＩＤのグループを削除する。例えば１か月後等に削除する。
【００５３】
（Ｄ−４）ＯＳＧｉＦＷの動作が停止時に、ルートグループ以外の全てのグループを削除する。
【００５４】
［ＯＳＧｉサービス登録利用監視バンドル１５］
ＯＳＧｉサービス登録利用監視バンドル１５（受付手段）は、ＯＳＧｉレイヤで動作するＯＳＧｉバンドルであり、ユーザ（オペレータもしくはエンドユーザ）向けの設定用ＧＵＩ（Graphical User Interface）、ＷｅｂＵＩなどを有する。
【００５５】
ＯＳＧｉサービス登録利用監視バンドル１５は、ＧＵＩ生成時にインストール済みのバンドル一覧とその動作状態（動作中・非動作中）、各バンドルがＯＳＧｉＦＷに登録しているＯＳＧｉサービス（Ｊａｖａのインスタンス）などをＯＳＧｉＦＷから取得し、ユーザ端末２に表示する。
【００５６】
ユーザは、あるバンドル（動作状態を問わない）に対して割り当てたいＣＰＵリソースを、ＣＰＵ使用率（％）で指定し設定する。または、ユーザは、あるバンドルの配下のあるＯＳＧｉサービスに対し、そのＯＳＧｉサービスが１つのバンドルから取得される場合に必要なＣＰＵリソースをＣＰＵ使用率（％）で指定し設定する。
【００５７】
また、ＯＳＧｉサービス登録利用監視バンドル１５は、ユーザが設定したＯＳＧｉサービスがそれぞれいくつのバンドルおよびクラスから利用(取得)されているかを監視し、利用数に応じてそのＯＳＧｉサービスを登録しているバンドルに設定するＣＰＵ使用率を算出する。具体的には、ＣＰＵ使用率は、ユーザがＯＳＧｉサービスに設定したＣＰＵ使用率と、利用数との積である。例えば、あるＯＳＧｉサービスのＣＰＵ使用率に２％をユーザが設定した場合、１つのバンドルから利用される場合には２％が、２つのバンドルから利用される場合には４％が、３つのバンドルから利用される場合には６％が、当該ＯＳＧｉサービスが登録されたバンドルのＣＰＵ使用率として算出される。なお、利用数が変化する度に、ＯＳＧｉサービス登録利用監視バンドル１５は再計算する。また、ＯＳＧｉサービスを利用する利用数には、制御対象のバンドルも含まれる。
【００５８】
ＯＳＧｉサービス登録利用監視バンドル１５は、ユーザが設定した「バンドルに対するＣＰＵ使用率」および算出した「（ユーザが設定したOSGiサービスを登録している）バンドルに対するＣＰＵ使用率」を、スレッド群グループ化部１４に出力する。
【００５９】
また、ＯＳＧｉサービス登録利用監視バンドル１５は、設定または算出されたバンドルのＣＰＵ使用率の合計が、事前に定めた閾値を超える場合には、ユーザに警告を発する。例えば、バンドルのＣＰＵ使用率の合計が９９%を超えると、警告メッセージをユーザ端末２に送信する。
【００６０】
以上説明した本実施形態のＣＰＵ使用率制御装置１は、例えば、ＣＰＵと、メモリと、ＨＤＤ等の外部記憶装置などを備えた汎用的なコンピュータシステムを用いることができる。このコンピュータシステムにおいて、ＣＰＵがメモリ上にロードされたＣＰＵ使用率制御装置１用のプログラムを実行することにより、ＣＰＵ使用率制御装置１の各機能が実現される。また、ＣＰＵ使用率制御装置１のプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ−ＲＯＭなどのコンピュータ読取り可能な記録媒体に記憶することも、ネットワークを介して配信することもできる。
【００６１】
次に、本実施形態の動作について説明する。
【００６２】
図３は、本実施形態におけるＣＰＵ使用率制御装置１の動作を示すシーケンス図である。
【００６３】
図３では、ユーザが、ＯＳＧｉサービス登録利用監視バンドル１５から各バンドルのＣＰＵリソース制御設定を変更した際の、各バンドルのＣＰＵリソース制御の流れを以下に示す。
【００６４】
ステップＳ１１：まず、ユーザ端末２は、ユーザの指示により選択されたバンドルと、当該バンドルに割り当てるＣＰＵ使用率とを、ＯＳＧｉサービス登録利用監視バンドル１５に送信する。また、ユーザ端末２は、ユーザの指示により選択されたＯＳＧｉサービスと、そのサービス利用数に応じて必要とするＣＰＵ使用率と（１つのバンドルから利用される場合に必要なＣＰＵ使用率）を、ＯＳＧｉサービス登録利用監視バンドル１５に送信する。
【００６５】
図４は、ＯＳＧｉサービス登録利用監視バンドル１５がユーザ端末２に表示する設定画面の一例である。ユーザは、ユーザ端末２に表示される設定画面を用いて、制御対象とするバンドルもしくはＯＳＧｉサービスの選択と、それらに割り当てるＣＰＵ使用率（％）とを設定する。
【００６６】
「バンドルシンボリックネーム」の列は、バンドル、および当該バンドルが登録しているＯＳＧｉサービスの一覧を表している。
【００６７】
「バンドル状態」の列は、各バンドルの動作状態を表しているが、この列は無くてもよい。バンドル状態には、動作中（ＡＣＴＩＶＥ）、停止中（ＲＥＳＯＬＶＥＤ）、インストール済みだが未動作（ＩＮＳＴＡＬＬＥＤ）などがある。ユーザは、一覧に存在するどの状態のバンドルに対しても設定することができる。
【００６８】
「最低品質保証ＣＰＵ使用率」の列は、動作保証を行いたいバンドルまたはＯＳＧｉサービスに対して設定するＣＰＵ使用率（％）の最低値を投入するテキストボックスである。コンピュータの負荷が大きくなった際にも、最低限、この設定値のＣＰＵ使用率が該当するバンドルまたはＯＳＧｉサービスに与えられることを示す。一方、コンピュータの負荷が小さい場合には、この設定値を超えてＣＰＵを使用する場合もあるし、逆に、設定されたバンドルまたはＯＳＧｉサービスが処理を行っていない際には、他のバンドルまたはＯＳＧｉサービスがこの設定値のＣＰＵを使用する場合もある。
【００６９】
「ＣＰＵリソース制御適用フラグ」の列は、ＣＰＵリソース制御（ＣＰＵ使用率制御）を適用しているか否かを示すものである。「制御開始」および「制御終了」の列は、ラジオボタンで選択可能に表示され、ＣＰＵリソース制御をＯＮもしくはＯＦＦにすることができる。最下段の「合計」の行は、「ＣＰＵリソース制御適用フラグ」がＯＮであるバンドルの「最低品質保証ＣＰＵ使用率」に設定されたＣＰＵ使用率の合計値を表している。
【００７０】
なお、ユーザによるＣＰＵ使用率の設定は、図４に示すような設定画面（ＧＵＩ）を用いる場合だけでなく、バンドル内設定、ＯＳＧｉサービスプロパティへの設定などであってもよい。
【００７１】
ステップＳ１２：ＯＳＧｉサービス登録利用監視バンドル１５は、ステップＳ１１で送信されたユーザの設定情報を受信する。すなわち、ユーザがバンドルに対してＣＰＵ使用率を設定した場合は、当該バンドルのＩＤおよび設定したＣＰＵ使用率を取得する。また、ユーザがＯＳＧｉサービスに対してＣＰＵ使用率を設定した場合は、当該ＯＳＧｉサービスを登録しているバンドルのＩＤおよび設定されたＣＰＵ使用率を取得し、当該ＯＳＧｉサービスの利用数の監視をする。なお、この監視はユーザが設定を解除するまで継続して行い、監視開始時および当該ＯＳＧｉサービスの利用数が変化する度にステップＳ１３へ移行する。
【００７２】
ステップＳ１３：ＯＳＧｉサービス登録利用監視バンドル１５は、Ｓ１２で取得したＩＤのバンドルＣＰＵ使用率を設定または算出する。具体的には、以下の手順で決定する。
【００７３】
（１）ユーザがバンドルに対してＣＰＵ使用率を設定した場合は、その値を設定値とする。
【００７４】
（２）ユーザがＯＳＧｉサービスに対してＣＰＵ使用率を設定した場合は、そのＣＰＵ使用率の値と当該ＯＳＧｉサービスの利用数との積を設定値とする。１つのバンドルにおいて、複数のＯＳＧｉサービスのＣＰＵ使用率が設定された場合は、それらの合計値を当該バンドルのＣＰＵ使用率として設定する。
【００７５】
ステップＳ１４：ＯＳＧｉサービス登録利用監視バンドル１５は、設定または算出したバンドルの設定値を、スレッド群グループ化部１４に送出する。ここで、スレッド群グループ化部１４に送出される情報は、「制御開始」がＯＮになっている、ユーザが制御対象として設定された各バンドルのＩＤと、それに対応して設定または算出された「最低品質保証ＣＰＵ使用率」である。なお、バンドルの状態が動作中（ＡＣＴＩＶＥ）であってもそれ以外であっても、「制御開始」がＯＮになっているバンドルについては、スレッド群グループ化部１４に出力される。
【００７６】
ステップＳ１５：スレッド群グループ化部１４、各バンドルに対応するグループに対し、ステップＳ１４で送出されたＣＰＵ使用率に対応する、ＬＷＰ単位ＣＰＵ制御部１１への制御値を算出する。すなわち、スレッド群グループ化部１４は、指示されたバンドルの各グループについて、設定または算出されたＣＰＵ使用率（設定値）で更新し、当該ＣＰＵ使用率に対応する、ＬＷＰ単位ＣＰＵ制御部１１への制御値を算出し、グループ情報（図２）を更新する。
【００７７】
制御値の算出は、例えば、ＬＷＰ単位ＣＰＵ制御部１１として、上述のｃｇｒｏｕｐｓを利用する場合、ｃｐｕ．ｓｈａｒｅｓの値を算出することになる。また、Ｌｉｎｕｘ のｎｉｃｅを利用する場合には、独自に実装されたＯＳ上のＣＰＵスケジューリング機能を利用して算出する。なお、制御値の算出については後述する。
【００７８】
ステップＳ１６：スレッド群グループ化部１４は、算出した各グループの制御値（例えばｃｐｕ．ｓｈａｒｅｓの値）を、ＬＷＰ単位ＣＰＵ制御部１１に投入する。なお、ステップＳ１５およびステップＳ１６の処理は、バンドルの状態が動作中であるか否かとは無関係に行われる。
【００７９】
ステップＳ１７：ＬＷＰ単位ＣＰＵ制御部１１は、スレッド群グループ化部１４から投入された制御値に基づいて、各グループ（バンドル）に属するＬＷＰのＣＰＵ使用率を制御する。具体的には、各グループに属するＬＷＰが使用したＣＰＵ使用時間の比が、各グループに設定されたＣＰＵ使用率の設定値の比と同等になるように、ＣＰＵのスケジューリングを行う。これによって、Ｓ１１でユーザが設定したＣＰＵ使用率となるように、ＣＰＵ使用時間が制御されることとなる。例えば、ｃｇｒｏｕｐｓでは、グループ毎に、ｃｐｕ．ｓｈａｒｅｓとして与えられた整数の比に応じてＣＰＵの使用時間を、相対的に配分する制御を行う。
【００８０】
ただし、グループに属するＬＷＰが１つも存在しない場合は、そのグループに対してはＣＰＵスケジューリングを行わない。あるいは、スケジューリングは行うが、ＬＷＰが１つも存在しないので、次のスケジューリングにスキップするようにしてもよい。
【００８１】
以上の処理により、各バンドルのＣＰＵ使用時間が、ステップＳ１１でバンドルまたはＯＳＧｉサービスに対して投入されたＣＰＵ使用率となるように制御されることとなる。
【００８２】
次に、スレッド群グループ化部１４について詳述する。
【００８３】
ここでは、ＯＳとしてＬｉｎｕｘ、ソフトウェア実行環境としてＪａｖａＶＭおよびＯＳＧｉ、ソフトウェアモジュールとしてＯＳＧｉバンドル、ＬＷＰ単位ＣＰＵ制御部１１としてｃｇｒｏｕｐｓを用いた場合を例として、スレッド群グループ化部１４の詳細について説明する。図５〜図８は、スレッド群グループ化部１４が保持する情報の遷移を示す。
【００８４】
図５は、ＪａｖａＶＭおよびＯＳＧｉが起動する前の初期状態を示す。この初期状態では、ＯＳ上の全てのプロセス（ＬＷＰを含む）は、ルートグループに属している。
【００８５】
ここで、ルートグループに設定するｃｇｒｏｕｐｓのｃｐｕ．ｓｈａｒｅｓ（制御値）は、固定値Ｎとする。初期状態であることから固定値Ｎを任意の値で設定してもよいが、他のバンドルへ設定するＣＰＵ使用率とのバランスを考慮して、ここでは１０２４とする。以下の例ではこの値を基準に計算を行う。
【００８６】
また、図５ではルートグループ以外のグループが存在しないが、過去にＯＳＧｉＦＷが起動しており、スレッド群グループ化部１４がグループを既に生成していた場合でかつＯＳＧｉが終了してもグループを保持する実装である場合には、ルートグループ以外のグループも存在する。
【００８７】
次に、図６に、ＪａｖａＶＭおよびＯＳＧｉが起動した後の状態を示す。スレッド群グループ化部１４は、インストールされたバンドル毎にグループ（図中「ProcessGroup」）を生成する。すなわち、バンドルスレッド化部１３によりインストールしたバンドルのＩＤと、ＬＷＰのＩＤが通知されるので、それらを対応付けたグループ情報を生成する。
【００８８】
そして、過去にＯＳＧｉサービス登録利用監視バンドル１５により設定され、スレッド群グループ化部１４がグループ情報を既に保持している場合は、その情報を参照し、各バンドルのグループのｃｐｕ．ｓｈａｒｅｓの値（制御値）を設定または算出する。すなわち、ＣＰＵリソースの非制御対象のバンドルのグループに対しては（図６では、バンドルＣおよびバンドルＤに対しては）、ｃｐｕ．ｓｈａｒｅｓの値としてルートグループと同じ固定値N（ここでは１０２４）を設定する。
【００８９】
一方、ＣＰＵリソースの制御対象のバンドルのグループに対しては（図６では、バンドルＡおよびバンドルＢに対しては）、ｃｐｕ．ｓｈａｒｅｓの値を以下の式で算出する。なお、バンドルの状態（動作中か否か）に関わらず、全ての制御対象のバンドルについて算出する。
【数１】
2014235580.tif 000003
【００９０】
上記式は、「制御対象バンドルのｃｐｕ．ｓｈａｒｅｓの値」と「非制御対象の全てのプロセスおよびバンドルのＬＷＰに設定されているｃｐｕ．ｓｈａｒｅｓの値の合計」の比が、「制御対象バンドルにユーザが設定したＣＰＵ使用率」と「非制御対象の全てのプロセスおよびバンドルのＬＷＰが利用可能なＣＰＵ使用率」の比と同じになるように、「制御対象バンドルのｃｐｕ．ｓｈａｒｅｓの値」を算出するものである。
【００９１】
上記式の左辺は、制御対象のバンドル（グループ）のｃｐｕ．ｓｈａｒｅｓの値（制御値）である。右辺分母は、非制御対象の全てのプロセスおよびバンドルのＬＷＰが利用可能なＣＰＵ使用率を意味する。右辺分子の「ユーザ設定ＣＰＵ使用率」は、ユーザが制御対象バンドルに設定したＣＰＵ使用率（設定値）、または、ユーザが制御対象バンドルのＯＳＧｉサービスに設定したＣＰＵ使用率から算出したＣＰＵ使用率（設定値）である。
【００９２】
また、右辺分子の「１０２４」は、ルートグループおよび非制御対象のバンドルに設定された固定値Ｎであって、ｃｐｕ．ｓｈａｒｅｓの値（制御値）である。したがって、右辺分子の（１０２４×（非制御対象バンドル数＋１）は、非制御対象の全てのバンドルおよびプロセス（ルートグループ）に設定されているｃｐｕ．ｓｈａｒｅｓの値の合計である。
【００９３】
次に、図７に、ユーザの指示によりあるバンドル（図中のバンドルＣ）を制御対象とした場合（制御を開始した状態）を示す。また、図８に、あるバンドル（図中のバンドルＣ）が制御対象から外れた場合（制御を終了した状態）を示す。図７および図８のどちらの場合も、全ての制御対象のバンドルのグループに対してｃｐｕ．ｓｈａｒｅｓの値を再計算する。
【００９４】
以上説明した本実施形態では、バンドルを実行するためのＪａｖａスレッドが生成される毎に、ＯＳレイヤのＬＷＰを生成して、Ｊａｖａスレッドに１対１で対応付ける対応付け、そのＬＷＰをバンドル毎にまとめたグループを管理し、前記グループの中から制御対象グループにおける制御対象ＯＳＧｉサービスと、当該制御対象ＯＳＧｉサービスに対するＣＰＵ使用率とを受け付け、当該制御対象ＯＳＧｉサービスのＣＰＵ使用率と当該制御対象ＯＳＧｉサービスの利用数とを用いて、制御対象グループのＣＰＵ使用率の設定値を算出し、算出したＣＰＵ使用率の設定値に基づいて、制御対象グループに属するＬＷＰのＣＰＵ使用時間を算出し、制御対象グループのＣＰＵ使用率を制御する。これにより、本実施形態では、ＯＳＧｉサービス単位で設定されたＣＰＵ使用率を用いて、バンドル単位でＣＰＵ使用率を制御し、保証することができる。
【００９５】
具体的には、図９に示すように、単一のプロセスで動作しているソフトウェア実行環境（ＪａｖａＶＭ）内の「塊（＝バンドル）」は、通常、ＯＳレイヤからは見えない。つまり、ＣＰＵスケジューリング機能の対象とならない。そこで、本実施形態では、まずＪａｖａスレッドという単位にバンドルを分割し、それをＯＳレイヤのＬＷＰと対応付けたうえで、Ｊａｖａスレッド（ＬＷＰ）をバンドルという「塊」の単位で扱うことで、ＯＳレイヤにバンドルという「塊」を認識させることができる。
【００９６】
また、本実施形態では、ＯＳＧｉサービス登録利用監視バンドル１５は、ユーザが入力した制御対象サービスのＣＰＵ使用率とその利用数とを用いて、制御対象グループのＣＰＵ使用率の設定値を算出する。これにより、あるバンドルがＯＳＧｉサービスを提供し、複数のバンドルが当該ＯＳＧｉサービスを利用する場合であっても、利用するバンドルの数に関わらずバンドルのＣＰＵ使用率を最適に確保することができる。すなわち、ＯＳＧｉサービス利用状況に応じて動的にバンドルへのＣＰＵ使用率を設定することができる。
【００９７】
例えば、あるバンドル３から別のバンドル１、２へのイベンティングが行われる際に、バンドル３が生成するＪａｖａスレッドが、バンドル１および２の処理を実行することになり、この処理をある一定時間に収めたい場合において、ユーザはイベンティングを行う対象のバンドルの数を事前に見積ることができない場合、または、ユーザ設定後にイベンティングを行う対象のバンドル数が増加した場合であっても、本実施形態では、制御対象のＯＳＧｉサービス利用状況をＯＳＧｉサービス登録利用監視バンドル１５が監視し、利用数に応じてＣＰＵ使用率を動的に変更することで、バンドル毎に最適なＣＰＵ使用率を設定することができる。
【符号の説明】
【００９８】
１  ：ＣＰＵ使用率制御装置
１１：ＬＷＰ単位ＣＰＵ制御部
１２：Ｊａｖａスレッド・ＬＷＰ対応部
１３：バンドルスレッド化部
１４：スレッド群グループ化部１４
１５：ＯＳＧｉサービス登録利用監視バンドル
２  ：ユーザ端末
【図１】
2014235580.tif 000004
【図２】
2014235580.tif 000005
【図３】
2014235580.tif 000006
【図４】
2014235580.tif 000007
【図５】
2014235580.tif 000008
【図６】
2014235580.tif 000009
【図７】
2014235580.tif 000010
【図８】
2014235580.tif 000011
【図９】
2014235580.tif 000012