Sun[tm] Studio 9: パフォーマンスアナライザ Readme
Description: Sun[tm] Studio 9: Performance Analyzer Readme
Keywords: Performance Analyzer readme,collect,collector,dbx,er_print,documentation,publication, Sun, Studio 9

更新日付： 2004 年 5 月 27 日

### Sun Studio 9: パフォーマンスアナライザ Readme

> #### 目次

> 1. はじめに
> 2. IDE からのパフォーマンスアナライザの起動
> 3. Sun Studio 9: パフォーマンスアナライザについて
> 4. 新規および変更された機能
> 5. ソフトウェアの修正事項
> 6. 問題点と回避策
> 7. 制限事項と互換性の問題
> 8. 記述の誤りの訂正
> 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` 以外にインストールされている場合は、ご使用のシステムにおける実際のパスを、システム管理者に確認してください。

> 1. Linux ディストリビューションの追加
> 2. データ空間プロファイリング
> 3. 派生プロセス
> 4. データ収集出力のリダイレクト
> 5. アナライザのコマンド行引数
> 6. アナライザ API 共有ライブラリのパッケージ化
> 7. Collect コマンドに対する Notes ファイルのサポート
> 8. 実験プレビューおよび実験ヘッダーでの Notes 表示
> 9. ソースおよび逆アセンブリ表示の機能強化
> 10. `er_src` コマンドの機能強化
> 11. Java メソッドの署名
> 12. ヒープトレース時の `mmap` 呼び出しの処理
> 1. Linux ディストリビューションの追加

>    Sun Studio 9 for Solaris に加えて、Sun Studio 9 for Linux でも、パフォーマンスアナライザが利用できるようになりました。次の Linux オペレーティングシステムに対応しています。

>    - Java Desktop System 1.0
>    - SuSE Linux Enterprise Server 8
>    - RedHat Enterprise Linux 3
>    Linux ディストリビューションに `er_kernel` が含まれていないことを除けば、提供ユーティリティは両方のオペレーティングシステムで同じです。、Linux の場合、collect コマンドの制限が多くなっています。使用できるのは時間プロファイリングおよびヒープトレースだけです。詳細は、`collect` のマニュアルページを参照してください。Linux 上でマルチスレッドアプリケーションをプロファイリングすることは可能ですが、現在のところ、RedHat 版 Linux オペレーティングシステムでのプロファイリングでは高い率でデータ矛盾が発生することが観察されています。
> 2. データ空間プロファイリング

>    SPARC プラットフォーム向けの C プログラムに対してデータ空間プロファイリングを行うことができます。データ空間プロファイルはキャッシュミスなどのメモリー関係のイベントの報告データをまとめたもので、メモリー関係のイベントが発生する命令だけではなく、イベントを発生させるデータオブジェクト参照についても報告します。

>    データ空間プロファイリング情報の解析結果は、次のようにコマンド行またはアナライザの GUI で表示することができます。

>    - `er_print` コマンドには、データ空間プロファイリング関係のオプションとして、`data_objects`、`data_osingle`、`data_olayout` という 3 つのオプションが新たに追加されています。
>    - アナライザには、データ空間プロファイリング関係のタブとして、「データオブジェクト」と「データレイアウト」という 2 つのタブが新たに追加されています。実験にデータ空間プロファイルが存在する場合は、これらのタブが自動的に表示されます。

>    詳しくは、マニュアルページ `analyzer`(1)、`collect`(1)、および `er_print`(1) のマニュアルページを参照してください。

> 3. 派生プロセス

>    派生プロセスの記録機能が強化され、`fork` や `exec` コマンド、その変形コマンドを使って作成されたプロセスばかりでなく、あらゆる派生プロセスを記録できるようになりました。この追加機能をサポートするため、`collect -F` コマンドに新しいオプション、`collect -F all` が追加されています。`system` コールのように、`F on` ではなく、`F all` によって処理された派生プロセスには、コード文字「c」を使った名前が付けられます。

>    派生プロセスのデータは、コマンド行ユーティリティ `er_print` を使って、またアナライザの GUI で明示的に選別表示できます。

>    詳細は、`collect`(1) のマニュアルページを参照してください。

> 4. データ収集出力のリダイレクト

>    `collect` コマンドに新しいオプション `collect -O` file が追加されました。このオプションは、`collect` からのすべての出力を file にリダイレクトします。生成されたターゲットからの出力はリダイレクトしません。

> 5. アナライザのコマンド行引数

>    アナライザコマンド (起動スクリプト) が、長い引数の二重ハイフンを受け付けるようになりました。具体的には、`--jdkhome` および `--fontsize` です。

> 6. アナライザ API 共有ライブラリのパッケージ化

>    アナライザ API 用の共有ライブラリが独立したパッケージなりました。このため、単独かつ自由に配布できます。

> 7. Collect コマンドに対する Notes ファイルのサポート

>    `collect` コマンドに新しいコマンド行オプション `collect -C` comment が追加されました。コメントは、実験の notes ファイルに追加されます。最大 10 個の `-C` 引数を適用できます。

> 8. 実験プレビューおよび実験ヘッダーでの Notes 表示

>    実験プレビューおよび実験ヘッダーに、実験の notes ファイルの内容が表示されます。

> 9. ソースおよび逆アセンブリ表示の機能強化

>    注釈付きソースおよび逆アセンブリにおける、関連するソースコンテキストから得られたコードの取り扱いが改良されました。イタリック体で赤く表示されるインデックス行は、別のファイルからのコードの挿入位置を示します。「ソース」タブでインデックス行をダブルクリックすると、「ソース」ウィンドウに、そのソースファイルが表示されます。

> 10. `er_src` コマンドの機能強化

>     コマンド行ユーティリティの `er_src` が関数リストの表示、Java .class ファイルの処理、代替ソースコンテキストからのソースおよび逆アセンブリの表示を行えるようになりました。

> 11. Java メソッドの署名

>     Java の長い名前の形式には、関数名だけではなく、完全なメソッドの署名が表示されます。

> 12. ヒープトレース時の `mmap` 呼び出しの処理

>     ヒープトレース時の `mmap` 呼び出しはメモリー割り当てとして処理されます。

> #### E. ソフトウェアの修正事項

> 次のソフトウェアの問題点が修正されています。

> 1. 中国語ロケールでアナライザのオンラインヘルプを表示すると、例外がスローされる。
> 2. 中国語ロケールでアナライザで実験を開こうとすると、コアダンプが発生する。
> 3. `-j off` およびフィルタを使って Java 実験を実行すると、liber_dbe.so で SISEGV エラーになる。
> 4. `libjvm` を分割して再読み込みしようとすると、セグメントオーバーラップの警告と「意味不明」の警告が返される。
> 5. 派生プロセスに関するメッセージが難解。
> 6. パフォーマンスアナライザおよび `er_print` で、スタックの展開内容が切りつめられたことが分からない。
> 7. `data_objects` または `data_olayout` コマンドを先に実行していないと、`data_osingle` コマンドが構造体名を認識しない。
> 8. 元のオブジェクトにアクセスできないか、元のオブジェクトが `-A copy` でアーカイブされていなかった場合、逆アセンブリリストで、呼び出し先がそのシンボル名に正しく解決されない。

> #### F. 問題点と回避策

> ここでは、これまでにわかっているソフトウェアの問題点とその回避策について説明します。最新情報については、http://docs.sun.com から入手可能なリリースノートを確認してください。

> 一部の問題は、Solaris オペレーティングシステムのバグが原因であり、これは該当するパッチをインストールすることで解消できます。詳しくは、Readme の「必要なパッチ」の節を参照してください。また、バグの中には、パフォーマンスアナライザの問題のように見えて、実際にはコレクタの問題であるものも存在します。コンパイラや `dbx` のバグもパフォーマンスアナライザに影響します。バグが原因ではない問題についても、ここで説明します。

> - パフォーマンスツールのバグ
> - Linux 固有のパフォーマンスツールのバグ
> - Solaris オペレーティングシステムのパッチで解決できる問題
> - その他の問題
> パフォーマンスツールのバグ

> 1. Java 仮想マシンが最新でないと Java プロファイルがクラッシュする

> 2. Java 同期化およびヒープトレーシングでパフォーマンス上の問題がある

> 3. `dbx` における Java プロファイルがサポートされていない

> 4. さなざまな処理で Java プロファイルのデータが失われることがある

> 5. 「概要」タブまたは「イベント」タブのデータを出力できない

> 6. 並列の指令行ではメトリックが二重にカウントされる

> 7. カラーチューザの「汎用」パネルが更新されないことがある

> 8. `er_print` ユーティリティが同一名の関数を非常に数多く検出する

> 9. アーカイブでアーキテクチャの異なるライブラリが正しく処理されないことがある

> 10. 1 つの `dbx` セッションから複数の実験を実行できない

> 1. Java 仮想マシンが最新でないと Java プロファイルがクラッシュする

>    リリース 1.4.2 のベータ版より前の JVM マシンを使用している Java プロファイリングは、Java のバグが原因でクラッシュすることがあります。古い JVM が使用されていると、実験に警告が書き込まれます。1.4.2_02 より前の JVM マシンがインストールされた Intel プラットフォームでは、必ず問題が発生します。(Java プログラミング言語のバグ 4757672, 4762958, 4763610, 4808151, 4812196, 4505739)

> 2. Java 同期化およびヒープトレースでパフォーマンスの問題がある

>    Java 同期化およびヒープトレースで、(特にヒープトレースで大容量の実験を処理する場合には) パフォーマンス上の問題があります。

> 3. `dbx` における Java プロファイルがサポートされていない

>    `dbx` のコレクタあるいは Sun Studio の IDE のコレクタグラフィカルインタフェースを使用している場合の Java プロファイルはサポートされていません。これは、JVM ソフトウェアがデバッグエージェントとプロファイルエージェントの両方をサポートできないためです。(4771337)

> 4. さまざまな処理で Java プロファイリングのデータが失われることがある

>    ガベージコレクション、`system.*` メソッドの呼び出し時、監視待ちの時、その他さまざまなタイミングでデータ収集のデータが失われることがあります。JVMは、これらのタイミングでは Java スタックを解放しません。スタックの解放があると、そのことが原因で疑似関数 `` が発生します。(4824989, 4762954)

> 5. 「概要」タブまたは「イベント」タブのデータを出力できない

>    パフォーマンスアナライザは、「概要」タブまたは「イベント」タブのデータを出力できません。関数またはロードオブジェクトの概要データを出力するには、`er_print` コマンドを使用します。(4286674)

> 6. 並列の指令行ではメトリックが二重にカウントされる

>    注釈付きソースコードの並列化コンパイラ指令行で報告されるメトリックが二重にカウントされます。コードの do、for または section ブロック中のソース行のメトリックは正しくカウントされます。また、関数レベルでの二重カウントエラーもあります。(4656193)

> 7. カラーチューザの「汎用」パネルが更新されないことがある

>    色が変更されたときに、カラーチューザの「汎用」パネルが更新されないことがあり、「リークリスト」タブと正しく作用し合いません。(4948522, 4825896)

> 8. `er_print` ユーティリティが、同一名の関数を非常に数多く検出する

>    `er_print` ユーティリティが、ソースおよび逆アセンブリのリストに同一名の関数を非常に数多く表示します。(5033124)

> 9. アーカイブでアーキテクチャの異なるライブラリが正しく処理されないことがある

>    `collect -A copy` コマンドを使用したとき、名前が同じでアーキテクチャの異なるライブラリが正しくコピーされません。(4970739)

> 10. 1 つの `dbx` セッションから複数の実験を実行できない

>     1 つの dbx セッションから複数の実験を実行しようとすると、失敗します。(4999242)

> Linux 固有のパフォーマンスツールのバグ

> 1. MP プロファイリングにおける並列スレッドからのデータ件数が実際より少ない

> 2. Java プロファイリングで JVM からの復号化された名前が表示されない

> 3. MP プログラムの標本データが間違っていることがある

> 1. MP プロファイリングにおける並列スレッドからのデータ件数が実際より少ない

>    この問題は、Red Hat および SUSE の Linux で発生します。(5020387)

> 2. Java プロファイリングで JVM からの復号化された名前が表示されない

>    この問題は、JVM 1.4.2_02 または以降の 1.4.x 環境で、サポートされていないツールの GNU 2.x を使って構築したときに発生します。(バグ番号なし)

> 3. MP プログラムの標本データが間違っていることがある

>    CPU 時間と標本時間との間に矛盾があることがあります。(5025963)

> Solaris オペレーティングシステムのパッチで解決できる問題

> 以下の問題は、Solaris オペレーティングシステムに適切なパッチをインストールすることによって解決できます。Readme の「必要なパッチ」の節も参照してください。

> 1. ハードウェアカウンタのプロファイリングでアプリケーションがクラッシュする

> 2. LWP の時間プロファイルデータの消失

> 3. ハードウェアカウンタのプロファイル割り込みの消失

> 4. 負荷がかかっているシステムの時間プロファイリングが不正確

> 1. ハードウェアカウンタのプロファイリングでアプリケーションがクラッシュする

>    特定の環境では、HW カウンタのプロファイリングの割り込みによって、UltraSPARC-III プロセッサにおける OS のバグが発生します。このバグによって、`%y` レジスタが壊れることがあります。その時点でレジスタが有効になっていると、アプリケーションがクラッシュすることがあります。この問題は Solaris 8 オペレーティングシステムでは HW2 update、Solaris 9 オペレーティングシステムでは update 4 で解決されています。この問題は、プロファイリングの分解能を低くしたり、1 つのカウンタのみを使用したりすることによって発生の頻度が減少します。(4793905)

> 2. LWP の時間プロファイルデータの消失

>    1 つまたは複数の LWP に対するプロファイリング割り込み (`SIGPROF`) が失われる可能性があります。 この問題は、結合スレッドを使用することで回避できます。また、Solaris 8 オペレーティングシステムであれば、`/usr/lib/lwp` の代替スレッドライブラリを使用して回避できます。代替スレッドライブラリは、非結合スレッド API がサポートされていても結合スレッドを使用します。(4352643)

> 3. ハードウェアカウンタのプロファイル割り込みの消失

>    非結合スレッドとともにプログラムを実行すると、ハードウェアカウンタのオーバーフロー (`SIGEMT`) からの割り込みが失われて、回復不可能になることがあります。この問題は、結合スレッドを使用することで回避できます。また、Solaris 8 オペレーティングシステムであれば、`/usr/lib/lwp` の代替スレッドライブラリを使用して回避できます。代替スレッドライブラリは、非結合スレッド API がサポートされていても結合スレッドを使用します。(4352643)

> 4. 負荷がかかっているシステムの時間プロファイリングが不正確

>    システムに負荷がかかっているときにアプリケーションをプロファイリングすると、ユーザー CPU 使用時間が実際よりかなり小さな値になることがあります (最大 20%)。計測されなかったこのユーザー CPU 時間は、システム CPU 時間または CPU 待ち時間とみなされます。(4509116)

> その他の問題

> 1. シグナルハンドラをインストールするアプリケーションで動作が変わる

> 2. `dbx` がプロセスに接続されると、データ収集で問題が発生する

> 3. 統計表示と標本の待ち CPU メトリックの値が正しくない

> 4. 短い時間間隔で時間プロファイルデータが失われる

> 5. データ収集がスタックオーバーフローで異常終了する

> 6. プログラムが `exec` を呼び出すと実験が不完全になる

> 7. 末尾呼び出し最適化で再帰情報が誤って報告される

> 8. アウトライン関数の最適化で、再帰情報が誤って報告される

> 9. `java.util.prefs.FileSystemPreferences` の警告メッセージが表示された場合の解決策

> 10. 複数の `libmtsk.a` が複数の共有オブジェクトにある場合のアプリケーションのデッドロック

> 1. シグナルハンドラをインストールするアプリケーションで動作が変わる

>    シグナルハンドラをインストールするアプリケーションのパフォーマンスデータを収集すると、コレクタまたはそのアプリケーションの動作が変わる可能性があります。検出された場所で、コレクタライブラリは、実験に警告メッセージを記録します。

>    コレクタライブラリが事前にロードされると、コレクタのシグナルハンドラは常に自分のシグナルハンドラを一次ハンドラとして再インストールし、使用しないシグナルを他のシグナルハンドラに転送します。ただし、コレクタがシステムコールに割り込むことはないため、システムコールに割り込むシグナルハンドラをインストールするアプリケーションでは、その動作が変わる可能性があります。非同期の取り消し操作に `SIGPROF` を使用する非同期入出力ライブラリ `libaio.so` の場合、非同期取り消し要求が遅れて届きます。(4397578)

>    コレクタライブラリを事前にロードせずに `dbx` をアプリケーションに接続すると、コレクタは有効になった時点でそのシグナルハンドラを一次ハンドラとしてインストールします。ただし、それ以降にインストールされたシグナルハンドラがあれば、そのハンドラの方がコレクタのシグナルハンドラに優先します。このシグナルハンドラが `SIGPROF` シグナルと `SIGEMT` シグナルをコレクタのシグナルハンドラに転送しない場合、プロファイリングデータは失われます。

> 2. `dbx` がプロセスに接続されると、データ収集で問題が発生する

>    コレクタライブラリ `libcollector.so` を事前に読み込まずに実行中のプロセスに `dbx` を接続すると、多数のエラーが発生することがあります。

>    - トレースデータを収集することはできません。トレースデータとは、同期待ちトレース、ヒープトレース、MPI トレースなどです。トレーシングデータはさまざまなライブラリへの割り込み処理によって収集されます。`libcollector.so` が事前に読み込まれていない場合、割り込み処理ができなくなります。

>    - `dbx` がプロセスに接続されたあとにシグナルハンドラがインストールされ、そのシグナルハンドラが `SIGPROF` シグナルおよび `SIGEMT` シグナルを転送しない場合、プロファイリングデータと標本データが失われます。(4397578)

>    - プログラムが非同期入出力ライブラリ `libaio.so` を使用している場合、`libaio.so` が`SIGPROF` を使用して非同期の取り消し操作を行うため、時間プロファイルデータと標本データは失われます。

>    - プログラムがハードウェアカウンタライブラリ`libcpc.so` を使用している場合、コレクタとプログラムが両方ともこのライブラリを使用するため、ハードウェアカウンタオーバーフロープロファイリング実験が破壊されます。`dbx` がプロセスに接続されたあとハードウェアカウンタライブラリが読み込まれる場合、ハードウェアカウンタ実験は成功しますが、`libcpc` ライブラリ関数への参照は `libcpc.so` の検索ではなく一般的検索によって解決されます。

>    - プログラムが `setitimer`(2) を呼び出すと、コレクタとプログラムが両方ともこのタイマーを使用しているため、時間プロファイリング実験は失われる可能性があります。

> 3. 統計表示と標本の待ち CPU メトリックの値が正しくない

>    標本パケットと広域統計に不正な値の「CPU 待ち」メトリックが記録されることがあります。これらの値はパフォーマンスアナライザの「統計」タブに表示され、「タイムライン」タブの標本の表示に影響します。(4615617)

> 4. 短い時間間隔で時間プロファイルデータが失われる

>    時間プロファイルデータは、システムクロックが外部ソースと同期処理されている最中に数秒の間、消失しているように見えることがあります。この間、システムクロックは同期がとられるまで増分されていきます。プロファイルシグナルは設定された間隔で送出されますが、プロファイルパケットに記録されているタイムスタンプには、シグナルの送出間の増分時間も含まれます。

> 5. データ収集がスタックオーバーフローで異常終了する

>    コレクタがスタックオーバーフローエラーで失敗する場合があります。これは、コレクタがアプリケーションのスタックを使用し、そのスタックサイズがコレクタで使用するには小さすぎる場合に発生します。この問題を回避するには、スタックのサイズを 8K バイト以上にします。詳細は、`limit`(1) のマニュアルページを参照してください。マルチタスク用ライブラリを使用する並列アプリケーションの場合、各スレッドのスタックサイズも STACKSIZE 環境変数を使用して設定する必要があります。

> 6. プログラムが `exec` を呼び出すと実験が不完全になる

>    パフォーマンスデータが正常に収集されているプログラムで `exec`(2) やその派生関数を呼び出すと、実験が異常終了します。パフォーマンスアナライザや `er_print` でこの実験を読み取ることはできますが、データが収集されたコンピュータ上でその実験に対して`er_archive`(1) を実行して、プログラムで使用したロードオブジェクトが正しくアーカイブされたことを確認する必要があります。

> 7. 末尾呼び出し最適化で再帰情報が誤って報告される

>    共有オブジェクト (PIC コード) から末尾呼び出しの最適化呼び出しを行って、大域変数を参照するために大域オフセットテーブルアドレスを判別する必要がある関数で、最適化コードが再帰的として誤って報告され、実際の呼び出し元が失われます。(4656890)

> 8. アウトライン関数の最適化で、再帰情報が誤って報告される

>    ほとんど実行されないコードに対してアウトライン関数を生成することによって最適化された関数では、ツールがアウトライン関数の復帰アドレスを判断できないため、再帰情報が誤って報告されます。(4800953)

> 9. `java.util.prefs.FileSystemPreferences` の警告メッセージが表示された場合の解決策

>    `java.util.prefs.FileSystemPreferences` という警告メッセージが表示された場合は、次の方法を試してください。

>    > `%cd /usr/j2sdk1.4.1_01/jre (またはご使用の JRE ホーム)`
>    > `%mkdir .systemPrefs`
>    > `%chmod 777 .systemPrefs`

> 10. 複数の `libmtsk.` `a` が複数の共有オブジェクトにある場合のアプリケーションのデッドロック

>     複数の共有オブジェクトで、リンクされた `libmtsk.` `a` のコピーがあるアプリケーションの場合、`collect`コマンドを実行するとデッドロックが起こる場合があります。この問題を回避するには、`collect` コマンドを実行する前に、環境変数 `LD_BIND_NOW` を設定します。(4881093; コンパイラのバグ 4877490)

> #### G. 制限事項と互換性の問題

> ここでは、制限事項およびシステムまたはその他のソフトウェアとの互換性の問題について説明します。

> 1. パフォーマンスアナライザの要件

> 2. マルチスレッドアプリケーションのプロファイリング

> 3. Java プログラミング言語で記述されたアプリケーションのプロファイリング

> 4. ハードウェアカウンタオーバーフローのプロファイリング

> 5. ライブラリへの介入

> 6. ソースファイルとオブジェクトファイルの検出

> 7. 実験の互換性の問題

> 8. `setuid` の使用

> 1. パフォーマンスアナライザの要件

>    パフォーマンスアナライザを使用するには、バージョン 1.4 以降の Java[tm] 2 Software Development Kit, Standard Edition が必要です。1.4 以前のバージョンでもパフォーマンスアナライザを使用できますが、実行に失敗したり、正しく機能しなかったり、十分に動作しない可能性があります。

> 2. マルチスレッドアプリケーションのプロファイリング

>    暗黙または明示的にマルチスレッド化 (`libthread.so` を使用) したアプリケーションから実験を収集する場合は、代替 libthread ライブラリ (`/usr/lib/lwp/libthread.so` か `/usr/lib/lwp/64/libthread.so`) がある Solaris 9 または Solaris 8 オペレーティングシステムで収集を行うことを推奨します。 デフォルトの libthread ライブラリがある Solaris 7 または Solaris 8 オペレーティングシステムを使用すると、結果的に不正確なデータが発生する可能性があることを示す警告が表示されます。

> 3. 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 の最新バージョンを使用してください。

> 4. ハードウェアカウンタオーバーフローのプロファイリング

>    ハードウェアカウンタオーバーフローのプロファイリングは、UltraSPARCR III シリーズより前の UltraSPARCR III プロセッサではサポートされていません。

>    ハードウェアカウンタオーバーフローのプロファイリングは、Solaris 8 よりも以前のバージョンのオペレーティングシステムではサポートされていません。

>    UltraSPARCR III の初期バージョンのハードウェアの中には、ユーザー DTLB または ITLB のミスに基づくプロファイリングをサポートしていないものがあります。サポートしているのは、カーネルモード時の TLB カウンタだけです。

>    `cputrack` がシステムで実行されていると、`cputrack` がハードウェアカウンタを制御するため、コレクタはハードウェアカウンタオーバーフローデータを収集することができません。

> 5. ライブラリへの介入

>    コレクタは、シグナル処理、`fork` と `exec` 呼び出し、ハードウェアカウンタライブラリ、一部のタイミング関数などさまざまなシステム関数に介入して、有効なデータを収集できるようにしています。これらの関数のいずれかをプログラムが使用すると、その動作が変わることがあります。特に、プロファイリングタイマーとハードウェアカウンタは、プロファイリングが有効な場合はプログラムで使用できず、シグナルを送出するためにシステムコールが割り込まれることはありません。この動作は、システムコールに割り込んでシグナルを送出する非同期入出力ライブラリ `libaio.so` の使用に影響します。コレクタライブラリ `libcollector.so` を事前にロードすることなく、`dbx` を実行中のプロセスに接続してからデータ収集を有効にした場合には、このようなライブラリへの介入は行われません。

> 6. ソースファイルとオブジェクトファイルの検出

>    デバッガがプロセスに接続されたときに生成される実行可能ファイル名が、絶対パスではなく相対パスの場合があります。また、絶対パスであっても、パフォーマンスアナライザからアクセスできないパスであることがあります。同様の問題が、アーカイブ (`.a`) から読み込まれたオブジェ クトファイルでも発生することがあります。

>    パフォーマンスアナライザは、実行可能ファイルまたはオブジェクトファイルに記録されているパスからベース名 (最後の "/" に続く名前) を抽出し、次のようにしてファイルを検索します。

>    1. `addpath` または `setpath` コマンドで指定されたディレクトリ、またはパフォーマンスアナライザの「データ表示方法の設定」ダイアログの「パスを検索」タブで設定されたとおりの順序のディレクトリで、ベース名を持つファイルを検索します。デフォルトの `setpath` は次のとおりです。

>    > A. 実験のアーカイブディレクトリ
>    > B. 現在の作業用ディレクトリ (`./`)

>    2. 最初に記録されていたパスを使用してファイルを検索します。

>    それでもファイルが見つからない場合は、エラーまたは警告を生成して、実験ファイルに当初示されたパスを示します。

>    パフォーマンスアナライザでソースファイルを検出できるようにするには、対象ファイルが含まれているディレクトリを検索パスに追加するか、またはカレントディレクトリからそのファイルの実際の場所を指すシンボリックリンクを設定するか、または該当するファイルを実験にコピーします。

> 7. 実験の互換性の問題

>    パフォーマンスアナライザは、Forte[tm] Developer 7 ソフトウェアリリースより前のコレクタを使って作成された実験データを読み込むことはできません。

> 8. `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.