JP6555981B2 - 情報処理装置及びその制御方法 - Google Patents

情報処理装置及びその制御方法 Download PDF

Info

Publication number
JP6555981B2
JP6555981B2 JP2015165150A JP2015165150A JP6555981B2 JP 6555981 B2 JP6555981 B2 JP 6555981B2 JP 2015165150 A JP2015165150 A JP 2015165150A JP 2015165150 A JP2015165150 A JP 2015165150A JP 6555981 B2 JP6555981 B2 JP 6555981B2
Authority
JP
Japan
Prior art keywords
application
function
native code
compilation
cache memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2015165150A
Other languages
English (en)
Other versions
JP2017045144A (ja
JP2017045144A5 (ja
Inventor
健則 浅見
健則 浅見
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2015165150A priority Critical patent/JP6555981B2/ja
Priority to US15/238,272 priority patent/US9971614B2/en
Publication of JP2017045144A publication Critical patent/JP2017045144A/ja
Publication of JP2017045144A5 publication Critical patent/JP2017045144A5/ja
Application granted granted Critical
Publication of JP6555981B2 publication Critical patent/JP6555981B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • G06F9/4552Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Description

本発明は、動的コンパイルに関するものである。
従来プログラムの実行環境である仮想マシン環境において、アプリケーション実行中にネイティブコードにコンパイルを行う、JIT(Just In Time)コンパイルと呼ばれる手段が知られている。JITコンパイルでは、プログラムを実行しながら呼び出し回数の多い関数を優先してネイティブコードへ変換する(非特許文献1)。さらに、ネイティブコードはコードキャッシュと呼ばれるメモリ領域に一時的に保存される。コードキャッシュが一杯になると、例えば実行頻度の少ないネイティブコードから順にコードキャッシュから破棄される。
また、ネイティブコードが生成されていない場合はインタプリタ方式による実行が行われる。インタプリタ方式の実行速度はネイティブコードで実行するよりも低速である。なお、このネイティブコードはアプリケーションが実行中に生成されるため、アプリケーションの初回利用時にはネイティブコードによる高速動作が行えない問題がある。この問題を解決するため、ユーザがアプリケーションを実行するより前に、アプリケーションを事前に読み込みJITコンパイルを済ませておく従来技術がある(特許文献1)。
特許第5167589号
JIT コンパイルと最適化の概要(http://otndnld.oracle.co.jp/document/products/jrockit/geninfo/diagnos/underst_jit.html)
しかしながら、従来技術において事前に読み込ませたアプリケーションが呼び出す関数のうち全てが実際に必要になるとは限らない。例えばユーザがアプリケーションの中の一部の機能しか使用しない場合、呼ばれない関数もある。このような関数に対するJITコンパイルは不要である。
また、コードキャッシュに保存された或る関数Fのネイティブコードが破棄された後、再度関数Fが呼ばれると再コンパイルを行う場合がある。このケースでは一度作成したネイティブコードと同じものを再度生成しており無駄と言える。
本発明は上述した問題を解決するためになされたものである。そして、本発明は、アプリケーションによっては高速に実行可能な環境を提供する。
この課題を解決するため、例えば本発明の情報処理装置は以下の構成を備える。すなわち、
アプリケーションを実行する仮想マシンとして機能する情報処理装置であって、
前記アプリケーションから要求された関数に対応するネイティブコードがキャッシュメモリに格納されている場合、当該ネイティブコードを実行し、前記キャッシュメモリに格納されていない場合、前記アプリケーションから要求された関数をインタプリタ形式に実行する実行手段と、
前記アプリケーションからのコンパイル要求を受信した場合、要求された関数のコンパイルを行い、生成されたネイティブコードを前記キャッシュメモリに登録する動的コンパイル手段と
前記アプリケーションから、関数の終了の要求を受信した場合、要求されたネイティブコードを前記キャッシュメモリより消去、もしくはキャッシュメモリへの維持する優先度をより低く設定する設定手段とを有する。
本発明によれば、単にアプリケーションの実行環境を提要するだけでなく、そのアプリケーションが要求すれば、そのタイミングで必要な関数のネイティブコードを生成し、キャッシュメモリに登録する。この結果、その関数を実際に実行するタイミングより早く要求している限り、高速な処理を行うことも可能になる。
ハードウェア構成図。 第1の実施形態における装置の機能構成図。 JITコンパイル処理を示すフローチャート。 第2の実施形態における装置の機能構成図。 高速版ネイティブコード生成処理を示すフローチャート。 時刻指定JITコンパイル処理を示すフローチャート。 アプリケーション優先度定義テーブルを示す図。
以下、添付の図面を参照して、本発明に係る実施形態を詳細に説明する。なお、以下の実施形態において示す構成は一例に過ぎず、本発明は図示された構成に限定されるものではない。
[第1の実施形態]
図1は本実施形態における情報処理装置1000のハードウェア構成を示す図である。中央演算処理装置(以下、CPU)1001は演算処理部であり、装置全体の動作制御のための各種処理を実行する。ネイティブコードの生成やアプリケーションの実行もここで行う。
メモリ1002はRAMやROMなどの半導体メモリであり、CPU1001で実行する各種プログラムやその演算結果やネイティブコード等がここに格納される。コードキャッシュもここに存在する。入力装置1003は、キーボードやマウスやタッチデバイスなどでありユーザがアプリケーション利用時に情報を入力する際のインタフェースとなる。出力装置1004は、ディスプレイ装置などであり、ユーザに対しアプリケーションの処理結果等の情報を出力する際のインタフェースとなる。タイマー1005はコンパイルの実行タイミング等の時刻管理や、コンパイル時間の計測などを行う。補助記憶装置1006はハードディスクドライブなどであり各種データの保管先に用いられる。通信インタフェース1007は外部ネットワーク(インターネットを含む)とのデータ入出力の制御を行う。1008はシステムバスであり、上記の参照符号1001〜1007で示される構成要素を接続し、各構成要素間での情報転送経路となる。
図2は本実施形態において必要なシステムの構成要素を示すブロック図である。アプリケーション100、仮想マシン200、仮想マシン内の一部にJIT(Just In Time)管理部300が存在する。仮想マシン200としては例えばJava(登録商標)VM(Virtual Machine)が想定される。当然、アプリケーション100、仮想マシン200は、情報処理装置1000内のCPU1001がそれぞれのソフトウェアを実行することで実現するものである。つまり、アプリケーション100、仮想マシン200は同じ物理的な装置内に存在する。なお、以下の説明では、図2の処理部が主体とした処理として説明するが、現実にはそれぞれの処理部として機能するためのプログラムを、CPU1001が実行するで実現することになる。
アプリケーション100は、アプリケーション処理実行部101、JITコンパイル開始指示部102、JITコンパイル終了指示部103を含む。アプリケーション処理実行部101は、ユーザが利用する各種アプリケーションの処理を行う。ユーザからの入力を受け付け、各種処理内容を仮想マシンへ伝達し仮想マシンから処理結果を受け取り、ユーザへ結果を提示(表示)する機能を持つ。JITコンパイル開始指示部102は、JIT管理部300に対して、JITコンパイルの開始指示や対象関数を伝達する機能を持つ。JITコンパイル終了指示部103は、JIT管理部300に対して、JITコンパイルの終了指示や対象関数を伝達する機能を持つ。
仮想マシン200は、JITコンパイラ201、ネイティブコードキャッシュ管理部203、処理命令部204、JIT管理部300を含む。
JITコンパイラ201は、プログラム中の関数単位でネイティブコード(CPU1001が直接解釈可能なコード)202を生成する機能を持つ。また、このJITコンパイラ201は、後述のJITコンパイル命令制御部302からの指示を受けて動作する。また、背景技術で述べたように実行中に呼び出し回数の多い関数を検出しその関数のネイティブコードを生成する機能も持つ。
JITコンパイラ201で生成されたネイティブコード202は、これはコードキャッシュへ保存される。コードキャッシュ内の各ネイティブコードに対してキャッシュ優先度を与え、いつキャッシュから破棄するかを管理する必要がある。ネイティブコードキャッシュ管理部203はこの管理を行う。
処理命令部204は、アプリケーションから受けた各種処理を実行する。処理はインタプリタ形式で実行するが、実行対象となる関数のネイティブコードが存在すれば(キャッシュされていれば)それを利用して実行する。また、処理実行中の各関数の呼び出し回数等の情報はJITコンパイラ201へ渡される。
JIT管理部300は、アプリケーション指示受付部301、JITコンパイル命令制御部302、キャッシュ優先度指定部303を含む。
アプリケーション指示受付部301は、アプリケーション100からの開始指示やJITコンパイルの対象関数の情報を受け取る。JITコンパイル命令制御部302は、JITコンパイラ201に対して実行開始や実行停止等の命令を送る機能を持つ。また、JITコンパイル命令制御部302は、JITコンパイルが完了したら通知を受け取り、JITコンパイルの完了時刻とコンパイル対象関数とを対応付けて保存する機能も持つ。キャッシュ優先度指定部303は、JITコンパイル命令制御部302からの指示を受けてコードキャッシュ内の特定のネイティブコードのキャッシュ優先度を変更するよう、ネイティブコードキャッシュ管理部203へ指示する機能を持つ。また、JITコンパイル命令制御部302からJITコンパイルの完了時刻の情報を取得し、コンパイル後の経過時間に応じてキャッシュ優先度の変更を203へ指示する機能も持つ。
次に、本実施形態の基本的な動作例を図3(a),(b)を用いて説明する。なお、図3(a),(b)は、仮想マシン200で実行される処理内容が示し、アプリケーション100の処理内容は省略している(アプリケーションの種類は問わない)。先に説明したように、処理はCPU1001が実行するものであるが、理解を容易にするため、図2の機能ブロック図の各処理部を主語として説明する。図3(a)は、アプリケーション100からネイティブコード生成処理の指示を受けた場合の仮想マシン200の処理を示している。
まずアプリケーション100は、JITコンパイルをしてもらいたいタイミングになると、JITコンパイル開始指示部102を制御し、アプリケーション指示受付部301へJITコンパイルの指示要求(動的コンパイル要求)を出す。この時、JITコンパイル開始指示部102は、JITコンパイルの対象の関数名(仮にFA)もアプリケーション指示受付部301に伝える。仮想マシン200は、この指示要求を受けたらすぐにJITコンパイラ201が関数FAのコンパイルを開始する(S301,S303)。ここでもしコンパイルが終わるまでの間にアプリケーション100のJITコンパイル開始指示部102からJITコンパイルの中止指示が来たとする。つまりアプリケーション指示受付部301がJITコンパイル中止指示を受けたとする(S302)。この場合、JITコンパイル命令制御部302がJITコンパイラ201に対して中止命令を出して、JITコンパイラ201には速やかにコンパイルを終了する。またJITコンパイラ201は、この時コンパイル途中まで生成された中間バイナリ等の各種ファイルを破棄する(S305)。
アプリケーション100からの中止指示を受信しないままJITコンパイルが完了したとする(S304がYESの場合)。この場合、JITコンパイラ201は、生成されたネイティブコード(仮にBFAという)を不図示のコードキャッシュ(メモリ1002に確保される)に格納する(S306)。また、このとき、JITコンパイラ201は、JITコンパイル命令制御部302へコンパイル完了を通知する。この結果、対象関数FAとそのコンパイル完了時刻が対応付けられて記録管理される。これはJITコンパイル命令制御部302で行われる(S307)。
次に、キャッシュ優先度指定部303が、生成されたネイティブコードBFAのキャッシュ優先度を高く設定する処理を行う。コードキャッシュには、それ以前に生成されたネイティブコードBFXも保存されているとする。この場合、従来の手法では、背景技術で述べたように実行中に呼び出し回数の多い関数をJITコンパイルするものである。本実施形態では、BFAに対してはBFXよりも高い優先度を設定する(S308)。BFAはアプリケーションが意図的に指示して生成されたものであり、BFXよりも利用される確率が高いものとして扱う。こうすることでBFAが長期間キャッシュ中に残るようになる。これは、コードキャッシュが埋まった状態で新たなネイティブコードが生成されたとき、優先度の低いものから順にコードキャッシュから消去されるからである。例えばコードキャッシュがBFAとBFXで埋まっているときに、新たなネイティブコードBFYが生成されると、優先度が低いBFXが消去される。こうしてBFAがコードキャッシュに長時間残る確率が上がる。
なおS303において、もし以前に関数FAのコンパイルが行われておりコードキャッシュ中にBFAが存在していた場合はコンパイルする必要はない。生成済みのBFAがもし低いキャッシュ優先度に設定されていたら高い優先度に設定し直す。
上記のS301〜S308の処理と並行して、アプリケーションは処理を実行している。アプリケーションが関数FAを実行するより少し前にJITコンパイル指示を出すようにしておけば、関数FAの初回実行時から生成済みのネイティブコードBFAを用いることができ、従来の方法よりも高速に実行できる。そのため、アプリケーション100には、実際に実行する関数FAの記述の数ステップ前に、FA関数のコンパイル開始命令を記述しておくと都合がよい。
次に、図3(b)に従い、アプリケーション100からネイティブコードの終了指示を受けた場合の仮想マシン200の処理を説明する。
アプリケーション100は、或る関数(仮にFAとする)の使用を終了するタイミングで、JITコンパイル終了指示部103からアプリケーション指示受付部301へ終了指示要求を行う。つまり、仮想マシン200が、この指示(関数名を含む)を受けたと判断したとする(ステップS309)。この場合、JITコンパイル命令制御部302からキャッシュ優先度指示部303を通じて、ネイティブコードキャッシュ管理部203がBFAをコードキャッシュから消去する処理を行う(S310)。なお別の例として、消去せずにBFAのキャッシュ優先度を最低値に下げてもよい。この場合はコードキャッシュが全部埋まるまでは残っているが、埋まった後はすぐ他のネイティブコードに追い出されて消去される。
一方、アプリケーションからの終了指示が来ない場合でも、BFAが生成された時刻から一定時間が経過したらキャッシュの優先度を下げる処理を行う。この処理は、JITコンパイル命令制御部302が保存した関数FAのJITコンパイル完了時刻をまずキャッシュ優先度指定部303へ渡す。そして、キャッシュ優先度指定部303が経過時間に応じてネイティブコードキャッシュ管理部203へ命令する形で行う(S011)。優先度の下げ方としては例えば所定期間(例えば30秒経過)するごとに優先度を少しずつ下げてもよいし、例えば5分という長時間経過したときに最低値に下げてもよい。そうするとコードキャッシュ中のBFA以外のネイティブコードと比べ優先度が相対的に低くなる。そしてコードキャッシュが一杯になった時に新しいネイティブコードが入ってくると(S312)、優先度の低いBFAがコードキャッシュから消去されることになる(S310)。
このような処理があることで、万が一アプリケーションがハングアップするなどして終了通知が送れず終了してしまう場合でも、生成したネイティブコードBFAがキャッシュに残り続けることはない。
以上が本第1の実施形態における仮想マシン200の基本的な動作例である。これによれば、アプリケーション100が必要とするタイミングで関数FAのネイティブコードを用意(キャッシュへの登録)することができる。従って、関数FAの1回目の実行から、インタプリタより高速に実行可能である。また、ネイティブコードBFAはアプリケーションの終了指示が来るまでコードキャッシュ(キャッシュメモリ」)に保存され続ける可能性が高くなる。つまり利用途中でBFAがコードキャッシュから追い出されることがなくなり、ひいては無駄なネイティブコードBFAの再コンパイルを不要にすることができる。また、アプリケーション100が、もはや利用しないとわかった段階で、該当する関数の利用終了を指示することで、該当するネイティブコードをコードキャッシュから削除できる。よってそれ以外のネイティブコードがキャッシュに残る可能性を高くすることもできる。
[第2の実施形態]
第2の実施形態では、上記第1の実施形態でJITコンパイルする際に、インライン展開の深さの設定を変えて、より高速動作が可能なネイティブコードを生成する例を説明する。
図4は本第2の実施形態において必要なシステムの構成要素を示すブロック図である。第1の実施形態における図2の構成に対し、JITコンパイラ稼働監視部304が追加された点が異なる。
JITコンパイラ稼働監視部304は、JITコンパイラが動作中であるかどうかを監視する機能を持つ。また、JITコンパイラ稼働監視部304は、JITコンパイルの対象関数とそのコンパイルにかかった処理時間とを対応づけて記録する機能も持つ。さらに、JITコンパイラ稼働監視部304は、対象関数のコード規模も関数名と対応付けて記録する機能も持つ。
次に、本第2の実施形態の動作例を図5を用いて説明する。なお図5は仮想マシン200で実行される処理内容を示しており、アプリケーション100の処理内容は省略している。
まずアプリケーション100はJITコンパイルの対象関数名FBとJITコンパイルの指示を仮想マシン200に送る。この時、関数FBをアプリケーションが利用開始する時刻までの時間的余裕度を示すパラメータもあわせて送る。この時間的余裕度とは例えば、“長”、“短”の2段階の値である。アプリケーションが関数FBをすぐ使用したい場合は“短”、しばらく後に使用したい場合は“長”、というように時間的余裕度のパラメータ値をアプリケーション指示受付部301へ送る。仮想マシン200のアプリケーション指示受付部301は、上記のように、関数FBとその時間的余裕度を示す情報を受信する(S501)。
次に、JITコンパイル命令制御部302は、アプリケーション指示受付部301からの情報の時間的余裕度の値を見て“長”であった時、JITコンパイラ稼働監視部304へ命令する。命令を受けたJITコンパイラ稼働監視部304は、JITコンパイラが今現在稼働しているかどうかを調べる(S502)。そして、JITコンパイラが稼働しておらず、かつ、時間的余裕度が“長”である場合、インライン展開の深さを大きな値に設定することで実行速度優先のネイティブコードの生成ためのJITコンパイルを開始する。このインライン展開の深さを指定する値は、例えばJava(登録商標)においては”-XX:MaxInlineSize”というオプションの指定値が相当する。これを大きな値にするほど高速に動作可能なネイティブコード(以下、高速版ネイティブコード)が生成される。ただし通常よりコンパイル処理時間は長くなる(S503、S504)。
一方、時間的余裕度が“短”である場合は、インライン展開の深さの値を変えない通常のJITコンパイル開始を指示する(S503、S505)。
なお、S504とS505において、JITコンパイラが既に別の関数のコンパイル稼働中である場合は終了を待ってからコンパイル開始を指示する。この場合、その終了を待つので、“短”としてコンパイルさせる。なお、S503で示した高速版ネイティブコードの生成条件は別のものでもよい。例えば、時間的余裕度が“長”であれば常に高速版ネイティブコードを生成するようにしてもよい。
また、高速版ネイティブコードの生成方法として、インライン展開の深さを変更する例を示したが、より高速に動作するネイティブコードを生成できる手段であれば他のものでもよい。例えばコード最適化を行う、Java(登録商標)におけるC2コンパイラを利用するといったものでもよい。
以上のようにすれば、アプリケーションが実行する関数FBを、より高速に動作することが可能となる。
なお、以上はネイティブコードを生成する実施形態であった。ネイティブコードをキャッシュから消去する処理や、ネイティブコードの生成を中断する処理は図3(a)および(b)のS305〜S312と同様である。
[第3の実施形態]
本第3の実施形態は、アプリケーションが関数を使用する時刻が予想できる場合に、JITコンパイルの開始時刻を指定する例である。まずアプリケーションが関数を使用する時刻を予想できるユースケースの例を挙げる。
例えばユーザが指定した時刻T1に印刷を開始するアプリケーションの場合、印刷処理に関係する関数FCがT1に使用されることが予想できる。また例えば、印刷処理の実行前に毎回決められた設定ファイルの読み込みが必要なアプリケーションがある。このとき、過去の実績から予測して設定ファイルの読み込み処理にT2時間かかるとすれば、ユーザが印刷開始の操作を行った時点よりT2時間後に、印刷処理に関する関数FCが使用されることが予想できる。以上のようにアプリケーションが関数FCを使用する時刻が予想できる場合に、本第3の実施形態が適用できる。
本第3の実施形態の機能構成図は図4と同様であり、その処理内容を図6を用いて説明する。なお図6は仮想マシン200で実行される処理内容を示し、アプリケーション100の処理内容は省略している。
アプリケーション100はJITコンパイルの対象関数名FCと関数FCを使用する時刻T3をアプリケーション指示受付部301へ送ることになる。つまり、仮想マシン200のアプリケーション指示受付部301は、アプリケーション100からJITコンパイルの対象関数名FCと関数FCを使用する時刻T3を受け付ける(S601)。次にJITコンパイル命令制御部302は、アプリケーション指示受付部301から受け取った情報に基づき、JITコンパイラ201へ開始命令を送る時刻(以下、コンパイル開始時刻)T3´を決定する(S602)。
時刻T3’の決め方は、JITコンパイル処理時間Tcを過去のデータから予測しT3’=T3−Tcとする。Tcの予測は、JITコンパイラ稼働監視部304が記録していた過去のコンパイル処理時間のデータを用いる。まず対象関数FCと同規模の関数を探し、その関数の過去のコンパイル処理時間をTcとする。
以上のようにして決定した時刻T3’になったら、JITコンパイル命令制御部302がJITコンパイラ201へ開始命令を送り、JITコンパイラ201がネイティブコードの生成を開始する(S603)。そして完了したら、JITコンパイラ201がJITコンパイル命令制御部302へ完了通知を送る。通知を受けたJITコンパイル命令制御部302はJITコンパイラ稼働監視部304へ命令する。そして、JITコンパイラ稼働監視部304が、ネイティブコードの生成にかかった時間や関数FCのコード規模に関するデータを保存する(S604)。このデータは次回以降のコンパイル開始時刻の予測に用いる。
以上のようにすれば、アプリケーションによる関数呼び出しが長時間後となる場合でも、呼ばれる直前にネイティブコードを用意することができる。この結果、実際に該当する関数を実行する際には、キャッシュされた状態となるので、処理を高速に行うことが可能になる。なお、本第3の実施形態では、第2の実施形態で述べた高速版バイナリ作成と組み合わせて使用してもよい。つまり、コンパイル開始時刻が長時間先である場合には高速版バイナリを作成するようにしてもよい。
[第4の実施形態]
本第4の実施形態では、アプリケーション100の種類に応じて生成済みのネイティブコードのキャッシュ優先度を変更する例を説明する。
まず、仮想マシン200の一部のプログラム(仮想マシンとは独立したプログラムでも構わない)を利用し、あらかじめアプリケーションID(以下、AppID)を設定しておく。図7は、この設定処理で生成されたアプリケーションIDと優先順位の対応関係のテーブルを示している。このテーブルは、補助記憶装置1006に記憶保持されるものであり、変更、修正、削除などの指示がない限り、その情報は維持される。なお、システムアプリケーションA,Bは、ユーザが選択するのではなく、デフォルトして設定さてるものとする。
そして図3(a)のS301で仮想マシン200がアプリケーション100から指示を受ける際には、AppIDも受け取るようにする。そして、S308でキャッシュ優先度を設定する際に、例えば図7に示す表に従って、アプリケーションごとに各々決められた優先度を用いる。図7ではアプリケーションごとにその重要度とキャッシュ優先度があらかじめ定義されている。また、図7によればシステムアプリケーション(AppID=001、002)はユーザアプリケーション(AppID=003、004)よりも高いキャッシュ優先度が与えられている。つまり、コードキャッシュ内にシステムアプリケーションが呼ぶ関数のネイティブコードと、ユーザアプリケーションが呼ぶ関数のネイティブコードが共存したとき、前者の方が長期間キャッシュ内に残る。この設定は、システムアプリケーションはユーザアプリケーションと比べて重要性が高く、いつも高速に動作させたいという場合に効果がある。
このようにすれば、重要なアプリケーションが呼ぶ関数のネイティブコードがコードキャッシュの上位位置に格納されるので、消される確率を下げるといった制御が可能となる。
[第5の実施形態]
本第5の実施形態は、アプリケーション指示受付部301が複数のアプリケーションから短時間に大量のJITコンパイル指示を受けた場合のコンパイル順番の調整に関して説明する。
仮想マシン200が、大量の指示を短時間に受信すると、到着済みの指示によるJITコンパイル処理が終わるまで、残りの指示は待ち状態になる。本第5の実施形態では、この待ち状態になっている複数の指示の順番を組み替える。
例えば、図7のように指示の送信元のAppIDとその重要度が決められている場合、その重要度が高い順に待ち状態の指示順番を並び替える。この例では、重要なシステムアプリケーションAppID=001から来た指示が一番上に変更される。このようにすれば、大量のJITコンパイル指示があった場合でも、重要なアプリケーションが使用するネイティブコードが優先して先に生成される。
また他の例として、アプリケーションの重要度の代わりに、過去の履歴情報を元に順序を変更してもよい。例えばS309でアプリケーションから終了指示が来た場合、指示の送信元のAppIDを記録し、AppIDごとの終了指示が来た回数を集計する。第1の実施形態で述べたように通常はアプリケーションが関数FAの使用が終わったらその終了指示を出す。しかしアプリケーションがハングアップ等の異常状態になって終了指示を出さない場合がある。つまり終了指示が来た回数が少ないアプリケーションは、異常状態になる確率が高いと判断される。そこでこのようなアプリケーションから来た指示の順番を下げるようにする。このようにすれば、異常状態にならない通常のアプリケーションの指示を優先させることができる。
(その他の実施例)
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
1000…情報処理装置、1001…中央演算処理装置、1002…メモリ、1003…入力装置、1004…出力装置、1005…タイマ、1006…補助記憶装置、1007…通信インターフェース、1008…システムバス、100…アプリケーション、101…アプリケーション処理実行部、102…JITコンパイル開始指示部、103…JITコンパイル終了指示部、201…JITコンパイラ、202…ネイティブコード、203…ネイティブコードキャッシュ管理部、204…処理命令部、300…JIT管理部、301…アプリケーション指示受付部、302…JITコンパイル命令制御部、303…キャッシュ優先度指定部

Claims (8)

  1. アプリケーションを実行する仮想マシンとして機能する情報処理装置であって、
    前記アプリケーションから要求された関数に対応するネイティブコードがキャッシュメモリに格納されている場合、当該ネイティブコードを実行し、前記キャッシュメモリに格納されていない場合、前記アプリケーションから要求された関数をインタプリタ形式に実行する実行手段と、
    前記アプリケーションからのコンパイル要求を受信した場合、要求された関数のコンパイルを行い、生成されたネイティブコードを前記キャッシュメモリに登録する動的コンパイル手段と
    前記アプリケーションから、関数の終了の要求を受信した場合、要求されたネイティブコードを前記キャッシュメモリより消去、もしくはキャッシュメモリへの維持する優先度をより低く設定する設定手段と、
    を有することを特徴とする情報処理装置。
  2. 前記動的コンパイル手段は、
    前記アプリケーションから、前記関数を利用するタイミングまでの時間的余裕が少なくとも2段階のいずれであるかを示す情報を受信した場合、時間的余裕が大きいほど実行速度優先のネイティブコードを生成するためのパラメータを設定してコンパイルを行う
    ことを特徴とする請求項1記載の情報処理装置。
  3. 前記動的コンパイル手段は、
    前記アプリケーションから、前記関数を利用する時刻が設定された場合、当該時刻にてネイティブコードの生成が完了するためのコンパイル開始時刻を決定し、当該決定した時刻になったときにコンパイルを行う
    ことを特徴とする請求項1記載の情報処理装置。
  4. アプリケーションの種類と優先度とを対応関係を示すテーブルを記憶する記憶手段を更に有し、
    前記動的コンパイル手段は、前記テーブルを参照し、関数のコンパイル要求したアプリケーションの種類に応じた優先度に対応するキャッシュメモリの位置に、生成したネイティブコードを格納することを特徴とする請求項1乃至のいずれか1項に記載の情報処理装置。
  5. アプリケーションの種類と優先度とを対応関係を示すテーブルを記憶する記憶手段を更に有し、
    前記動的コンパイル手段は、複数のアプリケーションからのコンパイル要求を受信した場合、優先度の高いアプリケーションからのコンパイル要求を優先することを特徴とする請求項1乃至のいずれか1項に記載の情報処理装置。
  6. アプリケーションを実行する仮想マシンとして機能する情報処理装置の制御方法であって、
    実行手段が、前記アプリケーションから要求された関数に対応するネイティブコードがキャッシュメモリに格納されている場合、当該ネイティブコードを実行し、前記キャッシュメモリに格納されていない場合、前記アプリケーションから要求された関数をインタプリタ形式に実行する実行工程と、
    動的コンパイル手段が、前記アプリケーションからのコンパイル要求を受信した場合、要求された関数のコンパイルを行い、生成されたネイティブコードを前記キャッシュメモリに登録する動的コンパイル工程と
    設定手段が、前記アプリケーションから、関数の終了の要求を受信した場合、要求されたネイティブコードを前記キャッシュメモリより消去、もしくはキャッシュメモリへの維持する優先度をより低く設定する設定工程と、
    を有することを特徴とする情報処理装置の制御方法。
  7. コンピュータが読み込み実行することで、前記コンピュータを、請求項1乃至のいずれか1項に記載の情報処理装置が有する各手段として機能させるためのプログラム。
  8. 請求項に記載のプログラムを格納したコンピュータが読み込み可能な記憶媒体。
JP2015165150A 2015-08-24 2015-08-24 情報処理装置及びその制御方法 Expired - Fee Related JP6555981B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015165150A JP6555981B2 (ja) 2015-08-24 2015-08-24 情報処理装置及びその制御方法
US15/238,272 US9971614B2 (en) 2015-08-24 2016-08-16 Information processing apparatus and method of controlling the same

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015165150A JP6555981B2 (ja) 2015-08-24 2015-08-24 情報処理装置及びその制御方法

Publications (3)

Publication Number Publication Date
JP2017045144A JP2017045144A (ja) 2017-03-02
JP2017045144A5 JP2017045144A5 (ja) 2018-09-20
JP6555981B2 true JP6555981B2 (ja) 2019-08-07

Family

ID=58095514

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015165150A Expired - Fee Related JP6555981B2 (ja) 2015-08-24 2015-08-24 情報処理装置及びその制御方法

Country Status (2)

Country Link
US (1) US9971614B2 (ja)
JP (1) JP6555981B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10795989B2 (en) * 2017-03-05 2020-10-06 Fortinet, Inc. Secure just-in-time (JIT) code generation
US11053395B2 (en) 2017-06-12 2021-07-06 Altria Client Services Llc Corrosion-resistant reservoir for an e-vaping device and method of manufacturing thereof
US11768777B2 (en) * 2020-01-22 2023-09-26 EMC IP Holding Company LLC Application aware cache management

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7013456B1 (en) * 1999-01-28 2006-03-14 Ati International Srl Profiling execution of computer programs
JP3470948B2 (ja) * 1999-01-28 2003-11-25 インターナショナル・ビジネス・マシーンズ・コーポレーション 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ
US6973646B1 (en) * 2000-07-21 2005-12-06 International Business Machines Corporation Method for compiling program components in a mixed static and dynamic environment
US6718539B1 (en) * 2000-12-22 2004-04-06 Lsi Logic Corporation Interrupt handling mechanism in translator from one instruction set to another
GB2376099B (en) * 2001-05-31 2005-11-16 Advanced Risc Mach Ltd Program instruction interpretation
US7617490B2 (en) * 2003-09-10 2009-11-10 Intel Corporation Methods and apparatus for dynamic best fit compilation of mixed mode instructions
US7788657B2 (en) * 2004-02-27 2010-08-31 Tvworks, Llc Targeted runtime compilation
US7853934B2 (en) * 2005-06-23 2010-12-14 Hewlett-Packard Development Company, L.P. Hot-swapping a dynamic code generator
JP5167589B2 (ja) 2006-02-13 2013-03-21 富士通株式会社 アプリケーションサーバ装置および仮想マシンプログラム
US8769511B2 (en) * 2006-02-16 2014-07-01 The Regents Of The University Of California Dynamic incremental compiler and method
US7784041B2 (en) * 2006-03-30 2010-08-24 Oracle America, Inc. Mechanism for reducing detectable pauses in dynamic output caused by dynamic compilation
US8082542B2 (en) * 2006-10-04 2011-12-20 International Business Machines Corporation Load time in-lining of subroutines
US8522209B2 (en) * 2007-03-30 2013-08-27 Sap Ag Method and system for integrating profiling and debugging
US8875114B2 (en) * 2007-09-21 2014-10-28 International Business Machines Corporation Employing identifiers provided by an operating system of a processing environment to optimize the processing environment
US8539464B2 (en) * 2008-10-30 2013-09-17 International Business Machines Corporation Distributed just-in-time compilation
US8938728B2 (en) * 2010-04-05 2015-01-20 International Business Machines Corporation Dynamic compiler program, dynamic compiling method and dynamic compiling device
US8516460B2 (en) * 2011-08-02 2013-08-20 International Business Machines Corporation Real-time temperature sensitive machine level code compilation and execution
US8819649B2 (en) * 2011-09-09 2014-08-26 Microsoft Corporation Profile guided just-in-time (JIT) compiler and byte code generation

Also Published As

Publication number Publication date
JP2017045144A (ja) 2017-03-02
US9971614B2 (en) 2018-05-15
US20170060554A1 (en) 2017-03-02

Similar Documents

Publication Publication Date Title
JP5167589B2 (ja) アプリケーションサーバ装置および仮想マシンプログラム
US9473558B2 (en) Utilization of target browsers
TWI400652B (zh) Dual operating system parallel processing methods, recording media and computer program products
US20120324454A1 (en) Control Flow Graph Driven Operating System
US20140026142A1 (en) Process Scheduling to Maximize Input Throughput
US20120304177A1 (en) Programmatically determining an execution mode for a request dispatch utilizing historic metrics
JP2021114283A (ja) ロボティックプロセスオートメーション(rpa)のためのトリガサービス管理
US10789111B2 (en) Message oriented middleware with integrated rules engine
JP6555981B2 (ja) 情報処理装置及びその制御方法
US20120290681A1 (en) Application downloading
US20170364382A1 (en) Method and apparatus for hot upgrading a virtual machine management service module
KR101605507B1 (ko) 매크로 수행 방법 및 매크로를 수행하기 위한 웹 서버의 제어방법, 이를 수행하기 위한 기록매체
US9830307B1 (en) Ahead of time compilation of content pages
KR20130051076A (ko) 응용프로그램 스케줄링 방법 및 장치
US9785560B2 (en) Scene-isolated internet application
WO2013165460A1 (en) Control flow graph driven operating system
JP2016051395A (ja) 画像形成装置およびリソース管理方法
JP2008305021A (ja) 情報処理装置及びアプリケーション管理方法
JP5056346B2 (ja) 情報処理装置、情報処理システム、仮想サーバの移動処理の制御方法、及び、プログラム
CN111427654A (zh) 一种指令处理方法及装置
US20140282533A1 (en) Virtual computer system
JP4962026B2 (ja) プロセス管理機能をもつユーザレベルプロセス制御装置、その方法及びそのプログラム
KR20200084294A (ko) 핫스팟 추출을 이용하여 코드 블록을 탐색하는 운용 서버 및 이를 포함하는 운용 플랫폼 시스템
JP2017157136A (ja) ジョブ管理システム、プログラム実行装置の決定方法及びプログラム
JP2019152911A (ja) 情報処理装置、情報処理方法およびコンピュータプログラム

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180810

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180810

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190522

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190610

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190709

R151 Written notification of patent or utility model registration

Ref document number: 6555981

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

LAPS Cancellation because of no payment of annual fees