Preciso de permissões root (admin) para executar a ferramenta 'perf' do espaço do usuário? (os eventos perf são ativados no kernel do Linux)

25

Preciso executar a perfferramenta userspace como administrador do sistema (raiz) ou posso executá-la (ou pelo menos alguns subcomandos) como um usuário comum?

Jakub Narębski
fonte
2
Os programas Unix que não podem fazer o que precisam por falta de permissões geralmente geram um erro se não puderem fazer seu trabalho. Corra e veja!
Caleb
11
Estou fazendo esta pergunta para decidir se vale a pena tentar instalar (como usuário comum, em $ HOME) a ​​parte do espaço de usuário da perfferramenta (que é / pode não ser trivial).
Jakub Narębski
FYI no Ubuntu perfestá no linux-toolspacote, então a instalação perfé simples.
Jakub Narębski
11
@ JakubNarębski: Exceto se não for sua própria máquina e os administradores relutarem em instalar pacotes.
Martin Ueding

Respostas:

33

O que você pode fazer perfsem ser root depende da configuração do sysctl .kernel.perf_event_paranoid

  • kernel.perf_event_paranoid= 2: você não pode fazer nenhuma medida. O perfutilitário ainda pode ser útil para analisar os registros existentes com perf ls, perf report, perf timechartou perf trace.
  • kernel.perf_event_paranoid= 1: você pode rastrear um comando com perf statou perf recorde obter dados de criação de perfil do kernel.
  • kernel.perf_event_paranoid= 0: você pode rastrear um comando com perf statou perf recorde obter dados de eventos da CPU.
  • kernel.perf_event_paranoid= -1: você obtém acesso bruto aos pontos de rastreamento do kernel (especificamente, é possível mmapo arquivo criado por perf_event_open, não sei quais são as implicações).
Gilles 'SO- parar de ser mau'
fonte
11
Agradável. cat /proc/sys/kernel/perf_event_paranoidretorna 1, então parece que eu seria capaz de fazer pelo menos algumas medições (BTW. qual é a diferença entre "dados de perfil do kernel" e "dados de eventos da CPU"? Referência é suficiente)
Jakub Narębski
2
@Jakub: Pelo que entendi, os eventos do kernel permitem ver chamadas para várias funções do kernel. Os eventos da CPU são contadores na CPU que informam quantas vezes um local específico na memória foi atingido. Eu nunca os usei, então não posso contar mais sobre eles; O LWN tem alguns artigos sobre o assunto e ainda está evoluindo.
Gilles 'SO- parar de ser mau'
4
Com paranóico = 2, você ainda pode criar um perfil de seu próprio código no espaço do usuário (por exemplo perf stat awk 'BEGIN{for(i=0;i<10000000;i++){}}', mostrará contagens precisas de ciclos e instruções do espaço do usuário e você pode até obter contagens para uops_issued.any assim por diante), mas não obtém contagens para código executado durante chamadas / interrupções do sistema. Portanto, a frequência da CPU relatada (ciclos / tempo) é pelo menos um pouco menor que a real devido ao tempo gasto no kernel. Veja também Que restrição perf_event_paranoid == 1 está realmente colocando no x86 perf?
Peter Cordes
"Eventos da CPU" significa criar um perfil de tudo em um núcleo inteiro, em vez de por processo / thread. ou seja paranóico = 1 ou superior você pára de perfis do código de outro usuário, e 1 só permite que você perfil código do kernel invocado por seus próprios processos (chamadas do sistema.)
Peter Cordes