Oracle Solaris Studio 12.4 Man Pages

印刷ビューの終了

更新: January 2015
 
 

er_kernel(1)

名前

er_kernel - Solaris カーネル上でのアナライザの実験の生成

形式

er_kernel args [load-command]

使用条件

使用条件

DTrace がサポートされている Solaris システム

説明

er_kernel コマンドは、一部の Solaris リリースで提供される DTrace 機能を使用して、Solaris カーネルから実験を生成できます。このデータは、GUI プログラム analyzer またはコマンド行バージョンの er_print を使用して検査できます。

er_kernel コマンドは、DTrace 権限を持つユーザーだけが使用できます。

-F 引数が指定されている場合、er_kernel は、-F への引数として指定されたパターンに一致するプロセスに関するユーザーレベルのデータも収集します。詳細は、下記の「システム全体のプロファイリング」を参照してください。

負荷を与えるオプションコマンドが指定されている場合は、er_kernel がフォークし、子は停止時間だけスリープしてから、その負荷を与えるコマンドを実行します。子が終了すると、er_kernel は、そのあとさらに停止時間だけ続行してから終了します。停止時間の期間は、-q 引数で指定できます。負荷のコマンドは指定されたとおりに起動され、コマンドまたはシェルスクリプトのどちらであってもかまいません。スクリプトである場合、そのスクリプトは、生成するすべてのコマンドの終了を待ってから終了するようにするべきです。そうしないと、実験が途中で終了する可能性があります。

オプションの -t 引数が指定されている場合、er_kernel は、-t 引数に従ってデータを収集してから終了します。

どちらも指定されていない場合、er_kernel は終了するまで実行されます。Ctrl キーを押しながら C キーをクリックするか (SIGINT)、または kill コマンドを使用し、er_kernel プロセスに SIGINT、SIGQUIT、または SIGTERM を送信することによって、いつでも終了できます。

引数

引数

引数なしで呼び出された場合、使用法に関するメッセージを出力します。

ほかのどの引数も指定せずに -h で呼び出された場合や、プロセッサがハードウェアカウンタオーバーフロープロファイリングをサポートしている場合は、ハードウェアカウンタに関する情報を含む 2 つのリストを出力します。最初のリストには、「別名を付けた」ハードウェアカウンタが含まれています。2 番目のリストには、raw ハードウェアカウンタが含まれています。詳細は、 collect (1) のマニュアルページでハードウェアカウンタオーバーフローのプロファイリングに関するセクションを参照してください。

-p option

クロックベースのプロファイルを収集します。option に使用できる値は次のとおりです。

off

クロックベースのプロファイリングを無効にします。

on

約 10 ミリ秒のデフォルトのプロファイリング間隔でのクロックベースのプロファイリングを有効にします。

lo[w]

約 100 ミリ秒の低分解能プロファイリング間隔でのクロックベースのプロファイリングを有効にします。

hi[gh]

約 1 ミリ秒の高分解能プロファイリング間隔でのクロックベースのプロファイリングを有効にします。

n

n のプロファイリング間隔でのクロックベースのプロファイリングを有効にします。

この値には、マイクロ秒を指定する u、またはミリ秒を指定する m の接尾辞の付いた整数または浮動小数点数値を指定できます。接尾辞が使用されていない場合、値はミリ秒単位であると見なされます。

この値がシステムのクロックプロファイリングの最小値より小さい場合、その値は最小値に設定されます。この値がクロックプロファイリングの分解能の倍数でない場合は、クロックプロファイリングの分解能のもっとも近い倍数に切り下げられます。クロックプロファイリングの最大値を超えた場合は、エラーが報告されます。負である場合は、エラーが報告されます。0 である場合は、クロックプロファイリングが無効になります。

データを取得するために使用される DTrace プロファイルプロバイダは、1 秒あたりのティック数の整数値でのみ使用できます。指定された値は整数のレートに変換されたあと、使用された実際のレートに対応する時間に変換して戻されます。

明示的な -p off 引数が指定されていない場合は、クロックベースのプロファイリングがデフォルトで有効になります。そのチップについてのデフォルトカウンタセットを高頻度または低頻度で要求する -h high または -h low が指定された場合、デフォルトのクロックプロファイリングも high または low に設定され、明示的な -p 引数が推奨されます。

-h option

ハードウェアカウンタオーバーフロープロファイルを収集します (DTrace cpc プロバイダを使用します)。このオプションは、collect(1) コマンドに対して指定されます。ハードウェアカウンタプロファイリングは、Oracle Solaris 11 より前のシステム上では使用できません。チップ上のオーバーフローのメカニズムにより、どのカウンタがオーバーフローしたかをカーネルが認識できる場合は、チップによって提供される数のカウンタを使用できます。それ以外の場合、指定できるカウンタは 1 つだけです。

データ領域プロファイリングは、DTrace バージョン 1.8 以降を実行している SPARC システム上で、精密カウンタについてのみサポートされます。サポートされていないシステム上でリクエストされた場合は、データ領域のフラグが無視されますが、実験は引き続き実行されます。

システムのハードウェアカウンタメカニズムは、ユーザープロファイリングのために複数のプロセスで使用できますが、いずれかのユーザープロセス、cputrack、または別の er_kernel がこのメカニズムを使用している場合、カーネルプロファイリングには使用できません。その場合、er_kernel は「HW カウンタは一時的に使用できません。システムプロファイリングに使用されている可能性があります。」と報告します。

-x option

アイドル状態の CPU からのプロファイルイベントを記録するかどうかを制御します。option に使用できる値は次のとおりです。

on

アイドル状態の CPU からのプロファイルイベントを記録しません。(デフォルト)。

off

アイドル状態の CPU からのプロファイルイベントを記録します。

-F option

カーネルやアプリケーションを含む、システム全体のプロファイリングを提供します。ユーザーレベルのプロセスのプロファイルデータを記録するかどうかを制御します。option に使用できる値は次のとおりです。

off

ユーザーレベルのプロセス上の実験を記録しません。カーネル上のみ記録します (デフォルト)。

on| all

er_kernel ユーザーが適切なアクセス権を持っているすべてのユーザーレベルのプロセスおよびカーネル上の実験を記録します。

=<regexp>

名前または PID が正規表現に一致するユーザーレベルのプロセス上の実験を記録します。ユーザーレベルのプロセスについて記録されたデータの詳細は、下記の「システム全体のプロファイリング」を参照してください。/proc ファイルシステムから er_kernel によって読み取られるプロセス名は、OS によって最大 15 文字まで (および 0 バイト) に切り捨てられます。そのように切り捨てられたプロセス名に一致するようにパターンを指定するべきです。

-t duration

指定された期間だけデータを収集します。duration には、1 つの数値のあとに、分を指定する m か秒を指定する s (デフォルト)、または - 記号で区切られたこれらの 2 つの数値のいずれかを指定できます。1 つの数値が指定されている場合、データは実行の開始から指定された時間まで収集されます。2 つの数値が指定されている場合、データは最初の時間から 2 番目の時間まで収集されます。2 番目の時間が 0 である場合、データは実行の終了まで収集されます。0 以外の数値を 2 つ指定する場合、最初の数値は 2 番目の数値未満である必要があります。

-q duration

指定された負荷を実行する前後に長さ duration (秒) の停止時間を適用します。デフォルトの期間は 3 秒です。負荷が指定されていない場合、停止時間は無視されます。

-S interval

指定された間隔 (秒単位) で定期的な標本を収集します。interval が 0 である場合は、定期的な標本を収集しません。デフォルトでは、1 秒の間隔での定期的な標本収集を有効にします。標本内に記録されたデータは er_kernel プロセスのデータであり、特に、カーネルからのタイムスタンプと実行統計が含まれています。標本はデータ内のマーカーであり、フィルタリングに使用できます。

-C comment

コメント (1 つのトークンまたは引用符付き文字列のどちらか) を実験に配置します。最大 10 個のコメントを指定できます。

-o experiment_name

記録する実験の名前として experiment_name を使用します。experiment_name 文字列は .er文字列で終わる必要があります。そうでない場合は、エラーを報告し、実験は実行しません。

-o が指定されていない場合は、stem.n.er という形式の名前を選択します。ここで、stem は文字列であり、n は数値です。-g 引数が指定されている場合は、グループ名の中で .erg 接尾辞の前にある文字列を stem 接頭辞として使用します。-g 引数が指定されていない場合は、stem 接頭辞を文字列 ktest に設定します。

名前が stem.n.er という形式で指定されておらず、かつ指定された名前が使用されている場合は、エラーメッセージを出力して終了します。名前がその形式であり、かつその名前が使用されている場合は、使用されていない n の最初に使用可能な値に対応する名前で実験を記録します。名前が変更された場合は、警告を発行します。

-l signal

特定のシグナルが er_kernel プロセスに配信された場合は常に、標本ポイントを記録します。

-y signal[,r]

signal によるデータの記録を制御します。特定のシグナルが er_kernel プロセスに配信された場合は常に、一時停止状態 (データは記録されない) と再開状態 (データが記録される) を切り替えます。オプションの ,r フラグが指定されている場合は er_kernel が再開状態で起動され、それ以外の場合は一時停止状態で起動されます。このオプションは、標本ポイントの記録には影響を与えません。

-d directory_name

directory_name ディレクトリ内に実験を配置します。何も指定されていない場合は、現在の作業ディレクトリに記録します。

-g group_name

実験を実験グループ group_name の一部であると見なします。group_name 文字列は、文字列 .erg で終わる必要があります。そうでない場合は、エラーを報告して終了します。

-L size

記録されるプロファイリングおよびトレースデータの量を sizeM バイトに制限します。この制限は、すべてのプロファイリングデータとトレースデータの合計に適用されますが、標本ポイントには適用されません。この制限値は概数にすぎないので、この値を超えることは可能です。この制限に到達したら、実験を終了します。size に使用できる値は次のとおりです。

unlimited
none

実験にサイズ制限を適用しません。

n

nM バイトの制限を適用します。n は正である (0 を超えている) 必要があります。

記録されるデータの量に対するデフォルトの制限はありません。

-A option

実行中に使用されたカーネルモジュールを、記録された実験にコピーするかどうかを制御します。option に使用できる値は次のとおりです。

on

カーネルモジュールをアーカイブし、それを実験にコピーします。

src

見つかったすべてのソースファイルと .anc ファイルを実験にコピーおよびアーカイブします。

usedsrc

記録されたデータで参照されていて、見つかったすべてのソースファイルと .anc ファイルを実験にコピーおよびアーカイブします。

off

カーネルモジュールまたはソースファイルを実験にアーカイブしません。

実験を別のマシンにコピーするか、または実験を別のマシンから読み取るには、-A on を指定するようにしてください。

-A のデフォルト設定は on です。

-n

ドライラン: データを収集しませんが、実行される実験のすべての詳細情報を出力します。-v を有効にします。

-V

現在のバージョンを出力します。これ以降に指定した引数は検査されず、これ以外の処理は行われません。

-v

実行されている実験に関する詳細情報 (現在のバージョンを含む) を出力します。

システム全体のプロファイリング

システム全体のプロファイリング

er_kernel 実験中に検出されたユーザープロセスの追尾を指定するために -F 引数が使用されている場合は、このようなユーザープロセスごとにサブ実験が作成されます。これらのサブ実験には、次の名前が付けられます。

_process-name_PID_process-pid.1.er

ユーザープロセスのサブ実験は、追尾されるプロセス (ユーザーモードまたはシステムモード) に対してイベントが発生した場合にのみデータを記録するほか、ユーザー呼び出しスタックを記録します。ユーザーのサブ実験は、ユーザーモードの collect 実験とほぼ同じです。クロックプロファイリングの場合は、ユーザー CPU 時間とシステム CPU 時間のみを記録し、待機時間は記録されません。

プロセスを追尾できるのは、er_kernel を実行しているユーザーが、追尾されるプロセスの /proc エントリを開いて読み取るためのアクセス権を持っている場合だけです。/proc からの読み取り時にプロセス名は 15 文字 (および 0 のバイト) に切り捨てられるため、切り捨てられた名前に一致するようにパターンを指定するべきであることに注意してください。

er_kernel がグローバルゾーンで実行されている場合、ほかのゾーン内のユーザープロセスにはアクセスすることも、追尾することもできません。ユーザーモード時間での疑似関数の名前は、noname-open として表示されます。

collect とは異なり、er_kernel でのデータ収集は、OpenMP ランタイム動作に関する情報も、Java ランタイム動作や Java 呼び出しスタックに関する情報も収集しません。このようなユーザーレベルのサブ実験は、マシンモードで表示される collect 実験に相当します。これらの実験の場合、ユーザーモードのデータは collect 実験では表示されません。

記録されるデータ

記録されるデータ

クロックプロファイリング

クロックプロファイリングのカーネル実験は、カーネルの初期の実験で記録されたクロックプロファイルイベントに対して、「カーネル CPU 時間」(メトリック名 kcpu) というラベルが付いた 1 つのメトリックをサポートしています。データは CPU ごとに記録され、CPU 番号は CPU として、代わりにカーネルが実行されているプロセスの PID は LWPID として、さらにカーネルスレッド ID は raw データのスレッドとして記録されます。

カーネルの初期の実験には、kcpu メトリックのデータが含まれます。CPU がシステムモードまたはアイドル状態のときは、カーネル呼び出しスタックが記録されます。CPU がユーザーモードのとき、2 フレーム呼び出しスタックの先頭フレームが次の名前になります。

<USER_MODE>

これが次の名前を持つ疑似関数を呼び出します。

<process-name_PID_process-pid>

実行されているユーザープロセスに対応します。カーネル実験では、ユーザープロセスに関する実際の呼び出しスタック情報は記録されません。

ユーザーレベルのプロセスのプロファイリングを指定するために -F が使用されている場合は、追尾されるプロセスごとのサブ実験に、ユーザーレベルの呼び出しスタックとともにユーザー CPU 時間とシステム CPU 時間のメトリックのデータが含まれます。待機時間に関するデータは含まれません。

ハードウェアカウンタプロファイリング

ハードウェアカウンタプロファイルは、初期の実験では前述のようにクロックプロファイリング実験のシステム呼び出しスタックを使用して、またユーザープロセスのサブ実験ではユーザー呼び出しスタックを使用して、指定されたカウンタのメトリックで記録されます。

初期のカーネル実験の場合、HW カウンタメトリック名の前には K_ が付きます。ユーザープロセスのサブ実験の場合、HW カウンタメトリック名は collect 実験のときと同様に提供されます。

データ領域プロファイリングでは、初期のカーネル実験には、CPU がシステムモードのときに発生したイベントのデータ参照が含まれます。CPU がユーザーモードまたはアイドルモードのときに発生したイベントでは、記録されたデータアドレスは表示されません。

ユーザープロセスの追尾を指定するために -F が使用されている場合は、データ領域プロファイリングが指定されなかったかのように、追尾されるプロセスごとにサブ実験が記録されます。(DTrace プロバイダでは、カーネルデータ参照のアドレスのみが提供されます)。

プロファイリングの統計情報

プロファイリングの統計情報

カーネルプロファイリングが終了すると、er_kernel は、ドライバに関する複数行の統計情報 (実行時エラーのすべてのカウントを含む) を書き込みます。

実行時エラー

実行時エラー

er_kernel は、実行中に DTrace イベントを処理します。DTrace は、さまざまなエラーを報告する場合があります。これらのうちのもっとも一般的なエラーは、害がないように見える無効なアドレスです。これらのエラーはカウントされると同時に、冗長モードが設定されている場合は stderr に記録されます。

DTrace によって実行されるスタックの巻き戻しは間違っていることがあり、特に x86/AMD64 コードでは、プロセスが関数のエピローグにある場合、現在のリーフフレームの呼び出し元を省略する可能性があります。これらのエラーは、カーネルスタックまたはユーザースタックのどちらでも発生する可能性があります。

DTrace のシステム設定

DTrace のシステム設定

通常、DTrace ドライバは、ユーザー root に制限されます。これを通常のユーザー username として使用するには、そのユーザーは権限が割り当てられ、かつグループ sys に属している必要があります。

ユーザーに権限を与えるには、次の行

username::::defaultpriv=basic,dtrace_kernel,dtrace_proc,dtrace_user

をファイル /etc/user_attr に追加します。

ユーザーをグループ sys に配置するには、ファイル /etc/group 内の sys 行に username を追加します。

これらの変更を行なったあと、ログアウトしてから再度ログインする必要があります。

制限事項

制限事項

er_kernel プロファイリングは、非グローバルゾーンでは機能しません。リブートの原因になる場合がある OVM バグ 13094572 が発生しないように、x86 OVM の下で実行されているゲスト OS では er_kernel プロファイリングは無効になっています。er_kernel HW カウンタプロファイリングは、Solaris 11 より前の Solaris システムでは機能しません。

関連項目

analyzer (1) , collect (1) , er_archive (1) , er_cp (1) , er_export (1) , er_mv (1) , er_print (1) , er_rm (1) , er_src (1) , dtrace (1M)

パフォーマンスアナライザマニュアル