Я в тупике, я прочитал учебник по производительности и пытаюсь провести простой тест, помимо «статистики производительности», который работает. Однако первичная запись либо не работает, либо первичная аннотация не показывает записанных образцов. Запуск производительности
Например (я работаю с sudo, потому что без него я получаю кучу ошибок, которые я опубликую в конце):
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
Так что, насколько я понимаю. Я попытался перестроить perf для своей ssystem из исходников, но это тоже не помогло.
Я использую ядро Ubuntu 14.04 3.19.0-49-generic. Это на процессоре Intel i7 I4510U. Я скомпилировал свою программу с помощью символов, но я получаю одинаковые результаты независимо от того, какое приложение я пытаюсь профилировать.
-- если я запускаю без 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
sudo
.perf
пытается включить процессорное время, проведенное в режиме ядра, в системные вызовы. Если вы пытаетесь профилировать только то, что ваш код делает в пользовательском пространстве, предупреждающее сообщение безвредно. Профилирование все еще работает. Ошибкаperf report
из-за того, что образцы данных принадлежат пользователю root и не читаются? Попробуйте удалить все файлы, принадлежащие root, и начать заново, вообще не используя sudo. - person Peter Cordes   schedule 19.02.2016