Запустите perf без рут-прав


27

Я запускаю тестирование Debian с ядром 4.1 и версией perfинструмента 4.1 . В этой версии они, кажется, добавили какую-то защиту, чтобы не дать обычным пользователям собирать данные из этого инструмента. Таким образом, запуск perfв обычном режиме выдает эту ошибку:

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_paranoidсодержит 3 в моей установке. К сожалению, я не могу изменить этот файл даже как root. Как я могу разрешить своему собственному пользователю использовать perfбез прав sudo?

У меня есть приложение, которое я хотел бы сравнить, которому не нужен root, и я не хочу запускать его как root для сравнения.


Работает ли perf stat -e cycles:u? Значение «3» perf_event_paranoidбыло добавлено в 2016 г. lwn.net/Articles/696216 «Запретить perf_event_open ()» и было включено в «Android и Debian» (также lkml.org/lkml/2016/1/11/587 bugs.launchpad. net / bugs / 1612790 debian.org/security/2017/dsa-3791 )
osgx

1
@osgx: Для меня с параноидальным уровнем 3 ваше предложение не работает, мне все равно не разрешено его использовать.
Мартин Уединг

Ответы:


41

Файлы /proc, которые доступны для записи, обычно изменяются путем ввода значения в них. Тебе стоит попробовать:

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

Файлы для этого /proc/sys/также имеют команду sysctl для легкого доступа, поэтому вы можете вместо этого сделать:

sudo sysctl -w kernel.perf_event_paranoid=1

(хотя -wдля записи кажется необязательным). Чтобы убедиться, что это сделано во время загрузки, создайте свой собственный /etc/sysctl.d/99-mysettings.confфайл со строкой

kernel.perf_event_paranoid=1

Выберите имя файла, которое не будет переопределять существующие файлы в /run/sysctl.d/и /usr/lib/sysctl.d/. Смотрите man sysctl.d .


12
Для сохранения через перезагрузки:sudo sh -c 'echo kernel.perf_event_paranoid=1 > /etc/sysctl.d/local.conf'
Марсио

1
добавьте комментарий к ответу, пожалуйста
Leos313

1
@ Leos313 готово. Спасибо за напоминание.
meuh

@ Марсио: Вы хотите добавить к local.conf, не сокращайте. Или напишите/etc/sysctl.d/perf.conf
Питер Кордес
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.