2014-01-22 5 views
17

Ich habe perf für meinen Kernel (3.11.10) kompiliert. Während der Kompilierung fehlten einige Bibliotheken, also habe ich diese installiert.perf: Konnte nicht aufgezeichnet Referenz Reference Relocation

Aber jetzt, wenn ich perf laufen, ich folgende Meldung:

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. 

Da ich Maßarbeit Kernel verwende, die naheliegendste Erklärung ist für mich, dass einige Option aus meinem Kernel fehlt. Wenn ja, wie kann ich herausfinden, was fehlt?

Ich bin mir nicht sicher, was genau perf beschwert wird. Wie kann ich das beheben?

EDIT:

/proc/kallsyms existiert nicht und /proc/sys/kernel/kptr_restrict enthält 0:

$ cat /proc/sys/kernel/kptr_restrict 
0 

Ich habe kompiliert den Kernel selbst, und es ist möglich, dass es einige Option fehlt. Was ist das /proc/kallsyms? Wie kann ich es in meinem Kernel aktivieren?

Antwort

21

Was ist Ihr Kernel? Ist es von der Linux-Distribution, die Sie verwenden oder ist es von Ihnen kompiliert (wie haben Sie es installiert)?

Erster Teil der Warnung sagt über/proc/kallsyms - können Sie die Ausgabe des Befehls zeigen (aus dem gleichen Benutzer gestartet Sie perf laufen verwendet)

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

Zweiter Teil der perf Nachricht sagt über kptr_restrict sysctl-Einstellung. Können Sie tun

cat /proc/sys/kernel/kptr_restrict 

, um die Einstellung zu überprüfen. Grundsätzlich ist die Kernel-Symbole profilieren Sie sollten entweder disable kptr_restrict indem sie auf Null gesetzt werden (wie in https://lwn.net/Articles/420403/ oder https://code.google.com/p/dart/wiki/Profiling beschrieben):

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

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

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

oder

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

oder Sie können immer die perf von Root-Benutzer ausführen.

Nachdem Sie kptr_restrict auf Null gesetzt haben oder wenn Sie perf von root ausführen, sollten Sie keine Warnung über kallsyms erhalten und Kernelfunktionen profilieren können.

Update: scheint, dass perf record immer Zugriff wollen kallsyms/beschränkt kptrs, auch mit User-Space-only Event (-e cycles:u)