Czy potrzebuję uprawnień administratora (administratora), aby uruchomić narzędzie „perf” przestrzeni użytkownika? (zdarzenia perf są włączone w jądrze Linuksa)

25

Czy muszę uruchomić perfnarzędzie przestrzeni użytkownika jako administrator systemu (root), czy mogę uruchomić to (lub przynajmniej niektóre podkomendy) jako zwykły użytkownik?

Jakub Narębski
źródło
2
Programy uniksowe, które nie mogą zrobić tego, co muszą zrobić z powodu braku uprawnień, zwykle zgłaszają błąd, jeśli nie mogą wykonać swojej pracy. Uruchom i zobacz!
Caleb
1
Zadaję to pytanie, aby zdecydować, czy warto próbować zainstalować (jako zwykły użytkownik, w $ HOME) część przestrzeni użytkownika w perfnarzędziu (która jest / może być łatwa).
Jakub Narębski
FYI w Ubuntu perfjest w linux-toolspakiecie, więc instalacja perfjest prosta.
Jakub Narębski
1
@ JakubNarębski: Z wyjątkiem sytuacji, gdy nie jest to twoja własna maszyna, a administratorzy niechętnie instalują pakiety.
Martin Ueding

Odpowiedzi:

33

To, co możesz zrobić perfbez rootowania, zależy od ustawienia sysctl .kernel.perf_event_paranoid

  • kernel.perf_event_paranoid= 2: nie możesz wykonać żadnych pomiarów. perfNarzędzie może nadal być przydatne do analizy istniejących rekordów z perf ls, perf report, perf timechartlub perf trace.
  • kernel.perf_event_paranoid= 1: możesz prześledzić polecenie za pomocą perf statlub perf recordi uzyskać dane profilowania jądra.
  • kernel.perf_event_paranoid= 0: możesz prześledzić polecenie za pomocą perf statlub perf recordi uzyskać dane o zdarzeniach procesora.
  • kernel.perf_event_paranoid= -1: masz surowy dostęp do punktów śledzenia jądra (konkretnie, możesz utworzyć mmapplik przez perf_event_open, nie wiem jakie są tego konsekwencje).
Gilles „SO- przestań być zły”
źródło
1
Miły. cat /proc/sys/kernel/perf_event_paranoidzwraca 1, więc wydaje się, że byłbym w stanie wykonać przynajmniej niektóre pomiary (BTW. jaka jest różnica między „danymi profilowania jądra” a „danymi zdarzenia CPU”? Odniesienie wystarczy)
Jakub Narębski
2
@Jakub: Z tego, co rozumiem, zdarzenia jądra pozwalają zobaczyć wywołania różnych funkcji jądra. Zdarzenia procesora to liczniki w procesorze, które informują o tym, ile razy została trafiona określona lokalizacja w pamięci. Nigdy ich nie używałem, więc nie mogę ci więcej o nich powiedzieć; LWN ma sporo artykułów na ten temat i wciąż się rozwija.
Gilles 'SO- przestań być zły'
4
Przy paranoidzie = 2 nadal możesz profilować swój własny kod w przestrzeni użytkownika (np. perf stat awk 'BEGIN{for(i=0;i<10000000;i++){}}'Pokaże dokładny cykl przestrzeni użytkownika i liczbę instrukcji, a nawet możesz uzyskać liczby dla uops_issued.any itd.), Ale nie otrzymujesz liczby dla kodu które działały podczas wywołań / przerwań systemowych. Tak więc raportowana częstotliwość procesora (cykle / czas) jest co najmniej nieco niższa niż rzeczywista z powodu czasu spędzonego w jądrze. Zobacz także Jakie ograniczenie perf_event_paranoid == 1 faktycznie nakłada na x86 perf?
Peter Cordes,
„Zdarzenia procesora” oznaczają profilowanie wszystkiego na całym rdzeniu zamiast na proces / wątek. tzn. paranoid = 1 lub wyższy powstrzymuje Cię od profilowania kodu innego użytkownika, a 1 pozwala tylko profilować kod jądra wywołany przez twoje własne procesy (wywołania systemowe)
Peter Cordes