Pytanie perf: Nie można zarejestrować referencyjnego symbolu przeniesienia jądra


Skompilowałem perf dla mojego jądra (3.11.10). Podczas kompilacji brakowało niektórych bibliotek, więc je zainstalowałem.

Ale teraz, kiedy biegnę perf, Otrzymuję następujący komunikat:

Couldn't record kernel reference relocation symbol
Symbol resolution may be skewed if relocation was used (e.g. kexec).
Check /proc/kallsyms permission or run as root.

Kernel address maps (/proc/{kallsyms,modules}) were restricted.
Check /proc/sys/kernel/kptr_restrict before running 'perf record'
If some relocation was applied (e.g. kexec) symbols may be misresolved.
Samples in kernel modules can't be resolved as well.

Ponieważ używam niestandardowego jądra kompilacji, najbardziej oczywistym wyjaśnieniem jest dla mnie, że niektórych opcji brakuje w moim jądrze. Jeśli tak, to w jaki sposób mogę dowiedzieć się, czego brakuje?

Nie jestem pewien co dokładnie perf narzeka. Jak mogę to naprawić?

EDYTOWAĆ:

/proc/kallsyms nie istnieje i /proc/sys/kernel/kptr_restrict zawiera 0:

$ cat /proc/sys/kernel/kptr_restrict
0

Sam skompilowałem jądro i możliwe, że brakuje mu jakiejś opcji. Co to jest /proc/kallsyms ? Jak mogę włączyć to w moim jądrze?


18
2018-01-22 13:56


pochodzenie




Odpowiedzi:


Jakie jest twoje jądro? Czy pochodzi to z używanego przez ciebie systemu linuksowego, czy też jest on skompilowany przez ciebie (jak go zainstalowałeś)?

Pierwsza część ostrzeżenia mówi o / proc / kallsyms - czy możesz wyświetlić wyjście polecenia (uruchomione od tego samego użytkownika, którego użyłeś do uruchomienia perf)

ls -l  /proc/kallsyms
cat /proc/kallsyms | head

Druga część perf wiadomość mówi o ustawieniu sysctl kptr_restrict. Czy możesz to zrobić

cat /proc/sys/kernel/kptr_restrict

sprawdzić ustawienie. Zasadniczo, aby profilować symbole jądra, należy wyłączyć kptr_restrict, ustawiając go na zero (zgodnie z opisem w https://lwn.net/Articles/420403/ lub https://code.google.com/p/dart/wiki/Profiling):

# Run as root user - e.g. after doing "sudo bash"
echo 0 > /proc/sys/kernel/kptr_restrict

lub (https://stackoverflow.com/a/20391360/196561)

sudo sh -c " echo 0 > /proc/sys/kernel/kptr_restrict"

lub

echo 0 | sudo tee /proc/sys/kernel/kptr_restrict

lub zawsze możesz uruchomić perf od użytkownika root.

Po ustawieniu kptr_restrict na zero lub uruchomieniu perf z root'a nie powinieneś otrzymywać ostrzeżeń o kallsymach i będziesz mógł profilować funkcje jądra.

Aktualizacja: wydaje się, że perf record zawsze chcesz mieć dostęp do kallsyms / restricted kptrs, nawet z wydarzeniem tylko dla przestrzeni użytkownika (-e cycles:u)


21
2018-02-05 21:14





Ten samouczek działał idealnie dla mnie!

http://lost-and-found-narihiro.blogspot.com/2012/06/how-to-install-perf-kernel-performance.html

Skopiowano z samouczka:

$ cat /proc/sys/kernel/kptr_restrict
1
$ echo 0 > /proc/sys/kernel/kptr_restrict
$ cat /proc/sys/kernel/kptr_restrict
0

3
2017-11-16 19:42