Je suis perplexe, j'ai lu le tutoriel perf et j'essaie de faire un test simple au-delà de "perf stat" qui fonctionne. Cependant l'enregistrement de perf ne fonctionne pas, ou l'annotation de perf montre aucun échantillon enregistré. Courir perfPourquoi l'enregistrement et l'annotation de perf ne fonctionnent-ils pas?
Par exemple (im en cours d'exécution avec sudo parce que sans elle, je reçois un tas d'erreurs que je poste à la fin):
sudo perf record -e cycles,instructions,cache-misses -a -c 1 ./FooExe
[ perf record: Woken up 4 times to write data ]
[ perf record: Captured and wrote 1.794 MB perf.data (~78393 samples) ]
.
sudo perf report -D -i perf.data |grep RECORD_SAMPLE |wc -l
Failed to open /tmp/perf-23796.map, continuing without symbols
20486
.
sudo perf annotate -d ./FooExe
the perf.data file has no samples! Press any key
, donc: pour autant que je reçois. J'ai essayé de reconstruire perf pour mon ssystem de source mais cela n'a pas semblé aider non plus. Im utilisant Ubuntu 14.04 noyau 3.19.0-49-générique. Ceci est sur Intel i7 I4510U cpu. Je me suis assuré de compiler mon programme avec des symboles, mais j'obtiens les mêmes résultats quelle que soit l'application que j'essaie de profiler.
- si je cours sans sudo:
WARNING: Kernel address maps (/proc/{kallsyms,modules}) are restricted,
check /proc/sys/kernel/kptr_restrict.
Samples in kernel functions may not be resolved if a suitable vmlinux
file is not found in the buildid cache or in the vmlinux path.
Samples in kernel modules won't be resolved at all.
If some relocation was applied (e.g. kexec) symbols may be misresolved
even with a suitable vmlinux or kallsyms file.
Cannot read kernel map
Error:
You may not have permission to collect system-wide stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
-1 - Not paranoid at all
0 - Disallow raw tracepoint access for unpriv
1 - Disallow cpu events for unpriv
2 - Disallow kernel profiling for unpriv
Je pourrais poster une réponse plus grande plus tard, mais vous n'avez pas besoin de 'sudo'. 'perf' essaie d'inclure le temps processeur passé en mode noyau dans les appels système. Si vous essayez seulement de profiler ce que fait votre code dans l'espace utilisateur, le message d'avertissement est inoffensif. Le profilage fonctionne toujours. Est-ce que 'perf report' échoue parce que les données de l'échantillon appartiennent à root et sont illisibles? Essayez de supprimer tous les fichiers appartenant à la racine et recommencez sans utiliser sudo du tout. –
ok merci. J'ai essayé de supprimer les données appartenant à sudo et de répéter le test. Quand je le fais, si j'essaye perf annoter -d ./FooExe alors perf démarre démarre montre une barre de progression et se ferme immédiatement. Si je tente sans l'option -d, il montre simplement "fichier perf.data n'a pas d'échantillons" – skimon