Execute perf sem direitos de root


27

Estou executando o teste debian com o kernel 4.1 e a versão 4.1 da perfferramenta. Nesta versão, eles parecem ter adicionado algum tipo de proteção para impedir que usuários normais coletem dados dessa ferramenta. Portanto, rodar perfcomo usuário normal dará esse erro:

perf stat ls
Error:
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
 -1 - Not paranoid at all
  0 - Disallow raw tracepoint access for unpriv
  1 - Disallow cpu events for unpriv
  2 - Disallow kernel profiling for unpriv

perf_event_paranoidcontém 3 na minha instalação. Infelizmente não posso alterar esse arquivo nem como root. Como posso permitir que meu próprio usuário use perfsem direitos sudo?

Eu tenho um aplicativo que gostaria de fazer benchmark que não precisa de raiz e não quero executá-lo como root para fazer benchmark.


Funciona perf stat -e cycles:u? O valor "3" perf_event_paranoidfoi adicionado em 2016 lwn.net/Articles/696216 "Disallowing perf_event_open ()" e foi ativado no "Android e Debian" (também lkml.org/lkml/2016/1/11/587 bugs.launchpad. net / bugs / 1612790 debian.org/security/2017/dsa-3791 )
osgx

11
@osgx: Para mim, com nível paranóico 3, sua sugestão não funciona, ainda não tenho permissão para usá-lo.
Martin Ueding

Respostas:


41

Arquivos /procgraváveis ​​geralmente são alterados ao ecoar um valor neles. Você deveria tentar:

sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid'

Os arquivos /proc/sys/também possuem o comando sysctl para facilitar o acesso, portanto, você pode:

sudo sysctl -w kernel.perf_event_paranoid=1

(embora o -wfor write pareça ser opcional). Para garantir que isso seja feito no momento da inicialização, crie seu próprio /etc/sysctl.d/99-mysettings.confarquivo com a linha

kernel.perf_event_paranoid=1

Escolha um nome de arquivo que não substitua os arquivos existentes em /run/sysctl.d/e /usr/lib/sysctl.d/. Veja man sysctl.d .


12
Para persistir nas reinicializações:sudo sh -c 'echo kernel.perf_event_paranoid=1 > /etc/sysctl.d/local.conf'
Márcio

11
adicione o comentário à resposta, por favor
Leos313 13/08

11
@ Leos313 feito. Obrigado pela lembrança.
meuh 13/08

@ Márcio: Você quer acrescentar a local.conf, não truncar. Ou escreva para/etc/sysctl.d/perf.conf
Peter Cordes
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.