Hotspot: CPU-профиль Linux perf
Выбор процесса, запись, чтение сэмплов и неполные стеки.
Hotspot показывает CPU-профили Linux perf. Используйте его для поиска затрат в native C/C++-коде Reckfell 1.0.0; CPU-профиль не является захватом GPU-кадра или полным деревом вызовов управляемого C#.
Подготовьте воспроизводимый запуск
Нужны Linux, рабочий perf, Hotspot, повторяемое действие в проекте и точный исполняемый файл с подходящими отладочными символами. Сохраните бинарник, библиотеки и исходники, соответствующие записи. После пересборки адреса могут указывать уже на другой код.
Для показательного измерения сохраните оптимизацию и настройки рендерера, которые исследуете. Сборка dev_build=yes может выполнять дополнительные проверки и использовать другую оптимизацию. debug_symbols=yes включает native-символы, но сам по себе не задаёт производительность релизной конфигурации. См. порядок native-профилирования и сборку исходников. Отдельные символы, если включены, должны оставаться доступными вместе с соответствующими артефактами.
Для игровой нагрузки выберите процесс игры, для действий редактора — редактор. Project Manager может запустить другой процесс. Сверьте путь и аргументы вместо выбора наибольшего PID. --path задаёт каталог с project.reckfell; --editor добавляйте только для измерения редактора. Не используйте --quit для установившейся нагрузки: он завершает процесс после первой итерации главного цикла.
Запишите и откройте профиль
Замените /absolute-пути ниже. Путь записи намеренно отделён от проекта. Команда запускает игру, а не редактор:
perf record -o /absolute/capture/perf.data --call-graph dwarf -- /absolute/Source/bin/reckfell.linuxbsd.editor.x86_64 --path /absolute/project
hotspot /absolute/capture/perf.dataИмя бинарника — пример для выбранной сборки редактора; укажите фактический результат сборки. Сначала создайте каталог записи. Выполните действие, штатно закройте игру, затем запустите вторую команду. Ожидаемый результат: непустой perf.data и сэмплы нужного процесса. Для других параметров записи используйте документацию установленной версии perf.
Hotspot также умеет запускать процесс или подключаться через Record Data. Запуск включает стартовую нагрузку; используйте подключение или фильтр временного интервала, если исследуете другое действие. Разрешения записи зависят от Linux-хоста: разбирайте конкретную ошибку perf вместо постоянного запуска всей IDE/профилировщика от root. См. запись и диагностику Hotspot.
Прочитайте результат
Перед чтением Flame Graph выберите нужные процесс, поток и временной интервал. При обычном on-CPU sampling более широкий стек означает большую долю измеренных CPU-затрат выбранного события, а не измеренную длительность одного вызова. Inclusive включает вызываемые функции; self/exclusive исключает их. Перед изменением общей утилиты проверьте вызывающий код: много дешёвых вызовов и несколько дорогих требуют разных решений.
Один CPU sampling не объясняет время сна, ожидания GPU или блокировки на I/O. Сопоставьте его с измерением кадров, а при необходимости — подходящим захватом ожиданий/трассировки. Малое число CPU-сэмплов само по себе не доказывает ограничение GPU. При сравнении до/после сохраняйте действие, сборку, качество и параметры записи; изменение времени кадра указывайте отдельно от процентов сэмплов.
Найдите причину неполных данных
| Симптом | Следующая проверка |
|---|---|
| Нет сэмплов / не то приложение | Ошибка perf, путь, PID, интервал и фильтр процесса |
| Неизвестные функции | Соответствующие бинарник/библиотеки, наличие символов и пути их поиска |
| Обрезанные стеки | Поддержка раскрутки и размер копируемого DWARF-стека; увеличение повышает объём/накладные расходы записи |
| Потерянные сэмплы | Предупреждения записи, частота событий и нагрузка на хранилище; повтор после устранения причины |
| Нет названий C#-методов | Native CPU-профилирование не подтверждает разрешение managed JIT-символов |
Границы проверки
Параметры движка и выбор процесса сверены с текущими исходниками и сохранённым Windows CLI-подтверждением. Порядок работы Hotspot/perf проверен по первичной документации. Захват Linux, разрешение символов, интерфейс профилировщика, managed-стеки, GPU-время и ускорение здесь не проверены. Source, Runtime и SDK не изменены.