(57)【特許請求の範囲】
【請求項１】
分散システムのためのコントローラであって、
分散システムにおいて、アプリケーションプログラムインタフェースＡＰＩレベルでアプリケーションフローをトレーシングし、
前記トレーシングは、
ホットパッチングのためのプレースホルダを有するオーバライディングライブラリを生成し、トランポリン及びホットパッチノーオペレーション（ＮＯＰ）をセットアップし、
アプリケーションの実行時における任意のステップにおいて、トリガオンされているインストルメンテーションで前記アプリケーションをパッチし、
オーバライドインストルメンテーション関数で、全てにプロセス名が添えられて共有ログファイルで保存されている、関連するコールパラメータ及び戻り値をキャプチャし、
ホットパッチングを終了し、
インストルメンテーション期間が終了すると、分析のために全てのログをプッシュし、
トランザクションログを種々のＡＰＩの境界から分析し、実行フローを再構成するコントローラ。
【請求項２】
前記オーバライディングライブラリはオーバライディング関数を含み、
前記オーバライディング関数は、ターゲット関数と完全に同一のシグネチャを有するラッパ関数であり、
前記ラッパ関数は、前記プロセス名で特定されるプロセスでは実際のロジックを修正することなく、実関数に渡されているアーギュメント及び戻り値をキャプチャすることが可能であり、
オーバライディングターゲット関数におけるキー態様は、動的にリンクされるライブラリの共有ライブラリのレイジーリンクを含む請求項１に記載のコントローラ。
【請求項３】
前記トランポリンは、積分値を返すターゲット関数に関して作成できるトランポリン関数を含み、
前記トランポリン関数は、前記ターゲット関数のシンボルと同一のシグネチャ及び同一の名称を有し、前記オーバライディングライブラリに置かれ、
トレーシングアプリケーションは、前記オーバライディングライブラリから前記ターゲット関数と同一の名称を有する次のシンボルを呼び出し、同時に、前記ターゲット関数に渡される戻り値及びアーギュメント／パラメータをロギングするためにロギング関数を使用する、請求項１に記載のコントローラ。
【請求項４】
前記オーバライディングライブラリの生成は、
ＮＯＰ命令を有するトランポリン関数と共にロギング関数を呼び出すために修正されたコールドパッチされたバイナリを含むコールドパッチされたリストを含み、同時に、前記トランポリンにおけるログ関数の命令アドレス／オフセットがキャプチャされる、請求項１に記載のコントローラ。
【請求項５】
トランポリンベースのインストルメンテーションにおけるオーバヘッドの大部分は、実際にロギングすること、およびＩ／Ｏオペレーションを実行することでもたらされ、
ロギングのコストを償却するために最適化されたメカニズムでさえも、いまだにオーバヘッドを完全に除去せず、
前記トレーシングするステップは、インストルメンテーションのロギングを動的に有効にするとともに、同時に、いずれかのソースコードに修正を必要としないことを含む、請求項１に記載のコントローラ。
【請求項６】
前記トレーシングは、トランザクションと一意にリンクされるメッセージ識別子をキャプチャ及び生成することを含み、
前記トランポリンからのトランポリン関数は、他のサービスに送信されているメッセージコンテンツをハッシュすることでメッセージ識別子を生成するとともに、ほとんどのメッセージベースのシステムでは、同一のコンテンツがエンドサービスプロセスに転送され、
前記トレーシングは、メッセージ識別子を使用して、メッセージを一意に識別できる、請求項１に記載のコントローラ。
【請求項７】
分散システムにおける動的インストルメンテーションをコンピュータで実行可能にするための命令が記録された記録媒体であって、
分散システムにおいて、アプリケーションプログラムインタフェースＡＰＩレベルでアプリケーションフローをトレーシングさせるための命令が記録され、
前記トレーシングは、
ホットパッチングのためのプレースホルダを有するオーバライディングライブラリを生成し、トランポリン及びホットパッチノーオペレーション（ＮＯＰ）をセットアップし、
アプリケーションの実行時における任意のステップにおいて、トリガオンされているインストルメンテーションで前記アプリケーションをパッチし、
オーバライドインストルメンテーション関数で、全てにプロセス名が添えられて共有ログファイルで保存されている、関連するコールパラメータ及び戻り値をキャプチャし、
ホットパッチングを終了し、
インストルメンテーション期間が終了すると、分析のために全てのログをプッシュし、
トランザクションログを種々のＡＰＩの境界から分析し、実行フローを再構成することを含む、記録媒体。
【請求項８】
前記オーバライディングライブラリはオーバライディング関数を含み、
前記オーバライディング関数は、ターゲット関数と完全に同一のシグネチャを有するラッパ関数であり、
前記ラッパ関数は、前記プロセス名で特定されるプロセスでは実際のロジックを修正することなく、実関数に渡されているアーギュメント及び戻り値をキャプチャすることが可能であり、
オーバライディングターゲット関数におけるキー態様は、動的にリンクされるライブラリの共有ライブラリのレイジーリンクを含む、請求項７に記載の記録媒体。
【請求項９】
前記トランポリンは、積分値を返すターゲット関数に関して作成できるトランポリン関数を含み、
前記トランポリン関数は、前記ターゲット関数のシンボルと同一のシグネチャ及び同一の名称を有し、前記オーバライディングライブラリに置かれ、
トレーシングアプリケーションは、前記オーバライディングライブラリから前記ターゲット関数と同一の名称を有する次のシンボルを呼び出し、同時に、前記ターゲット関数に渡される戻り値及びアーギュメント／パラメータをロギングするためにロギング関数を使用する、請求項７に記載の記録媒体。
【請求項１０】
前記オーバライディングライブラリの生成は、
ＮＯＰ命令を有するトランポリン関数と共にロギング関数を呼び出すために修正されたコールドパッチされたバイナリを含むコールドパッチされたリストを含み、同時に、前記トランポリンにおけるログ関数の命令アドレス／オフセットがキャプチャされる、請求項７に記載の記録媒体。
【請求項１１】
トランポリンベースのインストルメンテーションにおけるオーバヘッドの大部分は、実際にロギングすること、およびＩ／Ｏオペレーションを実行することでもたらされ、
ロギングのコストを償却するために最適化されたメカニズムでさえも、いまだにオーバヘッドを完全に除去せず、
前記トレーシングするステップは、インストルメンテーションのロギングを動的に有効にするとともに、同時に、いずれかのソースコードに修正を必要としないことを含む、請求項７に記載の記録媒体。
【請求項１２】
前記トレーシングは、トランザクションと一意にリンクされるメッセージ識別子をキャプチャ及び生成することを含み、
前記トランポリンからのトランポリン関数は、他のサービスに送信されているメッセージコンテンツをハッシュすることでメッセージ識別子を生成するとともに、ほとんどのメッセージベースのシステムでは、同一のコンテンツがエンドサービスプロセスに転送され、
前記トレーシングは、メッセージ識別子を使用して、メッセージを一意に識別できる、請求項７に記載の記録媒体。
【請求項１３】
分散システムにおける動的インストルメンテーションを可能にするコンピュータで実行される方法であって、
分散システムにおいて、アプリケーションプログラムインタフェースＡＰＩレベルでアプリケーションフローをトレーシングし、
前記トレーシングは、
ホットパッチングのためのプレースホルダを有するオーバライディングライブラリを生成し、トランポリン及びホットパッチノーオペレーション（ＮＯＰ）をセットアップし、
アプリケーションの実行時における任意のステップにおいて、トリガオンされているインストルメンテーションで前記アプリケーションをパッチし、
オーバライドインストルメンテーション関数で、全てにプロセス名が添えられて共有ログファイルで保存されている、関連するコールパラメータ及び戻り値をキャプチャし、
ホットパッチングを終了し、
インストルメンテーション期間が終了すると、分析のために全てのログをプッシュし、
トランザクションログを種々のＡＰＩの境界から分析し、実行フローを再構成することを含む、方法。
【請求項１４】
前記オーバライディングライブラリはオーバライディング関数を含み、
前記オーバライディング関数は、ターゲット関数と完全に同一のシグネチャを有するラッパ関数であり、
前記ラッパ関数は、前記プロセス名で特定されるプロセスでは実際のロジックを修正することなく、実関数に渡されているアーギュメント及び戻り値をキャプチャすることが可能であり、
オーバライディングターゲット関数におけるキー態様は、動的にリンクされるライブラリの共有ライブラリのレイジーリンクを含む、請求項１３に記載の方法。
【請求項１５】
前記トランポリンは、積分値を返すターゲット関数に関して作成できるトランポリン関数を含み、
前記トランポリン関数は、前記ターゲット関数のシンボルと同一のシグネチャ及び同一の名称を有し、前記オーバライディングライブラリに置かれ、
トレーシングアプリケーションは、前記オーバライディングライブラリから前記ターゲット関数と同一の名称を有する次のシンボルを呼び出し、同時に、前記ターゲット関数に渡される戻り値及びアーギュメント／パラメータをロギングするためにロギング関数を使用する、請求項１３に記載の方法。
【請求項１６】
前記オーバライディングライブラリの生成は、
ＮＯＰ命令を有するトランポリン関数と共にロギング関数を呼び出すために修正されたコールドパッチされたバイナリを含むコールドパッチされたリストを含み、同時に、前記トランポリンにおけるログ関数の命令アドレス／オフセットがキャプチャされる、請求項１３に記載の方法。
【請求項１７】
トランポリンベースのインストルメンテーションにおけるオーバヘッドの大部分は、実際にロギングすること、およびＩ／Ｏオペレーションを実行することでもたらされ、
ロギングのコストを償却するために最適化されたメカニズムでさえも、いまだにオーバヘッドを完全に除去せず、
前記トレーシングするステップは、インストルメンテーションのロギングを動的に有効にするとともに、同時に、いずれかのソースコードに修正を必要としないことを含む、請求項１３に記載の方法。
【請求項１８】
前記トレーシングは、トランザクションと一意にリンクされるメッセージ識別子をキャプチャ及び生成することを含み、
前記トランポリンからのトランポリン関数は、他のサービスに送信されているメッセージコンテンツをハッシュすることでメッセージ識別子を生成するとともに、ほとんどのメッセージベースのシステムでは、同一のコンテンツがエンドサービスプロセスに転送され、
前記トレーシングは、メッセージ識別子を使用して、メッセージを一意に識別できる、請求項１３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この出願は、２０１４年３月３１日に出願された、「Method and Apparatus to do Dynamic Border Line Tracing for Tracking Message Flows Across Distributed Systems」と題する米国仮出願第６１／９７２，５３９号を基礎とし、その開示の全てをここに取り込む。
本発明は、分散システム、特に分散システムのメッセージフローを監視（tracking）するための動的ボーダーライントレーシングに関する。
【背景技術】
【０００２】
本明細書では、以下の文献を参照する。
［１］．Tuxedo http://docs.oracle.com/cdE1526101/'tuxedo/docs11gr1/int/intatm.html.
［２］．LD_PRELOAD http://www.linuxjournal.com/article/7795.
［３］．Galen Hunt and Doug Brubacher, Detours: Binary Interception of Win32 Functions, in Third USENIX Windows NT Symposium, USENIX, July 1999.
［４］．C.-K. Luk, R. Cohn, R. Muth, H. Patil, A. Klauser, G. Lowney, S. Wallace, V. J. Reddi, and K. Hazelwood. Pin: building customized program analysis tools with dynamic instrumentation. In Proceedings of the 2005 ACM SIGPLAN conference on Programming language design and implementation, PLDI '05, pages 190-200, New York, NY, USA, 2005. ACM.
［５］．B. M. Cantrill, M. W. Shapiro, and A. H. Leventhal. Dynamic instrumentation of production systems. In Proceedings of the annual conference on USENIX Annual Technical Conference, ATEC '04, pages 2-2, Berkeley, CA, USA, 2004. USENIX Association.
［６］．Eric Koskinen and John Jannotti. 2008. BorderPatrol: isolating events for black-box tracing. SIGOPS Oper. Syst. Rev. 42, 4 (April 2008), 191-203. DOI=10.1145/1357010.1352613 http://doi.acm.org/10.1145/1357010.1352613.
［７］．Bryan Buck and Jeffrey K. Hollingsworth. 2000. An API for Runtime Code Patching. Int. J. High Perform. Comput. Appl. 14, 4 (November 2000), 317-329. DOI= 10.1177/109434200001400404 http://dx.doi.org/l0.1177/109434200001400404
［８］．SystemTap http://sourcevvare.org/systemtap/.
［９］．Arora, N.; Hui Zhang; Junghwan Rhee; Yoshihira, K.; Guofei Jiang, "iProbe: A lightweight user-level dynamic instrumentation tool," Automated Software Engineering (ASE), 2013 IEEE/ACM 28th International Conference on, vol., no., pp.742,745, 11-15 Nov. 2013.
【０００３】
分散システムにおいて正確なリクエストトレースを取得することは、困難なタスクとなることがある。システムコールログを用いてアプリケーションから提供される従来のログデータは、通常、エンドツーエンドのトランザクションフローを生成するには不十分である。アプリケーションからのトレースログにおける情報は、ユーザ要求データ、またはフローを生成できないほどに少ないデバッグデータのいずれかを含む。一方、システムコールは、低い階層構造であり、問題をデバッグするのに開発者にとって有用でないことが多い（通常、ユーザ空間情報がより有益である）。
【０００４】
分散アプリケーションでは、リクエストが数個のモジュールにおよび、実行フローが分散システム全域のノードにおけるモジュールに渡って多重化される。これらのモジュールは、通常、異なるチームによって書かれており、それらの間の通信（ＡＰＩ関数）のクリアレイヤ（clear layer）を提供する。ＡＰＩ関数をキャプチャすることは、高オーバヘッドを招くことのない、モジュール間通信を示す最適な粒度をもたらす。本発明では、この通信のレイヤを利用して、分散システムのトランザクションフローを生成することを目的とする。加えて、エンドツーエンドトランザクションフローの監視を示すために、メッセージキューイングシステム（例えば、Ｔｕｘｅｄｏ［１］）のアプローチから生成したメッセージログの分析を提示する。
【０００５】
動的インストルメンテーションは、よく研究されている分野であり、そのようなインストルメンテーション能力を提供するいくつかのツールが存在する（［４］、［５］）。これらのツールは、通常、高いオーバヘッドを有し、ソースコードへのアクセスを必要とすることもある。我々は、軽いブラックボックスメカニズムを必要とするため、ここでは、ソースコードのいかなる修正も無く、内部でインストルメンテーションのターンオン及びオフを可能にする動的インストルメンテーションの基礎としてｉＰｒｏｂｅを使用する。
【０００６】
動的ボーダーライントレーシングに最も近い研究は、ＢｏｒｄｅｒＰａｔｒｏｌ［６］である。Eric Koskinen and John Jannotti. 2008. BorderPatrol: isolating events for black-box tracing. SIGOPS Oper. Syst. Rev. 42, 4(April2008), 191203.DOI=10.1145/1357010.1352613, http://doi.acm.Org/l0.1145/1357010.1352613.を参照されたい。
【０００７】
ＢｏｒｄｅｒＰａｔｒｏｌでは、ＡＰＩライブラリをトレーシングすることを検討している。これらのＡＰＩコールは、トランザクションフローを生成するためにブレッドクラム（breadcrumbs）として使用されることがある。しかしながら、我々のアプローチとは異なり、ＢｏｒｄｅｒＰａｔｒｏｌは、システムライブラリＡＰＩコールに注目しているが、いかなる動的インストルメンテーションファシリティを提供することはない。他の動的インストルメンテーションツールには、ＰＩＮ［４］、ｄｙｎｉｎｓｔ［７］、ＳｙｓｔｅｍＴａｐ［８］、ＤＴｒａｃｅ［５］等を含む。しかしながら、それらのツールは、超高オーバヘッドを有する、またはユーザ空間関数をキャプチャすることが不可能である。
【０００８】
したがって、分散システムのメッセージフローを監視する動的ボーダーライントレーシングが必要となる。
【発明の概要】
【０００９】
本発明は、分散システムにおいて、アプリケーションプログラムインタフェースＡＰＩレベルでアプリケーションフローをトレーシングする分散システムのコントローラに関する。
前記トレーシングは、
ホットパッチングのためのプレースホルダを有するオーバライディングライブラリを生成し、トランポリン及びホットパッチノーオペレーション（ＮＯＰ）をセットアップし、
アプリケーションの実行時における任意のステップにおいて、トリガオンされているインストルメンテーションで前記アプリケーションをパッチし、
オーバライドインストルメンテーション関数で、全てにプロセス名が添えられて共有ログファイルで保存されている、関連するコールパラメータ及び戻り値をキャプチャし、
ホットパッチングを終了し、
インストルメンテーション期間が終了すると、分析のために全てのログをプッシュし、
トランザクションログを種々のＡＰＩの境界から分析し、実行フローを再構成することを含む。
【００１０】
本発明の他の態様は、分散システムにおける動的インストルメンテーションをコンピュータで実行可能にするための命令が記録された記録媒体であって、
分散システムにおいて、アプリケーションプログラムインタフェースＡＰＩレベルでアプリケーションフローをトレーシングさせるための命令が記録され、
前記トレーシングは、
ホットパッチングのためのプレースホルダを有するオーバライディングライブラリを生成し、トランポリン及びホットパッチノーオペレーション（ＮＯＰ）をセットアップし、
アプリケーションの実行時における任意のステップにおいて、トリガオンされているインストルメンテーションで前記アプリケーションをパッチし、
オーバライドインストルメンテーション関数で、全てにプロセス名が添えられて共有ログファイルで保存されている、関連するコールパラメータ及び戻り値をキャプチャし、
ホットパッチングを終了し、
インストルメンテーション期間が終了すると、分析のために全てのログをプッシュし、
トランザクションログを種々のＡＰＩの境界から分析し、実行フローを再構成することを含む。
【００１１】
本発明のさらなる他の態様は、分散システムにおける動的インストルメンテーションを可能にするコンピュータで実行される方法であって、
分散システムにおいて、アプリケーションプログラムインタフェースＡＰＩレベルでアプリケーションフローをトレーシングし、
前記トレーシングは、
ホットパッチングのためのプレースホルダを有するオーバライディングライブラリを生成し、トランポリン及びホットパッチノーオペレーション（ＮＯＰ）をセットアップし、
アプリケーションの実行時における任意のステップにおいて、トリガオンされているインストルメンテーションで前記アプリケーションをパッチし、
オーバライドインストルメンテーション関数で、全てにプロセス名が添えられて共有ログファイルで保存されている、関連するコールパラメータ及び戻り値をキャプチャし、
ホットパッチングを終了し、
インストルメンテーション期間が終了すると、分析のために全てのログをプッシュし、
トランザクションログを種々のＡＰＩの境界から分析し、実行フローを再構成することを含む。
【００１２】
上述及び他の特徴、並びに利点は、本原理の実施形態の後述する詳細な説明を図面と併せて読めば、当業者にとって明らかになるであろう。
【図面の簡単な説明】
【００１３】
【図１】図１は、本発明の動的ボーダーライントレーシングのコンポーネントを示している。
【００１４】
【図２】図２は、ターゲットアプリケーションにおいて定義されたＡＰＩ関数を参照することでオーバライディングライブラリを生成することが必要なユーザを図示している。
【００１５】
【図３】図３は、本発明のオーバライディングラッパ関数及びホットパッチングの状態図である。
【００１６】
【図４】図４は、本発明の分析後のアーギュメント及び戻り値のキャプチャリングを示す図である。
【００１７】
【図５】図５は、分散システムのメッセージフローを監視する本発明の動的ボーダーライントレーシングを実行するコンピュータまたはコントローラの一例を示す図である。
【発明を実施するための形態】
【００１８】
本発明は、ＡＰＩレベル（アプリケーションの境界）において、トランザクションフローを監視し、トランザクションフローを推定及び監視するためにブラックボックスアプローチを用いる、動的ボーダーライントレーシングと呼ばれる新しいモニタリングソリューションを提供する。このソリューションは、トレーシングを動的にターンオン／オフすることを可能にする動的インストルメンテーションツール、ｉＰｒｏｂｅ［９］と統合されている。
【００１９】
本発明のソリューションは、２つの態様、（１）動的ボーダーラインユーザ空間トレーシングと、（２）分析とを含む。動的ボーダーラインユーザ空間トレーシングでは、ソリューションは、ミドルウェアのターゲットとされるＡＰＩ関数を、該関数と同一のシグネチャのラッパでオーバライドするために、ライブラリインターポジション技術（例えば、ＬＤ＿ＰＲＥＬＯＡＤ）を使用する。ラッパは、関数をインストルメントし、実行時間における出力をキャプチャすることを可能にする。加えて、ｉＰｒｏｂｅ［９］と呼ばれる、本出願人が先に提案した技術を修正することで、これを動的にキャプチャできる。分析では、当該ソリューションは、データ分析を我々のログに適用して、メッセージキューイングシステムのエンドツーエンドトレースを作成する。我々のツールは、種々のＡＰＩを通じて渡されるメッセージコンテンツ及び戻り値をキャプチャし、それらをユーザレベルトランザクションと一意にリンクさせる。
【００２０】
動的ボーダーライントレーシングをアプリケーションに適用するプロセスは、広義には図１に示す５つのステップに分割できる。
１．初期化及びセットアップ：このステップは、全てのインストルメンテーションを初期化し、セットアップする。開発者は、オーバライディングライブラリを生成し、トランポリン及びホットパッチＮＯＰをセットアップする必要がある。
２．ホットパッチ開始：アプリケーションの実行時における任意のステップを実行すると、該アプリケーションは、トリガオンされているインストルメンテーションでパッチできる。
３．インターセプト／オーバライド関数コールパラメータ及び戻り値：オーバライドインストルメンテーション関数は、関連するコールパラメータ及び戻り値をキャプチャし、それら全てをプロセス名と共に共有ログファイルに保存する。
４．ホットパッチ終了：インストルメンテーション期間が終了すると、本発明は、ホットパッチングを終了し、分析用に全てのログをプッシュできる。
５．トランザクションの分析及び相関付け：このステップは、トランザクションログを種々のＡＰＩの境界から分析し、実行フローを再構成する。
【００２１】
ステップ１、初期化及びセットアップ：我々のアプローチで用いる第１のステップは、ホットパッチングのためのプレースホルダを有するオーバライディングライブラリを生成することである。図２を参照されたい。これは、アプリケーションを実行しているときにシームレスなインストルメンテーションを可能にする。オーバライディング関数は、ターゲット関数と完全に同一のシグネチャを有するラッパ関数であり、これらの関数は、元の関数を呼び出し、当該プロセスでは実際のロジックを修正することなく、実関数に渡されているアーギュメント及び戻り値をキャプチャすることが可能である。オーバライディングターゲット関数におけるキートリック（Key trick）は、動的にリンクされたライブラリの共有ライブラリのレイジーリンク（lazy linking）メカニズムである。
【００２２】
Ｌｉｎｕｘ（登録商標）における一例として、コマンドＬＤ＿ＰＲＥＬＯＡＤは、任意の他のシンボルがリンクされる前に実行可能なターゲットのシンボルライブラリへ、ＬＤ＿ＰＲＥＬＯＡＤパスで定義された関数を事前にロードするよう動的リンカに指示する。これは、ライブラリに存在するシグネチャを有する任意のシンボルが呼び出される場合に、ＬＤ＿ＰＲＥＬＯＡＤパスに存在する関数が、同一のシグネチャを有する他のシンボルよりも優先することを保証する。この技術を使用することで、トランポリン関数（実際の関数を呼び出すために中継点として働く媒介関数）を容易に構成できる。これは、トランポリン関数のボディから同一のシンボル名を有する次の関数を呼び出すことによって行われる。
【００２３】
図３における状態１及び２は、積分値を返す、ターゲット関数ｆｏｏに関するトランポリン関数をどのように作成できるかを示している。ここで、トランポリン関数ｆｏｏ＿ｗｒａｐは、シンボルｆｏｏと同一のシグネチャ及び同一の名称を有し、オーバライディングライブラリに置かれる。我々は、オーバライディングライブラリから、ｆｏｏと同一名称を有する次のシンボルを呼び出す。同時に、ｆｏｏに渡される戻り値及びアーギュメント／パラメータを記録するためにロギング関数を使用する。
【００２４】
図３に示すように、状態３は、コールドパッチされたバイナリ（「ホットパッチング」の準備ができている）を示し、我々は、＜ＮＯＰ＞命令（これは、最も一般的なｘ８６  ３２ビット及び６４ビットアーキテクチャでは、ｌｅｎｇｔｈが２の命令９０である）を有するトランポリンにおけるロギング関数への呼出しを修正する。同時に、トランポリンにおけるログ関数の命令アドレス／オフセットをキャプチャし、それを「ＣｏｌｄＰａｔｃｈ  Ｌｉｓｔ」に保存する。
【００２５】
ステップ２のホットパッチ開始、ステップ３のインターセプト関数コールパラメータ及び戻り値、並びにステップ４のホットパッチ終了：ランタイム段階で、ロギング関数の呼出しから戻ってパッチするため、これらのオフセットを使用することで、インストルメンテーションを有効にする。インストルメンテーション期間が過ぎると、ロギング関数は＜ＮＯＰ＞命令から戻ってパッチすることができる。
【００２６】
トランポリンベースのインストルメンテーションにおけるオーバヘッドの大部分は、実際にロギングすること、およびＩ／Ｏオペレーションを実行することでもたらされる。ロギングのコストを償却するために最適化されたメカニズムでさえも、いまだにオーバヘッドを完全に除去しない。我々の技術では、インストルメンテーションのロギングの態様を動的に有効にすることが可能であり、同時にソースコードまたはバイナリでさえ必要とする修正が存在しない。
【００２７】
ステップ５のトランザクションの分析及び相関付け：図４は、トランザクションと一意にリンクできるメッセージ識別子をキャプチャ及び生成するために動的ボーダーライントレーシングをどのように使用できるかを示している。トランポリン関数は、他のサービスへ送信されるメッセージコンテンツをハッシュすることでメッセージＩＤを生成する。ほとんどのメッセージベースのシステムでは、同一のコンテンツがエンドサービスプロセスに転送され、これがメッセージＩＤを用いてメッセージを一意に識別することを可能にし、同様のアプローチは、システムのトランザクション全体を監視するために、戻り値に適用できる。
【００２８】
代替メカニズムは、ターゲットミドルウェアによって内部で使用されるメッセージＩＤをキャプチャし、それを識別子として用いることである。しかしながら、これはシステムの少しのドメイン知識を必要とするため、識別子は容易に見つからないことがある。
【００２９】
本発明は、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせによって実現される。好ましくは、本発明は、プロセッサ、データストレージシステム、揮発性及び不揮発性メモリおよび／またはストレージ素子、少なくとも１つの入力装置、並びに少なくとも１つの出力装置を備えるプログラム可能なコンピュータまたはコントローラによりコンピュータプログラムを実行することで実現される。さらなる詳細は、その開示の全てを取り込む、米国特許第8380557号で説明される。
【００３０】
一例として、本システムをサポートするコンピュータまたはコントローラについて、図５のブロック図を用いて説明する。本コンピュータまたはコントローラは、好ましくは、ＣＰＵバスに接続された、プロセッサ、ランダムアクセスメモリ（ＲＡＭ）、プログラムメモリ（好ましくは、フラッシュＲＯＭのような書き換え可能なリードオンリーメモリ（ＲＯＭ））及びインプット／アウトプット（ＩＮＰＵＴ／ＯＵＴＰＵＴ：Ｉ／Ｏ）コントローラを備える。本コンピュータまたはコントローラは、ＣＰＵバスによってハードディスクと接続されたハードドライブコントローラを備えていてもよい。ハードディスクは、本発明を実現するためのアプリケーションプログラムやデータを保存するために使用される。アプリケーションプログラムはＲＡＭやＲＯＭで保存されていてもよい。Ｉ／Ｏコントローラは、Ｉ／ＯバスによりＩ／Ｏインタフェースと接続される。Ｉ／Ｏインタフェースは、シリアルリンク、ローカルエリアネットワーク、無線リンク及びパラレルリンク等の通信リンクを通じて、アナログまたはデジタル形式でデータを送受信する。Ｉ／Ｏバスには、ディスプレイ、キーボード及びポインティングデバイス（マウス）が接続されていてもよい。また、Ｉ／Ｏインタフェース、ディスプレイ、キーボード及びポインティングデバイス用に、セパレートコネクション（セパレートバス）を使用してもよい。プログラム可能な処理システムは、事前にプログラムされていてもよく、他のソース（例えば、フロッピーディスク、ＣＤ−ＲＯＭ、あるいは他のコンピュータ）からプログラムをダウンロードすることでプログラム（または再プログラム）されてもよい。
【００３１】
コンピュータプログラムは、汎用または特別な目的を持つプログラム可能なコンピュータで読み取ることができる、機械で読み取り可能なストレージメディアまたは装置（例えば、プログラムメモリまたは磁気ディスク）に格納される。コンピュータプログラムは、ストレージメディアまたは装置から本明細書に記載された手順を実行するコンピュータで読み出される、該コンピュータの設定及び制御動作のためのものである。本発明のシステムには、本明細書に記載した機能を実行する、特定の及び事前に定義された方法でコンピュータに動作させるように構成されたコンピュータプログラムを含む、コンピュータで読み取り可能なストレージメディアも考慮される。
【００３２】
上述したように、以下は、本発明の動的ボーダーライントレーシングの有利な特徴の一部であることを理解できる。
低オーバヘッドのモニタリング。
ＬＤ＿ＰＲＥＬＯＡＤ［２］、またはＤＥＴＯＵＲＳ［３］等のライブラリ介在アプローチの利用。
ブラックボックスモニタリング。我々は、ＡＰＩシグネチャのみを知ればよく、いかなるソースコードも修正する必要がない。
インストルメンテーションがターンオンされないとき、またはインストルメントされないセグメントに影響がない（ゼロプローブ効果）。
容易な配備による独立したプラットフォーム（カーネル／特殊コンパイラ／ＶＭまたはランタイムインタフェース等の変更なし）。
インストルメンテーションのユーザ定義範囲。
軽く、トランスペアレントな記録メカニズム。
ランタイム時における適用。したがって、アプリケーションを再起動する必要が無い。
ソースコードの修正が不要、またはバイナリインジェクションが不要。
【００３３】
動的ボーダーライントレーシングがその種の第１のツールであり、分散システムをトレーシングするのに有益な見識を提供すると考えられている。特に、我々のアプローチの新規性は、ライブラリ介在技術及びホットトレーシング技術を新しい手法で組み合わせて、アプリケーションボーダーにおいてＡＰＩ関数をインストルメントするのに低オーバヘッド技術を提供することにある。
【００３４】
オーバライディング動的ライブラリ関数の利点は、ソースコードのいかなる修正もなく、それを適用できることである。しかしながら、欠点は、関数がオーバライドされると、インストルメンテーションをターンオフできないことである。動的インストルメンテーションは、インストルメンテーションに起因するオーバヘッドを許容できないため、ほとんどの製造レベルのソフトウェアにとって非常に望ましい特徴である。ここで提示する技術では、ライブラリ介在の利点と、ｉＰｒｏｂｅの新しく軽い動的インストルメンテーションの利点とを組み合わせる。同時に、両方の欠点を回避する。
【００３５】
上述した説明は、あらゆる点で説明的かつ例示的なものであり、制限的なものではないと理解されるべきであり、本明細書で開示する本発明の範囲は、詳細な説明から決定されるべきではなく、特許法で認められた最大限の広さに基づいて解釈される特許請求の範囲から決定されるべきである。本明細書で示し、説明した実施形態は、本原理に関する例示にすぎないこと、また当業者は、本発明の範囲及び主旨から逸脱することなく、様々な変更を実施してもよいと理解されるべきである。当業者は、本発明の範囲及び主旨から逸脱することなく、他の様々な特徴の組み合わせを実施できる。
【図１】
0006479844.tif 000002
【図２】
0006479844.tif 000003
【図３】
0006479844.tif 000004
【図４】
0006479844.tif 000005
【図５】
0006479844.tif 000006