JP2007249736A - 言語処理実行方法およびその計算機システム - Google Patents
言語処理実行方法およびその計算機システム Download PDFInfo
- Publication number
- JP2007249736A JP2007249736A JP2006073978A JP2006073978A JP2007249736A JP 2007249736 A JP2007249736 A JP 2007249736A JP 2006073978 A JP2006073978 A JP 2006073978A JP 2006073978 A JP2006073978 A JP 2006073978A JP 2007249736 A JP2007249736 A JP 2007249736A
- Authority
- JP
- Japan
- Prior art keywords
- dynamic compiler
- execution
- unit
- compilation
- language processing
- 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.)
- Withdrawn
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
【課題】インタプリタおよび動的コンパイラを備える言語処理実行システムにおいて、動的コンパイラの異常終了により言語処理実行システム全体の異常終了を防止する。
【解決手段】動的コンパイラ部111は、動的コンパイル中に発生した異常を自己検知し、言語処理実行システム(JavaVM104)に影響を与えないように停止する。言語処理実行システムは、メソッド実行部112のインタプリタ実行部133を利用し処理を継続する。
【選択図】図1
【解決手段】動的コンパイラ部111は、動的コンパイル中に発生した異常を自己検知し、言語処理実行システム(JavaVM104)に影響を与えないように停止する。言語処理実行システムは、メソッド実行部112のインタプリタ実行部133を利用し処理を継続する。
【選択図】図1
Description
本発明は、インタプリタおよび動的コンパイラを備える言語処理実行システム(以後、言語処理実行システム)において、動的コンパイラ異常終了時のフェールオーバ機構を実現するための技術に関するものである。
非特許文献1にあるように、言語処理実行システムにおける一般的な従来技術として、実行頻度の高い部分に関して、インタプリタによる実行から動的コンパイラでコンパイルしたコードの実行へ切り替えることで実行性能の改善を図るという方法が挙げられる。言語処理実行システムであるJava(TM)仮想マシン(以後、JavaVMという)(JavaおよびすべてのJava関連の商標およびロゴは、米国およびその他の国における米国Sun Microsystems、Inc.の商標または登録商標である)においては、呼び出し回数等の履歴情報から実行頻度の高いメソッドを判定し、メソッド単位で実行方式の切り替えを行う方法が一般的である。
他の従来技術としては、特許文献1のように、動的コンパイルにより無効な結果またはエラーを生じるメソッドに関する情報を含むデータベースを持ち、これを参照して、動的コンパイルを行うか否か決定するものが挙げられる。また、特許文献2のように、異なる動的コンパイラを複数用意し、まずはある動的コンパイラでコンパイルを行い、実行時に別の方法でのコンパイルが望ましいと判断した場合は、異なる動的コンパイラでリコンパイルを行う技術が挙げられる。
通常、言語処理実行システムと動的コンパイラとは、同一のプロセスで動作するため、動的コンパイラの異常終了は、言語処理実行システムそのものの異常終了を伴う。従来技術では、予め登録してある特定のメソッドの動的コンパイルを抑止することや、最適化のために複数の動的コンパイラを使い分けることは可能であるが、動的コンパイラの異常終了には対処できないという問題があった。
本発明は、言語処理実行システムにおいて、動的コンパイラの異常終了に伴って言語処理実行システムの異常終了を発生させず、インタプリタへの実行の引き継ぎや、条件を変更しての再度の動的コンパイルなどのフェールオーバ機構を提供することを目的とする。
上記目標を達成するために、言語処理実行システムは、各メソッドに付随する情報として、そのメソッドをコンパイルする条件(最適化レベル)を保持する。動的コンパイラがメソッドをコンパイルする際には、この最適化レベルでコンパイルを行う。最適化レベルが高いほど、高速な実行が可能なコンパイルコードが生成される。あるメソッドをそのメソッドに付随する最適化レベルでコンパイル中に異常が発生した場合は、異常処理に移行する。異常処理は、そのメソッドについて、異常が発生したコンパイルの最適化レベルより低い最適化レベルに再設定し、言語処理実行システムに影響を与えないように処置した後に、停止する。この際、言語処理実行システムは停止しない。また、言語処理実行システムは、動的コンパイラを監視する機構を備え、この異常処理により動的コンパイラが停止している場合は、動的コンパイラの再起動を行う。動的コンパイル中に異常が発生したメソッドについては、インタプリタ実行を継続する。そのメソッドの次のコンパイルの機会には、先に設定した最適化レベルで、再度のコンパイルを試みる。最適化レベルの変更と動的コンパイラの異常発生の繰り返しにより、最適化レベルが設定した閾値を下回った場合には、そのメソッドをコンパイルの対象外とし、動的コンパイルを試みない。
本発明によれば、動的コンパイラ異常発生時にそれを検出し、動的コンパイラのみを終了させることにより、言語処理実行システム全体の異常終了を防ぎ、実行を継続できるという利点がある。本発明はさらに、動的コンパイラの監視機構が、異常の発生により終了させた動的コンパイラを再起動することにより、言語処理実行システム全体を再起動することなく、動的コンパイラによるメソッドのコンパイルを継続できる利点がある。また、1度異常が発生したメソッドのコンパイルも、最適化レベルを変更し複数回試みることにより、コンパイルが成功する可能性が高まり、性能の劣化を最小限に抑える利点がある。
以下、言語処理実行システムとしてJavaVMを使用した場合の実施例について図面に基づいて詳細に説明する。
図1は、実施形態のJavaVMが動作する計算機システム上におけるJavaVMの構成とその入出力データの図である。計算機システム118は、主記憶(メモリ)105に格納されるJavaVM104の実行を行うプロセッサ117、JavaVM104がロードされ、各種領域が確保される主記憶105、ファイル等が保存される補助記憶119から構成され、主記憶105とプロセッサ117は、バス116によって結合されている。Javaヒープ領域106およびコンパイルコード格納領域110は、JavaVM内に確保された記憶領域である。メソッド読み取り部107、動的コンパイラ監視部108、動的コンパイラ部111およびメソッド実行部112は、言語処理実行システムを構成するプログラムである。
補助記憶119に格納されているJavaソースプログラム103は、Javaコンパイラ102により、JavaVM104で解釈・実行できる形式であるJavaバイトコードを保持するJavaクラスファイル101に変換され、これがJavaVM104に入力される。JavaVM104に入力されたJavaクラスファイル101は、メソッド読み取り部107によって解析されて、Javaヒープ領域106内にメソッド情報109を作成する。メソッド実行部112は、通常、インタプリタ実行部113がメソッド情報109を読み込んで、インタプリタ実行を行う。インタプリタ実行を繰り返すうちに、実行頻度が高いと判断したメソッドに関しては、メソッド実行部112が動的コンパイラ部111に対して、そのメソッドのコンパイルを要求する。コンパイル要求を受けた動的コンパイラ部111は、メソッド情報109を読み、コンパイルを行う。
本発明の対象は、このコンパイル中に内的または外的要因により、動的コンパイラ部111に異常が発生し、それに伴いJavaVM104も異常終了することを防ぐことである。動的コンパイラ部111は、自身に発生した異常を検出した場合、JavaVM104に影響を与えないように停止する。動的コンパイラ監視部108は、動的コンパイラ部111が動作しているか否かの監視を定期的に行い、停止している場合は、動的コンパイラ部111の再起動を行う。動的コンパイラ部111は、コンパイルが成功した場合には、コンパイルコード格納領域110内にコンパイルコード114を配置する。メソッド実行部112は、コンパイル要求が受け入れられた結果として、そのメソッドのコンパイルコード114が生成されると、コンパイルコード実行部115が、そのコンパイルコード114を利用してその後のこのメソッドの実行を行う。コンパイルコードが生成されなかった場合は、インタプリタ実行部113がメソッド情報109を読み込んで、インタプリタ実行を継続する。動的コンパイラ監視部108、動的コンパイラ部111およびメソッド実行部112は、各々別々のスレッドで動作する。なお主記憶105上には、他にオペレーティングシステム(OS)が存在するが、通常用いられるOSでよいので、その説明を省略する。
図2は、メソッド情報109およびコンパイルコード114を詳細化した図である。メソッド情報109は、メソッドごとにJavaヒープ領域106内に必ず作成される情報である。バイトコード列204は、Javaプログラムのメソッドの処理を表現する命令列のことであり、元々はJavaクラスファイル101に格納されており、メソッド読み取り部107によってメソッド情報109内に格納される。インタプリタ実行部115は、バイトコード列204の構成要素であるバイトコードをひとつずつ読み込んで実行を行う(インタプリタ実行)。コンパイルコードへのポインタ201は、該メソッドがコンパイルされていない場合には0、コンパイル済みである場合は、コンパイルコード格納領域110内の該メソッドに対応するコンパイルコード114へのアドレスを保持している。コンパイルコード114は、ヘッダー205および機械語コード列206からなり、バイトコード列204を入力として動的コンパイラ部111がコンパイルにより生成する。機械語コード列206は、プロセッサ117が解することのできる機械語コードの列である。コンパイル抑止フラグ202は動的コンパイラがコンパイルを行うかどうか判断するフラグであり、真のとき動的コンパイラ部111はコンパイルを行わず、インタプリタ実行部113がインタプリタ実行を継続する。初期値は偽である。
最適化レベル203は、動的コンパイラが該メソッドをコンパイルする際の最適化レベルを指示するものである。最適化レベル203は、最適化レベルと適用する最適化の対応表207により、適用する最適化群と関連付けられる。対応表207に例示されるように、最適化レベルが高いほど多くの最適化機能を適用するように設定されている。最低の最適化レベルでは、いずれの最適化機能も適用されない。図2では、例として値3が設定されている。この状態でコンパイルが行われた場合、最適化A・Cが適用され、最適化Bは適用されない。通常、より多くの最適化を適用しコンパイルを行った方が高速に実行可能なコンパイルコードが生成される。反面、コンパイル中に異常が発生する可能性は高くなる。コンパイル中に動的コンパイラに異常が発生した場合は、この値が減ぜられる。減ぜられた結果、値が1未満になると、コンパイル抑止フラグ202が真となる。最適化レベル203の初期値および最適化レベルと適用する最適化の対応表207は、言語処理実行システム内部に静的保持する方法や、設定ファイル等で外部から動的に与えるなどの方法が考えられるが、ここでは特に限定しない。最適化A,B,Cの例として、エスケープ解析による冗長モニタの削除、インライン展開すること、ループ展開などがある。最適化レベル203は、ユーザによって指定されてもよいし、処理開始時に自動的に最高位レベルを設定されてもよい。
図3は、メソッド実行部112のメソッド実行処理を、メソッド実行前処理を中心に表したフローチャートである。メソッド実行部112は、対象とするメソッドが既に動的コンパイラ部111によりコンパイルされていて、コンパイルコード114が存在するかどうかを、メソッド情報109内のコンパイルコードへのポインタ201がアドレス保持しているか否かによって判定する(ステップ301)。コンパイルコード114が存在する場合は、コンパイルコード実行部115が、コンパイルコード114の実行を行う(ステップ306)。コンパイルコード114が存在しない場合は、該メソッドがコンパイル条件を満たすかどうかを判定する(ステップ302)。コンパイル条件を満たす条件としては、該メソッドの実行回数が既定回数を上回るなどがある。コンパイル条件を満たさない場合はインタプリタ実行部113がインタプリタ実行を行う(ステップ305)。満たす場合は、メソッド情報109のコンパイル抑止フラグ202の真偽を判定し(ステップ303)、真ならばインタプリタ実行を行う(ステップ305)。偽ならば、メソッド実行部112は、動的コンパイラ部111に対し、該メソッドのコンパイルを依頼し(ステップ304)、インタプリタ実行を行う(ステップ305)。該メソッドの次の実行までに動的コンパイラ部111によるコンパイルが終了していれば、次の実行からはコンパイルコード114による実行となる。
図4は、動的コンパイラ部111のコンパイル処理を表したフローチャートである。動的コンパイラ部111は、メソッド実行部112からのメソッドのコンパイル要求が存在するか判定を行う(ステップ401)。要求がない場合は、要求が発生するまで待つ。要求がある場合は、メソッド情報109の最適化レベル203に対応する最適化群に従ってコンパイルを行う。図2の例では最適化レベルが3であるので、最適化A,Cを適用し、最適化Bを適用しないでコンパイルを行う(ステップ402)。本発明では、コンパイル(ステップ402)中に、異常が発生した場合にJavaVM106が異常終了することを防ぐために、異常発生時の処理が存在する。処理の詳細は図5で説明する。コンパイル(ステップ402)が正常に終了した場合には、動的コンパイラ部111は、生成したコンパイルコード114をコンパイルコード格納領域110に保存し(ステップ403)、該メソッドのメソッド情報109のコンパイルコードへのポインタ201に、コンパイルコード114のアドレスを保存する(ステップ404)。保存後は、次のコンパイル要求が存在するかどうかの判定(ステップ401)に戻る。コンパイル(ステップ402)中に異常が発生したとき、OSの例外ハンドラを経由して図5に示す異常処理プログラムに制御が渡る。
図5は、動的コンパイラ部111でコンパイル中に異常が発生した場合の処理を表したフローチャートである。動的コンパイラ部111中の異常処理プログラムは、JavaVM104の他の箇所でも利用する共有資源(ロックなど)を動的コンパイラ部111が保持しているか判定を行う(ステップ501)。保持している場合は解放を行う(ステップ502)。解放後、または共有資源を保持していない場合には、動的コンパイラ部111は、メソッド情報109の最適化レベル203を1減ずる(ステップ503)。図2の例では最適化レベルが3から2に減ずる。その結果として、メソッド情報109と対応するメソッドの次回のコンパイルでは、最適化Aが有効となり、最適化B,Cが無効となる。最適化レベル203を減じた後、最適化レベル203が1未満となっているか判定をする(ステップ504)。下回っている場合には、動的コンパイラ部111は、メソッド情報109のコンパイル抑止フラグ202を真にする(ステップ505)。コンパイル抑止フラグ202を真にした後、または最適化レベル203が1以上の場合には、動的コンパイラ部111自身を停止させる(ステップ506)。動的コンパイラ部111の停止は、そのスレッドを終了させるが、メソッド実行部112は継続して実行できるので、インタプリタの実行は継続する。
図6は、動的コンパイラ監視部108の処理を表したフローチャートである。動的コンパイラ監視部108は、動的コンパイラ部111が停止しているか否かの判定を行い(ステップ601)、停止していた場合は動的コンパイラを再起動する(ステップ602)。起動後、または停止していなかった場合は、動的コンパイラ部111が停止しているかの判定(ステップ601)に戻る。ステップ602の動的コンパイラの再起動により、動的コンパイラの実行は、そのスレッドに割り当てられたメモリ領域中の異常発生前の情報がリセットされた状態から始まる。
本実施形態により、動的コンパイラに起因する障害の多くと、ハードエラーなど外的要因による障害のいくらかを回避して動的コンパイラによるメソッドのコンパイルを継続できる。
104 JavaVM、108 動的コンパイラ監視部、109 メソッド情報、111 動的コンパイラ部、112 メソッド実行部、113 インタプリタ実行部、114 コンパイルコード、115 コンパイルコード実行部。
Claims (4)
- メモリに格納されプロセッサによって実行される言語処理実行プログラムとして、インタプリタ実行部と、動的コンパイラ部と、コンパイルコード実行部とを有し、ユーザプログラム中の各メソッドを入力し、実行対象のメソッドがコンパイル済であれば前記コンパイルコード実行部によりコンパイルコードを実行し、当該メソッドが所定のコンパイル条件を満たせば前記動的コンパイラ部によりコンパイルコードを生成し、当該メソッドがコンパイル済でなく前記コンパイル条件を満たさなければ前記インタプリタ実行部により解釈実行する言語処理実行方法において、
各メソッドに対応してコンパイラに適用する最適化レベルを示す情報を前記メモリに設定し、前記最適化レベルはレベルが高いほど多くの最適化機能を適用するように設定されたものであり、前記言語処理実行プログラムを前記プロセッサにより実行することによって実現される方法は、
前記動的コンパイラ部によるコンパイル中に異常が発生したとき、コンパイル中のメソッドに対応する前記最適化レベルを低下させるように再設定するステップと、
前記動的コンパイラ部の動作を停止させるステップと、
前記動的コンパイラの停止を検出するステップと、
前記動的コンパイラ部を再起動するステップとを有することを特徴とする言語処理実行方法。 - 前記最適化レベルを低下させるように再設定するステップにおいて、前記最適化レベルの低下が不可能となったとき、当該メソッドのコンパイルを抑止し、以後前記インタプリタ実行部による実行とすることを特徴とする請求項1記載の言語処理実行方法。
- メモリに格納される言語処理実行プログラムをプロセッサによって実行することによって実現される言語処理実行手段として、各々独立して動作可能なメソッド実行手段と、動的コンパイラ手段と、動的コンパイラ監視手段とを有し、ユーザプログラム中の各メソッドを入力し、実行対象のメソッドがコンパイル済であれば前記メソッド実行手段がそのコンパイルコードを実行し、当該メソッドが所定のコンパイル条件を満たせば前記動的コンパイラ手段によりコンパイルコードを生成し、当該メソッドがコンパイル済でなく前記コンパイル条件を満たさなければ前記メソッド実行手段がインタプリタにより解釈実行する計算機システムであって、
前記メモリは、さらに各メソッドに対応してコンパイラに適用する最適化レベルを示す情報を保存し、前記最適化レベルはレベルが高いほど多くの最適化機能を適用するように設定されたものであり、
前記動的コンパイラ手段は、さらに、コンパイル中に異常が発生したとき、コンパイル中のメソッドに対応する前記最適化レベルを低下させるように再設定する手段と、当該動的コンパイラ手段自身の動作を停止させる手段とを有し、
前記動的コンパイラ監視手段は、監視によって前記動的コンパイラの停止を検出する手段と、前記動的コンパイラ手段を再起動する手段とを有することを特徴とする計算機システム。 - 前記最適化レベルを低下させるように再設定する手段は、さらに、前記最適化レベルの低下が不可能となったとき、当該メソッドのコンパイルを抑止する手段を有し、以後前記メソッド実行手段によるインタプリタ実行とすることを特徴とする請求項3記載の計算機システム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006073978A JP2007249736A (ja) | 2006-03-17 | 2006-03-17 | 言語処理実行方法およびその計算機システム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006073978A JP2007249736A (ja) | 2006-03-17 | 2006-03-17 | 言語処理実行方法およびその計算機システム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007249736A true JP2007249736A (ja) | 2007-09-27 |
Family
ID=38593939
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2006073978A Withdrawn JP2007249736A (ja) | 2006-03-17 | 2006-03-17 | 言語処理実行方法およびその計算機システム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2007249736A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014155684A1 (ja) * | 2013-03-29 | 2014-10-02 | 富士通株式会社 | プログラム、情報処理システム、およびプログラム移行方法 |
-
2006
- 2006-03-17 JP JP2006073978A patent/JP2007249736A/ja not_active Withdrawn
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2014155684A1 (ja) * | 2013-03-29 | 2014-10-02 | 富士通株式会社 | プログラム、情報処理システム、およびプログラム移行方法 |
JPWO2014155684A1 (ja) * | 2013-03-29 | 2017-02-16 | 富士通株式会社 | プログラム、情報処理システム、およびプログラム移行方法 |
US9733990B2 (en) | 2013-03-29 | 2017-08-15 | Fujitsu Limited | Information processing system and program migration method |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8924922B2 (en) | Pre-compiling hosted managed code | |
US8499289B2 (en) | Method, device and system for realizing kernel online patching | |
US6634023B1 (en) | Compile method, exception handling method and computer | |
US7689809B2 (en) | Transparent return to parallel mode by rampoline instruction subsequent to interrupt processing to accommodate slave processor not supported by operating system | |
JP2015084251A (ja) | ソフトウェア・アプリケーションの性能向上 | |
CN105528231B (zh) | 一种基于中间辅助函数的软件动态升级方法及系统 | |
US20110197193A1 (en) | Device and method for controlling communication between bios and bmc | |
US20120005457A1 (en) | Using software-controlled smt priority to optimize data prefetch with assist thread | |
CN107526622B (zh) | Linux的快速异常处理方法及装置 | |
JP2004303114A (ja) | インタープリタおよびネイティブコード実行方法 | |
US8601488B2 (en) | Controlling the task switch timing of a multitask system | |
JP2007249736A (ja) | 言語処理実行方法およびその計算機システム | |
KR20060035077A (ko) | 데이터 처리 장치 및 이를 이용한 레지스터 할당 방법 | |
US7080204B2 (en) | Cache controller computer system and method for program recompilation | |
JP2005141392A (ja) | プロファイル情報の取得装置及び方法 | |
US7890740B2 (en) | Processor comprising a first and a second mode of operation and method of operating the same | |
JP2005284729A (ja) | バイトコードをネイティブコードにコンパイルする仮想マシン | |
JP5901835B2 (ja) | アボート削減方法、アボート削減装置、及びアボート削減プログラム | |
JP2009259078A (ja) | バッファオーバーフロー検出方法、バッファオーバーフロー検出プログラム、およびバッファオーバーフロー検出装置 | |
JP2009230479A (ja) | マイクロプロセッサ | |
JP2006126947A (ja) | 情報処理装置、情報処理方法、およびプログラム | |
JP2005284925A (ja) | コンピュータシステムおよびプログラム更新方法 | |
JP4825058B2 (ja) | 計算機のエミュレーション方法 | |
JP2008217665A (ja) | マルチプロセッサシステム、タスクスケジューリング方法およびタスクスケジューリングプログラム | |
JPH06223047A (ja) | 排他制御方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20090127 |
|
A761 | Written withdrawal of application |
Effective date: 20110704 Free format text: JAPANESE INTERMEDIATE CODE: A761 |