perf 使用字段分隔符选项获取时间

Posted

技术标签:

【中文标题】perf 使用字段分隔符选项获取时间【英文标题】:perf get time elasped with field separator option 【发布时间】:2014-12-02 20:06:55 【问题描述】:

我有一个程序可以解析 linux 命令 perf 的输出。它需要使用选项-x,(字段分隔符选项。我想使用perf提取elapsed time(不是task-timecpu-clock)。但是当我使用-x选项时,经过的时间是输出中不存在,我找不到相应的性能事件。这是示例输出

perf stat ls
============
 Performance counter stats for 'ls':

          0.934889 task-clock (msec)         #    0.740 CPUs utilized          
                 6 context-switches          #    0.006 M/sec                  
                 0 cpu-migrations            #    0.000 K/sec                  
               261 page-faults               #    0.279 M/sec                  
         1,937,910 cycles                    #    2.073 GHz                    
   <not supported> stalled-cycles-frontend 
   <not supported> stalled-cycles-backend  
         1,616,944 instructions              #    0.83  insns per cycle        
           317,016 branches                  #  339.095 M/sec                  
            12,439 branch-misses             #    3.92% of all branches        

       0.001262625 seconds time elapsed //here we have it

现在带有字段分隔符选项

perf stat -x, ls
================
2.359807,task-clock
6,context-switches
0,cpu-migrations
261,page-faults
1863028,cycles
<not supported>,stalled-cycles-frontend
<not supported>,stalled-cycles-backend
1670644,instructions
325047,branches
12251,branch-misses

感谢任何帮助

【问题讨论】:

为什么不改变性能源来打印它。 在查看 perf 源代码后,我发现使用字段分隔符时目前没有任何方法可以打印它。我想知道为什么。我认为如果有人想要在常规报告中使用这些数据,他们可能想要在字段分隔视图中使用它。 @Milind 更改 perf 源代码的问题是,当我必须分发我的代码时,我还必须分发自定义 perf。但是,正如 Gabriel 所说,如果当前 perf 代码中没有办法,我会尝试创建一个补丁文件并发送给 perf 维护者 您的程序使用哪种语言解析格式化的输出?除了解析“perf stat ls”的输出之外,我没有其他选择。 @Milind 是的,这是可能的。但是我使用的工具不支持正常输出。字段分隔的输出更容易解析。最后,我创建了一个自定义解析器来将正常输出转换为字段分隔输出并使用它。 【参考方案1】:
# perf stat ls 2>&1 >/dev/null | tail -n 2 | sed 's/ \+//' | sed 's/ /,/'

0.002272536,seconds time elapsed

【讨论】:

【参考方案2】:

从内核 5.2-rc1 开始,perf stat 公开了一个名为 duration_time 的新事件,以解决这个问题。此事件的值与time elapsed 值完全相同,但单位是纳秒而不是秒。

【讨论】:

以上是关于perf 使用字段分隔符选项获取时间的主要内容,如果未能解决你的问题,请参考以下文章

ExtJs 数字字段使用千位分隔符

使用 perf 获取事件计数取决于其他事件的发生

perf-如何获取程序的当前运行时时钟

剪切文本文件并获取分隔符后的最后一个字段

如何获取使用 perf stat 运行的程序的退出代码?

Perl一行式:字段处理和计算