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

印刷ビューの終了

更新: 2015 年 1 月
 
 

クロックプロファイリングに関する制限事項

プロファイリング間隔の最小値と、プロファイリングに使用するクロック分解能は、オペレーティング環境により異なります。最大値は 1 秒に設定されています。プロファイル間隔の値は、時間の分解能のもっとも近い倍数に切り捨てられます。最小値と最大値、およびクロック分解能を表示するには、collect コマンドをほかの引数を指定せずに入力します。

プロファイリングタイマーを使用するプログラムではクロックプロファイリングを行えません。コレクタは、プロファイリングクロックパラメータを設定する setitimer(3) の呼び出しをインターセプトし、ほかのプログラムで使用できないようにします。

Linux プラットフォームでは、クロックデータは合計 CPU 時間としてのみ表示できます。Linux CPU 時間は、ユーザー CPU 時間とシステム CPU 時間の合計です。

Linux システムでは、マルチスレッドアプリケーションの時間プロファイリングによって、スレッドの不正確なデータが報告される可能性があります。プロファイルシグナルは、必ずしもカーネルから各スレッドに指定された間隔で配信されるとは限りません。シグナルが間違ったスレッドに配信される場合もあります。使用可能な場合は通常、サイクルカウンタを使用したハードウェアカウンタプロファイリングによって、スレッドのより正確なデータが提供されます。

クロックプロファイリングによる実行時のひずみと実行時間の拡大

クロックプロファイリングでは、SIGPROF シグナルがターゲットに送られたときにデータが記録されます。それによってシグナルを処理するための実行時間の拡大が発生し、呼び出しスタックが展開されます。呼び出しスタックが深く、シグナルが頻繁なほど、実行時間の拡大は大きくなります。一定の範囲までは、クロックプロファイリングにより、ある程度の実行時間の拡大が生じますが、これはもっとも深いスタックで実行するプログラムの各部分の実行時間の拡大が大きくなることから生まれます。

可能な場合、デフォルト値は正確なミリ秒数でなく、システムクロックとの相関を回避するために、正確な数値と多少異なる値 (たとえば、10.007ms または 0.997ms など) に設定されます。システムクロックとの相関はデータのひずみをもたらす場合もあります。Oracle Solaris プラットフォームでは、同じ方法でカスタム値を設定してください (Linux プラットフォーム上では不可能)。