度量列表
许多 er_print 命令都使用度量关键字列表。 列表的语法如下:
metric-keyword-1[:metric-keyword2…]
对于动态度量(它们基于度量的数据),度量关键字包含以下三部分:度量类型字符串、度量可见性字符串和度量名称字符串。这些字符串连接在一起且没有空格,如下所示。
flavorvisibilityname
对于静态度量-它们基于实验中装入对象的静态属性(名称、地址和大小),度量关键字包含度量名称和可选的前置度量可见性字符串,两者连接在一起且没有空格:
[visibility]name
度量 flavor 和度量 visibility 字符串由类型和可见性字符组成。
Table 5–1 中列出了允许的度量类型字符。包含多个类型字符的度量关键字可扩展为一系列度量关键字。例如,ie.user 可扩展为 i.user:e.user。
表 5-1 度量类型字符
|
|
e
|
显示独占度量值
|
i
|
显示非独占度量值
|
a
|
显示归属度量值(仅适用于调用方-被调用方度量)
|
d
|
显示数据空间度量值(仅适用于数据派生的度量)
|
|
Table 5–2 中列出了允许的度量可见性字符。可见性字符在可见性字符串中的顺序不影响对应度量的显示顺序。例如,i%.user 和 i.%user 都解释为 i.user:i%user。
仅可见性不同的度量始终按标准顺序一起显示。如果仅可见性不同的两个度量关键字由某些其他关键字分隔,则度量按标准顺序出现在两个度量中第一个度量的位置。
表 5-2 度量可见性字符
|
|
.
|
将度量显示为时间。适用于计时度量以及度量循环计数的硬件计数器度量。其他度量解释为 "+"。
|
%
|
将度量显示为总程序度量的百分比。对于调用方-被调用方列表中的归属度量,将度量显示为所选函数的非独占度量的百分比。
|
+
|
将度量显示为绝对值。对于硬件计数器,该值是事件计数。计时度量解释为 "."。
|
!
|
不显示任何度量值。不能与其他可见性字符组合使用。
|
|
当类型字符串和可见性字符串都具有多个字符时,首先扩展类型。因此,将 ie.%user 扩展为 i.%user:e.%user,然后将其解释为 i.user:i%user:e.user:e%user。
对于静态度量,句点 (.)、加号 (+) 和百分号 (%) 这三种可见性字符在用于定义排序顺序时是等效的。因此,sort i%user、sort i.user 和 sort i+user 均表示只要非独占用户 CPU 时间以任一形式可见,性能分析器就应该按它排序;sort i!user 则表示不管非独占用户 CPU 时间是否可见,性能分析器都应该按它排序。
对于每种度量类型,可以使用叹号 (!) 可见性字符覆盖内置可见性缺省值。
如果同一度量在度量列表中出现多次,则仅处理第一次出现的该度量,而忽略随后出现的该度量。如果指定的度量不在列表中,则将它附加到列表中。
Table 5–3 列出了计时度量、同步延迟度量、内存分配度量、MPI 跟踪度量以及两个常见的硬件计数器度量的可用 er_print 度量名称字符串。 对于其他硬件计数器度量,度量名称字符串与计数器名称相同。通过 metric_list 命令,可以显示所装入实验的所有可用度量名称字符串的列表。要列出计数器名称,可发出不带其他参数的 collect -h 命令。有关硬件计数器的更多信息,请参见硬件计数器分析数据。
表 5-3 度量名称字符串
|
|
|
时钟分析度量
|
total
|
总线程时间
|
|
totalcpu
|
CPU 总时间
|
|
user
|
用户 CPU 时间
|
|
system
|
系统 CPU 时间
|
|
trap
|
自陷 CPU 时间
|
|
lock
|
用户锁定时间
|
|
datapfault
|
数据缺页时间
|
|
textpfault
|
文本缺页时间
|
|
kernelpfault
|
内核缺页时间
|
|
stop
|
停止时间
|
|
wait
|
CPU 等待时间
|
|
sleep
|
休眠时间
|
硬件计数器度量
|
insts
|
发出的指令数
在所有支持的系统上可用。
|
|
cycles
|
CPU 周期
在大多数受支持的系统上可用。此外,每个处理器还有自己的一组计数器。可使用 collect -h 查看系统计数器的完整列表。
|
|
CPI
|
每指令周期数, 从 cycles 和 insts 度量计算得到只有记录了两个计数器时才可用。
|
|
IPC
|
每周期指令数, 从 cycles 和 insts 度量计算得到只有记录了两个计数器时才可用。
|
OpenMP 分析度量
|
ompwork
|
以串行或并行方式执行工作所用的时间
|
|
ompwait
|
OpenMP 运行时等待同步时所用的时间
|
|
masterthread
|
"Master Thread Time"(主线程时间)是主线程消耗的总时间。只能在 Solaris 实验中查看该时间。该时间与挂钟时间相对应。
|
同步延迟度量
|
sync
|
同步等待时间
|
|
syncn
|
同步等待计数
|
堆跟踪度量
|
heapalloccnt
|
分配的数量
|
|
heapallocbytes
|
分配的字节数
|
|
heapleakcnt
|
泄漏的数量
|
|
heapleakbytes
|
泄漏的字节数
|
I/O 跟踪度量
|
ioreadbytes
|
读取的字节数
|
|
ioreadcnt
|
读取计数
|
|
ioreadtime
|
读取时间
|
|
iowritebytes
|
写入的字节数
|
|
iowritecnt
|
写入计数
|
|
iowritetime
|
写入时间
|
|
ioothrcnt
|
其他 IO 计数
|
|
ioothertime
|
其他 IO 时间
|
|
ioerrornt
|
IO 错误计数
|
|
ioerrortime
|
IO 错误时间
|
线程分析器度量
|
raccesses
|
数据争用访问
|
|
deadlocks
|
死锁
|
MPI 跟踪度量
|
mpitime
|
MPI 调用所用的时间
|
|
mpisend
|
已启动 MPI 点对点发送数
|
|
mpibytessent
|
"MPI Sends"(MPI 发送次数)中的字节数
|
|
mpireceive
|
已完成 MPI 点对点接收数
|
|
mpibytesrecv
|
"MPI Receives"(MPI 接收次数)中的字节数
|
|
mpiother
|
对其他 MPI 函数的调用数
|
MPI 分析度量
|
mpiwork
|
在 MPI 运行时内执行工作(如处理请求或消息)所用的时间
|
|
mpiwait
|
在 MPI 运行时内等待事件、缓冲区或消息所用的时间
|
|
除了Table 5–3 中列出的名称字符串外,还有两个只能在缺省度量列表中使用的名称字符串。这两个名称字符串是 hwc(它与任何硬件计数器名称匹配)和 any(它与任何度量名称字符串匹配)。另请注意,cycles 和 insts 对于 SPARC® 平台和 x86 平台是通用的,但是还存在特定于体系结构的其他类型的名称字符串。
要查看在装入的实验中可用的度量,请发出 metric_list 命令。