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。如果标准输出是一个终端,该表可包含该终端宽度可以容纳的任意多列数据;如果标准输出不是终端,该表最多可包含六列数据。缺省情况下,会针对所有 CPU 收集并显示数据;如果单个表容纳不下数据,则会在多个表中列显这些数据。可以通过 –c 或 –C 可选选项指定要收集并显示其数据的 CPU 集。
除非指定了 –r 选项或 –a 选项或 command 参数,否则表中每个条目显示的值对应于每秒的陷阱数。如果指定 –r 选项,该值将对应于指定抽样率隐含的时间间隔内的陷阱数;如果指定 –a 选项,该值将对应于自调用 trapstat 以来累计的陷阱数。如果指定了 command 参数,则该值对应于在命令的生命周期内累计的陷阱数。
缺省情况下,trapstat 每秒显示一次数据并且无限期运行;可以使用 –r 选项或 interval 和 count 参数控制此行为。–r 选项参数指定每秒进行抽样并显示数据的次数。以秒为单位指定 interval;count 表示在退出之前要执行的统计次数。另外,可以指定 command,在这种情况下 trapstat 执行所提供的命令并继续运行至该命令退出,然后显示累计数据。系统假定 interval 为正整数;如果所需的 command 无法与整数区分开,则必须指定 command 的完整路径。只能使用 –r、interval 或 command 中的一个。
UltraSPARC 系统可以通过操作系统陷阱来处理转换后备缓冲器 (translation lookaside buffer, TLB) 未命中。对于某些工作负荷,TLB 未命中陷阱会是影响系统整体性能的一个重要部分;–t 选项可提供有关这些陷阱的详细信息。使用此选项运行时,trapstat 将显示 TLB 未命中陷阱的比率以及处理这些陷阱所用时间的百分比。此外,还将区分命中转换存储缓冲区 (translation storage buffer, 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 的数据行将聚合到一个行中。缺省情况下,列将替换为小计。而 –m 选项将输出列平均值。
按套接字 ID 聚合输出。具有相同套接字 ID 的数据行聚合为一行。缺省情况下,列将替换为小计。而 –m 选项将输出列平均值。
将每个抽样期间内的列聚合到数量较少的容器 (bin) 中,按其出现顺序对其分组。要计算算术平均值而不是小计,可以使用 –m 选项。在执行 bin 聚合步骤之前,可以使用 –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。最多可指定一个处理器集。
仅对 entrylist 指定的陷阱表条目执行 trapstat。陷阱表条目可以通过陷阱编号或陷阱名称指定(例如,级别为 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 或 command 参数。
每个抽样期间内的行依次按照 key1、key2 等从高到低排序。每个键可以是 trapstat 输出中的任何行标题,例如 level-10、u-itlb-miss 等。
使用 trapstat –l 可以列出所有事件名称。使用 –lt 或 –lT 可以列出 TLB 格式的键名称。将 –l 与 –P 一起使用可显示可解析的列表。
列出陷阱表条目。缺省情况下,所显示的表包含所有有效的陷阱编号、陷阱名称以及简要说明。使用缺省输出和使用 –e 选项的 entrylist 参数时都会显示陷阱名称。如果除了 –l 选项外还指定了可解析选项 (–P),则数据的格式如下:
|
前三个字段以空格分隔。最后一个字段可以包含空格。如果修改格式,则它将与现有字段兼容。
有关 –l 的其他用法,请参见 –k、–t 和 –T 选项。
当使用 –A 选项来聚合多个 CPU 的数据时,将显示算术平均值而不是总和。
在应用任何排序和聚合选项后,仅显示每个抽样期间内的前 num 行。
将收集的数据保存到 statfile 中。以后可以使用 –I 重放该数据。
如果文件名为 —(连字符),则将写入到标准输出。
–O 的用途是捕获所有指定的数据。它与以下数据缩减选项不兼容:–A、–k、–m 和 –o。由于 statfile 格式是固定的,因此,–P 选项不能与 –O 一起使用。
生成可解析的输出。在不使用其他数据收集修改选项(即 –t 或 –T)运行时或使用 –e 运行时,trapstat 的可解析输出具有以下格式:
|
各个字段使用空格分隔。如果修改格式,将通过从字段 6 开始添加可能的新字段来进行修改;现有字段将保持不变。
将抽样率显式设置为每秒 rate 个样例。如果指定该选项,trapstat 的输出将由每秒的陷阱数更改为每抽样间隔的陷阱数。不能与 command 或 interval 参数一起使用。
启用 TLB/TSB 统计信息。
所显示的表包含四个主要数据列:itlb-miss、itsb-miss、dtlb-miss 和 dtsb-miss。这些列包含对应事件的比率和处理事件所用 CPU 时间的百分比。表中的行对应于 CPU(或核心、插槽或 bin,如果指定了 –A),每个 CPU 占用两行:一行用于用户模式事件(以 u 表示),一行用于内核模式事件(以 k 表示)。对于每一行,在最右侧的列中显示汇总的CPU 时间百分比。使用实线表示 CPU。如果除了 –t 选项外还指定了可解析选项 (–P),则数据的格式如下:
|
各个字段使用空格分隔。如果修改格式,将通过从字段 12 开始添加可能的新字段来进行修改;现有字段将保持不变。
启用 TLB/TSB 统计信息,其中包含页面大小信息。与 –t 选项一样,所显示的表包含四个主要数据列:itlb-miss、itsb-miss、dtlb-miss 和 dtsb-miss。这些列包含对应事件的绝对数量以及处理该事件所用 CPU 时间的百分比。表中的行对应于 CPU(或核心、插槽或 bin,如果指定了 –A),每个 CPU 占用两个行集:一个行集用于用户级事件(以 u 表示),一个行集用于内核级事件(以 k 表示)。每个行集包含的行数与所支持的页面大小(请参见 getpagesizes(3C))相对应。对于每一行,在最右侧的列中显示汇总的CPU 时间百分比。使用虚线表示两个行集;使用实线表示 CPU。如果除了 –T 选项外还指定了可解析选项 (–P),则数据的格式如下:
|
各个字段使用空格分隔。如果修改格式,将通过从字段 13 开始添加可能的新字段来进行修改;现有字段将保持不变。
在不带选项的情况下运行时,trapstat 会显示一个包含陷阱类型和 CPU 的表。缺省终端宽度最多可以容纳六列;如果有六个以上的 CPU(如本例),将显示多个表:
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 过滤的 trapstat
–c 选项可用于限制 trapstat 所针对的 CPU。此示例限定 CPU 为 CPU 1 以及 CPU 12 到 15。
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 未命中信息。在此示例中,使用 8K 页面时的用户模式 TLB 未命中占用了 CPU 0 7.9% 的处理时间,而使用 64K 页面时的用户模式 TLB 未命中占用了 CPU 0 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 运行带条目过滤的 trapstat
通过指定 –e 选项,trapstat 可仅显示特定陷阱类型的统计信息。使用此选项,可最大限度地降低查找特定数据时的探测影响。该示例仅生成有关 CPU 12 到 15 的 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 选项指定抽样率为每秒 1000 个样例,并仅过滤出级别为 10 的陷阱。此外,指定 –P 选项可生成可解析的输出。
请注意级别 10 事件之间的时间戳差异:9,998,000 纳秒和 10,007,000 纳秒。这些级别 10 事件对应于系统时钟,缺省情况下,时钟周期为 100 赫兹(即,每 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 比率最高的三个 CPU
以下命令显示 cpu_mondo 比率最高的三个 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 并进行排序,确定最高的四个。
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(7):
|
pmap(1)、ppgsz(1)、getpagesizes(3C)、lockstat(8)、pbind(8)、psrinfo(8)、psrset(8)
《Sun Microelectronics UltraSPARC II User's Manual》,1997 年 1 月,STP1031。
《The SPARC Architecture Manual, Version 9》,1994 年,Prentice-Hall 出版。
启用 trapstat 后会产生各种探测影响,具体取决于收集的信息类型。虽然确切的探测影响取决于硬件的具体情况,但可以依据下表进行粗略估计:
|
这些探测影响基于 每个陷阱,反映的不是对系统造成的整体影响。例如,使用缺省选项在系统上运行 trapstat,会用总时间的 7% 来处理陷阱,导致的性能下降不到 0.5%;使用 –t 或 –T 选项在系统上运行 trapstat,会用总时间的 5% 来处理 TLB 未命中,导致的性能下降不超过 2.5%。
带 –t 或 –T 选项运行时,trapstat 在计算 %tim 字段时会将探测影响考虑在内。这可确保无论是否存在 trapstat 扰动,%tim 字段都是衡量给定工作负荷的 TLB 未命中处理用时的准确合理指标。
尽管 %tim 字段包括执行 TLB 未命中处理程序的显性成本,但不包括 TLB 未命中陷阱的隐性成本(例如,管道影响、高速缓存污染等)。随着陷阱率增长,这些隐性成本会越来越显著;如果报告的 %tim 值较高(大于 50%),您可以准确推断出有大量时间用在 TLB 未命中陷阱的隐性成本上。
由于可能会导致系统范围的性能下降,所以只有超级用户才能运行 trapstat。
受底层统计信息收集方法所限,一次只能运行一个 trapstat 实例。
通过硬件(例如 Hardware Table Walk 或 HWTW)支持 TLB 未命中处理的 UltraSPARC sun4v 平台通过操作系统屏蔽 TLB 未命中。通常,当 HWTW 处于启用状态时,trapstat 会通过虚拟机管理程序将其禁用。由于这可能会导致性能大幅降低,所以 sun4v 平台提供了一种替代的“快速”方法来收集 TLB 未命中数据。当前,只有基于 UltraSPARC T1 的系统完全实现了此功能:在其他 sun4v 系统上,由 trapstat 收集的 TLB 未命中数据将始终为 0。