JP5988444B2 - 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム - Google Patents

最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム Download PDF

Info

Publication number
JP5988444B2
JP5988444B2 JP2014026911A JP2014026911A JP5988444B2 JP 5988444 B2 JP5988444 B2 JP 5988444B2 JP 2014026911 A JP2014026911 A JP 2014026911A JP 2014026911 A JP2014026911 A JP 2014026911A JP 5988444 B2 JP5988444 B2 JP 5988444B2
Authority
JP
Japan
Prior art keywords
binary module
module
optimized
computer
execution
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
JP2014026911A
Other languages
English (en)
Other versions
JP2015153191A (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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2014026911A priority Critical patent/JP5988444B2/ja
Priority to US14/621,890 priority patent/US9563547B2/en
Priority to US14/749,049 priority patent/US9569347B2/en
Publication of JP2015153191A publication Critical patent/JP2015153191A/ja
Application granted granted Critical
Publication of JP5988444B2 publication Critical patent/JP5988444B2/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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Description

本発明は、バイナリー・モジュールの最適化技術に関する。特には、本発明は、最適化したバイナリー・モジュールをテストするための技法に関する。
近年、ハードウェアの更新やダウンサイズ化とともに、バイナリー・モジュールの最適化技術が注目を集めている。バイナリー・モジュールの最適化技術とは、ソースコードを再コンパイルすること無しに、レガシー資産であるコンパイル済みのバイナリー・モジュール(例えば、COBOLプログラムのバイナリー・モジュール)を最新のマシン用のバイナリー・モジュールに最適化し直す技術である。
インターナショナル・ビジネス・マシーンズ・コーポレーションは、バイナリー・モジュールの最適化(以下、単に「バイナリー最適化」ともいう)の為のソフトウェアとして、IBM(登録商標) COBOL Binary OptimizerをIBM(登録商標) alphaWorksからリリースしている。IBM(登録商標) COBOL Binary Optimizerは、COBOLプログラムのバイナリー・モジュール(すなわち、オリジナルのバイナリー・モジュール)に、ソースコードを再コンパイルすること無しに、最適化されたバイナリー・モジュールが実行されるシステム上で利用可能な新しいz/アーキテクチャ命令を適用することによって最適化する。
下記特許文献1は、実行すべきオリジナル・プログラムに存在するシステム・コール等の回復不可能ポイントとスレッド同期ポイントで、プログラムがセクションに区切られること、この処理は、コンパイラによって行なわれること、スレッド同期ポイントでプログラムを区切ることにより、トランジェント・フォールトが発生しない限り、適切な同期処理を行っているプログラムでは、2つのスレッドから同一の実行結果を得られることが保証されることを記載する(段落0010)。
下記特許文献2は、動的バイナリリライタ(dynamic binary rewriter)(DBR)サービスは、ハードウェア性能モニタからサンプルを集約し、ホットサンプルの周囲のプログラム構造を推定することによって領域選択を行い、選択された領域上で変形を行い(例えば最適化)、そして置換コードを生成することを記載する(段落0005)。
下記特許文献3は、少なくとも1つのプロセッサを備えた所定のハードウェア・プラットフォーム上で実行するのに適し、所定の分野のアプリケーションに用いる、ユーザーの提供するソースコードからの最適化コードの自動発生システム(段落0001)、並びに、当該システムが、ベンチマークシーケンス、静的パラメータおよび動的パラメータを用いて行われる試験およびパフォーマンスの測定から最適化ルールを作成する分析装置を備えていること(段落0030)を記載する。
下記特許文献4は、プログラムの移植作業の効率化を支援するプログラム移植支援システム(段落0001)、並びに、移植対象プログラムの解析は、プログラムの静的解析により移植の影響を受けない記述部分を選別する静的解析器と、既存の試験データTiを用いたプログラムの実行トレースによる情報収集に基づき、動作の条件に関わらず、その試験データに対しては全く移植の影響を受けない記述部分を選別する動的解析器で実施すること、及びこのときプログラム変換器は、プログラムの実行トレースに先立ち、移植の影響を受ける可能性のある記述に対し実行時情報を収集する機能を元のプログラムに挿入すること(段落0006)を記載する。
下記特許文献5は、異なるプロセッサ間でプログラムコードの変換を行う場合に、変換元のバイナリコードに含まれるプログラム上の工夫を、変換先のバイナリコードに反映することができるプログラムコード変換装置を記載する(段落0008)。
下記非特許文献1は、マルチコア・アーキテクチャのためのトランジエント・フォールト検出に対するソフトウェア・アプローチを記載し、当該ソフトウェア・アプローチでは、同一のプログラムを並列に実行し、当該トランジエント・フォールトを検出することに応じて、チェックポイントで同期し、出力を比較し、結果を複製する冗長実行が利用される旨を記載する(第7頁右欄「4.10 Transient Fault Recovery」の項を参照)。
下記非特許文献2は、Java(登録商標) JIT Compilerのテストシステムでは、ランダムなプログラムを生成し、信頼性の高いJava(登録商標) Runtimeにおける実行結果と、テスト対象のJIT Compilerでコンパイルしたプログラムの実行結果を比較する旨を記載する(第1頁左欄「Abstract」の項を参照)。
特開2011−44078号公報 特表2013−504124号公報 特表2007−518176号公報 特開平6−236295号公報 特開2008−276735号公報
PLR: A Software Approach to Transient Fault Tolerance for Multicore Architectures, A. Shye et al., IEEE Transactions on Dependable and Secure Computing, vol.6, no.2, 2009,<http://www.cs.du.edu/~dconnors/courses/old/lockheedOS/notes/PLR-paper.pdf>から入手可能 Random Program Generator for Java JIT Compiler Test System,Yoshikawa et al., Proceedings of the Third International Conference on Quality Software, 2003,<http://www.cs.du.edu/~dconnors/courses/old/lockheedOS/notes/PLR-paper.pdf>から入手可能
バイナリー最適化技術は、レガシー資産を大量に抱えているユーザーが新しいマシンへ移行するための技術でもある。しかしながら、当該ユーザーは、最適化したバイナリー・モジュールが正しく動作するかを確認するためのテストに掛かるコストに懸念を持っている。そこで、このコストを低減させることは、新しいマシンへの移行の促進の観点やビジネス的な観点から大きな課題である。
上記テストを人手ではなく、最適化したバイナリー・モジュールを実行するシステム環境(すなわち、本番環境)のバックグラウンドにおいて自動的にバイナリー最適化と当該最適化したバイナリー・モジュールのテストを行うことができれば、上記コストを下げることが可能になる。
そこで、本発明は、オリジナルのバイナリー・モジュールと、最適化したバイナリー・モジュールとが同一の入力に対して同一の実行結果を持つように最適化モジュールを作成するとともに、当該作成において、上記本番環境の性能をできるだけ低下させないように、プログラムの入力と正しい出力との組み合わせからなるテストケースを当該本番環境から取得し、上記最適化したバイナリー・モジュールのテストを可能にすることを目的とする。
また、最適化したバイナリー・モジュールにおいて、当該最適化したバイナリー・モジュール内の最適化したバイナリー・コードから、当該最適化したバイナリー・モジュール内のオリジナルのバイナリー・コードをコピーしたオリジナルのバイナリー・コードにサイド・エグジット(side exit)(ここでは、サイド・エグジットとはトレースから外れる為の分岐である)する部分がある場合に、レジスタ又はメモリのイメージが正しくないとプログラムの実行がフェール(fail)する。従って、最適化したバイナリー・コードのサイド・エグジットを含む全ての分岐が当該最適化したバイナリー・モジュールのテスト時に網羅されていること(すなわち、バイナリー・コード・レベルの分岐網羅がされていること)が必要である。分岐網羅とはコード網羅率の測定方法の1つであり、当該分岐網羅はバイナリー・コード上の分岐でそれぞれの分岐方向が実行されたかどうかで判断する手法である。
バイナリー最適化の従来技術として、例えば一定回数実行されたバックエッジ(後方参照されたエッジともいう)の先頭から始まるトレースを取得するという手法がある。当該手法において、バイナリー最適化する対象領域を選択すると、分岐網羅率が著しく下がる恐れがある。
図8は、従来手法において、オリジナルのバイナリー・コード中の分岐網羅率が低くなる領域を最適化する処理の説明を容易にする為に示したソースコード例であり、バイナリー最適化の対象であるオリジナルのバイナリー・コードに対応するソースコード例である。当該ループは、実行される確率が低い例外処理のコード((GO TO)(803)、及び(* error handling *)(813))を有するものとする。
上記ソースコード(801及び811)中、それぞれ行番号01〜04及び行番号01〜10は参照のために便宜的に付した番号である。
従来手法では、上記ソースコード(801)に対応する上記オリジナルのバイナリー・コードをバイナリー最適化するに際して、図8に示すソースコード(801)中のループのボディ(802)に対応するバイナリー・コードを最適化するが、当該最適化したバイナリー・コードには、実行される確率が低い例外処理(GO TO)(803)がサイド・エグジットとして含まれてしまう。当該サイド・エグジットは、最適化バイナリー・モジュール内の最適化した領域からオリジナルの最適化していない領域に戻るコードである。その為に、上記従来手法に従ってオリジナルのバイナリー・コードをバイナリー最適化すると、網羅率が著しく下がる可能性がある。従って、実行される確率が低い例外処理のサイド・エグジットを最適化領域として含めないことが好ましい。
また、従来手法では、上記ソースコード(811)に対応する上記オリジナルのバイナリー・コードをバイナリー最適化するに際して、図8に示すソースコード(811)中のループのボディ(812)に対応するバイナリー・コードを最適化するが、当該最適化したバイナリー・コードには、実行される確率が低い例外処理(* error handling *)(813)がサイド・エグジットとして含まれてしまう。その為に、上記ソースコード(811)に対応するバイナリー・コードを上記従来手法に従ってバイナリー最適化すると、分岐網羅率が著しく下がる可能性がある。従って、実行される確率が低い例外処理のサイド・エグジット(813)を最適化領域として含めずに、上記ループの後半部分(814)に対応するバイナリー・コードを最適化することが好ましい。
図9に示すダイアグラム(901)のトレースは、上記従来手法に従い作成されたトレースを示す。当該ダイアグラム(901)のトレースでは分岐確率が低い分岐先を持つ分岐命令が4つあり、それぞれの分岐命令について分岐先の分岐確率が示してある。当該分岐確率は、オリジナルのバイナリー・モジュールのプロファイル情報での分岐確率を示す。分岐網羅率(すなわち、最適化されたバイナリー・モジュールのテスト時に当該最適化バイナリー・モジュール内の最適化バイナリー・コードの分岐が1回でも実行されたかどうかを示す)では、それぞれの分岐命令についてそれぞれの分岐先へ最低1度は分岐しないと、分岐網羅率100%にならない。しかしながら、当該ダイアグラム(901)のトレースでは、上記4つの分岐命令の片方の分岐先への分岐確率がいずれも0%である。従って、当該ダイアグラム(901)のトレースでは、100%の分岐網羅率は達成されない。
そこで、本発明は、トレースとして、分岐確率が低い分岐先を持つ分岐命令が含まれないようにすることを保証することを目的とする。
本発明は、最適化したバイナリー・モジュールをテストするための技法を提供する。当該技法は、上記最適化したバイナリー・モジュールをテストする方法、並びに、当該実行頻度情報を得るためのコンピュータ、コンピュータ・プログラム及びコンピュータ・プログラム製品を包含しうる。
(本発明に従う第1の態様)
本発明に従う第1の態様において、最適化したバイナリー・モジュールをテストする方法であって、コンピュータが、
プロファイル情報に基づいて、オリジナルのバイナリー・モジュール内のオリジナルのバイナリー・コード中の分岐網羅される見込みのある領域を最適化の対象領域として選択するステップと、
選択した対象領域を最適化したバイナリー・モジュール(以下、「最適化バイナリー・モジュール」ともいう)を作成するステップと、
上記最適化バイナリー・モジュールと上記オリジナルのバイナリー・モジュールとをそれぞれ実行しながら、チェックポイントで上記最適化バイナリー・モジュールの実行と上記オリジナルのバイナリー・モジュールの実行とを同期させて、上記最適化バイナリー・モジュールの実行の出力と上記オリジナルのバイナリー・モジュールの実行の出力とを比較することによって上記最適化バイナリー・モジュールを検証するステップと
を実行することを含む。
本発明の一つの実施態様において、上記プロファイル情報が、タイマー・サンプリング(timer sampling)、又は、オリジナルのバイナリー・モジュールの分岐命令をインストラメンテーションすることによって得られる情報、若しくは、ランタイム・インストラメンテーション(Runtime Instrumentation,RI)を利用することによって得られる情報でありうる。
本発明の一つの実施態様において、上記方法は、上記コンピュータが、
所定の時間の経過後に、上記最適化バイナリー・モジュール内の最適化したバイナリー・コード領域の分岐網羅が達成されないことに応じて、上記選択した対象領域を縮小するステップと、
縮小した対象領域について、上記作成するステップ及び上記検証するステップを再実行するステップと
をさらに実行することを含みうる。
本発明の一つの実施態様において、上記選択した対象領域を縮小するステップが、
上記所定の時間の経過後に、上記最適化バイナリー・モジュール内の上記最適化バイナリー・コード領域の分岐網羅が達成されないこと且つテスト時間が超過したことに応じて、分岐をトレースに含めるかを判断する為の閾値を上げるステップ
をさらに含みうる。上記閾値は、分岐先に分岐した回数を総分岐実行回数で除した分岐確率の閾値である。
本発明の一つの実施態様において、上記分岐網羅される見込みのある領域を選択するステップが、
上記プロファイル情報を用いて、上記コンピュータの中央演算処理装置リソースを消費するプロセスと、当該プロセスで上記中央演算処理装置リソースを消費しているオリジナルのバイナリー・モジュールとを検出するステップと、
検出したオリジナルのバイナリー・モジュールの分岐命令をインストラメンテーション(instrumentation)し、分岐網羅が達成可能であり且つ実行頻度が高いトレースを検出するステップ
を含みうる。そして、上記コンピュータは、検出したトレースを上記最適化の対象領域として用いる。
本発明の一つの実施態様において、上記分岐網羅される見込みのある領域を選択するステップが、
上記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結合領域を作成するステップ
を含みうる。そして、上記コンピュータは、上記結合領域を上記最適化の対象領域として用いる。
本発明の一つの実施態様において、上記分岐網羅される見込みのある領域を選択するステップが、
トレースの先頭候補として下記条件(S1)〜(S3)のうちのいずれか1つ又は複数を選択するステップと:
(S1)バック−エッジの分岐先;
(S2)既に存在するトレースのイグジット(exit)先;又は、
(S3)プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つと判断された分岐命令のいずれかの分岐先、
選択したトレースそれぞれの先頭候補の実行に応じて、当該トレースの先頭候補に関連付けられたカウンタをインクリメントするステップと、
上記カウンタが閾値を超えたことに応じて、当該閾値を超えたトレースの先頭候補から下記条件(E1)〜(E5)のうちのいずれか1つを示すトレースの末尾候補までを1つのトレースとするステップと:
(E1)次のバック−エッジの分岐命令;
(E2)別のトレースの先頭へ分岐する命令、若しくは、直後の命令が別のトレースの先頭である非分岐命令(例えば、直後の命令が別のトレースの先頭であるフォール・スルー(fall through)する命令);
(E3)プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つ分岐命令の直前の命令;
(E4)上記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結合領域を作成する場合には、エッジが2つ以上合流する点の直前の命令;又は
(E5)プログラムの終端
を含みうる。
本発明の一つの実施態様において、上記プロファイル履歴が、オリジナルのバイナリー・モジュールの分岐命令をインストラメンテーションすることによって得られる情報、又は、ランタイム・インストラメンテーションを利用することによって得られる情報でありうる。
本発明の一つの実施態様において、上記最適化の対象領域が、分岐確率が小さいサイド・イグジット(side exit)を含まないようにしうる。
本発明の一つの実施態様において、上記最適化バイナリー・モジュールを作成するステップが、
上記最適化バイナリー・モジュールのチェックポイントを、上記オリジナルのバイナリー・モジュールと同等の入力と出力結果とを持つように最適化するステップ
を含みうる。
本発明の一つの実施態様において、上記最適化バイナリー・モジュールを作成するステップが、
上記最適化バイナリー・モジュールのチェックポイントの呼び出しが、上記オリジナルのバイナリー・モジュール中の同等のチェックポイントの呼び出しと同じ順番となるように、上記オリジナルのバイナリー・モジュールを最適化するステップ
を含みうる。
本発明の一つの実施態様において、上記チェックポイントで上記最適化バイナリー・モジュールの実行と上記オリジナルのバイナリー・モジュールの実行とを同期させるステップが、
上記オリジナルのバイナリー・モジュールを検証用プロセスにロードし、上記最適化バイナリー・モジュールをテスト用プロセスにロードするステップと、
上記チェックポイントで、上記検証用プロセスと上記テスト用プロセスとを同期するステップと
を含みうる。
本発明の一つの実施態様において、上記最適化バイナリー・モジュールの実行の上記出力と上記オリジナルのバイナリー・モジュールの実行の上記出力とを比較するステップが、
上記テスト用プロセスの出力と上記検証用プロセスの出力とを比較するステップ
を含みうる。
本発明の一つの実施態様において、上記最適化バイナリー・モジュールを検証するステップが、
上記最適化バイナリー・モジュールの終了コード及び終了ステータスと、上記オリジナルのバイナリー・モジュールの終了コード及び終了ステータスとをそれぞれ比較することによって上記最適化バイナリー・モジュールを検証するステップ
を含みうる。
本発明の一つの実施態様において、上記方法は、上記コンピュータが、
上記最適化バイナリー・モジュールの実行の上記出力と上記オリジナルのバイナリー・モジュールの実行の上記出力との比較の結果、上記最適化バイナリー・モジュールが正しく実行されていることに応じて、上記チェックポイントのコードを上記オリジナルのバイナリー・モジュールを実行しているプロセスでのみ実行するステップと、
上記オリジナルのバイナリー・モジュールを実行しているプロセスでのみ実行された上記チェックポイントのコードの実行結果を、上記最適化バイナリー・モジュールを実行しているプロセスにコピーするステップと
をさらに実行することを含みうる。
本発明の一つの実施態様において、上記方法は、上記コンピュータが、
上記チェックポイントでの全ての入出力の合計サイズが所定の閾値よりも小さいことに応じて、当該全ての入出力を保存するステップと、
上記コンピュータの負荷が所定の閾値よりも小さい時間帯において、上記最適化バイナリー・モジュールのテストを実行するステップと
をさらに実行することを含みうる。
本発明の一つの実施態様において、上記方法は、上記コンピュータが、
上記テスト用プロセスの出力と上記検証用プロセスの出力との比較の結果、上記最適化バイナリー・モジュールが正しく実行されていることに応じて、上記チェックポイントのコードを上記検証用プロセスでのみ実行するステップと、
上記検証用プロセスでのみ実行された上記チェックポイントのコードの実行結果を、上記テスト用プロセスにコピーするステップ
をさらに実行することを含みうる。
本発明の一つの実施態様において、上記方法は、上記コンピュータが、
上記チェックポイントへの入力と、当該チェックポイントのコードを上記検証用プロセスでのみ実行した実行結果とを、バッファに格納するステップと、
上記バッファに上記チェックポイントへの全ての入力と上記実行結果とが格納されていることに応じて、上記コンピュータの負荷が所定の閾値よりも小さい時間帯において、上記テスト用プロセスでのテストを実行するステップと
をさらに実行することを含みうる。
本発明の一つの実施態様において、上記チェックポイントが、システム・コール又は標準ライブラリ・コールでありうる。システム・コール又は標準ライブラリ・コールとして、任意のものを使用しうる。
(本発明に従う第2の態様)
本発明に従う第2の態様において、最適化したバイナリー・モジュールをテストするためのコンピュータは、
プロファイル情報に基づいて、オリジナルのバイナリー・モジュール内のオリジナルのバイナリー・コード中の分岐網羅される見込みのある領域を最適化の対象領域として選択する対象領域選択手段と、
選択した対象領域を最適化したバイナリー・モジュール(最適化バイナリー・モジュール)を作成する最適化バイナリー・モジュール作成手段と、
上記最適化バイナリー・モジュールと上記オリジナルのバイナリー・モジュールとをそれぞれ実行しながら、チェックポイントで上記最適化バイナリー・モジュールの実行と上記オリジナルのバイナリー・モジュールの実行とを同期させて、上記最適化バイナリー・モジュールの実行の出力と上記オリジナルのバイナリー・モジュールの実行の出力とを比較することによって上記最適化バイナリー・モジュールを検証する検証手段と
を備えている。
本発明の一つの実施態様において、上記プロファイル情報が、タイマー・サンプリング、又は、オリジナルのバイナリー・モジュールの分岐命令をインストラメンテーションすることによって得られる情報、若しくは、ランタイム・インストラメンテーションを利用することによって得られる情報でありうる。
本発明の一つの実施態様において、上記対象領域選択手段が、
所定の時間の経過後に、上記最適化バイナリー・モジュール内の最適化したバイナリー・コード領域の分岐網羅が達成されないことに応じて、上記選択した対象領域を縮小する縮小手段
をさらに備えており、
上記最適化バイナリー・モジュール作成手段が、縮小した対象領域を最適化したバイナリー・モジュールを作成することをさらに実行し、及び
上記検証手段が、上記縮小した対象領域を最適化した最適化バイナリー・モジュールと上記オリジナルのバイナリー・モジュールとをそれぞれ実行しながら、チェックポイントで上記最適化バイナリー・モジュールの実行と上記オリジナルのバイナリー・モジュールの実行とを同期させて、上記縮小した対象領域を最適化した上記最適化バイナリー・モジュールの実行の出力と上記オリジナルのバイナリー・モジュールの実行の出力とを比較することによって上記縮小した対象領域を最適化した上記最適化バイナリー・モジュールを検証することをさらに実行しうる。
本発明の一つの実施態様において、上記検証手段が、上記選択した対象領域を縮小することにおいて、上記所定の時間の経過後に、上記最適化バイナリー・モジュール内の上記最適化したバイナリー・コード領域の分岐網羅が達成されないこと且つテスト時間が超過したことに応じて、分岐をトレースに含めるかを判断する為の閾値を上げることをさらに実行しうる。当該閾値は、分岐先に分岐した回数を総分岐実行回数で除した分岐確率の閾値である。
本発明の一つの実施態様において、上記対象領域選択手段が、
上記プロファイル情報を用いて、上記コンピュータの中央演算処理装置リソースを消費するプロセスと、当該プロセスで上記中央演算処理装置リソースを消費しているオリジナルのバイナリー・モジュールとを検出すること、
検出したオリジナルのバイナリー・モジュールの分岐命令をインストラメンテーションし、分岐網羅が達成可能であり且つ実行頻度が高いトレースを検出すること
を実行しうる。そして、上記最適化バイナリー・モジュール作成手段は、検出したトレースを上記最適化の対象領域として用いうる。
本発明の一つの実施態様において、上記対象領域選択手段が、
上記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結合領域を作成することを実行しうる。そして、上記最適化バイナリー・モジュール作成手段は、上記結合領域を上記最適化の対象領域として用いうる。
本発明の一つの実施態様において、上記対象領域選択手段が、
トレースの先頭候補として下記条件(S1)〜(S3)のうちのいずれか1つ又は複数を選択すること:
(S1)バック−エッジの分岐先;
(S2)既に存在するトレースのイグジット先;又は、
(S3)プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つと判断された分岐命令のいずれかの分岐先、
選択したトレースそれぞれの先頭候補の実行に応じて、当該トレースの先頭候補に関連付けられたカウンタをインクリメントすること、
上記カウンタが閾値を超えたことに応じて、当該閾値を超えたトレースの先頭候補から下記条件(E1)〜(E5)のうちのいずれか1つを示す領域の末尾候補までを1つのトレースとすること:
(E1)次のバック−エッジの分岐命令;
(E2)別のトレースの先頭へ分岐する命令、若しくは、直後の命令が別のトレースの先頭である非分岐命令(例えば、直後の命令が別のトレースの先頭であるフォール・スルーする命令);
(E3)プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つ分岐命令の直前の命令;
(E4)上記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結合領域を作成する場合には、エッジが2つ以上合流する点の直前の命令;又は
(E5)プログラム終端
を実行しうる。
本発明の一つの実施態様において、上記プロファイル履歴が、オリジナルのバイナリー・モジュールの分岐命令をインストラメンテーションすることによって得られる情報、又は、ランタイム・インストラメンテーションを利用することによって得られる情報でありうる。
本発明の一つの実施態様において、上記最適化の対象領域が、分岐確率が小さいサイド・イグジットを含まないようにしうる。
本発明の一つの実施態様において、上記最適化バイナリー・モジュール作成手段が、上記最適化バイナリー・モジュールのチェックポイントを、上記オリジナルのバイナリー・モジュールと同等の入力と出力結果とを持つように最適化することを実行しうる。
本発明の一つの実施態様において、上記最適化バイナリー・モジュール作成手段が、上記最適化バイナリー・モジュールのチェックポイントの呼び出しが、上記オリジナルのバイナリー・モジュール中の同等のチェックポイントの呼び出しと同じ順番となるように、上記オリジナルのバイナリー・モジュールを最適化することを実行しうる。
本発明の一つの実施態様において、上記検証手段が、上記チェックポイントで上記最適化バイナリー・モジュールの実行と上記オリジナルのバイナリー・モジュールの実行とを同期させることにおいて、
上記オリジナルのバイナリー・モジュールを検証用プロセスにロードし、上記最適化バイナリー・モジュールをテスト用プロセスにロードすること、
上記チェックポイントで、上記検証用プロセスと上記テスト用プロセスとを同期すること
を実行しうる。
本発明の一つの実施態様において、上記検証手段が、上記最適化バイナリー・モジュールの実行の上記出力と上記オリジナルのバイナリー・モジュールの実行の上記出力とを比較することにおいて、
上記テスト用プロセスの出力と上記検証用プロセスの出力とを比較すること
を実行しうる。
本発明の一つの実施態様において、上記検証手段が、上記最適化バイナリー・モジュールの終了コード及び終了ステータスと、上記オリジナルのバイナリー・モジュールの終了コード及び終了ステータスとをそれぞれ比較することによって上記最適化バイナリー・モジュールを検証することを実行しうる。
本発明の一つの実施態様において、上記コンピュータは、
上記最適化バイナリー・モジュールの実行の上記出力と上記オリジナルのバイナリー・モジュールの実行の上記出力との比較の結果、上記最適化バイナリー・モジュールが正しく実行されていることに応じて、上記チェックポイントのコードを上記オリジナルのバイナリー・モジュールを実行しているプロセスでのみ実行する実行手段と、
上記オリジナルのバイナリー・モジュールを実行しているプロセスでのみ実行された上記チェックポイントのコードの実行結果を、上記最適化バイナリー・モジュールを実行しているプロセスにコピーするコピー手段と
をさらに備えうる。
本発明の一つの実施態様において、上記実行手段は、上記チェックポイントでの全ての入出力の合計サイズが所定の閾値よりも小さいことに応じて、当該全ての入出力を保存することを実行し、且つ、上記コンピュータの負荷が所定の閾値よりも小さい時間帯において、上記最適化バイナリー・モジュールのテストを実行しうる。
本発明の一つの実施態様において、
上記実行手段が、上記テスト用プロセスの出力と上記検証用プロセスの出力との比較の結果、上記最適化バイナリー・モジュールが正しく実行されていることに応じて、上記チェックポイントのコードを上記検証用プロセスでのみ実行し、
上記コピー手段が、上記検証用プロセスでのみ実行された上記チェックポイントのコードの実行結果を、上記テスト用プロセスにさらにコピーすることを実行しうる。
本発明の一つの実施態様において、上記コンピュータは、上記チェックポイントへの入力と、当該チェックポイントのコードを上記検証用プロセスでのみ実行した実行結果とを格納する格納手段をさらに備えており、
上記実行手段が、
上記バッファに上記チェックポイントへの全ての入力と上記実行結果とが格納されていることに応じて、上記コンピュータの負荷が所定の閾値よりも小さい時間帯において、上記テスト用プロセスでのテストをさらに実行しうる。
本発明の一つの実施態様において、上記チェックポイントが、システム・コール又は標準ライブラリ・コールでありうる。
(本発明に従う第3の態様)
本発明に従う第3の態様において、最適化したバイナリー・モジュールをテストするためのコンピュータ・プログラム又はコンピュータ・プログラム製品は、コンピュータに、上記第1の態様に記載の方法の各ステップを実行させる。
本発明の実施態様に従うコンピュータ・プログラムはそれぞれ、一つ又は複数のフレキシブル・ディスク、MO、CD−ROM、DVD、BD、ハードディスク装置、USBに接続可能なメモリ媒体、ROM、MRAM、RAM等の任意のコンピュータ読み取り可能な記録媒体に格納することができる。当該コンピュータ・プログラムは、上記記録媒体への格納のために、通信回線で接続する他のコンピュータ、例えばサーバ・コンピュータからダウンロードしたり、又は他の記録媒体から複製したりすることができる。また、本発明の実施態様に従うコンピュータ・プログラムは、圧縮し、又は複数に分割して、単一又は複数の記録媒体に格納することもできる。また、様々な形態で、本発明の実施態様に従うコンピュータ・プログラム製品を提供することも勿論可能であることにも留意されたい。本発明の実施態様に従うコンピュータ・プログラム製品は、例えば、上記コンピュータ・プログラムを記録した記憶媒体、又は、上記コンピュータ・プログラムを伝送する伝送媒体を包含しうる。
本発明の上記概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの構成要素のコンビネーション又はサブコンビネーションもまた、本発明となりうることに留意すべきである。
本発明の実施態様において使用されるコンピュータの各ハードウェア構成要素を、複数のマシンと組み合わせ、それらに機能を配分し実施する等の種々の変更は当業者によって容易に想定され得ることは勿論である。それらの変更は、当然に本発明の思想に包含される概念である。ただし、これらの構成要素は例示であり、そのすべての構成要素が本発明の必須構成要素となるわけではない。
また、本発明は、ハードウェア、ソフトウェア、又は、ハードウェア及びソフトウェアの組み合わせとして実現可能である。ハードウェアとソフトウェアとの組み合わせによる実行において、上記コンピュータ・プログラムのインストールされたコンピュータにおける実行が典型的な例として挙げられる。かかる場合、当該コンピュータ・プログラムが当該コンピュータのメモリにロードされて実行されることにより、当該コンピュータ・プログラムは、当該コンピュータを制御し、本発明にかかる処理を実行させる。当該コンピュータ・プログラムは、任意の言語、コード、又は、表記によって表現可能な命令群から構成されうる。そのような命令群は、当該コンピュータが特定の機能を直接的に、又は、1.他の言語、コード若しくは表記への変換及び、2.他の媒体への複製、のいずれか一方若しくは双方が行われた後に、本発明の実施態様に従う処理を実行することを可能にするものである。
本発明の実施態様に従うと、本番環境のバックグラウンドにおいて、上記本番環境の性能をできるだけ低下させないように、プログラムの入力と正しい出力との組み合わせからなるテストケースを当該本番環境から取得し、自動的にバイナリー最適化と当該最適化したバイナリー・モジュールのテストを行うことが可能になる。
また、本発明の実施態様に従うと、オリジナルのバイナリー・モジュール内のオリジナルのバイナリー・コード中の分岐網羅される見込みのある領域を最適化の対象領域として選択するために、例えば実行される確率が低い例外処理のサイド・エグジットが最適化領域として含まれない。その結果、最適化バイナリー・モジュール内の最適化バイナリー・コードでの分岐網羅率が改善される。
また、本発明の実施態様に従うと、オリジナルのバイナリー・モジュール内のオリジナルのバイナリー・コード中の最適化の対象領域を縮小することによって、テストの分岐網羅率の向上と、当該分岐網羅率の達成にかかる時間を短縮することが可能になる。さらに、最適化の対象領域を段階的に縮小することによって、テストの分岐網羅率のさらなる向上と、当該分岐網羅率の達成にかかる時間をさらに短縮することが可能になるとともに、テストケースの実行に伴う本願環境の性能低下が長引かないように制限することが可能になる。
また、本発明の実施態様に従うと、人手によるテスト環境の構築と上記テストケースの実行を行うこと無しに、オリジナルのバイナリー・モジュール中の分岐網羅される見込みのある領域の最適化、当該最適化により生成された最適化バイナリー・モジュールのテスト、そして当該最適化バイナリー・モジュールへの切り替えまでの一連の作業を、上記本願環境において透過的に行うバイナリー最適化システムを実現することが可能になる。
本発明の実施態様に従う又は本発明の実施態様において使用されうるコンピュータの一例を示した図である。 本発明の実施態様に従い、最適化したバイナリー・モジュールをテストする処理の為のフローチャート(ステップ1〜4)を示す。 本発明の実施態様に従い、最適化したバイナリー・モジュールをテストする処理の為のフローチャート(ステップ5〜11)を示す。 本発明の実施態様に従い、図2Aに示すフローチャートのステップのうち、ステップ2の詳細な処理のフローチャートを示す。 本発明の実施態様に従い、最適化バイナリー・モジュールの実行の出力とオリジナルのバイナリー・モジュールの実行の出力との比較の結果、上記最適化バイナリー・モジュールが正しく実行されていることに応じて、チェックポイントのコードを上記オリジナルのバイナリー・モジュールを実行しているプロセスでのみ実行し、当該オリジナルのバイナリー・モジュールを実行しているプロセスでのみ実行された上記チェックポイントのコードの実行結果を、上記最適化バイナリー・モジュールを実行しているプロセスにコピーする処理の為のフローチャートを示す。 本発明の実施態様に従い、チェックポイントでの全ての入出力の合計サイズが所定の閾値よりも小さいことに応じて、当該全ての入出力を保存し、コンピュータの負荷が所定の閾値よりも小さい時間帯において、上記最適化バイナリー・モジュールのテストを実行する処理の為のフローチャートを示す。 本発明の実施態様に従い、オリジナルのバイナリー・モジュール内のオリジナルのバイナリー・コード中の分岐網羅される見込みのある領域を最適化の対象領域として選択する処理の説明を容易にする為に示したソースコード例であり、バイナリー最適化の対象であるオリジナルのバイナリー・コードに対応するソースコード例である。 本発明の実施態様に従い、図2Aに示すフローチャートのステップのうち、上記ステップ2に示す処理の説明を容易にする為に示したソースコード例であり、バイナリー最適化の対象であるオリジナルのバイナリー・コードに対応するソースコード例である。 本発明の実施態様に従い、最適化したバイナリー・モジュールをテストする処理の説明を容易にする為に示したソースコード例であり、バイナリー最適化の対象であるオリジナルのバイナリー・コードに対応するソースコード例である。 本発明の実施態様に従い、図3Aに示すテスト実行Aの処理を示すダイアグラム図である。 本発明の実施態様に従い、所定の時間の経過後に、最適化バイナリー・モジュール内の最適化バイナリー・コード領域の分岐網羅が達成されないことに応じて、選択した対象領域を縮小する処理を示すダイアグラム図である。 本発明の実施態様に従い作成されたトレースを示し、当該トレースでは分岐確率が低い分岐先を持つ分岐命令がないことを示す。 図1に従うハードウェア構成を好ましくは備えており、本発明の実施態様に従い上記最適化したバイナリー・モジュールをテストするコンピュータの機能ブロック図の一例を示した図である。 従来手法において、オリジナルのバイナリー・コード中の分岐網羅率が低くなる領域を最適化する処理の説明を容易にする為に示したソースコード例であり、バイナリー最適化の対象であるオリジナルのバイナリー・コードに対応するソースコード例である。 従来手法に従い作成されたトレースを示し、当該トレースでは分岐確率が低い分岐先を持つ分岐命令を含むことを示す。
本発明の実施形態を、以下に図面に従って説明する。以下の図を通して、特に断らない限り、同一の符号は同一の対象を指す。本発明の実施形態は、本発明の好適な態様を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。
本発明の実施態様において使用されうるコンピュータは、最適化したバイナリー・モジュールをテストすることができるコンピュータであれば特に限定されない。当該コンピュータは例えば、例えば、メインフレーム・コンピュータ、サーバ・コンピュータ、デスクトップ・コンピュータ、ノート・コンピュータ若しくは一体型パソコン、又は、タブレット端末若しくはスマートフォン(例えば、Windows(登録商標)、アンドロイド(登録商標)又はiOSを搭載したタブレット端末若しくスマートフォン)でありうる。
図1は、本発明の実施態様に従う又は本発明の実施態様において使用されうるコンピュータの一例を示した図である。
コンピュータ(101)は、CPU(102)とメイン・メモリ(103)とを備えており、これらはバス(104)に接続されている。CPU(102)は好ましくは、32ビット又は64ビットのアーキテクチャに基づくものである。当該CPU(102)は例えば、インテル社のCore(商標) iシリーズ、Core(商標) 2シリーズ、Atom(商標)シリーズ、Xeon(登録商標)シリーズ、Pentium(登録商標)シリーズ若しくはCeleron(登録商標)シリーズ、AMD(Advanced Micro Devices)社のAシリーズ、Phenom(商標)シリーズ、Athlon(商標)シリーズ、Turion(登録商標)シリーズ若しくはSempron(商標)、又は、インターナショナル・ビジネス・マシーンズ・コーポレーションのPower(商標)シリーズでありうる。
バス(104)には、ディスプレイ・コントローラ(105)を介して、ディスプレイ(106)、例えば液晶ディスプレイ(LCD)が接続されうる。また、液晶ディスプレイ(LCD)は例えば、タッチパネル・ディスプレイ又はフローティング・タッチ・ディスプレイであてもよい。ディスプレイ(106)は、コンピュータ(101)上で動作中のソフトウェア(例えば、本発明の実施態様に従うコンピュータ・プログラム又は当該コンピュータ(101)上で動作中の各種コンピュータ・プログラム)が稼働することによって表示されるオブジェクトを、適当なグラフィック・インタフェースで表示するために使用されうる。また、ディスプレイ(106)は例えば、最適化バイナリー・モジュールの検証結果を出力しうる。当該検証結果は例えば、最適化バイナリー・モジュールをロードしたテスト用プロセスの終了コード(例えば、正常にプロセスが終了したことオペレーティング・システムに返すためのコードであり、例えば、プロセスが異常終了した場合にはエラーの種別を表す特定の値でありうる)及び終了ステータス(プロセスに関連付けられているものであり、例えば、セグメンテーション・フォールト又は正常終了でありうる)と、オリジナルのバイナリー・モジュールをロードした検証用プロセスの終了コード及び終了ステータスとをそれぞれ比較して、上記テスト用プロセスが正しく終了したかを示す結果でありうる。
バス(104)には任意的に、例えばSATA又はIDEコントローラ(107)を介して、ディスク(108)、例えばハードディスク又はソリッド・ステート・ドライブ(SSD)が接続されうる。
バス(104)には任意的に、例えばSATA又はIDEコントローラ(107)を介して、ドライブ(109)、例えばCD、DVD又はBDドライブが接続されうる。
バス(104)には、周辺装置コントローラ(110)を介して、例えばキーボード・マウス・コントローラ又はUSBバスを介して、任意的に、キーボード(111)及びマウス(112)が接続されうる。
ディスク(108)には、オペレーティング・システム、例えばz/OS(登録商標)、z/VM(登録商標)、z/VSE(登録商標)、z/TPF、VOS3、UNIX(登録商標)、Windows(登録商標)、MacOS(登録商標)、及びJ2EEなどのJava(登録商標)処理環境、Java(登録商標)アプリケーション、Java(登録商標)仮想マシン(VM)、Java(登録商標)実行時(JIT)コンパイラを提供するプログラム、本発明の実施態様に従うコンピュータ・プログラム、及びその他のプログラム、並びにデータが、メイン・メモリ(103)にロード可能なように記憶されうる。
ディスク(108)は、コンピュータ(101)内に内蔵されていてもよく、当該コンピュータ(101)がアクセス可能なようにケーブルを介して接続されていてもよく、又は、当該コンピュータ(101)がアクセス可能なように有線又は無線ネットワークを介して接続されていてもよい。
ドライブ(109)は、必要に応じて、CD−ROM、DVD−ROM又はBDからプログラム、例えばオペレーティング・システム、アプリケーション又は本発明の実施態様に従うコンピュータ・プログラムをディスク(108)にインストールするために使用されうる。
通信インタフェース(114)は、例えばイーサネット(登録商標)・プロトコルに従う。通信インタフェース(114)は、通信コントローラ(113)を介してバス(104)に接続され、コンピュータ(101)を通信回線(115)に有線又は無線接続する役割を担い、コンピュータ(101)のオペレーティング・システムの通信機能のTCP/IP通信プロトコルに対して、ネットワーク・インタフェース層を提供する。なお、通信回線は例えば、無線LAN接続規格に基づく無線LAN環境、IEEE802.11a/b/g/nなどのWi−Fi無線LAN環境、又は携帯電話網環境(例えば、3G又は4G環境)でありうる。
下記図2A〜図3Bそれぞれは、本発明の実施態様に従い、オリジナルのバイナリー・モジュールから最適化する対象領域を選択し、当該選択した対象領域を最適化した最適化バイナリー・モジュールを作成し、当該作成した最適化したバイナリー・モジュールをテストする処理の為のフローチャートを示す。
図2A及び図2Bそれぞれは、本発明の実施態様に従い、オリジナルのバイナリー・モジュールから最適化する対象領域を選択し、当該選択した対象領域を最適化した最適化バイナリー・モジュールを作成し、当該作成した最適化バイナリー・モジュールをテストする処理の為のフローチャート(ステップ1〜4)及び(ステップ5〜11)を示す。
ステップ201において、コンピュータ(101)は、オリジナルのバイナリー・モジュールから最適化する対象領域を選択し、当該選択した対象領域を最適化した最適化バイナリー・モジュールを作成し、当該作成した最適化したバイナリー・モジュールをテストする処理を開始する。
ステップ202(以下、「ステップ1」ともいう)において、コンピュータ(101)は、プロファイル情報を利用して、中央演算処理装置(例えば、CPU)リソースを消費するプロセスと、当該プロセスで中央演算処理装置リソースを実際に消費しているオリジナルのバイナリー・モジュールとを検出する。オリジナルのバイナリー・モジュールは例えば、当該オリジナルのバイナリー・モジュールからトレースを作成することが可能であり、当該オリジナルのバイナリー・モジュールを最適化した最適化バイナリー・モジュールが異なるプロセス(同一のコンピュータ上の異なるプロセスであっても、異なるコンピュータ上のプロセスであってもよい)で実行可能であれば、その種類は特に制限されない。
ステップ1で使用するプロファイル情報は例えば、頻繁に実行されるプロセスとバイナリー・モジュールとを検出可能とするパラメータであれば特にその種類を問わない。当該プロファイル情報は特には例えば、タイマー・サンプリングでありうる。また、当該プロファイル情報は例えば、System zにおいて使用されるSMF(System Management Facilities)、又は、ランタイム・インストラメンテーション(Runtime Instrumentation)でありうる。
ステップ203(以下、「ステップ2」ともいう)において、コンピュータ(101)は、上記ステップ1で検出したバイナリー・モジュール中の分岐命令をインストラメンテーションし、上記プロセスの実行中に当該インストラメンテーションしたコードを含むモジュールを実行し、当該インストラメンテーションしたコードで、下記図2Cに示す処理を実行することにより、テスト・ステップで分岐網羅が達成可能であり且つ実行頻度が高いトレースを検出する。当該実行頻度が高いことは、上記プロセスにおける当該トレースの実行回数で判断する。当該実行頻度が高いことは例えば、下記図2Cに示すステップ2−3におけるカウンタが所定の閾値を超えることで判断されうる。当該検出されたトレースは、下記ステップ4において最適化の対象領域となりうる。バイナリー・モジュール中の分岐命令をインストラメンテーションすることは、プロファイルを可能にするコードを挿入したりすることである。バイナリー・モジュール中にインストラメンテーションしたコードは、プロファイル情報(例えば、それぞれの分岐命令の総分岐実行回数やそれぞれの分岐先に分岐した回数)を取得しつつ(当該取得したプロファイル情報は、プロファイル履歴として格納される)、同時に図2Cに示す処理を実行する。ステップ2の詳細な処理を、下記図2Cに示す。
上記プロファイル履歴は例えば、オリジナルのバイナリー・モジュールの分岐命令をインストラメンテーションすることによって得られる情報、又は、ランタイム・インストラメンテーションを利用することによって得られる情報でありうる。
ステップ204(以下、「ステップ3」ともいう)は任意のステップであり、当該ステップ204において、コンピュータ(101)は、上記ステップ2で検出したトレースについて、当該トレースの分岐先から始まるトレースが存在することに応じて、複数のトレースを結合して、トレースよりもより大きな結合領域を作成する。当該結合領域は、下記ステップ4において最適化の対象領域となりうる。当該結合領域を作成することによって、最適化の効果が増す。
ステップ205(以下、「ステップ4ともいう)において、コンピュータ(101)は、ステップ2で検出した上記トレース又はステップ3で作成した上記結合領域を最適化の対象領域とし、当該最適化の対象領域を最適化したバイナリー・モジュール(最適化バイナリー・モジュール)を作成する。コンピュータ(101)は、上記最適化バイナリー・モジュールにおいて、オリジナルのバイナリー・モジュールと同等の入力と出力(実行結果)を持ち、且つ、最適化バイナリー・モジュール用のチェックポイントのコードをオリジナルのバイナリー・モジュールと同じ順番で呼び出すことができるように、上記オリジナルのバイナリー・モジュールを最適化しうる。上記チェックポイントは例えば、標準ライブラリールーチンの呼び出し、又はシステム・コールでありうる。
ステップ206(以下、「ステップ5」ともいう)は任意のステップであり、当該ステップ206において、コンピュータ(101)は、下記図3Aに示すテスト実行Aのフローチャートで保存された1つ又は複数のテストケースがある場合には、下記図3Bに示すテスト実行Bのフローチャートに従い、負荷の少ない時間帯に上記テストケースそれぞれを実行する。また、コンピュータ(101)は、保存されたテストケースがまだない場合には、当該ステップ5及び下記ステップ6をスキップしうる。
ステップ207(以下、「ステップ6」ともいう)において、コンピュータ(101)は、上記最適化バイナリー・モジュール内の最適化バイナリー・コードの分岐網羅が達成されたかを判断する。コンピュータ(101)は、上記分岐網羅が達成されていないことに応じて、処理をステップ208に進める。一方、コンピュータ(101)は、上記分岐網羅が達成されていることに応じて、処理をステップ212に進める。
ステップ208(以下、「ステップ7」ともいう)において、コンピュータ(101)は、下記図3Aに示すテスト実行Aのフローチャートに従い、テストを実行する。
ステップ209(以下、「ステップ8」ともいう)において、コンピュータ(101)は、上記最適化バイナリー・モジュール内の最適化バイナリー・コードの分岐網羅が達成されたかを判断する。コンピュータ(101)は、上記分岐網羅が達成されていないことに応じて、処理をステップ210に進める。一方、コンピュータ(101)は、上記分岐網羅が達成されていることに応じて、処理をステップ212に進める。
ステップ210(以下、「ステップ9」ともいう)において、コンピュータ(101)は、上記テストのテスト時間が超過したかを判断する。当該テスト時間とは、テスト実行に要した総時間であり、例えば図2Bに示す上記ステップ206及び208の処理に要する総時間である。そして、当該総時間がユーザーにより指定された所定の閾値よりも超えた場合に、テスト時間が超過したと判断されうる。コンピュータ(101)は、上記テスト時間が超過していることに応じて、処理をステップ211に進める。一方、コンピュータ(101)は、上記テスト時間が超過してないことに応じて、さらに上記テストを実行する為に、処理をステップ208に戻す。
ステップ211(以下、「ステップ10」ともいう)において、コンピュータ(101)は、分岐をトレースに含めるかを判断する為の閾値(分岐確率の閾値)を上げて、図2Aに示すステップ2〜ステップ4を再実行する。当該分岐確率の閾値を上げることによって、最適化の対象領域が縮小されることになる。コンピュータ(101)は、ステップ2〜ステップ4の再実行が終了することに応じて、処理をステップ5に戻す。
ステップ212(以下、「ステップ11」ともいう)において、コンピュータ(101)は、上記テストを完了し、テスト完了以降の対象プロセス(すなわち、最適化されたバイナリー・モジュールをオリジナルのバイナリー・モジュールに代わって透過的に実行するプロセスである)では、常に最適化バイナリー・モジュールをロードするようにする。
ステップ213において、コンピュータ(101)は、最適化したバイナリー・コードをテストする処理を終了する。
図2Cは、本発明の実施態様に従い、図2Aに示すフローチャートのステップのうち、ステップ2の詳細な処理のフローチャートであり、最適化の対象領域となるトレースを検出する処理のためのフローチャートでもある。
ステップ221において、コンピュータ(101)は、図2Aに示すステップ2(203)の処理を開始する。
ステップ222(以下、「ステップ2−1」ともいう)において、コンピュータ(101)は、プロファイル履歴(例えば、オリジナルのバイナリー・モジュールの分岐命令をインストラメンテーションすることによって得られる情報、若しくは、ランタイム・インストラメンテーションを利用することによって得られる情報)に基づいて、オリジナルのバイナリー・モジュール中の分岐網羅される見込みのあるトレースを最適化の対象領域として選択する際に、トレースの先頭候補として下記条件(S1)〜(S3)のうちの1つ又は複数を選択する:
(S1)バック−エッジの分岐先;
(S2)既に存在するトレースのイグジット先;又は、
(S3)上記プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つと判断された分岐命令のいずれかの分岐先(すなわち、下記(E3)において分岐確率が低いと判断された分命令のうちのいずれかの分岐先である)。
ステップ223(以下、「ステップ2−2」ともいう)において、コンピュータ(101)は、上記選択したトレースの上記先頭候補の実行に応じて、当該トレースの先頭候補に関連付けられたカウンタをインクリメントする(例えば、+1増分する)。
ステップ224(以下、「ステップ2−3」ともいう)において、コンピュータ(101)は、上記カウンタが所定の閾値を超えたかを判断する。コンピュータ(101)は、上記カウンタが所定の閾値を超えていることに応じて処理をステップ225に進める。一方、コンピュータ(101)は、上記カウンタが所定の閾値を超えていないことに応じて、トレースの末尾候補を検出しないで先頭候補の処理に戻す為に、処理をステップ222に戻す。
ステップ225(以下、「ステップ2−4」ともいう)において、コンピュータ(101)は、上記カウンタの閾値を超えたトレースの先頭候補から下記条件(E1)〜(E5)のうちのいずれか1つを示すトレースの末尾候補までを1つのトレースとする:
(E1)次のバック−エッジの分岐命令;
(E2)別のトレースの先頭へ分岐する命令、若しくは、直後の命令が別のトレースの先頭である非分岐命令(例えば、直後の命令が別のトレースの先頭であるフォール・スルーする命令);
(E3)上記プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つ分岐命令の直前の命令;
(E4)上記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結領域を作成する場合には、エッジが2つ以上合流する点の直前の命令;又は、
(E5)プログラムの終端。
上記フォール・スルー命令は、分岐命令以外の命令であり、当該命令を実行すると次のアドレスにある命令が順番に実行されていく命令でもある。
ステップ226において、コンピュータ(101)は、ステップ2−1〜ステップ2−4を繰り返すかを判断する。当該判断は、対象プロセスが終了するかどうかで行われる。コンピュータ(101)は例えば、上記ステップ2でインストラメンテーションしたコードを使用して、対象プロセスが終了するまで、ステップ2−1〜ステップ2−4の処理を実行する。コンピュータ(101)は、当該繰り返しをしないこと(すなわち、上記対象プロセスが終了したこと)に応じて、処理を終了ステップ227に進める。一方、コンピュータ(101)は、当該繰り返しをすること(すなわち、上記対象プロセスが終了していないこと)に応じて、処理をステップ222に進める。
ステップ227において、コンピュータ(101)は、上記ステップ2(203)の処理を終了する。
上記した通り、図2Cに示す上記処理において、コンピュータ(101)は、対象プロセスの実行中に、オリジナルのバイナリー・モジュールの分岐命令をインストラメンテーションしたコード(以下、インストラメンテーション・コードともいう)が上記ステップ2−1に示す条件(S1)〜(S3)のうちのいずれか1つ又は複数を満たすことを検出すると、上記ステップ2−2及び上記ステップ2−3の処理を上記インストラメンテーション・コードで実行する。引き続き、コンピュータ(101)は、上記ステップ2−3でカウンタが閾値を超えることに応じて、トレース記録モードに入り、上記対象プロセスの実行を継続しながら、上記ステップ2−4に示す条件(E1)〜(E5)のうちのいずれか1つの条件を上記インストラメンテーション・コードが検出するまでに実行した命令列をトレースとして選択する。
図3Aは、本発明の実施態様に従い、最適化バイナリー・モジュールの実行の出力とオリジナルのバイナリー・モジュールの実行の出力との比較の結果、上記最適化バイナリー・モジュールが正しく実行されていることに応じて、チェックポイントのコードを上記オリジナルのバイナリー・モジュールを実行しているプロセスでのみ実行し、当該オリジナルのバイナリー・モジュールを実行しているプロセスでのみ実行された上記チェックポイントのコードの実行結果を、上記最適化バイナリー・モジュールを実行しているプロセスにコピーする処理(以下、「テスト実行A」ともいう)の為のフローチャートを示す。
ステップ301において、コンピュータ(101)は、図2Bに示す上記ステップ7の処理として上記テスト実行Aを開始する。
ステップ302(以下、「ステップA−1」ともいう)において、コンピュータ(101)は、対象プロセス開始時に、検証用プロセスとテスト用プロセスとをそれぞれ立ち上げて、当該検証用プロセス及びテスト用プロセスの実行を開始する。コンピュータ(101)は、当該検証用プロセス及びテスト用プロセスの実行を例えば並列に実行しうる。コンピュータ(101)は、最適化バイナリー・モジュールが存在するモジュールをロードするときに、検証用プロセスにオリジナルのバイナリー・モジュールをローダー(他のプログラムを読み込んで起動できる状態にし、それを実行するプログラムである)を用いてロードし、テスト用プロセスに最適化バイナリー・モジュールを、上記ローダーを用いてロードする(実行中のロードも同様である)。なお、検証用プロセスとテスト用プロセスとが同一のコンピュータ(101)上で実行されてもよく、又は、代替的には、検証用プロセスとテスト用プロセスとが異なるコンピュータ上で実行されてもよい。
ステップ303(以下、「ステップA−2」ともいう)において、コンピュータ(101)は、次のチェックポイントまで、検証用プロセス及びテスト用プロセスそれぞれを実行する。上記チェックポイントは例えば、標準ライブラリールーチンの呼び出し、又はシステム・コールでありうる。
ステップ304において、コンピュータ(101)は、検証用プロセス及びテスト用プロセスそれぞれを終了するかを判断する。コンピュータ(101)は、次のチェックポイントに到達したことに応じて検証用プロセス及びテスト用プロセスそれぞれを終了しないと判断し、処理をステップ305に進める。一方、コンピュータ(101)は、チェックポイントに到着せずに、検証用プロセス又はテスト用プロセスが終了することに応じて、処理をステップ309に進める。
ステップ305(以下、「ステップA−3」ともいう)において、コンピュータ(101)は、到達したチェックポイントで、検証用プロセスとテスト用プロセスとを同期し、検証用プロセスの出力とテスト用プロセスの出力とを比較する。コンピュータ(101)は、当該比較の結果、検証用プロセスの出力とテスト用プロセスの出力とが等しいことに応じて、処理をステップ306に進める。一方、コンピュータ(101)は、当該比較の結果、検証用プロセスの出力とテスト用プロセスの出力とが等しくないことに応じて、処理をエラー処理ステップ307に進める。
ステップ306(以下、「ステップA−4」ともいう)において、コンピュータ(101)は、ステップ304での到達したチェックポイントのコードを検証用プロセス内でのみ実行し、その実行結果(すなわち、チェックポイントのコードの出力)をテスト用プロセスにコピーする。チェックポイントの実行結果は、バイナリー・コードの入力である。
ステップ307において、コンピュータ(101)は、検証用プロセスの出力とテスト用プロセスの出力とが等しくないことから、検証用プロセスでの最適化バイナリー・モジュールが正しくないとして、テスト失敗であることを出力し、テスト実行Aを終了する。
ステップ308(以下、「ステップA−5」ともいう)は任意のステップであり、当該ステップ308において、コンピュータ(101)は、バッファ、例えばテストケース保存用バッファに空きがある場合に、チェックポイントのコードへの入力とその実行結果とを当該バッファにコピーする。チェックポイントのコードへの入力は、バイナリー・コードの出力である。上記バッファの大きさが、チェックポイントのコードへの全ての入力とその実行結果と検証用プロセスの終了コード及び終了ステータスとを、下記図3Bに示す処理で使われるテストケースとして保存するかどうかを判断する所定の閾値として用いられる。
ステップ309(以下、「ステップA−6」ともいう)において、コンピュータ(101)は、検証用プロセスの終了コード及び終了ステータスそれぞれをテスト用プロセスの終了コード及び終了ステータスそれぞれと比較して、当該テスト用プロセスが正しく終了したかを判断する。コンピュータ(101)は、検証用プロセスの終了コード及び終了ステータスとテスト用プロセスの終了コード及び終了ステータスとがそれぞれいずれも等しいこと(すなわち、テスト用プロセスが正しく終了したこと)に応じて、終了処理をステップ310に進める。一方、コンピュータ(101)は、検証用プロセスの終了コード及び終了ステータスとテスト用プロセスの終了コード及び終了ステータスとの少なくとも1つが等しくないこと(すなわち、テスト用プロセスが正しく終了しなかったこと)に応じて、処理をエラー処理ステップ311に進める。
ステップ310(以下、「ステップA−7」ともいう)において、チェックポイントのコードへの全ての入力とその実行結果とが上記バッファにコピーできている場合に、当該バッファの内容とステップA−6での終了コード及び終了ステータスとをテストケースとして保存する。当該テストケースは、本番環境で実行されているオリジナルのバイナリー・コード(又はバイナリー・モジュール)の入力とその出力との組み合わせである。
ステップ311において、コンピュータ(101)は、検証用プロセスの終了コード及び終了ステータスとテスト用プロセスの終了コード及び終了ステータスとの少なくとも1つが等しくないことから、検証用プロセスでの最適化バイナリー・モジュールが正しくないとして、テスト失敗であることを出力し、テスト実行Aを終了する。
ステップ312において、コンピュータ(101)は、検証用プロセスでの最適化バイナリー・モジュールが正しいことから、テスト成功であることを出力し、テスト実行Aを終了する。
なお、テスト実行Aの処理内容をさらに容易にする為に、下記図6Aにおいてその処理内容を説明する。
図3Bは、本発明の実施態様に従い、チェックポイントでの全ての入出力の合計サイズが所定の閾値よりも小さい(図3Aに示すステップ308のバッファに、チェックポイントでの全ての入力とその実行結果がコピーできている場合)ことに応じて、ステップ310で当該全ての入出力を保存し、コンピュータの負荷が所定の閾値よりも小さい時間帯において、上記最適化バイナリー・モジュールのテストを実行する処理(以下、「テスト実行B」ともいう)の為のフローチャートを示す。
ユーザーは、「チェックポイントでの全ての入出力の合計サイズが所定の閾値よりも小さいこと」における閾値(すなわち、図3Aに示すステップ308でのバッファのバッファ・サイズである)として例えば、記憶装置(例えば、ディスク)の空き容量を基準に、テスト以外のワークロードに影響を与えないような値を設定しうる。
ユーザーは、「コンピュータの負荷が所定の閾値よりも小さい時間帯」における閾値として例えば、CPUリソースの空きを基準に、テスト以外のワークロードに影響をあたえないような値を設定しうる。
ステップ321において、コンピュータ(101)は、図2Bに示す上記ステップ5の処理として上記テスト実行Bを開始する。
ステップ322(以下、「ステップB−1」ともいう)において、コンピュータ(101)は、テスト用プロセスを立ち上げて、当該テスト用プロセスを開始する。コンピュータ(101)は、最適化バイナリー・モジュールが存在するモジュールを、ローダーを用いてロードするときに、テスト用プロセスに最適化バイナリー・モジュールをロードする(実行中のロードも同様である)。
ステップ323(以下、「ステップB−2」ともいう)において、コンピュータ(101)は、次のチェックポイントまで、テスト用プロセスを実行する。上記チェックポイントは例えば、標準ライブラリールーチンの呼び出し、又はシステム・コールでありうる。
ステップ324において、コンピュータ(101)は、テスト用プロセスが終了するかを判断する。コンピュータ(101)は、次のチェックポイントに到達したことに応じてテスト用プロセスを終了しないと判断し、処理をステップ325に進める。一方、コンピュータ(101)は、チェックポイントに到着せずに、テスト用プロセスが終了することに応じて、処理をステップ328に進める。
ステップ325(以下、「ステップB−3」ともいう)において、コンピュータ(101)は、到達したチェックポイントで、テスト用プロセスの出力と図3AのステップA−7で保存された検証用プロセスの出力(すなわち、A−5でコピーされたチェックポイントのコードへの入力)を比較する。コンピュータ(101)は、当該比較の結果、テスト用プロセスの出力と上記保存された検証用プロセスの出力とが等しいことに応じて、処理をステップ325に進める。一方、コンピュータ(101)は、当該比較の結果、テスト用プロセスの出力と上記保存された検証用プロセスの出力とが等しくないことに応じて、処理をエラー処理ステップ327に進める。
ステップ326(以下、「ステップB−4」ともいう)において、コンピュータ(101)は、テスト用プロセスの出力と上記保存された検証用プロセスの出力とが等しいことに応じて、上記保存されたチェックポイントのコードの出力(すなわちA−5でコピーされたチェックポイントのコードの実行結果)をテスト用プロセスにコピーする。コンピュータ(101)は、当該コピーが終了することに応じて、処理をステップ323に戻す。
ステップ327において、コンピュータ(101)は、テスト用プロセスの出力と上記保存された検証用プロセスの出力とが等しくないことから、テスト用プロセスでの最適化バイナリー・モジュールが正しくないとして、テスト失敗であることを出力し、テスト実行Bを終了する。
ステップ328(以下、「ステップB−6」ともいう)において、コンピュータ(101)は、テスト用プロセスの終了コード及び終了ステータスそれぞれを上記A−7で保存された終了コード及び終了ステータスそれぞれと比較して、当該テスト用プロセスが正しく終了したかを判断する。コンピュータ(101)は、上記テスト用プロセスの終了コード及び終了ステータスが上記保存された終了コード及び終了ステータスのいずれとも等しいこと(すなわち、テスト用プロセスが正しく終了したこと)に応じて、終了処理をステップ329に進める。一方、コンピュータ(101)は、上記テスト用プロセスの終了コード及び終了ステータスが上記保存された終了コード及び終了ステータスのいずれかと等しくないこと(すなわち、テスト用プロセスが正しく終了しなかったこと)に応じて、処理をエラー処理ステップ330に進める。
ステップ329において、コンピュータ(101)は、上記テスト用プロセスの終了コード及び終了ステータスが上記保存された終了コード及び終了ステータスのいずれとも等しいことから、検証用プロセスでの最適化バイナリー・モジュールが正しいとして、テスト成功であることを出力し、テスト実行Bを終了する。
ステップ330において、コンピュータ(101)は、上記テスト用プロセスの終了コード及び終了ステータスが上記保存された終了コード及び終了ステータスのいずれかと等しくないことから、検証用プロセスでの最適化バイナリー・モジュールが正しくないとして、テスト失敗であることを出力し、テスト実行Bを終了する。
図4Aは、本発明の実施態様に従い、オリジナルのバイナリー・モジュール内のオリジナルのバイナリー・コード中の分岐網羅される見込みのある領域を最適化の対象領域として選択する処理の説明を容易にする為に示したソースコード例であり、バイナリー最適化の対象であるオリジナルのバイナリー・コードに対応するソースコード例である。
図4Aに示すソースコード(401)は、図8に示すソースコード(811)と同じである。オリジナルのバイナリー・コードに対応するソースコード(401)は、実行される確率の低い例外処理のコード(* error handling *)(413)を、オリジナルのバイナリー・コード中に有するものとする。
従来手法では、上記したとおり、最適化したバイナリー・コードには、実行される確率が低い例外処理(* error handling *)(813)がサイド・エグジットとして含まれてしまう。当該サイド・エグジットは、上記したように、最適化バイナリー・モジュール内の最適化したバイナリー・コードからオリジナルの最適化していないバイナリー・コードに戻るコードである。
一方、本発明では、図2Aに示すステップ2に従い、プロファイル情報(例えば、オリジナルのバイナリー・モジュールの分岐命令をインストラメンテーションすることによって得られる情報、若しくは、ランタイム・インストラメンテーションを利用することによって得られる情報)に基づいて、オリジナルのバイナリー・コード中の分岐網羅される見込みのある領域(例えば、サイド・エグジットを含め実行される見込みのある領域)を最適化の対象領域として選択する。従って、コンピュータ(101)は、実行される確率の低い例外処理のサイド・エグジット(413)を最適化領域に含めずに、上記ループの後半部分(414)に対応するバイナリー・コードのみを最適化する。従って、本発明に従ってバイナリー最適化すると、網羅率が改善される。
図4Bは、本発明の実施態様に従い、図2Aに示すフローチャートのステップのうち、上記ステップ2に示す処理(すなわち、ステップ1で検出したバイナリー・モジュール中の分岐命令をインストラメンテーションし、当該インストラメンテーションしたコードを含むモジュールを実行し、当該インストラメンテーションしたコードで図2Cに示す処理を実行することにより、テスト・ステップで分岐網羅が達成可能であり且つ実行頻度が高い領域を検出する)の説明を容易にする為に示したソースコード例であり、バイナリー最適化の対象であるオリジナルのバイナリー・コードに対応するソースコード例である。
オリジナルのバイナリー・コードに対応するソースコード(411)中、行番号01〜22は参照のために便宜的に付した番号であり、また、A〜Pは領域を示す。
以下において、コンピュータ(101)が、ステップ2を図2Cに示すフローチャートに従って実行し、上記オリジナルのバイナリー・コードの分岐網羅が達成可能であり且つ実行頻度が高いトレースをどのようにして検出するか、そして任意的にステップ3をさらに実行して結合領域をどのように作成するかを、上記ソースコード(411)を参照しながら説明する。
(ステップ2を実行し、ステップ3を実行しない場合)
1)領域A〜Eは、トレースの開始条件(S1〜S4)が無い為にトレースの対象外である。
2)コンピュータ(101)は、(S1)の条件より、領域Fからトレースを開始しようと試みる。コンピュータ(101)は、領域Gを発見し、(E3)の条件から領域Gの分岐命令の直前の命令(すなわち、領域Fの命令)までをトレースに含める。
3)領域Gは、分岐確率が低い分岐先を持つ分岐なので除外される。
4)コンピュータ(101)は、(S3)及び(E1)の条件より、領域H,J及びKをトレースとして選択する。
5)領域Iは、分岐確率が0%であり、実行されない為にトレースの対象外である。
6)コンピュータ(101)は、(S2)の条件より、領域Lからトレースを開始し、領域Mの次は領域Nを選択し(トレース構築時にMからNに分岐したものとする)、(E5)の条件よりプログラム終端(すなわち、領域P)まで(すなわち、領域L,M,N,及びP)をトレースとして選択する。
7)コンピュータ(101)は、(S2)及び(E2)の条件より、領域Oをトレースとして選択する。
以上より、コンピュータ(101)は、ステップ2(すなわち、ステップ2−1〜ステップ2−4)に示す処理によって、トレース{F},{H,J,K},{L,M,N,P}及び{O}を、所定の分岐網羅が達成可能であり且つ実行頻度が高いトレースとして検出する。当該検出したトレースは、ステップ4における最適化の対象領域として用いられる。
(ステップ2を実行し、さらにステップ3を実行する場合)
1)領域A〜Eは、トレースの開始条件(S1〜S4)が無い為にトレースの対象外である。
2)コンピュータ(101)は、(S1)の条件より、領域Fからトレースを開始しようと試みる。コンピュータ(101)は、領域Gを発見し、(E3)の条件から領域Gの分岐命令の直前の命令(すなわち、領域Fの命令)までをトレースに含める。
3)領域Gは、分岐確率が低い分岐先を持つ分岐なので除外される。
4)コンピュータ(101)は、(S3)及び(E4)の条件より、領域Hをトレースとして選択する。
5)コンピュータ(101)は、(S2)及び(E1)の条件より、領域J及びKをトレースとして選択する。
6)領域Iは、実行されない為にトレースの対象外である。
7)コンピュータ(101)は、(S2)の条件より、領域Lからトレースを開始し、領域Mの次に領域Nを選択し(トレース構築時にMからNに分岐したものとする)、(E4)の条件でNまでをトレースとして選択する。
8)コンピュータ(101)は、(S2)及び(E4)の条件より、領域Oをトレースとして選択する。
9)コンピュータ(101)は、(S2)の条件より、領域Pからトレースを開始し、プログラムの終端に達するので、(E5)の条件より領域Pまでをトレースとして選択する。
以上より、コンピュータ(101)は、ステップ2に示す処理によって、トレース{F},{H},{J,K},{L,M,N},{O}及び{P}を、所定の分岐網羅が達成可能であり且つ実行頻度が高いトレースとして検出する。
10)引き続き、コンピュータ(101)は、ステップ2で検出したトレース{F},{H},{J,K},{L,M,N},{O}及び{P}について、ステップ3に示す処理に従い、トレースの分岐先から始まるトレースが存在することから、{H}と{J,K}と{F}を、及び、{L,M,N}と{O}と{P}をそれぞれ結合して、結合領域{H,J,K,F}及び結合領域{L,M,N,O,P}を作成する。
以上より、コンピュータ(101)は、ステップ3に示す処理によって、結合領域{H,J,K,F}及び結合領域{L,M,N,O,P}を作成する。当該作成した結合領域は、ステップ4における最適化の対象領域として用いられる。
図5は、本発明の実施態様に従い、最適化したバイナリー・モジュールをテストする処理の説明を容易にする為に示したソースコード例であり、バイナリー最適化の対象であるオリジナルのバイナリー・コードに対応するソースコード例である。
オリジナルのバイナリー・モジュール(バイナリ最適化対象である)に対応するソースコード(501)中、行番号01〜14は参照のために便宜的に付した番号であり、また、A〜Jは領域を示す。
以下において、コンピュータ(101)が、図2A〜図2C及び図3A〜図3Bに示すフローチャートに従って実行し、オリジナルのバイナリー・コードをどのように最適化し、且つ当該最適化された最適化バイナリー・コードをどのようにテストするかを説明する。
図2Aに示すステップ2の、分岐をトレースに含めるかを判断する為の閾値(分岐確率の閾値)の初期値を例えば1%であるとする。
1)ステップ1において、コンピュータ(101)は、プロファイル情報を利用して、CPUリソースを消費するプロセスと、当該プロセスでCPUリソースを実際に消費しているオリジナルのバイナリー・モジュールを検出する。図5Aに示すソースコードは、当該検出されたバイナリー・モジュールの説明を容易にする為に示したものであり、当該検出されたオリジナルのバイナリー・モジュールに対応するソースコードである。
2)ステップ2において、コンピュータ(101)は、トレース{A,B,C,D,E}及び{G,H,I,J}を検出したとする。
3)ステップ3において、コンピュータ(101)は、上記ステップ2で検出したトレースの分岐先から始まるトレースが存在することから、ステップ2で検出された上記トレースを結合して、結合領域{A,B,C,D,E,G,H,I,J}を作成する。
4)ステップ4において、コンピュータ(101)は、上記ステップ3で作成した結合領域を最適化の対象領域とし、当該最適化の対象領域を最適化した最適化バイナリー・モジュールを作成する。
5)コンピュータ(101)は、保存されたテストケースがまだないことから、ステップ5及び6をスキップし、処理をステップ7へ進める。
6)コンピュータ(101)は、ステップ7を開始し、ステップA−1において、検証用プロセスとテスト用プロセスとをそれぞれ立ち上げて、当該検証用プロセス及び当該テスト用プロセスそれぞれの実行を開始する。
7)ステップA−2において、コンピュータ(101)は、最初のチェックポイントである領域Bまで、上記検証用プロセス及び上記テスト用プロセスをそれぞれ実行する。
8)ステップA−3において、コンピュータ(101)は、上記検証用プロセス及び上記テスト用プロセスそれぞれの実行が上記最初のチェックポイントである領域Bまで到達したことに応じて、上記検証用プロセスの出力に当たるfile1の値と上記テスト用プロセスの出力に当たるfile1の値とを比較し、当該値が一致することに応じて、上記テスト用プロセスが正しく動いていると判断する。領域Bの命令「str1=read(file1)」は、「file1」が指すファイルからデータを読み込んで、そのデータを「str1」に返す命令である。その為に、上記「file1」が上記プロセスからの出力であり、且つ、読み込んだ上記データ「str1」が上記プロセスへの入力である。なお、上記検証用プロセスの出力に当たるfile1の値と上記テスト用プロセスの出力に当たるfile1の値とは一致しているとする。
9)ステップA−4において、コンピュータ(101)は、上記テスト用プロセスが正しく動いていることに応じて、上記最初のチェックポイントのコードである領域Bのコードを上記検証用プロセスでのみ実行し、当該実行結果であるstr1の値を上記テスト用プロセスにコピーする。
10)ステップA−5において、コンピュータ(101)は、テストケース保存用バッファに上記file1と上記str1とを保存する。
11)コンピュータ(101)は、ステップA−5が終了することに応じて、処理をステップA−2に戻す。
12)ステップA−2において、コンピュータ(101)は、次のチェックポイントである領域Hまで、上記検証用プロセス及び上記テスト用プロセスをそれぞれ実行する。
13)ステップA−3において、コンピュータ(101)は、上記検証用プロセス及び上記テスト用プロセスそれぞれの実行が上記次のチェックポイントである領域Hまで到達したことに応じて、上記検証用プロセスの出力に当たるfile2の値及びstr2の値それぞれを上記テスト用プロセスの出力に当たるfile2の値及びstr2の値それぞれと比較し、当該値がいずれも一致することに応じて、上記テスト用プロセスが正しく動いていると判断する。領域Hの命令「rc=write(file2, str2)」は、「file2」が指すファイルへ「str2」のデータを書き込んで、結果を示すコード(例えば、成功又は失敗を示すコード)を「rc」に返す。その為に、上記「file2」及び当該「file2」に書き込むデータ「str2」が上記プロセスからの出力であり、且つ、結果を示すコード「rc」が上記プロセスへの入力である。
14)ステップA−4において、コンピュータ(101)は、チェックポイントのコードである領域Hのコードを検証用プロセスでのみ実行し、当該実行結果であるrcをテスト用プロセスにコピーする。
15)ステップA−5において、コンピュータ(101)は、テストケース保存用バッファに空きがあることに応じて、上記file2、上記str2、及び上記rcを当該保存用バッファにコピーする。
16)コンピュータ(101)は、ステップA−2〜A〜5の各処理を、ステップ304に示すように、上記検証用プロセス及び上記テスト用プロセスの各プロセスが終了するまで繰り返す。
なお、上記オリジナルのバイナリー・モジュール(501)の上記6)〜16)の例では、領域D→領域Fの分岐は最後まで実行されていず、且つ、上記テストケース保存用バッファに全てのチェックポイントへの全ての入力とそれに対応する実行結果とがコピーできたとする。
17)ステップA−6において、コンピュータ(101)は、検証用プロセスの終了コード及び終了ステータスそれぞれをテスト用プロセスの終了コード及び終了ステータスそれぞれと比較して、当該テスト用プロセスが正しく終了したかを判断する。
18)ステップA−7において、検証用プロセスの終了コード及び終了ステータスとテスト用プロセスの終了コード及び終了ステータスとがそれぞれいずれも等しいことに応じて、コンピュータ(101)は、今回の実行、すなわち上記テストケース保存用バッファの内容とステップA−6の終了コード及び終了ステータスとを今回の実行によるテストケースとして保存する。
19)コンピュータ(101)は、ステップ8において判断される分岐網羅がまだ達成されておらず(すなわち、領域D→領域Fの分岐が実行されていない)、且つ、ステップ9において判断されるテスト時間がまだ超過していないので、ステップ7〜ステップ8を繰り返す。
20)コンピュータ(101)は、ステップ7を開始し、ステップA−1において、検証用プロセスとテスト用プロセスとをそれぞれ新たに立ち上げて、当該検証用プロセス及び当該テスト用プロセスそれぞれの実行を開始する。
21)ステップA−2において、コンピュータ(101)は、最初のチェックポイントである領域Bまで、上記検証用プロセス及び上記テスト用プロセスをそれぞれ実行する。
22)ステップA−3において、コンピュータ(101)は、上記検証用プロセス及び上記テスト用プロセスの実行が上記最初のチェックポイントである領域Bまで来たことに応じて、上記検証用プロセスの出力に当たるfile1の値と上記テスト用プロセスの出力に当たるfile1の値とを比較し、当該値が一致することに応じて、上記テスト用プロセスが正しく動いていると判断する。なお、上記検証用プロセスの出力に当たるfile1の値と上記テスト用プロセスの出力に当たるfile1の値とは一致しているとする。
23)ステップA−4において、コンピュータ(101)は、上記テスト用プロセスが正しく動いていることに応じて、上記最初のチェックポイントのコードである領域Bのコードを上記検証用プロセスでのみ実行し、当該実行結果であるstr1の値を上記テスト用プロセスにコピーする。
24)ステップA−5において、コンピュータ(101)は、テストケース保存用バッファに上記file1と上記str1とを保存する。
25)コンピュータ(101)は、ステップA−5が終了することに応じて、処理をステップA−2に戻す。
26)ステップA−2において、コンピュータ(101)は、次のチェックポイントである領域Hまで、上記検証用プロセス及び上記テスト用プロセスをそれぞれ実行する。
27)ステップA−3において、コンピュータ(101)は、上記検証用プロセス及び上記テスト用プロセスそれぞれの実行が次のチェックポイントである領域Hまで到着したことに応じて、上記検証用プロセスの出力に当たるfile2の値及びstr2の値それぞれを上記テスト用プロセスの出力に当たるfile2の値及びstr2の値それぞれと比較し、当該値がいずれも一致することに応じて、上記テスト用プロセスが正しく動いていると判断する。
28)ステップA−4において、コンピュータ(101)は、チェックポイントのコードである領域Hのコードを検証用プロセスでのみ実行し、当該実行結果であるrcをテスト用プロセスにコピーする。
29)ステップA−5において、コンピュータ(101)は、上記テストケース保存用バッファに空きがあることに応じて、上記file2、上記str2、及び上記rcを上記テストケース保存用バッファに保存する。
30)コンピュータ(101)は、ステップA−2〜A〜5の各処理を、ステップ304に示すように、上記検証用プロセス及び上記テスト用プロセスの各プロセスが終了するまで繰り返す。
なお、上記オリジナルのバイナリー・モジュール(501)の上記18)〜30)の例では、領域D→領域Fの分岐は最後まで実行されていず、且つ、上記テストケース保存用バッファに全てのチェックポイントへの全ての入力とそれに対応する実行結果とがコピーできなかったとする。
31)ステップA−7において、コンピュータ(101)は、上記テストケース保存用バッファに全てのチェックポイントへの全ての入力とそれに対応する実行結果とがコピーできなかった為に、今回の実行、すなわちテストケース保存用バッファの内容とステップA−6の終了コード及び終了ステータスとをテストケースとして保存しない。
32)コンピュータ(101)は、ステップ8において判断される分岐網羅がまだ達成されていない(すなわち、領域D→領域Fの分岐が実行されていない)が、ステップ9において判断されるテスト時間が超過したとする。
33)ステップ10において、コンピュータ(101)は、分岐をトレースに含めるかの判断する為の閾値(分岐確率の閾値)を10%に上げるとする。引き続き、コンピュータ(101)は、ステップ2〜ステップ4を再実行する。
34)ステップ2において、コンピュータ(101)は、トレース{A,B,C}、{E}、及び{G,H,I,J}を検出したとする。
35)ステップ3において、コンピュータ(101)は、上記ステップ2で検出したトレースの分岐先から始まるトレースが存在することから、ステップ2で検出された上記トレースを結合して、結合領域{E,G,H,I,J,A,B,C}を作成する。コンピュータ(101)は、上記検出したトレースの分岐先から始まるトレースが{E}の場合は{G,H,I,J}であり、トレースが{G,H,I,J}の場合は{A,B,C}であり、また、トレース{A,B,C}の分岐先から始まるトレースが存在しないので、上記結合領域を{E,G,H,I,J,A,B,C}の順に作成する。
36)ステップ4において、コンピュータ(101)は、上記ステップ3で作成した結合領域を最適化の対象領域とし、当該最適化の対象領域を最適化した最適化バイナリー・モジュールを作成する。
37)コンピュータ(101)は、ステップ5を開始し、ステップB−1において、上記18)で保存したテストケース(ループのそれぞれの繰り返しについて保存された上記file1、上記str1、上記file2、上記str2、上記rc、および上記終了コードと上記終了ステータス)を実行することを開始する。すなわち、ステップB−1において、コンピュータ(101)は、テスト用プロセスを立ち上げて、上記保存したテストケースの実行を開始する。
38)ステップB−2において、コンピュータ(101)は、最初のチェックポイントである領域Bまで、上記テスト用プロセスを実行する。
39)ステップB−3において、コンピュータ(101)は、上記最初のチェックポイントである領域Bまで到着したことに応じて、上記テスト用プロセスの出力に当たるfile1の値を、上記18)で保存されたfile1の値と比較し、当該値が一致することに応じて、上記テスト用プロセスが正しく動いていると判断する。なお、上記テスト用プロセスの出力に当たるfile1の値と上記保存されたfile1の値とは一致しているとする。
40)ステップB−4において、上記18)におけるステップA−7で保存されたstr1をテスト用プロセスにコピーする。
41)コンピュータ(101)は、ステップB−4が終了することに応じて、処理をステップB−2に戻す。
42)ステップB−2において、コンピュータ(101)は、次のチェックポイントである領域Hまで、上記テスト用プロセスを実行する。
43)ステップB−3において、コンピュータ(101)は、上記テスト用プロセスの実行が上記次のチェックポイントである領域Hまで到着したことに応じて、上記テスト用プロセスの出力に当たるfile2の値及びstr2の値それぞれを、上記18)におけるステップA−7で保存されたfile2の値及びstr2の値それぞれと比較し、当該値がいずれも一致することに応じて、上記テスト用プロセスが正しく動いていると判断する。
44)ステップB−4において、コンピュータ(101)は、上記18)におけるステップA−7で保存されたrcをテスト用プロセスにコピーする。
45)コンピュータ(101)は、ステップB−2〜B〜4の各処理を、ステップ324に示すように、テスト用プロセスが終了するまで繰り返す。
46)ステップB−5において、コンピュータ(101)は、テスト用プロセスの終了コード及び終了ステータスそれぞれを、上記18)におけるステップA−7で保存された終了コード及び終了ステータスそれぞれと比較して、当該テスト用プロセスが正しく終了したかを判断する。
47)テスト用プロセスの終了コード及び終了ステータスと上記18)におけるステップA−7で保存された終了コード及び終了ステータスとがそれぞれいずれも等しいことに応じて、コンピュータ(101)は、最適化バイナリー・モジュールのテストが成功したと判断する。
48)ステップ6において、コンピュータ(101)は、最適化バイナリー・モジュールの所定の分岐網羅が達成されたことに応じて、処理をステップ11に進める。
49)ステップ11において、コンピュータ(101)は、テストを完了し、以降の対象プロセスでは、常に最適化バイナリー・モジュールをロードするようにする。
図6Aは、本発明の実施態様に従い、図3Aに示すテスト実行Aの処理を示すダイアグラム図である。
ステップA−1において、コンピュータ(101)は、対象プロセス開始時に、検証用プロセスとテスト用プロセスとをそれぞれ立ち上げて、当該検証用プロセス及び当該テスト用プロセスの実行を並列に開始する。コンピュータ(101)は、上記検証用プロセスにオリジナルのバイナリー・モジュール(601)をロードし、上記テスト用プロセスに最適化バイナリー・モジュール(602)をロードする。
ステップA−2において、コンピュータ(101)は、次のチェックポイント(611)まで、検証用プロセス及びテスト用プロセスそれぞれを実行する。
ステップA−3において、コンピュータ(101)は、チェックポイント(611)で、検証用プロセスとテスト用プロセスとを同期し、検証用プロセスの出力(すなわち、オリジナルのバイナリー・モジュール(601)のチェックポイントのコードの入力)とテスト用プロセスの出力(すなわち、最適化バイナリー・モジュール(602)のチェックポイントのコードの入力)とを比較する(621)。
ステップA−4において、コンピュータ(101)は、検証用プロセスの出力とテスト用プロセスの出力とが等しいことに応じて、チェックポイントのコードを検証用プロセス内でのみ実行する(622)。従って、チェックポイントのコードは、オリジナルのバイナリー・モジュール(601)でのみ実行される。そして、コンピュータ(101)は、検証用プロセス内での上記チェックポイントのコードの実行結果(すなわち、上記検証用プロセス内での上記チェックポイントのコードの出力)をテスト用プロセスにコピーする(623)。
引き続き、コンピュータ(101)は、検証用プロセス及びテスト用プロセスそれぞれを実行する。
ステップA−6において、コンピュータ(101)は、検証用プロセスの終了コード及び終了ステータスそれぞれをテスト用プロセスの終了コード及び終了ステータスそれぞれと比較して、当該テスト用プロセスが正しく終了したかを判断する(624)。
図6Bは、本発明の実施態様に従い、図2Bに示すステップ10に従う処理であって、所定の時間の経過後に、最適化バイナリー・モジュール内の最適化したバイナリー・コード領域の分岐網羅が達成されないことに応じて、選択した対象領域を縮小する処理を示すダイアグラム図である。
最適化バイナリー・コード(642)及びオリジナルのバイナリー・コードのコピー(641及び643)からなる最適化バイナリー・モジュール(631)において、コンピュータ(101)は、最適化バイナリー・コードの分岐網羅が所定の時間内に達成されない場合に、オリジナルのバイナリー・モジュール中の最適化の対象領域を縮小する。コンピュータ(101)は、当該縮小した対象領域についてバイナリー最適化をやり直し、そして当該やり直しにより最適化されたバイナリー・モジュールのテストをやり直す。従って、対象領域縮小後の最適化バイナリー・モジュール(651)中の最適化バイナリー・コード(662)は、対象領域縮小前の最適化バイナリー・モジュール(631)中の最適化バイナリー・コード(642)よりも縮小されており、一方、対象領域縮小後の最適化バイナリー・モジュール(651)中のオリジナルのバイナリー・コードのコピー部分(661及び663)は、対象領域縮小前の最適化バイナリー・モジュール(631)中のオリジナルのバイナリー・モジュールのコピー部分(641及び643)よりも拡大されている。
オリジナルのバイナリー・モジュール中の最適化の対象領域を縮小することによって、テストの分岐網羅率の向上と、当該分岐網羅率の達成にかかる時間を短縮することが可能になる。
また、オリジナルのバイナリー・モジュール中の最適化の対象領域を縮小することを繰り返すことは、オリジナルのバイナリー・モジュール中の最適化の対象領域を段階的に縮小することである。最適化の対象領域を段階的に縮小することによって、テストの分岐網羅率のさらなる向上と、当該分岐網羅率の達成にかかる時間をさらに短縮することが可能になるとともに、テストケースの実行に伴う本願環境の性能低下が長引かないように制限することが可能になる。
図6Cは、本発明の実施態様に従い作成されたトレースを示し、当該トレースでは分岐確率が低い分岐先を持つ分岐命令がないことを示す。
図6Cに示すダイアグラム(601)のトレースでは、分岐網羅される見込みのある領域をバイナリー最適化の対象領域として選択した場合のトレースを示す。当該ダイアグラム(601)のトレースでは分岐命令が4つあり、それぞれの分岐命令について分岐先の分岐確率が示してある。当該ダイアグラム(601)のトレースでは、上記分岐命令の分岐確率が10%,10%,20%及び50%であり、図9に示すダイアグラム(901)のトレースの分岐確率よりも高い。従って、当該ダイアグラム(602)のトレースでは、上記ダイアグラム(901)のトレースと比べて、分岐網羅率が改善される。
図7は、図1に従うハードウェア構成を好ましくは備えており、本発明の実施態様に従い上記最適化したバイナリー・モジュールをテストするためのコンピュータの機能ブロック図の一例を示した図である。
コンピュータ(701)は、本発明の実施態様に従い、上記最適化したバイナリー・モジュールをテストするためのコンピュータであり、例えば図1に示すコンピュータ(101)でありうる。
コンピュータ(701)は、対象領域選択手段(711)、最適化バイナリー・モジュール作成手段(712)及び検証手段(713)、並びに任意的に、実行手段(716)、コピー手段(717)及び格納手段(723)を備えている。
対象領域選択手段(711)は、プロファイル履歴(例えば、オリジナルのバイナリー・モジュールの分岐命令をインストラメンテーションすることによって得られる情報、若しくは、ランタイム・インストラメンテーションを利用することによって得られる情報)に基づいて、オリジナルのバイナリー・モジュール(721)内のオリジナルのバイナリー・コード(721)中の分岐網羅される見込みのある領域を最適化の対象領域として選択することを実行する。オリジナルのバイナリー・モジュール(721)は、例えば記憶装置(108,109)に格納されていたり、又は、ネットワークを介してダウンロードされたりしうる。
また、対象領域選択手段(711)は、トレースの先頭候補として下記条件(S1)〜(S3)のうちのいずれか1つ又は複数を選択すること:
(S1)バック−エッジの分岐先;
(S2)既に存在するトレースのイグジット先;又は、
(S3)上記プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つと判断された分岐命令のいずれかの分岐先、
上記選択したトレースそれぞれの先頭候補の実行に応じて、当該トレースの先頭候補に関連付けられたカウンタをインクリメントすること、
上記カウンタが閾値を超えたことに応じて、当該閾値を超えたトレースの先頭候補から下記条件(E1)〜(E5)のうちのいずれか1つを示す領域の末尾候補までを1つのトレースとすること:
(E1)次のバック−エッジの分岐命令;
(E2)別のトレースの先頭へ分岐する命令、若しくは、直後の命令が別のトレースの先頭である非分岐命令(例えば、直後の命令が別のトレースの先頭であるフォール・スルーする命令);
(E3)上記プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つ分岐命令の直前の命令;
(E4)上記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結合領域を作成する場合には、エッジが2つ以上合流する点の直前の命令;又は、
(E5)プログラムの終端
を実行しうる。
また、対象領域選択手段(711)は、上記最適化の対象領域が、分岐確率が小さいサイド・イグジットを含まないようにしうる。
また、対象領域選択手段(711)は、上記プロファイル情報(例えば、頻繁に実行されるプロセスとバイナリー・モジュールとを検出可能とするパラメータ)を用いて、上記コンピュータの中央演算処理装置リソースを消費するプロセスと、当該プロセスで上記中央演算処理装置リソースを消費しているオリジナルのバイナリー・モジュール(721)とを検出すること、及び、上記検出したオリジナルのバイナリー・モジュールの分岐命令をインストラメンテーションし、分岐網羅が達成可能であり且つ実行頻度が高いトレースを検出することを実行しうる。当該検出されたトレースは、最適化バイナリー・モジュール作成手段(712)によって最適化の対象領域とされうる。
また、対象領域選択手段(711)は、上記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結合領域を作成することを実行しうる。当該作成された結合領域は、最適化バイナリー・モジュール作成手段(712)によって最適化の対象領域とされうる。
最適化バイナリー・モジュール作成手段(712)は、対象領域選択手段(711)が選択した対象領域を最適化した最適化バイナリー・モジュール(722)を作成することを実行する。最適化バイナリー・モジュール作成手段(712)は、最適化バイナリー・モジュール(722)を、例えば記憶装置(108,109)に格納したり、又は、ネットワークを介して他のコンピュータ(例えば、サーバ)アップロードしたりすることを実行しうる。
また、最適化バイナリー・モジュール作成手段(712)は、上記最適化バイナリー・モジュール(722)のチェックポイントを、上記オリジナルのバイナリー・モジュール(721)と同等の入力と出力結果とを持つように最適化することを実行しうる。
また、最適化バイナリー・モジュール作成手段(712)は、上記最適化バイナリー・モジュール(722)のチェックポイントの呼び出しが、上記オリジナルのバイナリー・モジュール(721)中の同等のチェックポイントの呼び出しと同じ順番となるように、上記オリジナルのバイナリー・モジュール(721)を最適化することを実行しうる。
また、最適化バイナリー・モジュール作成手段(712)は、上記最適化バイナリー・モジュール(722)の実行の上記出力と上記オリジナルのバイナリー・モジュール(721)の実行の上記出力とを比較することにおいて、テスト用プロセス(715)の出力と検証用プロセス(714)の出力とを比較することを実行しうる。
検証手段(713)は、最適化バイナリー・コード作成手段(712)が作成した上記最適化バイナリー・モジュール(722)と上記オリジナルのバイナリー・モジュール(721)とをそれぞれ実行しながら、チェックポイントで上記最適化バイナリー・モジュール(722)の実行と上記オリジナルのバイナリー・モジュール(721)の実行とを同期させて、上記最適化バイナリー・モジュール(722)の実行の出力と上記オリジナルのバイナリー・モジュール(721)の実行の出力とを比較することによって上記最適化バイナリー・モジュール(722)を検証することを実行する。
また、検証手段(712)は、上記チェックポイントで上記最適化バイナリー・モジュール(722)の実行と上記オリジナルのバイナリー・モジュール(721)の実行とを同期させることにおいて、上記オリジナルのバイナリー・モジュール(721)を検証用プロセス(714)にロードし、上記最適化バイナリー・モジュール(722)をテスト用プロセス(715)にロードすること、及び、上記チェックポイントで、上記検証用プロセス(714)と上記テスト用プロセス(715)とを同期することを実行しうる。
また、検証手段(713)は、最適化バイナリー・モジュール作成手段(712)が作成した上記最適化バイナリー・モジュール(722)をロードしたテスト用プロセス(715)と上記オリジナルのバイナリー・モジュール(721)をロードした検証用プロセス(714)とをそれぞれ実行しながら、チェックポイントで上記テスト用プロセス(715)の実行と上記検証用プロセス(714)の実行とを同期させて、上記テスト用プロセス(715)の出力と上記検証用プロセス(714)の出力とを比較することによって上記最適化バイナリー・モジュール(722)を検証することを実行しうる。
また、検証手段(713)は、上記最適化バイナリー・モジュール(722)の終了コード及び終了ステータスと、上記オリジナルのバイナリー・モジュール(721)の終了コード及び終了ステータスとをそれぞれ比較することによって上記最適化バイナリー・モジュール(722)を検証すること(すなわち、上記テスト用プロセス(715)が正しく終了したことを検証すること)を実行しうる。
また、対象領域選択手段(711)は、所定の時間の経過後に、最適化バイナリー・モジュール作成手段(712)が作成した最適化バイナリー・モジュール(722)内の最適化バイナリー・コード領域の分岐網羅が達成されないことに応じて、上記選択した対象領域を縮小する縮小手段(図示せず)をさらに備えうる。
また、最適化バイナリー・モジュール作成手段(712)は、縮小手段によって縮小した対象領域を最適化した最適化バイナリー・モジュール(722)を作成することを実行しうる。
また、検証手段(713)は、上記縮小した対象領域を最適化した最適化バイナリー・モジュール(722)と上記オリジナルのバイナリー・モジュール(721)とをそれぞれ実行しながら、チェックポイントで上記最適化バイナリー・モジュール(722)の実行と上記オリジナルのバイナリー・モジュール(721)の実行とを同期させて、上記縮小した対象領域を最適化した上記最適化バイナリー・モジュール(722)の実行の出力と上記オリジナルのバイナリー・モジュール(721)の実行の出力とを比較することによって上記縮小した対象領域を最適化した上記最適化バイナリー・モジュール(722)を検証することを実行しうる。
また、検証手段(713)は、上記最適化バイナリー・モジュール(722)の実行の上記出力と上記オリジナルのバイナリー・モジュール(721)の実行の上記出力とを比較することにおいて、上記テスト用プロセス(715)の出力と上記検証用プロセス(714)の出力とを比較することを実行しうる。
また、検証手段(713)は、上記選択した対象領域を縮小することにおいて、上記所定の時間の経過後に、上記最適化バイナリー・モジュール(722)内の最適化したバイナリー・コード領域の分岐網羅が達成されないこと且つテスト時間が超過したことに応じて、分岐をトレースに含めるかを判断する為の閾値(分岐確率の閾値)を上げることを実行しうる。
また、検証手段(713)は、上記最適化バイナリー・モジュール(722)の終了コード及び終了ステータスと、上記オリジナルのバイナリー・モジュール(721)の終了コード及び終了ステータスとをそれぞれ比較することによって上記最適化バイナリー・モジュール(722)を検証することを実行しうる。
実行手段(716)は、最適化バイナリー・モジュール(722)の実行の出力とオリジナルのバイナリー・モジュール(721)の実行の出力との比較の結果、最適化バイナリー・モジュール(722)が正しく実行されていることに応じて、チェックポイントのコードをオリジナルのバイナリー・モジュール(721)を実行しているプロセス(すなわち、検証用プロセス(714)でのみ実行することを実行しうる。
また、実行手段(716)は、上記チェックポイントでの全ての入出力の合計サイズが所定の閾値よりも小さいことに応じて、当該全ての入出力を保存することを実行しうる。
また、実行手段(716)は、上記チェックポイントでの全ての入出力の合計サイズが所定の閾値よりも小さいことに応じて、当該全ての入出力を保存することを実行し、且つ、上記コンピュータの負荷が所定の閾値よりも小さい時間帯において、上記最適化バイナリー・モジュール(722)のテストを実行しうる。
また、実行手段(716)は、上記テスト用プロセス(715)の出力と上記検証用プロセス(714)の出力との比較の結果、上記最適化バイナリー・モジュール(722)が正しく実行されていることに応じて、上記チェックポイントのコードを上記検証用プロセス(714)でのみ実行しうる。
また、実行手段(716)は、上記チェックポイントへの入力と、当該チェックポイントのコードを上記検証用プロセス(714)でのみ実行した実行結果とを格納手段(723)(例えば、バッファ)に格納することを実行しうる。
また、実行手段(716)は、格納手段(723)に上記チェックポイントへの全ての入力と上記実行結果とが格納されていることに応じて、上記コンピュータの負荷が所定の閾値よりも小さい時間帯において、上記テスト用プロセス(715)でのテストをさらに実行しうる。
コピー手段(717)は、オリジナルのバイナリー・モジュール(721)を実行しているプロセス(すなわち、検証用プロセス(714))でのみ実行された上記チェックポイントのコードの実行結果を、上記最適化バイナリー・モジュール(722)を実行しているプロセス(すなわち、テスト用プロセス(715))にコピーすることを実行しうる。
また、コピー手段(717)は、上記検証用プロセス(714)でのみ実行された上記チェックポイントのコードの実行結果を、上記テスト用プロセス(715)にさらにコピーすることを実行しうる。

Claims (20)

  1. 最適化したバイナリー・モジュールをテストする方法であって、コンピュータが、
    プロファイル情報に基づいて、オリジナルのバイナリー・モジュール内のオリジナルのバイナリー・コード中の分岐網羅される見込みのある領域を最適化の対象領域として選択するステップと、
    選択した対象領域を最適化したバイナリー・モジュール(以下、「最適化バイナリー・モジュール」という)を作成するステップと、
    前記最適化バイナリー・モジュールと前記オリジナルのバイナリー・モジュールとをそれぞれ実行しながら、チェックポイントで前記最適化バイナリー・モジュールの実行と前記オリジナルのバイナリー・モジュールの実行とを同期させて、前記最適化バイナリー・モジュールの実行の出力と前記オリジナルのバイナリー・モジュールの実行の出力とを比較することによって前記最適化バイナリー・モジュールを検証するステップと
    を実行することを含み、
    前記コンピュータが、
    所定の時間の経過後に、前記最適化バイナリー・モジュール内の最適化したバイナリー・コード領域の分岐網羅が達成されないことに応じて、前記選択した対象領域を縮小するステップと、
    縮小した対象領域について、前記作成するステップ及び前記検証するステップを再実行するステップと
    をさらに実行することを含む、前記方法。
  2. 最適化したバイナリー・モジュールをテストする方法であって、コンピュータが、
    プロファイル情報に基づいて、オリジナルのバイナリー・モジュール内のオリジナルのバイナリー・コード中の分岐網羅される見込みのある領域を最適化の対象領域として選択するステップと、
    選択した対象領域を最適化したバイナリー・モジュール(以下、「最適化バイナリー・モジュール」という)を作成するステップと、
    前記最適化バイナリー・モジュールと前記オリジナルのバイナリー・モジュールとをそれぞれ実行しながら、チェックポイントで前記最適化バイナリー・モジュールの実行と前記オリジナルのバイナリー・モジュールの実行とを同期させて、前記最適化バイナリー・モジュールの実行の出力と前記オリジナルのバイナリー・モジュールの実行の出力とを比較することによって前記最適化バイナリー・モジュールを検証するステップと
    を実行することを含み、
    前記選択するステップが、
    前記プロファイル情報を用いて、前記コンピュータの中央演算処理装置リソースを消費するプロセスと、当該プロセスで前記中央演算処理装置リソースを消費しているオリジナルのバイナリー・モジュールとを検出するステップと、
    検出したオリジナルのバイナリー・モジュールの分岐命令をインストラメンテーション(instrumentation)し、分岐網羅が達成可能であり且つ実行頻度が高いトレースを検出するステップ
    を含み、
    検出したトレースが前記最適化の対象領域として用いられる、
    前記方法。
  3. 前記選択した対象領域を縮小するステップが、
    前記所定の時間の経過後に、前記最適化バイナリー・モジュール内の最適化したバイナリー・コード領域の分岐網羅が達成されないこと且つテスト時間が超過したことに応じて、分岐をトレースに含めるかを判断する為の閾値を上げるステップであって、前記閾値は、分岐先に分岐した回数を総分岐実行回数で除した分岐確率の閾値である、前記閾値を上げるステップと
    をさらに含む、請求項2に記載の方法。
  4. 前記選択するステップが、
    前記プロファイル情報を用いて、前記コンピュータの中央演算処理装置リソースを消費するプロセスと、当該プロセスで前記中央演算処理装置リソースを消費しているオリジナルのバイナリー・モジュールとを検出するステップと、
    検出したオリジナルのバイナリー・モジュールの分岐命令をインストラメンテーション(instrumentation)し、分岐網羅が達成可能であり且つ実行頻度が高いトレースを検出するステップ
    を含み、
    検出したトレースが前記最適化の対象領域として用いられる、
    請求項に記載の方法。
  5. 前記選択するステップが、
    前記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結合領域を作成するステップ
    を含み、
    前記結合領域が前記最適化の対象領域として用いられる、
    請求項2又は4に記載の方法。
  6. 前記選択するステップが、
    トレースの先頭候補として下記条件(S1)〜(S3)のうちのいずれか1つ又は複数を選択するステップと:
    (S1)バック−エッジの分岐先;
    (S2)既に存在するトレースのイグジット(exit)先;又は、
    (S3)プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つと判断された分岐命令のいずれかの分岐先、
    選択したトレースそれぞれの先頭候補の実行に応じて、当該トレースの先頭候補に関連付けられたカウンタをインクリメントするステップと、
    前記カウンタが閾値を超えたことに応じて、当該閾値を超えたトレースの先頭候補から下記条件(E1)〜(E5)のうちのいずれか1つを示すトレースの末尾候補までを1つのトレースとするステップと:
    (E1)次のバック−エッジの分岐命令;
    (E2)別のトレースの先頭へ分岐する命令、若しくは、直後の命令が別のトレースの先頭である非分岐命令;
    (E3)プロファイル履歴において、分岐先に分岐した回数を総分岐実行回数で除した分岐確率が閾値よりも低い分岐先を持つ分岐命令の直前の命令;
    (E4)前記検出したトレースについて当該トレースの分岐先から始まるトレースが存在していることに応じて、複数のトレースを結合して結合領域を作成する場合には、エッジが2つ以上合流する点の直前の命令、又は
    (E5)プログラムの終端
    を含む、請求項4又は5に記載の方法。
  7. 前記コンピュータが、
    前記最適化バイナリー・モジュールの実行の前記出力と前記オリジナルのバイナリー・モジュールの実行の前記出力との比較の結果、前記最適化バイナリー・モジュールが正しく実行されていることに応じて、前記チェックポイントのコードを前記オリジナルのバイナリー・モジュールを実行しているプロセスでのみ実行するステップと、
    前記オリジナルのバイナリー・モジュールを実行しているプロセスでのみ実行された前記チェックポイントのコードの実行結果を、前記最適化バイナリー・モジュールを実行しているプロセスにコピーするステップと
    をさらに実行することを含む、請求項1〜6のいずれか一項に記載の方法。
  8. 前記検証するステップが、
    前記最適化バイナリー・モジュールの終了コード及び終了ステータスと、前記オリジナルのバイナリー・モジュールの終了コード及び終了ステータスとをそれぞれ比較することによって前記最適化バイナリー・モジュールを検証するステップ
    を含む、請求項1〜7のいずれか一項に記載の方法。
  9. 前記コンピュータが、
    前記チェックポイントでの全ての入出力の合計サイズが所定の閾値よりも小さいことに応じて、当該全ての入出力を保存するステップと、
    前記コンピュータの負荷が所定の閾値よりも小さい時間帯において、前記最適化バイナリー・モジュールのテストを実行するステップと
    をさらに実行することを含む、請求項1〜8のいずれか一項に記載の方法。
  10. 前記最適化バイナリー・モジュールを作成するステップが、
    前記最適化バイナリー・モジュールのチェックポイントを、前記オリジナルのバイナリー・モジュールと同等の入力と出力結果とを持つように最適化するステップ、又は、
    前記最適化バイナリー・モジュールのチェックポイントの呼び出しが、前記オリジナルのバイナリー・モジュール中の同等のチェックポイントの呼び出しと同じ順番となるように、前記オリジナルのバイナリー・モジュールを最適化するステップ
    を含む、請求項1〜9のいずれか一項に記載の方法。
  11. 前記最適化の対象領域が、分岐確率が小さいサイド・イグジット(side exit)を含まない、請求項1〜10のいずれか一項に記載の方法。
  12. 前記チェックポイントで前記最適化バイナリー・モジュールの実行と前記オリジナルのバイナリー・モジュールの実行とを同期させるステップが、
    前記オリジナルのバイナリー・モジュールを検証用プロセスにロードし、前記最適化バイナリー・モジュールをテスト用プロセスにロードするステップと、
    前記チェックポイントで、前記検証用プロセスと前記テスト用プロセスとを同期するステップと
    を含む、請求項1〜11のいずれか一項に記載の方法。
  13. 前記最適化バイナリー・モジュールの実行の前記出力と前記オリジナルのバイナリー・モジュールの実行の前記出力とを比較するステップが、
    前記テスト用プロセスの出力と前記検証用プロセスの出力とを比較するステップ
    を含む、請求項12に記載の方法。
  14. 前記コンピュータが、
    前記テスト用プロセスの出力と前記検証用プロセスの出力との比較の結果、前記最適化バイナリー・モジュールが正しく実行されていることに応じて、前記チェックポイントのコードを前記検証用プロセスでのみ実行するステップと、
    前記検証用プロセスでのみ実行された前記チェックポイントのコードの実行結果を、前記テスト用プロセスにコピーするステップ
    をさらに実行することを含む、請求項13に記載の方法。
  15. 前記コンピュータが、
    前記チェックポイントへの入力と、当該チェックポイントのコードを前記検証用プロセスでのみ実行した実行結果とを、バッファに格納するステップと、
    前記バッファに前記チェックポイントへの全ての入力と前記実行結果とが格納されていることに応じて、前記コンピュータの負荷が所定の閾値よりも小さい時間帯において、前記テスト用プロセスでのテストを実行するステップと
    をさらに実行することを含む、請求項14に記載の方法。
  16. 前記プロファイル情報が、タイマー・サンプリング(timer sampling)、又は、オリジナルのバイナリー・モジュールの分岐命令をインストラメンテーションすることによって得られる情報、若しくは、ランタイム・インストラメンテーション(Runtime Instrumentation)を利用することによって得られる情報である、請求項1〜15のいずれか一項に記載の方法。
  17. 前記チェックポイントが、システム・コール又は標準ライブラリ・コールである、請求項1〜16のいずれか一項に記載の方法。
  18. 最適化したバイナリー・モジュールをテストするためのコンピュータであって、
    プロファイル情報に基づいて、オリジナルのバイナリー・モジュール内のオリジナルのバイナリー・コード中の分岐網羅される見込みのある領域を最適化の対象領域として選択する対象領域選択手段と、
    選択した対象領域を最適化したバイナリー・モジュール(以下、「最適化バイナリー・モジュール」という)を作成する最適化バイナリー・モジュール作成手段と、
    前記最適化バイナリー・モジュールと前記オリジナルのバイナリー・モジュールとをそれぞれ実行しながら、チェックポイントで前記最適化バイナリー・モジュールの実行と前記オリジナルのバイナリー・モジュールの実行とを同期させて、前記最適化バイナリー・モジュールの実行の出力と前記オリジナルのバイナリー・モジュールの実行の出力とを比較することによって前記最適化バイナリー・モジュールを検証する検証手段と
    を備えており、
    前記対象領域選択手段が、
    所定の時間の経過後に、前記最適化バイナリー・モジュール内の最適化したバイナリー・コード領域の分岐網羅が達成されないことに応じて、前記選択した対象領域を縮小する縮小手段
    をさらに備えており、
    前記最適化バイナリー・モジュール作成手段が、縮小した対象領域を最適化したバイナリー・モジュールを作成することをさらに実行し、及び
    前記検証手段が、前記縮小した対象領域を最適化した最適化バイナリー・モジュールと前記オリジナルのバイナリー・モジュールとをそれぞれ実行しながら、チェックポイントで前記最適化バイナリー・モジュールの実行と前記オリジナルのバイナリー・モジュールの実行とを同期させて、前記縮小した対象領域を最適化した前記最適化バイナリー・モジュールの実行の出力と前記オリジナルのバイナリー・モジュールの実行の出力とを比較することによって前記縮小した対象領域を最適化した前記最適化バイナリー・モジュールを検証することをさらに実行する、
    前記コンピュータ。
  19. 最適化したバイナリー・モジュールをテストするためのコンピュータであって、
    プロファイル情報に基づいて、オリジナルのバイナリー・モジュール内のオリジナルのバイナリー・コード中の分岐網羅される見込みのある領域を最適化の対象領域として選択する対象領域選択手段と、
    選択した対象領域を最適化したバイナリー・モジュール(以下、「最適化バイナリー・モジュール」という)を作成する最適化バイナリー・モジュール作成手段と、
    前記最適化バイナリー・モジュールと前記オリジナルのバイナリー・モジュールとをそれぞれ実行しながら、チェックポイントで前記最適化バイナリー・モジュールの実行と前記オリジナルのバイナリー・モジュールの実行とを同期させて、前記最適化バイナリー・モジュールの実行の出力と前記オリジナルのバイナリー・モジュールの実行の出力とを比較することによって前記最適化バイナリー・モジュールを検証する検証手段と
    を備えており、
    前記対象領域選択手段が、
    前記プロファイル情報を用いて、前記コンピュータの中央演算処理装置リソースを消費するプロセスと、当該プロセスで前記中央演算処理装置リソースを消費しているオリジナルのバイナリー・モジュールとを検出すること、
    検出したオリジナルのバイナリー・モジュールの分岐命令をインストラメンテーション(instrumentation)し、分岐網羅が達成可能であり且つ実行頻度が高いトレースを検出すること
    を実行し、前記最適化バイナリー・モジュール作成手段は、検出したトレースを前記最適化の対象領域として用いる、
    前記コンピュータ。
  20. 最適化したバイナリー・モジュールをテストするためのコンピュータ・プログラムであって、コンピュータに、請求項1〜17のいずれか一項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
JP2014026911A 2014-02-14 2014-02-14 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム Expired - Fee Related JP5988444B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2014026911A JP5988444B2 (ja) 2014-02-14 2014-02-14 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム
US14/621,890 US9563547B2 (en) 2014-02-14 2015-02-13 Testing optimized binary modules
US14/749,049 US9569347B2 (en) 2014-02-14 2015-06-24 Testing optimized binary modules

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014026911A JP5988444B2 (ja) 2014-02-14 2014-02-14 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム

Publications (2)

Publication Number Publication Date
JP2015153191A JP2015153191A (ja) 2015-08-24
JP5988444B2 true JP5988444B2 (ja) 2016-09-07

Family

ID=53798229

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014026911A Expired - Fee Related JP5988444B2 (ja) 2014-02-14 2014-02-14 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム

Country Status (2)

Country Link
US (2) US9563547B2 (ja)
JP (1) JP5988444B2 (ja)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9959197B2 (en) * 2015-08-31 2018-05-01 Vmware, Inc. Automated bug detection with virtual machine forking
US9563536B1 (en) 2015-10-19 2017-02-07 International Business Machines Corporation Performance neutral isolation of runtime discrepancies in binary code
US9547484B1 (en) * 2016-01-04 2017-01-17 International Business Machines Corporation Automated compiler operation verification
US10037260B2 (en) * 2016-05-31 2018-07-31 Red Hat, Inc. System for expression evaluation at debug time
CN107229565B (zh) * 2017-05-31 2020-05-01 北京京东尚科信息技术有限公司 测试方法和装置
CN107451057B (zh) * 2017-07-31 2020-11-24 苏州浪潮智能科技有限公司 一种分支确定方法及装置
US10346293B2 (en) 2017-10-04 2019-07-09 International Business Machines Corporation Testing pre and post system call exits
US11175924B2 (en) 2017-10-06 2021-11-16 International Business Machines Corporation Load-store unit with partitioned reorder queues with single cam port
US10417002B2 (en) 2017-10-06 2019-09-17 International Business Machines Corporation Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses
US10606591B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Handling effective address synonyms in a load-store unit that operates without address translation
US10514890B2 (en) * 2017-11-15 2019-12-24 Accenture Global Solutions Limited Test case and data selection using a sampling methodology
US10503626B2 (en) * 2018-01-29 2019-12-10 Oracle International Corporation Hybrid instrumentation framework for multicore low power processors
US10754630B2 (en) * 2018-06-06 2020-08-25 International Business Machines Corporation Build-time code section-specific compiler selection
US10832399B2 (en) * 2018-10-23 2020-11-10 International Business Machines Corporation Detection for abnormal connectivity on a product
KR101995285B1 (ko) * 2018-10-31 2019-07-02 한국인터넷진흥원 취약점이 존재하는 바이너리 패치 방법 및 그 장치
US10776255B1 (en) * 2019-07-31 2020-09-15 International Business Machines Corporation Automatic verification of optimization of high level constructs using test vectors
US11670190B1 (en) 2020-02-03 2023-06-06 Architecture Technology Corporation Training apparatus using augmented and virtual reality
US11042369B1 (en) * 2020-02-03 2021-06-22 Architecture Technology Corporation Systems and methods for modernizing and optimizing legacy source code
US11599342B2 (en) * 2020-09-28 2023-03-07 Red Hat, Inc. Pathname independent probing of binaries

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5274811A (en) * 1989-06-19 1993-12-28 Digital Equipment Corporation Method for quickly acquiring and using very long traces of mixed system and user memory references
JPH06236295A (ja) 1992-03-16 1994-08-23 Nippon Telegr & Teleph Corp <Ntt> プログラム移植支援システム
US6105124A (en) * 1996-01-26 2000-08-15 Intel Corporation Method and apparatus for merging binary translated basic blocks of instructions
US5732210A (en) * 1996-03-15 1998-03-24 Hewlett-Packard Company Use of dynamic translation to provide fast debug event checks
JPH09288580A (ja) 1996-04-19 1997-11-04 Nec Corp ソースプログラムの最適化装置および最適化方法
US5909578A (en) * 1996-09-30 1999-06-01 Hewlett-Packard Company Use of dynamic translation to burst profile computer applications
US5940622A (en) * 1996-12-11 1999-08-17 Ncr Corporation Systems and methods for code replicating for optimized execution time
US6164841A (en) * 1998-05-04 2000-12-26 Hewlett-Packard Company Method, apparatus, and product for dynamic software code translation system
US6405367B1 (en) * 1998-06-05 2002-06-11 Hewlett-Packard Company Apparatus and method for increasing the performance of Java programs running on a server
US6223339B1 (en) * 1998-09-08 2001-04-24 Hewlett-Packard Company System, method, and product for memory management in a dynamic translator
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6434738B1 (en) * 1999-04-22 2002-08-13 David Arnow System and method for testing computer software
US6968542B2 (en) * 2000-06-16 2005-11-22 Hewlett-Packard Development Company, L.P. Method for dynamically identifying pseudo-invariant instructions and their most common output values on frequently executing program paths
US6944754B2 (en) * 2002-10-02 2005-09-13 Wisconsin Alumni Research Foundation Method and apparatus for parallel execution of computer software using a distilled program
JP3992102B2 (ja) * 2003-06-04 2007-10-17 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ装置、コンパイル方法、コンパイラプログラム、及び記録媒体
US7228528B2 (en) * 2003-06-26 2007-06-05 Intel Corporation Building inter-block streams from a dynamic execution trace for a program
US7206969B2 (en) * 2003-09-10 2007-04-17 Hewlett-Packard Development Company, L.P. Opportunistic pattern-based CPU functional testing
FR2865047B1 (fr) 2004-01-14 2006-04-07 Commissariat Energie Atomique Systeme de generation automatique de codes optimises
US7506318B1 (en) * 2005-06-28 2009-03-17 Replay Solutions, Inc. Recording and replaying computer programs
US20070089097A1 (en) * 2005-10-13 2007-04-19 Liangxiao Hu Region based code straightening
JP2008276735A (ja) 2007-04-03 2008-11-13 Toshiba Corp プログラムコード変換装置及びプログラムコード変換方法
US20100115494A1 (en) * 2008-11-03 2010-05-06 Gorton Jr Richard C System for dynamic program profiling
JP4886826B2 (ja) * 2009-08-24 2012-02-29 インターナショナル・ビジネス・マシーンズ・コーポレーション フォールト・トレラント・コンピュータ・システム、方法及びプログラム
US8752008B2 (en) 2009-09-02 2014-06-10 Advanced Micro Devices, Inc. Lightweight service based dynamic binary rewriter framework
US8756581B2 (en) * 2011-02-03 2014-06-17 International Business Machines Corporation Adaptive next-executing-cycle trace selection for trace-driven code optimizers

Also Published As

Publication number Publication date
US20150234736A1 (en) 2015-08-20
US20150370695A1 (en) 2015-12-24
US9563547B2 (en) 2017-02-07
US9569347B2 (en) 2017-02-14
JP2015153191A (ja) 2015-08-24

Similar Documents

Publication Publication Date Title
JP5988444B2 (ja) 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム
Zhang et al. A comprehensive benchmark of deep learning libraries on mobile devices
US20120260132A1 (en) Test selection based on an n-wise combinations coverage
US20200341752A1 (en) Electronic apparatus and method for controlling thereof
US9720793B2 (en) Implementing processor functional verification by generating and running constrained random irritator tests for multiple processor system and processor core with multiple threads
EP2972878B1 (en) Mechanism for facilitating dynamic and efficient management of instruction atomicity violations in software programs at computing systems
US9396095B2 (en) Software verification
JP6303749B2 (ja) ソフトウェアプログラムを解析する方法及びシステム並びに非一時的なコンピュータ可読媒体
US9697040B2 (en) Software replayer for transactional memory programs
Peters et al. How does migrating to kotlin impact the run-time efficiency of android apps?
US8972784B2 (en) Method and device for testing a system comprising at least a plurality of software units that can be executed simultaneously
US11983097B2 (en) Ranking tests based on code change and coverage
JP6723483B2 (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム
US8671396B2 (en) Dynamic interface reduction for software model checking
Dou et al. ShortCut: accelerating mostly-deterministic code regions
US9015673B2 (en) Method for developing software in a parallel computing environment
US9860155B1 (en) Code coverage and data analysis
US20150161006A1 (en) Information processing apparatus and method for testing same
JP5545133B2 (ja) 静的解析処理システム、方法、およびプログラム
TWI417786B (zh) 幫助一處理環境中之指令執行的方法、系統及程式產品
US9218272B2 (en) System level architecture verification of a transactional execution
CN116775202A (zh) 模糊测试方法、装置、介质、电子设备及计算机程序产品
Zhang et al. Benchmarking of DL Libraries and Models on Mobile Devices
US10534691B2 (en) Apparatus and method to improve accuracy of performance measurement for loop processing in a program code
JP2012059202A (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160119

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20160128

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20160128

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160408

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20160408

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160519

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160615

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20160615

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: 20160715

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20160719

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20160719

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160805

R150 Certificate of patent or registration of utility model

Ref document number: 5988444

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees