(57)【特許請求の範囲】
【請求項１】
データ処理装置を使用して、データを処理するステップと、
前記データ処理装置または前記処理の少なくとも１つの特徴を示すトレースパケットを生成するステップと、
所定の事象（predetermined event）の発生時において、タイムスタンプリクエストが保留（pending）になっていることを示すために、タイムスタンプリクエストフラグを設定するステップと、
後続のトレースパケットの生成時において、前記タイムスタンプリクエストフラグが、タイムスタンプリクエストが保留になっていることを示すかどうかをチェックするステップと、
前記タイムスタンプリクエストフラグが、タイムスタンプリクエストが保留になっていることを示す場合、前記後続のトレースパケットに対応するタイムスタンプを生成し、かつ、いかなるタイムスタンプリクエストも保留になっていないことを示すように、前記タイムスタンプリクエストフラグを設定するステップと、を含む、データ処理方法。
【請求項２】
前記処理は、前記データ処理装置の複数のプロセッサを使用して実行された複数のスレッドを含み、前記所定の事象は、前記複数のプロセッサのうちの１つから、前記複数のプロセッサのうちの別の１つへの、前記複数のスレッドのうちの１つの実行の伝送を含む、請求項１に記載のデータ処理方法。
【請求項３】
前記所定の事象は、例外の事象（exception event）を含む、請求項１に記載のデータ処理方法。
【請求項４】
前記所定の事象は、例外の取り扱いスレッド（exception handling thread）の実行の開始を含む、請求項１に記載のデータ処理方法。
【請求項５】
前記所定の事象は、例外の取り扱いスレッドの実行後の、前記処理への復帰を含む、請求項１に記載のデータ処理方法。
【請求項６】
前記所定の事象は、コンテクスト切り替え（context switch）を含む、請求項１に記載のデータ処理方法。
【請求項７】
前記所定の事象は、コンテクスト同期事象（context synchronization event）を含む、請求項１に記載のデータ処理方法。
【請求項８】
前記トレースパケットの生成を選択的に有効または無効にするステップをさらに含み、
前記少なくとも１つの所定の事象の前記発生時において、前記トレースパケットの前記生成が有効なっているか、または無効になっているかに関係なく、タイムスタンプリクエストが保留になっていることを示すように、前記タイムスタンプリクエストフラグが設定され、
前記トレースパケットの生成を再び有効にした後の、前記後続のトレースパケットの生成時において、かつ、前記タイムスタンプリクエストフラグが、タイムスタンプリクエストが保留になっていることを示す場合、前記タイムスタンプは、前記後続のトレースパケットに対応して生成され、いかなるタイムスタンプリクエストも保留になっていないことを示すように、前記タイムスタンプリクエストフラグが設定される、請求項１に記載のデータ処理方法。
【請求項９】
前記データ処理装置によって実行されるソフトウェアが、タイムスタンプリクエストが保留になっていることを示すように、前記タイムスタンプリクエストフラグを設定するように、前記所定の事象の発生時において、前記データ処理装置を制御する、請求項１に記載のデータ処理方法。
【請求項１０】
前記タイムスタンプリクエストフラグは、前記トレースパケットを生成するための、トレースモジュールのプログラム可能なレジスタ（programmable register）である、請求項１に記載のデータ処理方法。
【請求項１１】
前記所定の事象の発生時において、前記プログラム可能なレジスタに書き込む前記データ処理装置によって、タイムスタンプリクエストが保留になっていることを示すように、前記タイムスタンプリクエストフラグが設定される、請求項１０に記載のデータ処理方法。
【請求項１２】
前記後続のトレースパケットに対応する前記タイムスタンプは、第１のタイミングスキームのタイムスタンプ値を、第２のタイミングスキームのタイムスタンプ値に相関付けるための、タイムスタンプ相関トレースパケットに適用され、前記相関トレースパケットは、前記後続のトレースパケットの生成時において、トレースストリームに挿入される、請求項１に記載のデータ処理方法。
【請求項１３】
前記タイムスタンプは、前記後続のトレースパケットに付加される時間値である、請求項１に記載のデータ処理方法。
【請求項１４】
前記データ処理装置または前記処理の前記少なくとも１つの特徴は、
前記処理中に処理されたデータと、
前記処理中に生成されたデータと、
前記処理中に実行された命令と、
前記処理中にアクセスされたメモリアドレスと、
前記データ処理装置のレジスタに格納された値と、
ハードウェア事象の発生、のうちの少なくとも１つの特徴を含む、請求項１に記載のデータ処理方法。
【請求項１５】
前記後続のトレースパケットは、前記所定の事象の発生後に生成された次のトレースパケットである、請求項１に記載のデータ処理方法。
【請求項１６】
前記後続のトレースパケットは、前記所定の事象の発生後に生成された次のトレースパケット、および前記次のトレースパケットの後に生成された後のトレースパケットのうちの１つである、請求項１に記載のデータ処理方法。
【請求項１７】
データ処理装置であって、
データを処理するための処理回路と、
前記データ処理装置、または前記処理回路によって実行された前記処理のうちの少なくとも１つの特徴を示すトレースパケットを生成するためのトレーシング回路と、を備え、
前記処理回路および前記トレーシング回路のうちの少なくとも１つは、タイムスタンプリクエストが保留になっていることを示すように、タイムスタンプリクエストフラグを設定するために、所定の事象の発生に応答し、
前記トレーシング回路による後続の前記トレースパケットの生成時において、前記トレーシング回路は、前記タイムスタンプリクエストフラグが、タイムスタンプリクエストが保留になっていることを示すかどうかをチェックし、かつ、前記タイムスタンプリクエストフラグが、タイムスタンプリクエストが保留になっていることを示す場合、前記後続のトレースパケットに対応するタイムスタンプを生成し、いかなるタイムスタンプリクエストも保留になっていないことを示すように、前記タイムスタンプリクエストフラグを設定するように、構成されている、データ処理装置。
【請求項１８】
前記処理は、複数のスレッドを備え、前記処理回路は、前記複数のスレッドを実行するための複数のプロセッサを備え、前記所定の事象は、前記複数のプロセッサのうちの１つから、前記複数のプロセッサのうちの別の１つへの、前記複数のスレッドのうちの１つの実行の伝送を含む、請求項１７に記載のデータ処理装置。
【請求項１９】
前記所定の事象は、例外の事象を含む、請求項１７に記載のデータ処理装置。
【請求項２０】
前記所定の事象は、例外の取り扱いスレッドの実行の開始を含む、請求項１７に記載のデータ処理装置。
【請求項２１】
前記所定の事象は、例外の取り扱いスレッドの実行後に、前記データ処理の実行への復帰を含む、請求項１７に記載のデータ処理装置。
【請求項２２】
前記所定の事象は、コンテクスト切り替えを含む、請求項１７に記載のデータ処理装置。
【請求項２３】
前記所定の事象は、コンテクスト同期事象を含む、請求項１７に記載のデータ処理装置。
【請求項２４】
前記トレーシング回路は、前記トレースパケットの生成を選択的に有効または無効にするための論理を有し、
前記少なくとも１つの所定の事象の前記発生時において、前記処理回路および前記トレーシング回路のうちの前記少なくとも１つは、前記トレースパケットの前記生成が有効なっているか、または無効になっているかに関係なく、タイムスタンプリクエストが保留になっていることを示すように、前記タイムスタンプリクエストフラグを設定するように構成され、
前記トレースパケットの生成を再び有効にした後の、後続の前記トレースパケットの生成時において、かつ、前記タイムスタンプリクエストフラグが、タイムスタンプリクエストが保留になっていることを示す場合、前記トレーシング回路は、前記後続のトレースパケットに対応する前記タイムスタンプを生成し、いかなる前記タイムスタンプリクエストも保留になっていないことを示すように、前記タイムスタンプリクエストフラグを設定するように構成される、請求項１７に記載のデータ処理装置。
【請求項２５】
前記処理回路によって実行されたソフトウェアが、タイムスタンプリクエストが保留になっていることを示すように、前記タイムスタンプリクエストフラグを設定するために、前記所定の事象の発生時において、前記処理回路を制御するように構成される、請求項１７に記載のデータ処理装置。
【請求項２６】
前記トレーシング回路は、前記タイムスタンプリクエストフラグを格納するためにプログラム可能なレジスタを有する、請求項１７に記載のデータ処理装置。
【請求項２７】
前記処理回路は、前記所定の事象の前記発生時において、前記プログラム可能なレジスタに書き込むことにより、前記タイムスタンプリクエストが保留になっていることを示すように、前記タイムスタンプリクエストフラグを設定するために構成される、請求項２６に記載のデータ処理装置。
【請求項２８】
前記後続のトレースパケットに対応する前記タイムスタンプは、第１のタイミングスキームのタイムスタンプ値を、第２のタイミングスキームのタイムスタンプ値に相関付けるための、タイムスタンプ相関トレースパケットに適用され、前記トレーシング回路は、前記タイムスタンプ相関トレースパケットを、前記後続のトレースパケットと共に、トレースストリームに挿入するように構成される、請求項１７に記載のデータ処理装置。
【請求項２９】
前記タイムスタンプは、前記後続のトレースパケットに付加された時間値である、請求項１７に記載のデータ処理装置。
【請求項３０】
前記データ処理装置または前記処理の前記少なくとも１つの特徴は、
前記処理中に処理されたデータと、
前記処理中に生成されたデータと、
前記処理中に実行された命令と、
前記処理中にアクセスされたメモリアドレスと、
前記データ処理装置のレジスタに格納された値と、
ハードウェア事象の発生と、のうちの少なくとも１つの特徴を含む、請求項１７に記載のデータ処理装置。
【請求項３１】
前記後続のトレースパケットは、前記所定の事象の前記発生後に、前記トレーシング回路によって生成された次のトレースパケットである、請求項１７に記載のデータ処理装置。
【請求項３２】
前記後続のトレースパケットは、前記所定の事象の前記発生後に、前記トレーシング回路によって生成された前記次のトレースパケット、および前記次のトレースパケットの後で、前記トレーシング回路によって生成された後のトレースパケットのうちの１つである、請求項１７に記載のデータ処理装置。
【請求項３３】
データ処理装置においてトレーシング動作を実行するための、トレースモジュールであって、
前記データ処理装置または前記データ処理装置によって実行された処理の少なくとも１つの特徴を示すトレースパケットを生成するためのトレーシング回路と、
タイムスタンプリクエストが保留になっているかどうかを示すためのタイムスタンプリクエストフラグと、を備え、
前記トレーシング回路による後続の前記トレースパケットの生成時において、前記トレーシング回路は、前記タイムスタンプリクエストフラグが、タイムスタンプリクエストが保留になっていることを示すかどうかをチェックし、かつ、前記タイムスタンプリクエストフラグが、タイムスタンプリクエストが保留になっていることを示す場合、前記後続のトレースパケットに対応するタイムスタンプを生成し、いかなる前記タイムスタンプリクエストも保留になっていないことを示すように、前記タイムスタンプリクエストフラグを設定するために、構成されているトレースモジュール。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理の分野に関する。特に、本発明は、データ処理の特徴の追跡時における、タイムスタンプの生成に関する。
【背景技術】
【０００２】
処理装置によって実行された処理の特徴を示すトレース情報を生成するためのトレースモジュールが公知である。トレースパケットの生成時間を示すタイムスタンプを生成し、タイムスタンプをトレースストリームに定期的に挿入することが可能である。しかしながら、かかるタイムスタンプは、トレースストリーム内のトレースデータの容量を増大させるため、トレース帯域幅を使い切ってしまう。サイクル正確追跡（ｃｙｃｌｅ−ａｃｃｕｒａｔｅ  ｔｒａｃｅ）が有効になっている場合、より少ないタイムスタンプを生成可能であるが、この場合、より多くのトレースデータが必要になるため、再び、トレースバッファの容量およびトレースポートの帯域幅という点から、コストが高くなる可能性がある。一方で、タイムスタンプが少なすぎると、トレースパケットの生成順を、トレースストリームから推定することができなくなる可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本発明は、トレースストリームの間の相関関係を確立することを可能にしながら、トレースモジュールによって生成されるトレースパケットの数を低減するために、効率的にタイムスタンプを生成することを目的とする。
【課題を解決するための手段】
【０００４】
本技術は、
データ処理装置を使用して、データを処理するステップと、
前記データ処理装置または前記処理のうちの少なくとも１つの特徴を示すトレースパケットを生成するステップと、
所定の事象の発生時において、タイムスタンプリクエストが保留になっていることを示すために、タイムスタンプリクエストフラグを設定するステップと、
後続のトレースパケットの生成時において、タイムスタンプリクエストフラグが、タイムスタンプリクエストが保留になっていることを示すかどうかをチェックするステップと、
タイムスタンプリクエストフラグが、タイムスタンプリクエストが保留になっていることを示す場合、前記後続のトレースパケットに対応するタイムスタンプを生成し、かつ、いかなるタイムスタンプリクエストも保留になっていないことを示すように、タイムスタンプリクエストフラグを設定するステップと、を備えるデータ処理方法を提供する。
【０００５】
本技術において、データ処理装置または該装置によって実行されるデータ処理の少なくとも１つの特性を示すトレースパケットが生成される。所定の事象が発生する場合、タイムスタンプを生成する手順がトリガされる。しかしながら、本技術は、所定の事象の発生の際に、直ちにタイムスタンプを生成させることは望ましくないことを認識している。所定の事象が発生する場合、代わりに、タイムスタンプリクエストフラグが設定され、タイムスタンプリクエストが保留になっていることを示す。こうして、後続のトレースパケットの生成時において、タイムスタンプリクエストが保留になっているかどうかを確認するために、タイムスタンプリクエストフラグがチェックされ、タイムスタンプリクエストフラグが、タイムスタンプリクエストが保留になっていることを示す場合、後続のトレースパケットに対応するタイムスタンプが生成され、次いでいかなるタイムスタンプリクエストも保留になっていないことを示すように、タイムスタンプリクエストフラグが設定される。この技術は、新しいトレースパケットが生成されるポイントでも、タイムスタンプを生成させる。これは、生成された後続のトレースパケットと共に、タイムスタンプを出力できることを意味し、このため、いかなるトレースデータも生成されていない場合に、タイムスタンプパケットがトレースストリームに挿入されないようにする。タイムスタンプのみを含み、いかなるトレースデータも含まないパケットを生成しないようにすることにより、トレースストリームは、より少ないトレースパケットを含み、このため、例えばトレースバッファまたはトレース出力ポートのトレース帯域幅が、より効率的に使用される。さらに、本技術は、特定のトレースストリームに対してこれ以上トレースパケットが出力されない場合（例えば、監視されている処理が完了した場合）に、その時間中にいかなるタイムスタンプもストリームに挿入されないため、トレースリソースが節約されることを意味する。
【０００６】
タイムスタンプリクエストが保留になっていることを示すための、タイムスタンプリクエストフラグの設定をトリガする所定の事象として、多くの種類の事象を使用してもよい。所定の事象は、データ処理の間に発生する事象、または、データ処理には関係なく発生する外部事象であってもよい。
【０００７】
例えば、複数のスレッドを実行するための複数のプロセッサを含むシステムでは、所定の事象は、複数のプロセッサのうちの１つから複数のプロセッサの別の１つへの、複数のスレッドのうちの１つの実行の伝送を含んでもよい。かかるシステムにおいて、各プロセッサに対して個別のトレースストリームが生成されてもよい。対称的なマルチプロセッサシステムにおいて、スレッドが、異なるプロセッサ間を移動するように、特定のスレッドを、１つより多いプロセッサを使用して実行してもよい。かかるスレッドがトレースされる場合、（各トレースストリームが、異なるスレッドに対応するトレースデータの断片を含むように）これらのプロセッサに対応するトレースストリームが分離するという問題が生じる可能性がある。本技術を使用しなければ、異なるトレースストリーム内でトレースパケットが生成された時間を、互いに相関付けることはできない。この問題は、プロセッサの間でのスレッドの各伝送後に、タイムスタンプを発行させることで、解決される。次いで、各トレースパケットの生成時間に上限および下限を設定でき、特定のスレッドのトレースパケットが生成された順序を、生成されたタイムスタンプを使用して再構成することができる。
【０００８】
所定の事象は、さらに、例外の事象を含んでもよい。例外の事象は、データ処理への割り込みをトリガする事象である。従って、例外の事象が発生するインスタンスは、隣接するトレースパケットが、時間の非連続的なポイントで生成されたトレースストリーム内のポイントを示すことができる。例外の事象の発生時に、タイムスタンプリクエストをトリガすることで、後続のトレースパケットは、タイムスタンプと共に生成されるため、トレースストリーム内において例外のポイントを識別できる。
【０００９】
所定の事象は、さらに、例外の取り扱いスレッドの実行の開始を含んでもよく、かつ／または、例外の取り扱いスレッドの実行の後、前記処理への戻りを含んでもよい。これは、トレースモジュールが、プロセッサコア内の例外の事象をトリガする信号の可視性（ｖｉｓｉｂｉｌｉｔｙ）を有しないが、プロセッサによって実行される動作の可視性を有する場合に有用である可能性がある。例外の事象を監視するのではなく、例外（例えば、例外または割り込み取り扱いルーチンの第１の動作）の後、または通常の処理が戻った後に実行される動作は、割り込みを識別するように使用できる。これらのポイントにおけるタイムスタンプの生成をトリガすることは、トレースデータの相関付けに役立つ。
【００１０】
別の種類の所定の事象を、プロセッサが、命令を処理するための異なる状態に設定される場合に生じる、コンテクスト切り替え（ｓｗｉｔｃｈ）にすることができる。例えば、プロセッサは、各スレッドは、所与の状態で実行される動作のシーケンスで構成され、そうでない場合には、コンテクストと称される、実行するいくつかのスレッドを有してもよい。かかるコンテクスト切り替えのために、実行されるデータ処理に割り込みが生じる場合があり、このため、コンテクスト切り替えは、トレースストリーム内にタイムスタンプを記録するための有用なポイントとなり得る。
【００１１】
所定の事象は、さらに、コンテクスト同期事象を含んでもよい。コンテクスト切り替えが発生する場合、処理パイプラインは、コンテクスト切り替え後に、パイプラインにフェッチされる命令が、新しいコンテクストを使用して処理されるように、命令をフラッシュする必要がある場合がある。これにより、異なる動作が、コンテクスト切り替えの前に処理するのではなく、コンテクスト切り替えの後で処理される場合がある。従って、コンテクスト同期事象を、処理の割り込みの指標にすることができるため、このポイントでタイムスタンプをリクエストすることが有用である。いくつかの種類のトレースモジュールでは、コンテクスト切り替えは、トレースモジュールに対しては可視的でない場合のあるコンテクストレジスタ値を監視することにより識別できる可能性があるが、コンテクスト同期事象は、命令によってトリガできるため、コンテクスト同期事象は、コンテクスト切り替え自体よりも容易に識別できる。例外の取り扱いスレッドの開始、および例外の取り扱い後の前記処理への復帰も、コンテクスト同期事象であってもよい。
【００１２】
所定の事象の上記の例は、１つ以上の異なる種類の所定の事象のいずれかが発生する場合に、タイムスタンプリクエストフラグが設定されるように、タイムスタンプフラグを個別に、または組み合わせてトリガするために使用できる可能性があることが理解されよう。
【００１３】
本技術は、前記トレースパケットの生成を選択的に有効または無効にするステップをさらに含んでもよく、
前記少なくとも１つの所定の事象の前記発生時において、前記トレースパケットの前記生成が有効または無効になっているかどうかに関係なく、タイムスタンプリクエストが保留になっていることを示すように、前記タイムスタンプリクエストフラグが設定され、
前記トレースパケットの前記生成を再び有効にした後の、後続のトレースパケットの生成時において、かつ、前記タイムスタンプリクエストフラグが、タイムスタンプリクエストが保留になっていることを示す場合、前記タイムスタンプは、後続のトレースパケットに対応して生成され、いかなるタイムスタンプリクエストも保留になっていないことを示すように、前記タイムスタンプリクエストフラグが設定される。
【００１４】
プロセッサの動作を示すトレース情報を生成するためのトレースモジュールは、常に有効になっていなくてもよい。例えば、その動作が公知であるデータ処理が実行される場合、または、トレース帯域幅において節約することが望ましい場合、トレースモジュールは、トレースリソースを節約するために無効にすることができる。従って、トレースモジュールは、トレースパケットの生成を有効または無効にするための論理を有してもよい。本技術は、トレースパケットの生成が無効になっており、後で、データ処理中に再び有効になる場合に、トレースストリームが、トレースパケットの生成が無効になる前ではなく、トレースパケットの生成の再有効化の後で、異なるプロセスを監視してもよいことが可能であることを、認識する。この場合、トレースパケットの生成の再有効化の後で、タイムスタンプを含むことが有用である。従って、トレースパケットの生成が無効になっているが、本技術は、少なくとも１つの所定の事象が生じたかどうかの監視を継続し、かかる事象が生じている場合には、トレースパケットの生成が有効になっているかまたは無効になっているかに関係なく、保留のタイムスタンプリクエストを示すために、タイムスタンプリクエストフラグが設定される。トレースパケットの生成を再び有効にした後で、後続のトレースパケットが生成される場合、タイムスタンプリクエストフラグが、タイムスタンプリクエストが保留になっていることを示す場合に、タイムスタンプが生成される。これにより、トレースパケットの生成の無効化の前後で生成されたトレースパケットの生成の順番の再構成が可能になる。
【００１５】
本技術では、データ処理装置によって実行されるソフトウェアは、タイムスタンプリクエストが保留になっていることを示すように、タイムスタンプリクエストフラグを設定するために、所定の事象の発生時において、データ処理装置を制御してもよい。
【００１６】
本技術は、全てのトレースモジュールが、データ処理装置によって実行される動作の可視性を有するわけではないことを理解しており、そのため、トレースモジュールは、データ処理装置が所定の事象に遭遇するインスタンスを認識していない可能性がある。例えば、メモリマップされた計装トレースマクロセル（ＩＴＭ）は、処理装置によるデータ出力のいくらかの可視性を有するが、処理装置によって実行された処理の可視性は有しない。かかるトレースモジュールにおいて、タイムスタンプリクエストが保留になっていることを示すタイムスタンプリクエストフラグを設定することにより、所定の事象の発生に応答するために、処理装置を制御するように、ソフトウェアを構成することは有用である。ソフトウェアは、例えば、所定の事象の発生時において、フラグを設定できる処理装置のオペレーティングシステムのカーネルであってもよい。
【００１７】
タイムスタンプリクエストフラグは、トレースパケットを生成するために使用されるトレースモジュールのプログラム可能なレジスタであってもよい。処理装置は、いかなる所定の重要な事象が発生する場合にも、トレースモジュールのプログラム可能なレジスタに信号を提供し、これによって、タイムスタンプの生成がリクエストされたことをトレースモジュールに通知してもよい。トレースモジュールは、次に、後続のトレースパケットの生成時において、タイムスタンプを生成する。
【００１８】
本技術のさらなる特徴において、タイムスタンプリクエストフラグは、タイムスタンプリクエストが、所定の事象の発生時に、プログラム可能なレジスタに書き込むデータ処理装置によって、保留になっていることを示すように、設定されてもよい。このため、処理装置は、タイムスタンプの生成がリクエストされたことをトレースモジュールに通知できる。処理装置は、「一片のデータにタイムスタンプを付けたことによるリクエスト」というレジスタの後で、トレースモジュールのプログラム可能なレジスタを取り扱う。
【００１９】
トレース機能を有するいくつかのシステムは、１つより多いタイミングスキームで動作してもよい。例えば、単一のプロセッサクラスタ内に提供される、埋め込みトレースマクロセル（ＥＴＭ）または計装トレースマクロセル（ＩＴＭ）等のローカルトレースソースは、ローカル時間生成器に従って動作してもよく、一方で、外部タイミングスキームも使用してもよい。かかる場合において、２つ以上の異なるタイミングスキームの間の相関関係を提供することが有用である。本技術は、生成されたタイムスタンプを、第１のタイミングスキームのタイムスタンプの値を第２のタイミングスキームのタイムスタンプの値に相関付けるための、タイムスタンプ相関トレースパケットに適用することにより、かかるシステムに適用できる。このため、後続のトレースパケットが生成された時に、タイムスタンプリクエストフラグが設定される場合、相関トレースパケットは、後続のトレースパケットと共に、トレースストリームに挿入される。次いで、相関トレースパケットを、異なるタイミングスキームの間の相関を提供するために、分析することができる。後続のトレースパケットが決して生成されない（つまり、トレースパケット生成が停止した）場合に、相関パケットは出力されず、このため、トレース帯域幅が節約されることを意味するため、後続のトレースパケットが生成されるまで、相関パケットの生成を遅延する本技術は、有用である。
【００２０】
代替的に、または相関トレースパケットの使用と共に、タイムスタンプを、後続のトレースパケットに付加された時間値にしてもよい。例えば、時間値は、後続のトレースパケットのヘッダに付加してもよい。この形式のタイムスタンプは、タイムスタンプの記録に特化したさらなるトレースパケットの生成を行わないため、結果としてより少ないトレースパケットが生成される。
【００２１】
生成されたトレースパケットは、データ処理装置またはデータ処理装置によって実行されたデータ処理の多くの種類の特徴を示す場合がある。例えば、トレースパケットは、
前記処理中に処理されたデータと、
前記処理中に生成されたデータと、
前記処理中に実行された命令と、
前記処理中にアクセスされたメモリアドレスと、
前記データ処理装置のレジスタに格納された値と、
ハードウェア事象の発生と、のうちの少なくとも１つの特徴を示す場合がある。
【００２２】
ハードウェア事象は、例えば、ハードウェアアクセラレータ、コプロセッサ、またはデータ処理装置の他の処理回路を使用した処理の開始、または外部信号の受信を含んでもよい。
【００２３】
一実施形態において、後続のトレースパケットは、所定の事象の発生後に生成された次のトレースパケットであってもよい。これは、生成されたトレースストリームにおいて、タイムスタンプが付けられたトレースパケットは、所定の事象が、タイムスタンプが付けられたトレースパケットの直前のトレースパケットの生成と、タイムスタンプが付けられたトレースパケットの生成との間のどこかの時間に生じることを示すことを意味する。
【００２４】
別の実施形態において、後続のトレースパケットは、次のトレースパケット、および次のトレースパケットの生成後に生成された後のトレースパケットのうちの１つであってもよい。
【００２５】
２つ以上の後続のトレースパケットが生成されるまで、タイムスタンプの生成を延期することが、ある場合において、望ましいことがある。例えば、ある状況においては、単一の動作に関して、トレースパケットのグループを生成してもよい。時に、所定の事象が発生する場合、トレースパケットのかかるグループが、前の動作に関連して生成されてもよく、事象の後で発生する第１の動作に関するトレースパケットは、前の動作に関するトレースパケットのグループよりも、より関心がある場合がある。従って、前の動作に関するトレースパケットのグループの一部ではない、第１のトレースパケットで、タイムスタンプを生成できる。例えば、第１の動作が、第１のトレースパケットのグループ（例えば「１ｐ」、「１ｑ」、「１ｒ」および「１ｓ」）に対応し、第２の動作が、第２のトレースパケットのグループ（例えば「２ｐ」、「２ｑ」、「２ｒ」および「２ｓ」）に関する場合、第１の動作中に生じる事象に対応するタイムスタンプの生成は、第１の動作が完了した後で、第１のトレースパケット（「２ｐ」）が生成されるまで、遅延できる可能性がある。いくつかの種類のパケット（例えば、「ｑ」、「ｒ」または「ｓ」のパケット）の生成時間が対象となる時間ではない場合、そのタイミングが対象となるタイミングである次のトレースパケット（例えば次の「ｐ」パケット）が生成されるまで、タイムスタンプの生成を延期することにより、トレース帯域幅を節約する（およびトレースリソースのオーバーフローのリスクを避ける）ことが有用である可能性がある。
【００２６】
ある状況において、いくつかの種類のトレースパケットが存在してもよく、事象後に生成された第１のトレースパケットは、対象となる生成時間の種類ではない。第１の例において、トレースパケットの種類には、制御トレースパケットおよびデータトレースパケットを含んでもよい。時に、事象の後の第１のトレースパケットは、その生成時間は、データトレースパケットほど対象にならない、制御トレースパケットであってもよい。従って、タイムスタンプの生成は、事象の後の第１のデータトレースパケットまで、延期できる可能性がある。第２の例において、トレースパケットの種類は、マーカトレースパケットおよびデータトレースパケットを含んでもよい。時に、事象後の第１のトレースパケットは、その生成時間は、マーカトレースパケットよりも対象にならない、データトレースパケットであってもよい。従って、タイムスタンプの生成は、事象後の第１のマーカトレースパケットまで、延期することができる。第３の例において、トレースパケットの種類は、マークされたトレースパケットおよびマークされていないトレースパケットを含んでもよい。トレースパケットを生成する動作は、トレースパケットが、対象になる生成時間の種類であるかどうかを示すためのマークを使用してもよい。タイムスタンプリクエストフラグが設定された後、後続のマークされたトレースパケットが生成された場合にタイムスタンプを生成できる可能性があるが、後続のマークされていないトレースパケットが生成された場合には生成できない。
【００２７】
あるいは、ある状況において、いくつかの種類のトレースパケットが存在してもよく、トレースプロトコルの設計方法のために、事象後に生成された第１のトレースパケットは、それに関連付けられたタイムスタンプを有することができない種類になっている。例えば、トレースパケットの種類にはフレームパケットを含んでもよく、トレースプロトコルは、フレームパケットがこれに関連付けられたタイムスタンプを有することができないように設計されてもよい。時に、事象後の第１のトレースパケットはフレームパケットであってもよく、従って、タイムスタンプの生成は、事象の後の第１のトレースパケットがフレームパケットでなくなるまで、延期される可能性がある。
【００２８】
あるいは、ある状況において、トレースパケットのいくつかのソースが存在してもよく、事象の後で生成された第１のトレースパケットは、その生成時間が対象になる、ソースのからのものではない。例えば、制御スレッドソースおよびアプリケーションスレッドソースが存在してもよい。時に、制御スレッドによって、その生成時間は、アプリケーションスレッドによって生成されたトレースパケットのものよりも対象にならない、事象の後の第１のトレースパケットが生成されてもよい。従って、タイムスタンプの生成は、第１のトレースパケットが事象の後でアプリケーションスレッドによって生成されるまで、延期できる可能性がある。
【００２９】
あるいは、一時的にタイムスタンプが付けられたトレースパケットを処理するために十分なトレース帯域幅がない場合、十分な帯域幅が利用できるまで、タイムスタンプの生成を延期できる可能性がある。この場合、後続のトレースパケットは、所定の事象の発生後、いくつかのトレースパケットを生じさせることができる。
【００３０】
別の態様から見ると、本技術は、
データを処理するための処理回路と、
前記データ処理装置、または前記処理回路によって実行された前記処理のうちの少なくとも１つの特徴を示すトレースパケットを生成するためのトレーシング回路と、を備え、
前記処理回路および前記トレーシング回路のうちの少なくとも１つは、タイムスタンプリクエストが保留になっていることを示すように、タイムスタンプリクエストフラグを設定するために、所定の事象の発生に応答し、
前記トレーシング回路による後続のトレースパケットの生成時において、前記トレーシング回路は、前記タイムスタンプリクエストフラグが、タイムスタンプリクエストが保留になっていることを示すかどうかをチェックするために、また、前記タイムスタンプリクエストフラグが、前記タイムスタンプリクエストが保留になっていることを示す場合、前記後続のトレースパケットに対応するタイムスタンプを生成し、かつ、いかなる前記タイムスタンプリクエストも保留になっていないことを示すように、前記タイムスタンプリクエストフラグを設定するために、構成されている、データ処理装置を提供する。
【００３１】
さらに別の態様から見ると、本技術は、データ処理装置においてトレーシング動作を実行するための、トレースモジュールを提供し、前記トレースモジュールは、
前記データ処理装置または前記データ処理装置によって実行された処理の少なくとも１つの特徴を示すトレースパケットを生成するためのトレーシング回路と、
タイムスタンプリクエストが保留になっているかどうかを示すためのタイムスタンプリクエストフラグと、を備え、
前記トレーシング回路による後続のトレースパケットの生成時において、前記トレーシング回路は、前記タイムスタンプリクエストフラグが、タイムスタンプリクエストが保留になっていることを示すかどうかをチェックするために、また、前記タイムスタンプリクエストフラグが、前記タイムスタンプリクエストが保留になっていることを示す場合、前記後続のトレースパケットに対応するタイムスタンプを生成し、かつ、いかなる前記タイムスタンプリクエストも保留になっていないことを示すように、前記タイムスタンプリクエストフラグを設定するために、構成されている。
【００３２】
本発明の上記および他の目的、特徴および利点は、添付の図面に関連して読まれるべき、例示的な実施形態の以下の詳細な説明から、明らかであろう。
【図面の簡単な説明】
【００３３】
【図１】装置のデータ処理を示す、トレースパケットを生成するための、トレースモジュールを有するデータ処理装置を概略的に示す図である。
【図２】トレースストリーム、およびトレースストリームの対応するトレースパケットの生成の時間を示すタイムスタンプを生成するための方法を示す図である。
【図３Ａ】所定の事象の発生時において、タイムスタンプリクエストが発行される、タイムスタンプ生成技術を使用せずに、２つのトレースストリームを生成する例を示す図である。
【図３Ｂ】スレッドの状態を示す図である。
【図４】例外の事象の発生後に、タイムスタンプ生成がリクエストされる、２つのトレースストリームの生成を示す図である。
【図５Ａ】あらゆるスタンプが押されていないトレースパケットの生成時間に限界値が設定されている、図４の例のトレースストリーム出力を処理するステップを示す図である。
【図５Ｂ】トレースパケットが時系列的に分類された、各プロセスに対応するトレースパケットに分けられたトレースストリームを示す図である。
【図６】トレースパケットの例示的なフォーマットを示す図である。
【図７】タイムスタンプ相関パケットを含む、トレースストリームの例を示す図である。
【図８】トレースパケットの生成が無効になっているかどうかに関係なく、保留のタイムスタンプリクエストを示すようにフラグが設定される方法を示す図である。
【図９】プログラム可能なレジスタを有するトレースモジュールを概略的に示す図である。
【発明を実施するための形態】
【００３４】
図１は、データ処理装置１を概略的に示す。データ処理装置１は、少なくとも１つのプロセッサ４を含む、処理回路を含む。図１の例において、第１のプロセッサ４−１、および第２のプロセッサ４−２の２つのプロセッサが存在する。後続の記載において、プロセッサが概して参照され、どの特定のプロセッサが参照されるかは重要ではなく、参照番号４は、プロセッサを表すために使用される。処理回路は、例えば、ハードウェアアクセラレータ、コプロセッサまたは画像処理装置等の他の処理コンポーネントをさらに含んでもよいと考えられる。
【００３５】
データ処理装置１は、さらに、処理中に使用される値を格納するためのレジスタバンク６、およびプロセッサ４によって使用するためにデータおよび命令を格納するためのメモリ８を含む。プロセッサ４、レジスタバンク６およびメモリ８は、バス１０を介して接続される。
【００３６】
処理装置１は、さらに、処理装置１および装置１によって実行されるデータ処理の特徴を示すトレースデータを生成するための、少なくとも１つのトレースモジュール１２も含む。図１において、２つのトレースモジュール１２−１、１２−２が存在するが、概して、特定のトレースモジュールを参照せずに、トレースモジュールが参照される例が示され、参照番号１２が使用される。図１のトレースモジュール１２が、データ処理装置１内に示され、トレースモジュールは、さらに、データ処理装置１のハウジングの外に配置される外部トレースモジュールであってもよい。トレースモジュール１２は、トレースデータを生成し、トレースデータをトレースバッファ１４に出力し、ここで、データはオンチップで格納されてもよく、またはオフチップに出力されてもよい。トレースデータは、装置１についての診断またはデバッグ情報を提供するために分析されてもよく、また、プロセッサ４によって実行された処理についての診断およびデバッグ情報を含んでもよい。
【００３７】
１つより多いトレースモジュール１２が提供される場合、各トレースモジュールは、異なる機能を有してもよい。例えば、図１に示される構成において、トレースモジュール１２−１は、プロセッサ４−１によって実行されるスレッドを監視してもよく、一方で、トレースモジュール１２−２は、プロセッサ４−２によって実行されるスレッドを監視する。あるいは、トレースモジュール１２−１、１２−２の両方は、単一のプロセッサ４を監視することができるが、異なるトレーシング機能を提供することもできる。例えば、トレースモジュール１２−１は、プロセッサ４によって処理される命令を監視するプログラムフロートレースを提供できる可能性があり、一方で、トレースモジュール１２−２は、実行される命令の可視性を有しないが、代わりに、バス１０上で入力および出力されるデータを監視できる計装トレースを提供できる。このため、トレースモジュール１２によって、少なくとも１つのトレースストリームを生成できる。トレースストリームは、少なくとも１つのトレースパケットを含み、各トレースパケットは、装置１の１つ以上の特徴を示すか、またはプロセッサ４によって実行されるデータ処理を示す。図６を参照して後で記載されるように、多くの種類の特徴を、トレースモジュール１２によって監視してもよい。
【００３８】
トレースストリームのパケットから診断またはデバッグ情報を得るために、トレースストリームを分析する際に、トレースパケットの生成の時間および／または順序を推論することが有用である可能性がある。これは、特に、異なるトレースストリームのトレースパケットが生成された時間を相関づけるタスクが自明ではない（ｎｏｔ  ｔｒｉｖｉａｌ）、２つ以上のトレースストリームが生成される場合に有用である可能性がある。従って、トレースモジュール１２は、異なるストリームの相関付けを可能にするための、参照ポイントを提供するために、トレースストリームに挿入されるタイムスタンプを生成する場合がある。本技術では、トレースパケットが生成されたときのポイントで、タイムスタンプの生成が生じるようにされている。これは、各トレースモジュール１２に、タイムスタンプリクエストフラグ（または「ｓｔｉｃｋｙフラグ」）１８を提供することで行われる。所定の重要な事象の発生時において、タイムスタンプリクエストが保留になっていることを示すように、フラグ１８が設定される。次いで、トレースモジュールがトレースストリームの後続のトレースパケットを生成する場合、トレースモジュールは、保留のタイムスタンプリクエストを示すかどうかを確認するために、タイムスタンプリクエストフラグ１８をチェックする。リクエストが保留になっている場合、トレースモジュール１２は、後続のトレースパケットと共にタイムスタンプを生成する。後続のトレースパケットと共に、タイムスタンプを生成させることで、タイムスタンプのみを含み、いかなるトレースデータも含まない、トレースパケットの生成は行われない。さらに、重要な事象の発生後すぐにタイムスタンプが発行される場合に生じる、２つのトレースパケット間のいずれかに配置されるのではなく、装置１によって実行されるデータ処理の特定のポイントを表すトレースデータの特定の部分に固定されるため、生成されたタイムスタンプは、より有用となる可能性がある。これは、より多くのトレースパケットの生成の時間を、正確に判定し得ることを意味する。
【００３９】
以下に記載される実施形態において、後続のトレースパケットは、所定の事象の発生後に生成された次のトレースパケットである。
【００４０】
図２は、タイムスタンプおよびトレースパケットを生成するための方法を図示する。ステップ２０において、データ処理が開始する。次いで、ステップ２２において、トレースモジュール１２が、処理装置１またはデータ処理の特徴のトレーシングを開始する。この文脈において「トレース」という言葉は、装置１の動作の監視を意味するように使用され、トレースデータのトレースパケットを、トレースモジュール１２によって生成する（図８の記載において後述されるように、プロセッサ４の動作の追跡を継続しながら、トレースパケットの生成を無効にできる）ことは必ずしも必要ではない。
【００４１】
トレーシング中に、ステップ２４において、トレースモジュール１２は、所定の事象が発生したかどうかを判定する。所定の事象は、その発生がタイムスタンプの生成のためのリクエストをトリガする、１つ以上の事象の種類のうちのいずれかである。種々の種類の所定の事象について、以下に記載する。トレースモジュール１２は、所定の事象が種々の異なる方法で発生するかどうかを判定してもよい。トレースモジュール１２が、プロセッサ４によって処理される命令の可視性を有する場合、トレースモジュール１２自体は、実行された命令を監視することによって、所定の事象が発生するポイントを判定できる。例えば、プログラムフロートレースモジュールは、かかる機能を有する。あるいは、プロセッサ４または装置１の他のコンポーネントは、所定の事象が発生したことを示す、トレースモジュール１２への信号を提供できる。これは、トレースモジュール１２が、プロセッサ４によって処理される命令フローの可視性を有しないが、プロセッサ４によって入力および出力されるデータを監視するにすぎない場合に、より有用となりうる。例えば、計装トレースモジュールは、所定の事象が起こったことを示すために、プロセッサ４からの信号を使用できる。
【００４２】
トレースモジュール１２が、所定の事象が起こったことを判定する場合、方法は、ステップ２６に進み、タイムスタンプリクエストが保留になっていることを示すように、タイムスタンプリクエストフラグ１８が設定される。一方で、所定の事象が生じない場合、フラグ１８は保留のタイムスタンプリクエストを示すように、設定されない。所定の事象が起こったかどうかに関係なく、ステップ３０において、トレースストリーム内の次のトレースパケットを生成するべきかどうかが判定される。トレースパケットを生成するべきでない場合に、フローは、ステップ４０に進み、ここで再び、処理が完了したかどうかが判定される。処理が完了した場合には、方法は終了し、一方で、まだ処理を実行する必要がある場合には、方法は、所定の事象を再びチェックするために、ステップ２４に戻る。
【００４３】
ステップ３０において、次のトレースパケットを生成するべきであると判定された場合、方法は、ステップ３２に進み、トレースモジュールは、保留のタイムスタンプリクエストを示すように、タイムスタンプリクエストフラグ１８が設定されたかどうかを判定する。タイムスタンプリクエストフラグが、保留のタイムスタンプリクエストを示す場合、ステップ３４において、タイムスタンプが生成される。図６および図７を参照して後述されるように、タイムスタンプは、種々のフォーマットを有する場合がある。タイムスタンプは、例えば、トレースストリームの次のトレースパケットの前に来るパケットとして出力することができ、トレースストリームの次のトレースパケットの後で来るパケットとして出力することができ、次のトレースパケットを、タイムスタンプを有していない場合のある種類から、タイムスタンプを有する種類に、変換することで生成することができ、または、他の形式に生成することができる。タイムスタンプが生成された後、タイムスタンプリクエストフラグ１８は、これ以上保留のタイムスタンプリクエストを示さないように、ステップ３６においてクリアにされる。これは、別の所定の事象が発生するまで、タイムスタンプが生成されない、または、通常のトレーシングの一部として、タイムスタンプがリクエストされることを意味する。ステップ３４および３６は、タイムスタンプリクエストフラグが設定されていない場合には、実行されない。
【００４４】
タイムスタンプが生成されていてもいなくても、ステップ３８において、トレースモジュール１２により、次のトレースパケットが生成される。生成されたトレースパケットは、トレースバッファ１４に出力することができ、これが分析されるように、任意選択的に、データ処理装置１から出力することができる。次いで、ステップ４０において、方法は、プロセッサ４によって実行された処理が完了したかどうかをチェックするために進む。処理が完了した場合、方法は終了し、一方で、処理が継続する場合、方法はステップ２４に戻り、ここで、別の所定の事象が起こったかどうかが判定される。
【００４５】
図２からわかるように、タイムスタンプの生成は、所定の事象の発生直後には生じない。代わりに、フラグ１８の設定により、トレースストリーム内の次のトレースパケットの生成の際に、タイムスタンプを発行させる。これにより、トレースデータが生成されていない場合にタイムスタンプパケットを生成させないようにし、このため、不必要に多数のトレースパケットが生成されないようにし、タイムスタンプのみを含む長期のトレース出力が行われないようにする。さらに、対象となる事象が生じるポイントでこれが発行されるため、タイムスタンプは、プログラムの重要なポイントと連携する。これは、タイムスタンプが、一時的な相関関係が有用であるポイントに設定される可能性が高いため、トレースストリームの他のポイントに設定されるタイムスタンプよりも、良い診断情報を提供できることを意味する。本技術によって、トレースデータが生成されるたびに、タイムスタンプが発行される場合に生じるトレースバッファ１４のオーバーフローが起こらないようにしながら、トレースデータの生成の相対的なタイミングをより正確に再構成できる。
【００４６】
図３Ａは、プロセッサ４−１、４−２上で実行されるスレッドが、トレースモジュール１２−１、１２−２によって監視される例を示す。対照的なマルチプロセッサ（ＳＭＰ）システムにおいて、スレッドは、マルチプロセッサシステムのスレッドのスループットを改善するために、プロセッサ間を移動できる。これを管理するために、システムは、共有メモリ８に格納されたデータ構造の各スレッドの状態を維持する。単純なシステムにおいて、各スレッドは、（実行中としても公知の）アクティブ、（待機中としても公知の）準備完了、またはブロック（図３Ｂを参照）の３つの状態のうちの１つであってもよい。例えば、トレースされているスレッドを実行している場合、これはアクティブの状態である。しかしながら、１つのプロセッサが、トレースされているスレッドの代わりに、例外の取り扱いスレッドを実行することが必要な場合、トレースされているスレッドは準備完了の状態に設定される（図３Ｂにおける移行Ａ）。例外の取り扱いルーチンによって中断されたスレッドを、完了させることがまだ可能となるように（スレッドをアクティブな状態に戻すことにより−図３Ｂの移行Ｂ）、他のプロセッサを、中断されたプロセッサによって以前に処理されるスレッド等の、準備完了の状態のスレッドの実行を引き継ぐために、制御してもよい。これにより、スレッドの実行における前方への進展（ｆｏｒｗａｒｄ  ｐｒｏｇｒｅｓｓ）を改善する。アクティブなスレッドが、まだ利用可能でない一片のデータを必要とする場合、スレッドの実行は中断され、スレッドはブロック状態に設定される（図３Ｂにおける移行Ｃ）。データが利用可能になると、スレッドは、準備完了の状態に設定され（図３Ｂ内の移動Ｄ）、プロセッサが利用可能になるとスレッドの処理が準備完了になる。
【００４７】
しかしながら、異なるトレースストリームが生成され、かつ公知のタイムスタンプ技術を使用して、トレースストリームにタイムスタンプが付けられた場合に、問題が生じる。これは、図３Ａに図示される。図３Ａは、プロセッサ４−１および４−２によって実行される、２つのスレッドＴ１およびＴ２を示す。スレッドＴ１は、プロセッサ４−１における実行を開始する。しかしながら、Ｔ１の実行中に生じる例外の事象により、プロセッサ４−１は、トレースモジュール１２−１によって監視されていない他のスレッドの処理に占有されるようにされる。従って、プロセッサ４−１は、スレッドＴ１を準備完了の状態にし、これは、プロセッサ４−２が、スレッドＴ１のセクションを処理可能であることを意味する。スレッドＴ１およびＴ２の実行中、トレースモジュール１２−１および１２−２は、図３Ａに図示されるように、トレースパケットを出力してもよい。以前のタイムスタンプ技術では、スレッドＴ１およびＴ２の第１のパケットに共にタイムスタンプが付けられるが、いかなる他のトレースパケットにもタイムスタンプを付けられない、図３Ａに図示されるように、特定のスレッドの開始のみに、タイムスタンプが付けられる場合がある。この技術の問題は、各トレースストリームが、いくつかの異なるスレッドに対応するトレースパケットを含むように、スレッドが１つのプロセッサから別のプロセッサへ伝送される際に、生じる。トレースパケットは相互に混合され、後のトレースパケットにはいずれもタイムスタンプが付けられていないため、特定のトレースストリームのトレースパケットが生成された順序を判定することは不可能である。このため、Ｔ１およびＴ２のトレースパケットの断片を再び正しい順序に接続し直すことは不可能である。
【００４８】
図４は、図３Ａと同じスレッドが実行される場合に生成されるが、本技術のタイムスタンプが適用される、トレースパケットの例を示す。本技術において、所定の事象の発生時に、タイムスタンプリクエストフラグ１８が設定される。これは、次のトレースパケットが生成された場合に、タイムスタンプも生成する必要があることを示す。図４の例において、所定の事象は、コンテクスト同期事象である。
【００４９】
図４において、プロセッサ４−１は、処理スレッドＴ１を開始し、トレースモジュール１２−１は、０および３００の時間において、２つのトレースパケットを生成する。時間４００において、スレッドＴ１は中断され、プロセッサ４−１は、コンテクスト切り替えを実行する。コンテクスト切り替えの一部として、スレッドＴ１は、準備完了の状態に設定され、プロセッサ４−１は、コンテクスト同期事象に遭遇する。コンテクスト同期事象は、タイムスタンプリクエストフラグ１８−１を設定させる。同様に、時間６５０において、プロセッサ４−２上で実行されていたスレッドＴ２が中断され、プロセッサ４−２はコンテクスト切り替えを実行する。このコンテクスト切り替えの一部として、スレッドＴ１は、準備完了の状態からアクティブの状態に設定され、つまり、プロセッサ４−２上での実行を開始し、プロセッサ４−２は、まず、コンテクスト同期事象を実行する。コンテクスト同期事象によって、タイムスタンプリクエストフラグ１８−２が設定される。
【００５０】
このため、時間７００において、プロセッサ４−２上で実行するスレッドＴ１が、トレースモジュール１２−２によってトレースパケットを生成する場合、トレースパケットは、時間値７００を含む付加されたタイムスタンプを有する。タイムスタンプリクエストフラグ、１８−２が、引き続き、リセットされる。
【００５１】
同様に、プロセッサ４−１またはプロセッサ４−２においてコンテクスト切り替えが発生するたびに、コンテクスト同期事象に遭遇し、対応するタイムスタンプリクエストフラグ１８−１または１８−２が設定され、次に生成されたトレースパケットが、トレースパケットが生成された時間を示すタイムスタンプと共に生成される。タイムスタンプが生成されるたびに、フラグは、タイムスタンプリクエストをクリアにするためにリセットされる。
【００５２】
１４００−１６００の時間において、コンテクストトスイッチの間で出力されるいかなるトレースパケットもなしで、３つのコンテクスト切り替えが行われる。各コンテクスト切り替え時すぐにタイムスタンプが生成された場合、本技術において、タイムスタンプのみを含み、トレースデータを含まない、複数のトレースパケットが生成されるため、トレース帯域幅は使われず、時間１４００における第１のコンテクスト切り替え後に、タイムスタンプリクエストが設定され、次いで、単一のタイムスタンプが生成されるポイントである、時間２１００において次のトレースパケットが生成されるまで、維持される。こうして、トレース帯域幅が節約される。
【００５３】
図３Ａに示されるタイムスタンプとは異なり、図４に示されるタイムスタンプは、トレースストリームの順番を再構成することができる。これは、図５Ａおよび図５Ｂに示されるように、２つのステップで行われる。まず、タイムスタンプが付けられていない任意のトレースパケットの生成の時間が推定される。これは、これらのパケットの考えられる生成時間に限界値を設定することで行われる。
【００５４】
スタンプを付けられていないパケットは、同じトレース出力ストリームの最も最近のタイムスタンプ時またはその後に来る必要がある。従って、最も最近のタイムスタンプは、スタンプが付いていないパケットに関連付けられた時間の下限を示す。さらに、かかる事象は、プロセッサにコンテクスト同期事象を生じさせるものであり、これによって、今度はタイムスタンプリクエストフラグ１８が設定されるため、介在するコンテクスト切り替えが、最も最近のタイムスタンプの生成およびスタンプが付いていないトレースパケットの生成の間で生じている可能性はない。従って、スタンプが付いていないトレースパケットは、同じトレースストリーム内の次のタイムスタンプ値の前に生成されたものである。従って次のタイムスタンプ値は、スタンプが付いていないパケットに関連付けられた時間の上限を示す。しかしながら、スレッド移動のプロセスをさらに理解することで、より改善された上限を設定できる。
【００５５】
プロセッサ間のスレッドの移動のプロセスには、第１のプロセッサの第１のコンテクスト切り替えおよび第２のプロセッサの第２のコンテクスト切り替えを含む。第１のコンテクスト切り替えは、スレッドをアクティブな状態の中から取り、これを準備完了の状態にし、第２のコンテクスト切り替えは、準備完了の状態のスレッドを選択するのみであるため、第２のコンテクスト切り替えは、第１のコンテクスト切り替えの後で生じる必要がある。スレッドの状態へのアクセスは、確実に正しい順序となるよう、ソフトウェアによって同期化される。
【００５６】
従って、次に最も高いタイムスタンプ値が存在するということは、前記スレッドを選択する次のコンテクスト切り替えが、スタンプが付いていないパケットが生成された後で生じることを示すため、スタンプが付いていないトレースパケットと同じスレッドに関連付けられた、トレースストリームのいずれかにおける、次に最も高いタイムスタンプ値の前に、スタンプが付いていないトレースパケットが生成されているはずである。
【００５７】
図５Ａは、全てのスタンプが付いていないパケットの生成時間に限界を設定する、このステップを示す。例えば、第１のプロセッサ４−１を監視するトレースモジュール１２−１のトレース出力内の第２のパケットは、タイムスタンプを有しない。従って、これは、時間０における第１のトレースパケットの生成および第２のトレースパケットの生成の間の割り込みなしに、生成されたはずである。これは、第２のトレースパケットの生成の時間の下限が０となるはずであることを意味する。さらに、（任意のトレースストリームにおける）スレッドＴ１に関連付けられた次に最も高いタイムスタンプは、プロセッサ４−２の出力の第３のトレースパケットの時間７００におけるものである。従って、第２のパケットの生成の時間の上限は、７００になるはずである。同様に、図５Ａに示されるように、他の全てのスタンプが付いていないパケットの生成時間に、限界を設定できる。
【００５８】
全てのパケットに限界を設定したため、トレースパケットは、各個別のスレッドのタイムスタンプの順番に、抽出および構成できる（図５Ｂを参照）。生成時間の同じ限界を有する１つより多いトレースパケットが存在する場合に（これは、これらのパケットが同じトレースストリームにある場合に生じるはずである）、元の出力トレースストリームで表示される順番に、トレースパケットを配置する。このため、トレースパケットの生成の正しい順番を判定することができ、異なる生成されたトレースストリームの間に分布されるトレースパケットの断片を結合することができる。従って、図３Ａに示される例とは異なり、トレースストリームを、正しく分析できる。
【００５９】
図３Ａおよび４は、異なるトレースストリームが、異なるプロセッサ４で実行されるスレッドを監視する異なるトレースモジュール１２によって出力される例を示す。しかしながら、タイムスタンプ技術は、同じプロセッサで実行されるスレッドが、異なるトレースモジュール１２（例えば、１つのトレースモジュールがプログラムフロートレースを実行する一方、もう１つのトレースモジュールが計装トレースを実行する）によって、２つ以上の異なる方法で監視される場合にも、有用となる場合がある。さらに、図１は、別個のトレースモジュール１２を示すが、単一のトレースモジュールは、１つより多いトレースストリームを生成できることが可能である。
【００６０】
図４は、所定の事象が、例外の事象の発生である、本技術の例を示す。プロセッサコアの可視性を有するトレースモジュール１２は、例外の事象をトリガするために使用される信号を検出することにより、かかる事象を検出してもよい。あるいは、プロセッサ４からのデータ入力および出力の可視性のみを有するトレースモジュール１２は、メモリ８の割り込みされたスレッドに関連付けられた状態データをセーブすることを検出することにより、かかる事象を検出してもよい。
【００６１】
種々の他の種類の所定の事象は、さらに、タイムスタンプの生成をトリガするためにも使用できる。例えば、タイムスタンプリクエストフラグ１８を設定するために、トリガとして例外の事象の発生を用いるのではなく、所定の事象は、例外の取り扱いルーチンへのエントリ、または例外の取り扱いルーチンの実行後に監視されるスレッドの処理への復帰とできる可能性がある。
【００６２】
さらに、いくつかの命令の実行は、プロセッサ４の現在の状態に依存してもよい（現在の状態は、多くの場合、「コンテクスト」として称される）。パイプライン接続されたプロセッサにおいて、コンテクストは、命令をパイプラインにフェッチする際に判定できる。これは、命令が既にパイプラインにフェッチされた後で、コンテクスト切り替えが発生する場合に、これらの命令の実行が、コンテクスト切り替え後に正しく実行しない場合があることを意味する。この理由のため、コンテクスト同期動作は、コンテクスト切り替えが望ましい場合に実行してもよい。同期バリア命令等の命令を使用して実行され得る、コンテクスト同期動作は、新しいコンテクストに従って、命令のパイプラインをフラッシュし、かつ該命令を再びフェッチするように、プロセッサを制御する。これは、コンテクスト切り替えの後に、命令が正しく実行できることを意味する。図３Ａおよび４について記載されるものと同じ理由で、所定の事象のうちの１つとして、コンテクスト切り替えおよびコンテクスト同期動作の実行のうちの１つまたは両方を取り扱うことが有用である。このように、コンテクスト切り替え、またはコンテクスト同期は、タイムスタンプリクエストフラグを設定するために、トレースモジュール１２を制御し、タイムスタンプを、次のトレースパケットの生成時に生成させて、トレースストリームの相関を可能にする。
【００６３】
別の種類の所定の事象は、１つのプロセッサから別のプロセッサへのスレッドの実行の伝送であってもよい。さらに、スレッドのいかなる割り込みも、タイムスタンプリクエストフラグの設定を制御する所定の事象として、取り扱われてもよい。所定の事象の上記の例のいずれかは、１つより多い種類の所定の事象が、フラグ１８の設定をトリガするように、別々に、または任意の組み合わせで使用されてもよい。例えば、計装トレースについて、プロセッサ４は、トレースモジュール１２に、コンテクスト同期動作、例外のエントリまたは例外の復帰のうちのいずれかの発生を通知することができる。
【００６４】
図６は、生成されたトレースパケットの例示的なフォーマットを示す。トレースパケットは、装置１または実行されるデータ処理の種々の特徴についてのデータを含んでもよい。例えば、トレースパケットは、データ処理の実行中にプロセッサ４によって処理されたデータ、データ処理の結果として生成されたデータ、データ処理中に実行された命令、データ処理の実行中にアクセスされたメモリアドレス、プロセッサ４によってアクセスされたレジスタバンク６のレジスタおよびこれらのレジスタに格納された値、ならびにハードウェア事象の発生、のうちの１つ以上を示す、そのペイロード情報に含むことができる。ハードウェア事象は、例えば、キャッシュミスの発生、ダイレクトメモリアクセス（ＤＭＡ）エンジンの開始、ハードウェアアクセラレータによる処理の開始、またはシステムハードウェアによって信号を送られた任意の他の事象である可能性がある。ハードウェア事象は、例えば、特定の種類の事象を示す数によって、トレースパケットペイロードにおいて識別することができる。トレースモジュール１２によって追跡される特徴は、プロセッサ４によって実行されるデータ処理から結果的に生じる特徴でもよく、または、装置１の特徴、もしくは実行されるデータ処理に関係なく生じる重要な事象でもよい。
【００６５】
生成されたトレースパケットに対応して生成されたタイムスタンプは、いくつかの形式を有してもよい。例えば、図６に示されるように、タイムスタンプは、タイムスタンプが生成された時間を示す単純な数値にできる可能性があり、図６に示されるように、トレースパケットのペイロード内またはパケットヘッダの一部として、トレースパケットに挿入できる可能性がある。他の形式のタイムスタンプも、可能である。
【００６６】
あるいは、システムが、２つ以上の別個のタイミングスキームを使用して動作する場合、これらのタイミングスキームのうちの２つ以上を相関付けるための情報を提供することが有用である場合がある。例えば、単一のプロセッサクラスタ内の１つ以上のトレースモジュールは、ローカルクロックによって生成されたローカルタイミングスキームを使用してもよいが、外部タイミングスキームも、グローバルカウンタまたはタイマおよび／または他のプロセッサクラスタから使用可能な場合がある。異なる時間値の相関を可能にするために、グローバルタイマモジュールは、グローバル時間値を、各タイマ事象時にトレースモジュール１２に渡すことができ、トレースモジュール１２は、ローカルタイムスタンプ値によって、グローバル時間値をタイムスタンプすることができる。このため、トレースパケットに対応して生成されたタイムスタンプは、図７に示されるように、例えば、ローカルタイムスタンプは相関トレースパケットのヘッダに適用されるが、グローバル時間値はパケットペイロードの一部である（またはその逆である）、相関パケットにできる可能性がある。ここでも、かかる相関パケットを、次のトレースパケットの生成時、およびタイムスタンプリクエストフラグの設定に結果として、トレースストリームのみに挿入する。相関パケットは、トレースストリーム内のさらなるパケットを示すが、次のトレースパケットが生成されるまでの、相関パケットの発行の遅延は、トレースデータがこれ以上生成されない場合に、１つ以上の不要な相関パケットの挿入が回避されることを意味するため、まだ有用である。これにより、トレースバッファ１４のオーバーフローの可能性が低減する。
【００６７】
上記のように、トレースモジュール１２は、プロセッサ４の動作のトレーシングの結果として、トレースパケットが生成されるかどうかを選択する機能を有してもよい。トレースパケットの生成が無効になっている場合でも、トレースモジュール１２は、装置４の動作を監視してもよい。本技術では、トレース生成が無効になっている間に、所定の事象が発生する場合、タイムスタンプは生成されない。しかしながら、タイムスタンプを生成できる場合、トレースが次に有効になるまで、システムによって、タイムスタンプリクエストフラグを設定および保持してもよい。トレース生成を無効にするために、トレースモジュール１２が完全に無効になっているシステムにおいて、プロセッサ４は、所定の事象の発生を記録することができ、トレース生成の再有効化時において、トレースモジュール１２へ信号を提供できる。図８は、トレースパケット生成が有効になっているかどうかに関わらず、所定の事象が発生する場合に、タイムスタンプリクエストフラグが設定される方法を示す。トレースパケット生成が再有効化される場合、次のトレースパケットが生成され、かつそのポイントにおいてタイムスタンプリクエストフラグが設定される際に、タイムスタンプが生成される。トレースパケットの生成が無効になっている間であっても、所定の事象の発生を記録することで、これは、マルチプロセッサクラスタを動き回って、プログラムの追跡を、より信頼性高くつなぎ合わせて戻すことができるようにする。このため、トレース分析の精度をより高くすることができる。
【００６８】
図８において、ステップ２０〜２６および３０〜４０は、図２の対応するステップと類似している。図８は、ステップ３０において次のトレースパケットが生成されるかどうかをチェックする前に、トレースパケットの生成が有効になっているかどうかをチェックするためにステップ２８が実行される点が、図２と異なる。トレースパケットの生成が有効になっている場合、フローは、次のトレースパケットが生成されるかどうかが判定されるステップ３０に進む。所定の事象が発生した場合にタイムスタンプリクエストフラグを設定するステップ２６は、トレース生成が無効になっているかどうかに関係なく、実行される。一方で、ステップ２８において、トレースパケットの生成が有効になっていない場合、フローは、処理が完了したかどうかが判定される、ステップ４０に進む。処理が完了していない場合、方法は、所定の事象が発生したかどうかが再び判定される、ステップ２４に戻る。
【００６９】
図９は、本技術を実施するための適したトレースモジュールを示す。トレースモジュール１２は、トレース回路５０、タイムスタンプリクエストフラグ１８を格納するためのプログラム可能なレジスタ５４、および任意選択的に、トレースバッファ１４を備える。トレース回路５０は、トレースターゲットポート５８において、トレースターゲットから受信される情報を監視し、トレースバッファ１４へ出力されるトレースデータを生成する。トレースバッファ１４は、図１に示されるように、トレースモジュールの外部、または図９に示されるように、トレースモジュール１２の内部にあってもよい。トレースモジュールは、トレース分析器またはトレースデータを処理するための他の装置へ、トレースデータを出力するための、トレース出力ポート６２を有する。
【００７０】
プログラム可能なレジスタ５４は、トレースモジュール１２自体、または例えば、プロセッサ４のデータ処理装置の一部のいずれかによって書き込まれてもよい。フラグを設定するためにプログラム可能なレジスタ５４に書き込むデータ処理装置の一部は、必ずしも、トレースモジュール１２によって監視される一部と同じにしなくてもよい。プログラム可能なレジスタ５４は、異なる回路によって、監視されているターゲットに書き込まれてもよく、または、トレースターゲット自体によって書き込むことができる。プログラム可能なレジスタ５４は、保留のタイムスタンプリクエストを示すように、フラグ１８を設定するために、レジスタ書き込みライン６０を介して書き込まれる。トレース回路５０は、次いで、フラグ１８が保留のタイムスタンプフラグを示す場合に、次のトレースパケットの生成の際に、タイムスタンプを生成するために、プログラム可能なレジスタ５４内に格納されるフラグ１８に応答する。あらゆる生成されたタイムスタンプは、トレースストリームに挿入される。タイムスタンプの生成後、トレース回路５０は、いかなるリクエストも保留になっていないことを示すために、値を、プログラム可能なレジスタ５４に書き込むことにより、フラグ１８を消去する。
【００７１】
上記の実施形態では、タイムスタンプは、所定の事象の発生の後で生成された次のトレースパケットと共に、生成される。他の実施形態では、タイムスタンプの生成は、必要な場合、いくつかのトレースパケットが、所定の事象の後で生成されるまで、延期されてもよい。かかる実施形態において、タイムスタンプに関連付けられる後続のトレースパケットは、次のトレースパケット、および次のトレースパケット以外の後のトレースパケットのうちの１つにしてもよい。
【００７２】
例えば、トレースパケットのグループが、既に生じている１つの動作／事象に関連付けられる場合、第１の動作／事象の後で生じる、別の動作／事象に対応するトレースパケットに、タイムスタンプを付けることが適切な場合がある。この場合、タイムスタンプリクエストフラグは、タイムスタンプリクエストをトリガした動作／事象に、異なる動作／事象を示す第１のトレースパケットの生成まで、設定をそのままにする。異なる動作／事象を示す第１のトレースパケットが生成される場合、およびタイムスタンプリクエストフラグが設定される場合、タイムスタンプが生成され、タイムスタンプリクエストフラグが消去される。
【００７３】
あるいは、タイムスタンプを受け入れるためのトレース帯域幅が一時的に存在しない場合、タイムスタンプの生成は、十分な帯域幅が利用可能になるまで遅延できる。この場合、タイムスタンプリクエストフラグは、タイムスタンプが生成されるまで、設定されたそのままとなる。
【００７４】
このため、監視されている現在のトレース帯域幅または特定の動作に応じて、次のトレースパケットまたは後のトレースパケットに、タイムスタンプが生成する場合がある。
【００７５】
所定の事象の発生時においてタイムスタンプを生成する本技術は、それ自体で、または他のタイムスタンプ技術と関連して、使用されてもよい。例えば、プロセッサ４は、タイムスタンプの挿入をリクエストできてもよく、または、プロセッサのオペレーティングシステムが、この機能を有してもよい。トレースモジュールは、各リクエストソースにつき１つの、複数のタイムスタンプリクエストレジスタ５４を有することができる可能性があり、タイムスタンプリクエスト（タイムスタンプリクエストフラグ１８を含む）の種々のソースの任意の１つが保留のリクエストを発行する場合、後続のトレースパケットが生成される際に、タイムスタンプが生成されるように、ＯＲ演算を使用して、異なるタイムスタンプスキームを組み合わせることができる可能性がある。
【００７６】
本技術は、以前のタイムスタンプ技術ではタイムスタンプが付けられない、いくつかのトレースパケットへ、タイムスタンプを加えるものである。これは、トレースされているスレッドについての情報を推論するために、タイムスタンプの有無を使用する、いくつかの既存のトレース分析器が、正しく動作していない場合があることを意味する。この問題は、タイムスタンプの有無によって以前に伝達された情報を示す、トレースパケットに追加の部分を加えることによって解決することができる。
【００７７】
本発明の例示的な実施形態について、添付の図面を参照しながら本明細書に詳細に説明してきたが、本発明はこれらの正確な実施形態には制限されず、添付の特許請求の範囲に記載される本発明の範囲および精神から逸脱せずに、当業者により、本発明において種々の変更および修正を実施可能であることを理解されたい。
【符号の説明】
【００７８】
４−１    プロセッサ
６        レジスタバンク
８        メモリ
１０      バス
１２−１  トレースモジュール
１８−１  タイムスタンプリクエストフラグ
１４−１  トレースバッファ
【図１】
0005478531.tif 000002
【図２】
0005478531.tif 000003
【図３Ａ】
0005478531.tif 000004
【図３Ｂ】
0005478531.tif 000005
【図４】
0005478531.tif 000006
【図５Ａ】
0005478531.tif 000007
【図５Ｂ】
0005478531.tif 000008
【図６】
0005478531.tif 000009
【図７】
0005478531.tif 000010
【図８】
0005478531.tif 000011
【図９】
0005478531.tif 000012