手册页部分 1M: 系统管理命令

退出打印视图

更新时间: 2014 年 7 月
 
 

cpustat(1M)

名称

cpustat - 使用 CPU 性能计数器监视系统行为

用法概要

cpustat -c eventspec [-c eventspec]... [-p period] [-T u | d ]
     [-Dmnst] [-A cor|soc|bins] [-k keys] [-o limit]
     [-I statfile] [-O statfile] [interval [count]]
cpustat -h

描述

通过 cpustat 实用程序,可使用 CPU 性能计数器监视系统中 CPU 的整体行为。

如果指定了 intervalcpustat 会每 interval 秒对活动进行一次抽样,并一直重复。如果指定了 count,统计信息将重复 count 次。如果这两项均未指定,将使用五秒间隔,且对进行的抽样次数没有限制。

选项

支持以下选项:

–A cor

按核心 ID 聚合输出。具有相同核心 ID 的数据行将聚合到一个行中。缺省情况下,列将替换为小计。而 –m 选项将输出列平均值。

–A soc

按套接字 ID 聚合输出。具有相同套接字 ID 的数据行聚合为一行。缺省情况下,列将替换为小计。而 –m 选项将输出列平均值。

–A bins

将每个抽样期间内的行聚合到数量较少的容器 (bin) 中,按其出现顺序对其分组,并针对每个 bin 中的行输出柱形小计。要计算算术平均值而不是小计,可以使用 –m 选项。在执行 bin 聚合步骤之前,可以使用 –k 排序选项来更改行顺序。sze 列会输出每个 bin 中的 CPU 数。BIN 列将替换 CPU 列并输出每个 bin 的序号。

–c eventspec

指定一组 CPU 性能计数器要监视的事件。这些事件规范的语法为:


[picn=]eventn[,attr[n][=val]][,[picn=]eventn
     [,attr[n][=val]],...,]

您可以使用 –h 选项获取可用事件和属性的列表。这会导致生成用法消息。可以不必显式分配计数器,这时 cpustat 会自动尝试选择适用的计数器。

可以按适合 strtoll(3C) 的格式以十六进制、八进制或十进制表示法表示属性值。事件规范中存在的没有显式值的属性会收到缺省值 1。没有相应计数器编号的属性将应用到规范中的所有计数器。

可通过阅读 CPU 制造商的事件文档来确定这些事件规范的语义。

可以指定多个 –c 选项,在这种情况下,该命令会在每个样例上的不同事件设置之间循环。

–D

启用调试模式。

–h

输出一条详细帮助消息,说明如何使用实用程序以及如何对依赖于处理器的计数器进行编程。

–I statfile

重放之前保存在 statfile 中的数据。通过指定 –O 来创建用于重放的数据文件。该选项尤其适用于分析具有大量 CPU 的计算机的统计信息。可以使用不同的排序和聚合选项对文件进行多次重新处理。

–I 选项不能与 interval 和 count 一起指定。

如果文件名称为 (连字符),则将从标准输入进行读取。

–k key1,...

每个抽样期间内的行依次按照 key1key2 等从高到低排序。每个 key 都是事件的逗号分隔列表。可以指定多个 –k 选项。

当使用多个 –c event-spec 选项运行 cpustat 时,会生成交替显示各个 event-spec 的报告。指定多个 –k 选项可以按不同的方式对每个 event-spec 进行排序。对于每个 event-spec,将使用其键包含 event-spec 中事件的正确子集的第一个 –k 选项。

–m

当使用 –b–i 来聚合多个 CPU 的数据时,将输出算术平均值而不是总和。

–n

省略所有文件头输出(在 cpustat 位于流水线的开头时很有用)。

–o num

在应用排序和聚合选项后,仅输出每个抽样期间内的前 num 行。

–O statfile

将所有数据保存到 statfile 中。以后可以使用 –I 重放该数据。

如果文件名为 (连字符),则将写入到标准输出。

–O 的用途是捕获所有的可用数据。它与以下数据缩减选项不兼容:–A–k–m–o

–p period

使 cpustatperiod 秒循环整个 eventspec 列表。该工具在每个循环后将进入休眠状态,直至自第一次测量 eventspec 后已过去 period 秒。

如果提供了此选项,则可选的 count 参数指定要进行的总循环数(而不是要进行的总抽样数)。如果 period 小于 eventspec 数目乘以 interval,则该工具假定期间为 0

–s

在绑定仅系统 eventspec 时,创建一个空闲的 soaker 线程以进行自旋。当前处理器集中的每个 CPU 绑定一个空闲 soaker 线程。仅系统 eventspec 同时包含 nousersys 标记,并测量 CPU 在特权模式下运行时发生的事件。此选项可防止内核的空闲循环运行和触发系统模式事件。

–T u | d

显示时间戳。

指定 u 表示时间的内部表示形式的印刷表示形式。请参见 time(2)。指定 d 表示标准日期格式。请参见date(1)

–t

显示处理器周期计数的附加列(如果在当前体系结构中可用)。

用法

可以使用一个密切相关的实用程序 cputrack(1) 来监视个体应用程序的行为,此监视受系统中其他活动的干扰很少,或不受干扰。

cpustat 实用程序必须由超级用户运行,因为 cpustat 在系统范围内使用 CPU 性能计数器和使用 CPU 性能计数器来监视个体进程(例如,由 cputrack 使用)存在内在冲突。

在启动此实用程序的任何实例后和该实用程序的最后一个实例终止前,不允许每一进程或每一 LWP 再使用计数器。

命令输出的时间对应于实际对硬件计数器进行抽样时的挂钟时间,而不是程序告知内核进行抽样的时间。从与 gethrtime(3C) 相同的时基派生时间。

通过 –t 选项启用的处理器周期计数始终适用于用户模式和系统模式,无论应用于性能计数器寄存器的设置为何。

在一些使用 "sys" 标记以系统模式运行的硬件平台上,计数器是使用 32 位寄存器实现的。内核会尝试捕获所有溢出以合成 64 位计数器,但由于硬件实现的限制,除非保持足够短的抽样间隔,否则溢出可能会丢失。对处理器时钟周期进行计数的事件最容易发生此情况。如果需要关注此类事件,应频繁抽样,以便两次抽样间隔不超过 4 亿个时钟周期。

根据设计,通过 nawk(1)perl(1) 可以很容易地解析 cpustat 的输出,从而允许通过在脚本中嵌入 cpustat 来构建性能工具。此外,也可以使用 libcpc(3LIB) 的功能,通过构建 cpustat 所依据的相同 API 直接构造这些工具。请参见 cpc(3CPC)

cpustat 实用程序仅监视当前处理器集中它可以访问的 CPU。因此,可在不同处理器集中的 CPU 上运行该实用程序的多个实例。有关处理器集的更多信息,请参见 psrset(1M)

由于 cpustat 使用绑定到 CPU 的 LWP,因此,可能必须先终止该实用程序,然后才能更改相关处理器的配置。

示例

SPARC

示例 1 对外部高速缓存引用和未命中进行测量

以下示例测量外部高速缓存中的未命中和引用。在 UltraSPARC 计算机上以用户模式运行处理器时会发生这些情况。


example% cpustat -c EC_ref,EC_misses 1 3

    time cpu event      pic0      pic1
   1.008   0  tick     69284      1647
   1.008   1  tick     43284      1175
   2.008   0  tick    179576      1834
   2.008   1  tick    202022     12046
   3.008   0  tick     93262       384
   3.008   1  tick     63649      1118
   3.008   2 total    651077     18204

x86

示例 2 测量 Pentium 4 上的分支预测成功

以下示例测量在 Pentium 4 计算机上在用户和系统模式下的分支预测失误和总分支指令数。


 example% cpustat -c \
    pic12=branch_retired,emask12=0x4,pic14=branch_retired,\
    emask14=0xf,sys 1 3
  
    time cpu event      pic12     pic14
   1.010   1  tick       458       684 
   1.010   0  tick       305       511 
   2.010   0  tick       181       269 
   2.010   1  tick       469       684 
   3.010   0  tick       182       269 
   3.010   1  tick       468       684 
   3.010   2 total      2063      3101 

示例 3 在 Opteron 上对内存访问进行计数

以下示例确定 Opteron 上的每个内存控制器进行的内存访问数,并按内部内存延迟进行了细分:


cpustat -c \
   pic0=NB_mem_ctrlr_page_access,umask0=0x01, \
   pic1=NB_mem_ctrlr_page_access,umask1=0x02, \
   pic2=NB_mem_ctrlr_page_access,umask2=0x04,sys \
   1

    time cpu event      pic0      pic1      pic2
   1.003   0  tick     41976     53519      7720
   1.003   1  tick      5589     19402       731
   2.003   1  tick      6011     17005       658
   2.003   0  tick     43944     45473      7338
   3.003   1  tick      7105     20177       762
   3.003   0  tick     47045     48025      7119
   4.003   0  tick     43224     46296      6694
   4.003   1  tick      5366     19114       652
示例 4 使用过滤器显示多个 CPU

以下命令显示 DTLB_miss 比率最高的三个 CPU。

example% cpustat -c DTLB_miss -k DTLB_miss -n 3 1 1

 time cpu event DTLB_miss
1.040 115  tick       107
1.006  18  tick        98
1.045 126  tick        31
1.046  96 total       236

event DTLB_miss
total       236
示例 5 使用过滤器将多个 CPU 聚合为四组(按四分位数分组)

以下命令按照 DTLB 未命中比率将 256 个 CPU 聚合为四组(按四分位数分组)。

example% cpustat -c DTLB_miss -b 4 -k DTLB_miss -m 1 1

 time bin event DTLB_miss sze
1.032   0  tick        46  24
1.021   1  tick         3  24
1.007   2  tick         2  24
1.022   3  tick         0  24
1.045   4 total        51  24

event DTLB_miss
total        51
示例 6 对多个事件进行排序

以下命令序列对多个事件进行排序。

example% cpustat -O /tmp/OUT -c ITLB_miss,DTLB_miss -c PAPI_tot_ins 1 2
example% cpustat  -I /tmp/OUT -b 4 -k ITLB_miss -k PAPI_tot_ins

 time bin event ITLB_miss DTLB_miss sze
1.020   0  tick       129       673  24
1.009   1  tick         0        61  24
1.005   2  tick         0        79  24
1.039   3  tick         0        64  24
1.082   4 total       129       877  24

 time bin event PAPI_tot_ins sze
2.073   0  tick        51947  24
2.020   1  tick        14976  24
2.076   2  tick        14976  24
2.004   3  tick        14976  24
2.082   4 total        96875  24

event ITLB_miss DTLB_miss PAPI_tot_ins
total       129       877        96875

警告

通过运行 cpustat 命令,超级用户强行使所有现有性能计数器上下文失效。然后,这可能会导致 cputrack 命令的所有调用以及性能计数器上下文的其他用户因未知错误而过早退出。

如果在其 CPU 性能计数器不受 Solaris 支持的系统上调用 cpustat,将显示以下消息:


cpustat: cannot access performance counters - Operation not applicable

此错误消息表明 cpc_open() 已失败且已记录在 cpc_open(3CPC) 中。查看此文档以获取有关该问题及其可能的解决方案的更多信息。

如果请求的时间间隔较短,cpustat 可能无法达到所需的抽样率。在这种情况下,可能会丢弃某些样例。

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
diagnostic/cpu-counters
接口稳定性
Committed(已确定)

另请参见

cputrack(1)nawk(1)perl(1)iostat(1M)prstat(1M)psrset(1M)vmstat(1M)cpc(3CPC)cpc_open(3CPC)cpc_bind_cpu(3CPC)gethrtime(3C)strtoll(3C)libcpc(3LIB)attributes(5)

附注

cpustat 在 Pentium 4 上运行且启用了超线程时,一个 CPC 集仅绑定到每个物理 CPU 的一个逻辑 CPU。请参见 cpc_bind_cpu(3CPC)