perf 使用什么流?

perf 使用什么流?

该命令使用什么流perf!?我一直在尝试捕捉它

(perf stat -x, -ecache-misses ./a.out>/dev/null) 2> results

下列的https://stackoverflow.com/q/13232889/50305,但无济于事。为什么我无法捕获输入...就像让一些鱼逃脱一样!

答案1

旧版本的 perf ~2.6.x

我正在使用性能版本:2.6.35.14-106

捕获所有输出

我的 Fedora 14 系统上没有-x开关,所以我不确定这是否是您的实际问题。稍后我将研究较新的 Ubuntu 12.10 系统,但这对我有用:

$ (perf stat -ecache-misses ls ) > stat.log 2>&1
$
$ more stat.log 
maccheck.txt
sample.txt
stat.log

 Performance counter stats for 'ls':

              13209  cache-misses            

        0.018231264  seconds time elapsed

我只想要 perf 的输出

您可以尝试这个,输出ls将被重定向到/dev/null.输出形式perf(STDERR 和 STDOUT)转到文件stat.log.

$ (perf stat -ecache-misses ls > /dev/null ) > stat.log 2>&1
[saml@grinchy 89576]$ more stat.log 

 Performance counter stats for 'ls':

              12949  cache-misses            

        0.022831281  seconds time elapsed

较新版本的 perf 3.x+

我使用的性能版本:3.5.7

仅捕获 perf 的输出

在较新的版本中,perf有专门的选项用于控制消息的发送位置。您可以选择通过该-o|--output选项将它们发送到文件。只需给这些开关一个文件名即可捕获输出。

-o file, --output file
    Print the output into the designated file.

另一种方法是将输出重定向到备用文件描述符,3例如 。您需要做的就是在流式传输之前定向此备用文件句柄。

--log-fd
    Log output to fd, instead of stderr. Complementary to --output, and 
    mutually exclusive with it. --append may be used here. Examples: 
       3>results perf stat --log-fd 3  — $cmd
       -or-
       3>>results perf stat --log-fd 3 --append — $cmd

因此,如果我们想收集命令perf的输出,ls您可以使用以下命令:

$ 3>results.log perf stat --log-fd 3 ls > /dev/null
$ 
$ more results.log

 Performance counter stats for 'ls':

          2.498964 task-clock                #    0.806 CPUs utilized          
                 0 context-switches          #    0.000 K/sec                  
                 0 CPU-migrations            #    0.000 K/sec                  
               258 page-faults               #    0.103 M/sec                  
           880,752 cycles                    #    0.352 GHz                    
           597,809 stalled-cycles-frontend   #   67.87% frontend cycles idle   
           652,087 stalled-cycles-backend    #   74.04% backend  cycles idle   
         1,261,424 instructions              #    1.43  insns per cycle        
                                             #    0.52  stalled cycles per insn [55.31%]
     <not counted> branches                
     <not counted> branch-misses           

       0.003102139 seconds time elapsed

如果您使用该--append版本,则在我们的例子中,多个命令的内容将被附加到同一个日志文件中results.log

安装性能

安装非常简单:

软呢帽

$ yum install perf

Ubuntu/Debian

$ apt-get install linux-tool-common linux-tools

参考

答案2

这最终对我有用:

3>results perf stat -x, -ecache-misses --log-fd 3 --append -- ./a.out

根据man perf-statlog-fd旗帜。

相关内容