Oracle® Developer Studio 12.5: パフォーマンスアナライザ

印刷ビューの終了

更新: 2016 年 6 月
 
 

プログラムデータオブジェクトへのデータアドレスのマッピング

正確なメモリー操作に対応するハードウェアカウンタイベントからの PC が見つかると、パフォーマンスアナライザは、コンパイラからハードウェアプロファイルサポート情報内に提供された命令識別子と記述子を使用して、関連するプログラムデータオブジェクトを生成します。

データオブジェクトという用語は、ソースコードに記述されているプログラム定数、変数、配列、および構造体や共用体などの集合体のほか、個別の集合体要素を示すために使用します。データオブジェクトのタイプとそのサイズはソース言語によって異なります。多くのデータオブジェクトの名前は明示的にソースプログラム内で付けられますが、名前が付けられないものもあります。データオブジェクトの中には、ほかの単純なデータオブジェクトから生成または集計され、より複雑なデータオブジェクトの集合になるものもあります。

各データオブジェクトには、定義元であり、参照が可能なソースプログラムの領域であるスコープが関連付けられています。このスコープは、大域 (ロードオブジェクトなど)、特定のコンパイル単位 (オブジェクトファイル)、または関数である可能性があります。同一のデータオブジェクトを異なるスコープで定義したり、特定のデータオブジェクトを異なるスコープで異なる方法で参照したりできます。

バックトラックを有効にして収集されたメモリー操作に関するハードウェアカウンタイベントのデータ派生メトリックは、関連付けられたプログラムデータオブジェクトタイプに帰属します。これらのメトリックは、そのデータオブジェクトを含むすべての集合体と、<Unknown><Scalars> などのすべてのデータオブジェクトを含むと見なされる擬似的な <Total> に伝搬されます。<Unknown> の各種のサブタイプは、<Unknown> 集合体まで伝搬されます。次のセクションでは、<Total><Scalars>、および <Unknown> データオブジェクトについて説明します。

データオブジェクト記述子

データオブジェクトは、宣言された型と名前の組み合わせで記述します。単純なスカラーデータオブジェクト {int i} は、int 型の変数 i を記述しているのに対して、{const+pointer+int p} は、intp への定数ポインタを記述しています。型名のスペースは「_」(アンダースコア) に置き換えられ、名前の付いていないデータオブジェクトは「-」(ハイフン)、たとえば {double_precision_complex -} という名前で表されます。

集合体全体も同様に、foo_t 型の構造体の場合は {structure:foo_t} と表します。集合体の要素では、その要素のコンテナを追加指定する必要があります。たとえば、前述の foo_t 型の構造体のメンバーである int 型の i の場合は {structure:foo_t}.{int i} となります。集合体はそれ自体、(さらに大きい) 集合体の要素になることも可能で、対応する記述子は集合体記述子を連結したもの、最終的にはスカラー記述子になります。

完全修飾された記述子は、データオブジェクトを明確にするために必ずしも必要ではありませんが、データオブジェクトの識別を支援するために一般的な完全指定を示します。

<Total> データオブジェクト

<Total> データオブジェクトは、プログラム全体のデータオブジェクトを表すために使用される擬似的な構造です。あらゆるパフォーマンスメトリックは、異なるデータオブジェクト (およびそのオブジェクトが属する集合体) のメトリックとして帰属するほか、<Total> という特別なデータオブジェクトに帰属します。これは、データオブジェクトリストの上部に表示されます。そのデータを使用すると、ほかのデータオブジェクトのデータの概略を得ることができます。

<Scalars> データオブジェクト

集合体要素のパフォーマンスメトリックが、それに関連付けられた集合体のメトリック値にさらに帰属するのに対して、すべてのスカラー定数および変数のパフォーマンスメトリックは、擬似的な <Scalars> データオブジェクトのメトリック値にさらに帰属します。

<Unknown> データオブジェクトとその要素

さまざまな状況下で、特定のデータオブジェクトにイベントデータをマップできない場合があります。このような場合、そのデータは、<Unknown> という名前の特殊なデータオブジェクトとその要素の 1 つに次のようにマップされます。

  • トリガー PC を持つモジュールが -xhwcprof を使用してコンパイルされていない

    トリガー PC を持つモジュールが -xhwcprof を使用してコンパイルされていない イベントの原因となっている命令またはデータオブジェクトは、オブジェクトコードがハードウェアカウンタプロファイルサポートを指定してコンパイルされていなかったので、識別されませんでした。

  • バックトラッキングで有効な分岐先が検出できなかった

    バックトラッキングで有効な分岐先を検出できなかったイベントの原因となっている命令は、コンパイルオブジェクト内で提供されたハードウェアプロファイルサポート情報が、バックトラッキングの妥当性を検証するには不十分だったため、識別されませんでした。

  • バックトラッキングで分岐先をトラバースした

    バックトラッキングで分岐先をトラバースしたイベントの原因となっている命令またはデータオブジェクトは、バックトラッキングで命令ストリーム内から制御転送ターゲットが検出されたため、識別されませんでした。

  • 識別する記述子がコンパイラから提供されなかった

    コンパイラは、メモリー参照命令のデータオブジェクト情報を提供しませんでした。

  • タイプ情報がない

    コンパイラは、その命令をメモリー参照命令として識別しませんでした。

  • コンパイラが提供したシンボリック情報から判別不能

    コンパイラには、その命令のシンボリック情報がありません。コンパイラのテンポラリは一般に識別されません。

  • ジャンプ命令または呼び出し命令によってバックトラッキングが阻止された

    バックトラッキングが、ジャンプ命令または呼び出し命令によって阻止された イベントの原因となっている命令は、バックトラッキングで命令ストリームの中から分岐命令または呼び出し命令が検出されたため、識別されませんでした。

  • バックトラッキングでトリガー PC が検出されなかった

    バックトラッキングでトリガー PC が検出されなかったイベントの原因である命令を、最大のバックトラッキング範囲内から検出できませんでした。

  • トリガー命令のあとでレジスタが変更されたため、仮想アドレスを特定できなかった

    トリガー命令のあとでレジスタが変更されたため、仮想アドレスを判別できなかったレジスタがハードウェアカウンタのスキッド中に上書きされたため、データオブジェクトの仮想アドレスを判別できませんでした。

  • メモリー参照命令で有効な仮想アドレスが指定されなかった

    メモリー参照命令で有効な仮想アドレスが指定されなかった データオブジェクトの仮想アドレスが有効であるように見えませんでした。