synprog のパフォーマンスデータを収集したことを確認してください。 これらの作業がまだ済んでいない場合には、synprog サンプルのデータ収集を参照して実行してください。 パフォーマンスデータを収集したら、実験 test.1.er を開きます。
ここでは、パフォーマンスアナライザが共有オブジェクトに関する情報をどのように表示するか、また、さまざまな時にさまざまな場所で読み込める動的にリンクされた共有オブジェクトの一部である関数の呼び出しをどのように処理するかを見ていきます。
synprog ディレクトリには、2 つの動的にリンクされた共用オブジェクト so_syn.so、so_syx.so があります。 実行中に、synprog はまず so_syn.so を読み込み、それに含まれる関数の so_burncpu() を呼び出します。 次に so_syn.so の読み込みを解除し、so_syx.so を同じアドレスに読み込み、so_syx.so に含まれる関数 sx_burncpu() を呼び出します。 次に、so_syx.so の読み込みを解除せずに、再度 so_syn.so を別のアドレスに読み込み、so_burncpu() を呼び出します。 so_syn.so を別のアドレスに読み込むのは、最初に読み込んだアドレスが so_syx.so によってまだ使用されているからです。
共用オブジェクトの読み込み先アドレスは実行時に決定され、実行時ローダーがオブジェクトの読み込み場所を選択します。
このサンプルでは、同一の関数が異なる実行時点で異なるアドレスから呼び出される可能性があること、異なる関数が同一のアドレスから呼び出される可能性があること、およびパフォーマンスアナライザがこのような動作を正しく処理し、関数の存在するアドレスに関係なく、その関数のデータを集計していることを示しています。
プログラムが実行時に使用したロードオブジェクトすべてが「関数の表示/非表示」ダイアログに表示されます。
選択した 2 つのオブジェクト以外のロードオブジェクトは、関数リストに表示されなくなります。 これらのエントリは、ロードオブジェクト全体を示す 1 つのエントリと置換されます。
「関数」タブに表示されるロードオブジェクトリストには、メトリックが記録されたロードオブジェクトだけが含まれているので、「関数の表示/非表示」ダイアログに表示されるリストより短くなっています。
so_burncpu() は、sx_burncpu() と同じ演算を行います。 so_burncpu() は 2 度実行されたため、そのユーザー CPU 時間は sx_burncpu() のユーザー CPU 時間のほぼ 2 倍です。
パフォーマンスアナライザは、プログラムの実行中に同じ関数が別のアドレスに読み込まれたとしても、同じ関数が実行されたことを認識し、そのデータを集計します。