er_kernel ユーティリティーを実行すると、カーネルのみ、またはカーネルと実行中の負荷の両方をプロファイリングできます。er_kernel コマンドの詳細な説明については、er_kernel (1) のマニュアルページを参照してください。
次のように入力し、実験を収集します。
% er_kernel -p on |
任意の負荷を別のシェルで実行します。
負荷が完了したら、Ctrl-C キーを押して er_kernel ユーティリティーを終了します。
デフォルトでは ktest.1.er という名前の結果の実験を、パフォーマンスアナライザまたは er_print ユーティリティーに読み込みます。
カーネルの時間プロファイルによって、「KCPU サイクル」というラベルの付いた、パフォーマンスが 1 つ生成されます。パフォーマンスアナライザでは、「関数」タブのカーネル関数について示され、「呼び出し元 - 呼び出し先」タブでは呼び出し先と呼び出し元について示され、「逆アセンブリ」タブでは命令について示されます。「ソース」タブにはデータは表示されません。カーネルモジュールは、通常、出荷時点ではファイルおよび行シンボルテーブル情報 (スタブ) を含んでいないからです。
er_kernel ユーティリティーへの -p on 引数を、高分解能プロファイルの場合は -p high に、低分解能プロファイルの場合は -p low に置き換えることができます。負荷の実行に 2 〜 20 分を要すると思われる場合は、デフォルトの時間プロファイルが適切です。実行に要する時間が 2 分未満と思われる場合は -p high を使用し、20 分を超えると思われる場合は -p low を使用します。
-t <所要時間> 引数を追加でき、これを追加すると er_kernel ユーティリティーは <所要時間> で指定された時間に従って自動的に終了します。
-t <所要時間> は、オプションで m または s 接尾辞を付けた単数で指定できます。これらのオプションは、実験を終了する時間が分か秒かを示しています。デフォルトでは、所要時間は秒です。<所要時間> はハイフンで区切られた 2 つの数で指定することもできます。これは、1 つ目の時間が経過するまでデータ収集を停止し、そして、データ収集を始める時間を示しています。2 つ目の時間が経過すると、データ収集が終了されます。2 つ目の時間がゼロの場合、初めてプログラムが停止したあと、そのプログラムの実行の終わりまで、データの収集が実行されます。実験が終了しても、ターゲットプロセスは最後まで実行できます。
-v 引数を追加すると、実行に関するより多くの情報を画面に出力できます。-n 引数を使用すると、実際には何も記録せずに、記録される実験のプレビューを表示できます。
デフォルトでは、er_kernel ユーティリティーによって生成された実験は、ktest.1.er という名前になります。この番号は、後続の実行ごとに増分されます。
プログラムでもスクリプトでも、負荷として使用する単一のコマンドがある場合、次のようにします。
次のように入力し、実験を収集します。
% er_kernel -p on load |
次のように入力し、実験を解析します。
% analyzer ktest.1.er |
er_kernel ユーティリティーは子プロセスをフォークし、休眠期間だけ一時停止したあと、子プロセスが指定された負荷を実行します。負荷が終了すると、er_kernel ユーティリティーは再び休眠期間だけ一時停止し、そのあと終了します。実験は、負荷の実行中、およびその前後の休眠期間での Solaris OS の動作を示します。休眠期間の長さは、er_kernel コマンドへの -q 引数によって秒単位で指定できます。
負荷として使用する単一のプログラムがあり、そのプロファイルをカーネルプロファイルと一緒に表示することに関心がある場合は、次のようにします。
er_kernel コマンドと collect コマンドの両方を次のように入力することにより、カーネルプロファイルとユーザープロファイルの両方を収集します。
% er_kernel collect load |
2 つのプロファイルを一緒に解析するには、次のように入力します。
% analyzer ktest.1.er test.1.er |
アナライザによって表示されるデータは、ktest.1.er からのカーネルプロファイルと test.1.er からのユーザープロファイルの両方を示します。タイムラインを使用すると、2 つの実験間の相関関係がわかります。
スクリプトを負荷として使用し、そのさまざまな部分のプロファイリングを行うには、スクリプト内の各種コマンドの前に collect コマンドと適切な引数を付加します。
er_kernel ユーティリティーを 1 つ以上の -T 引数を使用して起動すると、次のように特定のプロセスまたはスレッドのプロファイリングを指定できます。
-T pid/ tid (特定のプロセスとカーネルスレッドの場合)
-T 0/ did (特定の純カーネルスレッドの場合)
ターゲットのスレッドは、それらのスレッドについて er_kernel ユーティリティーを起動する前に作成されている必要があります。
1 つ以上の -T 引数を指定した場合は、 Kthr 時間というラベルの付いた追加メトリックが生成されます。データは、CPU 上で実行されているかどうかに関わらず、プロファイリングされたすべてのスレッドについて取得されます。プロセスが中断されているか (関数 <SLEEPING>) CPU を待っているか (関数 <STALLED>) を示すために、特殊な単一フレームの呼び出しスタックが使用されます。
Kthr 時間 メトリックが高く、KCPU サイクルメトリックが低い関数は、プロファイリングされたスレッドが何か別のイベントを待って大量の時間を消費している関数です。