プロファイルデータが存在しない

実験のプロファイルデータの一部が存在しないと思われる場合、以下の項目をチェックしてその原因を特定してください。

マルチスレッドプログラムからの時間ベースプロファイルデータが存在しない

マルチスレッドプログラムの場合、1 個または複数の LWP の時間ベースプロファイルシグナル (SIGPROF) が失われることがあります。 その結果、これらの LWP で実行されるスレッドの時間メトリックがデータに含まれません。 この現象は、Solaris[tm] 7 オペレーティング環境の非結合スレッドで最もよく発生します。

Solaris オペレーティング環境に適切なパッチをインストールすれば、この問題を解決できます。 結合スレッドを使用するという方法もあります。また、Solaris 8 オペレーティング環境であれば、/usr/lib/lwp に入っている代替スレッドライブラリを使用する方法があります。

マルチスレッドプログラムからのハードウェアカウンタプロファイルデータがない

プログラムがマルチスレッドである場合、ハードウェアカウンタのオーバーフロープロファイルシグナル (SIGEMT) が失われることがあります。 オーバーフローに関するデータは記録され、関数 collector_lost_hwc_overflow に割り当てられます。

Solaris オペレーティング環境に適切なパッチをインストールすれば、この問題を解決できます。 Solaris 8 オペレーティング環境の場合には、/usr/lib/lwp に入っている代替スレッドライブラリを使用するという方法もあります。

シグナルハンドラをインストールするプログラムからのプロファイルデータが存在しない

標本コレクタがプロファイルデータの収集に使用するメカニズムでは、SIGPROFSIGEMT の 2 つのシグナルを使用します。 プロファイルシグナルを失ったり取り扱いを誤ったりしないようにするため、標本コレクタは自分自身のシグナルハンドラをプライマリシグナルハンドラとしてインストールします。 データ収集対象であるプログラムがそのシグナルハンドラをインストールすると、標本コレクタは自分のシグナルハンドラをプライマリシグナルハンドラとして再インストールします。

コレクタライブラリを事前にインストールせずに、プロセスに dbx を接続し、データ収集を有効にした場合、プログラムは自身のシグナルハンドラをインストールすることになり、コレクタはツールのシグナルハンドラを再インストールしません。 この場合、プログラムのシグナルハンドラは、SIGPROFSIGEMT シグナルを引き渡すことによってパフォーマンスデータが失われないようにしなければなりません。 データ収集のため dbx をプロセスに接続した後にアプリケーションが非同期 I/O ライブラリ libaio.so を読み込む場合には、libaio.so のシグナルハンドラによって SIGPROF シグナルがインターセプトされ、時間ベースデータと標本データは記録されません。

exec を呼び出すプログラムからのプロファイルデータが存在しない

exec(2) またはそのバリアントをプログラムが正常に呼び出すと、パフォーマンス実験は異常終了されデータ収集はこの時点で停止します。 呼び出しが失敗した場合、データ収集は正常に行われます。 このプログラムを dbx で実行した場合、exec の呼び出し成功後にデータを収集することはできませんが、データ収集に collect(1) コマンドを使用すれば、-F on オプションによって新規イメージに対する実験を記録できます。

異常終了した実験は、パフォーマンスアナライザで正常に読み込むことができます。 実験が記録されたコンピュータ以外のコンピュータで実験を解析するには、実験を記録したコンピュータ上で er_archive(1) コマンドを使用します。

実行結果のごく一部の時間ベースプロファイルデータが存在しない

システム時間と外部ソースの同期をとると、時間ベースのプロファイルデータが失われたように見えることがあります。 通常、数秒間に渡ってインクリメント単位で調整が行われます。 この時間中にプロファイルパケットに記録されるタイムスタンプには、システム時間に対するインクリメントが含まれます。 この結果、プロファイル間隔における不規則性が「タイムライン」タブで見られますが、時間メトリックへの影響はありません。


著作権と商標について