(57)【要約】【課題】他のアプリケーション実行プロセスを不要に制限することなく、ガーベジコレクションが効率的に実行されるように優先度を制御する。【解決手段】充足率計算部１２は、ＧＣ処理を実行するプロセスのスレッド数が異なる区間毎に、スレッド数及びコア数に応じて計算した区間充足率に基づいて、要求に対してＣＰＵ資源が割り当てられた割合を示す全体充足率を計算する。全体充足率が所定値以下の場合に、優先度制御部１４が、ＧＣ処理を実行するプロセスと同時に実行される他のアプリケーション実行プロセスの優先度を下げる。【選択図】図１
2015022504.tif 000002
【特許請求の範囲】
【請求項１】
複数のコアを有する演算装置により実行される複数の同一または異なるアプリケーションの各々を実行する複数のプロセスのうち、ガーベジコレクション処理を実行するプロセスからの要求に対して、前記ガーベジコレクション処理全体に割り当てられた前記演算装置の割合を示す全体充足率を、前記ガーベジコレクション処理を実行したプロセスにおけるスレッド数が異なる区間毎に、該区間で動作するスレッド数及び前記複数のコア数に応じて計算した区間充足率に基づいて計算する充足率計算部と、
前記充足率計算部で計算した全体充足率が所定値以下の場合に、前記ガーベジコレクション処理を実行するプロセスと同時に実行される他のアプリケーション実行プロセスの優先度を、前記ガーベジコレクション処理を実行するプロセスの優先度に対して相対的に下げる優先度制御部と、
を含む情報処理装置。
【請求項２】
前記充足率計算部は、対象区間で動作する各スレッドに対して前記演算装置から実際に割り当てられた時間の総和を、前記対象区間のスレッド数及び前記複数のコア数の小さい方で除した商を、前記対象区間の実行時間で除した商を、前記区間充足率として計算する請求項１記載の情報処理装置。
【請求項３】
前記充足率計算部は、前記ガーベジコレクション処理における各区間の区間充足率と該区間の実行時間との積を、前記ガーベジコレクション処理全体の実行時間で除した商を、前記全体充足率として計算する請求項２記載の情報処理装置。
【請求項４】
前記優先度制御部は、前記全体充足率が所定値以下となるプロセスから、ガーベジコレクション処理を実行することの通知を受けた際に、前記他のアプリケーション実行プロセスの優先度を相対的に下げ、前記全体充足率が所定値以下となるプロセスから、ガーベジコレクション処理の実行が終了したことの通知を受けた際に、前記他のアプリケーション実行プロセスの優先度をガーベジコレクション処理の実行前の状態に戻すように制御する請求項１〜請求項３のいずれか１項記載の情報処理装置。
【請求項５】
コンピュータに、
複数のコアを有する演算装置により実行される複数の同一または異なるアプリケーションの各々を実行する複数のプロセスのうち、ガーベジコレクション処理を実行中のプロセスからの要求に対して、前記ガーベジコレクション処理全体に割り当てられた前記演算装置の割合を示す全体充足率を、前記ガーベジコレクション処理を実行中のプロセスにおけるスレッド数が異なる区間毎に、該区間で動作するスレッド数及び前記複数のコア数に応じて計算した区間充足率に基づいて計算し、
計算した全体充足率が所定値以下の場合に、前記ガーベジコレクション処理を実行するプロセスと同時に実行される他のアプリケーション実行プロセスの優先度を、前記ガーベジコレクション処理を実行するプロセスの優先度に対して相対的に下げる
ことを含む処理を実行させる情報処理方法。
【請求項６】
コンピュータに、
複数のコアを有する演算装置により実行される複数のアプリケーションの各々を実行する複数のプロセスのうち、ガーベジコレクション処理を実行中のプロセスからの要求に対して、前記ガーベジコレクション処理全体に割り当てられた前記演算装置の割合を示す全体充足率を、前記ガーベジコレクション処理を実行中のプロセスにおけるスレッド数が異なる区間毎に、該区間で動作するスレッド数及び前記複数のコア数に応じて計算した区間充足率に基づいて計算し、
計算した全体充足率が所定値以下の場合に、前記ガーベジコレクション処理を実行するプロセスと同時に実行される他のアプリケーション実行プロセスの優先度を、前記ガーベジコレクション処理を実行するプロセスの優先度に対して相対的に下げる
ことを含む処理を実行させるための情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、及び情報処理プログラムに関する。
【背景技術】
【０００２】
Ｊａｖａ（登録商標）等のプログラム言語によるアプリケーションの実行環境では、アプリケーション実行時に不要となったメモリ等のオブジェクトを回収するガーベジコレクション（ＧＣ）機能が、プログラムの実行環境側に備えられている。ＧＣ処理により、プログラムのコーディングの際は、オブジェクトの解放処理についての考慮が不要となる。一方で、ＧＣ処理の実行時は、アプリケーションの実行が一時的に停止し、その間のトランザクションも中断されるため、アプリケーションの実行速度が低下する。
【０００３】
ＧＣの処理時間は、一般的に次の２つの要因に大きく影響を受ける。一つ目は、生存オブジェクトの量やその参照関係など、アプリケーションの作りやオブジェクトを保持する領域（ヒープ領域）のサイズなどによるプロセス内に閉じた要因によるものである。生存オブジェクトの量が多い場合、またその参照関係が複雑な場合は、ＧＣの処理時間が長くなる。
【０００４】
二つ目は、他のアプリケーションプロセスの実行状況によるプロセス外の要因である。ＧＣ処理の実行時に、バックグラウンドで同時に高負荷の処理が実行されているような場合は、ＧＣ処理に対するＣＰＵ資源の割り当てが少なくなり、ＧＣの処理時間が長くなる。
【０００５】
ＧＣ処理時間の短縮のためには、上記２つの要因による影響を把握する必要がある。この把握に用いる従来の技術として、ＧＣログの出力機能、ＯＳなどの監視ツールがある。ＧＣログの出力機能は、ＧＣ処理時間やＧＣ中の当該プロセスのＣＰＵ使用率、ＯＳなどの監視ツールではシステム全体の稼動状況を確認することができる。効率的にＧＣ処理を実行するためには、これらの情報をもとに、アプリケーションの改良、ヒープサイズチューニング、システム構成の見直し等が必要になる。
【０００６】
このようなＧＣ処理によるシステムの実行速度の低下を低減するために、ＧＣ処理が起動するまでの時間を延ばすと共に自動回収により回収されるデータ量を増大させるスレッドスケジューリング方式が提案されている。この方式では、スレッド毎に割り付けたメモリ量及びデータ参照回数を計測して、データ参照回数及びデータ割付量が大きいスレッドから優先的にスケジューリングしている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００３−１０８３８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記の従来技術は、プロセス内に閉じた要因によるＧＣ処理時間への影響を把握するものであり、ヒープのチューニングや、アプリケーション改修による静的な改善が検討できる。しかし、従来技術の手法では、他のアプリケーションプロセスの影響など、ＧＣ実行の時々で状況が異なるプロセス外の要因を把握することはできず、静的な策が打ち難い、という問題がある。
【０００９】
また、プロセス外の要因として、バックグラウンドで実行される他のアプリケーションプロセスが高負荷状態となっていることなどを検出することが考えられる。他のアプリケーションプロセスが高負荷状態となっている場合には、ＧＣ処理時間が長時間化する。そこで、このような場合に、自動的に他のアプリケーションプロセスの優先順位を下げ、ＧＣ処理を実行するプロセスに優先的にＣＰＵ資源を割り当てるように、優先度を制御する策が挙げられる。
【００１０】
この策の実現のためには、ＧＣ処理が、他のアプリケーションプロセスの影響を受けているか否かの把握が必要になるが、これは、ＣＰＵの使用状況から判断する。しかし、従来のプロセス単位によるＣＰＵの使用状況を示す指標では、ＧＣ処理に実際に割り当てられたＣＰＵ資源を適切に把握することができない場合があり、優先度制御の判断基準としては十分ではない。このため、ＧＣ処理を優先させるために、他のアプリケーションプロセスが不要に制限されてしまう場合もある。
【００１１】
本発明は、一つの側面として、他のアプリケーション実行プロセスを不要に制限することなく、ガーベジコレクションが効率的に実行されるように優先度を制御することが目的である。
【課題を解決するための手段】
【００１２】
１つの案は、複数のコアを有する演算装置により実行される複数の同一または異なるアプリケーションの各々を実行する複数のプロセスのうち、ガーベジコレクション処理を実行するプロセスの全体充足率を計算する充足率計算部を備える。全体充足率とは、ガーベジコレクション処理を実行するプロセスからの要求に対して、前記ガーベジコレクション処理全体に割り当てられた前記演算装置の割合を示すものである。充足率計算部は、全体充足率を、前記ガーベジコレクション処理を実行したプロセスにおけるスレッド数が異なる区間毎に、該区間で動作するスレッド数及び前記複数のコア数に応じて計算した区間充足率に基づいて計算する。また、開示の技術は、前記充足率計算部で計算した全体充足率が所定値以下の場合に、前記ガーベジコレクション処理を実行するプロセスと同時に実行される他のアプリケーション実行プロセスの優先度を下げる優先度制御部を備える。優先度制御部は、前記ガーベジコレクション処理を実行するプロセスの優先度に対して、他のアプリケーション実行プロセスの優先度を相対的に下げる。
【発明の効果】
【００１３】
一つの側面として、他のアプリケーション実行プロセスを不要に制限することなく、ガーベジコレクションが効率的に実行されるように優先度を制御することができる、という効果を有する。
【図面の簡単な説明】
【００１４】
【図１】本実施形態における情報処理装置の構成の一例を示すブロック図である。
【図２】全体充足率の計算を説明するための図である。
【図３】全体充足率の計算を説明するための他の図である。
【図４】情報処理装置として機能するコンピュータの一例を示す概略ブロック図である。
【図５】他のプロセスが高負荷である場合における各プロセスの動作の一例を示す図である。
【図６】本実施形態における充足率計算処理を示すフローチャートである。
【図７】本実施形態における優先度管理処理を示すフローチャートである。
【図８】管理テーブルの一例を示す図である。
【図９】本実施形態における優先度操作処理を示すフローチャートである。
【図１０】優先度制御後の各プロセスの動作の一例を示す図である。
【図１１】他のプロセスがより高負荷である場合における各プロセスの動作の一例を示す図である。
【図１２】従来の指標と本実施形態の全体充足率との比較を示す図である。
【発明を実施するための形態】
【００１５】
以下、図面を参照して開示の技術に係る実施形態の一例を詳細に説明する。
【００１６】
本実施形態に係る情報処理装置１０は、例えば図１に示すように、複数のクライアント端末２０、Ｗｅｂサーバ３０、及びアプリケーションサーバを含む情報処理システム１００におけるアプリケーションサーバとして用いることができる。
【００１７】
情報処理装置１０は、複数のコアを有するＣＰＵまたは１つのコアを有する複数のＣＰＵにより、同時に複数の同一または異なるアプリケーションを実行する。複数のコアを有するＣＰＵまたは１つのコアを有する複数のＣＰＵは、開示の技術の演算装置の一例である。情報処理装置１０では、アプリケーションの各々を実行する複数のプロセスが用意される。各プロセス内では、複数のスレッドが実行され、各スレッドにＣＰＵ資源が割り当てられる。ＣＰＵ資源の割り当ては、各プロセスの優先度に応じて決定される。
【００１８】
情報処理装置１０は、複数のプロセスの各々の中で機能する充足率計算部１２と、各プロセスの優先度を制御する優先度制御部１４とを含んでいる。
【００１９】
充足率計算部１２は、各プロセスにおいてガーベジコレクション（ＧＣ）処理を実行した際に、ＧＣ処理実行のためにプロセスが要求したＣＰＵ資源に対して、ＧＣ処理全体に実際に割り当てられたＣＰＵ資源の割合を示す全体充足率を計算する。
【００２０】
ここで、ＧＣ処理は、例えば図２に示すように、単一スレッドで動作する区間（図２中の区間１及び区間３）、複数スレッドで動作する区間（図２中の区間２）など、動作するスレッド数が異なる区間が混在している。例えば単一スレッドで動作する区間では、特定の１つのコアのみを利用する。また、複数スレッドで動作する区間では、複数のコアがスレッド数に応じて各スレッドに割り当てられる。そのため、従来の指標では、動作するスレッド数が異なる区間が混在する処理に対して実際にＣＰＵ資源がどの程度割り当てられたかを適切に把握することができない。なお、従来の指標とは、例えば「ＣＰＵ時間／実時間」や、「プロセッサの稼動サイクル／ＣＰＵサイクル」などにより算出した、ＧＣ処理全体を１つの区間として捉え、プロセス単位でどの程度のＣＰＵ資源が割り当てられたかを示す指標である。
【００２１】
そこで、本実施形態における充足率計算部１２では、まず、ＧＣ処理を実行したプロセスにおけるスレッド数が異なる区間毎に、各区間で動作するスレッド数及び情報処理装置１０が備えるコア数に応じて区間充足率を計算する。そして、計算した区間充足率に基づいて、ＧＣ処理全体の全体充足率を計算する。
【００２２】
具体的には、充足率計算部１２は、まず、下記（１）式により、ＧＣ処理を実行したプロセスにおけるスレッド数が異なる区間毎の区間充足率を計算する。
区間充足率［％］＝
（ＣＰＵ時間の総和／スレッド数かコア数の小さい方）／実時間＊１００    （１）
ここで、ＣＰＵ時間とは、各スレッドに対してＣＰＵから実際に割り当てられた時間であり、実時間とは、各スレッドの処理開始から終了までの実際の経過時間である。
【００２３】
なお、単一スレッドの場合には、単一スレッドのＣＰＵ時間＝ＣＰＵ時間の総和であり、また、「スレッド数かコア数の小さい方」は“１”となるため、上記（１）式は下記（２）式に示すように簡略化することができる。
単一スレッドの区間充足率［％］＝ＣＰＵ時間／実時間＊１００    （２）
【００２４】
次に、充足率計算部１２は、下記（３）式により、ＧＣ処理全体の全体充足率を計算する。
全体充足率［％］＝
（（区間充足率＊区間の実時間）の総和）／ＧＣ処理全体の実時間    （３）
【００２５】
ＧＣ処理の全体充足率の計算について、図２を用いてより具体的に説明する。図２に示すＧＣ処理の一例では、ＧＣスレッド１のみが動作する区間１、ＧＣスレッド２〜５の４つのスレッドが同時に動作する区間２、及び再びＧＣスレッド１のみが動作する区間３の３つの区間を有する。すなわち、ＧＣスレッド１は単一のスレッドだけが動作するフェーズ（他のＧＣスレッドと同時に処理が行われる事はない）である。また、ＧＣスレッド２〜５は複数のスレッドが動作するフェーズ（パラレル実行区間）で処理が行われる。各ＧＣスレッドに対応した破線矢印は、各スレッドに対してＣＰＵ資源の割り当て要求があった区間を表しており、各破線矢印の上部に、実際に割り当てられたＣＰＵ時間を記している。破線矢印の無い区間は、該当のＧＣスレッドに対して、ＣＰＵ資源の割り当て要求がないことを表す。また、各区間の実時間を実線矢印の上部に記している。この記述方法は、後述の図５、図１０、及び図１１でも同様である。
【００２６】
また、図２では、４つのコアを有するＣＰＵを搭載した情報処理装置１０で、このＣＰＵ資源が各スレッドに対し均等に割り当てられる動作を前提としている。
【００２７】
図２の例では、ＧＣ開始〜ＧＣ終了までの実時間は１０秒、区間１で１つのスレッドに、区間２で４つのスレッドに、区間３で１つのスレッドにＣＰＵ資源が割り当てられている。この場合、各区間の区間充足率は、（１）式または（２）式により、以下のように計算される。
【００２８】
区間１の区間充足率［％］＝ＣＰＵ時間／実時間＊１００
＝１／１＊１００＝１００［％］
区間２の区間充足率［％］
＝（ＣＰＵ時間の総和／スレッド数かコア数の小さい方）／実時間＊１００
＝（４＊４／４）／８＊１００＝５０［％］
区間３の区間充足率［％］＝ＣＰＵ時間／実時間＊１００
＝１／１＊１００＝１００［％］
全体充足率［％］
＝（（区間充足率＊区間の実時間）の総和）／ＧＣ処理全体の実時間
＝（１００＊１＋５０＊８＋１００＊１）／（１＋８＋１）＝６０［％］
【００２９】
なお、従来のＧＣ処理全体のＣＰＵ使用率を用いた指標を計算すると、下記に示すようになる。
従来のＧＣ処理のＣＰＵ使用率
＝（全スレッドのＣＰＵ時間の総和／コア数）／ＧＣ処理全体の実時間＊１００
＝（（１＋４＊４＋１）／４）／１０＊１００＝４５［％］
【００３０】
また、他の例で、例えば図３に示すように、ＣＰＵ時間が各々１０秒のＧＣスレッド１及びＧＣスレッド２が実行されるＧＣ処理の例で説明する。図３のＧＣ処理では、ＧＣ処理全体の実時間は１０秒である。また、情報処理装置１０が備えるコア数は、上記の場合と同様に４つである。図３では、ＧＣ処理の全体においてスレッド数が２つであるため、全体で１区間となる。すなわち、区間充足率＝全体充足率となるため、全体充足率は、下記に示すようになる。
全体充足率（＝区間充足率）［％］
＝（ＣＰＵ時間の総和／スレッド数かコア数の小さい方）／実時間＊１００
＝（１０＊２／２）／１０＊１００＝１００［％］
【００３１】
一方、上記と同様の従来のＣＰＵ使用率を計算すると、下記に示すようになる。
従来のＧＣ処理のＣＰＵ使用率
＝（全スレッドのＣＰＵ時間の総和／コア数）＊ＧＣ処理全体の実時間＊１００
＝（（１０＊２）／４）／１０＊１００＝５０［％］
【００３２】
このように、従来の指標では、実際にＣＰＵ資源が１００％割り当てられているにもかかわらず、その値を適切に計算することができない。一方、本実施形態の全体充足率の計算方法によれば、ＣＰＵ資源が実際に割り当てられた割合を、より適切に計算することができる。
【００３３】
充足率計算部１２により計算された全体充足率が低い場合、ＧＣ処理を実行するプロセス以外の他のアプリケーション実行プロセス（以下、「他のプロセス」という）の実行状況に起因し、ＧＣ処理が長時間化していると判断できる。そこで、充足率計算部１２は、計算した全体充足率が所定値以下の場合には、ＧＣ処理実行時のＣＰＵ資源の割り当てが不足していることを示す低充足率通知を優先度制御部１４に通知する。所定値は、情報処理装置１０で行う処理の内容や求める性能等に応じて適宜決定しておく。
【００３４】
優先度制御部１４は、ＧＣ処理実行時の各プロセスの優先度を制御する。具体的には、過去にＧＣ処理実行時の全体充足率が所定値以下となったプロセスで、ＧＣ処理を開始するか否かを監視する。全体充足率が所定値以下となったプロセスで、ＧＣ処理を開始する場合、優先度制御部１４は、ＧＣ処理を実行するプロセスと同時に実行される他のプロセスの優先度を下げる。なお、他のプロセスの優先度を下げるとは、ＧＣ処理を実行するプロセスの優先度に対して、他のプロセスの優先度を相対的に下げればよく、他のプロセスの優先度自体を下げてもよいし、ＧＣ処理を実行するプロセスの優先度を上げてもよい。これにより、他のプロセスより、ＧＣ処理を実行するプロセスに対して優先的にＣＰＵ資源が割り当てられる。
【００３５】
また、優先度制御部１４は、ＧＣ処理が終了した場合には、優先度を下げていた他のプロセスの優先度を、優先度を下げる前の状態に戻す。
【００３６】
情報処理装置１０は、例えば図４に示すコンピュータ４０で実現することができる。コンピュータ４０はＣＰＵ４２、メモリ４４、不揮発性の記憶部４６、入出力インターフェース（Ｉ／Ｆ）４７、及びネットワークＩ／Ｆ４８を備えている。ＣＰＵ４２、メモリ４４、記憶部４６、入出力Ｉ／Ｆ４７、及びネットワークＩ／Ｆ４８は、バス４９を介して互いに接続されている。
【００３７】
記憶部４６はＨＤＤ（Hard Disk Drive）やフラッシュメモリ等によって実現できる。記録媒体としての記憶部４６には、コンピュータ４０を情報処理装置１０として機能させるための情報処理プログラム５０が記憶されている。ＣＰＵ４２は、情報処理プログラム５０を記憶部４６から読み出してメモリ４４に展開し、情報処理プログラム５０が有するプロセスを順次実行する。
【００３８】
情報処理プログラム５０は、充足率計算プロセス５２、及び優先度制御プロセス５４を有する。
【００３９】
ＣＰＵ４２は、充足率計算プロセス５２を実行することで、図１に示す充足率計算部１２として動作する。また、ＣＰＵ４２は、優先度制御プロセス５４を実行することで、図１に示す優先度制御部１４として動作する。これにより、情報処理プログラム５０を実行したコンピュータ４０が、情報処理装置１０として機能することになる。
【００４０】
なお、情報処理装置１０は、例えば半導体集積回路、より詳しくはＡＳＩＣ（Application Specific Integrated Circuit）等で実現することも可能である。
【００４１】
次に、本実施形態に係る情報処理装置１０の作用について説明する。ここでは、図５に示すように、情報処理装置１０上で２つのプロセス（プロセス１及びプロセス２）が実行される場合を例に説明する。また、情報処理装置１０は、８つのコアを有するＣＰＵを搭載し、このＣＰＵ資源が各スレッドに対し均等に割り当てられるものとする。情報処理装置１０では、各プロセスにおいて、図６に示す充足率計算処理が実行される。また、充足率計算処理と並行して、情報処理装置１０において、図７に示す優先度管理処理及び図９に示す優先度操作処理を含む優先度制御処理が実行される。
【００４２】
まず、図６に示す充足率計算処理のステップ１００で、各プロセス内で、アプリケーションの処理を実行するアプリスレッド（アプリケーションスレッド）による処理が実行開始される。図５の例では、プロセス１において、アプリスレッド１〜４の処理が実行開始し、プロセス２において、アプリスレッド１〜４の処理が実行開始する。
【００４３】
次に、ステップ１０２で、各プロセスにおいてアプリケーションを実行中であることを管理するためのプロセス登録依頼を、各プロセスから優先度制御部１４へ通知する。
【００４４】
次に、ステップ１０４で、各プロセスは、ＧＣ処理の実行要求が発生したか否かを判定する。ＧＣ処理の実行要求が発生した場合には、ステップ１０６へ移行し、発生していない場合には、ステップ１１８へ移行する。ここでは、図５に示すように、プロセス１においてＧＣ処理の実行要求が発生するものとする。
【００４５】
ステップ１０６では、ＧＣ処理の実行要求が発生したプロセスは、ＧＣ処理を開始することを優先度制御部１４へ通知し、次のステップ１０８で、ＧＣスレッドによりＧＣ処理を実行する。図５の例では、プロセス１において、ＧＣスレッド１〜５により、ＧＣ処理が実行される。図５に示すプロセス１におけるＧＣ処理は、ＧＣスレッド１のみが動作する区間４、ＧＣスレッド２〜５の４つのスレッドが同時に動作する区間５、及び再びＧＣスレッド１のみが動作する区間６の３つの区間を有する。ＧＣ処理が実行されている間は、アプリスレッドの実行は停止される。
【００４６】
次に、ステップ１１０で、ＧＣ処理を実行したプロセスは、ＧＣ処理が終了したことを確認し、ＧＣ処理が終了したことを、優先度制御部１４へ通知する。ＧＣ処理が終了すると、アプリスレッドの実行を再開する。
【００４７】
次に、ステップ１１２で、プロセス内の充足率計算部１２は、ＧＣ処理実行時の全体充足率を、上記（１）式〜（３）式により計算する。図５の例では、プロセス１でのＧＣ処理実行時に、プロセス２の区間７において、アプリスレッド１〜４に加え、アプリスレッド５〜１２も動作し、その後再びアプリスレッド１〜４のみが動作する状態に戻るものとする。すなわち、プロセス１におけるＧＣ処理の区間５と同じ時間帯に、他のプロセスであるプロセス２の区間７においてアプリスレッドの多重度が上がり、プロセス２が高負荷の状態で動作している。
【００４８】
この場合の全体充足率は、下記のように計算される。
区間４の区間充足率［％］＝ＣＰＵ時間／実時間＊１００
＝１／１＊１００＝１００［％］
区間５の区間充足率［％］
＝（ＣＰＵ時間の総和／スレッド数かコア数の小さい方）／実時間＊１００
＝（４＊４／４）／８＊１００＝５０［％］
区間６の区間充足率［％］＝ＣＰＵ時間／実時間＊１００
＝１／１＊１００＝１００［％］
全体充足率［％］
＝（（区間充足率＊区間の実時間）の総和）／ＧＣ処理全体の実時間
＝（１００＊１＋５０＊８＋１００＊１）／（１＋８＋１）＝６０［％］
【００４９】
次に、ステップ１１４で、充足率計算部１２が、上記ステップ１１２で計算した全体充足率が予め定めた所定値以下か否かを判定する。全体充足率が所定値以下の場合には、ＧＣ処理実行時のＣＰＵ資源の割り当てが不足していると判定して、ステップ１１６へ移行し、低充足率通知を優先度制御部１４へ通知し、ステップ１１８へ移行する。全体充足率が所定値を超えている場合には、ステップ１１６をスキップして、ステップ１１８へ移行する。
【００５０】
ステップ１１８では、プロセスで実行しているアプリケーションを終了するか否かを判定する。アプリケーションを終了する場合には、ステップ１２０へ移行し、終了しない場合には、ステップ１０４へ戻る。
【００５１】
ステップ１２０では、各プロセスでのアプリケーションの実行が終了したことを管理するためのプロセス削除依頼を、各プロセスから優先度制御部１４へ通知して、充足率計算処理を含む各プロセスを終了する。
【００５２】
次に、図７に示す優先度管理処理について説明する。優先度制御部１４は、例えば図８に示すような管理テーブルを用いて、優先度制御に必要な情報を管理することにより、各プロセスの優先度を制御することができる。図８の例では、各プロセスがＧＣ処理を実行中か否かを示すＧＣ実行中フラグ、及び低充足率通知が通知されたプロセスか否かを示す低充足率フラグを管理する。また、他のプロセスにおけるＧＣ処理の実行により優先度を下げたプロセスか否かを示す優先度低下中フラグを管理する。
【００５３】
図７に示す優先度管理処理のステップ１４０で、優先度制御部１４が、プロセスから何らかの通知があったか否かを判定する。通知がない場合には、通知があるまで本ステップの判定を繰り返す。通知があった場合には、ステップ１４２へ移行する。
【００５４】
ステップ１４２では、優先度制御部１４が、プロセスからの通知が、プロセス登録依頼またはプロセス削除依頼かを判定する。プロセス登録依頼またはプロセス削除依頼の通知の場合には、ステップ１４２へ移行し、いずれの通知でもない場合には、ステップ１４４へ移行する。
【００５５】
ステップ１４２では、通知がプロセス登録依頼であった場合には、優先度制御部１４が、例えば図８に示すような管理テーブルのエントリ番号に対応付けて、プロセス登録依頼を通知したプロセスのプロセスＩＤを登録する。また、通知がプロセス削除依頼であった場合には、優先度制御部１４が、プロセス削除依頼を通知したプロセスのプロセスＩＤに対応するレコードを、管理テーブルから削除する。
【００５６】
一方、ステップ１４４では、優先度制御部１４が、プロセスからの通知が、ＧＣ処理開始またはＧＣ処理終了かを判定する。ＧＣ処理開始またはＧＣ処理終了の通知の場合には、ステップ１４６へ移行し、いずれの通知でもない場合には、ステップ１４８へ移行する。
【００５７】
ステップ１４６では、通知がＧＣ処理開始であった場合には、優先度制御部１４が、管理テーブルにおいて、ＧＣ処理開始を通知したプロセスのプロセスＩＤに対応するＧＣ実行中フラグを立てる。通知がＧＣ処理終了であった場合には、優先度制御部１４が、管理テーブルにおいて、ＧＣ処理終了を通知したプロセスのプロセスＩＤに対応するＧＣ実行中フラグを倒す。
【００５８】
一方、ステップ１４８では、優先度制御部１４が、通知が低充足率通知であると判定して、管理テーブルにおいて、低充足率通知を通知したプロセスのプロセスＩＤに対応する低充足率フラグを立てる。
【００５９】
次に、ステップ１５０で、優先度制御部１４が、優先度管理処理の停止要求が発生したか否かを判定し、停止要求が発生していない場合には、ステップ１４０へ戻り、停止要求が発生している場合には、優先度管理処理を終了する。
【００６０】
次に、図９に示す優先度操作処理のステップ１６０で、優先度制御部１４が、管理テーブルを参照する。次に、ステップ１６２で、優先度制御部１４が、低充足率フラグが立っているプロセスが存在するか否かを判定する。存在する場合には、ステップ１６４へ移行し、存在しない場合には、ステップ１７２へ移行する。
【００６１】
ステップ１６４では、優先度制御部１４が、低充足率フラグが立っているプロセスのうち、ＧＣ実行中フラグが立っているプロセスが存在するか否かを判定する。存在する場合には、ステップ１６８へ移行し、存在しない場合には、ステップ１７２へ移行する。
【００６２】
ステップ１６８では、低充足率フラグ及びＧＣ実行中フラグが立っているプロセス以外の他のプロセスの全てについて、優先度低下中フラグが立っているか否かを判定する。他のプロセスの全てについて、優先度低下中フラグが立っている場合には、ステップ１６０へ戻り、他のプロセスのうち、優先度低下中フラグが立っていないプロセスが存在する場合には、ステップ１７０へ移行する。
【００６３】
ステップ１７０では、優先度制御部１４が、低充足率フラグ及びＧＣ実行中フラグが立っているプロセス以外の他のプロセスで、かつ優先度低下中フラグが倒れているプロセスの優先度を下げると共に、優先度低下中フラグを立てて、ステップ１７８へ移行する。
【００６４】
一方、ステップ１７２では、優先度低下中フラグが立っているプロセスが存在するか否かを判定する。存在する場合には、ステップ１７４へ移行し、優先度低下中フラグが立っているプロセスの優先度を元の優先度に戻すと共に、優先度低下中フラグを倒して、ステップ１７８へ移行する。優先度低下中フラグが立っているプロセスが存在しない場合には、ステップ１７４をスキップして、ステップ１７８へ移行する。
【００６５】
ステップ１７８では、優先度制御部１４が、優先度操作処理の停止要求が発生したか否かを判定し、停止要求が発生していない場合には、ステップ１６０へ戻り、停止要求が発生している場合には、優先度操作処理を終了する。
【００６６】
図１０に、プロセス１の２回目のＧＣ処理実行前後で、プロセス２の優先度を下げた際のプロセス１及びプロセス２のスレッドの動作状況を示す。なお、比較のため、図１０に示すプロセス１及びプロセス２の処理状況は、図５と同じ状況になった事を前提にする。
【００６７】
図１０の例も、プロセス１の区間９と同じ時間帯で、プロセス２におけるアプリスレッドの多重度が上がり、高負荷な状態となっている。しかし、プロセス１のＧＣ処理実行区間では、優先的にＣＰＵ資源が割り当てられるようになるため、ＧＣスレッド２〜５のそれぞれに、例えば１００％のＣＰＵ資源が割り当てられる。これにより、優先度制御前は８秒であった区間９の実時間は４秒となり、ＧＣ処理全体（区間８、９、及び１０）の実時間も６秒となり、ＧＣ処理時間を短縮することができる。また、ＧＣ処理全体の全体充足率も、以下に示すように１００％となり、バックグラウンドの他のアプリケーションの影響を全く受けていない状態となる。
【００６８】
区間８の区間充足率［％］＝ＣＰＵ時間／実時間＊１００
＝１／１＊１００＝１００［％］
区間９の区間充足率［％］
＝（ＣＰＵ時間の総和／スレッド数かコア数の小さい方）／実時間＊１００
＝（４＊４／４）／４＊１００＝１００［％］
区間１０の区間充足率［％］＝ＣＰＵ時間／実時間＊１００
＝１／１＊１００＝１００［％］
全体充足率［％］
＝（（区間充足率＊区間の実時間）の総和）／ＧＣ処理全体の実時間
＝（１００＊１＋１００＊４＋１００＊１）／（１＋４＋１）＝１００［％］
【００６９】
なお、図１０の例について、従来のＧＣ処理全体のＣＰＵ使用率を用いた指標を計算すると、下記に示すように３７．５％となるが、この指標に基づいて、他のアプリケーションの影響を受けているか否かの判断を行うことは困難である。
従来のＧＣ処理のＣＰＵ使用率
＝（全スレッドのＣＰＵ時間の総和／コア数）／ＧＣ処理全体の実時間＊１００
＝（（１＋４＊４＋１）／８）／６＊１００＝３７．５［％］
【００７０】
プロセス２については、区間９と同じ時間帯にアプリスレッド５〜１２も動作し、高負荷状態となるが、プロセス１にＣＰＵ資源を優先的に割り当てるため、プロセス２のＣＰＵ使用率は、一時的に３３．３％程度（優先度制御前の図５の場合は５０％）になる。ただし、プロセス１にＣＰＵ資源を優先的に割り当てることで、プロセス１におけるＧＣ処理時間が短縮されるため、プロセス２の優先度が下がっている期間はそれほど長くならない。そのため、アプリスレッド５〜１２の処理の実時間は９．１７秒程度（優先度制御前の図５の場合は８秒）であり、プロセス２が受ける影響もそれほど大きくない。
【００７１】
なお、図５の例について、従来のＧＣ処理全体のＣＰＵ使用率を用いた指標を計算すると、下記に示すようになる。
従来のＧＣ処理のＣＰＵ使用率
＝（全スレッドのＣＰＵ時間の総和／コア数）／ＧＣ処理全体の実時間＊１００
＝（（１＋４＊４＋１）／８）／１０＊１００＝２２．５［％］
【００７２】
また、図１１に、図５の例よりも他のプロセスであるプロセス２が高負荷で動作している例を示す。図１１の例は、図５と同様に、プロセス１におけるＧＣ処理実行前後のプロセス１及びプロセス２のスレッドの動作状況を表している。
【００７３】
図５の例と同様に、プロセス１は、当初アプリスレッド１〜４が動作しており、途中でＧＣスレッド１〜５によるＧＣ処理が実行され、ＧＣ処理終了後は再びアプリスレッド１〜４が動作している。プロセス２は、アプリスレッド１〜４が動作していた状態で、プロセス１の区間１２と同じ時間帯に、図５の例よりも多いアプリスレッド５〜２８が動作し、その後再びアプリスレッド１〜４のみが動作する状態に戻る。
【００７４】
図１１の例も、プロセス１の区間１２と同じ時間帯に、プロセス２の区間１４においてアプリスレッドの多重度が上がり、高負荷な状態となっている。区間１２では、ＧＣスレッド２〜５に、それぞれ２５％のＣＰＵ資源しか割り当てられておらず、ＧＣ処理全体（区間１０、１１、及び１２）の全体充足率は、下記に示すように３３．３％となる。
【００７５】
区間１１の区間充足率［％］＝ＣＰＵ時間／実時間＊１００
＝１／１＊１００＝１００［％］
区間１２の区間充足率［％］
＝（ＣＰＵ時間の総和／スレッド数かコア数の小さい方）／実時間＊１００
＝（４＊４／４）／１６＊１００＝２５［％］
区間１３の区間充足率［％］＝ＣＰＵ時間／実時間＊１００
＝１／１＊１００＝１００［％］
全体充足率［％］
＝（（区間充足率＊区間の実時間）の総和）／ＧＣ処理全体の実時間
＝（１００＊１＋２５＊１６＋１００＊１）／（１＋１６＋１）＝３３．３［％］
【００７６】
なお、図１１の例について、従来のＧＣ処理全体のＣＰＵ使用率を用いた指標を計算すると、下記に示すように１２．５％となる。
従来のＧＣ処理のＣＰＵ使用率
＝（全スレッドのＣＰＵ時間の総和／コア数）／ＧＣ処理全体の実時間＊１００
＝（（１＋４＊４＋１）／８）／１８＊１００＝１２．５［％］
【００７７】
図５、図１０、及び図１１の例における本実施形態の方法で計算した全体充足率と、従来の指標（ＣＰＵ使用率）との比較を図１２にまとめる。
【００７８】
ここで、例えば、他のプロセスの優先度を不要に制限しないことを重視する場合などには、低充足率か否かを判定するための所定値を低めに設定することができる（例えば、所定値＝５０％）。このような場合に、従来の指標は、図５及び図１１の例とも、実際のＣＰＵ資源の割り当てよりも低く計算されているため、いずれの場合も充足率が低いと判定されてしまう。従って、他のプロセスの優先度が下げられてしまい、他のプロセスが不要に制限されてしまう可能性がある。
【００７９】
一方、本実施形態では、図５に示す他のプロセスが高負荷の場合の全体充足率は６０％、図１１に示す他のプロセスがより高負荷の場合の全体充足率は３３．３％と、適切に全体充足率を計算することができる。従って、他のプロセスの影響をより適切に把握することができるため、他のプロセスを不要に制限することなく、ＧＣ処理が効率的に実行されるように優先度を制御することができる。
【００８０】
なお、上記では、充足率計算部１２により全体充足率が所定値以下と判定した場合に、優先度制御部１４へ低充足率通知を通知する場合について説明したが、これに限定されない。充足率計算部１２では、計算した全体充足率を全て優先度制御部１４へ通知し、優先度制御部１４において全体充足率が所定値以下か否かを判定し、管理テーブルにおいて、所定値以下の全体充足率を通知したプロセスの低充足率フラグを立てるようにしてもよい。
【００８１】
また、上記では開示の技術における情報処理プログラムの一例である情報処理プログラム５０が記憶部４６に予め記憶（インストール）されている態様を説明した。しかし、開示の技術における情報処理プログラムは、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭ等の記録媒体に記録されている形態で提供することも可能である。
【００８２】
以上の実施形態に関し、更に以下の付記を開示する。
【００８３】
（付記１）
複数のコアを有する演算装置により実行される同一または異なる複数のアプリケーションの各々を実行する複数のプロセスのうち、ガーベジコレクション処理を実行するプロセスからの要求に対して、前記ガーベジコレクション処理全体に割り当てられた前記演算装置の割合を示す全体充足率を、前記ガーベジコレクション処理を実行したプロセスにおけるスレッド数が異なる区間毎に、該区間で動作するスレッド数及び前記複数のコア数に応じて計算した区間充足率に基づいて計算する充足率計算部と、
前記充足率計算部で計算した全体充足率が所定値以下の場合に、前記ガーベジコレクション処理を実行するプロセスと同時に実行される他のアプリケーション実行プロセスの優先度を、前記ガーベジコレクション処理を実行するプロセスの優先度に対して相対的に下げる優先度制御部と、
を含む情報処理装置。
【００８４】
（付記２）
前記充足率計算部は、対象区間で動作する各スレッドに対して前記演算装置から実際に割り当てられた時間の総和を、前記対象区間のスレッド数及び前記複数のコア数の小さい方で除した商を、前記対象区間の実行時間で除した商を、前記区間充足率として計算する付記１記載の情報処理装置。
【００８５】
（付記３）
前記充足率計算部は、前記ガーベジコレクション処理における各区間の区間充足率と該区間の実行時間との積を、前記ガーベジコレクション処理全体の実行時間で除した商を、前記全体充足率として計算する付記２記載の情報処理装置。
【００８６】
（付記４）
前記優先度制御部は、前記全体充足率が所定値以下となるプロセスから、ガーベジコレクション処理を実行することの通知を受けた際に、前記他のアプリケーション実行プロセスの優先度を相対的に下げ、前記全体充足率が所定値以下となるプロセスから、ガーベジコレクション処理の実行が終了したことの通知を受けた際に、前記他のアプリケーション実行プロセスの優先度をガーベジコレクション処理の実行前の状態に戻すように制御する付記１〜付記３のいずれか１つに記載の情報処理装置。
【００８７】
（付記５）
コンピュータに、
複数のコアを有する演算装置により実行される複数の同一または異なるアプリケーションの各々を実行する複数のプロセスのうち、ガーベジコレクション処理を実行するプロセスからの要求に対して、前記ガーベジコレクション処理全体に割り当てられた前記演算装置の割合を示す全体充足率を、前記ガーベジコレクション処理を実行したプロセスにおけるスレッド数が異なる区間毎に、該区間で動作するスレッド数及び前記複数のコア数に応じて計算した区間充足率に基づいて計算し、
計算した全体充足率が所定値以下の場合に、前記ガーベジコレクション処理を実行するプロセスと同時に実行される他のアプリケーション実行プロセスの優先度を、前記ガーベジコレクション処理を実行するプロセスの優先度に対して相対的に下げる
ことを含む処理を実行させる情報処理方法。
【００８８】
（付記６）
前記コンピュータに、対象区間で動作する各スレッドに対して前記演算装置から実際に割り当てられた時間の総和を、前記対象区間のスレッド数及び前記複数のコア数の小さい方で除した商を、前記対象区間の実行時間で除した商を、前記区間充足率として計算することを含む処理を実行させる付記５記載の情報処理方法。
【００８９】
（付記７）
前記コンピュータに、前記ガーベジコレクション処理における各区間の区間充足率と該区間の実行時間との積を、前記ガーベジコレクション処理全体の実行時間で除した商を、前記全体充足率として計算することを含む処理を実行させる付記６記載の情報処理方法。
【００９０】
（付記８）
前記コンピュータに、前記全体充足率が所定値以下となるプロセスから、ガーベジコレクション処理を実行することの通知を受けた際に、前記他のアプリケーション実行プロセスの優先度を相対的に下げ、前記全体充足率が所定値以下となるプロセスから、ガーベジコレクション処理の実行が終了したことの通知を受けた際に、前記他のアプリケーション実行プロセスの優先度をガーベジコレクション処理の実行前の状態に戻すように制御することを含む処理を実行させる付記５〜付記７のいずれか１つに記載の情報処理方法。
【００９１】
（付記９）
コンピュータに、
複数のコアを有する演算装置により実行される複数の同一または異なるアプリケーションの各々を実行する複数のプロセスのうち、ガーベジコレクション処理を実行するプロセスからの要求に対して、前記ガーベジコレクション処理全体に割り当てられた前記演算装置の割合を示す全体充足率を、前記ガーベジコレクション処理を実行したプロセスにおけるスレッド数が異なる区間毎に、該区間で動作するスレッド数及び前記複数のコア数に応じて計算した区間充足率に基づいて計算し、
計算した全体充足率が所定値以下の場合に、前記ガーベジコレクション処理を実行するプロセスと同時に実行される他のアプリケーション実行プロセスの優先度を、前記ガーベジコレクション処理を実行するプロセスの優先度に対して相対的に下げる
ことを含む処理を実行させるための情報処理プログラム。
【００９２】
（付記１０）
前記コンピュータに、対象区間で動作する各スレッドに対して前記演算装置から実際に割り当てられた時間の総和を、前記対象区間のスレッド数及び前記複数のコア数の小さい方で除した商を、前記対象区間の実行時間で除した商を、前記区間充足率として計算することを含む処理を実行させるための付記９記載の情報処理プログラム。
【００９３】
（付記１１）
前記コンピュータに、前記ガーベジコレクション処理における各区間の区間充足率と該区間の実行時間との積を、前記ガーベジコレクション処理全体の実行時間で除した商を、前記全体充足率として計算することを含む処理を実行させるための付記１０記載の情報処理プログラム。
【００９４】
（付記１２）
前記コンピュータに、前記全体充足率が所定値以下となるプロセスから、ガーベジコレクション処理を実行することの通知を受けた際に、前記他のアプリケーション実行プロセスの優先度を相対的に下げ、前記全体充足率が所定値以下となるプロセスから、ガーベジコレクション処理の実行が終了したことの通知を受けた際に、前記他のアプリケーション実行プロセスの優先度をガーベジコレクション処理の実行前の状態に戻すように制御することを含む処理を実行させるための付記９〜付記１１のいずれか１つに記載の情報処理プログラム。
【符号の説明】
【００９５】
１０   情報処理装置
１２   充足率計算部
１４   優先度制御部
４０   コンピュータ
４２   ＣＰＵ
４４   メモリ
４６   記憶部
【図１】
2015022504.tif 000003
【図２】
2015022504.tif 000004
【図３】
2015022504.tif 000005
【図４】
2015022504.tif 000006
【図５】
2015022504.tif 000007
【図６】
2015022504.tif 000008
【図７】
2015022504.tif 000009
【図８】
2015022504.tif 000010
【図９】
2015022504.tif 000011
【図１０】
2015022504.tif 000012
【図１１】
2015022504.tif 000013
【図１２】
2015022504.tif 000014