                                          更新日付： 2004 年 5 月 27 日

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

     目次

       A.はじめに 
       B.IDE からのパフォーマンスアナライザの起動 
       C.Sun Studio 9: パフォーマンスアナライザについて 
       D.新規および変更された機能 
       E.ソフトウェアの修正事項 
       F.問題点と回避策 
       G.制限事項と互換性の問題 
       H.記述の誤りの訂正 
       I.必要なパッチ 


     ------------------------------------------------------------------
     
     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] オペレーティングシステム (SPARCAE; プラットフォー
          ム版) バージョン 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 プログラミ
     ング言語で記述されたアプリケーションのプロファイル情報を収集できな
     くなる可能性があることに注意してください。Sun では、パフォーマンス
     アナライザ の将来的なリリースでも、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 オペレーティングシステムに対応しています。 
             o Java Desktop System 1.0 
             o SuSE Linux Enterprise Server 8 
             o RedHat Enterprise Linux 3 
          Linux ディストリビューションに er_kernel が含まれていないこと
          を除けば、提供ユーティリティは両方のオペレーティングシステム
          で同じです。、Linux の場合、collect コマンドの制限が多くなっ
          ています。使用できるのは時間プロファイリングおよびヒープト
          レースだけです。詳細は、collect のマニュアルページを参照して
          ください。Linux 上でマルチスレッドアプリケーションをプロファ
          イリングすることは可能ですが、現在のところ、RedHat 版 Linux 
          オペレーティングシステムでのプロファイリングでは高い率でデー
          タ矛盾が発生することが観察されています。

       2. データ空間プロファイリング 

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

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

             o er_print コマンドには、データ空間プロファイリング関係の
               オプションとして、data_objects、data_osingle、
               data_olayout という 3 つのオプションが新たに追加されてい
               ます。 
             o アナライザには、データ空間プロファイリング関係のタブとし
               て、「データオブジェクト」と「データレイアウト」という 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 を接続すると、多数のエラーが発生することがあ
          ります。

             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. アウトライン関数の最適化で、再帰情報が誤って報告される 

          ほとんど実行されないコードに対してアウトライン関数を生成する
          ことによって最適化された関数では、ツールがアウトライン関数の
          復帰アドレスを判断できないため、再帰情報が誤って報告されます。
          (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. ハードウェアカウンタオーバーフローのプロファイリング 

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

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

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

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

       5. ライブラリへの介入 

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

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

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

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

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

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

            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.

