Red Hat Training

A Red Hat training course is available for RHEL 8

第 18 章 使用 perf stat 计算进程执行期间的事件

您可以使用 perf stat 命令在进程执行过程中统计硬件和软件事件。

先决条件

18.1. perf stat 的目的

perf stat 命令执行指定的命令,在命令执行过程中保留正在运行的硬件和软件事件计数,并生成这些计数的统计信息。如果您没有指定任何事件,则 perf stat 计算一组常见的硬件和软件事件。

18.2. 使用 perf stat 计算事件

您可以使用 perf stat 统计命令执行过程中出现的硬件和软件事件,并生成这些计数的统计信息。默认情况下,perf stat 在每个线程模式下运行。

先决条件

流程

  • 计算事件数。

    • 在没有 root 访问权限的情况下运行 perf stat 命令只会统计用户空间中发生的事件:

      $ perf stat ls

      例 18.1. perf stat 的输出在没有 root 访问权限的情况下运行

      Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
      
       Performance counter stats for 'ls':
      
                    1.28 msec task-clock:u               #    0.165 CPUs utilized
                       0      context-switches:u         #    0.000 M/sec
                       0      cpu-migrations:u           #    0.000 K/sec
                     104      page-faults:u              #    0.081 M/sec
               1,054,302      cycles:u                   #    0.823 GHz
               1,136,989      instructions:u             #    1.08  insn per cycle
                 228,531      branches:u                 #  178.447 M/sec
                  11,331      branch-misses:u            #    4.96% of all branches
      
             0.007754312 seconds time elapsed
      
             0.000000000 seconds user
             0.007717000 seconds sys

      如上例中所示,当 perf stat 在没有 root 的情况下运行时,事件名称后面会跟着 :u,这表示这些事件只在用户空间中计数。

    • 要同时计算用户空间和内核空间事件,您必须在运行 perf stat 时具有 root 访问权限:

      # perf stat ls

      例 18.2. perf stat 的输出使用 root 访问权限运行

      Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
      
       Performance counter stats for 'ls':
      
                    3.09 msec task-clock                #    0.119 CPUs utilized
                      18      context-switches          #    0.006 M/sec
                       3      cpu-migrations            #    0.969 K/sec
                     108      page-faults               #    0.035 M/sec
               6,576,004      cycles                    #    2.125 GHz
               5,694,223      instructions              #    0.87  insn per cycle
               1,092,372      branches                  #  352.960 M/sec
                  31,515      branch-misses             #    2.89% of all branches
      
             0.026020043 seconds time elapsed
      
             0.000000000 seconds user
             0.014061000 seconds sys
      • 默认情况下,perf stat 在每个线程模式下运行。要改为 CPU 范围的事件计数,将 -a 选项传递给 perf stat。要计算 CPU 范围的事件,您需要 root 访问权限:

        # perf stat -a ls

其它资源

  • perf-stat(1) man page

18.3. perf stat 输出的解读

perf stat 执行命令期间执行指定命令并计算发生的事件,并在三列中显示这些计数的统计信息:

  1. 给定事件的出现次数
  2. 所计算的事件的名称
  3. 当相关指标可用时,最右侧列中的 hash 符号(#)后会显示一个比率或百分比。

    例如,当以默认模式运行时,perf stat 计算周期和指令,因此在最右侧列中计算并显示每个周期的说明。您可以看到与分支缺少相关的类似行为,因为默认情况下这两个事件都被计算为两个分支的百分比。

18.4. 将 perf stat 附加到正在运行的进程

您可以将 perf stat 附加到正在运行的进程。这将指示 perf stat 计算命令执行期间仅在指定进程中发生的事件。

先决条件

流程

  • perf stat 附加到正在运行的进程:

    $ perf stat -p ID1,ID2 sleep seconds

    前面的示例计算 ID 为 ID1ID2 的进程中的事件,时间为 seconds 秒,这由 sleep 命令指定。

其它资源

  • perf-stat(1) man page