(57)【要約】【課題】ソフトウェアモジュール毎にＣＰＵ使用率を制御する。【解決手段】ＣＰＵ使用率制御装置１であって、実行環境レイヤにおいてソフトウェアモジュールを実行するための第１スレッドが生成される毎に、ＯＳレイヤの第２スレッドを生成して当該第１スレッドに１対１で対応付ける対応付け手段１２と、ソフトウェアモジュール毎に第２スレッドをまとめたグループを管理するグループ管理手段１４と、前記グループの中から制御対象グループおよびＣＰＵ使用率の設定値を受け付ける受付手段１６と、ＣＰＵ使用率の設定値に基づいて制御対象グループに属する第２スレッドのＣＰＵ使用時間を算出する算出手段１５と、ＣＰＵ使用時間を用いて制御対象グループのＣＰＵ使用率を制御する制御手段１１と、を備える。【選択図】図１
2014235579.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）、ＷｅｂＵＩなどを有する。なお、バンドルＣＰＵ使用率設定部１６は、ＯＳＧｉレイヤ以外の他のレイヤに実装され、動作することとしてもよい。
【００５０】
バンドルＣＰＵ使用率設定部１６は、ＧＵＩ生成時にインストール済みのバンドル一覧とその動作状態（動作中・非動作中）をＯＳＧｉＦＷから取得し、ユーザ端末２に表示する。
【００５１】
ユーザは、あるバンドル（動作状態を問わない）に対して割り当てたいＣＰＵリソースを、ＣＰＵ使用率（％）で指定し設定する。バンドルＣＰＵ使用率設定部１６は、ユーザの設定内容を受け付け、バンドルグループ管理部１４に出力する。また、バンドルＣＰＵ使用率設定部１６は、合計したＣＰＵ使用率が事前に定めた閾値を超える場合には、ユーザに警告を発する。例えば、ユーザが設定したＣＰＵ使用率の合計が９９%を超えると、警告メッセージをユーザ端末２に送信する。
【００５２】
以上説明した本実施形態のＣＰＵ使用率制御装置１は、例えば、ＣＰＵと、メモリと、ＨＤＤ等の外部記憶装置などを備えた汎用的なコンピュータシステムを用いることができる。このコンピュータシステムにおいて、ＣＰＵがメモリ上にロードされたＣＰＵ使用率制御装置１用のプログラムを実行することにより、ＣＰＵ使用率制御装置１の各機能が実現される。また、ＣＰＵ使用率制御装置１のプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ−ＲＯＭなどのコンピュータ読取り可能な記録媒体に記憶することも、ネットワークを介して配信することもできる。
【００５３】
次に、本実施形態の動作について説明する。
【００５４】
図３は、本実施形態におけるＣＰＵ使用率制御装置１の動作を示すシーケンス図である。
【００５５】
図３では、ユーザが、各バンドルのＣＰＵリソース制御設定を変更した際の、各バンドルのＣＰＵリソース制御の流れを以下に示す。
【００５６】
ステップＳ１０：バンドルグループ管理部１４は、常に各バンドルのライフサイクル（インストール、アンインストール）を監視し、またバンドルスレッド化部１３から通知されたバンドルのＩＤと、ＬＷＰのＩＤとを保持している。
【００５７】
ステップＳ１１：まず、ユーザ端末２は、ユーザの指示により選択されたバンドルと、当該バンドルに割り当てるＣＰＵ使用率とを、バンドルＣＰＵ使用率設定部１６に送信する。
【００５８】
図４は、バンドルＣＰＵ使用率設定部１６がユーザ端末２に表示する設定画面の一例である。ユーザは、ユーザ端末２に表示される設定画面を用いて、制御対象とするバンドルと、そのバンドルに割り当てるＣＰＵ使用率とを設定する。
【００５９】
「バンドルシンボリックネーム」の列は、バンドルの一覧を表している。「バンドル状態」の列は、各バンドルの動作状態を表しているが、この列は無くてもよい。バンドル状態には、動作中（ＡＣＴＩＶＥ）、停止中（ＲＥＳＯＬＶＥＤ）、インストール済みだが未動作（ＩＮＳＴＡＬＬＥＤ）などがある。ユーザは、一覧に存在するどの状態のバンドルに対しても設定することができる。
【００６０】
「最低品質保証ＣＰＵ使用率」の列は、動作保証を行いたいバンドルに対して設定するＣＰＵ使用率（％）の最低値を投入するテキストボックスである。コンピュータの負荷が大きくなった際にも、最低限、この設定値のＣＰＵ使用率が該当するバンドルに与えられることを示す。一方、コンピュータの負荷が小さい場合には、この設定値を超えてＣＰＵを使用する場合もあるし、逆に、設定されたバンドルが処理を行っていない際には、他のバンドルがこの設定値のＣＰＵを使用する場合もある。
【００６１】
「ＣＰＵリソース制御適用フラグ」の列は、ＣＰＵリソース制御（ＣＰＵ使用率制御）を適用しているか否かを示すものである。「制御開始」および「制御終了」の列は、ラジオボタンで選択可能に表示され、ＣＰＵリソース制御をＯＮもしくはＯＦＦにすることができる。最下段の「合計」の行は、「ＣＰＵリソース制御適用フラグ」がＯＮであるバンドルの「最低品質保証ＣＰＵ使用率」に設定されたＣＰＵ使用率の合計値を表している。
【００６２】
ステップＳ１２：バンドルＣＰＵ使用率設定部１６は、ステップＳ１１で送信されたユーザの設定情報を受信し、バンドルグループ管理部１４に送出する。ここで、バンドルグループ管理部１４に送出される情報は、「制御開始」がＯＮになっている、ユーザが制御対象として設定した各バンドルのＩＤと、それに対応して設定された「最低品質保証ＣＰＵ使用率」である。なお、バンドルの状態が動作中（ＡＣＴＩＶＥ）であってもそれ以外であっても、「制御開始」がＯＮになっているバンドルについては、バンドルグループ管理部１４に出力される。
【００６３】
ステップＳ１３：バンドルグループ管理部１４は、バンドルＣＰＵ使用率設定部１６からの情報を受け付け、ユーザが制御対象として設定したバンドル毎に、ＬＷＰグループ管理部１５に対しグループを生成するように指示し、それ以外のグループを削除するよう指示する。
【００６４】
ＬＷＰグループ管理部１５に指示する情報は、制御対象として設定された各バンドルについては、生成指示と、バンドルのＩＤ（グループのＩＤ）と、ユーザが設定したＣＰＵ使用率（最低品質保証ＣＰＵ使用率）と、当該バンドルに所属するＬＷＰのＩＤなどである。一方、制御対象として設定されない非制御対象の各バンドルについては、削除指示と、バンドルのＩＤ（グループのＩＤ）と、当該バンドルに所属するＬＷＰのＩＤなどである。
【００６５】
ステップＳ１４：ＬＷＰグループ管理部１５は、バンドルグループ管理部１４からの指示情報を受け付け、生成指示された制御対象のバンドルについては、対応するグループを生成（または更新）し、削除指示された非制御対象のバンドルについては、対応するグループを削除して、グループ情報（図２）を更新する。
【００６６】
なお、生成指示された制御対象のバンドルのＩＤのグループが、既にグループ情報に存在する場合は、当該グループを新たに生成することなく、ステップＳ１３で送信された指示情報を用いてグループ情報を更新する。また、削除指示された非制御対象のバンドルのＩＤのグループが、グループ情報に存在する場合は、当該グループのレコードを削除し、当該グループに所属するＬＷＰは、ルートグループに所属させる。
【００６７】
生成指示されたバンドルの各グループについては、具体的には、ＬＷＰグループ管理部１５は、ステップＳ１３で送信された指示情報を用いて、バンドルのＩＤと、所属するＬＷＰのＩＤと、ユーザが設定したＣＰＵ使用率（設定値）を、グループ情報に登録（または更新）する。そして、ＬＷＰグループ管理部１５は、後述するように、ＣＰＵ使用率に対応する、ＬＷＰ単位ＣＰＵ制御部１１への制御値を算出する。
【００６８】
例えば、ＬＷＰ単位ＣＰＵ制御部１１として、上述のｃｇｒｏｕｐｓを利用する場合、ｃｐｕ．ｓｈａｒｅｓの値を算出することになる。また、Ｌｉｎｕｘ のｎｉｃｅを利用する場合には、独自に実装されたＯＳ上のＣＰＵスケジューリング機能を利用して算出する。
【００６９】
ステップＳ１５：ＬＷＰグループ管理部１５は、算出した各グループの制御値（例えばｃｐｕ．ｓｈａｒｅｓの値）を、ＬＷＰ単位ＣＰＵ制御部１１に投入する。なお、ステップＳ１４およびステップＳ１５の処理は、バンドルの状態が動作中であるか否かとは無関係に行われる。
【００７０】
ステップＳ１６：ＬＷＰ単位ＣＰＵ制御部１１は、ＬＷＰグループ管理部１５から投入された制御値に基づいて、各グループ（バンドル）に属するＬＷＰのＣＰＵ使用率を制御する。具体的には、各グループに属するＬＷＰが使用したＣＰＵ使用時間の比が、各グループに設定されたＣＰＵ使用率の設定値の比と同等になるように、ＣＰＵのスケジューリングを行う。これによって、Ｓ１１でユーザが設定したＣＰＵ使用率となるように、ＣＰＵ使用時間が制御されることとなる。例えば、ｃｇｒｏｕｐｓでは、グループ毎に、ｃｐｕ．ｓｈａｒｅｓとして与えられた整数の比に応じてＣＰＵの使用時間を、相対的に配分する制御を行う。
【００７１】
ただし、グループに属するＬＷＰが１つも存在しない場合は、そのグループに対してはＣＰＵスケジューリングを行わない。あるいは、スケジューリングは行うが、ＬＷＰが１つも存在しないので、次のスケジューリングにスキップするようにしてもよい。
【００７２】
以上の処理により、各バンドルのＣＰＵ使用時間が、ステップＳ１１で投入されたＣＰＵ使用率となるように制御されることとなる。
【００７３】
次に、ＬＷＰグループ管理部１５について詳述する。
【００７４】
ここでは、ＯＳとしてＬｉｎｕｘ、ソフトウェア実行環境としてＪａｖａＶＭおよびＯＳＧｉ、ソフトウェアモジュールとしてＯＳＧｉバンドル、ＬＷＰ単位ＣＰＵ制御部１１としてｃｇｒｏｕｐｓを用いた場合を例として、ＬＷＰグループ管理部１５の詳細について説明する。図５〜図８は、ＬＷＰグループ管理部１５が保持する情報の遷移を示す。
【００７５】
図５は、ＪａｖａＶＭおよびＯＳＧｉが起動する前の初期状態を示す。この初期状態では、ＯＳ上の全てのプロセス（ＬＷＰを含む）は、ルートグループに属している。
【００７６】
ここで、ルートグループに設定するｃｇｒｏｕｐｓのｃｐｕ．ｓｈａｒｅｓ（制御値）は、固定値Ｎとする。初期状態であることから固定値Ｎを任意の値で設定してもよいが、他のバンドルへ設定するＣＰＵ使用率とのバランスを考慮して、ここでは１０２４とする。以下の例ではこの値を基準に計算を行う。
【００７７】
次に、図６に、ＪａｖａＶＭおよびＯＳＧｉが起動し、バンドルＣＰＵ使用率設定部１６にユーザからの設定情報が入力され、バンドルグループ管理部１４からグループ生成指示があった後の状態を示す。
【００７８】
ＬＷＰグループ管理部１５は、ユーザが制御対象として設定したバンドル毎にグループ（図中の「ProcessGroup」）を生成する。すなわち、バンドルグループ管理部１４より送出された指示情報により、生成指示された制御対象のバンドルのＩＤと、ＬＷＰのＩＤと、ユーザが設定したＣＰＵ使用率とが通知されるため、それらを対応付けたグループ情報を生成する。
【００７９】
そして、ＬＷＰグループ管理部１５は、制御対象のバンドルの各グループに対して、ユーザが設定したＣＰＵ使用率を用いて、ｃｐｕ．ｓｈａｒｅｓを以下の式で算出する。
【数１】
2014235579.tif 000003
【００８０】
上記式の左辺は、制御対象のバンドル（グループ）のｃｐｕ．ｓｈａｒｅｓの値（制御値）である。右辺分母は、非制御対象の全てのプロセスおよびＬＷＰが利用可能なＣＰＵ使用率を意味する。右辺分子の「ユーザ設定ＣＰＵ使用率」は、ユーザが設定したＣＰＵ使用率（設定値）である。また、右辺分子の「１０２４」は、ルートグループに設定された固定値Ｎであって、非制御対象の全てのプロセスおよびＬＷＰに設定されているｃｐｕ．ｓｈａｒｅｓの合計値である。
【００８１】
上記式は、「制御対象バンドルのｃｐｕ．ｓｈａｒｅｓの値」と「非制御対象の全てのプロセスおよびＬＷＰに設定されているｃｐｕ．ｓｈａｒｅｓの値の合計」の比が、「制御対象バンドルにユーザが設定したＣＰＵ使用率」と「非制御対象の全てのプロセスおよびＬＷＰが利用可能なＣＰＵ使用率」の比と同じになるように、「制御対象バンドルのｃｐｕ．ｓｈａｒｅｓの値」を算出するものである。なお、バンドルの状態（動作中か否か）に関わらず、全ての制御対象のバンドルについて算出する。
【００８２】
次に、図７に、ユーザの指示によりあるバンドル（図中のバンドルＣ）を制御対象とした場合（制御を開始した状態）を示す。また、図８に、あるバンドル（図中のバンドルＣ）が制御対象から外れた場合（制御を終了した状態）を示す。図７および図８のどちらの場合も、全ての制御対象のバンドルのグループに対してｃｐｕ．ｓｈａｒｅｓの値を再計算する。
【００８３】
以上説明した本実施形態では、バンドルを実行するためのＪａｖａスレッドが生成される毎に、ＯＳレイヤのＬＷＰを生成して、Ｊａｖａスレッドに１対１で対応付け、そのＬＷＰをバンドル毎にまとめたグループを管理し、前記グループの中から制御対象グループおよび当該制御対象グループのＣＰＵ使用率の設定値を受け付けると、そのＣＰＵ使用率の設定値に基づいて制御対象グループに属するＬＷＰのＣＰＵ使用時間を算出し、制御対象グループのＣＰＵ使用率を制御する。これにより、本実施形態では、バンドル単位でＣＰＵ使用率を制御し、バンドル単位で設定されたＣＰＵ使用率を保証することができる。
【００８４】
具体的には、図９に示すように、単一のプロセスで動作しているソフトウェア実行環境（ＪａｖａＶＭ）内の「塊（＝バンドル）」は、通常、ＯＳレイヤからは見えない。つまり、ＣＰＵスケジューリング機能の対象とならない。そこで、本実施形態では、まずＪａｖａスレッドという単位にバンドルを分割し、それをＯＳレイヤのＬＷＰと対応付けたうえで、Ｊａｖａスレッド（ＬＷＰ）をバンドルという「塊」の単位で扱うことで、ＯＳレイヤにバンドルという「塊」を認識させることができる。
【００８５】
また、本実施形態では、ユーザが設定しなかった非制御対象のバンドルおよびプロセスに対しては、１つのルートグループにまとめることで、ＣＰＵ使用率の割り当てが均等となるため、非制御対象のバンドルおよびプロセス内での不均衡が生じないという利点がある。
【００８６】
すなわち、本実施形態では、どのバンドルに対し、どのＪａｖａスレッド（ＬＷＰ）が対応するかを管理するバンドルグループ管理部１４と、ユーザが設定した「どのバンドルに対してどれだけＣＰＵ使用率を与えるか」を満たすために、バンドルに対してＣＰＵの使用時間（スケジューリング比率）を算出するＬＷＰグループ管理部１５とを分けて備え、ユーザが設定をした制御対象のバンドルに対してのみグループを作成し、ＣＰＵの使用時間を算出する。これにより、非制御対象のバンドルのＬＷＰはルートグループに属するため、ＣＰＵスケジューリングにおいては、プロセスと同等の扱いを受けることになり、非制御対象のバンドルおよびプロセス内で不均衡が生じない。
【００８７】
なお、本発明は上記実施形態に限定されるものではなく、特許請求の範囲内において、種々変更・応用が可能である。
【符号の説明】
【００８８】
１  ：ＣＰＵ使用率制御装置
１１：ＬＷＰ単位ＣＰＵ制御部
１２：Ｊａｖａスレッド・ＬＷＰ対応部
１３：バンドルスレッド化部
１４：バンドルグループ管理部
１５：ＬＷＰグループ管理部
１６：バンドルＣＰＵ使用率設定部
２  ：ユーザ端末
【図１】
2014235579.tif 000004
【図２】
2014235579.tif 000005
【図３】
2014235579.tif 000006
【図４】
2014235579.tif 000007
【図５】
2014235579.tif 000008
【図６】
2014235579.tif 000009
【図７】
2014235579.tif 000010
【図８】
2014235579.tif 000011
【図９】
2014235579.tif 000012