JP6991204B2 - トレースデータの要約及び視覚化のためのシステム及び方法 - Google Patents
トレースデータの要約及び視覚化のためのシステム及び方法 Download PDFInfo
- Publication number
- JP6991204B2 JP6991204B2 JP2019518075A JP2019518075A JP6991204B2 JP 6991204 B2 JP6991204 B2 JP 6991204B2 JP 2019518075 A JP2019518075 A JP 2019518075A JP 2019518075 A JP2019518075 A JP 2019518075A JP 6991204 B2 JP6991204 B2 JP 6991204B2
- Authority
- JP
- Japan
- Prior art keywords
- trace
- event
- time
- stream
- level
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/904—Browsing; Visualisation therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/32—Monitoring with visual or acoustical indication of the functioning of the machine
- G06F11/323—Visualisation of programs or trace data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/34—Browsing; Visualisation therefor
- G06F16/345—Summarisation for human users
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/40—Data acquisition and logging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/81—Threshold
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
- Digital Computer Display Output (AREA)
- User Interface Of Digital Computer (AREA)
Description
[0001] 本願は、米国特許法第119条の下で、すべての目的のために参照により本明細書に援用される、「Systems and Methods for Summarization and Visualization of Trace Data」と題する2016年10月11日に出願された米国仮特許出願第62/406,518号(代理人整理番号第GHS-0100-P号)の優先権を主張する。
[0003] 本開示は、概して、1つ以上のコンピュータシステムの実行中に収集されるトレースデータ又はログデータを視覚化及び/又は分析するためのシステム及び方法に関し、より詳細には、そうした視覚化及び/又は分析を容易にするためにユーザインタフェース、データ要約技術、及び/又は基本的なファイル構造を提供することに関する。
[0005] 当該技術分野で既知のいくつかのデバッグ解決策は、ハードウェア、ファームウェア、及びソフトウェアの開発者が、バグ及び/又はエラーを発見し、修正し、そのコードを最適化及び/又は試験できるようにするさまざまな分析ツールを提供する。これらの分析ツールの1つのクラスは、多種多様のソースから生成できるログデータを考察する。概して、このログデータは、1つ以上のプロセッサ上で命令を実行している間に生成される。ログデータは、プロセッサ自体(例えば、プロセッサトレース)によって、オペレーティングシステムによって、ソフトウェア開発者により加えられる計装ログポイント、コンパイラによって加えられる計装、(例えばコード生成ジェネレータ等の)自動システムにより加えられる計装によって、又はコンピュータシステム内の任意の他の機構によって生成できる。論理アナライザ、システムの集合体、及びバリデーションスクリプト、試験インフラストラクチャ、物理センサ、又は他のソースからのログ等のログデータの他のソースは、システムにとって外部である場合がある。これらの異なるソースの任意の組合せにより生成されるデータは、本書を通して「トレースデータ」(及び/又は「トレースイベントのストリーム」)と呼ばれる。トレースデータの単一の要素は、「トレースイベント」又は単に「イベント」と呼ばれる。トレースイベントの「ストリーム」は、その用語がここで使用されるように、時間(前方に又は後方にのどちらか)又は他の実行の単位別に並べ替えられてよい複数のトレースイベントのシーケンスを指す。トレースイベントのストリームはサブストリームに分類又は割り当てられてよく、トレースイベントの部分集合はサブストリームの中に収集され、サブストリームを含む。従って、サブストリームも、トレースイベントのストリームと見なされる場合がある。トレースイベントは、多種多様な種類のデータを表す場合がある。例えば制限なく実行サイクル数、キャッシュミス数、移動距離等の実行単位の他の表現も考えられるが、一般的に言えば、トレースイベントはタイムスタンプを有する。また、トレースイベントは、概してデータの要素も含む。制限なく、トレースデータが表すデータの種類の例は、整数又は浮動小数点値、文字列、特定の関数が入れられた又は出た旨の表示(「関数入口/出口情報」)、アドレス値、スレッドステータス(実行中、ブロックされている等)、ヒープ上で割り振られた/解放されたメモリ、アドレスでの値、電力活用、電圧、移動距離、経過時間等を含む。
[0073] 特定の実施形態では、本発明の態様に係るシステム及び方法は、(1)プログラム実行がどのようにして特定のシナリオ又は状態を生じさせたのか、(2)試験用のプログラムを含むさまざまなプロセスの実行に時間がどのようにして及びどこで使われるのか、並びに/又は(3)試験中のプログラムが予想外に実行しているかどうかを判断するのを支援するために、コンピュータシステムの実行中に収集されるトレースデータの視覚的な時間ベースの概要を提供する。
1.異なるスレッド間のインタラクション及び関係性の視覚化
2.重要ではない情報の非表示/重要な情報の重視
3.ユーザがより詳しい検査のために興味のある領域を迅速に識別できるようにするやり方で大量のデータを表示すること
4.任意に大きいデータセットでの迅速な移動、及び最も関連性のある情報の重視による支援
5.同じデータセットで数ピコ秒から数十年までの時間スケールを取り扱うこと
6.任意の時間間隔で発生するイベントについて分析されたデータの効率的な記憶
7.任意のズームスケールでの何兆ものイベントを有するデータセットを迅速に表示すること
8.ツールがログデータを検査及び処理し続ける間にユーザがツールイベントを利用するためのサポート、及び
9.ツールがすべてのログデータを検査するのを待機する必要なく、ユーザが分析を始めることができるように最初に最も関連性のある情報を表示すること
[0080] 図2は、本発明の特定の実施形態に従ってトレースデータ視覚化の態様を実施する、「履歴ウィンドウ」と称するユーザインタフェースを示す。ボタン(200)は、(選択されたボタンに応じて、ユーザがグラフペイン(285)内でクリックし、ドラッグするとき、ユーザがパンする、時間範囲を選択する、又はズームすることを可能にしてよい)クリックアンドドラッグモードで使用される。ブックマークされた選択は、他の箇所に説明されるように、領域205により示される。領域210は、以下により詳細に説明されるアクティビティグラフを含む。項目215は星ボタンであり、星240に関係しており、その両方とも他の箇所により詳細に説明される。フィルタ220は、フィルタ説明文を含む。グラフペイン(285)は、ガイド(255)、TIMEMACHINE(登録商標)カーソル(270)、スレッドインタラクション矢印(250)、ナビゲーション矢印(例えば、280)、及び1つ以上の非表示のデバッグ時間インジケータ(275)をさらに含む。表示信号と呼ばれる一次データは、グラフペインを横切って水平に通る。図2は、プロセッサ(225)、プロセス(230及び235)、並びに呼出しスタックグラフ(245)を表す表示信号を含む。履歴ウィンドウは、グラフペイン(285)の下方に時間軸インジケータ(265)及びサムネイルペイン(260)を含む。これらのすべては、例示的な実施形態との関連で本書により詳細に説明される。
[0086] 特定の実施形態では、アクティビティグラフが、すべてのスレッド表示信号グラフを互いの上に積み重ねる(例えば、図8に示されるアクティビティグラフを参照すること)。アクティビティグラフの各色は、ユーザがシステム負荷に対する各スレッドの寄与を確かめることができるように異なるスレッドを表す。アクティビティグラフでスレッドに割り当てられる色は、グラフペイン表示がプロセッサ表示信号上でズームインされるときスレッドに使用される色と同じである。グレーの着色は、個々のプロセッサ活用が、別個の着色セクションを示すことを保証するほど十分に大きくない全スレッドの集合的なプロセッサ活用を示す。特定の実施形態では、これは、スレッドの実行が、1未満のピクセルに相当する垂直空間を要するときに発生する(実行単位時間軸ではなく、値軸を参照しているので、これはピクセル実行単位ではないことに留意されたい)。特定の実施形態は、それぞれが、グレー領域を示す代わりに、1未満のピクセルを表す、基本的なスレッドの色を混合してよい。特定の実施形態では、ユーザは、関連付けられたスレッド及びプロセス名を有するツールチップを見るために(グレー領域ではなく)着色した領域上をホバリングしてよく、ユーザは、グラフペイン(例えば、図9を参照すること)内の関連付けられたスレッドを見るために着色した領域をクリックしてよい。特定の実施形態では、アクティビティグラフは、それがグラフペインの一部でなくても、グラフペイン内のデータと時間で相互に関連付けられる。
[0095] デバッグ/視覚化ツールを使用する開発者は、多くの場合、目の前の使用事例に集中し、理解する能力と干渉する場合があるいくつかのクラスの重要ではない情報に遭遇する。本発明の態様によれば、この情報を削減するためのシステム、方法、及び技術は、情報のメイン表示に対してだけではなく、ツールが特定の実施形態で提供するいろいろな検索機能及び分析機能に対しても適用されてよい。
[0109] 本発明の態様によれば、ユーザがより詳しい検査のために興味のある領域を迅速に識別できる方法で大量のデータの表示を容易にするための方法、システム、及び技術が提供される。人間は大量(潜在的にテラバイト)の未処理トレース情報を容易に分析できず、しかもプログラムのきわめて詳細な性質を所与として、プログラムについての非常に詳細な情報を確かめることが多くの場合重要である。人間が、すべての情報を通して直線的に検索することは不可能であるため、ユーザが自分の注意を集中できる興味のある点をほのめかすことはきわめて重要である。この問題を解決するのを手助けするために、特定の実施形態は、上記に及び本書を通して概略されるように、ユーザに時間、空間、及び表示信号のドメインでデータの量を削減する数々の機能を提供する。
[0129] 本発明の態様が解決する問題のうちの1つは、任意の数の任意の離間されたイベントがあるデータセットを迅速に視覚化する方法に関与する。好ましくは、これらのイベントは、任意のズームレベルで可視でなければならず、好ましくは、これらのイベントは、秒の部分でレンダリングされなければならない。しかしながら、分析されたデータは、好ましくは入力されたデータよりも実質的に多い記憶空間を使用してはならない。
[0133] (a)ある期間の1つ以上のターゲットプロセッサによる1つ以上のコンピュータプログラムの実行からトレースイベントの集合を任意選択で受け取ることと、
[0134] (b)トレースイベントのシーケンスの複数のレベルの表現をサマリレベルに事前に計算することと、
[0135] (c)1つ以上のコンピュータ可読記憶媒体にサマリレベルを記憶することと、
[0136] (d)該トレースレベルの1つ以上のうちの選択された部分を表示する要求に応えて、サマリレベルからトレースイベントのシーケンスの事前に計算された表現の部分集合を取り出し、該部分集合を表示装置でレンダリングすること
であり、
[0137] (i)どのサマリレベルから読み取るかは、他の箇所で説明されているが、これはサマリレベルから読み取るために必要なデータの量が、事前に計算された表現で表されるトレースイベントの数に関係しているので、手法の重要な部分である。
(1)レンダリングエンジンが、任意のズームレベルで任意の量のデータを迅速にレンダリングする方法を決定すること、
(2)イベントが発生していない時間の領域についての情報を記憶しない方法を決定すること、
(3)ほとんどイベントを有さないサマリレベルを作成することを回避する方法を決定すること、
(4)任意に小さい期間又は大きい期間をカバーするサマリレベルが、データセットがそれらを必要とする場合に作成できるように、サマリレベルを動的に(オンザフライで)構築する方法を決定すること、
(5)すべてのデータを最初に走査する又はデータを通る複数のパスを行うことなくこれを行う方法を決定すること、
(6)追加データを処理し、表示し続けながら、トレースデータの部分集合を表示する方法を決定すること、及び
(7)レンダリングエンジンが任意の時間の範囲をレンダリングするために実行する必要のあるシーク数を最小限に抑えながら、これをすべて行う方法を決定すること。
[0142] レンダリングエンジンが信号を表示するために使用する基本的なデータは、HVSファイルに記憶され、ファイル信号と呼ばれる。表示信号とファイル信号との間に1対1の対応はない場合がある。例えば、レンダリングエンジンがスレッドのための呼出しスタックグラフを表示するために示す単一の表示信号は、複数のファイル信号から成る場合がある。
[0148] サマライザは、本文書中のここで及び他の箇所で(記録された最後のイベントで開始する)時間で後方に要約することに関連して説明されているが、同じ手法は(記録された最初のイベントで開始する)前方へ要約することについても役立つことに留意されたい。後方手法は最初に最も最近のデータを示すため、該手法は、プログラムがブレイクポイントにどのようにして到達したのかを判断するような状況でより役立つ傾向がある。しかしながら、前方に要約することも役立つ場合がある。例えば、システムがライブで実行中であり、要約エンジンに新しいトレースデータを送信中である場合、前方へ要約することは、ユーザが、起きていることの要約されたバージョンを、それが発生するにつれて表示できることを意味する。当業者は、後方へ要約するプロセスを理解すると前方へ要約することに容易に変換できる。
(1)関数呼出しについての情報を含むファイル信号。トレースイベントシグナチャは、固定幅ビットフィールドの形式をとる。個々のトレースイベントのシグナチャの値は、1に設定された単一ビットを有するビットフィールドである。設定されるビットは、関数の名前、アドレス、又は他の識別マーカー(例えば、それがどのファイル、ライブラリ、又は他のグルーピングの一部であるのか)のハッシュによって決定される。このハッシングプロセスは、他のファイル信号種類でもシグナチャのために使用され、これ以降、「単一ビットハッシュ」と呼ばれる。ビットフィールドの幅は、同じファイル信号種類の全シグナチャ間で共有される。しかしながら、特定の実施形態では、ビットフィールドの幅は、ファイル信号種類に応じて異なる場合がある。固定幅は、異なる入力が同じシグナチャを生じさせる場合があるが、見込みは固定幅ビットフィールドのサイズに基づくであろうことを意味する。64ビットフィールドの場合、それは64のうちの1であるであろう。実施態様の要件に応じて、該64ビットの例の場合、トレースイベントシグナチャの表示は、64エントリカラーテーブルを調べるためにビットセットを使用して、トレースイベントを表示するときにどの色を使用するのかを決定できる。これは、同じシグナチャサイズを有すること、迅速なシグナチャ生成、及び2つの異なるトレースイベントが異なるトレースイベントシグナチャ及び色を有する可能性を高めることの3つすべての目標を達成する。
(2)文字列イベントについての情報を含むファイル信号。トレースイベントシグナチャは、文字列のコンテンツから計算された単一のビットハッシュである。あるいは、特定の実施形態は、その要件に応じて、文字列テーブルの中でのその位置、又は文字列がターゲットシステムメモリに記憶される等、文字列のなんらかの他の特性に従って文字列のシグナチャを計算してよい。各実施態様の要件に応じて、トレースイベントシグナチャの表示は、64エントリカラーテーブルを調べるためにビットセットを使用して、トレースイベントを表示するときにどの色を使用するのかを決定できる。これは、同じシグナチャサイズを有すること、迅速なシグナチャ生成、及び2つの異なるトレースイベントが異なるトレースイベントシグナチャを有する可能性を高めるという3つすべてのトレースイベントシグナチャの目標を達成する。
(3)スレッドがどのプロセッサで実行したのかについての情報を含むファイル信号。シグナチャは、スレッドが実行したプロセッサの識別子の単一ビットハッシュである。実施態様の表示の要件に応じて、トレースイベントシグナチャの表示は、64エントリカラーテーブルを調べるためにビットセットを使用して、トレースイベントを表示するときにどの色を使用するのかを決定できる。これは、同じシグナチャサイズを有すること、迅速なシグナチャ生成、及び2つの異なるトレースイベントが異なるトレースイベントシグナチャを有する可能性を高めるという3つすべてのトレースイベントシグナチャの目標を達成する。
(4)プロセッサがどのスレッドを実行したのかについての情報を含むファイル信号。シグナチャは、プロセッサが実行したスレッドの識別子の単一ビットハッシュである。実施態様の要件に応じて、トレースイベントシグナチャの表示は、64エントリカラーテーブルを調べるためにビットセットを使用して、トレースイベントを表示するときにどの色を使用するのかを決定できる。これは、同じシグナチャサイズを有すること、迅速なシグナチャ生成、及び2つの異なるトレースイベントが異なるトレースイベントシグナチャを有する可能性を高めるという3つのすべてのトレースイベントシグナチャの目標を達成する。
(5)数値から成るファイル信号。特定の実施形態では、シグナチャは値自体の形をとる。これは、同じシグナチャサイズを有すること、迅速なシグナチャ生成、及び2つの異なるトレースイベントが異なるトレースイベントシグナチャを有する可能性を高めるという3つのすべてのトレースイベントシグナチャの目標を達成する。
(6)(例えば、プロセッサ上で実行中である、セマフォ上でブロックされている等)スレッドの実行状態の持続時間に関するイベントを含むファイル信号。特定の実施形態では、シグナチャは、スレッドが実行している間に経過した時計の目盛りの数のカウンタ(又はなんらかの別の実行の単位)の形をとる。特定の実施形態では、イベントの持続時間は、開始時刻から終了時刻を差し引くことによって決定できる。同じ手法は、シグナチャが、プロセッサがコードを実行していた間に経過したサイクル数を追跡する、プロセッサの実行状態にも適用できる。これは、同じシグナチャサイズを有すること(実施形態は、64ビット整数に時間を記憶できるであろう)、迅速なシグナチャ生成、及び2つの異なるトレースイベントが、異なるトレースイベントシグナチャを有する可能性を高めるという3つすべてのトレースイベントシグナチャの目的を達成する。
(7)(例えば、プロセッサで実行中である、セマフォ上でブロックされている等)スレッドの実行状態に関するイベントを含むファイル信号。特定の実施形態では、シグナチャは、(例えば、列挙値又は状態の文字列名前等)その実行状態を表す値の形をとる。同じ手法は、プロセッサの実行状態にも適用できる。これは、同じシグナチャサイズを有すること(実施形態は、32ビット整数に状態を記憶できるであろう)、迅速なシグナチャ生成(特定の実施形態は、実行状態を表すトレースイベントの値を記憶するであろう)、及び2つの異なるトレースイベントが、異なるトレースイベントシグナチャを有する可能性を高めるという3つすべてのトレースイベントシグナチャの目的を達成する。
(1)数値データのすべてのトレースイベントシグナチャの最小値及び最大値を採取し、サマリエントリシグナチャとしてこの最小値/最大値の対を出力すること。例えば、その値が50、0、25、15、75であるサマリエントリによって表されるトレースイベントのシーケンスの場合、トレースイベントシグナチャは値自体となり、サマリエントリシグナチャは0~75となるであろう。これは、トレースイベントシグナチャのサイズの2倍であることによってサマリエントリシグナチャの最初の2つの目標を達成する(最小値のための目標、又は最大値のための目標)。これは、それぞれを順番に検査し、現在の最小値及び最大値だけをメモリに保持することによって、メモリにすべてのトレースイベントを保持することなく迅速に生成できる。視覚的に異なるという第3の目標は、トレースイベントが異なる最小値/最大値を有するときに達成される。多くの種類のデータセットでは、高いレベルで最小値/最大値を確かめることは、焦点をあてる領域を決定するために非常に有用であり、これが要約手法の目的を達成する。他のデータセットには、平均、中央値、モード、標準偏差、又は他の数値分析手法を確かめることが役立つ場合がある。特定の実施形態は、サマリエントリシグナチャに最小値/最大値及び平均値(又は他の数値分析)を含み、実施態様の要件に応じて、同じデータプロット上にオーバレイされる該追加情報を表示する。
(2)一連の任意の適切な規則に従ってシグナチャ値をランク付けすること。例えば、例示的な実施態様は、最大ランク値及び/又は最小ランク値を識別してよく、次いで最大ランク値及び/又は最小ランク値は、新しいシグナチャを決定するために使用されてよい。これは少なくとも、いくつかのトレースイベントが他よりも高いレベルのビューから示すためにより重要である、データのシグナチャにとって有用である。例えば、特定の実施態様では、エラーメッセージは、情報メッセージよりも高くランク付けされるであろう警告メッセージよりも高くランク付けられるであろう。この例では、一方がエラーメッセージを表し、他方が警告を表す2つのトレースイベントシグナチャをマージすると、エラーメッセージを表す新しいサマリエントリシグナチャが生じるであろう(従って、サマリエントリシグナチャは、警告についての情報を含まない)。特定の実施形態では、これは、(a)(それ自体が固定サイズである)トレースイベントシグナチャと同じサイズであることによって固定サイズを有すること、(b)各トレースイベントシグナチャが処理されるので、現在の最善の一致だけをメモリに保持する必要があるため、計算するのが容易であること、(c)表示が、異なる重大度である少なくとも他のサマリエントリシグナチャと区別可能であること(例えば、特定の実施形態で、2つの異なるエラーが区別可能ではない場合があるが、エラーは警告から容易に区別可能である)によって、サマリエントリシグナチャの3つの目標を達成する。
(3)トレースイベントシグナチャ値をサマリエントリシグナチャにブレンドすること。これは少なくとも、色であるそれらのシグナチャにとって有用である。トレースイベントシグナチャからサマリエントリシグナチャにブレンドすることは、当業者が精通しているであろう混合手法のいずれかを使用できるであろう。特定の実施形態では、ブレンドすることは、実施態様の要件に応じて、異なる色空間、色表現、又は色を表すために使用されるフィールドのサイズへ変換できるであろう。特定の実施形態では、これは、以下ことによって、サマリエントリシグナチャの3つの目標を達成する。(a)サマリエントリシグナチャは色にすぎないため、シグナチャのサイズは、表されるイベントの数に関係しておらず、例えば24ビット値又は32ビット値で表すことができるであろう、(b)特定の実施形態が、当該技術分野で既知の手法を使用し、色をブレンドする問題を解決する。例えば、色は、赤、青、及び緑を表す3つの8ビット部分から構成された24ビット値で表すことができる。トレースイベントシグナチャを要約することは、トレースイベントシグナチャのそれぞれの各8ビット成分を別々に3つの64ビット蓄積値(赤の成分、青の成分、及び緑の成分にそれぞれ1つ)に合計することによって行われる。次いで、64ビット蓄積値は、サマリエントリによって表されるトレースイベントの数で除算することができ、各8ビットの混合された/平均された色成分は、24ビットのカラーサマリエントリシグナチャの適切な部分集合の中に記憶される。実際には、例外的に多数のイベントを除き、これは64ビットアキュムレータをオーバフローさせない。これは、各色が多くても255の値を有することができるためである。従って、64ビット値は、オーバフローする前に少なくとも(2^64)/256トレースイベント、つまり65536兆のトレースイベントである2^56を記憶できる。実施形態がより多くのイベントを表すことを必要とするならば、実施形態は、アキュムレータを第2の64ビット整数等に連鎖するであろう。最終的に、実施形態は、宇宙にある原子よりも多いトレースイベントを表すことができ、これは実際には、メモリにすべての又はほんのわずかなトレースイベントも保持する必要なく、制限がないことを意味する。(c)グラフ表現は、トレースイベント内の色が、2つのサマリエントリによって表される、トレースイベントの2つの集合の間で異なる傾向があるときに区別可能である。従って、例えば、1つのサマリの中の大部分のイベントが赤であり、異なるサマリエントリの大部分が青である場合、次いで各サマリで平均化される色は赤及び青となり、互いに区別可能となる。色を単に平均化することを超えたブレンドするための他の手法があることに留意されたい。例えば、特定の実施形態は、基本的なトレースイベントシグナチャでどの色が使用されるのかを決定し、次いでそれらの色だけをブレンドする。これは、所与の色が、サマリエントリによってカバーされるトレースイベントシグナチャに何回存在するのかに依存しない色のブレンドを生じさせる。
(4)各シグナチャの中でのトレースイベントの相対的な発生頻度に従ってトレースイベントシグナチャ値をブレンドすること。それは他の状況にも当てはまるが、これは、持続時間を有さないトレースイベントを表す色であるそれらのシグナチャにとって特に有用である。例えば、サマリエントリが110のトレースイベントを表し、そのうちの100が青のシグナチャを有し、10が赤のシグナチャを有する場合、結果として生じるサマリエントリシグナチャ色値は、10部分の青(10 parts blue)及び1部分の赤(1 part red)を有するであろう。これがどのようにしてサマリエントリシグナチャの目標を達成するのか、及びこの手法の例の実施形態は、上記に概略されている。
(5)各シグナチャの中でのトレースイベントの相対的な発生の持続時間に従ってシグナチャ値をブレンドすること。それは他の状況にも当てはまるが、これは、持続時間を有するトレースイベントを表す色であるそれらのシグナチャにとって特に有用である。例えば、その一方が緑であり、5秒間アクティブであったトレースイベントを有し、その一方が黄色であり、1秒間アクティブであったトレースイベントを有する2つのトレースイベントシグナチャがある場合、シグナチャがマージされるとき、結果として生じる色は、5部分の緑及び1部分の黄色を有するであろう。
(6)すべてのトレースイベントシグナチャのビット論理和を実行すること。それは他の状況にも当てはまるが、これは、単一のビットハッシュであるそれらのトレースイベントシグナチャにとって特に有用である。文字列トレースイベントのための例の実施形態は、他の箇所で説明されたように、文字列を、トレースイベントシグナチャとして使用される1つのビットハッシュにハッシュするであろう。サマリエントリによって表されるトレースイベントシグナチャは次いで互いにORされ、サマリエントリシグナチャを生じさせるであろう。次いで、そのサマリエントリシグナチャは、画面にレンダリングされるであろう。特定の実施形態は、サマリエントリシグナチャを、シグナチャ内の各ビットを色にマッピングし、次いで表示で使用するための最終的な色を生成するためにシグナチャ内で設定されたビットの色のすべてをブレンドすることによって決定される色として表示する。特定の実施形態では、これは、(a)(それ自体固定サイズである)トレースイベントシグナチャと同じサイズであることによって固定サイズを有すること、(b)各トレースイベントシグナチャが処理されるので、蓄積されたビット論理和結果だけをメモリに保持する必要があるため、計算するのが容易であること、(c)シグナチャがどのビットが設定されている、又は設定されていないのかを示すようにレンダリングされるとき、表示が、異なるビット論理和結果を有するトレースイベントを含む少なくとも他のサマリエントリシグナチャから区別可能であることによって、サマリエントリシグナチャの3つの目標を達成する。レンダリング手法については、以下を参照すること。
(7)基本的なシグナチャ値を合計すること。それは他の状況にも当てはまるが、これは、合計実行サイクル(又は他の実行の単位)及び他の蓄積値を記憶するそれらのシグナチャにとって特に有用である。特定の実施形態は、トレースイベントシグナチャの部分集合を合計するにすぎない場合がある。例えば、サイクルのスレッドの実行状態を表すトレースイベントをマージするとき、コードの実行を表すトレースイベントだけを合計できるであろう。これは、スレッドが、サマリエントリの期間中どれほど長く実行していたのかを表していたサマリエントリシグナチャを生じさせるであろう。スレッドが実行しなかった(例えば、スレッドが割り込まれた、セマフォ上でブロックされた、完了するためにシステムコールを待機していた等)ときは、含まれないであろう。スレッドがサマリエントリの期間中に実行しなかった場合、次いでサマリエントリシグナチャはゼロになるであろう。特定の実施形態では、これは、(a)(結果がオーバフローするのを妨げるために、サマリエントリシグナチャがそこから合計されるトレースイベントシグナチャよりも大きいサマリエントリシグナチャに記憶される場合がある)合計されたシグナチャ値を記憶することによって固定サイズを有すること、(b)各トレースイベントシグナチャが処理されるので、現在の合計だけをメモリに保持するする必要があるため、計算が容易であること、(c)表示が少なくとも、トレースイベントシグナチャの異なる集合の合計が異なるそれらの場合にだけ区別可能であることによってサマリエントリシグナチャの3つの目標を達成する。
(8)上記手法の組合せ。例えば、スレッドシグナチャが、プロセッサをハッシュすることによって作られる場合、スレッドは上位ビットで実行し、下位ビットは実行時間を記録し、上位ビットはビットORされ、下位ビットは合計されるであろう。あるいは、特定の実施形態は、サマリエントリシグナチャを、単一のシグナチャ値のそれらの手法のすべてを表す新しいサマリエントリシグナチャの中に生成するための複数の手法を記憶できる。例えば、サマリエントリシグナチャの第1の64ビットは、基本シグナチャ値の合計であり、第2の64ビットは、1つのビットハッシュのビット論理和であるだろう。他の手法が当業者に明らかになるであろう。
(1)データプロットの高い点が最大値であり、低い点が最小値である、最小値/最大値データを追跡するシグナチャをプロットすること。最小値と最大値との間の空間は、他のデータ値が該2つの点の間に存在し得ることを示すために充填できる。例えば平均等の追加の値がサマリエントリシグナチャに含まれる場合、追加の値も描かれる場合がある。
(2)実行時間(又は他の実行の単位)を(例えば、スレッド又はプロセッサのための)サマリ領域の中で太いバーとして追跡するシグナチャをレンダリングすること。バーは、サマリエントリの期間中に経過した総数に対する、実行中に経過した時間の量(又は他の実行の単位)に比例して記入される。列の中の多くのシグナチャが並んでレンダリングされるとき、これは、負荷グラフとしても知られる、実行に費やされた時間を示すグラフとして表示する。
(3)異なるプロセッサを表すために使用される色をブレンドすることによって、スレッドがどのプロセッサで実行していたのかを追跡するシグナチャの色をレンダリングすること。この手法では、各ビットセットは色を表し、複数のビットが設定されるとき、出力される色はそれらの色のブレンドである。さらに、特定の実施形態は、考えられる数のプロセッサに基づいて色の間の視距離を最大化するために色を特定のビットに割り当てる。従って、例えば4台のプロセッサを有するシステムでは、異なる色は容易に区別できる。プロセッサがどのスレッドを実行しているのかを追跡するシグナチャの場合、類似する手法をとることができる。
(4)実行された異なる関数を表すために使用される色をブレンドすることによって1ビットハッシュで関数呼出しを追跡するシグナチャの色をレンダリングすること。この手法では、各ビットセットは色を表し、複数のビットが設定されるとき、出力される色はそれらの色のブレンドである。
(5)サマリエントリに存在する文字列値に割り当てられた色をブレンドすることによって1ビットハッシュで文字列を追跡するシグナチャの色をレンダリングすること。この手法では、各ビットセットは色を表し、複数のビットが設定されるとき、出力される色はそれらの色のブレンドである。
(6)上記手法の組合せ。例えば、どのプロセッサが上位ビットで実行しているのか、及び下位ビットで実行されるサイクルの数を記録する場合、上部ビットは全体的な色を決定し、下位ビットはバーの太さを決定する。
(a)サマリレベルが未処理エントリ又は未処理参照エントリしか有していなかった(サマリエントリが生成されなかったことを意味する)場合、未処理ストリームからデータを読み取ることはより効率的であるだろうため、レベルを生成する必要はない。しかしながら、特定の実施形態は、レンダリングエンジンがデータを読み取るのと同時にサマリデータを生成するので、データの部分が要約され、特定のサマリレベルが必要とされない場合がある。しかしながら、後に、より高密度のデータが要約エンジンにレベルのためのサマリエントリを作成させる場合があり、これによりレベルはファイル内に作成される必要がある。この点で、サマリレベルは動的に作成することができ、そのデータのすべてはすでにサマリエントリを必要としないほど十分にまばらであると判断されているので、これにより書き込まれる第1のレコードは、未処理参照データである。
(b)特定の実施形態は、ウィンドウの中からサマリバケツをまだ押し出していないサマリレベルのためのファイルにデータを書き込むことを遅れさせる。これは、要約エンジンが、スライドウィンドウ内のサマリバケツの数が確かめられるまでサマリレベルを出力するかどうかを判断するのを遅らせることを可能にする。
(c)いろいろな最適化は、要約エンジンが、それが表示の効率的なレンダリングのために不必要であると判断するサマリレベルを出力するのを回避できるようにする。例えば、サマリレベルがそれの中にほとんどエントリを有していない場合、レンダリングエンジンは下方の次のサマリレベルからサマリエントリを読み取ることができるため、それは破棄できる。最高のサマリレベルが100のサマリエントリを含んでおり、倍率が8であると仮定する。次のサマリレベルは、多くても800サマリエントリを有するであろう。それらの800のサマリエントリは、より高いレベルの100のサマリエントリを作成するために使用された。レンダリングエンジンは、迅速に800のサマリエントリを読み取ることができるため、100エントリしか有していないより高いレベルを保持する必要はない。
[0184] 要約エンジンの実施形態がここで説明される。スライドウィンドウ及び複数のサマリレベルに焦点を当てるための説明を簡略化するために、本実施形態は、値を要約することだけをサポートし、他の箇所で詳細に説明されるいくつかの他の機能は含めない。Python言語で作成された要約エンジンの実施形態については、図37A~図37Dを参照すること。この説明は、図の左側に位置する行番号で図を参照する。図37A~図37Dの用語「分解能」は、その用語が本書全体で使用されるとき「サマリレベル」に相当する。以下の説明は、読者がそれらの図に説明される例の実施形態を理解するのを手助けするためのガイドとして作成されている。
[0186] 1.ファイル信号未処理ストリームにイベントを書き込む(行20)。
[0187] 2.最も低いサマリレベルにイベントのシグナチャを加えることによって開始する(行23)。各サマリレベルは、順にバケツの番号(行14)を有する。各サマリレベルは、それより下方のサマリレベルよりも大きい倍率(行12)であるバケツサイズを有する。バケツは、バケツが広がる時間範囲内に含まれるこれまで入力されたすべてのトレースイベントの表現を含む。バケツの例の定義については行52を参照すること。
[0188] 3.新しい点が現在のサマリレベルの最新のバケツの時間範囲内に入る場合、点をそのバケツにマージする(行81)。
[0189] 4.新しい点が現在のサマリレベルの最新のバケツ(行140)の時間範囲外になる場合、次の上方のサマリレベルに対してこのアルゴリズムを実行し、このサマリレベル(行87)での最後のバケツを通過する。それが完了したら、新しい点を含むバケツを加えることが、スライドウィンドウ内で許可されるバケツの数を超えることを可能にするかどうかを確かめる(行91及び行112)。可能にする場合、データとともにスライドウィンドウの中から落ちたすべてのバケツをファイルストリームに出力する。参照としてマークを付けられた連続的なバケツは、未処理データイベントに単一の参照として出力され(行125)、サマリとしてマークを付けられたバケツは、サマリエントリとして出力される(行129)。新しいイベントを保持するためのバケツを作成する(行94)。ウィンドウ内のイベントの総数がサマリ閾値未満である場合、あらゆるバケツがそれを超えると参照となるバケツを指定することによってウィンドウ内のすべてのバケツに参照としてマークをつける(行100)。
[0190] 5.要約エンジンのためのそれ以上の入力がなくなっても(行176)、各サマリレベルのスライドウィンドウ内のデータはまだ出力される。サマリレベルごとに、最低から最高へ、カレントバケツシグナチャは上方のレベルにマージされる(行32)。(このステップがない場合、上方のサマリレベルは、最も最近加えられた点で欠測データになるであろう。)次いで、サマリレベルの中のすべてのバケツは、上述されたサマリエントリを生成するのか、それとも参照エントリを生成するのかについての同じ規則を使用し、シフトアウトされる(行33及び行111)。
[0192] 要約プロセスの説明を簡略化するために、説明される例の多くは、値型データの単一ファイル信号を要約する。当業者は、本書の他の箇所で提供される情報を使用し、いろいろな種類の複数のファイル信号を処理するために要約アルゴリズムの変形を実装できるであろう。
a.倍率―サマリレベル間の時間倍率(この例では2に等しい)。
b.ウィンドウサイズ―スライドウィンドウに含まれるサマリバケツの数(この例では2に等しい)。
c.サマリ閾値―サマリが出力される前にウィンドウで必要とされるイベントの数。
d.ファイルページサイズ―未処理ストリーム及びサマリ出力ストリームに事前に割り振られる出力ファイル内の記憶装置の数。ここの場合のように、特定の実施形態は、未処理イベントストリーム及びサマリストリームに割り当てられた異なる事前割当てサイズを有する。
e.最も細かい表現可能時間―このデータセットが表すことができる時間の最小単位。
[0210] a.倍率―サマリレベル間の時間倍率(この例では2に等しい)。
[0211] b.ウィンドウサイズ―スライドウィンドウに含まれるサマリバケツの数(この例では2に等しい)。
[0212] c.サマリ閾値―サマリが出力される前にウィンドウで必要とされるイベントの数(この例では3に等しい)。
[0213] d.最も細かい表現可能時間―このデータセットが表すことができる時間の最小単位(この例では1秒に等しい)。
[0226] 本特許が説明する要約手法は、特定の実施形態で、(1)トレースイベントを迅速にレンダリングできる、(2)すべてのイベントを検査する必要がない、(3)あらゆるピクセル実行単位の中ですべてのイベントについてなんらかの情報が提示される、及び(4)結果として生じるファイルが入力データよりも実質的に大きくないようにトレースイベントを符号化することを可能にする。要約システムのさまざまな部分がないと起こるであろうことを示す以下の例は、これがなぜ当てはまるのかを明示するのに役立つ。
[0242] 従って、特定の実施形態での変換アルゴリズムは、少なくとも以下の3つの重要な保証を提供する。
[0247] トレースデータを検索することは、特定の実施形態において視覚化ツールの重要な機能である。テラバイトの情報に対処するときにこれらの検索を迅速に完了するために、例えば、ツールは、検索要求を完了するために走査されなければならないデータの量を削減するためのいくつかの手法を使用する。
[0254] 1.「検索」テキストフィールド内の文字列(5100)を示す、図51に表示されるようなテキスト文字列に対する一致を探す簡略なテキスト検索。
[0255] 2.図52でのように、特定の状態が真である、時間の範囲を見つけるために複数のテキスト検索を使用できる高度な検索。この図は、ディスパッチャプロセスの任意のスレッドがユーザコード(5200)を実行しており、一方ワーカプロセスのスレッドのいずれかがブロックされ(5210)、持続時間別に並べ替えられる(5220)すべての時間範囲を示す。
[0256] 3.図53に表示されるような特定の関数のブラウズ。これは、特定の関数のあらゆるインスタンスの検索を可能にし、それは、どの呼出しが一番長かったのか、どの呼出しが一番短かったのか、どのくらい多くの呼出しがあったのか、それらはどのくらい長くかかったのか、及び最長期間中どの関数が実際に実行していたのか等の他の情報を確かめるのを容易にする。
[0260] 上記の要約及び視覚化の手法は、おもにタイムスタンプを押され、時間軸で見られるトレースイベントを考察することを説明してきた。また、同じ視覚化の手法は、トレースイベントが、例えば、CPUサイクル、キャッシュヒット又はキャッシュミス、送信/受信されたネットワークパケット、行われたシステムコール、デバイストランザクションの数、メモリ使用量、又はソフトウェアプログラムの開発において興味深いプログラムの態様を説明する任意の他の測定の単位等の他の単位と関連付けられるときにも適用する。実施態様の要件に応じて、呼出しスタックグラフと関連付けられるとき、これは特に興味深い場合がある。呼出しスタックグラフは、ソフトウェア開発者が容易に理解できるソフトウェア開発者の状況(プログラムでの関数の名前)及び実行の単位がその状況にどのように関係するのかを示すときに非常に強力なツールであるため、これは特に有用である。例えば、キャッシュ分析に関係する技術で既知のいくつかのデバッグ手法がある。概して、これらの手法は、多数のキャッシュミスがある、コードの特定の「ホットスポット」を識別できる。これは、それらのホットスポットの回りでコードを慎重に構造化することによって特定の種類のキャッシュ性能を最適化するのを手助けするために有用である。しかしながら、多くのキャッシュミスを有する関数の特定の領域についての情報は、それらの関数が呼び出される状況を明らかにしない。これは必要ではないこともあるが、その追加の状況が非常に有用であるときもある。例えば、分析された1つのアプリケーションでは、memcpyは、キャッシュミスアクティビティのホットスポットであることが確かめられた。当初、アプリケーションの開発者は、これが、memcpyが十分に実装さておらず、memcpyライブラリ関数を開発した企業がそれを改善する必要があったことを暗示していたと考えた。しかしながら、memcpyが多くのキャッシュミスを生成していた点の回りの呼出しスタックグラフを見ることによって、アプリケーションが、それがmemcpyを呼び出す必要がまったくないように容易に修正できるであろうということは些末なことであった。
[0268] 本明細書で説明される特定の実施形態では、要約は、時間ベースのデータに対して実行されるとして説明されている。すなわち、そうした実施形態に係る要約は、時間の関数として変わるデータに関して実行される。しかしながら、概して、要約は、そのドメインが時間ベースではないデータに対して実行されてよい。例えば、要約は、そのドメインがメモリ割振りのサイズである、メモリ割振り時に収集されたトレースイベントデータに適用されてよい。さらに、例えば、そうしたデータは、コンピュータプログラムでの関数の実行のインスタンスすべてを、その関数の実行のそのインスタンスによって使用されるメモリの量とともに含んでよい。要約は、次いで時間の代わりにメモリ使用量に基づいてドメイン上でそのデータを処理するであろう。そうした要約の出力は、次いでその実行の単位がメモリ使用量である呼出しスタックグラフに使用することができ、呼出しスタックの関数の実行の各インスタンスの長さは、そのメモリ使用量に比例する。メモリ使用量に関する呼出しスタックグラフは、メモリ割振りが発生した順序で関数の実行の各インスタンスを表示するであろう。これは、開発者が、過剰なメモリ使用量の原因を迅速に見つけるのを手助けする。例えば、図30Bを参照すること。
[0275] 特定の実施形態は、後のとき及び/又は場所でロードし直すためのデバッグセッション-デバッグスナップショットと呼ばれるものを作成すること―に関係する情報のすべて又は部分を保存できる。デバッグセッションは、デバッグされているプログラム(「ターゲット」)の実行環境及びデバッガ自体の状態についての情報を含む。デバッグスナップショットは、つねに(存在する場合)ブックマーク及びそれらのブックマートと関連付けられたあらゆるメモとともに、ターゲットの状態の少なくとも一部を保存する。
(1)適切な場合、仮想対物理的なマッピングにより、すべてのRAM及びROMを潜在的に含む、ターゲットメモリ、
(2)ターゲットスレッドレジスタ状態、
(3)ターゲットで実行中のプログラム、
(4)ターゲットにロードされたプログラム、
(5)記号情報及びターゲット上でロードされる及び/又はターゲット上で実行するプログラムのデバッグメタデータを含むデバッグ情報、
(6)トレースイベント、
(7)その位置及びコンテンツを含むすべてのオープンウィンドウの状態、
(8)任意のコンソール出力、コマンド履歴、及びビュー位置履歴、
(9)現在選択されているスレッド、
(10)ブレイクポイント(ハードウェア及びソフトウェア)、
(11)見られている変数、
(12)検索結果、
(13)ブックマーク及びそれらのブックマークに対するメモ
(14)ソースコード、及び/又は
(15)デバッグセッション状態を再構築するために必要とされる場合がある任意の追加情報。
[0283] (1)時間シフトデバッグ:開発者は、そのターゲットに対するアクセスを維持することを必要とせずに、カレントタスクに対する作業を一時的に中断し、それを後で再開することを希望する。
[0284] (2)場所シフトデバッガ:開発者は、ハードウェアリソースが異なる目的に使用できるように、ハードウェアリソースを使用するのを停止することを希望する、及び/又は開発者は、異なる場所若しくはコンピュータに移動してその問題の分析を続行することを希望する。
[0285] (3)開発者シフトデバッガ:開発者は、別の開発者が問題を考察するための責任を負う必要があると考えるか、又は問題での別の開発者の手助けを有することを希望するかのどちらかである。
[0286] (4)バリデーション故障デバッグ:開発者及び/又は組織は、故障に遭遇した試験システムが、故障を追跡することにとって重要な情報を失うことなくバリデーションを実行し続けることを可能にすることを希望する。これは、ターゲットハードウェアの最適使用を可能にする。
[0289] 多くのコンピュータシステムが生成するトレースデータの量により、多くの場合、ソフトウェア開発者にとって役立つ方法で分析し、表示するのには多大な時間を要す場合がある。このため、特定の実施形態は、ソフトウェア開発者が、多くの場合、トレース全体が分析されるのを待機する必要なく、迅速にトレース内の最も関連性のある情報を見ることを可能にするために本明細書に説明される2つの手法を結合してよい。
[0291] (1)トレースの終わりで開始し、トレースデータを(要約することを使用する手法を含む)分析し、後方に進行し、
[0292] (2)残りのトレースデータが分析され続ける間、部分的に分析された(及び/又は要約された)トレースデータを見る。
[0294] (1)ソフトウェア開発者は、自分のトレースデータの考察をただちに開始できる。多くの場合、トレースデータのどの部分が検査されるのかに関わりなく、問題の原因を示す共通パターンが識別できる。
[0295] (2)多くの場合、問題の原因は、問題自体の直前に発生する。トレースが問題とともに終了する(又は問題が終わりに近い)とき、次いでトレースを後方に分析することは、問題の原因が、トレース全体が分析されるかなり前にソフトウェア開発者に可視となることを意味する。
[0297] 呼出しスタックは、多くの場合非常に深く、数千のエントリを含む場合がある。(例えば、本明細書の他の箇所に説明される時間、サイクル、キャッシュミス等―これは、要約されたデータを表示するために使用される「軸」と呼ばれることがある)なんらかの実行の単位に関して呼出しスタックグラフを示す表示にレンダリングされるとき、非常に深い呼出しスタックは、それらが非常に多くの空間を占有するため、見るのが困難である。例えば、特定の実施形態は、関数インスタンスごとに、呼出しスタックの各レベルで関数の名前を印刷する。有限数の関数名しか一時に画面上に収まり、依然として可読であることができないため、呼出しスタックグラフ全体をすぐに見ることは不可能である。呼出しスタックグラフ全体の一部を見るために表示をスクロールすることは可能であるが、それはいくつかの例では、プログラマに興味深い特定の種類のパターンを見ることを困難にする。これは、複数のスレッドの呼出しスタックグラフを同時に見ようと試みているときなおさら問題である。呼出しスタックグラフの回りでのズーミング及びパニングを可能にするビューを用いると、実行の単位のいくつかの点で、呼出しスタックは非常に浅くなり、他のときには非常に深くなるので、この問題はなおさらに悪化し、それらの深さがどれほど長く続くのかは、現在見られている実行の単位の範囲に基づいて変わる。
[0300] (1)呼出しスタックグラフを表示するためにどれほど多くの空間が使用されるのかを制御するための方法、
[0301] (2)呼出しスタックグラフのために確保された空間が、呼出しスタックグラフ全体を完全に表示するには十分ではないとき呼出しスタックグラフを表示する方法を決定するための方法、
[0302] (3)最も興味深い呼出しスタック情報を見続けるために、どの呼出しスタックグラフエントリを折り畳むのかを判断するための方法、及び
[0303] (4)折り畳まれた呼出しスタックグラフを表示する方法を決定するための方法。
[0309] (a)ユーザは、サイズを手動で設定すること。例えば、ユーザは、呼出しスタックグラフの表示のサイズを設定するボタン(例えば、図3、ボタン330)をクリックし、ドラッグする可能性がある。
[0310] (b)現在可視である最も深い読出しスタックを可能にするようにサイズを設定すること(つまり、現在可視の範囲内の任意の点での最も深い呼出しスタックが、サイズを決定するために使用される)。
[0311] (c)視覚装置で利用可能な空間の量に比してサイズを設定すること。例えば、
[0312] (i)ユーザが呼出しスタックグラフのより多くを見るためにスクロールする必要がないように、視覚装置で利用可能な空間全体にサイズを設定すること。及び
[0313] (ii)視覚装置で利用可能な空間の一部分にサイズを設定することであって、該一部分は、同時に見られている呼出しスタックグラフの数を超えるものである。特定の実施形態は、同時に同じ表示上にユーザが選択した数の異なるスレッドのための呼出しスタックグラフを表示するためにこの技術を使用できる。
[0316](a)呼出しスタックグラフが利用可能な空間に収まるまで最も興味深くないと判断される呼出しスタックレベルを折り畳むこと。この手法を用いると、どの呼出しスタックエントリを折り畳むのかを判断するための方法は、可視範囲全体を使用する。例えば、単一の関数呼出しが、呼出しスタックの最も浅い5つのレベルのそれぞれに及ぶ現在可視の範囲を所与として、次いでそれらの5つのレベルをそれぞれ折り畳むことができるであろう。
[0317] (b)利用可能な空間の中に収まらない呼出しスタックグラフの各部分の場合、該部分が利用可能な空間に収まるまで該部分の中で最も興味深くないと判断される呼出しスタックエントリのうちの1つ以上を折り畳むこと。この結果、呼出しスタックグラフが非常に深い多くの呼出しスタックエントリが折り畳まれ、一方より浅く、画面上に収まる呼出しスタックグラフの他の部分はその全体で示される。この手法を用いると、どの呼出しスタックエントリを折り畳むのかを判断するための方法は、可視範囲の部分集合を使用する。特定の実施形態では、折り畳まれた呼出しスタックエントリの数は、可視範囲の部分を区別するために折り畳まれたエントリの代わりに印刷される。また、特定の実施形態は、隣接する呼出しスタックエントリが、それらが異なる深さを表すので、必ずしも直接的に比較可能ではないことを示すために他のマーカーを表示してもよい。
[0321] (a)関連性のある可視範囲に及ぶ単一の関数呼出しがあるとき、呼出しスタックエントリを折り畳むこと。
[0322] (b)それらのエントリのすべての関数呼出しが、関連性のある可視範囲における1ピクセル実行単位に満たない持続時間を有する場合、呼出しスタックエントリのグループを折り畳むこと。
[0323] (c)呼出しスタックエントリが表すすべての関数呼出しがそれらと関連付けられたソースコードを有さない場合、呼出しスタックエントリを折り畳むこと。
[0324] (d)呼出しスタックエントリが表すすべての関数呼出しが、(例えば、それらがシステムライブラリ若しくはサードパーティライブラリであるため、又はソースコードを見ている開発者によって所有されるコードではないため)開発者にとって興味深くない場合、呼出しスタックエントリを折り畳むこと。
[0326] (a)単一の軸―ピクセルの中に含まれるように呼出しスタックエントリを縮小すること。
[0327] (b)複数の隣接する呼出しスタックエントリを単一の軸―ピクセルに収縮すること。
[0328] (c)呼出しスタックエントリが表すことについての(色によって収集できること以外の)情報を表示するために十分な広さがないときも呼出しスタックエントリが依然として可視で存在するように、呼出しスタックエントリを高さで少数の軸―ピクセルとなるように縮小すること。及び
[0329] (d)呼出しスタックエントリが何の機能を表すのかを見ることが依然として可能であるようにであるが、それが折り畳まれていない呼出しスタックレベルより少ない空間を使用するように、小さいフォントを使用することによって呼出しスタックエントリを縮小すること。
[0331] 要約は、その間に大量のトレースデータが分析され、視覚分析のために画面上に迅速に表示できる形式に変換されるプロセスである。また、特定の実施形態は、他の種類の分析のために要約されたデータを使用する。これらの他の種類の分析は、パターン又は特定のイベントを検索すること、及びイベントのプロパティに関する統計を生成することを含んでよいが、これに限定されるものではない。
[0333] (a)タイムスタンプが押されたトレースイベントの受け取られたストリームから複数のサマリエントリを生成すること。
[0334] (i)例えば図31C、図31D、及び図35に示されるように、トレースイベントは(本書の他の箇所に説明されるように、潜在的に特定の実施形態では、例えば未処理イベントを生成すること、トレースイベントシグナチャを構築すること等の動作を行う場合がある処理の後に)受け取られ、サマリエントリの集合に要約される。
[0335] (ii)本書の他の箇所に詳細に説明されるように、特定の実施形態は、これらのサマリエントリを使用して、表示されている領域の中に含まれるすべてのトレースイベントについての情報を最初に読み取る必要なく、表示装置に何を表示するのかを迅速に決定するためのレンダリングエンジンを含む。
[0336] (b)該サマリエントリのそれぞれは、複数のサマリレベルのうちの1つ以上と関連付けられる。
[0337] (i)例えば図31C、図35に示されるように、構築されるサマリエントリは、特定のサマリレベルに割り当てられる。
[0338] (ii)本書の他の箇所に詳細に説明されるように、特定の実施形態は、ピクセル実行単位によってカバーされる期間(又は他の適用可能な実行の単位)を決定し、次いで該期間以下のスパンを有するサマリエントリを含むサマリレベルから読み取るためのレンダリングエンジンを含む。
[0339] (c)該サマリエントリのそれぞれは、複数の該タイムスタンプが押されたイベントを表す。
[0340] (i)サマリエントリは、トレースイベントのすべての部分集合の表現である。
[0342] (a)サマリエントリは、時間範囲(又は他の実行の単位)と関連付けられる。
[0343] (i)図34及び図31Dに示されるように、サマリエントリは、それらが関連付けられる実行の単位についての情報を含む場合がある。特定の実施形態では、レンダリングエンジンはこの情報を使用して、画面上のどこにサマリエントリのグラフィック表現を表示するのかを決定し、表示装置に表示されるべきであるサマリエントリのサマリレベルを、実行の単位別で二分検索する。
[0344] (b)サマリエントリは、サイズを有するサマリエントリシグナチャを含み、該サマリエントリシグナチャのそれぞれは、該それぞれのサマリエントリによって表される該タイムスタンプが押されたトレースイベントの集合のためにトレースイベントシグナチャの集合をマージすることによって作成される。
[0345] (i)図34及び図31Dに示されるように、サマリエントリは、トレースイベントを表すサマリエントリシグナチャを含む。このサマリエントリシグナチャのトレースイベントシグナチャからの構築は、他の箇所に詳説されている。
[0346] (c)各トレースイベントシグナチャは、単一ビットハッシュを使用し、対応するタイムスタンプが押されたトレースイベントから生成される。
[0347] (i)トレースイベントシグナチャは、実施態様の要件に応じて多くの方法を使用し、生成できる。一例に、単一ビットハッシュは、トレースイベントの値から作成できる。これは、例えば文字列及び関数呼出し等の、データを表すトレースイベントにとって特に有用である。
[0348] (d)サマリエントリシグナチャは、サマリエントリの時間範囲の中で発生したトレースイベントの表現を含む。
[0349] (i)各特定の実施態様の要件に応じて、サマリエントリシグナチャは、サマリエントリが表している時間範囲(又は他の実行の単位)の中のすべてのトレースイベントのトレースイベントシグナチャから構築される。本書の他の箇所に説明されるように、要約の前に起こる処理ステップのために、いくつかのトレースイベントが除外されてよいことに留意されたい。図31A、3110を参照すること。
[0350] (ii)その実施態様の要件に応じて、特定の実施形態は、いろいろな表現手法を使用する。これらは、表されるイベントの数、又は値の若しくは基本的なトレースイベントのシグナチャの合計、倍数、平均、あるいは他の数学表現を含んでよいが、これに限定されるものではない。表現手法の追加の例は、本書の他の箇所に詳説されている。
[0351] (e)サマリエントリシグナチャは、該サマリエントリと関連付けられた時間範囲(又は他の実行の単位)の中で発生した該タイムスタンプが押されたトレースイベントのすべてよりも少ない表現を含む。
[0352] (i)実施態様の要件に応じて、サマリエントリシグナチャは、サマリエントリの時間範囲の中の特定のトレースイベントを含まない場合がある。例えば、特定の実施形態では、その時間範囲の中のトレースイベントの最小値から最大値を表すサマリエントリシグナチャは、例えば無限又は数ではない等の特別な値を除外してよい。これらの特別な値は、異常であり、表示するために興味深くないと見なされる場合がある。他の実施形態は、異常値だけを示すことを希望し、許容通常範囲からのすべての値を除外する場合がある。
[0353] (f)サマリエントリシグナチャは、該サマリエントリと関連付けられた時間範囲の中で発生したトレースイベント、及び該サマリエントリと関連付けられた時間範囲(又は他の実行の単位)の中で発生しなかった1つ以上のタイムスタンプが押されたトレースイベントの表現を含む。
[0354] (i)実施態様の要件に応じて、サマリイベントシグナチャは、サマリイベントと関連付けられた時間範囲の外の特定のトレースイベントを含んでよい。例えば、特定の実施形態では、隣接するサマリエントリに特定の値を含めることによって、特定の値がそうでなければ目立つよりも目立たせることが所望される場合がある。他の実施形態は、おそらく、特に注目に値する状態が現在アクティブであることを示すために、特定のトレースイベントを、サマリエントリの範囲のシグナチャ内で「長引く」ように見えさせることを希望する場合がある。
[0355] (g)サマリエントリシグナチャのサイズは、サマリエントリが表すトレースイベントの数とは無関係である。
[0356] (i)各実施態様の要件に応じて、特定の実施形態は、サイズが、サマリエントリシグナチャが表すトレースイベントの数によって決定されないサマリエントリシグナチャを使用する。その実施態様の要件に応じて、特定の実施形態は、サマリエントリごとに異なるサイズを使用してもよい。
[0357] (h)各サマリエントリシグナチャのサイズは、サマリレベルごとに固定される。
[0358] (i)それぞれの実施形態の要件に応じて、特定の実施形態は、所与のサマリレベルですべてのサマリエントリに固定サイズのサマリエントリシグナチャを使用する。固定サイズのシグナチャは、どれほど多くのトレースイベントがサマリエントリによって表されていても、サマリエントリはつねに同じサイズとなることを意味する。これは、特定の実施形態が、悪くてもトレースイベントの数とともにサイズが直線状であり、良くても対数関数である、抑制された空間の量で、潜在的には複数のレベルのサマリエントリを用いて、任意の数のトレースイベントを表すことを可能にする。
[0359] (ii)各実施態様の要件に応じて、特定の実施形態が、異なる要約ストリームに異なる固定サイズ、及び/又は同じトレースイベントストリームに異なるサマリレベルを使用してよいことに留意されたい。例えば、これは、テキストデータのためのサマリストリームが、数値データとは異なるサマリシグナチャサイズを使用できるようにする。また、これは、異なるサマリレベルが、より大きい数の基本的なトレースイベントとなる可能性があることについてのより詳細な情報をそれが表すことができるようにする、より大きなサマリシグナチャを有するためにより大きな時間の範囲をカバーするサマリエントリを有することを可能にする。
[0360] (i)サマリレベルの中のサマリエントリの時間範囲のそれぞれの期間のスパンは同じである。
[0361] (i)各実施態様の要件に応じて、特定の実施形態は、各サマリエントリが表す固定サイズ期間を使用する。サマリエントリは、異なる時間の範囲を表すが、各範囲の期間は、すべてのエントリに対して同じとなる。
[0362] (ii)各実施態様の要件に応じて、特定の実施形態が、異なるサマリストリームに異なる固定サイズ期間を、及び/又は同じトレースイベントストリームに異なるサマリレベルを使用してよいことに留意されたい。
[0363] (j)所与のサマリレベルで各サマリエントリによって表される時間の範囲は、重複していない。
[0364] (i)各実施態様の要件に応じて、特定の実施形態は、サマリエントリに重複していない時間の範囲を表させる。特定の実施態様は、サマリエントリが連続的であるという要件を有していない。これは、実施態様が、トレースイベントを含まない時間の範囲があるときにデータを記憶しないことを可能にする。
[0365] (k)所与のサマリレベルのサマリエントリによって表される期間は、隣接するサマリレベルの倍数である。
[0366] (i)各実施態様の要件に応じて、特定の実施形態は、トレースイベントのストリームを複数のサマリレベルに要約させる。各サマリレベルは、特定の期間を表すサマリエントリを有し、隣接するサマリレベルは、互いの倍数である期間を表すサマリエントリを有する。例えば、サマリレベル1は、サマリエントリごとに1秒を表し、(サマリレベル1及び3に隣接する)サマリレベル2は、サマリエントリごとに10秒を表し、(サマリレベル2に隣接する)サマリレベル3は、サマリエントリごとに100秒を表すことがあるであろう。
[0367] (ii)各実施態様の要件に応じて、特定の実施形態は、要約された異なるトレースストリームに異なる倍数を使用してよい。例えば、文字列を含むトレースストリームの倍数は5である場合があるであろうが、整数値を含むトレースイベントの倍数は10である場合があるであろう。
[0368] (l)所与のサマリレベルのサマリエントリによって表される期間は、次のサマリレベルよりも小さい8の係数である。
[0369] (i)各実施態様の要件に応じて、特定の実施形態は、隣接する各サマリレベル間の差に8の倍率を使用する。
[0370] (ii)8の倍率は、最適化される以下の領域を所与とすると、優れたトレードオフであると実験的に判断されている。
[0371] (A)生成されるサマリレベルの数:より大きい倍率は、より少ないサマリレベルを生じさせ、従ってサマリレベルにより少ない記憶空間を使用する。
[0372] (B)サマリレベル間の「距離」:レンダリングエンジンが、各ピクセル実行単位によってカバーされる期間が減少するため(例えば、以前の表示が、ピクセル実行単位ごとにサマリエントリ期間で、又はサマリエントリ期間をわずかに超えて使用していたときのズームレベルの非常にわずかな上昇のため)あるサマリレベルからより細かいサマリレベルに切り替えるとき、次いで(他の箇所に説明されるように)読み取られ、再要約される必要があるサマリエントリの数は、より大きな係数の場合大きくなり、より小さい係数の場合小さくなる。
[0373] (C)必要とされる計算は、それが2の累乗であるので容易である。コンピュータは、例えば単純なビットシフトを用いて、2の累乗に関係する乗算及び除算を容易に行うことができる傾向がある。本書の他の箇所に説明される演算の多くは、選ばれる倍率に基づいた乗算又は除算を必要とする。
[0374] (m)各サマリエントリシグナチャは、視覚的に異なるグラフィック表現と関連付けられる。
[0375] (i)その実施態様の要件に応じて、特定の実施形態は、サマリエントリシグナチャを画面に表示されるなにかに変換することによって表示装置上にグラフィック表現を表示する。シグナチャを視覚表示に変換するための手法は、本書の他の箇所でカバーされているが、重要な特性は、異なるイベントを表す任意の2つのシグナチャが、少なくとも同じように見える可能性が低い点である。
[0376] (ii)例えば、その実施態様の要件に応じて、特定の実施形態では、あるサマリエントリが、値が1~50に及ぶトレースイベントを表し、別のサマリエントリが、値が25~75に及ぶトレースイベントを表す場合、次いで1つのシグナチャ表現はその時間範囲内のトレースイベントの最小値及び最大値となり、グラフィック表現は、最小値から最大値へのデータプロットであるであろう。従って、これらの2つの表現は、これらの例の値について互いとは視覚的に異なるであろう。
[0377] (n)第1のサマリエントリシグナチャは、第2のサマリエントリシグナチャとは異なる。
[0378] (i)2つのサマリエントリシグナチャが、互いから異なることが理想的である。これは、実施態様の要件に依存する、選ばれたシグナチャ生成マージアルゴリズムに依存する。
[0379] (o)第1のサマリエントリシグナチャと関連付けられた第1の1つ以上のタイムスタンプが押されたトレースイベントが、第2のサマリエントリシグナチャと関連付けられた1つ以上のタイムスタンプが押されたトレースイベントとは異なる場合、第1のサマリエントリシグナチャは第2のサマリエントリシグナチャとは異なる。
[0380] (i)理想的には、2つのサマリイベントが、異なる値を有するトレースイベントを表すとき、次いでそのサマリイベントシグナチャも異なる。これは、それらのサマリイベントシグナチャのグラフィックレンダリングも異なるようにできる。この目標を達成するためにシグナチャ生成アルゴリズム及びマージアルゴリズムを構築することは、本書の他の箇所に説明される。
[0381] (p)タイムスタンプが押されたトレースイベントはそれぞれ、最初に、生成されたシグナチャを有し、それらのシグナチャは、サマリエントリのためにシグナチャを作成するためにマージされる。
[0382] (i)各実施態様の要件に応じて、特定の実施形態は、サマリエントリのためにサマリシグナチャを生成するために、トレースイベントのシグナチャをマージしてよい。シグナチャをマージする方法は、本書の他の箇所に説明されている。
(a)時間、
(b)サイクル、又は実行されるCPUクロックの数に関係する他の単位、
(c)実行された命令、
(d)キャッシュミス、キャッシュヒット、又は他のキャッシュに関係する統計、
(e)割り振られた(C/C++用語ではmallocされた)、解放された、現在確保されている、若しくは現在空いているメモリ、または所与の呼出しスタックレベルに割り振られたメモリの変化、
(f)グラフィックフレーム、
(g)ネットワークパケット、
(h)移動距離、
(i)割込み、
(j)消費電力、又は
(k)電圧。
[0388] (a)実行の単位は、割り振られるメモリである。これは、それらの中で実行される割振りのサイズを占めるとして関数を表示するであろう。
[0389] (b)実行の単位はメモリの変化である。これは、関数に遭遇するときと対照的に、関数が終了されるとき割り振られるメモリの差をとるとして関数を表示するであろう。従って、例えば、関数が、割り振られた1024バイトで入力され、関数が別の512バイトを割り振るが、終了前に256バイトを解放する場合、関数は、1280の「持続時間」を有するとして示されるであろう。
[0391] (a)負数を、通過した0実行単位として示すこと。
[0392] (b)負数を、経過した実行単位の絶対値として示すこと(従って、正の100単位及び負の100単位は、同じように表示するであろう)。各実施態様の要件に応じて、表示の部分を改変できる。例えば、これらのエントリは赤で表示できる。
[0393] (c)早期のエントリから実行の単位を差し引くこと。例えば、実行の単位が、所与の呼出しスタックレベルについてメモリの変化であり、関数Aが1024バイトを割り振り、Aによって呼び出された関数Bが256バイトを割り振るが、1024バイトを解放する場合、次いで関数Bは表示されず、関数Aは、割り振られた256バイトの「サイズ」を有するであろう。
[0394] (d)後のエントリから実行の単位を差し引くこと。
[0395] (e)実行の単位を、それが生じた場所から差し引くこと。他の実行の単位に帰すことができる実行の単位の場合、負の実行は、それが加えられた点から差し引くことができる。例として、割り振られたメモリの変化の実行単位を使用するとき、割振りはメモリ使用量の正の変化であり、フリー(free)はメモリの負の変化である。フリーは負であり、それが生じた場所がフリーの割振り点である。この実行の単位を用いて呼出しスタックグラフを表示するために使用されるときのこの手法の最終的な結果は、メモリがどこでスタックに割り振られたのかによって、ヒープにメモリの使用を示すことである。このデータが、プログラム終了時に収集される場合、これはプログラムでのメモリリークを示す。早期に収集される場合、これは、プログラムのどのセクションがメモリ使用を担当しているのかを示し、それは総メモリ使用量のパーセンテージ(又は、イベントトレースがプログラムの持続時間全体ではない場合、イベントトレースによって取り込まれるメモリ使用量の部分)を示す。例えば、関数Aはその関数インスタンスに2つの割振り、つまり1024バイトの割振り及び512バイトの割振りを有する。後に、関数Bは、1024バイトの割振りを解放し、いかなるメモリも割り振らず、関数Aからの512バイトの割振りは、絶対に解放されないであろう。結果として、関数Aは512バイトのサイズを有するとして表示され、関数Bはまったく示されないであろう。すべてのトレースイベントが記録されるわけではないため、この手法は、すべての割振りが既知でないときにも役に立つ。トレースストリームの対応する割振りを有さない「フリー」は無視できる。
[0396] (i)フリーを対応する割振り点に実際に結び付けるために、特定の実施形態はトレースイベントを後方に検索する。「フリー」に遭遇するとき、解放されたメモリのアドレスが記憶される。アドレスが解放されたアドレスの集合内にある割振りに遭遇するとき、割振りは、設定済みの解放されたアドレスから削除されるが、それ以外の場合無視される。アドレスが解放されたアドレスの集合にない割振りに遭遇するとき、割振りは、実行の単位として使用される。
(a)実行の単位と関連付けられたトレースイベントの受け取られたストリーム内のトレースイベントをサブストリームに割り当てることと、サブストリームごとに、
(i)該サブストリームから、要約されたトレースイベントの複数の集合を作成することと、
(ii)要約されたトレースイベントの各集合が、複数のサマリレベルのうちの1つと関連付けられ、複数のサマリエントリを表し、
(iii)各サマリエントリが時間範囲と関連付けられ、そのサマリエントリによって表されるイベントのためにトレースイベントシグナチャをマージするシグナチャを含む。
(a)種類、
(b)呼出しスタックレベル、
(c)スレッド、
(d)アドレス空間、又は
(e)コア。
[0405] 特定の実施形態は、呼出しスタック及び/又は関数入口/出口情報を以下によって要約し、レンダリングする。
[0406] (a)(特定の実施形態では、関数呼出し及び関数戻りのストリームである)スレッドの実行中に発生する呼出しスタックを表すトレースイベントストリームを採取し、呼出しスタックの各レベルを、トレースイベントの独自のストリームに分割する(及び/又は割り当てる)こと。特定の実施形態は、第1のトレースイベントを任意の呼出しスタックレベルでの始まりとして採取することによって呼出しスタックをレベルに分割し(及び/又は割り当て)、各呼出し又は戻りの結果、それぞれ、将来の呼出しスタックトレースイベントを帰す呼出しスタック深さをインクリメント又はデクリメントする。このプロセスを後方に行うとき、方向は前方の逆であり、従って、関数呼出しトレースイベントは呼出しスタックレベルカウンタをデクリメントするはずであり、関数戻りトレースイベントは、呼出しスタックレベルカウンタをインクリメントするはずであることに留意されたい。
[0407] (b)各呼出しスタックレベルあたりのトレースイベントストリームが、次いで要約される。
[0408] (c)呼出しスタックをレンダリングするために、レンダリングエンジンは、要約された各呼出しスタックレベルをとり、それを、画面上のその呼出しスタック深さの相対的な位置で、画面にレンダリングする。例えば、上部で最も浅いレベルを有する呼出しスタックを、画面の下方でより深いレベルをレンダリングする場合、次いで特定の実施形態は、最初に最も浅いレベルをレンダリングし、次いで画面上でそのすぐ下方の次により深いレベルをレンダリングし、同様にこれを繰り返す。
[0411] (a)longjmp、例外(例えば、C++の例外)、又は従来、介在する呼出しスタック深さのそれぞれを通して戻りコードを実行しない任意の数の呼出しスタック深さを排除する制御フローの他の変化。切れ目は、未知数の呼出しスタック深さがターゲットで排除されていることであり、従って後方に処理するとき、それがより深いレベルである可能性があること以外、次のトレースイベントをどの呼出しスタックレベルに帰すべきであるのかが明確でない。前方に処理するとき、同じ問題が存在するが、次の呼出しスタックレベルはより浅い可能性がある。
[0412] (b)割込み、例外ハンドラ、OSスケジューラ、又は現在のスレッドコンテキストを捨て、その点まで直接的に戻らないコード実行の他の方法をとる、又はそれらから戻ること(その同じコードは、潜在的にその同じ呼出しスタック深さで再び実行されてよいが、それは、その点に戻るためにそれの前にコードを実行する必要がある)。
[0413] (c)トレースストリーム自体が、すべての関数呼出し/関数戻りの情報を含んでいない。例えば、これは、トレースイベントストリームがなんらかのデータを見逃している場合(例えば、ハードウェアトレースシステムで生成されるデータが多すぎることにより生じるFIFOオーバフローにより、一部のデータが捨てられる/失われる等)に起こる場合がある。
[0416] (a)コンピュータシステムの実行によるトレースストリームの生成は、どのくらい多くのレベルが切れ目で加えられる及び/または削除されるのかを再構築するために必要な情報を含めるために修正される。例えば、longjmpにより生じる切れ目で、トレースイベントを後方に処理する特定の実施形態は、longjmpが発生する直前の点での呼出しスタックを記述するトレースイベントを出力するようにターゲットを修正する。前方にトレースイベントを処理する他の実施形態は、longjmpが発生した直後の点での呼出しスタックを記述するトレースイベントを出力するようにターゲットを修正する。特定の実施形態は、関数入口又は関数出口でスレッドあたりのカウンタをインクリメント又はデクリメントすることによって呼出しスタック深さを追跡する。これを解決する別の手法は、longjmpが削除した呼出しスタックのレベルの数を出力することである。さらに別の方法は、スレッドの実行中のさまざまな点で呼出しスタック深さを加えることである。
[0417] (b)加えられる及び/又は削除される呼出しスタックレベルの数は、コード実行での所与の点について静的に決定される。
[0418] (i)例えば、例外ハンドラが呼出しスタック内のすべてのエントリをつねに削除する場合、次いで前方に処理し、このトレースイベントに遭遇するとき、呼出しスタックレベルは最も浅いレベルにレベルをリセットできる。
[0419] (ii)別の例として、所与の例外ハンドラがつねに既知の深さで呼び出される場合、次いで後方に処理し、このトレースイベントに遭遇するとき、呼出しスタックレベルは、この既知の深さにセットできる。
[0420] (c)トレースイベントは、呼出しスタック深さを明確に決定することが可能になるまで、切れ目の点から走査することができ、次いでトレースイベントは、正しい呼出しスタックレベルに割り振ることができる。例えば、後方に要約し、例外ハンドラからの戻りに遭遇するとき、ハンドラを終了したときの深さが既知ではない場合がある。その時点の前のトレースイベントは、例外ハンドラの開始が決定され、次いで戻りの点での呼出しスタック深さが既知となるまで走査できる。
[0421] (d)コンピュータシステムの実行によるトレースストリームの生成は、現在の呼出しスタック深さについての周期的な表記を含むように修正される。例えば、特定の実施形態では、タイマが開始するたびに、それが現在の呼出しスタック深さをトレースイベントストリームに出力するように、タイマはセットアップされる。上記手法と結合され、これは、正しい呼出しスタックレベルを決定できる前に走査しなければならないトレースデータの量を抑制する。
[0422] (e)コンピュータシステムの実行によるトレースストリームの生成は、現在の呼出しスタックについての周期的な表記を含むように修正される。例えば、特定の実施形態では、タイマが開始するたびに、それが現在の呼出しスタックを含む情報の一部又はすべてをトレースイベントストリームに出力するように、タイマはセットアップされる。上記手法と結合され、これは、正しい呼出しスタックレベルを決定できる前に走査しなければならないトレースデータの量を抑制する。
[0423] (f)呼出しスタックの要約は、切れ目の点で終了され、新しい呼出しスタック要約ストリームが開始される。これをレンダリングするために、レンダリングエンジンは、複数の異なる呼出しスタック要約を、それらが次々出現する単一のコヒーレントなビューにつなぎ合わせるように修正される必要がある。
[0424] (g)呼出しスタックの要約は一時停止され、一時的な新しい要約が切れ目で始められる。切れ目点での深さが決定されるとき、次いで新規に要約されたデータが一次呼出しスタックにマージされ、一時的な要約されたデータは削除され、呼出しスタックの要約は一時停止を解除される(つまり、それは再開する)。レンダリングエンジンの特定の実施形態は、元の要約されたデータとつなぎ合わされた、一時的な要約されたデータを単一のコヒーレントビューに表示してよい。特定の実施形態は、データがマージされるとき、元を示すために切り替わってよい。
[0426] (a)呼出しスタックグラフにスレッドの実行履歴の視覚化を表示し、複数の関数呼出しが、表示装置上での1ピクセル実行単位により表される時間範囲で所与の呼出しスタックレベルの中で発生するとき、該ピクセル実行単位に第1の色を割り当て、該第1の色が、該複数の関数呼出しのそれぞれと関連付けられる。
[0427] (i)これを行う複数の手法がある。例えば、他の箇所に説明されるように、ピクセル実行単位の色は、関数の基本的な色のブレンドとなるであろう。しかしながら、色は、発生している関数呼出しの数の表示である場合もあるであろう(実施形態は、例えば10以下の場合緑、1000以下の場合青、及び1000を超える場合赤等のスケールを使用できるであろう、又は実施形態は、ピクセル実行単位の中での実行の単位の数に比してスケールを使用でき、これが、事実上、ピクセル実行単位あたりの呼出しの密度を示すであろう。別の手法は、異なる色を示すために、ピクセル実行単位の軸以外の軸を使用し、複数の色を使用することであろう。実施形態は、最高で3つの色を示すための空間を有する可能性があり、そのピクセルの中にあるあらゆる3つの関数の色を示すであろう。
[0428] (b)複数の関数呼び出しのそれぞれは、対応する色と関連付けられ、第1の色は、該第1の色が複数の関数の色のブレンドを含むという点で、該複数の関数呼出しのそれぞれと関連付けられる。
[0429] (i)これは、本書の他の箇所に説明される、どの色をレンダリングするのかを決定するために、ピクセル実行単位の中にある特定の関数に割り当てられる色を混合する手法である。
[0431] 本明細書の特定の図は、方法及びシステムを示すフローチャートである。これらのフローチャートの各ブロック、及びこれらのフローチャート内のブロックの組合せが、コンピュータプログラム命令によって実施されてよいことが理解される。これらのコンピュータプログラム命令は、マシンを作り出すためにコンピュータ又は他のプログラム可能装置にロードされてよく、これによりコンピュータ又は他のプログラム可能装置上で実行する命令は、フローチャートの1つ又は複数のブロックで指定される関数を実装するための構造を作成する。また、コンピュータ又は他のプログラム可能装置に特定の方法で機能するように命令できるこれらのコンピュータプログラム命令は、コンピュータ可読メモリに記憶されてよく、これによりコンピュータ可読メモリに記憶される命令は、フローチャートの1つ又は複数のブロックに指定される関数を実装する命令構造を含む製造品を作り出す。また、コンピュータプログラム命令は、一連の操作ステップをコンピュータ又は他のプログラム可能装置上で実行させて、コンピュータ又は他のプログラム可能装置上で実行する命令が、フローチャートの1つ又は複数のブロックで指定される関数を実装するためのステップを提供するようにコンピュータ実装プロセスを作り出すために、コンピュータ又は他のプログラム可能装置上にロードされてもよい。
Claims (39)
- タイムスタンプが押された複数のトレースイベントを備えるトレースデータを要約して、前記トレースイベントの視覚分析を容易にするためのコンピュータ実装方法であって、
前記タイムスタンプが押されたトレースイベントの受け取られたストリームから複数のサマリエントリを生成することであって、前記サマリエントリのそれぞれが、複数のサマリレベルのうちの1つ以上に関連付けられ、前記サマリエントリのそれぞれが前記複数のタイムスタンプが押されたトレースイベントを表し、前記サマリエントリのそれぞれが、サイズを有するサマリエントリシグナチャを備え、前記サマリエントリシグナチャのそれぞれが、前記各サマリエントリによって表される前記タイムスタンプが押されたトレースイベントの集合のためにトレースイベントシグナチャの集合をマージすることによって作成される、生成することを含む、方法。 - トレースイベントシグナチャの前記集合のそれぞれが、単一ビットハッシュを使用し、対応するタイムスタンプが押されたトレースイベントから生成される、請求項1に記載の方法。
- 前記各サマリエントリシグナチャが、前記サマリエントリシグナチャに関連付けられた前記サマリエントリに関連付けられた時間範囲内に発生した前記タイムスタンプが押されたトレースイベントの表現を備える、請求項1に記載の方法。
- 前記各サマリエントリシグナチャが、前記サマリエントリシグナチャに関連付けられた前記サマリエントリに関連付けられた時間範囲内に発生した前記タイムスタンプが押されたトレースイベントのすべてよりも少ない表現を備える、請求項1に記載の方法。
- 前記各サマリエントリシグナチャが、前記サマリエントリシグナチャに関連付けられた前記サマリエントリに関連付けられた時間範囲内に発生した前記タイムスタンプが押されたトレースイベントの、及び前記サマリエントリに関連付けられた前記時間範囲内に発生しなかった1つ以上のタイムスタンプが押されたトレースイベントの表現を備える、請求項1に記載の方法。
- 前記各サマリエントリシグナチャの前記サイズが、前記各サマリエントリが表す前記タイムスタンプが押されたトレースイベントの数と無関係である、請求項1に記載の方法。
- 前記各サマリエントリシグナチャの前記サイズが、前記複数のサマリレベルのそれぞれのために固定される、請求項1に記載の方法。
- 前記各サマリエントリシグナチャが、視覚的に異なるグラフィック表現と関連付けられる、請求項1に記載の方法。
- 前記グラフィック表現の1つ以上が、異なるスレッド間のインタラクションの視覚化を含む、請求項8に記載の方法。
- 前記サマリエントリシグナチャの第1が、前記サマリエントリシグナチャの第2とは異なる、請求項1に記載の方法。
- 前記サマリエントリシグナチャの第1と関連付けられた前記タイムスタンプが押されたトレースイベントのうちの第1の1つ以上が、前記サマリエントリシグナチャの第2と関連付けられたタイムスタンプが押されたトレースイベントの第2の1つ以上とは異なる場合、前記サマリエントリシグナチャの第1が、前記サマリエントリシグナチャの第2とは異なる、請求項1に記載の方法。
- タイムスタンプが押されたトレースイベントの前記受け取られたストリームの中の前記各トレースイベントが、1つ以上のサブストリームに割り当てられ、前記サブストリームのそれぞれのために前記生成するステップを実行する、請求項1に記載の方法。
- 前記サブストリームが、それらの種類に基づいてトレースイベントの前記ストリームから割り当てられる、請求項12に記載の方法。
- 前記サブストリームが、それらの呼出しスタックレベルに基づいてトレースイベントの前記ストリームから割り当てられる、請求項12に記載の方法。
- 前記サブストリームが、それらのスレッドに基づいてトレースイベントの前記ストリームから割り当てられる、請求項12に記載の方法。
- 前記サブストリームが、それらのアドレス空間に基づいてトレースイベントの前記ストリームから割り当てられる、請求項12に記載の方法。
- 前記サブストリームが、それらのコアに基づいてトレースイベントの前記ストリームから割り当てられる、請求項12に記載の方法。
- タイムスタンプが押されたトレースイベントの前記受け取られたストリームが、1つ以上のサブストリームに割り当てられ、前記サブストリームのそれぞれに前記生成するステップを実行する、請求項1に記載の方法。
- タイムスタンプが押されたトレースイベントの前記受け取られたストリームのグループが、1つ以上のサブストリームに割り当てられ、前記サブストリームのそれぞれのために前記生成するステップを実行する、請求項1に記載の方法。
- タイムスタンプが押された複数のトレースイベントを備えるトレースデータを要約して、前記トレースイベントの視覚分析を容易にするためのコンピュータ実装方法であって、
前記タイムスタンプが押されたトレースイベントの受け取られたストリームから複数のサマリエントリを生成することであって、前記タイムスタンプが押されたトレースイベントのそれぞれが、機械可読媒体から読み取られ、かつ、コンピュータ化された要約エンジンによって処理され、前記サマリエントリのそれぞれが、複数のサマリレベルのうちの1つ以上に関連付けられ、前記サマリエントリのそれぞれが前記複数のタイムスタンプを押されたトレースイベントを表す、生成することを含み、
前記サマリエントリのそれぞれが時間範囲に関連付けられ、そうした各サマリレベルの前記サマリエントリのそれぞれに関連付けられた前記時間範囲のそれぞれの期間が、隣接するサマリレベルの倍数である、方法。 - サマリレベルの中の前記時間範囲のそれぞれの期間が同一である、請求項20に記載の方法。
- 前記サマリレベルのそれぞれの前記各サマリエントリによって表される前記時間範囲が重複していない、請求項20に記載の方法。
- タイムスタンプが押されたトレースイベントの前記受け取られたストリームの中の前記各トレースイベントが、1つ以上のサブストリームに割り当てられ、前記サブストリームのそれぞれのために前記生成するステップを実行する、請求項20に記載の方法。
- タイムスタンプが押されたトレースイベントの前記受け取られたストリームが、1つ以上のサブストリームに割り当てられ、前記サブストリームのそれぞれに前記生成するステップを実行する、請求項20に記載の方法。
- タイムスタンプが押されたトレースイベントの前記受け取られたストリームのグループが、1つ以上のサブストリームに割り当てられ、前記サブストリームのそれぞれのために前記生成するステップを実行する、請求項20に記載の方法。
- 前記サブストリームが、それらの種類に基づいてトレースイベントの前記ストリームから割り当てられる、請求項23に記載の方法。
- 前記サブストリームが、それらの呼出しスタックレベルに基づいてトレースイベントの前記ストリームから割り当てられる、請求項23に記載の方法。
- 前記サブストリームが、それらのスレッドに基づいてトレースイベントの前記ストリームから割り当てられる、請求項23に記載の方法。
- 前記サブストリームが、それらのアドレス空間に基づいてトレースイベントの前記ストリームから割り当てられる、請求項23に記載の方法。
- 前記サブストリームが、それらのコアに基づいてトレースイベントの前記ストリームから割り当てられる、請求項23に記載の方法。
- 前記サブストリームが、それらのプロセスに基づいてトレースイベントの前記ストリームから割り当てられる、請求項23に記載の方法。
- 複数のトレースイベントを備えるトレースデータを要約して、前記トレースデータの視覚分析を容易にするためのコンピュータ実装方法であって、
実行の単位と関連付けられた前記トレースイベントの受け取られたストリームの中の前記トレースイベントの1つ以上を1つ以上のサブストリームに割り当てることであって、前記トレースイベントのそれぞれが、機械可読媒体から読み取られ、かつ、コンピュータ化された要約エンジンによって処理される、割り当てることと、
前記サブストリームごとに、
前記コンピュータ化された要約エンジンを使用して前記サブストリームから複数のサマリエントリを作成することであって、前記サマリエントリのそれぞれが、複数のサマリレベルの1つ以上に関連付けられ、前記サマリエントリのそれぞれが、複数の前記トレースイベントを表す、作成すること、を含み、
前記サマリエントリのそれぞれが時間範囲に関連付けられ、そうした各サマリレベルの前記サマリエントリのそれぞれに関連付けられた前記時間範囲のそれぞれの期間が、隣接するサマリレベルの倍数である、方法。 - 前記サブストリームが、それらのタイプに基づいてトレースイベントの前記ストリームから割り当てられる、請求項32に記載の方法。
- 前記サブストリームが、それらの呼出しスタックレベルに基づいてトレースイベントの前記ストリームから割り当てられる、請求項32に記載の方法。
- 前記サブストリームが、それらのスレッドに基づいてトレースイベントの前記ストリームから割り当てられる、請求項32に記載の方法。
- 前記サブストリームが、それらのコアに基づいてトレースイベントの前記ストリームから割り当てられる、請求項32に記載の方法。
- サマリレベルの中の前記時間範囲のそれぞれの期間が同一である、請求項32に記載の方法。
- 前記サマリレベルのそれぞれの前記各サマリエントリによって表される前記時間範囲が重複していない、請求項32に記載の方法。
- 前記サブストリームが、それらのプロセスに基づいてトレースイベントの前記ストリームから割り当てられる、請求項32に記載の方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662406518P | 2016-10-11 | 2016-10-11 | |
US62/406,518 | 2016-10-11 | ||
PCT/US2017/055960 WO2018071431A1 (en) | 2016-10-11 | 2017-10-10 | Systems and methods for summarization and visualization of trace data |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021118678A Division JP7051269B2 (ja) | 2016-10-11 | 2021-07-19 | トレースデータの要約及び視覚化のためのシステム及び方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2020503576A JP2020503576A (ja) | 2020-01-30 |
JP6991204B2 true JP6991204B2 (ja) | 2022-01-12 |
Family
ID=61828954
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019518075A Active JP6991204B2 (ja) | 2016-10-11 | 2017-10-10 | トレースデータの要約及び視覚化のためのシステム及び方法 |
JP2021118678A Active JP7051269B2 (ja) | 2016-10-11 | 2021-07-19 | トレースデータの要約及び視覚化のためのシステム及び方法 |
JP2022002370A Active JP7336545B2 (ja) | 2016-10-11 | 2022-01-11 | トレースデータの要約及び視覚化のためのシステム及び方法 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021118678A Active JP7051269B2 (ja) | 2016-10-11 | 2021-07-19 | トレースデータの要約及び視覚化のためのシステム及び方法 |
JP2022002370A Active JP7336545B2 (ja) | 2016-10-11 | 2022-01-11 | トレースデータの要約及び視覚化のためのシステム及び方法 |
Country Status (5)
Country | Link |
---|---|
US (6) | US10127139B2 (ja) |
EP (2) | EP3526667A4 (ja) |
JP (3) | JP6991204B2 (ja) |
CA (1) | CA3040129A1 (ja) |
WO (1) | WO2018071431A1 (ja) |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10180894B2 (en) * | 2017-06-13 | 2019-01-15 | Microsoft Technology Licensing, Llc | Identifying a stack frame responsible for resource usage |
US11556162B2 (en) * | 2018-03-16 | 2023-01-17 | Advanced Micro Devices, Inc. | Per-instruction energy debugging using instruction sampling hardware |
US10657031B2 (en) * | 2018-03-30 | 2020-05-19 | Oracle International Corporation | Scalable execution tracing for large program codebases |
US11237946B2 (en) * | 2018-05-03 | 2022-02-01 | Sap Se | Error finder tool |
US20190369849A1 (en) * | 2018-06-01 | 2019-12-05 | Apple Inc. | Visualizing Execution History With Shader Debuggers |
US10664378B2 (en) * | 2018-06-21 | 2020-05-26 | International Business Machines Corporation | Visualizing a user-centric stack frame graph |
US10761965B2 (en) * | 2018-09-28 | 2020-09-01 | Atlassian Pty Ltd. | Detecting method calls based on stack trace data |
US11281936B2 (en) * | 2018-12-31 | 2022-03-22 | Kofax, Inc. | Systems and methods for identifying processes for robotic automation and building models therefor |
US10956304B2 (en) * | 2019-01-25 | 2021-03-23 | Microsoft Technology Licensing, Llc | Dynamic diagnostic code instrumentation over a historic program execution |
US10877873B2 (en) | 2019-02-07 | 2020-12-29 | Microsoft Technology Licensing, Llc | Using historic execution data to visualize tracepoints |
US10977075B2 (en) * | 2019-04-10 | 2021-04-13 | Mentor Graphics Corporation | Performance profiling for a multithreaded processor |
US11126537B2 (en) * | 2019-05-02 | 2021-09-21 | Microsoft Technology Licensing, Llc | Coprocessor-based logging for time travel debugging |
USD922400S1 (en) * | 2019-06-13 | 2021-06-15 | Tata Consultancy Services Limited | Display screen with animated graphical user interface |
USD922401S1 (en) * | 2019-06-17 | 2021-06-15 | Tata Consultancy Services Limited | Display screen with animated graphical user interface |
USD921651S1 (en) * | 2019-06-17 | 2021-06-08 | Tata Consultancy Services Limited | Display screen with animated graphical user interface |
USD921650S1 (en) * | 2019-06-17 | 2021-06-08 | Tata Consultancy Services Limited | Display screen with animated graphical user interface |
US11461190B2 (en) * | 2019-09-03 | 2022-10-04 | EMC IP Holding Company, LLC | Filesystem operation bookmarking for any point in time replication |
US11321418B2 (en) | 2019-10-22 | 2022-05-03 | Optimizely, Inc. | Software development kit driven features and events |
US11086389B2 (en) * | 2019-10-29 | 2021-08-10 | Western Digital Technologies, Inc. | Method and system for visualizing sleep mode inner state processing |
US11030068B1 (en) | 2020-01-24 | 2021-06-08 | Splunk Inc. | Graphical user interface (GUI) for representing instrumented and uninstrumented objects in a microservices-based architecture |
US11645138B2 (en) | 2020-07-01 | 2023-05-09 | International Business Machines Corporation | Diagnosing and resolving technical issues |
US11360877B2 (en) * | 2020-09-14 | 2022-06-14 | International Business Machines Corporation | Forming microservices from monolithic applications |
US11200138B1 (en) * | 2020-10-19 | 2021-12-14 | International Business Machines Corporation | Policy-based request tracing using a computer |
US11379444B1 (en) * | 2021-01-28 | 2022-07-05 | International Business Machines Corporation | Data-analysis-based facility for adjusting trace fields of a database trace |
US20220342391A1 (en) * | 2021-04-27 | 2022-10-27 | Aida Engineering, Ltd. | Press machine and method of displaying operating state of press machine |
CN113190459A (zh) * | 2021-05-24 | 2021-07-30 | 曙光信息产业(北京)有限公司 | 程序运行检测方法、装置、异构电子设备及可读存储介质 |
WO2023080137A1 (ja) | 2021-11-04 | 2023-05-11 | 凸版印刷株式会社 | 標的物質の検出方法 |
US12028457B2 (en) * | 2022-02-18 | 2024-07-02 | RISC Zero, Inc. | Zero knowledge prover |
US11630624B1 (en) * | 2022-03-14 | 2023-04-18 | Ricoh Company, Ltd. | Concurrent event detection for distributed rasterization processing in a printing environment |
US11762754B1 (en) | 2022-03-28 | 2023-09-19 | Paypal, Inc. | Techniques for data log processing, retention, and storage |
CN115174684A (zh) * | 2022-07-05 | 2022-10-11 | 中孚信息股份有限公司 | 一种网络数据可视化平台、系统及方法 |
WO2024049570A1 (en) * | 2022-08-31 | 2024-03-07 | Microsoft Technology Licensing, Llc | Collection and representation of program call stacks |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003208333A (ja) | 2001-11-07 | 2003-07-25 | Matsushita Electric Ind Co Ltd | トレース情報検索装置およびその方法 |
JP2010517128A (ja) | 2007-01-23 | 2010-05-20 | インターナショナル・ビジネス・マシーンズ・コーポレーション | メモリと無関係なトレース・ハンドルの定義(処理環境のトレースのハンドルを定義する方法、システム及びコンピュータ・プログラム) |
JP2012248118A (ja) | 2011-05-30 | 2012-12-13 | Fujitsu Ltd | プログラム実行トレース情報集約プログラム、装置、及び方法 |
Family Cites Families (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5862381A (en) * | 1996-11-26 | 1999-01-19 | International Business Machines Corporation | Visualization tool for graphically displaying trace data |
US6751789B1 (en) * | 1997-12-12 | 2004-06-15 | International Business Machines Corporation | Method and system for periodic trace sampling for real-time generation of segments of call stack trees augmented with call stack position determination |
US6564339B1 (en) * | 1999-02-19 | 2003-05-13 | Texas Instruments Incorporated | Emulation suspension mode handling multiple stops and starts |
JP3838804B2 (ja) * | 1999-03-01 | 2006-10-25 | 富士通株式会社 | 解析装置および記録媒体 |
US6467052B1 (en) * | 1999-06-03 | 2002-10-15 | Microsoft Corporation | Method and apparatus for analyzing performance of data processing system |
US6988263B1 (en) | 2000-07-10 | 2006-01-17 | International Business Machines Corporation | Apparatus and method for cataloging symbolic data for use in performance analysis of computer programs |
US7197559B2 (en) * | 2001-05-09 | 2007-03-27 | Mercury Interactive Corporation | Transaction breakdown feature to facilitate analysis of end user performance of a server system |
US7647585B2 (en) * | 2003-04-28 | 2010-01-12 | Intel Corporation | Methods and apparatus to detect patterns in programs |
AU2003903447A0 (en) * | 2003-06-26 | 2003-07-17 | Canon Kabushiki Kaisha | Rendering successive frames in a graphic object system |
US7398333B2 (en) * | 2003-08-27 | 2008-07-08 | Rambus Inc. | Integrated circuit input/output interface with empirically determined delay matching |
CA2453728A1 (en) * | 2003-12-17 | 2005-06-17 | Ibm Canada Limited-Ibm Canada Limitee | A method and system for presenting event flows using sequence diagrams |
US20080319808A1 (en) * | 2004-02-17 | 2008-12-25 | Wofford Victoria A | Travel Monitoring |
US8102407B2 (en) | 2004-09-27 | 2012-01-24 | Qualcomm Mems Technologies, Inc. | Method and device for manipulating color in a display |
US7721268B2 (en) * | 2004-10-01 | 2010-05-18 | Microsoft Corporation | Method and system for a call stack capture |
US7243046B1 (en) * | 2005-05-09 | 2007-07-10 | Emc Corporation | System and method for preparing trace data for analysis |
CN101154291B (zh) * | 2006-09-29 | 2010-05-12 | 国际商业机器公司 | 图像数据压缩方法、图像显示方法及其相应装置 |
US8065319B2 (en) * | 2007-04-01 | 2011-11-22 | Nec Laboratories America, Inc. | Runtime semantic query optimization for event stream processing |
US20090113400A1 (en) * | 2007-10-24 | 2009-04-30 | Dan Pelleg | Device, System and method of Profiling Computer Programs |
US7877642B2 (en) * | 2008-10-22 | 2011-01-25 | International Business Machines Corporation | Automatic software fault diagnosis by exploiting application signatures |
JP2010108221A (ja) * | 2008-10-30 | 2010-05-13 | Kyocera Corp | データ処理装置、データ処理方法、およびプログラム |
US8595702B2 (en) * | 2009-03-13 | 2013-11-26 | Microsoft Corporation | Simultaneously displaying multiple call stacks in an interactive debugger |
CN102486731B (zh) * | 2009-11-30 | 2015-12-09 | 国际商业机器公司 | 增强软件的软件调用栈的可视化的方法、设备和系统 |
US8359584B2 (en) * | 2009-12-18 | 2013-01-22 | Microsoft Corporation | Debugging from a call graph |
JP5504960B2 (ja) * | 2010-02-22 | 2014-05-28 | 富士通株式会社 | シミュレーション装置及びシミュレーション方法 |
WO2011116987A1 (en) * | 2010-03-26 | 2011-09-29 | Software Diagnostics Technology Gmbh | A method for automatically generating a trace data set for a software system, a computer system, and a computer program product |
US8842119B2 (en) * | 2010-11-17 | 2014-09-23 | Hewlett-Packard Development Company, L.P. | Displaying system performance information |
US20140317603A1 (en) * | 2013-04-20 | 2014-10-23 | Concurix Corporation | Multiple Tracer Configurations Applied on a Function-by-Function Level |
US20140317604A1 (en) * | 2013-04-20 | 2014-10-23 | Concurix Corporation | Real Time Analysis of Tracer Summaries to Change Tracer Behavior |
US8966452B2 (en) * | 2013-04-20 | 2015-02-24 | Concurix Corporation | User interaction analysis of tracer data for configuring an application tracer |
EP2873983B1 (en) * | 2013-11-14 | 2016-11-02 | Accemic GmbH & Co. KG | Trace-data processing and profiling device |
US9602338B2 (en) * | 2013-12-20 | 2017-03-21 | Nec Corporation | System and method for network packet event characterization and analysis |
US9223679B1 (en) * | 2014-02-25 | 2015-12-29 | Emc Corporation | Lightweight, non-intrusive, and flexible apparatus to obtain system and process state |
US9535814B2 (en) * | 2014-03-31 | 2017-01-03 | Nec Corporation | Dynamic border line tracing for tracking message flows across distributed systems |
-
2017
- 2017-10-10 US US15/729,453 patent/US10127139B2/en active Active
- 2017-10-10 EP EP17860549.9A patent/EP3526667A4/en not_active Ceased
- 2017-10-10 EP EP23196013.9A patent/EP4280068A3/en active Pending
- 2017-10-10 JP JP2019518075A patent/JP6991204B2/ja active Active
- 2017-10-10 WO PCT/US2017/055960 patent/WO2018071431A1/en unknown
- 2017-10-10 CA CA3040129A patent/CA3040129A1/en active Pending
- 2017-10-10 US US15/729,473 patent/US10528451B2/en active Active
-
2018
- 2018-09-19 US US16/136,059 patent/US10303585B2/en active Active
- 2018-09-19 US US16/135,991 patent/US10657026B2/en active Active
-
2019
- 2019-12-18 US US16/719,152 patent/US11314625B2/en active Active
- 2019-12-18 US US16/719,054 patent/US10795803B2/en active Active
-
2021
- 2021-07-19 JP JP2021118678A patent/JP7051269B2/ja active Active
-
2022
- 2022-01-11 JP JP2022002370A patent/JP7336545B2/ja active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003208333A (ja) | 2001-11-07 | 2003-07-25 | Matsushita Electric Ind Co Ltd | トレース情報検索装置およびその方法 |
JP2010517128A (ja) | 2007-01-23 | 2010-05-20 | インターナショナル・ビジネス・マシーンズ・コーポレーション | メモリと無関係なトレース・ハンドルの定義(処理環境のトレースのハンドルを定義する方法、システム及びコンピュータ・プログラム) |
JP2012248118A (ja) | 2011-05-30 | 2012-12-13 | Fujitsu Ltd | プログラム実行トレース情報集約プログラム、装置、及び方法 |
Also Published As
Publication number | Publication date |
---|---|
JP7051269B2 (ja) | 2022-04-11 |
US20190179728A1 (en) | 2019-06-13 |
US10657026B2 (en) | 2020-05-19 |
US10303585B2 (en) | 2019-05-28 |
EP3526667A1 (en) | 2019-08-21 |
US20200167265A1 (en) | 2020-05-28 |
JP7336545B2 (ja) | 2023-08-31 |
JP2022043324A (ja) | 2022-03-15 |
US10127139B2 (en) | 2018-11-13 |
EP4280068A2 (en) | 2023-11-22 |
US20180129589A1 (en) | 2018-05-10 |
US10528451B2 (en) | 2020-01-07 |
US20200167266A1 (en) | 2020-05-28 |
JP2021180020A (ja) | 2021-11-18 |
EP4280068A3 (en) | 2024-03-06 |
WO2018071431A1 (en) | 2018-04-19 |
US20190108117A1 (en) | 2019-04-11 |
JP2020503576A (ja) | 2020-01-30 |
US11314625B2 (en) | 2022-04-26 |
US10795803B2 (en) | 2020-10-06 |
US20180101466A1 (en) | 2018-04-12 |
CA3040129A1 (en) | 2018-04-19 |
EP3526667A4 (en) | 2020-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7051269B2 (ja) | トレースデータの要約及び視覚化のためのシステム及び方法 | |
US10761687B2 (en) | User interface that facilitates node pinning for monitoring and analysis of performance in a computing environment | |
Chan et al. | An efficient format for nearly constant-time access to arbitrary time intervals in large trace files | |
US20180096499A1 (en) | Proactive monitoring tree providing pinned performance information associated with a selected node | |
US9348581B2 (en) | Systems, method and computer program products for tracking and viewing changes to information stored in a data structure | |
US20160330093A1 (en) | User interface that provides a proactive monitoring tree with state distribution ring | |
US8959442B2 (en) | Memory allocation visualization for unmanaged languages | |
US20140325058A1 (en) | Proactive monitoring tree with severity state sorting | |
US20130249917A1 (en) | Profile data visualization | |
Sigovan et al. | Visualizing Large‐scale Parallel Communication Traces Using a Particle Animation Technique | |
Jacobs et al. | Interactive visual debugging with UML | |
Schnorr et al. | Visualizing more performance data than what fits on your screen | |
US20100251211A1 (en) | Generating and using code-based diagrams | |
Dosimont et al. | A trace macroscopic description based on time aggregation | |
Seyster | Techniques for visualizing software execution | |
Salén | Visualization of dynamic memory in c++ applications | |
Wagner | Concepts for In-memory Event Tracing: Runtime Event Reduction with Hierarchical Memory Buffers | |
Pirzadeh et al. | Software Visualization Techniques for the Representation and Exploration of Execution Traces with a Focus on Program Comprehension Tasks | |
Wang | Visualizing Dynamic Network structure by interactively slicing data on time-dimension | |
Wagner | Concepts for In-memory Event Tracing | |
CA2603490A1 (en) | Systems, methods and computer program products for tracking and viewing changes to information stored in a data structure |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20190522 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20190522 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20200625 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20200703 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20201001 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20210319 |
|
C60 | Trial request (containing other claim documents, opposition documents) |
Free format text: JAPANESE INTERMEDIATE CODE: C60 Effective date: 20210719 |
|
C876 | Explanation why request for accelerated appeal examination is justified |
Free format text: JAPANESE INTERMEDIATE CODE: C876 Effective date: 20210719 |
|
C116 | Written invitation by the chief administrative judge to file amendments |
Free format text: JAPANESE INTERMEDIATE CODE: C116 Effective date: 20210728 |
|
C22 | Notice of designation (change) of administrative judge |
Free format text: JAPANESE INTERMEDIATE CODE: C22 Effective date: 20210728 |
|
C305 | Report on accelerated appeal examination |
Free format text: JAPANESE INTERMEDIATE CODE: C305 Effective date: 20210930 |
|
C22 | Notice of designation (change) of administrative judge |
Free format text: JAPANESE INTERMEDIATE CODE: C22 Effective date: 20211001 |
|
C22 | Notice of designation (change) of administrative judge |
Free format text: JAPANESE INTERMEDIATE CODE: C22 Effective date: 20211004 |
|
C23 | Notice of termination of proceedings |
Free format text: JAPANESE INTERMEDIATE CODE: C23 Effective date: 20211015 |
|
C03 | Trial/appeal decision taken |
Free format text: JAPANESE INTERMEDIATE CODE: C03 Effective date: 20211111 |
|
C30A | Notification sent |
Free format text: JAPANESE INTERMEDIATE CODE: C3012 Effective date: 20211111 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20211207 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6991204 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |