Qual fluxo o perf usa?

4

Qual fluxo o comando perf usa? Eu tenho tentado capturá-lo com

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

após o link , mas sem sucesso. Por que não posso capturar a entrada ... é como deixar alguns peixes escaparem!

    
por Dervin Thunk 05.09.2013 / 23:47

2 respostas

7

Versões mais antigas do perf ~ 2.6.x

Estou usando a versão do perf: 2.6.35.14-106 .

Capture toda a saída

Eu não tenho a opção -x no meu sistema Fedora 14, então não tenho certeza se esse é o seu problema real ou não. Eu investigarei em um novo sistema Ubuntu 12.10 mais tarde, mas isso funcionou para mim:

$ (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

Eu só quero a saída do perf

Você pode tentar isso, a saída de ls será redirecionada para /dev/null . O formulário de saída perf (STDERR e STDOUT) vai para o arquivo, 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

Versões mais recentes do perf 3.x +

Estou usando a versão do perf: 3.5.7

Capturando apenas a saída do perf

Com as versões mais recentes de perf , há opções dedicadas para controlar onde as mensagens são enviadas. Você tem a opção de enviá-los para um arquivo por meio da opção -o|--output . Basta dar a um desses nomes um nome para capturar a saída.

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

A alternativa é redirecionar a saída para um descritor de arquivo alternativo, 3 , por exemplo. Tudo o que você precisa fazer é direcionar esse identificador de arquivo alternativo antes de fazer o streaming para ele.

--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

Então, se quisermos coletar a saída perf para o comando ls , você pode usar este comando:

$ 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

Se você usar a versão --append , o conteúdo de vários comandos será anexado ao mesmo arquivo de log, results.log no nosso caso.

Instalando o perf

A instalação é bem trivial:

Fedora

$ yum install perf

Ubuntu / Debian

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

Referências

por 06.09.2013 / 00:14
0

Isso é o que finalmente funcionou para mim:

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

como por man perf-stat , a bandeira log-fd .

    
por 06.09.2013 / 01:06