2014-12-02 32 views
4

我有一个程序,它解析的Linux命令perf的输出。它需要使用选项-x(字段分隔符选项,我想用perf提取elapsed time(不是task-timecpu-clock)但是当我使用-x选项时,输出中不存在经过时间,并且找不到对应PERF事件。下面是样本输出,字段分隔符选项perf得到的时间与字段分隔符选项

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 

任何帮助理解

+1

为什么不更改perf资源来打印它。 – 2014-12-03 20:33:34

+1

查看perf源代码后,我发现当使用字段分隔符时,目前没有任何方法可以打印此代码。我想知道为什么。我想如果有人希望在常规报告中使用这些数据,他们可能需要在分隔视图中使用这些数据。 – 2014-12-04 05:05:26

+0

@Milind更改perf的源代码的问题是,当我必须分配我的代码时,我还必须分配一个自定义的perf。但是,正如Gabriel所说,如果当前的perf代码没有办法,我会尝试创建一个补丁文件并发送给perf维护人员。 – knightrider 2014-12-05 08:29:14

回答

1
# perf stat ls 2>&1 >/dev/null | tail -n 2 | sed 's/ \+//' | sed 's/ /,/' 

0.002272536,seconds time elapsed