この章では、Oracle Solaris Studio のこのリリースのパフォーマンス解析ツールに関する新機能および変更された機能について説明します。
ここでは、このリリースの Solaris Studio パフォーマンスアナライザおよび関連ツールの新機能および変更された機能について説明します。詳細は、『Oracle Solaris Studio 12.2: パフォーマンスアナライザ』『Oracle Solaris Studio 12.2: パフォーマンスアナライザ』マニュアルを参照してください。
実験の形式が拡張されましたが、現在、バージョン番号は変更されていません (10.1)。
ツールは、Oracle Solaris Studio 12.2 の FCS バージョンで作成された実験、および Studio 12 Update 1 と Studio 12 の FCS およびパッチ適用バージョンで作成された実験を読み取ることができます。
Sun Studio 12 より前のバージョンで作成された実験は、Oracle Solaris Studio 12.2 のツールで読み取ることはできません。
パフォーマンスアナライザツールの機能は次のように拡張されています。
新しい「呼び出しツリー」タブには、プログラムの動的なコールグラフがツリーとして表示され、ノードとして示される各関数呼び出しを展開したり折りたたんだりできます。関数ノードを展開すると、その関数によって行われたすべての関数呼び出しに加えて、それらの関数呼び出しのパフォーマンス測定基準が表示されます。ノードを選択すると、右側の「サマリー」タブにその関数呼び出しと呼び出し先に関する測定基準が表示されます。属性付き測定基準に対して示されるパーセンテージは、プログラムの全測定基準のパーセンテージです。
もっとも多くの時間を消費するブランチを簡単に見つけるには、いずれかのノードを右クリックして、「もっとも活動的なブランチを展開」を選択します。
呼び出しスタックに呼び出し側と呼び出し先を追加することで、一度に 1 つの呼び出しの呼び出しスタックフラグメントを中央の「スタックフラグメント」パネルに作成できます。呼び出し側はそのフラグメントを呼び出している関数であり、呼び出し先はそのフラグメントから呼び出されている関数です。次の機能が含まれます。
スタックフラグメントの関数を追加および削除すると、測定基準がフラグメント全体について計算されて、フラグメントの最後の関数の隣に表示されます。
呼び出し側を右クリックするとスタックフラグメントの先頭に関数を追加でき、呼び出し先を右クリックすると末尾に関数を追加できます。また、「スタックフラグメント」パネルの上にあるボタンを使用して、呼び出しスタックフラグメントを操作することもできます。
「スタックフラグメント」パネルの上にある「戻る」ボタンと「進む」ボタンを使用して、呼び出しスタックフラグメントに対する変更の履歴内を移動できます。
コンテキスト (右クリック) メニューを使用して、「呼び出し側-呼び出し先」タブ内のデータにフィルタを適用できます。
パフォーマンスアナライザでは、同じ実行可能ファイルで収集された実験を比較できるようになりました。この機能は部分的にのみ実装されており、今後のリリースで変更される可能性があります。現在のリリースでは、実験の比較は次のように動作します。
複数の実験または実験グループを開くと、デフォルトでデータが集計されます。
compare on を .er.rc ファイルに追加し、パフォーマンスアナライザで複数の実験または実験グループを開くと、データが比較モードで表示されます。
比較モードでは、実験またはグループのデータが隣り合った列に表示され、追加されるヘッダー行には実験またはグループの名前が表示されます。実験またはグループを区別できるように列には色で影が付けられます。
実験の比較をサポートするタブは、「関数」、「呼び出し側-呼び出し先」、「ソース」、「逆アセンブリ」、「行」、および「PC」です。いずれかのタブのコンテキストメニューから比較モードを無効および有効にできます。
また、アナライザの「データ表示設定」ダイアログの「形式」タブにある「実験の比較」オプションを使用して、比較モードを有効および無効にすることもできます。
「ソース」タブの強調表示では、ホット (CPU 使用率がもっとも高い) 行がオレンジ色で表示され、ゼロ以外の測定基準の行が黄色で表示されます。
「ソース」タブのコンテキストメニューを使用すると、次または前のホット行または非ゼロ測定基準行に移動できます。
「印刷」メニューを使用して、タイムライン、MPI タイムライン、および MPI グラフの JPG ファイルを作成できます。
HotSpot でコンパイルされたコードのソースと逆アセンブルは、記録されている場合はよりよいマッピングを生成します。
er_print コマンドはこのリリースでは次のように変更されています。
呼び出し側-呼び出し先リストを制御するための新しいコマンドが、呼び出しスタックの作成をサポートするようになりました。er_print の新しいサブコマンド cprepend、cappend、crmfirst、および crmlast は、作成している呼び出しスタックフラグメントの関数を追加または削除します。各コマンドのあとで、現在のフラグメントの呼び出し側-呼び出し先データが書き込まれます。
新しい calltree コマンドは、すべての関数の階層的な測定基準を示す、ターゲットの動的なコールグラフを出力します。
新しい describe コマンドは、実験から記録されたデータを記述して、フィルタに使用できるトークンを出力します。
HotSpot でコンパイルされたコードのソースと逆アセンブルは、記録されている場合はよりよいマッピングを生成します。
er_print コマンドを使用して、同じ実行可能ファイルで収集された実験を比較できるようになりました。この機能は部分的にのみ実装されており、今後のリリースで変更される可能性があります。現在のリリースでは、実験の比較は次のように動作します。
複数の実験または実験グループに対して er_print を呼び出すと、データが集計されます。
compare on を .er.rc ファイルに追加し、複数の実験または実験グループに対して er_print を実行すると、データが比較モードで表示されます。
比較モードでは、実験またはグループのデータが関数リスト、呼び出し側-呼び出し先リスト、およびソースと逆アセンブリリストの隣り合った列に表示されます。列は実験またはグループの読み込みの順序に表示され、追加のヘッダー行に実験またはグループの名前が表示されます。比較モードを有効および無効にするには、compare コマンドを使用します。
collect コマンドはこのリリースでは次のように変更されています。
従う子孫に対するデフォルトの設定が、-F on に変更されました。
Sun HPC ClusterTools (現在は Oracle Message Passing Toolkit と呼ばれています) の任意のリリースでの MPI 実験を、-M OMPT または -M CT で指定できます。
MPI 実験は、デフォルトで子孫プロセスにも従うようになりました。
MPI トレース実験に対する後処理が改善されています。
Oracle Enterprise Linux に対するハードウェアカウンタプロファイリングのサポートが追加されています。
ハードウェアカウンタ別名が改善され、次のプロセッサでのハードウェアカウンタプロファイリングのサポートが追加されています。
SPARC64 VI および VII
Intel Core i7: Family 6、Models 30、31、37、44、および 46 (Nehalem EP および EX を含む)
AMD Family 10h および 11h
スクリプトのプロファイリングの実験的サポートが実装されており、今後のリリースで変更される可能性があります。スクリプトをプロファイリングするには、環境変数 SP_COLLECTOR_SKIP_CHECKEXEC を設定し、スクリプト名を collect に渡します。
Java プロファイリングが、HotSpot でコンパイルされたコードのソース行マッピングにさらに詳細な情報を提供するように拡張されています。Java プロファイリング拡張機能は、JDK 1.6u20 以降の JDK 1.6 更新、および JDK 1.7.0-ea-b85 以降の JDK 1.7 更新についてサポートされています。
実験に対するデフォルトのサイズ制限が削除されています。-L オプションを使用してサイズ制限を設定できます。
dbx デバッガの collector サブコマンドは次のように変更されています。
ハードウェアカウンタ別名が改善され、次のプロセッサでのハードウェアカウンタプロファイリングのサポートが追加されています。
SPARC64 VI および VII
Intel Core i7: Family 6、Models 30、31、37、44、および 46 (Nehalem EP および EX を含む)
AMD Family 10h および 11h
実験に対するデフォルトのサイズ制限が削除されています。collector limit コマンドを使用して、サイズ制限を設定できます。
Solaris カーネルをプロファイリングするためのコマンドは、シグナル SIGINT、SIGTERM、または SIGQUIT のいずれかがプロセスに送信されたときは er_kernel が次の動作を行うように変更されています。
SIGINT、SIGTERM、または SIGQUIT をキャッチする
実験を終了する
-A off が指定されていない場合は er_archive を実行する
er_generic コマンドは、プロファイル情報を含むテキストファイルから実験を生成します。その後、シミュレートされた実験を、パフォーマンスアナライザまたは er_print コマンドを使用して調べることができます。詳細は、er_generic(1) のマニュアルページを参照してください。
デフォルトで、en_desc コマンドはすべての子孫を読み取るようになりました。
スレッドアナライザは、ソースレベルまたはバイナリレベルで計装されているコードのデータ競合の検出をサポートするようになりました。ソースレベルの計装はこのリリースでは変更されていません。
プログラムのバイナリコードを計装するには、discover ツールを使用する必要があります。このツールは、Oracle Solaris Studio に組み込まれており、discover(1) のマニュアルページで説明されています。『Oracle Solaris Studio 12.2 Discover および Uncover ユーザーズガイド』も参照してください。
データの競合を検出するためにプログラムのバイナリコードを計装するには、discover ツールの入力バイナリを次の条件でコンパイルする必要があります。
オペレーティングシステムのバージョンは、少なくとも Oracle Solaris 10 5/08 または OpenSolaris バージョン snv_70 である必要があります。
コンパイラは Sun Solaris Studio 12 Update 1 以降のリリースのものである必要があります。
いずれかのコンパイラ最適化フラグ (-xO1、-xO2、-xO3、-xO4、-xO5) を使用する必要があります。
バイナリがコンパイラオプション -xbinopt=prepare を指定してコンパイルされている場合、SPARC ベースのシステムで実行している以前のバージョンの Solaris でも discover ツールを使用できる場合があります。このコンパイラオプションについては、cc(1)、CC(1)、または f95(1) のマニュアルページを参照してください。
バイナリの名前が a.out である場合、次のコマンドで a.out_i という名前の計装されたバイナリを作成できます。
% discover -i datarace -o a.out_i a.out |
詳細は、『Oracle Solaris Studio 12.2: スレッドアナライザユーザーズガイド』または tha(1) のマニュアルページを参照してください。