Нужны ли мне права root (admin) для запуска инструмента perf пользователя? (события perf включены в ядре Linux)

25

Нужно ли запускать perfинструмент пространства пользователя как системный администратор (root), или я могу запустить его (или хотя бы несколько подкоманд) как обычный пользователь?

Якуб Наребски
источник
2
Программы Unix, которые не могут делать то, что им нужно из-за отсутствия разрешений, обычно выдают ошибку, если они не могут выполнять свою работу. Запустите его и посмотрите!
Калеб
1
Я задаю этот вопрос, чтобы решить, стоит ли пытаться установить (как обычный пользователь, в $ HOME) пользовательскую часть perfинструмента (которая может быть / может быть нетривиальной).
Якуб Наребски
К вашему сведению, в Ubuntu perfесть linux-toolsпакет, поэтому установка perfтам проста.
Якуб Наребски
1
@ JakubNarębski: За исключением случаев, когда это не ваша машина, и администраторы не хотят устанавливать пакеты.
Мартин Уединг

Ответы:

33

То, что вы можете делать, perfне будучи пользователем root, зависит от настройки sysctl .kernel.perf_event_paranoid

  • kernel.perf_event_paranoid= 2: вы не можете проводить какие-либо измерения. perfУтилита все еще может быть полезной для анализа существующих записей perf ls, perf report, perf timechartили perf trace.
  • kernel.perf_event_paranoid= 1: вы можете отследить команду с помощью perf statили perf recordи получить данные профилирования ядра.
  • kernel.perf_event_paranoid= 0: вы можете отследить команду с помощью perf statили perf recordи получить данные о событиях процессора.
  • kernel.perf_event_paranoid= -1: вы получаете необработанный доступ к точкам трассировки ядра (в частности, вы можете mmapсоздать файл, созданный perf_event_open, я не знаю, каковы последствия).
Жиль "ТАК - перестань быть злым"
источник
1
Ницца. cat /proc/sys/kernel/perf_event_paranoidвозвращает 1, так что, похоже, я смог бы провести хотя бы несколько измерений (кстати, какая разница между «данными профилирования ядра» и «данными о событиях процессора»? Справки достаточно)
Якуб Наренбский
2
@Jakub: Насколько я понимаю, события ядра позволяют вам видеть вызовы различных функций ядра. События ЦП - это счетчики ЦП, которые сообщают вам, сколько раз было затронуто определенное место в памяти. Я никогда не использовал их, поэтому я не могу рассказать вам больше о них; У LWN есть довольно много статей на эту тему, и это все еще развивается.
Жиль "ТАК ... перестать быть злым"
4
С paranoid = 2 вы все равно можете профилировать свой собственный код в пользовательском пространстве (например perf stat awk 'BEGIN{for(i=0;i<10000000;i++){}}', покажет точный цикл пользовательского пространства и количество команд, и вы даже можете получить счет за uops_issued.any и т. Д.), Но вы не получите счет за код который работал во время системных вызовов / прерываний. Таким образом, заявленная частота процессора (циклы / время), по крайней мере, немного ниже, чем фактическая из-за времени, проведенного в ядре. Смотрите также Какое ограничение на perf_event_paranoid == 1 фактически накладывает на x86 perf?
Питер Кордес
«События процессора» означают профилирование всего на всем ядре, а не на процесс / поток. то есть paranoid = 1 или выше не позволяет вам профилировать код другого пользователя, а 1 только позволяет профилировать код ядра, вызываемый вашими собственными процессами (системными вызовами).
Peter Cordes