(57)【要約】【課題】ソフトウェアプログラム単位でＣＰＵ使用率を保証すること。【解決手段】ＯＳＧｉバンドルを実行するためにＪａｖａスレッドを生成して起動し、そのＪａｖａスレッドが生成される毎に、ＯＳレイヤのＬＷＰを生成して当該Ｊａｖａスレッドに１対１で対応付け、そのＬＷＰをＯＳＧｉバンドル毎のグループにまとめ、各グループに対するＣＰＵ使用率の指定値に基づいて各グループに属するＬＷＰのＣＰＵ使用率を計算し、ＬＷＰに対してＣＰＵ使用率を制御する。【選択図】図１
2014164662.tif 000002
【特許請求の範囲】
【請求項１】
単一プロセスの実行環境上で動作するソフトウェアプログラムのＣＰＵ使用率を制御するＣＰＵ使用率制御装置において、
前記ソフトウェアプログラムを実行するために前記実行環境レイヤの第１スレッドを生成し、前記ソフトウェアプログラムを前記第１スレッドとして起動する起動手段と、
前記第１スレッドが生成される毎に、ＯＳレイヤの第２スレッドを生成して当該第１スレッドに１対１で対応付ける対応付け手段と、
前記第２スレッドをソフトウェアプログラム毎のグループにまとめてグループ情報として記憶手段に記憶するグループ化手段と、
前記記憶手段からグループ情報を読み出して、各グループに対するＣＰＵ使用率の指定値に基づいて各グループに属する前記第２スレッドのＣＰＵ使用率を計算し、前記第２スレッドに対してＣＰＵ使用率を制御する制御手段と、
を有することを特徴とするＣＰＵ使用率制御装置。
【請求項２】
前記実行環境は、ＪａｖａＶｉｒｔｕａｌＭａｃｈｉｎｅであって、
前記グループ化手段は、
前記ＪａｖａＶｉｒｔｕａｌＭａｃｈｉｎｅ上で動作するソフトウェアプログラム以外のソフトウェアプログラムに係る前記第２スレッドを特定のグループで管理することを特徴とする請求項１記載のＣＰＵ使用率制御装置。
【請求項３】
前記ＣＰＵ使用率の指定値の入力を受け付ける入力手段を更に有することを特徴とする請求項１又は２記載のＣＰＵ使用率制御装置。
【請求項４】
自身を呼び出した前記第１スレッドに対応する前記第２スレッドの所属グループを他のグループに切り換える切替手段を更に有することを特徴とする請求項１乃至３のいずれかに記載のＣＰＵ使用率制御装置。
【請求項５】
単一プロセスの実行環境上で動作するソフトウェアプログラムのＣＰＵ使用率を制御するＣＰＵ使用率制御方法において、
コンピュータにより、
前記ソフトウェアプログラムを実行するために前記実行環境レイヤの第１スレッドを生成し、前記ソフトウェアプログラムを前記第１スレッドとして起動する起動ステップと、
前記第１スレッドが生成される毎に、ＯＳレイヤの第２スレッドを生成して当該第１スレッドに１対１で対応付ける対応付けステップと、
前記第２スレッドをソフトウェアプログラム毎のグループにまとめてグループ情報として記憶手段に記憶するグループ化ステップと、
前記記憶手段からグループ情報を読み出して、各グループに対するＣＰＵ使用率の指定値に基づいて各グループに属する前記第２スレッドのＣＰＵ使用率を計算し、前記第２スレッドに対してＣＰＵ使用率を制御する制御ステップと、
を有することを特徴とするＣＰＵ使用率制御方法。
【請求項６】
コンピュータを請求項１乃至４のいずれかに記載のＣＰＵ使用率制御装置として機能させるためのＣＰＵ使用率制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＰＵ使用率を制御する技術に関する。
【背景技術】
【０００２】
コンピュータにおいて、ＯＳ上で単一プロセスとして動作するソフトウェアプログラム実行環境と、その実行環境上で動作する複数のソフトウェアプログラムとを具備することができる。例えば、そのような実行環境としてはＪａｖａ（登録商標）ＶＭがあり、ソフトウェアプログラムとしてはＯＳＧｉバンドルがある。
【０００３】
ＪａｖａＶＭ（Ｊａｖａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）は、ＯＳから見て単一のプロセスで動作し、そのＪａｖａＶＭ上で動作するソフトウェアプログラムは、複数のＪａｖａスレッドを生成可能であり、ＪａｖａＶＭによって時間並列的に複数の処理を実行することができる。
【０００４】
また、ＯＳＧｉ（Ｏｐｅｎ  Ｓｅｒｖｉｃｅ  Ｇａｔｅｗａｙ  ｉｎｉｔｉａｔｉｖｅ）とは、あるソフトウェアプログラムを複数のＪａｖａソフトウェアモジュールで構成するための技術である（非特許文献１）。１つのＪａｖａＶＭ上でＯＳＧｉＦＷ（ＯＳＧｉ  Ｆｒａｍｅｗｏｒｋ）を動作させ、当該ＯＳＧｉＦＷ上で複数のＯＳＧｉバンドル（以下、バンドル）を動作させることができる。このバンドルは、ＯＳＧｉＦＷの動作中にインストール・アンインストール、スタート・ストップを動的に実行できる。
【０００５】
ここで、エンドユーザ又はソフトウェアプログラム実行環境の運用者は、特定のバンドルを確実に動作させたい場合がある。例えば、他のバンドルの動作負荷状況に関わらず、重要なバンドルの動作を保証したい等である。具体的には、ＣＰＵ負荷の高いゲーム用のアプリケーション動作時にも緊急地震速報計算を１秒以内に完了させたい場合や、作りの悪いアプリケーションによる無限ループ時によるＣＰＵ負荷増大時にも管理用Ｗｅｂ画面を２秒以内に表示させたい場合である。
【０００６】
そのため、バンドル単位でＣＰＵ使用率を最低保証したいことが考えられる。その場合、Ｊａｖａアプリケーションプログラムインタフェースの仕様書に定められたＪａｖａスレッドの優先度変更方法を用いることが考えられる（非特許文献２）。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】“OSGi Specifications”、OSGi Alliance、＜URL: http://www.osgi.org/Download/File?url=/download/r5/osgi.core-5.0.0.pdf＞
【非特許文献２】“クラス  Thread、  java.land.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)＞
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、そのような既存方法を利用しても、以下の理由から特定のバンドルの動作を確実に保証することは困難であった。
【０００９】
（１）既存の優先度変更方法では、実際の動作が規定されていない。
【００１０】
（２）既存の優先度変更はバンドル自身が行うため、バンドルの作成者であるエンドユーザの思惑とソフトウェアプログラム実行環境の運用者の思惑とが異なる場合がある。つまり、その優先度変更を外部から制御できず、外部制御するにはバンドルをそれぞれ改修する必要があるため、とても対応しきれるものではない。
【００１１】
（３）既存の優先度変更方法では、全体を総合的に俯瞰し、優先度の設定を制限する仕組みが定められていない。そのため、例えば全てのＪａｖａスレッドに最高の優先度を設定してしまい、実質的に何の意味もなさない場合がある。
【００１２】
（４）ソフトウェアプログラム実行環境のＪａｖａスレッドがバンドルを動作させる場合もあり、また、１つのバンドルが複数のＪａｖａスレッドを動作させる場合もある。すなわち、必ずしも１つのバンドルに対し１つのＪａｖａスレッドが存在するわけではなく、Ｊａｖａスレッド単位での優先度設定はバンドル単位で優先度を設定することができない。
【００１３】
本発明は、上記事情を鑑みてなされたものであり、ソフトウェアプログラム単位でＣＰＵ使用率を保証することを目的とする。
【課題を解決するための手段】
【００１４】
請求項１記載のＣＰＵ使用率制御装置は、単一プロセスの実行環境上で動作するソフトウェアプログラムのＣＰＵ使用率を制御するＣＰＵ使用率制御装置において、前記ソフトウェアプログラムを実行するために前記実行環境レイヤの第１スレッドを生成し、前記ソフトウェアプログラムを前記第１スレッドとして起動する起動手段と、前記第１スレッドが生成される毎に、ＯＳレイヤの第２スレッドを生成して当該第１スレッドに１対１で対応付ける対応付け手段と、前記第２スレッドをソフトウェアプログラム毎のグループにまとめてグループ情報として記憶手段に記憶するグループ化手段と、前記記憶手段からグループ情報を読み出して、各グループに対するＣＰＵ使用率の指定値に基づいて各グループに属する前記第２スレッドのＣＰＵ使用率を計算し、前記第２スレッドに対してＣＰＵ使用率を制御する制御手段と、を有することを要旨とする。
【００１５】
請求項２記載のＣＰＵ使用率制御装置は、請求項１記載のＣＰＵ使用率制御装置において、前記実行環境は、ＪａｖａＶｉｒｔｕａｌＭａｃｈｉｎｅであって、前記グループ化手段は、前記ＪａｖａＶｉｒｔｕａｌＭａｃｈｉｎｅ上で動作するソフトウェアプログラム以外のソフトウェアプログラムに係る前記第２スレッドを特定のグループで管理することを要旨とする。
【００１６】
請求項３記載のＣＰＵ使用率制御装置は、請求項１又は２記載のＣＰＵ使用率制御装置において、前記ＣＰＵ使用率の指定値の入力を受け付ける入力手段を更に有することを要旨とする。
【００１７】
請求項４記載のＣＰＵ使用率制御装置は、請求項１乃至３のいずれかに記載のＣＰＵ使用率制御装置において、自身を呼び出した前記第１スレッドに対応する前記第２スレッドの所属グループを他のグループに切り換える切替手段を更に有することを要旨とする。
【００１８】
請求項５記載のＣＰＵ使用率制御方法は、単一プロセスの実行環境上で動作するソフトウェアプログラムのＣＰＵ使用率を制御するＣＰＵ使用率制御方法において、コンピュータにより、前記ソフトウェアプログラムを実行するために前記実行環境レイヤの第１スレッドを生成し、前記ソフトウェアプログラムを前記第１スレッドとして起動する起動ステップと、前記第１スレッドが生成される毎に、ＯＳレイヤの第２スレッドを生成して当該第１スレッドに１対１で対応付ける対応付けステップと、前記第２スレッドをソフトウェアプログラム毎のグループにまとめてグループ情報として記憶手段に記憶するグループ化ステップと、前記記憶手段からグループ情報を読み出して、各グループに対するＣＰＵ使用率の指定値に基づいて各グループに属する前記第２スレッドのＣＰＵ使用率を計算し、前記第２スレッドに対してＣＰＵ使用率を制御する制御ステップと、を有することを要旨とする。
【００１９】
請求項６記載のＣＰＵ使用率制御プログラムは、コンピュータを請求項１乃至４のいずれかに記載のＣＰＵ使用率制御装置として機能させることを要旨とする。
【００２０】
以上より、本発明によれば、ソフトウェアプログラムを実行するために実行環境レイヤの第１スレッドを生成して起動し、その第１スレッドが生成される毎に、ＯＳレイヤの第２スレッドを生成して当該第１スレッドに１対１で対応付け、その第２スレッドをソフトウェアプログラム毎のグループにまとめ、各グループに対するＣＰＵ使用率の指定値に基づいて各グループに属する第２スレッドのＣＰＵ使用率を計算し、第２スレッドに対してＣＰＵ使用率を制御するため、ＣＰＵを制御するＯＳレイヤが、当該ＯＳレイヤの第２スレッドを通じて第１スレッドとして起動されるソフトウェアプログラムを間接的に制御可能となることから、ソフトウェアプログラム単位でＣＰＵ使用率を保証することができる。
【発明の効果】
【００２１】
本発明によれば、ソフトウェアプログラム単位でＣＰＵ使用率を保証することができる。
【図面の簡単な説明】
【００２２】
【図１】ＣＰＵ使用率制御装置の機能ブロック構成を示す図である。
【図２】グループ情報の例を示す図である。
【図３】ＣＰＵ使用率の制御フローを示す図である。
【図４】設定画面の例を示す図である。
【図５】Ｊａｖａスレッドのグループ切換フローを示す図である。
【図６】スレッド群グループ化機能部の保持情報（初期状態）を示す図である。
【図７】スレッド群グループ化機能部の保持情報（ＯＳＧｉ起動状態）を示す図である。
【図８】スレッド群グループ化機能部の保持情報（ＣＰＵリソース制御開始状態）を示す図である。
【図９】スレッド群グループ化機能部の保持情報（ＣＰＵリソース制御終了状態）を示す図である。
【図１０】作用効果説明時の参照図である。
【発明を実施するための形態】
【００２３】
以下、本発明を実施する一実施の形態について図面を用いて説明する。但し、本発明は多くの異なる様態で実施することが可能であり、本実施の形態の記載内容に限定して解釈すべきではない。
【００２４】
〔既存技術について〕
本発明は、前述したような既存技術を前提としている。以下、既存技術について更に補足説明する。
【００２５】
ＣＰＵはＯＳによってスケジューリングされており、そのスケジューリングの単位としては、プロセスや、ＯＳレイヤにおけるスレッドであるＬＷＰ（Ｌｉｇｈｔ  Ｗｅｉｇｈｔ  Ｐｒｏｃｅｓｓ）がある。
【００２６】
また、プロセスやＬＷＰはソフトウェアプログラムの処理を時間的に並列に動作させるための仕組みとしてＯＳ内に存在し、ＪａｖａＶＭはＯＳから見ると１つのプロセスとして動作している。一方、ＪａｖａＶＭは、ＪａｖａＶＭ内で処理を時間的に並列に動作させる仕組みとしてＪａｖａスレッドを用意している。ＬＷＰは自身に対応するＪａｖａスレッドを実行するが、ＪａｖａスレッドとＬＷＰは、動作するレイヤが異なることからそれぞれ独立の存在である。
【００２７】
〔ＣＰＵ使用率制御装置の構成について〕
図１は、本実施の形態に係るＣＰＵ使用率制御装置１の機能ブロック構成を示す図である。このＣＰＵ使用率制御装置１は、ＬＷＰ単位ＣＰＵ制御機能部１１と、Ｊａｖａスレッド・ＬＷＰ対応機能部１２と、バンドルスレッド化機能部１３と、スレッド群グループ化機能部１４と、スレッドグループ切替機能部１５と、バンドルＣＰＵ使用率設定部１６とで構成される。以下詳述する。
【００２８】
ＬＷＰ単位ＣＰＵ制御機能部１１は、ＯＳレイヤで動作し、ＬＷＰ単位やＬＷＰのグループ単位でＣＰＵ使用率を制御する機能を有している。具体的には、各ＬＷＰ又はＬＷＰの各グループに対してのＣＰＵ使用時間の比の値を用いてＣＰＵをスケジューリングすることにより、ＣＰＵ使用率を制御する。
【００２９】
尚、ＣＰＵをＯＳに対して直接制御する際には、例えば、Ｌｉｎｕｘ（登録商標）のｃｇｒｏｕｐｓを利用することができる。ｃｇｒｏｕｐｓとは、プロセスやＬＷＰ単位、ＬＷＰのグループ単位でＣＰＵ使用率を制御するＬｉｎｕｘのカーネル機能である。
【００３０】
Ｊａｖａスレッド・ＬＷＰ対応機能部１２は、ＪａｖａＶＭレイヤで動作し、１つのＪａｖａスレッドを生成する毎にそれを実行するための１つのＬＷＰを生成し、ＪａｖａＶＭ上のＪａｖａスレッドをＯＳ上のＬＷＰに１対１で対応させる機能を有している。
【００３１】
バンドルスレッド化機能部１３は、ＯＳＧｉＦＷで動作し、ＯＳＧｉＦＷによって生成されたＪａｖａスレッドがあるバンドルの処理を呼び出す（バンドルを起動等する）際に、そのバンドルを実行するためのＪａｖａスレッドを新規に生成し、そのバンドルをＪａｖａスレッドとして起動する機能を有している。
【００３２】
尚、バンドルの処理を呼び出す処理としては、例えば、あるバンドルのスタートやストップ等のフレームワークから他のバンドルへのイベンティング等である。具体的には、ＯＳＧｉＦＷからバンドルへのコールバックインタフェースとして、ＢｕｎｄｌｅＡｃｔｉｖａｔｏｒ、ＳｅｒｖｉｃｅＦａｃｔｏｒｙ、Ｂｕｎｄｌｅ−、Ｓｅｒｖｉｃｅ−、ＦｒａｍｅｗｏｒｋＬｉｓｔｅｎｅｒ、Ｆｒａｍｅｗｏｒｋ  ｈｏｏｋ  ｓｅｒｖｉｃｅｓ等に対してスレッドを起動することが考えられる。これらには、例えば、バンドルの起動メソッドであるＢｕｎｄｌｅＡｃｔｉｖａｔｏｒ．ｓｔａｒｔ（）が存在する。
【００３３】
また、Ｊａｖａスレッド・ＬＷＰ対応機能部１２によりＪａｖａスレッドはＬＷＰと対応付けられるため、バンドルスレッド化機能部１３は、新規のＪａｖａスレッドを生成すると同時にそれに対応するＬＷＰのＩＤをＯＳから取得することができる。
【００３４】
また、ＯＳＧｉＦＷは、Ｊａｖａスレッドが呼び出そうとしているバンドルのＩＤを取得できるので、バンドルスレッド化機能部１３は、呼び出そうとするバンドルのＩＤを取得し、Ｊａｖａスレッド・ＬＷＰ対応機能部１２によって生成されたＬＷＰのＩＤと紐付けてスレッド群グループ化機能部１４に引き渡す機能も有している。
【００３５】
更に、バンドルスレッド化機能部１３は、バンドルが新たにインストール又はアンインストールされた場合に、それをスレッド群グループ化機能部１４へ通知する機能も有している。ここでの通知情報は、インストール又はアンインストールされたことや、そのバンドルのＩＤである。
【００３６】
スレッド群グループ化機能部１４は、ＯＳレイヤ（他のレイヤでも可）で動作し、バンドルスレッド化機能部１３によってＬＷＰに対応付けられたＪａｖａスレッド群をバンドル毎にグループとして束ねて扱い、ＬＷＰ単位ＣＰＵ制御機能部１１を呼び出す機能を有している。
【００３７】
具体的には、バンドルスレッド化機能部１３から新たなバンドルのインストール情報が通知されると、その新たにインストールされたバンドルのＩＤ毎にグループを生成し、バンドルスレッド化機能部１３からＬＷＰのＩＤとバンドルのＩＤが送られる毎に、つまり新規のＪａｖａスレッドが生成される毎に、そのＬＷＰのＩＤを該当するバンドルＩＤのグループに所属させ、グループ情報として記憶する。
【００３８】
ここで、グループ情報の例を図２に示す。グループ情報には、１つのグループに対応するバンドルのＩＤと、そのグループ（＝バンドル）に含まれるＬＷＰのＩＤと、ユーザにより指定、設定されたグループ（＝バンドル）に対する動作保証用の設定値（例えば、ＣＰＵ使用率）と、グループ（＝バンドル）に設定されたＣＰＵ使用率制御用の設定値とが関連付けて保存されている。
【００３９】
尚、ＣＰＵ使用率制御用の設定値とは、後述するように、動作保証用の設定値に基づいて計算される。そして、上述したｃｇｒｏｕｐｓを利用する場合には、その計算値がｃｐｕ．ｓｈａｒｅｓの値として設定される。尚、ｃｐｕ．ｓｈａｒｅｓとは、ｃｇｒｏｕｐｓにおいて、該当するグループに配分されるＣＰＵ使用時間の整数値である。
【００４０】
課題で説明したように、通常、ＣＰＵをスケジューリングするＯＳは、単一のプロセスで動作しているＪａｖａＶＭ内のバンドルの動作を把握することができない。一方、本実施の形態では、上記のグループ情報を用いてＣＰＵ使用時間をＬＷＰ単位又はＬＷＰのグループ単位で制御するようにしている。ＬＷＰはＪａｖａスレッドに対応付いているため、ＬＷＰを通じてＪａｖａスレッド単位、つまりバンドルという塊の単位で扱うことが可能となり、結果として、特定のバンドルの動作を保証することが可能となる。
【００４１】
尚、図２では、ＯＳから見て単一のプロセスで動作するＪａｖａＶＭのプロセスについて例示しているが、スレッド群グループ化機能部１４は、ＪａｖａＶＭ以外のプロセス（図１の右側に示すような、ＪａｖａＶＭを介することなくＯＳ上で直接動作するプロセス）についても同じグループ情報内で特定のグループで同時に管理している。
【００４２】
ここで、ＯＳレイヤで動作するプロセス（ＬＷＰを含む）をどのグループに所属させるかについて説明しておく。本実施の形態では、以下（１）〜（６）のルールに基づいて所属グループを決定する。
【００４３】
（１）ＪａｖａＶＭ以外のプロセスについては、ある１つのグループ（以下、ルートグループ）に所属させる。これは新たなプロセスが発生するたびに行う。
【００４４】
（２）バンドルスレッド化機能部１３から引き渡されたＬＷＰのＩＤについては、それと同時に引き渡されたバンドルＩＤのグループに所属させる。
【００４５】
（３）いずれかのグループに所属しているＬＷＰが生成したＬＷＰについては、生成元のＬＷＰと同じグループに所属させる。これは、あるＪａｖａスレッドが別のＪａｖａスレッドを生成した場合が該当する。
【００４６】
（４）スレッドグループ切替機能部１５があるＬＷＰを別のバンドルＩＤのグループに所属させるよう指定した場合には、そこで指定されたグループに所属させる。
【００４７】
（５）上記（１）〜（４）以外のＬＷＰは、ルートグループに所属させる。
【００４８】
（６）プロセスやＬＷＰが停止又は消滅した場合は、所属していたグループから削除する。
【００４９】
また、グループやグループ情報は、以下（Ａ）〜（Ｄ）のルールに基づいて生成又は消滅させる。
【００５０】
（Ａ）ルートグループについては、スレッド群グループ化機能部１４の起動時に１つだけ生成する。
【００５１】
（Ｂ）各バンドルＩＤのグループについては、バンドルスレッド化機能部１３からインストール情報が通知された際に生成する。既に保持しているグループと同じバンドルＩＤの場合には生成しない。
【００５２】
（Ｃ）グループやグループ情報については、各バンドルの動作状況やＯＳＧｉＦＷの動作状況とは関係なく保持し続ける。尚、バンドルＩＤのグループに属するＬＷＰのＩＤはバンドルやＯＳＧｉの停止時に削除されるが、それ以外の情報は保持し続ける。
【００５３】
（Ｄ）グループの削除については、以下のいずれかのタイミングで実行する。
【００５４】
（Ｄ−１）ＣＰＵ使用率制御装置１の初期化時。
【００５５】
（Ｄ−２）バンドルスレッド化機能部１３からアンインストール情報の通知を受けた直後。
【００５６】
（Ｄ−３）バンドルスレッド化機能部１３からアンインストール情報の通知を受けてから一定期間後。例えば、１か月後等である。
【００５７】
（Ｄ−４）ＯＳＧｉＦＷの動作停止時に、ルートグループ以外の全てのグループを削除する。
【００５８】
スレッドグループ切替機能部１５は、ＯＳＧｉレイヤで動作し、自身を呼び出したＪａｖａスレッドが所属しているバンドルＩＤのグループを、ＬＷＰのＩＤを利用して他のグループに切り替える機能を有している。この機能は、バンドルに対するインタフェースとして提供される。
【００５９】
具体的には、切替先のバンドルＩＤを引数としてバンドルによりコールされると、スレッドグループ切替機能部１５は、コール元のバンドルのバンドルＩＤと、コール元のＪａｖａスレッドに対応するＬＷＰのＩＤとを取得し、それらを合わせてスレッド群グループ化機能部１４に引き渡すことにより、所属グループを切り換える。
【００６０】
バンドルＣＰＵ使用率設定部１６は、ＯＳＧｉレイヤ（他のレイヤでも可）で動作し、オペレータやエンドユーザ向けの設定用Ｗｅｂユーザインタフェースを持つ機能を有している。例えば、ＧＵＩ生成時にインストール済みのバンドル一覧とそのバンドルの動作状態（動作中・非動作中）をＯＳＧｉＦＷから取得してユーザ端末に表示する。
【００６１】
具体的には、ユーザがあるバンドル（動作状態を問わない）に対して割り当てたいＣＰＵリソースをＣＰＵ使用率（％）で指定し設定すると、その設定内容をスレッド群グループ化機能部１４に投入する。また、合計したＣＰＵ使用率が事前に定めた閾値を超える場合には、ユーザに警告を発する機能も備えている。例えば、ＣＰＵ使用率の合計値が９９％を超えると警告メッセージを表示する等である。
【００６２】
〔ＣＰＵ使用率制御装置の動作について〕
次に、ＣＰＵ使用率制御装置１の動作について説明する。最初に、図３を参照しながら、各バンドルに対するＣＰＵリソースの制御方法について説明する。
【００６３】
まず、バンドルＣＰＵ使用率設定部１６は、ユーザにより選択されたバンドルと、設定入力された当該バンドルに割り当てるＣＰＵ使用率との入力を受け付ける（ステップＳ１０１）。
【００６４】
ここで、その設定画面の例を図４に示す。「バンドルシンボリックネーム」の列がバンドルの一覧を表している。「バンドル状態」の列は各バンドルの動作状態を表しているが、この列は無くてもよい。バンドル状態には動作中（ＡＣＴＩＶＥ）、停止中（ＲＥＳＯＬＶＥＤ）、インストール済みだが未動作（ＩＮＳＴＡＬＬＥＤ）等がある。ユーザは、一覧存在されたどの状態のバンドルに対しても設定することができる。
【００６５】
「最低品質保証ＣＰＵ使用率」の列は、動作保証を行いたいバンドルに対して設定するＣＰＵ使用率（％）の最低値を投入するテキストボックスである。コンピュータの負荷が大きくなった際にも、最低限、この設定値のＣＰＵ使用率が該当するバンドルに与えられることを示している。一方、コンピュータの負荷が小さい場合には、この設定値を超えてＣＰＵを使用する場合もあるし、逆に、設定されたバンドルが処理を行っていない際には、他のバンドルがＣＰＵを使用する場合もある。
【００６６】
「ＣＰＵリソース制御適用フラグ」の列は、ＣＰＵリソース制御機能が有効であるか否かを示している。「制御開始」および「制御終了」の列は、ラジオボタンで選択可能に表示され、ＣＰＵリソース制御機能をＯＮ又はＯＦＦすることができる。最下段の「合計」の行は、「ＣＰＵリソース制御適用フラグ」がＯＮであるバンドルの「最低品質保証ＣＰＵ使用率」によって設定されたＣＰＵ使用率の合計値を表している。
【００６７】
次に、バンドルＣＰＵ使用率設定部１６は、ステップＳ１０１で受け付けられたユーザの設定情報をスレッド群グループ化機能部１４に投入する（ステップＳ１０２）。
【００６８】
ここでの投入情報は、ユーザにより選択され「制御開始」がＯＮとなっているバンドルのＩＤと、それに対応する「最低品質保証ＣＰＵ使用率」である。尚、バンドルの状態がＡＣＴＩＶＥであってもそれ以外であっても投入される。
【００６９】
次に、スレッド群グループ化機能部１４は、各バンドルＩＤの各グループに対し、投入されたＣＰＵ使用率（図２に示した動作保証用の設定値）に対応する、ＬＷＰ単位ＣＰＵ制御機能部１１への設定値（図２に示したＣＰＵ使用率制御用の設定値）を計算し、ＬＷＰ単位ＣＰＵ制御機能部１１に投入する（ステップＳ１０３）。
【００７０】
具体的には、後述するように、ユーザによって指定されたＣＰＵ使用率に基づいてＬＷＰ単位ＣＰＵ制御機能部１１への設定値を計算する。つまり、各グループに属するＬＷＰのＣＰＵ使用率を計算する。
【００７１】
例えば、ＬＷＰ単位ＣＰＵ制御機能部１１が上述したｃｇｒｏｕｐｓを利用する場合、ｃｐｕ．ｓｈａｒｅｓの値を計算することになる。また、Ｌｉｎｕｘのｎｉｃｅを利用する場合には、独自に実装されたＯＳ上のＣＰＵスケジューリング機能を利用して計算することになる。尚、ここでの計算及び投入は、全てのグループに属するＬＷＰに対して、バンドルの状態がＡＣＴＩＶＥであるかどうかとは無関係に行われる。
【００７２】
次に、ＬＷＰ単位ＣＰＵ制御機能部１１は、スレッド群グループ化機能部１４から投入された設定値を用いて、グループ（＝バンドル）に属するＬＷＰのＣＰＵ使用率を制御する（ステップＳ１０４）。
【００７３】
具体的には、ｃｇｒｏｕｐｓのカーネル機能を用いて、各グループ（＝バンドル）に属しているＬＷＰのＣＰＵ使用時間の比が、各グループ（＝バンドル）に投入された「最低品質保証ＣＰＵ使用率」の比と同等になるように、コンピュータ内のＣＰＵをスケジューリングする。尚、ｃｇｒｏｕｐｓでは、プロセスグループ毎にｃｐｕ．ｓｈａｒｅｓとして与えられた整数の比に応じてＣＰＵ使用時間を相対的に配分する制御を行う機能を有している。
【００７４】
但し、グループに属するＬＷＰが１つも存在しない場合には、そのグループに対してはＣＰＵスケジューリングを行わない。このとき、スケジューリングは行うが、該当するＬＷＰが１つも存在しないので、次のスケジューリングにスキップするようにしても構わない。
【００７５】
以上の処理により、各バンドルのＣＰＵ使用時間が、ステップＳ１０１で投入されたＣＰＵ使用率となるように制御されることになる。これにより、特定のバンドルの動作を保証することができる。
【００７６】
続いて、図５を参照しながら、Ｊａｖａスレッドのグループ切替方法について説明する。但し、いくつかのバンドルが既に動作しており、いくつかのバンドルには「最低品質保証ＣＰＵ使用率」が設定されているとする。
【００７７】
まず、動作中のバンドル１が、切替先のバンドルＩＤを引数としてスレッドグループ切替機能部１５をコールする（ステップＳ２０１）。このとき、バンドル１からは、コールを行ったＪａｖａスレッドをどの動作中の他のバンドルに所属させるかの指定情報が投入される。
【００７８】
次に、スレッドグループ切替機能部１５は、コール元（切換元）のバンドルのバンドルＩＤと、コール元のバンドルのＪａｖａスレッドに対応するＬＷＰのＩＤとを取得し、切替先のバンドルのバンドルＩＤと共に切換情報としてスレッド群グループ化機能部１４へ投入する（ステップＳ２０２）。
【００７９】
次に、スレッド群グループ化機能部１４は、切換元のバンドルＩＤのグループに所属するＬＷＰのＩＤを、切換先のバンドルＩＤのグループに移動する（ステップＳ２０３）。
【００８０】
次に、スレッド群グループ化機能部１４は、ステップＳ２０３で更新された、全てのグループとそれに属するＬＷＰのＩＤに関する情報をＬＷＰ単位ＣＰＵ制御機能部１１へ通知する（ステップＳ２０４）。
【００８１】
最後に、ＬＷＰ単位ＣＰＵ制御機能部１１は、通知された更新後の情報に基づいてグループに属するＬＷＰのＣＰＵ使用率を制御する（ステップＳ２０５）。
【００８２】
〔スレッド群グループ化機能部について〕
続いて、スレッド群グループ化機能部１４について詳述する。図６〜図９は、スレッド群グループ化機能部１４が保持する保持情報の遷移を示している。
【００８３】
図６に、ＪａｖａＶＭ及びＯＳＧｉが起動する前の状態を示す。この初期状態では、ＯＳ上の全てのプロセス（ＬＷＰを含む）はルートグループに属している。
【００８４】
ここで、そのルートグループに設定されているｃｐｕ．ｓｈａｒｅｓの値を固定値Ｎとする。初期状態であることから、その固定値Ｎを任意の値で設定してもよいが、他のバンドルへ設定するＣＰＵ使用率とのバランスを考慮して、ここでは１０２４とする。以下の例ではこの値を基準に計算を行う。
【００８５】
また、図６ではルートグループ以外のグループが存在しないが、過去にＯＳＧｉＦＷが起動しており、スレッド群グループ化機能部１４がグループを既に生成していた場合であって、かつ、ＯＳＧｉが終了してもグループを保持するような実装の場合には、ルートグループ以外のグループも存在しても構わない。
【００８６】
次に、図７に、ＪａｖａＶＭ及びＯＳＧｉが起動した後の状態を示す。インストールされたバンドル毎にグループ（図中ではＰｒｏｃｅｓｓＧｒｏｕｐと表記）を作成する。すなわち、バンドルスレッド化機能部１３によりインストールされたバンドルのＩＤとＬＷＰのＩＤが通知されるので、それらを対応付けたグループ情報を生成する。
【００８７】
そして、過去にバンドルＣＰＵ使用率設定部１６により設定され、スレッド群グループ化機能部１４がグループ情報を既に保持している場合は、その情報を参照し、ＣＰＵリソースの制御非対象のバンドルのグループに対しては、ｃｐｕ．ｓｈａｒｅｓの値としてルートグループと同じ１０２４の固定値Ｎを設定する。
【００８８】
一方、ＣＰＵリソースの制御対象のバンドルのグループに対しては、「ＣＰＵリソース制御対象バンドルの最低品質保証ＣＰＵ使用率」と「ＣＰＵリソース制御非対象の全てのプロセス（ＬＷＰを含む）が利用可能なＣＰＵ使用率」の比が、「ＣＰＵリソース制御対象バンドルのｃｐｕ．ｓｈａｒｅｓの値」と「ＣＰＵリソース制御非対象の全てのプロセス（ＬＷＰを含む）に設定されているｃｐｕ．ｓｈａｒｅｓの値の合計」の比と同一になるように、例えば、以下の式（１）を用いて「ＣＰＵリソース制御対象バンドルのｃｐｕ．ｓｈａｒｅｓの値」を計算する。
【数１】
2014164662.tif 000003
【００８９】
尚、ＣＳは「ＣＰＵリソース制御対象バンドルのｃｐｕ．ｓｈａｒｅｓの値」であり、Ｇｃｐｕは「ＣＰＵリソース制御対象バンドルの最低品質保証ＣＰＵ使用率」であり、ｎはＣＰＵリソース制御非対象のバンドルの数であり、ＫはＣＰＵリソース制御対象バンドルの数であり、ｉはＣＰＵリソース制御対象バンドルの識別子である。
【００９０】
尚、「ＣＰＵリソース制御非対象の全てのプロセス（ＬＷＰを含む）が利用可能なＣＰＵ使用率」は右辺分母に相当している。また、「ＣＰＵリソース制御非対象の全てのプロセス（ＬＷＰを含む）に設定されているｃｐｕ．ｓｈａｒｅｓの値の合計」は、右辺分子の括弧部分に相当している。ＣＰＵリソース制御非対象バンドルにはそれぞれ１０２４の固定値Ｎが設定され、ルートグループにも同じ固定値Ｎが固定的に設定されているため、当該括弧部分に示すような式としている。尚、この計算は、バンドルの動作状態に関わらず計算される。
【００９１】
最後に、図８に、ＣＰＵリソースの制御を開始した状態を示し、図９に、ＣＰＵリソースの制御を終了した状態を示す。どちらの場合であっても、全てのバンドルのグループに対してｃｐｕ．ｓｈａｒｅｓの値を再計算し直す。また、バンドルのグループが増減した場合にも、全てのグループに対して再計算する。
【００９２】
以上より、本実施の形態によれば、バンドルを実行するためにＪａｖａスレッドを生成して起動し、そのＪａｖａスレッドが生成される毎に、ＯＳレイヤのＬＷＰを生成して当該Ｊａｖａスレッドに１対１で対応付け、そのＬＷＰをバンドル毎のグループにまとめ、各グループに対するＣＰＵ使用率の指定値に基づいて各グループに属するＬＷＰのＣＰＵ使用率を計算し、ＬＷＰに対してＣＰＵ使用率を制御するので、図１０に示すように、ＣＰＵを制御するＯＳレイヤが、当該ＯＳレイヤのＬＷＰを通じてＪａｖａスレッドとして起動されるバンドルを間接的に制御可能となることから、バンドル単位でＣＰＵ使用率を保証することができる。
【００９３】
最後に、本実施の形態では、ソフトウェアプログラム実行環境としてＪａｖａＶＭを用い、ソフトウェアプログラムとしてバンドル用いて説明したが、ＯＳ上で単一プロセスとして動作するソフトウェアプログラム実行環境と、その実行環境上で動作するソフトウェアプログラムとを具備するコンピュータであれば、同様に適用することができ、同様の効果を得ることができる。
【００９４】
また、本実施の形態で説明したＣＰＵ使用率制御装置１は、メモリやＣＰＵを備えたコンピュータで実現することができる。また、その処理はプログラムによって実行可能である。
【符号の説明】
【００９５】
１…ＣＰＵ使用率制御装置
１１…ＬＷＰ単位ＣＰＵ制御機能部
１２…Ｊａｖａスレッド・ＬＷＰ対応機能部
１３…バンドルスレッド化機能部
１４…スレッド群グループ化機能部
１５…スレッドグループ切替機能部
１６…バンドルＣＰＵ使用率設定部
Ｓ１０１〜Ｓ１０４、Ｓ２０１〜Ｓ２０５…ステップ
【図１】
2014164662.tif 000004
【図２】
2014164662.tif 000005
【図３】
2014164662.tif 000006
【図４】
2014164662.tif 000007
【図５】
2014164662.tif 000008
【図６】
2014164662.tif 000009
【図７】
2014164662.tif 000010
【図８】
2014164662.tif 000011
【図９】
2014164662.tif 000012
【図１０】
2014164662.tif 000013