更新日付: 2004 年 5 月 27 日 |
Sun Studio 9: パフォーマンスアナライザ Readme |
目次
- はじめに
- IDE からのパフォーマンスアナライザの起動
- Sun Studio 9: パフォーマンスアナライザについて
- 新規および変更された機能
- ソフトウェアの修正事項
- 問題点と回避策
- 制限事項と互換性の問題
- 記述の誤りの訂正
- 必要なパッチ
A. はじめに
この文書には、Sun[tm] Studio 9: パフォーマンスアナライザと付属する解析ツールに関する情報が含まれています。パフォーマンスアナライザと解析ツールには、プログラムのパフォーマンスデータを収集、操作するためのコマンドや、パフォーマンスデータを表示するためのグラフィカルユーザーインタフェース (GUI)、コマンド行インタフェース (er_print) などで構成されています。本書で使用するコレクタという用語は、パフォーマンスデータを収集するツール群とそれらの基本ライブラリを総称しています。これらのツールとは、collect コマンド、dbx collector サブコマンド、IDE のパフォーマンスデータ収集機能です。
記載内容は、このリリースで導入された新機能とソフトウェアの修正事項、既知の問題点、制限事項、互換性の問題などです。また、本書の記載内容はソフトウェアマニュアルの情報を更新ないし補充します。
パフォーマンスアナライザには、Sun Studio 9 のライセンスが必要です。snit コマンドでシリアル番号インストールツールを実行し、シリアル番号方式のライセンスをインストールすることができます。詳細は、snit(1) のマニュアルページを参照してください。
製品マニュアル
- リリースノート (Solaris プラットフォーム) : http://docs.sun.com から入手可能です。リリースノートの情報は、すべての README ファイルの情報を更新および補足します。
- リリースノート (Linux プラットフォーム) : http://docs.sun.com から入手可能です。リリースノートの情報は、すべての README ファイルの情報を更新および補足します。
- Sun Studio 9 のドキュメント :/installation_directory/docs/ja/index.html からは、製品のマニュアルページ、README の HTML バージョン、およびマニュアルにアクセスできます。Solaris でのデフォルトの installation_directory は /opt/SUNWspro です。Linux でのデフォルトの installation_directory は /opt/sun/sunstudio9 です。
- IDE のドキュメント : IDE の「ヘルプ」メニューからは、Sun Studio 9 IDE のすべてのコンポーネントに関するオンラインヘルプにアクセスできます。
- 開発者向けリソースのポータル : 技術資料、サンプルコード、ドキュメント、ナレッジベースについては、開発者向けポータルの http://developers.sun.com/prodtech/cc を参照してください。
注 -Sun Studio 9 ソフトウェアが、/opt 以外にインストールされている場合 は、ご使用のシステムにおける実際のパスを、システム管理者に確認してください。
B. IDE からのパフォーマンスアナライザの起動
IDE からパフォーマンスアナライザを開始するには、次のいずれかの処理を行います。
IDE から「収集」ウィンドウを開くには、次のいずれかを行います。
- 「アナライザ」タブをクリックし、メインウィンドウで「解析」->「ファイル」->「実験を開く」を選択する。または「アナライザ」ウィンドウのツールバーにある「実験を開く」ボタンをクリックして、「アナライザ」ウィンドウに実験を読み込む。
- IDEの「エクスプローラ」ウィンドウで実験をダブルクリックする。
- IDE の「エクスプローラ」ウィンドウで実験を右クリックし、コンテキストメニューから「実験を開く」または「実験を追加」を選択する。
- 「解析」タブをクリックし、「パフォーマンスアナライザ」ウィンドウのツールバーにある「実験を収集」ボタンをクリックする。
- IDE のエクスプローラで実行可能ファイルを右クリックし、コンテキストメニューから「パフォーマンスツール - 収集」を選択する。
C. Sun Studio 9: パフォーマンスアナライザについて
今回のリリースの Sun Studio 9: パフォーマンスアナライザは、次のオペレーティングシステムで使用できます。
- Solaris[tm] オペレーティングシステム (SPARC® プラットフォーム版) バージョン 8 および 9
- Solaris オペレーティングシステム (x86 プラットフォーム版) バージョン 8 および 9
- Java Desktop System 1.0
- SuSE Linux Enterprise Server 8
- RedHat Enterprise Linux 3
プログラムパフォーマンス解析ツールは、プログラムのパフォーマンス統計プロファイルを収集し、重要なライブラリルーチンの呼び出しをトレースし、表や図形を使ってそれらのデータを表示します。収集されたデータは、パフォーマンスメトリックに変換されます。メトリックは、ロードオブジェクト、関数、ソース行、命令レベルのいずれかで表形式で表示することができます。これらのツールは、プログラム構造をナビゲートできるので、リソースの使用法、非効率性、遅延などに影響のあるコード内の関数やパスの識別に役立ちます。パフォーマンスアナライザ GUI では、タイムラインディスプレイにパフォーマンスデータを表示することもできます。
今回のリリースのパフォーマンスアナライザのコレクタでは、Java[tm] 仮想マシン (JVM) のサポートを使用することによって、Java プログラミング言語で記述されたアプリケーションをプロファイルすることができます。2003 年 10 月に発表された JVM[tm] には、このサポートが含まれています。ただし、将来の JVM では、このサポートは変更される可能性があります。今回のリリースのパフォーマンスアナライザのコレクタと将来のリリースの JVM を組み合わせた場合、コレクタが、Java プログラミング言語で記述されたアプリケーションのプロファイル情報を収集できなくなる可能性があることに注意してください。サンでは、パフォーマンスアナライザ の将来的なリリースでも、JVM プロファイリングテクノロジの変更に伴う Java プロファイリングをサポートできると考えています。
D. 新規および変更された機能
ここでは、このリリースのパフォーマンスアナライザで新しく追加された機能と変更された機能について説明します。
注 -Sun Studio 9 ソフトウェアが、/opt 以外にインストールされている場合は、ご使用のシステムにおける実際のパスを、システム管理者に確認してください。
- Linux ディストリビューションの追加
- データ空間プロファイリング
- 派生プロセス
- データ収集出力のリダイレクト
- アナライザのコマンド行引数
- アナライザ API 共有ライブラリのパッケージ化
- Collect コマンドに対する Notes ファイルのサポート
- 実験プレビューおよび実験ヘッダーでの Notes 表示
- ソースおよび逆アセンブリ表示の機能強化
- er_src コマンドの機能強化
- Java メソッドの署名
- ヒープトレース時の mmap 呼び出しの処理
- Linux ディストリビューションの追加
Sun Studio 9 for Solaris に加えて、Sun Studio 9 for Linux でも、パフォーマンスアナライザが利用できるようになりました。次の Linux オペレーティングシステムに対応しています。
Linux ディストリビューションに er_kernel が含まれていないことを除けば、提供ユーティリティは両方のオペレーティングシステムで同じです。、Linux の場合、collect コマンドの制限が多くなっています。使用できるのは時間プロファイリングおよびヒープトレースだけです。詳細は、collect のマニュアルページを参照してください。Linux 上でマルチスレッドアプリケーションをプロファイリングすることは可能ですが、現在のところ、RedHat 版 Linux オペレーティングシステムでのプロファイリングでは高い率でデータ矛盾が発生することが観察されています。
- Java Desktop System 1.0
- SuSE Linux Enterprise Server 8
- RedHat Enterprise Linux 3
- データ空間プロファイリング
SPARC プラットフォーム向けの C プログラムに対してデータ空間プロファイリングを行うことができます。データ空間プロファイルはキャッシュミスなどのメモリー関係のイベントの報告データをまとめたもので、メモリー関係のイベントが発生する命令だけではなく、イベントを発生させるデータオブジェクト参照についても報告します。
データ空間プロファイリング情報の解析結果は、次のようにコマンド行またはアナライザの GUI で表示することができます。
- er_print コマンドには、データ空間プロファイリング関係のオプションとして、data_objects、data_osingle、data_olayout という 3 つのオプションが新たに追加されています。
- アナライザには、データ空間プロファイリング関係のタブとして、「データオブジェクト」と「データレイアウト」という 2 つのタブが新たに追加されています。実験にデータ空間プロファイルが存在する場合は、これらのタブが自動的に表示されます。
詳しくは、マニュアルページ analyzer(1)、collect(1)、および er_print(1) のマニュアルページを参照してください。
- 派生プロセス
派生プロセスの記録機能が強化され、fork や exec コマンド、その変形コマンドを使って作成されたプロセスばかりでなく、あらゆる派生プロセスを記録できるようになりました。この追加機能をサポートするため、collect -F コマンドに新しいオプション、collect -F all が追加されています。system コールのように、F on ではなく、F all によって処理された派生プロセスには、コード文字「c」を使った名前が付けられます。
派生プロセスのデータは、コマンド行ユーティリティ er_print を使って、またアナライザの GUI で明示的に選別表示できます。
詳細は、collect(1) のマニュアルページを参照してください。
- データ収集出力のリダイレクト
collect コマンドに新しいオプション collect -O file が追加されました。このオプションは、collect からのすべての出力を file にリダイレクトします。生成されたターゲットからの出力はリダイレクトしません。
- アナライザのコマンド行引数
アナライザコマンド (起動スクリプト) が、長い引数の二重ハイフンを受け付けるようになりました。具体的には、--jdkhome および --fontsize です。
- アナライザ API 共有ライブラリのパッケージ化
アナライザ API 用の共有ライブラリが独立したパッケージなりました。このため、単独かつ自由に配布できます。
- Collect コマンドに対する Notes ファイルのサポート
collect コマンドに新しいコマンド行オプション collect -C comment が追加されました。コメントは、実験の notes ファイルに追加されます。最大 10 個の -C 引数を適用できます。
- 実験プレビューおよび実験ヘッダーでの Notes 表示
実験プレビューおよび実験ヘッダーに、実験の notes ファイルの内容が表示されます。
- ソースおよび逆アセンブリ表示の機能強化
注釈付きソースおよび逆アセンブリにおける、関連するソースコンテキストから得られたコードの取り扱いが改良されました。イタリック体で赤く表示されるインデックス行は、別のファイルからのコードの挿入位置を示します。「ソース」タブでインデックス行をダブルクリックすると、「ソース」ウィンドウに、そのソースファイルが表示されます。
- er_src コマンドの機能強化
コマンド行ユーティリティの er_src が関数リストの表示、Java .class ファイルの処理、代替ソースコンテキストからのソースおよび逆アセンブリの表示を行えるようになりました。
- Java メソッドの署名
Java の長い名前の形式には、関数名だけではなく、完全なメソッドの署名が表示されます。
- ヒープトレース時の mmap 呼び出しの処理
ヒープトレース時の mmap 呼び出しはメモリー割り当てとして処理されます。
E. ソフトウェアの修正事項
次のソフトウェアの問題点が修正されています。
- 中国語ロケールでアナライザのオンラインヘルプを表示すると、例外がスローされる。
- 中国語ロケールでアナライザで実験を開こうとすると、コアダンプが発生する。
- -j off およびフィルタを使って Java 実験を実行すると、liber_dbe.so で SISEGV エラーになる。
- libjvm を分割して再読み込みしようとすると、セグメントオーバーラップの警告と「意味不明」の警告が返される。
- 派生プロセスに関するメッセージが難解。
- パフォーマンスアナライザおよび er_print で、スタックの展開内容が切りつめられたことが分からない。
- data_objects または data_olayout コマンドを先に実行していないと、data_osingle コマンドが構造体名を認識しない。
- 元のオブジェクトにアクセスできないか、元のオブジェクトが -A copy でアーカイブされていなかった場合、逆アセンブリリストで、呼び出し先がそのシンボル名に正しく解決されない。
F. 問題点と回避策
ここでは、これまでにわかっているソフトウェアの問題点とその回避策について説明します。最新情報については、http://docs.sun.com から入手可能なリリースノートを確認してください。
一部の問題は、Solaris オペレーティングシステムのバグが原因であり、これは該当するパッチをインストールすることで解消できます。詳しくは、Readme の「必要なパッチ」の節を参照してください。また、バグの中には、パフォーマンスアナライザの問題のように見えて、実際にはコレクタの問題であるものも存在します。コンパイラや dbx のバグもパフォーマンスアナライザに影響します。バグが原因ではない問題についても、ここで説明します。
パフォーマンスツールのバグ
- Java 仮想マシンが最新でないと Java プロファイルがクラッシュする
リリース 1.4.2 のベータ版より前の JVM マシンを使用している Java プロファイリングは、Java のバグが原因でクラッシュすることがあります。古い JVM が使用されていると、実験に警告が書き込まれます。1.4.2_02 より前の JVM マシンがインストールされた Intel プラットフォームでは、必ず問題が発生します。(Java プログラミング言語のバグ 4757672, 4762958, 4763610, 4808151, 4812196, 4505739)
- Java 同期化およびヒープトレースでパフォーマンスの問題がある
Java 同期化およびヒープトレースで、(特にヒープトレースで大容量の実験を処理する場合には) パフォーマンス上の問題があります。
- dbx における Java プロファイルがサポートされていない
dbx のコレクタあるいは Sun Studio の IDE のコレクタグラフィカルインタフェースを使用している場合の Java プロファイルはサポートされていません。これは、JVM ソフトウェアがデバッグエージェントとプロファイルエージェントの両方をサポートできないためです。(4771337)
- さまざまな処理で Java プロファイリングのデータが失われることがある
ガベージコレクション、system.* メソッドの呼び出し時、監視待ちの時、その他さまざまなタイミングでデータ収集のデータが失われることがあります。JVMは、これらのタイミングでは Java スタックを解放しません。スタックの解放があると、そのことが原因で疑似関数
が発生します。(4824989, 4762954) - 「概要」タブまたは「イベント」タブのデータを出力できない
パフォーマンスアナライザは、「概要」タブまたは「イベント」タブのデータを出力できません。関数またはロードオブジェクトの概要データを出力するには、er_print コマンドを使用します。(4286674)
- 並列の指令行ではメトリックが二重にカウントされる
注釈付きソースコードの並列化コンパイラ指令行で報告されるメトリックが二重にカウントされます。コードの do、for または section ブロック中のソース行のメトリックは正しくカウントされます。また、関数レベルでの二重カウントエラーもあります。(4656193)
- カラーチューザの「汎用」パネルが更新されないことがある
色が変更されたときに、カラーチューザの「汎用」パネルが更新されないことがあり、「リークリスト」タブと正しく作用し合いません。(4948522, 4825896)
- er_print ユーティリティが、同一名の関数を非常に数多く検出する
er_print ユーティリティが、ソースおよび逆アセンブリのリストに同一名の関数を非常に数多く表示します。(5033124)
- アーカイブでアーキテクチャの異なるライブラリが正しく処理されないことがある
collect -A copy コマンドを使用したとき、名前が同じでアーキテクチャの異なるライブラリが正しくコピーされません。(4970739)
- 1 つの dbx セッションから複数の実験を実行できない
1 つの dbx セッションから複数の実験を実行しようとすると、失敗します。(4999242)
Linux 固有のパフォーマンスツールのバグ
- MP プロファイリングにおける並列スレッドからのデータ件数が実際より少ない
この問題は、Red Hat および SUSE の Linux で発生します。(5020387)
- Java プロファイリングで JVM からの復号化された名前が表示されない
この問題は、JVM 1.4.2_02 または以降の 1.4.x 環境で、サポートされていないツールの GNU 2.x を使って構築したときに発生します。(バグ番号なし)
- MP プログラムの標本データが間違っていることがある
CPU 時間と標本時間との間に矛盾があることがあります。(5025963)
Solaris オペレーティングシステムのパッチで解決できる問題
以下の問題は、Solaris オペレーティングシステムに適切なパッチをインストールすることによって解決できます。Readme の「必要なパッチ」の節も参照してください。
- ハードウェアカウンタのプロファイリングでアプリケーションがクラッシュする
特定の環境では、HW カウンタのプロファイリングの割り込みによって、UltraSPARC-III プロセッサにおける OS のバグが発生します。このバグによって、%y レジスタが壊れることがあります。その時点でレジスタが有効になっていると、アプリケーションがクラッシュすることがあります。この問題は Solaris 8 オペレーティングシステムでは HW2 update、Solaris 9 オペレーティングシステムでは update 4 で解決されています。この問題は、プロファイリングの分解能を低くしたり、1 つのカウンタのみを使用したりすることによって発生の頻度が減少します。(4793905)
- LWP の時間プロファイルデータの消失
1 つまたは複数の LWP に対するプロファイリング割り込み (SIGPROF) が失われる可能性があります。 この問題は、結合スレッドを使用することで回避できます。また、Solaris 8 オペレーティングシステムであれば、/usr/lib/lwp の代替スレッドライブラリを使用して回避できます。代替スレッドライブラリは、非結合スレッド API がサポートされていても結合スレッドを使用します。(4352643)
- ハードウェアカウンタのプロファイル割り込みの消失
非結合スレッドとともにプログラムを実行すると、ハードウェアカウンタのオーバーフロー (SIGEMT) からの割り込みが失われて、回復不可能になることがあります。この問題は、結合スレッドを使用することで回避できます。また、Solaris 8 オペレーティングシステムであれば、/usr/lib/lwp の代替スレッドライブラリを使用して回避できます。代替スレッドライブラリは、非結合スレッド API がサポートされていても結合スレッドを使用します。(4352643)
- 負荷がかかっているシステムの時間プロファイリングが不正確
システムに負荷がかかっているときにアプリケーションをプロファイリングすると、ユーザー CPU 使用時間が実際よりかなり小さな値になることがあります (最大 20%)。計測されなかったこのユーザー CPU 時間は、システム CPU 時間または CPU 待ち時間とみなされます。(4509116)
その他の問題
- シグナルハンドラをインストールするアプリケーションで動作が変わる
シグナルハンドラをインストールするアプリケーションのパフォーマンスデータを収集すると、コレクタまたはそのアプリケーションの動作が変わる可能性があります。検出された場所で、コレクタライブラリは、実験に警告メッセージを記録します。
コレクタライブラリが事前にロードされると、コレクタのシグナルハンドラは常に自分のシグナルハンドラを一次ハンドラとして再インストールし、使用しないシグナルを他のシグナルハンドラに転送します。ただし、コレクタがシステムコールに割り込むことはないため、システムコールに割り込むシグナルハンドラをインストールするアプリケーションでは、その動作が変わる可能性があります。非同期の取り消し操作に SIGPROF を使用する非同期入出力ライブラリ libaio.so の場合、非同期取り消し要求が遅れて届きます。(4397578)
コレクタライブラリを事前にロードせずに dbx をアプリケーションに接続すると、コレクタは有効になった時点でそのシグナルハンドラを一次ハンドラとしてインストールします。ただし、それ以降にインストールされたシグナルハンドラがあれば、そのハンドラの方がコレクタのシグナルハンドラに優先します。このシグナルハンドラが SIGPROF シグナルと SIGEMT シグナルをコレクタのシグナルハンドラに転送しない場合、プロファイリングデータは失われます。
- dbx がプロセスに接続されると、データ収集で問題が発生する
コレクタライブラリ libcollector.so を事前に読み込まずに実行中のプロセスに dbx を接続すると、多数のエラーが発生することがあります。
トレースデータを収集することはできません。トレースデータとは、同期待ちトレース、ヒープトレース、MPI トレースなどです。トレーシングデータはさまざまなライブラリへの割り込み処理によって収集されます。 libcollector.so が事前に読み込まれていない場合、割り込み処理ができなくなります。
dbx がプロセスに接続されたあとにシグナルハンドラがインストールされ、そのシグナルハンドラが SIGPROF シグナルおよび SIGEMT シグナルを転送しない場合、プロファイリングデータと標本データが失われます。(4397578)
プログラムが非同期入出力ライブラリ libaio.so を使用している場合、libaio.so がSIGPROF を使用して非同期の取り消し操作を行うため、時間プロファイルデータと標本データは失われます。
プログラムがハードウェアカウンタライブラリlibcpc.so を使用している場合、コレクタとプログラムが両方ともこのライブラリを使用するため、ハードウェアカウンタオーバーフロープロファイリング実験が破壊されます。dbx がプロセスに接続されたあとハードウェアカウンタライブラリが読み込まれる場合、ハードウェアカウンタ実験は成功しますが、libcpc ライブラリ関数への参照は libcpc.so の検索ではなく一般的検索によって解決されます。
プログラムが setitimer(2) を呼び出すと、コレクタとプログラムが両方ともこのタイマーを使用しているため、時間プロファイリング実験は失われる可能性があります。
- 統計表示と標本の待ち CPU メトリックの値が正しくない
標本パケットと広域統計に不正な値の「CPU 待ち」メトリックが記録されることがあります。これらの値はパフォーマンスアナライザの「統計」タブに表示され、「タイムライン」タブの標本の表示に影響します。(4615617)
- 短い時間間隔で時間プロファイルデータが失われる
時間プロファイルデータは、システムクロックが外部ソースと同期処理されている最中に数秒の間、消失しているように見えることがあります。この間、システムクロックは同期がとられるまで増分されていきます。プロファイルシグナルは設定された間隔で送出されますが、プロファイルパケットに記録されているタイムスタンプには、シグナルの送出間の増分時間も含まれます。
- データ収集がスタックオーバーフローで異常終了する
コレクタがスタックオーバーフローエラーで失敗する場合があります。これは、コレクタがアプリケーションのスタックを使用し、そのスタックサイズがコレクタで使用するには小さすぎる場合に発生します。この問題を回避するには、スタックのサイズを 8K バイト以上にします。詳細は、limit(1) のマニュアルページを参照してください。マルチタスク用ライブラリを使用する並列アプリケーションの場合、各スレッドのスタックサイズも STACKSIZE 環境変数を使用して設定する必要があります。
- プログラムが exec を呼び出すと実験が不完全になる
パフォーマンスデータが正常に収集されているプログラムで exec(2) やその派生関数を呼び出すと、実験が異常終了します。パフォーマンスアナライザや er_print でこの実験を読み取ることはできますが、データが収集されたコンピュータ上でその実験に対してer_archive(1) を実行して、プログラムで使用したロードオブジェクトが正しくアーカイブされたことを確認する必要があります。
- 末尾呼び出し最適化で再帰情報が誤って報告される
共有オブジェクト (PIC コード) から末尾呼び出しの最適化呼び出しを行って、大域変数を参照するために大域オフセットテーブルアドレスを判別する必要がある関数で、最適化コードが再帰的として誤って報告され、実際の呼び出し元が失われます。(4656890)
- アウトライン関数の最適化で、再帰情報が誤って報告される
ほとんど実行されないコードに対してアウトライン関数を生成することによって最適化された関数では、ツールがアウトライン関数の復帰アドレスを判断できないため、再帰情報が誤って報告されます。(4800953)
- java.util.prefs.FileSystemPreferences の警告メッセージが表示された場合の解決策
java.util.prefs.FileSystemPreferences という警告メッセージが表示された場合は、次の方法を試してください。
%cd /usr/j2sdk1.4.1_01/jre (またはご使用の JRE ホーム)
%mkdir .systemPrefs
%chmod 777 .systemPrefs
- 複数の
libmtsk.
a
が複数の共有オブジェクトにある場合のアプリケーションのデッドロック複数の共有オブジェクトで、リンクされた
libmtsk.
a
のコピーがあるアプリケーションの場合、collect
コマンドを実行するとデッドロックが起こる場合があります。この問題を回避するには、collect
コマンドを実行する前に、環境変数LD_BIND_NOW
を設定します。(4881093; コンパイラのバグ 4877490)
G. 制限事項と互換性の問題
ここでは、制限事項およびシステムまたはその他のソフトウェアとの互換性の問題について説明します。
- パフォーマンスアナライザの要件
パフォーマンスアナライザを使用するには、バージョン 1.4 以降の Java[tm] 2 Software Development Kit, Standard Edition が必要です。1.4 以前のバージョンでもパフォーマンスアナライザを使用できますが、実行に失敗したり、正しく機能しなかったり、十分に動作しない可能性があります。
- マルチスレッドアプリケーションのプロファイリング
暗黙または明示的にマルチスレッド化 (libthread.so を使用) したアプリケーションから実験を収集する場合は、代替 libthread ライブラリ (/usr/lib/lwp/libthread.so か /usr/lib/lwp/64/libthread.so) がある Solaris 9 または Solaris 8 オペレーティングシステムで収集を行うことを推奨します。 デフォルトの libthread ライブラリがある Solaris 7 または Solaris 8 オペレーティングシステムを使用すると、結果的に不正確なデータが発生する可能性があることを示す警告が表示されます。
- Java プログラミング言語で作成されたアプリケーションのプロファイリング
Java プログラミング言語で作成されたアプリケーションの Java モードまたはマシンモードのプロファイルデータを収集するには、バージョン 1.4.2_02 以降の Java 2 Software Development Kit, Standard Edition を使用する必要があります。1.4.2_02 より前のバージョンの JVM ソフトウェアには、プログラムの問題発生の原因となる可能性があるバグがあります。
Java モードのプロファイリングで最適な結果を得るには、Java 2 Software Development Kit, Standard Edition の最新バージョンを使用してください。
- ハードウェアカウンタオーバーフローのプロファイリング
ハードウェアカウンタオーバーフローのプロファイリングは、UltraSPARCR III シリーズより前の UltraSPARCR III プロセッサではサポートされていません。
ハードウェアカウンタオーバーフローのプロファイリングは、Solaris 8 よりも以前のバージョンのオペレーティングシステムではサポートされていません。
UltraSPARCR III の初期バージョンのハードウェアの中には、ユーザー DTLB または ITLB のミスに基づくプロファイリングをサポートしていないものがあります。サポートしているのは、カーネルモード時の TLB カウンタだけです。
cputrack がシステムで実行されていると、cputrack がハードウェアカウンタを制御するため、コレクタはハードウェアカウンタオーバーフローデータを収集することができません。
- ライブラリへの介入
コレクタは、シグナル処理、fork と exec 呼び出し、ハードウェアカウンタライブラリ、一部のタイミング関数などさまざまなシステム関数に介入して、有効なデータを収集できるようにしています。これらの関数のいずれかをプログラムが使用すると、その動作が変わることがあります。特に、プロファイリングタイマーとハードウェアカウンタは、プロファイリングが有効な場合はプログラムで使用できず、シグナルを送出するためにシステムコールが割り込まれることはありません。この動作は、システムコールに割り込んでシグナルを送出する非同期入出力ライブラリ libaio.so の使用に影響します。コレクタライブラリ libcollector.so を事前にロードすることなく、dbx を実行中のプロセスに接続してからデータ収集を有効にした場合には、このようなライブラリへの介入は行われません。
- ソースファイルとオブジェクトファイルの検出
デバッガがプロセスに接続されたときに生成される実行可能ファイル名が、絶対パスではなく相対パスの場合があります。また、絶対パスであっても、パフォーマンスアナライザからアクセスできないパスであることがあります。同様の問題が、アーカイブ (.a) から読み込まれたオブジェ クトファイルでも発生することがあります。
パフォーマンスアナライザは、実行可能ファイルまたはオブジェクトファイルに記録されているパスからベース名 (最後の "/" に続く名前) を抽出し、次のようにしてファイルを検索します。
- addpath または setpath コマンドで指定されたディレクトリ、またはパフォーマンスアナライザの「データ表示方法の設定」ダイアログの「パスを検索」タブで設定されたとおりの順序のディレクトリで、ベース名を持つファイルを検索します。デフォルトの setpath は次のとおりです。
A. 実験のアーカイブディレクトリ
B. 現在の作業用ディレクトリ (./) - 最初に記録されていたパスを使用してファイルを検索します。
それでもファイルが見つからない場合は、エラーまたは警告を生成して、実験ファイルに当初示されたパスを示します。
パフォーマンスアナライザでソースファイルを検出できるようにするには、対象ファイルが含まれているディレクトリを検索パスに追加するか、またはカレントディレクトリからそのファイルの実際の場所を指すシンボリックリンクを設定するか、または該当するファイルを実験にコピーします。
- 実験の互換性の問題
パフォーマンスアナライザは、Forte[tm] Developer 7 ソフトウェアリリースより前のコレクタを使って作成された実験データを読み込むことはできません。
- setuid の使用
プロセスが setuid を呼び出したり、setuid ファイルを実行したりすると、コレクタはアクセス権の問題が原因で実験を生成できないことがあります。
データ収集の制限についての詳細は、collect(1) マニュアルページを参照してください。
H. 記述の誤りの訂正
現時点では新しい情報はありません。
I. 必要なパッチ
パフォーマンス解析ツールによる問題の中には、Solaris オペレーティングシステムのバグに起因するものがあります。これらのバグを修正するには、関連するパッチをインストールする必要があります。必要なパッチの一覧を入手するには、コマンドプロンプトに対して collect コマンドを引数なしで実行します。上記のパッチは、http://sunsolve.sun.com からダウンロードできます。Solaris 8 オペレーティングシステムでは、パッチをインストールする前にアップデート 5 以降のアップデートをインストールする必要があります。
以下の問題は、パッチがインストールされていない場合に、コレクタおよびパフォーマンスアナライザで発生することがあります。
- libaio を使用し、 aio_cancel() を呼び出すプログラムがデータの収集中に異常終了します。
dbx: 1@1 の状態が読めません--ファイルまたはディレクトリがありません dbx: 警告: プロセスが競合状態にありますデータの収集中にマルチスレッド実行可能ファイルで SEGV が発生します。スレッドライブラリコードでコアダンプが発生したり、SIGPROF シグナルに対する sigacthandler() でコアダンプが発生したりします。
- データ収集中にマルチスレッド実行可能ファイルで問題が発生する可能性があります。このとき、最初の項目に示したメッセージをはじめとして、種々の dbx エラーメッセージが表示されるほかに、次のような内容を報告するメッセージが表示されます。
一般的な libthread_db.so エラーデータの収集中にマルチスレッド実行可能ファイルで、クリティカルセクションでのシグナルフォルトに関連する libthread パニックを伴なう問題が発生する可能性があります。
マルチスレッド実行可能ファイルのデータが失われる可能性があります。これは、ある時点でスレッドライブラリがプロファイリングシグナルをマスクし、それ以降データがすべて失われるためです。
非結合スレッドとともにマルチプロセッサアプリケーションを実行すると、ハードウェアカウンタのオーバーフロー (SIGEMT) からの割り込みが失われて、回復不能になることがあります。
LWP に対するプロファイル割り込み (SIGPROF) が失われることがあります。この場合、表示されたデータには、それらの LPW で動作しているスレッドのスレッドプロファイルメトリックは含まれません。これは、通常、Solaris 7 オペレーティングシステムにおける非結合スレッドで発生します。
32 個以上の CPU またはスレッドを使用するアプリケーションでは、パフォーマンスデータの収集中に処理速度が急激に低下することがあります。
環境によっては、HW カウンタのプロファイリング割り込みが OS のバグを引き起こし、このために %y レジスタが壊れてしまうことがあります。その時点でレジスタが有効になっていると、アプリケーションがクラッシュすることがあります。
Copyright(C) 2004 Sun Microsystems, Inc. All rights reserved.Use is subject to license terms.