Чи потрібні права root (адміністратора), щоб запустити інструмент 'perf' простору користувача? (події Perf увімкнено в ядрі Linux)


25

Чи потрібно мені запускати perfінструмент простору користувачів як системний адміністратор (root), або я можу запустити його (або принаймні деякі підкоманди) як звичайний користувач?


2
Програми Unix, які не можуть робити те, що їм потрібно робити, через відсутність дозволів, як правило, можуть призвести до помилки, якщо вони не можуть виконати свою роботу. Запустіть його і подивіться!
Калеб

1
Я задаю це питання, щоб вирішити, чи варто спробувати встановити (як звичайний користувач, в $ HOME) частину perfінструмента користувальницької області (яка / може бути нетривіальною).
Якуб Нарбський

FYI в Ubuntu perfє в linux-toolsпакеті, тому встановити perfтам просто.
Якуб Нарубський

1
@ JakubNarębski: За винятком випадків, коли це не ваша власна машина і адміністратори неохоче встановлюють пакети.
Мартін Удінг

Відповіді:


33

Що ви можете зробити, perfне використовуючи root, залежить відkernel.perf_event_paranoid налаштування sysctl .

  • 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, і отримати дані подій CPU.
  • kernel.perf_event_paranoid= -1: Ви отримуєте необроблений доступ до траспойнтних ядер (конкретно, ви можете mmapстворити файл perf_event_open, який я не знаю, що це за наслідки).

1
Приємно. cat /proc/sys/kernel/perf_event_paranoidповертає 1, тож здається, що мені вдалося б зробити хоча б деякі вимірювання (BTW. яка різниця між "даними профілювання ядра" та "даними про події CPU"? Довідки достатньо)
Jakub Narębski

2
@Jakub: З того, що я розумію, події ядра дозволяють вам бачити дзвінки до різних функцій ядра. Події CPU - це лічильники в процесорі, які показують, скільки разів потрапляло певне місце в пам'яті. Я ніколи їх не використовував, тому не можу розповісти більше про них; LWN має досить багато статті на цю тему, і вона все ще розвивається.
Жил 'ТАК - перестань бути злим'

4
З параноїдом = 2 ви все одно можете профайлювати власний код у просторі користувача (наприклад, perf stat awk 'BEGIN{for(i=0;i<10000000;i++){}}'буде показано точний цикл користувальницького простору та кількість інструкцій, і ви навіть можете отримати підрахунки uops_issued.any тощо), але ви не отримаєте рахунки за код що бігав під час системних дзвінків / переривань. Тож повідомлена частота процесора (цикли / час) принаймні дещо нижча за фактичну через час, проведений у ядрі. Дивіться також Яке обмеження perf_event_paranoid == 1 насправді накладає на x86 perf?
Пітер Кордес

"CPU події" означає профілювання всього на цілому ядрі, а не на процес / потік. тобто параноїд = 1 або вище зупиняє вас від профілювання коду іншого користувача, а 1 дозволяє лише профілювати код ядра, на який посилаються ваші власні процеси (системні дзвінки.)
Пітер Кордес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.