Как профилировщики кода работают?

22
задан MPelletier 30 April 2012 в 03:57
поделиться

5 ответов

Существует много различных профилировщиков, которые работают по-разному.

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

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

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

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

25
ответ дан Dickon Reed 29 November 2019 в 04:37
поделиться

Существует две общих профильных стратегии (для основанных на VM языков так или иначе): инструментарий и выборка.

Инструментарий вставляет контрольные точки и сообщает профилировщику каждый раз, когда метод запускается и законченный. Это может быть сделано JIT/интерпретатором или post-normal-compile, но фаза перед выполнением, которая просто изменяет исполняемый файл. Это может иметь очень значительный эффект на производительность (таким образом скашивающий любые результаты синхронизации). Это хорошо для получения точных количеств все же.

Выборка периодически спрашивает VM, на что отслеживание стека похоже для всех потоков и обновляет свою статистику тот путь. Это обычно влияет на производительность меньше, но производит менее точные счетчики вызовов.

14
ответ дан Jon Skeet 29 November 2019 в 04:37
поделиться

Это зависит от типа проанализированного кода, например, CLR.NET обеспечивает средство для профилировщиков кода. При контакте с управляемым кодом возможно переписать промежуточный код для введения пользовательских рычагов. Также можно проанализировать отслеживание стека приложений. Операционная система может обеспечить средства для профилирования, например, Windows имеет счетчики производительности . При контакте со встроенным кодом можно эмулировать/заменять используемое оборудование к эффективно производительности системы контроля.

2
ответ дан aku 29 November 2019 в 04:37
поделиться

для gprof в *отклоняют, в компиляции и время ссылки при помощи-pg, некоторый дополнительный код введен в объектный код. Тогда путем выполнения gprof, файл отчета сгенерирован введенным кодом.

0
ответ дан jscoot 29 November 2019 в 04:37
поделиться

Как Jon Skeet записал выше существует две стратегии: инструментарий и выборка.

Инструментарий сделан и вручную и также автоматически. В ручном случае: разработчик вручную вводит код для отслеживания запущения/заканчивания региона кода интереса. Например, простой "StartTimer" и "EndTimer". Некоторые инструменты профилировщика могут сделать это автоматически также - для этого, профилировщик должен будет сделать статический анализ кода, т.е. он анализирует код, и определите важные контрольные точки как запущение/заканчивание конкретного метода (методов). Это является самым легким с языками, которые поддерживают отражение (например, любой .net язык). Используя 'отражение' профилировщик в состоянии восстановить все дерево исходного кода (наряду с графами вызовов).

Выборка сделана профилировщиком, и она изучает двоичный код. Профилировщик может также методы как Рычаги или захватывать события Windows / сообщения в целях профилирования.

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

Инструментарий По сравнению с Выборкой: Это не похоже, каждый лучше, чем другой подход. У обоих есть их место.

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

От вышеупомянутого определяют ресурсы, которые становятся дросселируемыми.

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

2
ответ дан Sesh 29 November 2019 в 04:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: