Какие факторы влияют на скорость трассировки процессора?

Когда я использую YJP для отслеживания профиля процессора в нашем собственном продукте, это происходит очень медленно.

Продукт работает на 16-ядерной машине с кучей 8 ГБ, и я использую шлифовальный станок для запуска теста небольшой нагрузки (например, 10 потоков шлифовального станка), который имеет около 7-10 шагов во время профилирования. У меня есть сценарий для запуска продукта с помощью профилировщика, начала профилирования (с использованием api контроллера), а затем запуска измельчителя для имитации операций пользователя. Когда все операции завершаются, сценарий сообщает профилировщику прекратить профилирование и сохранить снимок.

Во время профилирования для каждого этапа теста кофемолки требуется более 1 миллиона мсек. Весь процесс профилирования часто занимает более 10 часов с использованием всего 10 резьб шлифовального станка, и каждая из них запускает тест по 10 раз. Без профилировщика он завершается в течение 500 мс.

Итак ... помимо проблем с продуктом, который нужно профилировать, есть ли что-нибудь еще, что влияет на производительность самого процесса трассировки процессора?


person coolcfan    schedule 13.05.2013    source источник
comment
Обновление: в YJP 2013 трассировка процессора занимает всего 5 минут для простого теста, который раньше занимал 2 часа с тем же тестом в 12.0.5.   -  person coolcfan    schedule 08.11.2013


Ответы (2)


В последний раз я использовал YourKit (v7.5.11, который довольно старый, текущая версия - 12), в нем были две настройки профилирования процессора: выборка и трассировка, последняя была намного быстрее и менее точна. Поскольку трассировка должна быть более точной, я использовал ее сам и также наблюдал огромное замедление, несмотря на заявление о том, что замедление было «средним». Но это было намного меньше ваших результатов: от 2 секунд до 10 минут. Мой код - это фрагмент вычислительной машины, практически без ввода-вывода, без каких-либо ожиданий, просто чтение ввода, вычисление и вывод результата в консоль - так что все замедление происходит из-за профилировщика, без внешних влияний.

Вернемся к вашему вопросу: упомянутый вариант - samping vs tracing, повлияет на производительность, поэтому вы можете попробовать sampling.

Теперь, когда я думаю об этом: YourKit можно настроить таким образом, чтобы он выполнял действия автоматически, например, периодически или при нехватке памяти делал снимки, профилирование использования памяти, выделение объектов - каждая из этих мер замедлит профилирование. Возможно, вам стоит сделать онлайн-сеанс вместо того, чтобы управлять сценарием, чтобы увидеть, что он на самом деле делает.

person Tomasz Stanczak    schedule 13.05.2013
comment
Ну, я также могу сделать выборку, но информация, получаемая при трассировке, намного более подробна, чем выборка (и это очевидно по размеру файлов моментальных снимков). Я проверил документ yjp. На скорость могут влиять два параметра: 1. Режим адаптивного отслеживания, который включен по умолчанию для оптимизации скорости; 2. фильтры. Я могу использовать фильтры, но мне также нужен снимок профиля без каких-либо фильтров. По заявлению Yourkit, с 11 по 12 год отслеживание ЦП ускорилось на 40%, однако, поскольку наш продукт также находится в активной разработке, он намного медленнее, чем дни yjp-11. - person coolcfan; 13.05.2013
comment
Боюсь, у вас есть выбор между скоростью (или, скорее, меньшей медлительностью) или детализацией. Мое решение таких проблем состояло в том, чтобы попытаться разделить проблему на меньший тестовый пример и профилировать только это, а не все приложение, так как попытка профилировать все это замедлило работу до точки невозможности использования. Цифры в моем ответе также взяты из выборки, единственного теста из обширного набора регрессионных тестов, тогда как полный регрессионный тест фактически так и не закончил профилирование. Таким образом я смог настроить достаточно, чтобы достичь требуемого SLA. - person Tomasz Stanczak; 13.05.2013
comment
Во-первых, я не могу разделить свое приложение на более мелкие части; Я могу разделить тестовые примеры - и на самом деле минимальный тест включает всего 3 шага: открытие домашней страницы, вход в систему и затем выход из системы. Даже в этом случае приложение отвечает через очень долгое время. Общая производительность приложения измеряется регулярными тестами гриндера, а профиль используется основными разработчиками в качестве эталона для их оптимизации. Они могут использовать отфильтрованные профили, но им также нужен профиль с полным путем ... Возможно, нет решения этой медлительности. - person coolcfan; 13.05.2013

Согласно некоторому Yourkit Doc:

Хотя трассировка дает больше информации, у нее есть свои недостатки. Во-первых, это может заметно замедлить профилируемое приложение, поскольку профилировщик выполняет специальный код при каждом входе в профилируемые методы и выходе из них. Чем больше количество вызовов методов в профилированном приложении, тем ниже его скорость при включении трассировки.

Второй недостаток заключается в том, что, поскольку этот режим влияет на скорость выполнения профилированного приложения, время ЦП, записанное в этом режиме, может быть менее адекватным, чем время, записанное с помощью выборки. Используйте этот режим только в том случае, если вам действительно требуется счетчик вызовов метода.

Также:

Когда используется выборка, профилировщик периодически запрашивает стеки запущенных потоков, чтобы оценить самые медленные части кода. Нет доступных счетчиков вызовов методов, только время ЦП.

Выборка обычно является лучшим вариантом, когда ваша цель - найти и обнаружить узкие места в производительности. С помощью выборки профилировщик практически не добавляет накладных расходов профилированному приложению.

Кроме того, немного сбивает с толку, что в документе подразумевается под «временем процессора», потому что в нем также говорится о «времени настенных часов». Если вы выполняете какие-либо операции ввода-вывода, ожидания, спящие режимы или любые другие виды блокировки, важно получать выборки по времени настенных часов, а не времени только ЦП, потому что опасно предполагать, что заблокированное время либо несущественно, либо неизбежно. К счастью, это похоже на значение по умолчанию (хотя это все еще немного неясно):

Конфигурация по умолчанию для выборки ЦП заключается в измерении времени ожидания для методов ввода-вывода и времени ЦП для всех других методов.

«Использовать предустановленные настройки ...» позволяет выбрать этот и другие подарки. (так)

Если ваша цель - сделать код как можно быстрее, не заботьтесь о количестве вызовов и «точности» измерений; нужно выяснить, какие строки кода большую часть времени находятся в стеке и почему. Подробнее обо всем этом.

person Mike Dunlavey    schedule 13.05.2013