trapstat - トラップ統計の報告
/usr/sbin/trapstat [-t | -T | -e entry] [-C processor_set_id | -c cpulist] [-P] [-a] [-A cor|soc|bins [-m]] [-k keys] [-o num] [-r rate | [interval [count]] | command [args]...]
/usr/sbin/trapstat -O statfile [-t | -T | -e entry] [-C processor_set_id | -c cpulist] [-a] [-r rate | [interval [count]] | command [args]...]
/usr/sbin/trapstat -I statfile [-A cor|soc|bins [-m]] [-k keys] [-o num]
/usr/sbin/trapstat -l [-P] [-t | -T]
trapstat ユーティリティーは、UltraSPARC ベースシステムの実行時のトラップ統計を収集して表示します。デフォルトの出力は、トラップタイプと CPU ID から成るテーブルであり、テーブルの各行がトラップタイプを示し、テーブルの各列が CPU を示します。標準出力が端末の場合、テーブルには端末の幅にちょうど収まるだけの数の列のデータが含まれ、標準出力が端末以外の場合、テーブルには最大で 6 列のデータが含まれます。デフォルトでは、すべての CPU のデータが収集され表示されます。データが 1 つのテーブルに収まらない場合は、複数のテーブルにまたがって出力されます。データの収集および表示の対象となる CPU のセットは、必要に応じて –c または –C オプションを使って指定できます。
–r オプション、–a オプション、またはコマンド引数が指定されていないかぎり、テーブルの各エントリに表示される値は 1 秒あたりのトラップ数に相当します。–r オプションが指定されている場合、その値は指定されたサンプリングレートで示される間隔でのトラップ数に相当します。–a オプションが指定されている場合、その値は trapstat が呼び出された以降に累積されたトラップ数に相当します。コマンド引数が指定されている場合、その値はコマンドの存続期間全体にわたって累計されたトラップ数に相当します。
デフォルトでは、trapstat は 1 秒間に 1 回データを表示し、永久に実行されます。この動作は、必要に応じて –r オプションまたは interval および count パラメータで制御できます。–r オプション引数は、データをサンプリングして表示する速度を 1 秒あたりの回数で指定します。interval は秒単位で指定され、count は終了までに実行される間隔の数を示します。あるいは、command を指定することもできます。この場合、trapstat は指定されたコマンドを実行し、そのコマンドが終了するまで実行し続けたあと、累積されたデータを表示します。interval は正の整数を取ります。目的の command が整数と区別できない場合は、command のフルパスを指定する必要があります。–r、interval、または command のいずれか 1 つのみを使用できます。
UltraSPARC システムでは、オペレーティングシステムをトラップすることで、トランスレーションルックアサイドバッファー (TLB) ミスを処理できます。TLB ミスのトラップは、一部のワークロードの全体的なシステムパフォーマンスの重要なコンポーネントになることがあります。–t オプションはこれらのトラップに関する詳細な情報を提供します。このオプションを使って trapstat を実行すると、TLB ミスのトラップの比率とそれらのトラップの処理に費やされる時間の割合の両方が表示されます。また、変換格納バッファー (TSB) 内でヒットする TLB ミスは、TSB 内でさらにミスする TLB ミスと区別されます。(TSB とは、TLB を迅速に満たすことができるように変換エントリキャッシュとして使用されるソフトウェア構造です。これについては、『UltraSPARC II User's Manual』に詳しく説明されています。)TLB および TSB ミス情報は、さらにユーザーモードおよびカーネルモードのミスに分けられます。
TLB リーチを超えるワーキングセットを使用するワークロードは、TLB でのミスにかなりの時間を費やす可能性があります。そのようなワークロードに対応するために、オペレーティングシステムは複数のページサイズをサポートしています。ページサイズが大きいほど、実質的な TLB リーチが増え、それによって TLB ミスの数が減ります。ページサイズと TLB ミス率との関係を理解する上での手掛かりとなるように、trapstat では必要に応じて –T オプションを使用して、ページサイズごとに分類された詳細な TLB ミス情報を提供します。–T オプションによって提供される情報は、–t オプションによって提供される上位集合です。–t と –T のいずれかのみを指定できます。
サポートしているオプションは、次のとおりです。
秒ごとまたは間隔ごとの率ではなく、単調に増えていく累積値としてトラップ数を表示します。
出力をコア ID で集計します。同じコア ID のデータ行は、1 行に集計されます。デフォルトでは、列は小計で置き換えられます。–m オプションでは、代わりに列の平均を出力します。
出力をソケット ID で集計します。同じソケット ID のデータ行は、1 行に集計されます。デフォルトでは、列は小計で置き換えられます。–m オプションでは、代わりに列の平均を出力します。
各サンプリング期間内で少ない方の数のビンに列を集計して、表示される順にグループ化します。小計ではなく算術平均を計算するには、–m オプションを使用できます。–k ソートオプションを使用して、ビン化の段階の前に行の順序を変更できます。
ID 別の集計 (–A cor|soc) は、ソート (–k) 前に処理されます。bin 別のグループ化 (–A bins) が次に行われます。最後に、間隔ごとに表示される出力行の数は、–o によって制限されることがあります。
cpulist によって指定された CPU でのみ trapstat を有効にします。
cpulist は、単一のプロセッサ ID (4 など)、一連のプロセッサ ID (4-6 など)、またはコンマで区切られたプロセッサ ID またはプロセッサ ID の範囲のリスト (4,5,6 または 4,6-8 など) にできます。
processor_set_id によって指定されたプロセッサセット内の CPU でのみ trapstat を有効にします。
trapstat は、指定されたプロセッサセット内の CPU が必ず反映されるようにその出力を変更します。CPU がそのセットに追加された場合、trapstat はその追加された CPU が含まれるようにその出力を変更します。CPU がそのセットから削除された場合、trapstat はその削除された CPU が除外されるようにその出力を変更します。指定できるプロセッサセットは最大 1 つです。
entrylist によって指定されたトラップテーブルエントリに対してのみ trapstat を有効にします。トラップテーブルエントリは、トラップ番号またはトラップ名によって指定できます (たとえば、level–10 のトラップは 74、0x4A、0x4a、または level-10 として指定できます)。
entrylist は、単一のトラップテーブルエントリまたはコンマで区切られたトラップテーブルエントリのリストにできます。指定されたトラップテーブルエントリが有効でない場合、trapstat は有効なすべてのトラップテーブルエントリのテーブルを名前と値で出力します。有効なトラップテーブルエントリの一覧は、『The SPARC Architecture Manual, Version 9』および『Sun Microelectronics UltraSPARC II User's Manual』にも記載されています。–e オプションに加えて、解析可能オプション (–P) も指定した場合、データの形式は –P オプションの説明で指定されているとおりです。
以前に statfile 内に保存したデータを再実行します。–O を指定して、再実行用のデータファイルを作成します。このオプションが特に役立つのは、多数の CPU を搭載したマシンの統計情報を分析する場合です。ファイルは、異なるソートおよび集計オプションを使用して何度も再処理されることがあります。
データの解釈に役立つように、データの収集に使われた元のコマンドが出力のいちばん上に表示されます (–P が指定されている場合を除く)。
–I オプションには、–O、–T、–t、–e、–c、–C、–a、および –r オプションとの互換性がありません。それを interval および count 指定またはコマンドパラメータとともに使用することはできません。
各サンプリング期間内の行を、key1、次に key2、という具合に最上位から最下位へとソートします。各鍵には、level-10 や u-itlb-miss などの任意の列ヘッダーを trapstat 出力で指定できます。
trapstat –l を使用してすべてのイベント名を表示します。–lt または –lT を使用して、TLB 形式の鍵名を表示します。解析可能なリストでは、–l を –P とともに使用します。
トラップテーブルエントリを一覧表示します。デフォルトでは、すべての有効なトラップ番号、その名前、および簡単な説明を含むテーブルが表示されます。トラップ名は、デフォルトの出力と、–e 引数の entrylist パラメータの両方で使用されます。–l オプションに加えて、解析可能オプション (–P) も指定した場合、データの形式は次のとおりです。
|
最初の 3 つのフィールドは空白で区切られます。最後のフィールドには空白を含めることができます。この形式が変更される場合は、既存のフィールドとの互換性が維持されます。
–l のほかの使用法については、–k、–t、および –T オプションを参照してください。
複数の CPU 上のデータの集計に –A オプションが使用される場合に、合計ではなく算術平均値を表示します。
ソートおよび集計オプションの適用後に、各サンプリング期間内の最初の num 行のみを表示します。
収集されたデータを statfile に保存します。このデータは、–I を使用してあとで再実行できます。
ファイル名が — (ハイフン) の場合、標準出力に書き込みます。
–O の目的は、指定された全データを取得することです。これには、データ整理オプション: –A、–k、–m、および –o との互換性はありません。statfile 形式は固定であるため、–P オプションを –O とともに使用することはできません。
解析可能な出力を生成します。ほかのデータ収集変更オプション (つまり、–t または –T) を指定しないで実行した場合、または –e を指定して実行した場合、trapstat の解析可能な出力には次の形式が含まれます。
|
各フィールドはスペースで区切られています。形式が変更された場合、それはフィールド 6 から始まる潜在的に新しいフィールドを追加することで変更されます。現存しているフィールドは変わりません。
サンプリングレートが 1 秒ごとの rate サンプル数になるように明示的に設定します。このオプションを指定した場合、trapstat の出力が 1 秒ごとのトラップ数からサンプリング間隔ごとのトラップ数に変わります。command または interval パラメータとともに使用できません。
TLB/TSB 統計を有効にします。
主要な 4 列のデータ (itlb-miss、itsb-miss、dtlb-miss、および dtsb-miss) を含むテーブルが表示されます。これらの列には、対応するイベントの発生率と、そのイベントの処理に費やされる CPU 時間の割合の両方が含まれています。テーブルの行は CPU (–A が指定された場合はコア、ソケット、またはビン) に対応しており、それぞれに 2 つの行が使用されます。1 行はユーザーモードのイベント用 (u で示される)、もう 1 行はカーネルモードのイベント用 (k で示される) です。行ごとに、CPU 時間の割合が合計されて、右端の列に表示されます。CPU は実線で表されます。–t オプションに加えて、解析可能オプション (–P) も指定した場合、データの形式は次のとおりです:
|
各フィールドはスペースで区切られています。形式を変更した場合、それはフィールド 12 から始まる潜在的に新しいフィールドを追加することで変更されます。現存しているフィールドは変わりません。
TLB/TSB 統計 (ページサイズ情報を含む) を有効にします。–t オプションと同様に、主要な 4 列のデータ: (itlb-miss、itsb-miss、dtlb-miss、および dtsb-miss) を含むテーブルが表示されます。これらの列には、対応するイベントの絶対数と、そのイベントの処理に費やされる CPU 時間の割合の両方が含まれています。テーブルの行は CPU (–A が指定された場合はコア、ソケット、またはビン) に対応しており、CPU ごとに 2 組の行が使用されます。1 組はユーザーレベルのイベント用 (u で示される)、もう 1 組はカーネルレベルのイベント用 (k で示される) です。同様に各組にはサポートされているページサイズと同じ数だけの行が含まれています (getpagesizes(3C) を参照)。行ごとに、CPU 時間の割合が合計されて、右端の列に表示されます。これらの 2 組は波線で表されます。CPU は実線で表されます。–T オプションに加えて、解析可能オプション (–P) も指定した場合、データの形式は次のとおりです。
|
各フィールドはスペースで区切られています。形式が変更された場合、それはフィールド 13 から始まる潜在的に新しいフィールドを追加することで変更されます。現存しているフィールドは変わりません。
オプションを指定しないで trapstat を実行すると、トラップタイプと CPU のテーブルが表示されます。デフォルトの端末幅には最大で 6 列収まります。(この例にあるように) CPU の数が 6 を超える場合は、複数のテーブルが表示されます。
example# trapstat vct name | cpu0 cpu1 cpu4 cpu5 cpu8 cpu9 ------------------------+------------------------------------------------------ 24 cleanwin | 6446 4837 6368 2153 2623 1321 41 level-1 | 100 0 0 0 1 0 44 level-4 | 0 1 1 1 0 0 45 level-5 | 0 0 0 0 0 0 47 level-7 | 0 0 0 0 9 0 49 level-9 | 100 100 100 100 100 100 4a level-10 | 100 0 0 0 0 0 4d level-13 | 6 10 7 16 13 11 4e level-14 | 100 0 0 0 1 0 60 int-vec | 2607 2740 2642 2922 2920 3033 64 itlb-miss | 3129 2475 3167 1037 1200 569 68 dtlb-miss | 121061 86162 109838 37386 45639 20269 6c dtlb-prot | 997 847 1061 379 406 184 84 spill-user-32 | 2809 2133 2739 200806 332776 454504 88 spill-user-64 | 45819 207856 93487 228529 68373 77590 8c spill-user-32-cln | 784 561 767 274 353 215 90 spill-user-64-cln | 9 37 17 39 12 13 98 spill-kern-64 | 62913 50145 63869 21916 28431 11738 a4 spill-asuser-32 | 1327 947 1288 460 572 335 a8 spill-asuser-64 | 26 48 18 54 10 14 ac spill-asuser-32-cln | 4580 3599 4555 1538 1978 857 b0 spill-asuser-64-cln | 26 0 0 2 0 0 c4 fill-user-32 | 2862 2161 2798 191746 318115 435850 c8 fill-user-64 | 45813 197781 89179 217668 63905 74281 cc fill-user-32-cln | 3802 2833 3733 10153 16419 19475 d0 fill-user-64-cln | 329 10105 4873 10603 4235 3649 d8 fill-kern-64 | 62519 49943 63611 21824 28328 11693 108 syscall-32 | 2285 1634 2278 737 957 383 126 self-xcall | 100 0 0 0 0 0 vct name | cpu12 cpu13 cpu14 cpu15 ------------------------+------------------------------------ 24 cleanwin | 5435 4232 6302 6104 41 level-1 | 0 0 0 0 44 level-4 | 2 0 0 1 45 level-5 | 0 0 0 0 47 level-7 | 0 0 0 0 49 level-9 | 100 100 100 100 4a level-10 | 0 0 0 0 4d level-13 | 15 11 22 11 4e level-14 | 0 0 0 0 60 int-vec | 2813 2833 2738 2714 64 itlb-miss | 2636 1925 3133 3029 68 dtlb-miss | 90528 70639 107786 103425 6c dtlb-prot | 819 675 988 954 84 spill-user-32 | 175768 39933 2811 2742 88 spill-user-64 | 0 241348 96907 118298 8c spill-user-32-cln | 681 513 753 730 90 spill-user-64-cln | 0 42 16 20 98 spill-kern-64 | 52158 40914 62305 60141 a4 spill-asuser-32 | 1113 856 1251 1208 a8 spill-asuser-64 | 0 64 16 24 ac spill-asuser-32-cln | 3816 2942 4515 4381 b0 spill-asuser-64-cln | 0 0 0 0 c4 fill-user-32 | 170744 38444 2876 2784 c8 fill-user-64 | 0 230381 92941 111694 cc fill-user-32-cln | 8550 3790 3612 3553 d0 fill-user-64-cln | 0 10726 4495 5845 d8 fill-kern-64 | 51968 40760 62053 59922 108 syscall-32 | 1839 1495 2144 2083 126 self-xcall | 0 0 0 0使用例 2 CPU のフィルタリングを指定して trapset を使用する
–c オプションを使用すると、trapstat が有効になる CPU を制限できます。この例では、CPU 1 と、12 - 15 の CPU に制限します。
example# trapstat -c 1,12-15 vct name | cpu1 cpu12 cpu13 cpu14 cpu15 ------------------------+--------------------------------------------- 24 cleanwin | 6923 3072 2500 3518 2261 44 level-4 | 3 0 0 1 1 49 level-9 | 100 100 100 100 100 4d level-13 | 23 8 14 19 14 60 int-vec | 2559 2699 2752 2688 2792 64 itlb-miss | 3296 1548 1174 1698 1087 68 dtlb-miss | 114788 54313 43040 58336 38057 6c dtlb-prot | 1046 549 417 545 370 84 spill-user-32 | 66551 29480 301588 26522 213032 88 spill-user-64 | 0 318652 111239 299829 221716 8c spill-user-32-cln | 856 347 331 416 293 90 spill-user-64-cln | 0 55 21 59 39 98 spill-kern-64 | 66464 31803 24758 34004 22277 a4 spill-asuser-32 | 1423 569 560 698 483 a8 spill-asuser-64 | 0 74 32 98 46 ac spill-asuser-32-cln | 4875 2250 1728 2384 1584 b0 spill-asuser-64-cln | 0 2 0 1 0 c4 fill-user-32 | 64193 28418 287516 27055 202093 c8 fill-user-64 | 0 305016 106692 288542 210654 cc fill-user-32-cln | 6733 3520 15185 2396 12035 d0 fill-user-64-cln | 0 13226 3506 12933 11032 d8 fill-kern-64 | 66220 31680 24674 33892 22196 108 syscall-32 | 2446 967 817 1196 755使用例 3 TLB 統計を指定して trapstat を使用する
–t オプションは、TLB ミスの処理に費やされる時間など、詳細な TLB 統計を表示します。次の例は、マシンが D-TLB ミスの処理だけで 14.1 パーセントの時間を費やしていることを示しています。
example# trapstat -t cpu m| itlb-miss %tim itsb-miss %tim | dtlb-miss %tim dtsb-miss %tim |%tim -----+-------------------------------+-------------------------------+---- 0 u| 2571 0.3 0 0.0 | 10802 1.3 0 0.0 | 1.6 0 k| 0 0.0 0 0.0 | 106420 13.4 184 0.1 |13.6 -----+-------------------------------+-------------------------------+---- 1 u| 3069 0.3 0 0.0 | 10983 1.2 100 0.0 | 1.6 1 k| 27 0.0 0 0.0 | 106974 12.6 19 0.0 |12.7 -----+-------------------------------+-------------------------------+---- 2 u| 3033 0.3 0 0.0 | 11045 1.2 105 0.0 | 1.6 2 k| 43 0.0 0 0.0 | 107842 12.7 108 0.0 |12.8 -----+-------------------------------+-------------------------------+---- 3 u| 2924 0.3 0 0.0 | 10380 1.2 121 0.0 | 1.6 3 k| 54 0.0 0 0.0 | 102682 12.2 16 0.0 |12.2 -----+-------------------------------+-------------------------------+---- 4 u| 3064 0.3 0 0.0 | 10832 1.2 120 0.0 | 1.6 4 k| 31 0.0 0 0.0 | 107977 13.0 236 0.1 |13.1 =====+===============================+===============================+==== ttl | 14816 0.3 0 0.0 | 585937 14.1 1009 0.0 |14.5使用例 4 TLB 統計とページサイズ情報を指定して trapstat を使用する
–T オプションを指定することにより、trapstat はページサイズごとに分類された TLB ミスを表示します。この例では、CPU 0 は 8K ページでのユーザーモードの TLB ミスの処理に 7.9 パーセントの時間を費やしており、さらに 64K ページでのユーザーモードの TLB ミスの処理に 2.3 パーセントの時間を費やしています。
example# trapstat -T -c 0 cpu m size| itlb-miss %tim itsb-miss %tim | dtlb-miss %tim dtsb-miss %tim |%tim ----------+-------------------------------+-------------------------------+---- 0 u 8k| 1300 0.1 15 0.0 | 104897 7.9 90 0.0 | 8.0 0 u 64k| 0 0.0 0 0.0 | 29935 2.3 7 0.0 | 2.3 0 u 512k| 0 0.0 0 0.0 | 3569 0.2 2 0.0 | 0.2 0 u 4m| 0 0.0 0 0.0 | 233 0.0 2 0.0 | 0.0 - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - + - - 0 k 8k| 13 0.0 0 0.0 | 71733 6.5 110 0.0 | 6.5 0 k 64k| 0 0.0 0 0.0 | 0 0.0 0 0.0 | 0.0 0 k 512k| 0 0.0 0 0.0 | 0 0.0 206 0.1 | 0.1 0 k 4m| 0 0.0 0 0.0 | 0 0.0 0 0.0 | 0.0 ==========+===============================+===============================+==== ttl | 1313 0.1 15 0.0 | 210367 17.1 417 0.2 |17.5使用例 5 エントリのフィルタリングを指定して trapset を使用する
–e オプションを指定することにより、trapstat は特定のトラップタイプの統計のみを表示します。このオプションを使用すると、特定のデータを探す際のプローブ効果を最小限に抑えられます。この例では、12 - 15 の CPU で dtlb-prot および syscall-32 トラップのみの統計を生成します。
example# trapstat -e dtlb-prot,syscall-32 -c 12-15 vct name | cpu12 cpu13 cpu14 cpu15 ------------------------+------------------------------------ 6c dtlb-prot | 817 754 1018 560 108 syscall-32 | 1426 1647 2186 1142 vct name | cpu12 cpu13 cpu14 cpu15 ------------------------+------------------------------------ 6c dtlb-prot | 1085 996 800 707 108 syscall-32 | 2578 2167 1638 1452使用例 6 高いサンプリングレートを指定して trapstat を使用する
次の例では、–r オプションを使用して 1 秒あたりのサンプル数が 1000 のサンプリングレートを指定し、level-10 のトラップのみをフィルタリングします。また、–P オプションを指定すると、解析可能な出力が生成されます。
level-10 のイベント間でのタイムスタンプの違い (9,998,000 ナノ秒と 10,007,000 ナノ秒) に注意してください。これらの level-10 のイベントはシステムクロックに対応しており、それはデフォルトで 100 Hz (つまり、10,000,000 ナノ秒ごと) で動作します。
example# trapstat -e level-10 -P -r 1000 1070400 0 4a level-10 0 2048600 0 4a level-10 0 3030400 0 4a level-10 1 4035800 0 4a level-10 0 5027200 0 4a level-10 0 6027200 0 4a level-10 0 7027400 0 4a level-10 0 8028200 0 4a level-10 0 9026400 0 4a level-10 0 10029600 0 4a level-10 0 11028600 0 4a level-10 0 12024000 0 4a level-10 0 13028400 0 4a level-10 1 14031200 0 4a level-10 0 15027200 0 4a level-10 0 16027600 0 4a level-10 0 17025000 0 4a level-10 0 18026000 0 4a level-10 0 19027800 0 4a level-10 0 20025600 0 4a level-10 0 21025200 0 4a level-10 0 22025000 0 4a level-10 0 23035400 0 4a level-10 1 24027400 0 4a level-10 0 25026000 0 4a level-10 0 26027000 0 4a level-10 0使用例 7 cpu_mondo 率がもっとも高い 3 つの CPU を表示します。
次のコマンドは、cpu_mondo 率がもっとも高い 3 つの CPU を表示します。
example% trapstat -k cpu_mondo -o 3 10 1 vct name | cpu0 cpu1 cpu61 ------------------------+---------------- 9 immu-miss | 0 0 0 24 cleanwin | 0 0 0 31 dmmu-miss | 0 0 0 41 level-1 | 0 0 0 46 level-6 | 0 0 0 49 level-9 | 0 0 0 4a level-10 | 100 31 16 4d level-13 | 23 15 8 4e level-14 | 100 32 18 6c dtlb-prot | 0 0 0 7c cpu_mondo | 24 16 9 7d dev_mondo | 0 0 0 84 spill-user-32 | 0 0 0 8c spill-user-32-cln | 0 0 0 98 spill-kern-64 | 423 180 102 a4 spill-asuser-32 | 0 0 0 ac spill-asuser-32-cln | 0 0 0 c4 fill-user-32 | 0 0 0 cc fill-user-32-cln | 0 1 0 d8 fill-kern-64 | 295 165 94 103 flush-wins | 0 0 0 108 syscall-32 | 0 0 0 122 get-psr | 0 0 0 127 gethrtime | 0 0 0使用例 8 複数の CPU を四分位数で集計する
次のコマンドは、レベル 10 率別に 96 の CPU を四分位数で集計します。
example% trapstat -O /tmp/t1 -e level-10 10 1 example% trapstat -I /tmp/t1 -A 4 replay from: trapstat -O /tmp/t1 -e level-10 10 1 vct name | bin0 bin1 bin2 bin3 -------------+-------------------- 4a level-10 | 440 340 305 306使用例 9 複数の CPU を集計およびソートする
次のコマンドは、コア ID 別に 96 の CPU を集計して、もっとも高い 4 つをソートします。
example% trapstat -A cor -e level-10 -k level-10 -o 4 10 1 vct name | cor514 cor549 cor542 cor521 -------------+-------------------------------- 4a level-10 | 197 120 111 106
属性についての詳細は、マニュアルページの attributes(5) を参照してください。
|
lockstat(1M), pmap(1), psrset(1M), psrinfo(1M), pbind(1M), ppgsz(1), getpagesizes(3C)
『Sun Microelectronics UltraSPARC II User's Manual,』1997 年 1 月、STP1031
『The SPARC Architecture Manual, Version 9 』1994 年、Prentice-Hall 出版
有効になっている場合、trapstat は収集される情報の種類に応じて、さまざまなプローブ効果をもたらします。正確なプローブ効果はハードウェアの仕様によって異なりますが、次の表を大まかな指針として使用できます。
|
これらのプローブ効果は、システム全体に対してではなくトラップごとです。たとえば、合計時間の 7% をトラップの処理に費やすシステムで、デフォルトのオプションを使って trapstat を実行すると、0.5% 未満のパフォーマンスの低下が起こります。合計時間の 5% を TLB ミスの処理に費やすシステムで、–t または –T オプションを指定して trapstat を実行すると、2.5% 以下のパフォーマンスの低下が起こります。
–t または –T オプションを指定して実行すると、%tim フィールドの計算時に trapstat はそのプローブ効果を考慮します。これにより、%tim フィールドが、trapstat の混乱させる存在に関係なく、所定のワークロードで TLB ミスの処理に費やしている時間の、かなり正確な指標であることが保証されます。
%tim フィールドには TLB ミスハンドラを実行する明示的なコストは含まれていますが、TLB ミストラップ (パイプライン効果、キャッシュ汚染など) の暗黙的なコストは含まれていません。これらの暗黙的なコストはトラップ率が上がるにつれてより重要になります。高い %tim 値 (50% 以上) が報告された場合、残りの時間の多くが TLB ミストラップの暗黙的なコストに充てられていることを正確に推測できます。
システム全体の低下が発生する可能性があるため、スーパーユーザーのみが trapstat を実行できます。
ベースとなる統計収集方法の制限のために、trapstat のインスタンスは一度に 1 つしか実行できません。
TLB ミスを処理するためのハードウェアサポート (ハードウェアテーブルウォーク (HWTW) など) を備えた UltraSPARC sun4v プラットフォームでは、TLB ミスがオペレーティングシステムからマスクされます。trapstat は通常、ハイパーバイザ (有効な場合) を通じて HWTW を無効にします。これによってパフォーマンスが大幅に低下する可能性があるため、sun4v プラットフォームでは TLB ミスデータを収集する「迅速な」代替方法を提供しています。現時点では、UltraSPARC T1 ベースのシステムのみがこの機能を完全に実装します。ほかの sun4v システムでは、trapstat によって収集される TLB ミスデータは常に 0 です。