                                               更新日付: 2003 年 3 月 28 日

 Sun[tm] ONE Studio 8: プログラムパフォーマンス解析ツール Readme

     目次

       A. はじめに
       B. IDE からアナライザを開始する
       C. Sun[tm] ONE Studio 8 プログラムパフォーマンス解析ツールについ
          て
       D. 新規および変更された機能
       E. ソフトウェアの修正事項
       F. 問題点と回避策
       G. 制限事項と互換性の問題
       H. 記述の誤りの訂正
       I. 必要なパッチ



     ------------------------------------------------------------------

     A. はじめに

     この文書には、Sun[tm] Open Net Environment (Sun ONE) Studio 8,
     Compiler Collection のプログラムパフォーマンス解析ツールに関する情
     報が含まれています。これらのツールには、プログラムパフォーマンスデ
     ータの収集、操作を行うコマンドと、パフォーマンスデータを表示するた
     めのグラフィカルユーザーインタフェース (パフォーマンスアナライ
     ザ)、およびコマンド行インタフェース (er_print) が含まれています。
     本書で使用するコレクタという用語は、パフォーマンスデータを収集する
     ツール群とそれらの基本ライブラリを総称しています。これらのツールと
     は、collect コマンド、dbx collector サブコマンド、IDE のパフォーマ
     ンスデータ収集機能です。

     この文章では、このリリースで導入された新機能とソフトウェアの修正事
     項、既知の問題点、制限事項、互換性の問題について説明しています。ま
     た、本書の記載内容はソフトウェアマニュアルの情報を更新または補充し
     ます。

     製品マニュアル

        * リリースノート: これらのリリースノートは http://docs.sun.com/
          で参照することも可能です。リリースノートの情報は、各製品の
          Readme ファイルの情報に優先します。
        * Compiler Collection のマニュアル: この製品のマニュアルペー
          ジ、Readme の HTML 版、およびマニュアルは、
          /opt/SUNWspro/docs/ja/index.html から参照できます。
        * Compiler Collection の開発者リソースポータル: Compiler
          Collection のドキュメントは、Compiler Collection の開発者リソ
          ースポータルでマニュアル索引を参照してください。このポ
          ータルには、技術的なトピックおよび知識ベースの項目も含まれて
          います。

     注意 - ご使用の Compiler Collection がデフォルトの /opt 以外のディ
     レクトリにインストールされている場合は、システム管理者に実際の環境
     パスを問い合わせてください。

     注意 -  この文書では、「Java 仮想マシン」および「JVM」は、Java[tm]
     プラットフォーム対応の仮想マシンを指しています。



     ------------------------------------------------------------------

     B. IDE からアナライザを開始する

     IDE からパフォーマンスアナライザを開始するには、次のいずれかの処理
     を行います。

        * メニューバーから「デバッグ」 -> 「パフォーマンスツールキッ
          ト」 -> 「アナライザを実行」を選択します。 このオプションを選
          択すると、収集された最新の実験が読み込まれます。
        * エクスプローラの「ファイルシステム」タブで実験をダブルクリッ
          クします。

     注: IDE は、Sun[tm]  ONE Studio 4 update 1, Enterprise Edition for
     Java[tm] の一部として含まれています。



     ------------------------------------------------------------------

     C. プログラムパフォーマンス解析ツールについて

     Sun[tm] ONE Studio 8 プログラムパフォーマンス解析ツールの本リリー
     スは、Solaris[tm] オペレーティング環境 (SPARC® Platform Edition)
     バージョン 7、8、9、および Solaris オペレーティング環境 (x86
     Platform Edition) バージョン 7、8、9 で使用できます。 IDE は、Sun
     ONE Studio  4 update 1, Enterprise Edition for Java[tm] の一部とし
     て含まれており、Solaris オペレーティング環境 (SPARC Platform
     Edition) バージョン 8 および 9 で使用できます。GUI を使用するに
     は、 Sun[tm] ONE Studio 4 update 1 のライセンスが必要です。 必要な
     ライセンスをインストールする方法については、『Compiler Collection
     IDE オプション README』を参照してください。

     プログラムパフォーマンス解析ツールは、プログラムのパフォーマンス統
     計プロファイルを収集し、重要なライブラリルーチンの呼び出しをトレー
     スし、表や図形を使ってそれらのデータを表示します。収集されたデータ
     は、パフォーマンスメトリックに変換されます。メトリックは、ロードオ
     ブジェクト、関数、ソース行、命令レベルのいずれかで表形式で表示され
     ます。これらのツールは、プログラム構造をナビゲートできるので、リソ
     ースの使用法、非効率性、遅延などに影響のあるコード内の関数やパスの
     識別に役立ちます。パフォーマンスアナライザ GUI では、タイムライン
     ディスプレイにパフォーマンスデータを表示することもできます。

     Sun[tm] ONE Studio Collector の本リリースでは、ベースとなる JVM
     (Java 仮想マシン) のサポートを使用して、Java[tm] プログラミング言
     語で記述されているアプリケーションをプロファイルすることができま
     す。JVM[tm] バージョン 1.4.x にはこのサポートが含まれていますが、
     実験の段階によっては、JVM の将来的なリリースで変更される可能性があ
     ります。 Sun ONE Studio Collector の本リリースを、JVM の将来的なリ
     リースで使用すると、Sun ONE Studio Collector で、Java プログラミン
     グ言語で記述されたアプリケーションのプロファイリング情報を収集でき
     ないことがあります。 Sun では、Sun ONE Studio Collector の将来的な
     リリースで、JVM プロファイリングテクノロジの変更に伴う Java プロフ
     ァイリングをサポートできると考えています。



     ------------------------------------------------------------------

     D. 新規および変更された機能

     ここでは、Sun[tm] ONE Studio 7 (Forte[tm] Developer 7) リリース以
     降、パフォーマンスツールに追加された新機能および変更された機能につ
     いて説明します。

     データ収集機能

     以下の一覧は、新たに追加または変更されたデータ収集機能の説明です。

        * 同期遅延のトレース、およびメモリー割り当てのトレースだけでな
          く、時間ベースおよび HW カウンタプロファイリングに対して
          Java[tm] プログラミング言語が、完全にサポートされました。 デ
          ータは、ターゲットのマシン表現、および Java 表現の両方に対し
          て収集されます。 libcollector に対する Java API が提供されま
          す。

        * 時間ベースのプロファイリングは、より高度な分解能のクロックを
          サポートする Solaris[tm] オペレーティング環境のバージョンで
          の、複数のシステムクロックの分解能に制限されなくなりました。
          ユーザーが引数を指定せずに collect コマンドを使用した場合は、
          サポートされているプロファイリング間隔の範囲が返されます。

        * collect コマンドの -A オプションまたは dbx collector archive
          コマンドを使用して、ロードオブジェクトの保管を制御することが
          できます。

        * 個々のスレッドに対してデータ収集を一時停止および継続するため
          の API が提供されました。

        * データ収集におけるエラー検出とレポートの機能が強化されまし
          た。

        * プログラムの動作に影響されないハードウェアカウンタでは、擬似
          関数に対してプロファイルがレポートされます。

        * メモリーアクセスイベントをカウントするハードウェアカウンタで
          は、カウンタ名の先頭に「+」を付加すると、コレクタによってアグ
          レッシブなバックトラッキングが有効になります。 イベントをトリ
          ガーした PC と仮想アドレスを記録し、データオブジェクトのメモ
          リー動作をレポートおよび表示できるようにします (C 言語のみ)。

        * libthread.so を使用して、明示的または暗黙的にマルチスレッドに
          なっているアプリケーションから実験を収集する場合には、
          Solaris[tm] 9 オペレーティング環境または Solaris[tm] 8 オペレ
          ーティング環境で代替 libthread ライブラリ (
          /usr/lib/lwp/libthread.so または
          /usr/lib/lwp/64/libthread.so) を使用することをお薦めします。
          Solaris 7[tm] オペレーティング環境または Solaris[tm] 8 オペレ
          ーティング環境でデフォルトの libthread ライブラリを使用する
          と、警告が出て、データが誤認識される可能性があることが示され
          ます。

     詳しくは、マニュアルページ collect(1)、collector(1)、および
     libcollector(3) を参照してください。

     データ表現機能

        * パフォーマンスアナライザおよび er_print に CPU によるフィルタ
          リング機能が追加されました。Solaris[tm] バージョン 9 より前の
          オペレーティング環境からは、CPU の識別情報は記録できません。
          この機能は、er_print コマンドの cpu_select および cpu_list で
          実装されています。

        * パフォーマンスツールは、メトリック値によって順序付けされた一
          覧形式でソース行および PC を表示します。これらの一覧は、パフ
          ォーマンスアナライザの「行」タブおよび「PC」タブに示され、
          er_print では lines および pcs コマンドを使用して生成されま
          す。パフォーマンスアナライザの「概要」タブには、選択したソー
          ス行のメトリックがすべて表示されます。lsummary および
          psummary コマンドを使用した er_print では、行および PC の概要
          パネルが表示されます。

        * 「タイムラインオプション」ダイアログボックスは、「タイムライ
          ン」タブとして「データ表示方法の設定」ダイアログボックスに統
          合されました。

        * 「タイムライン」タブに、LWP、スレッド、または CPU に対するデ
          ータバーを表示することができます。これらの 3 つのいずれかにつ
          いてデータを表示するには、「データ表示方法の設定」ダイアログ
          ボックスの「タイムライン」タブを使用します。

        * 「タイムライン」タブの呼び出しスタックを、ルート関数またはリ
          ーフ関数上に配置することができます。また、可視フレームの数を
          設定することができます。「データ表示方法の設定」ダイアログボ
          ックスの「タイムライン」タブを使用して選択します。

        * 関数の他に、ソース行と PC の情報が取り込めるよう、オブジェク
          トの選択が拡張されました。選択したオブジェクトはメニューバー
          に表示され、そのメトリックは「概要」タブに表示されます。選択
          したオブジェクトは、他のタブへナビゲートしたときに表示されま
          す。特に、ソースまたは逆アセンブリに切り替えると、選択した関
          数の先頭行または命令に必ず位置付けされるのではなく、選択した
          行または命令に位置付けされます。

        * 「実験ファイルの追加」または「実験を開く」ダイアログで実験を
          クリックして、実験をプレビューすることができます。選択した実
          験の説明は、ダイアログの右側のパネルに表示されます。

        * 派生プロセスの試験結果は、親プロセスの試験結果が読み込まれた
          ときに自動的に読み込まれますが、そのデータを表示することはで
          きません。派生プロセスの試験結果についてデータを表示するに
          は、パフォーマンスアナライザの「データをフィルタ」ダイアログ
          ボックスを使用するか、または er_print で sample_select コマン
          ドを使用します。

        * 「リーク一覧」タブには、リークおよび割り当てデータがグラフィ
          カルに表示され、リークまたは割り当ての呼び出しスタックと、そ
          の呼び出しスタックの関数のソースまたは逆アセンブリとの間をナ
          ビゲートすることができます。

        * アグレッシブなバックトラッキング (記録の際にカウンタ名の前に
          + 記号を付ける) で記録された HW カウンタの実験では、データオ
          ブジェクトに関するレポート、およびアナライザの新しい「データ
          オブジェクト」タブを表示することができます。このタブは、er.rc
          ファイルの datamode on レコードによって、または「データ表示方
          法の設定」ダイアログから有効にすることができます。

        * Java [tm] プログラミング言語で記述されたアプリケーションの実
          験は、"on"、"expert" または "off" に設定された Java モードで
          使用することができます。

        * アナライザおよび er_print は、実行可能ファイル、オブジェク
          ト、およびソースファイルへのパスをマッピングする方法をサポー
          トしています。後述の「ソースおよびオブジェクトファイルの検索
          」を参照してください。

        * アナライザおよび er_print で、エラー検出とレポートの機能が改
          良されました。

     詳しくは、マニュアルページ analyzer(1) と er_print(1)、およびパフ
     ォーマンスアナライザオンラインヘルプを参照してください。



     ------------------------------------------------------------------

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

     Forte[tm] Developer 7 の以下の問題点は修正されました。

       1. Java[tm] プログラミング言語で記述されたマルチスレッドのアプリ
          ケーションで、プロファイリングが失敗することがある

       2. LD_PRELOAD および LD_AUDIT の _32 または _64 ビット派生環境変
          数が設定されていると、欠陥のある実験が生成される

       3. 収集関数の MPI 時間の値が大きすぎる

       4. 同じ実験の実装を何度も再ロードするとコアダンプが発生する

       5. 32 個を超える CPU に対するスケーラビリティの低下



       1. Java[tm] プログラミング言語で記述されたマルチスレッドのアプリ
          ケーションでプロファイリングが失敗することがある

          Java プログラミング言語で記述されたマルチスレッドのアプリケー
          ションに記録されている実験を読み込むときに、パフォーマンスア
          ナライザと er_print が失敗することがあります。 実験のデータは
          正しく記録されません。(4649137)

       2. LD_PRELOAD および LD_AUDIT の _32 または _64 ビット派生環境変
          数が設定されていると、欠陥のある実験が生成される

          collect コマンドは、LD_PRELOAD_32、LD_PRELOAD_64、
          LD_AUDIT_32、または LD_AUDIT_64 の環境変数のいずれかが設定さ
          れていると、空の実験を生成します。 この問題を回避するには、デ
          ータ収集にdbx collectorコマンドを使用します。

          この問題は、パッチ 111705-01 を適用することで、すでに修正して
          います。

       3. 収集関数の MPI 時間の値が大きすぎる

          収集処理の MPI 時間が、収集のメンバー数のファクタによって実際
          より多くカウントされます。 (4811269)

       4. 同じ実験を何度も再ロードするとコアダンプが発生する

          同じ実験を何度も再ロードすると、アナライザでコアダンプが発生
          します (4748944)

       5. 32 個を超える CPU に対するスケーラビリティの低下

          32 個以上の CPU またはスレッドを使用するアプリケーションで
          は、パフォーマンスデータの収集中に処理速度が急激に低下するこ
          とがあります。 (4273174, 4304367)





  ------------------------------------------------------------------------

F. 問題点と回避策

ここでは、これまでにわかっているソフトウェアの問題点とその回避策について説明
します。一部の問題は、パッチで修正することができます。 更新情報については、
http://sun.co.jp/software/sundev/suncc/hotnews.html のアップデート情報を参照
してください。

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



   * パフォーマンスツールのバグ

   * Solaris[tm] オペレーティング環境のパッチで訂正できる問題

   * その他の問題



パフォーマンスツールのバグ

  1. Java[tm] 仮想マシンで Java プロファイリングがクラッシュすることがある

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

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

  4. Intel プラットフォームで Java プロファイルが失敗することがある

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

  6. パフォーマンスアナライザは 2G バイト以上のデータを扱えない

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

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

  9. 共有されているいくつかのオブジェクトでデータが破棄される

 10. 複数の実験について、<選択されている実験の合計> の統計が誤っている



  1. Java[tm] 仮想マシンで Java プロファイリングがクラッシュすることがある

     リリース 1.4.2 のベータ版より前の JVM[tm] マシンを使用している Java プ
     ロファイリングは、Java の バグが原因でクラッシュすることがあります。ま
     た、それ以降の JVM[tm] マシンでもクラッシュすることがあります (Java プ
     ログラミング言語のバグ 4757672、4762958、4763610、4808151、4812196)

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

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

  3. dbx における Java プロファイリングがサポートされていない

     dbx コレクタを使用した Java プロファイリング、または SunONEStudio IDE
     のコレクタのグラフィカルインタフェースを使用した Java プロファイリング
     は、まだサポートされていません (4771337)

  4. Intel プラットフォームの Java プロファイリングが失敗することがある

     Intel プラットフォームにおいて Java モードでデータ収集を行うと、データ
     収集が失敗することがあります。これは、JVM [tm] ソフトウェアの必要な関数
     に明確な不具合があるためです (Java プログラミング言語のバグ 4505739)

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

     ガベージコレクション、 system.* メソッドのコール時、モニター待ちのと
     き、およびその他にもさまざまタイミングで、データ収集のデータが失われる
     ことがあります。 JVM[tm] は、これらのタイミングでは Java スタックを解放
     しません (4824989、4762954)

  6. パフォーマンスアナライザで 2G バイト以上のデータを扱えない

     パフォーマンスアナライザは約 2G バイト以上のデータを読み取って処理する
     ことができません。er_print を使用すると、全体のデータサイズが 2G バイト
     を超える 1 つまたは複数の実験を解析できます。その他に、収集パラメータを
     制御して記録するデータを減らしたり、プログラム全体ではなく一部分に関し
     てのみデータを収集したり、データ制限を設定するなどの回避策があります。
     詳しくは、collect(1)、collector(1)、libcollector(3) マニュアルページ、
     および『プログラムパフォーマンスの解析』マニュアルを参照してください。
     (4505739)

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

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

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

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

  9. 共有されているいくつかのオブジェクトでデータが破棄される

     同じ環境のもとで、アナライザは誤って、共有している 2 つのオブジェクトが
     オーバーラップしているとみなして、最初に記録されているオブジェクトから
     データを破棄することがあります。 アナライザは、共有オブジェクトのテキス
     トおよびデータセグメントが隣接してマップされていると仮定しますが、隣接
     していない場合もあります (4819207)。

 10. 複数の実験で、<選択されている実験の合計> の統計が誤っている

     複数の実験を読み込んだときに、<選択されている実験の合計> の統計が間違っ
     ています (4834122)。ただし、個別の実験の統計データは正しくなります。



Solaris[tm] オペレーティング環境のパッチで訂正できる問題

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

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

  2. LWP のクロック関係のプロファイルデータの消失

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

  4. 負荷がかかっているシステムのクロックベースのプロファイリングが不正確



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

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

  2. LWP のクロック関係のプロファイルデータの消失

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

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

     非結合スレッドとともにプログラムを実行すると、ハードウェアカウンタのオ
     ーバーフロー (SIGEMT) からの割り込みが失われて、回復不可能になることが
     あります。この問題は、結合スレッドを使用することで回避できます。また、
     Solaris[tm] 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. アウトライン関数の最適化で、再帰情報が誤って報告される

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



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

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

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

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

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

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

        o トレースデータを収集することはできません。トレースデータとは、同期
          待ちトレース、ヒープトレース、MPI トレースなどです。トレースデータ
          は、さまざまなライブラリに介入することによって収集されますが、
          libcollector.so が事前にロードされていない場合、他のライブラリに介
          入することができません。

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

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

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

        o プログラムが 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. リンクが最適化された実行可能ファイルでソースが表されない

     リンクが最適化されている実行可能ファイルでは、実行可能ファイルのソース
     を表示するのに正しい行番号情報が必要ですが、パフォーマンスツールは、オ
     ブジェクトファイルの誤った情報を参照しています。 この問題の対策は、オブ
     ジェクトファイルを削除または名前変更して、ツールが実行可能ファイルを参
     照するようにすることです (4804467)

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

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

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

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

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



  ------------------------------------------------------------------------

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

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

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

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

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

  4. ライブラリへの介入

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

  6. 実験の互換性の問題

  7. setuid の使用



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

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

  2. Java[tm] プログラミング言語で記述されているアプリケーションのプロファイ
     リング

     Java[tm] プログラミング言語で記述されているアプリケーションで Java モー
     ドのプロファイリングデータを収集するには、バージョン 1.4.1 以降の Java
     2 Software Development Kit, Standard Edition を使用する必要があります。
     Java プログラミング言語で記述されているアプリケーションでマシンモードの
     プロファイリングデータを収集するには、バージョン 1.4.0 以降のものを使用
     する必要があります。 JVM[tm] ソフトウェアにはバグがあり、これらのバグに
     よって、1.4.2 ベータより前のバージョンではプログラムの実行が失敗する場
     合があります。それ以降のバージョンでも、(頻度は少なくなりますが) 失敗す
     る場合があります。

     Java モードのプロファイリングで最適な結果を得るには、Java 2 Software
     Development Kit, Standard Edition の最新バージョンを使用してください。

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

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

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

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

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

  4. ライブラリへの介入

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

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

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

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

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

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

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

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

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

  6. 実験の互換性の問題

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

  7. setuid の使用

     プロセスが setuid を呼び出したり、setuid ファイルを実行したりすると、コ
     レクタはアクセス権の問題が原因で実験を生成できないことがあります。

データ収集の制限についての詳細は、 collect(1) マニュアルページを参照してくだ
さい。



  ------------------------------------------------------------------------

H. 記述の誤りの訂正

現時点では新しい情報はありません。



  ------------------------------------------------------------------------

I. 必要なパッチ

パフォーマンス解析ツールによる問題の中には、Solaris[tm] オペレーティング環境
のバグに起因するものがあります。これらのバグを修正するには、関連するパッチを
インストールする必要があります。必要なパッチの一覧を入手するには、コマンドプ
ロンプトに対して collect コマンドを引数なしで実行します。上記のパッチは、
http://sunsolve.sun.com からダウンロードできます。Solaris 8[tm] オペレーティ
ング環境では、パッチをインストールする前にアップデート 5 以降のアップデート
版をインストールする必要があります。

以下の問題は、パッチがインストールされていない場合に、コレクタおよびパフォー
マンスアナライザで発生することがあります。

   * libaio を使用し、 aio_cancel() を呼び出すプログラムがデータの収集中に異
     常終了します。

     dbx:l@1 の状態が読めません -- ファイルまたはディレクトリがありません
     dbx: 警告:プロセスが競合状態にあります。

   * データの収集中にマルチスレッド実行可能ファイルで SEGV が発生します。ス
     レッドライブラリコードでコアダンプが発生したり、SIGPROF シグナルに対す
     る sigacthandler() でコアダンプが発生したりします。

   * データ収集中にマルチスレッド実行可能ファイルで問題が発生する可能性があ
     ります。このとき、最初の項目に示したメッセージをはじめとして、種々の
     dbx エラーメッセージが表示されるほかに、次のような内容を報告するメッセ
     ージが表示されます。

     一般的な libthread_db.so エラー

   * データの収集中にマルチスレッド実行可能ファイルで、クリティカルセクショ
     ンでのシグナルフォルトに関連する libthread パニックを伴なう問題が発生す
     る可能性があります。

   * マルチスレッド実行可能ファイルのデータが失われる可能性があります。これ
     は、ある時点でスレッドライブラリがプロファイリングシグナルをマスクし、
     それ以降データがすべて失われるためです。

   * 非結合スレッドとともにマルチプロセッサアプリケーションを実行すると、ハ
     ードウェアカウンタのオーバーフロー (SIGEMT) からの割り込みが失われて、
     回復不能になることがあります。

   * LWP に対するプロファイル割り込み (SIGPROF) が失われることがありますこの
     場合、表示されたデータには、それらの LPW で動作しているスレッドのスレッ
     ドプロファイルメトリックは含まれません。この問題は、 Solaris 7 オペレー
     ティング環境の非結合スレッドでもっとも頻繁に発生します。

   * 32 個以上の CPU またはスレッドを使用するアプリケーションでは、パフォー
     マンスデータの収集中に処理速度が急激に低下することがあります。

   * 環境によっては、HW カウンタのプロファイリング割り込みが OS のバグを引き
     起こし、このために %y レジスタが壊れてしまうことがあります。その時点で
     レジスタが有効になっていると、アプリケーションがクラッシュすることがあ
     ります。



  ------------------------------------------------------------------------

Copyright © 2003 Sun Microsystems, Inc. All rights reserved. Use is
subject to license terms.
