
Этот проект представляет собой KDAB R & D, чтобы создать автономный графический интерфейс для данных о производительности. В качестве первой цели мы хотим предоставить пользовательский интерфейс, такой как Kcachersind вокруг Linux Perf. Заглядывая в будущее, мы намерены поддерживать различные другие форматы данных производительности под этим зонтиком.
Вот несколько скриншотов, показывающих наиболее важные особенности горячей точки в действии:
Основной особенностью горячей точки является графическая визуализация файла perf.data .


Примечание. Вставленные функции имеют более темную границу, чем не инлинированные.





Временная линия позволяет фильтрации результатов по времени, процессу или потоку. Представления данных обновляются соответственно.



Вы также можете запустить perf из горячей точки, чтобы профилировать недавно запущенное приложение или подключить к уже запущенному процессу (ES). Принимайте во внимание предостережения ниже.


Примечание: горячая точка еще не упакована на все распределения Linux. В таких случаях, или если вы хотите использовать последнюю версию, используйте Appimage, которое будет работать на любом недавнем дистрибуции Linux.
Hotspot доступна в AUR (https://aur.archlinux.org/packages/hotspot).
Hotspot доступна в Debian (https://packages.debian.org/hotspot) и Ubuntu (https://packages.ubuntu.com/hotspot).
Hotspot Ebuilds доступны в нашем наложении (https://github.com/kdab/kdab-overlay).
Hotspot доступна в Fedora (https://packages.fedoraproject.org/pkgs/hotspot/hotspot/).
Вы можете либо перейти к наиболее текущему выпуску, либо непрерывной сборкой. В обоих случаях вы найдете AppImage под «активами», которое вы можете скачать. Не допустите файла Appimage (в случае последнего выпуска), затем сделайте его исполняемым файлом, а затем запустите его.
Пожалуйста, используйте последнюю сборку, чтобы получить самую последнюю версию. Если это не работает, сообщите об ошибке и протестируйте последнюю стабильную версию.
Примечание: ваши системные библиотеки или предпочтения не изменяются. Если вы захотите снова удалить горячую точку, просто удалите загруженный файл. Узнайте больше о Appimage здесь.
Чтобы выяснить, как отлаживать аппетитное доклад, см. Hacking.
Создание горячей точки из Source дает вам последнюю и лучшую, но вам придется убедиться, что все его зависимости доступны. Большинство пользователей, вероятно, должны установить горячую точку с диспетчера пакетов Distro или в качестве аппарата.
Для всех, кто хочет внести свой вклад в горячую точку или использовать новейшую версию без примечания, подробные заметки находятся в Hacking.
Прежде всего, запишите некоторые данные с perf . Чтобы получить бэктрейсы, вам нужно будет включить режим Callgraph Callgraph:
perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ] Теперь, если у вас есть горячая точка, доступная на одной машине, все, что вам нужно сделать, это запустить ее. Он автоматически откроет файл perf.data в текущем каталоге (аналогично perf report ).
В качестве альтернативы, вы можете указать путь к файлу данных на консоли:
hotspot /path/to/perf.data В зависимости от ваших потребностей вы можете передать дополнительные параметры командной строки в точку доступа. Это позволяет одноразовым параметрам конфигурации, которые находятся в графическом интерфейсе в разделе «Настройки», а также позволяют преобразовать файлы данных Linux perf в меньший и портативный формат Perfdata (см. Импорт / Экспорт для получения подробной информации об этом). Все параметры командной строки показаны с помощью --help :
Usage: hotspot [options] [files...]
Linux perf GUI for performance analysis.
Options:
-h, --help Displays help on commandline options.
--help-all Displays help including Qt specific options.
-v, --version Displays version information.
--sysroot <path> Path to sysroot which is used to find libraries.
--kallsyms <path> Path to kallsyms file which is used to resolve
kernel symbols.
--debugPaths <paths> Colon separated list of paths that contain debug
information. These paths are relative to the
executable and not to the current working directory.
--extraLibPaths <paths> Colon separated list of extra paths to find
libraries.
--appPath <path> Path to folder containing the application executable
and libraries.
--sourcePaths <paths> Colon separated list of search paths for the source
code.
--arch <path> Architecture to use for unwinding.
--exportTo <path> Path to .perfparser output file to which the input
data should be exported. A single input file has to
be given too.
--perf-binary <path> Path to the perf binary.
--objdump-binary <path> Path to the objdump binary.
Arguments:
files Optional input files to open on startup, i.e.
perf.data files.
Hotspot поддерживает очень мощный способ проведения анализа времени ожидания или профилирования вне CPU. Этот анализ основан на трацепоинтах ядра в планировщике Linux. Записывая эти данные, мы можем найти дельту времени, в течение которой поток не работал на процессоре, а вместо этого не была вне CPU. Для этого может быть несколько причин, которые можно найти с помощью этой техники:
read() или write()mmap() 'ed файловые данныеnanosleep() или yield()futex() и т. Д.Используя точки следов ядра в планировщике, накладные расходы довольно управляемые, и мы платим только цену, когда процесс фактически переключается. В частности, мы не платим цену, когда, например, операция блокировки Mutex может быть обработана непосредственно в пространстве пользователя.
Чтобы сделать анализ вне CPU с помощью горячей точки, вам нужно записать данные с очень специфической командой:
perf record
-e cycles # on-CPU profiling
-e sched:sched_switch --switch-events # off-CPU profiling
--sample-cpu # track on which core code is executed
-m 8M # reduce chance of event loss
--aio -z # reduce disk-I/O overhead and data size
--call-graph dwarf # we definitely want backtraces
< your application >В качестве альтернативы, вы можете использовать флажок Off-CPU на странице интегрированной записи Hotspot.
Во время анализа вы можете переключиться между просмотром стоимости «циклов» для данных ON-CPU на просмотр затрат на CPU времени для анализа времени ожидания. Часто вы захотите изменить между обоими, например, чтобы найти места в вашем кодексе, которые могут потребовать дальнейшей параллелизации (см. Также закон Амдаля).
Стоимость "SHAD: SHAD_SWITCH" также будет показана вам. Но, по моему мнению, это менее полезно, так как это указывает только на количество коммутаторов планировщика. Продолжительность времени между ними часто бывает более интересной для меня - и это то, что показывается вам в метрике «Время вне CPU».
Если вы записываете в встроенной системе, вы захотите проанализировать данные на вашей машине разработки с помощью горячей точки. Для этого убедитесь, что ваш Sysroot содержит информацию отладки, необходимую для разматывания (см. Ниже). Затем запишите данные в вашей встроенной системе:
embedded$ perf record --call-graph dwarf < your application >
...
[ perf record: Woken up 58 times to write data ]
[ perf record: Captured and wrote 14.874 MB perf.data (1865 samples) ]
embedded$ cp /proc/kallsyms /tmp/kallsyms # make pseudo-file a real fileЭто нормально, если ваша встроенная машина использует другую платформу, чем ваш хост. На вашем хосте выполните следующие шаги, чтобы проанализировать данные:
host$ scp embedded:perf.data embedded:/tmp/kallsyms .
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms
perf.dataЕсли вы вручную развернули приложение с пути за пределами вашего Sysroot, сделайте это вместо этого:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
perf.dataЕсли ваше приложение также использует библиотеки за пределами вашего Sysroot и AppPath, сделайте это:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
perf.dataИ, в худшем случае, если вы также используете файлы сплит-отладки в нестандартных местах, сделайте это:
host$ hotspot --sysroot /path/to/sysroot --kallsyms kallsyms --appPath /path/to/app
--extraLibPaths /path/to/lib1:/path/to/lib2:...
--debugPaths /path/to/debug1:/path/to/debug2:...
perf.data Формат файла perf.data не является автономным. Чтобы проанализировать его, вам нужен доступ к исполняемым файлам и библиотекам профилированного процесса вместе с символами отладки. Это делает его громоздким делиться такими файлами на между машинами, например, чтобы получить помощь от коллеги, чтобы исследовать проблему с производительностью или в целях отчетности об ошибках.
Hotspot позволяет вам экспортировать анализируемые данные, которые затем полностью автономны. Эта функция доступна через действие «Сохранить> Сохранить как». Затем данные сохраняются в автономном *.perfparser файле. Чтобы импортировать данные в горячую точку, просто откройте этот файл непосредственно вместо исходного файла perf.data .
В качестве альтернативы вы также можете выполнить экспорт из командной строки (без графического интерфейса, так что это также можно использовать с помощью автоматических сборок), используя опцию --exportTo .
Примечание. Формат файла еще не стабилен. Значение данных, экспортируемых одной версией горячей точки, может быть прочитана только в той же версии. Эта проблема будет решена в будущем, как позволит время.
Hotspot в настоящее время показывает только название Tracepoints на временной шкале.


Hotspot включает в себя разборщик, который может показать вам стоимость за инструкцию. Дизассемблер использует цвета, чтобы указать, какие строки сборки соответствуют той строке исходного кода. Для облегчения навигации вы можете просто нажать на строку, а другой вид будет подскочить к ней. Вы можете следить за вызовами функций с помощью двойного щелчка. В представлении SourceCode вы можете нажать Ctrl+F или нажать значок поиска, чтобы открыть окно поиска.
Если у вас есть источники в другом каталоге, вы можете использовать --sourcePaths или настройки, чтобы выбрать Disassembler для поиска там для исходного кода.
Если что -то сломается в вышеперечисленном, и вывод менее используется, чем perf report , сообщите о проблеме на GitHub. Тем не менее, есть некоторые известные проблемы, которые могут пережить люди:
Раскрытие стека для создания обратной связи - это темное искусство и может пойти не так во многих отношениях. Горячая точка полагается на perfparser (см. Ниже), что, в свою очередь, зависит от libdw от Elfutils, чтобы расслабиться в стеке. Большую часть времени это работает довольно хорошо, но все же может пойти не так. В частности, раскручение потерпит неудачу, когда:
perf.data--debugPaths <paths> : Используйте это, когда у вас есть файлы отладки в нестандартных местах--extraLibPaths <paths> : Используйте это, когда вы перемещаете библиотеки в какое-то другое место с момента записи--appPath <paths> : Это своего рода комбинация из двух вышеупомянутых полей. Путь пересекается рекурсивно, ищет файлы и библиотеки отладки.--sysroot <path> : Используйте это, когда вы пытаетесь осмотреть файл данных, записанный на встроенной платформе-O2 -g . Вам придется повторить шаг perf record По умолчанию perf record только часть стека в файл данных. Это может привести к проблемам с очень глубокими стеками вызовов, которые будут отрезаны в какой -то момент. Эта проблема сломает нисходящие деревья вызовов в горячей точке, как визуализировано в нисходящем виде или на графике пламени. Чтобы исправить это, вы можете попытаться увеличить размер дампа стека, то есть:
perf record --call-graph dwarf,32768
Обратите внимание, что это может значительно увеличить размер файлов perf.data - используйте его с осторожностью. Также посмотрите на man perf record .
Для некоторых сценариев рекурсивные вызовы функций просто не могут быть разматывающими. Смотрите также #93
Hotspot поддерживает загрузку символов отладки через DebugInfod. Это может быть включено, добавив URL -адреса загрузки в настройки или запустив точку доступа с DEBUGINFOD_URLS определенным в среде.
По сравнению с perf report , горячая точка пропускает много функций. Некоторые из них планируются решить в будущем. Другие могут потенциально никогда не внедрять. Но имейте в виду, что следующие функции в настоящее время недоступны в горячей точке:
--itrace --mem-mode --branch-stack и --branch-history , не поддерживаются Это не очень хорошая идея, чтобы запустить горячую точку с sudo или как root -пользователем. См. Например, файлы редактирования как ROY для статьи по этому вопросу. Выпуск № 83 также актуальна в этом контакте.
Но без прав суперпользователя вы можете увидеть сообщения об ошибках, такие как следующие при использовании функции записи Hotspot:
You may not have permission to collect 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
Чтобы обходной путь, горячая точка может запускать перфу с повышенными привилегиями.
Текущий экспорт данных ограничен форматом, который можно прочитать только точкой той точки той же версии. Это делает взаимодействие с другими инструментами визуализации квази невозможным. Это известно и будет улучшено в будущем. В частности, поддержка экспорта веб -зрителям, таким как Perfetto или Mozilla Profiler, планируется, но еще не реализована. Патчи приветствуются!
Этот проект использует превосходную утилиту perfparser созданную компанией QT для своего создателя QT. Если вы уже используете создатель QT, рассмотрите возможность использования его интегрированного анализатора использования ЦП.
Горячая точка лицензирована в соответствии с GPL V2+. См. License.gpl.txt для получения дополнительной информации, или обратитесь к [email protected], если какие -либо условия этого лицензирования вам не ясны.