Профилировщики, с которыми я сталкиваюсь (в основном, с профилировщиком Digital Mars D, который приходит с компилятором), значительно замедляют выполнение профилируемой программы. Это сильно влияет на мою готовность использовать профилировщик, поскольку он делает профилирование «реального» запуска многих моих программ, в отличие от тестирования на очень небольшом входе, непрактичным. Я не очень разбираюсь в том, как применяются профилировщики. Является ли серьезное (> 2x) замедление при профилировании в значительной степени факта жизни, или есть профилировщики, которые его избегают? Если этого можно избежать, есть ли какие-либо быстрые профилировщики для D, предпочтительнее для D2 и, желательно, бесплатно?Выполняют ли все профилиляторы медленное выполнение?
ответ
Я не знаю о D-профиляторах, но в целом есть два разных способа, которыми профилировщик может собирать информацию для профилирования.
Первый - с помощью инструментария, путем инъекции протоколов вызовов по всему месту. Это замедляет приложение более или менее. Как правило, больше.
Вторая выборка. Затем профилировщик прерывает приложение через регулярные промежутки времени и проверяет стек вызовов. Это совсем не замедляет работу приложения.
Недостатком профайлера пробоотбора является то, что результат не такой детализированный, как с помощью профилирующего инструмента.
Проверьте документацию для вашего профилировщика, если вы можете выполнять выборку вместо инструментария. В противном случае у вас есть несколько новых терминов Google в «выборке» и «настройке».
Я бы сказал, что да, как отбор проб, так и инструментальные формы профилирования будут сильно зависеть от вашей программы - независимо от того, какой профилировщик вы используете, и на каком языке.
многие пробоотборники выборки могут масштабировать, как часто они берут свои образцы. Это позволяет накладные расходы значительно меньше, чем профилирование инструментария (порядка 1-5%). Разумеется, качество данных зависит от частоты дискретизации. Обе формы профилирования имеют ненулевой эффект, но выборка значительно меньше. –
Вы можете попробовать h3r3tic's xfProf, который является профилировщиком пробоотбора. Не пробовал сам, но этот парень всегда делает интересные вещи :)
Из описания:
Если программа оцифровывается только несколько сотен (или тысяч) раз в секунду, производительность накладные расходы не будут заметны.
Спасибо. Это должно быть улучшением (еще не проверял его), хотя он по-прежнему говорит, что вам нужно скомпилировать без оптимизаций, который, вероятно, имеет более чем 2x perf. Стоимость. – dsimcha
@dsimcha: @torhu: Я только что проверил сайт xfProf. Мне грустно. Он построен на тех же принципах, что и gprof. Вот почему мне грустно: http://stackoverflow.com/questions/1777556/alternatives-to-gprof/1779343#1779343 –
My favorite method of profiling замедляет программу путь путь вниз, и это нормально. Я запускаю программу под отладчиком с реалистичной загрузкой, а затем вручную ее прерываю. Затем я копирую стек вызовов где-то, как в Блокнот. Таким образом, для сбора одного образца требуется порядка минут. Затем я могу либо возобновить выполнение, либо даже нормально начать его с самого начала, чтобы получить еще один образец.
Я делаю это 10 или 20 раз, достаточно долго, чтобы увидеть, что программа действительно делает с точки зрения стены. Когда я вижу что-то, что появляется много, я беру больше образцов, пока он не появится снова. Затем я останавливаюсь и действительно изучите, что он находится в процессе работы и почему, что может занять 10 минут или больше. Вот как я узнаю, что эта деятельность - это то, что я могу заменить более эффективным кодом, т. Е. Это было не обязательно.
Понимаете, мне не интересно измерять, как быстро или медленно это происходит. Я могу сделать это отдельно, возможно, только часы.Мне интересно узнать, какие виды деятельности занимают большой процент времени (а не количество, процент), и если что-то занимает большой процент времени, это вероятность того, что каждый столбец его увидит.
Под «активностью» я не обязательно имею в виду, где компьютер зависает. В реалистичном программном обеспечении ПК практически всегда отключается в системной или библиотечной программе. Как правило, важнее сайты звонков в нашем коде. Если я вижу, например, последовательность из трех вызовов, отображаемых на половине выборок стека, которая представляет собой очень хорошую охоту, потому что, если какой-либо из них действительно не нужен и может быть устранен, время выполнения будет уменьшаться на половина.
Если вы хотите усмехаться менеджером, просто сделайте это один или два раза.
Даже в том, что вы считаете математическим тяжелым научным номером, хрустят приложения, где вы думаете, что оптимизация на низком уровне и горячие точки будут править днем, вы знаете, что я часто нахожу? Подпрограммы математической библиотеки: проверка аргументов, а не хруст. Часто код не делает то, что, по вашему мнению, он делает, и вам не нужно запускать его на максимальной скорости, чтобы это выяснить.
Менее полезно, когда у вас довольно плоский профиль, где ни один компонент не занимает более 2% времени выполнения сам по себе, но вам нужно как-то получить свой основной цикл от 40 мс до 33 мс, установив пятьдесят мелочей. Но это довольно специализированный случай. – Crashworks
Также вам стоит взглянуть на современные пробоотборники. Я продолжаю рекомендовать их вам не потому, что я думаю, что ваш метод плох, а потому, что я полностью согласен с вашим подходом и рад, что есть автоматические инструменты, которые могут делать это 1000 выборок в секунду. – Crashworks
@Crashworks: Спасибо. Мой опыт заключается в том, что вы только добираетесь до того, что будете иметь маленькие мелочи для оптимизации после того, как вы избавитесь от некоторых довольно массивных вещей, о которых вы никогда не догадывались. Что касается инструментов, я думаю, что Zoom и LTProf имеют правильную идею, но, как я пытался объяснить раньше, вам не нужно большое количество образцов, если ваши самые большие проблемы действительно очень малы. Кроме того, я не знаю никакого инструмента, который позволяет вам подробно изучить образец типичного стека и контекст программы, действующий на момент его принятия. Это дает вам представление о том, что цифры не могут. –
- 1. Очень медленное выполнение
- 2. Медленное выполнение Oracle
- 3. Внутреннее соединение медленное выполнение
- 4. Медленное выполнение USQL
- 5. Медленное выполнение индивидуальных is_element_present
- 6. PHP: Медленное выполнение запроса
- 7. Медленное выполнение сценария JS
- 8. Командная строка, медленное выполнение
- 9. SQL Медленное выполнение запросов
- 10. электронное окно-установщик медленное выполнение
- 11. Выполняют ли все тесты проверки корни.
- 12. Медленное выполнение проекта Symfony локально
- 13. Очень медленное выполнение регулярных выражений?
- 14. Медленное выполнение запросов в Firebird
- 15. Медленное выполнение веб-страницы ASP.NET
- 16. Медленное выполнение Exe в лазури
- 17. Медленное выполнение комбинированных запросов MySQL
- 18. Медленное выполнение скрипта PHP/MySQL
- 19. Оператор SQL Delete медленное выполнение
- 20. Выполнение запроса на лазурном хранении очень медленное
- 21. Плагин Rhapsody Java API, чрезвычайно медленное выполнение
- 22. Будет ли Java Annotations делать медленное выполнение из-за отражения?
- 23. SQL: запрос на просмотр - медленное выполнение
- 24. Выполнение веб-службы ASMX очень медленное
- 25. Почему LinqToEntities Пропускание/выполнение оракула настолько медленное
- 26. Медленное или плохое выполнение почты sendmail
- 27. Java Web Start вызывает медленное выполнение
- 28. Медленное выполнение подзапроса, когда нет матчей
- 29. Ipyparallel медленное выполнение с разбросом/сбором
- 30. Медленное выполнение js в IE и FF
++ Да, правила отбора проб! Но не только старая выборка. Сэмплирование стека вызовов по времени настенных часов и составление отчетов по строке (не функции) процента образцов, содержащих эту строку. И дополнительные детали, которые вы получаете с помощью инструментария, - это все равно шум, если ваша цель - найти код, нуждающийся в оптимизации. –
По этой причине я предпочитаю использовать пробоотборники пробоотбора везде, где это практически возможно - они, как правило, предоставляют множество надежных данных для относительно небольших затрат по производительности, и я могу запустить его в течение длительного времени, чтобы усреднить результаты из стохастического, шумного процесса (как функция, которая занимает 1 миллион 90% времени, когда она называется, а 500 мс - 10%). – Crashworks
Я нахожу точный счетчик функций, который время от времени полезны инструментальные профилографы. Если я загружаю 120 клиентов в список, я смотрю функции, которые называются 120 (и хуже n x 120) раз. Затем я могу найти функции, вызванные ошибкой (т. Е. Вызванные событием). Или звонки, сделанные для каждого пункта, где один звонок для всех из них должен быть достаточным. –