За пределами выборки стека: C ++ Profilers

146

Хакерская сказка

Дата 12/02/10. Проходят дни перед Рождеством, и я, в основном, работаю Windows-программистом. Я использовал AQTime, я пробовал сонный, блестящий и очень сонный, и, как мы говорим, VTune устанавливает. Я пытался использовать профилировщик VS2008, и это было как положительно, так и часто незаметно. Я использовал технику случайной паузы. Я исследовал деревья вызовов. Я запустил функциональные следы. Но печальный и болезненный факт заключается в том, что приложение, с которым я работаю, содержит более миллиона строк кода и, вероятно, еще миллион строк сторонних приложений.

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

Есть ли какие-либо варианты в духе Valgrind в среде Windows?
Есть ли что-нибудь лучше, чем длинная полоса сломанных инструментов, которые я уже пробовал?
Есть ли что-то, предназначенное для интеграции с Qt, возможно, с полезным отображением событий в очереди?

Полный список инструментов, которые я пробовал, с теми, которые были действительно полезны курсивом:

  • AQTime: довольно хорошо! Есть некоторые проблемы с глубокой рекурсией, но в этих случаях граф вызовов верен и может использоваться для устранения любой путаницы, которая может возникнуть. Не идеальный инструмент, но стоит попробовать. Это может удовлетворить ваши потребности, и это, безусловно, было достаточно хорошо для меня большую часть времени.
  • Атака случайной паузой в режиме отладки: недостаточно информации достаточно времени.
    Хороший инструмент, но не полное решение.
  • Parallel Studios: ядерный вариант. Навязчивый, странный и безумно мощный. Я думаю, что вы должны пройти 30-дневную оценку и выяснить, подходит ли она вам. Это просто чертовски круто тоже.
  • AMD Codeanalyst: замечательный, простой в использовании, очень подверженный сбоям, но я думаю, что это вещь окружающей среды. Я бы порекомендовал попробовать это, так как это бесплатно.
  • Люк Стакуокер: Отлично работает на небольших проектах, немного пытается заставить его работать на наших. Хотя некоторые хорошие результаты, и это определенно заменяет Sleepy для моих личных задач.
  • PurifyPlus: нет поддержки сред Win-x64, особенно Windows 7. В остальном отлично. Ряд моих коллег в других отделах клянутся этим.
  • Профилировщик VS2008: Производит вывод в диапазоне 100+ гигов в режиме трассировки функций с требуемым разрешением. С положительной стороны, дает хорошие результаты.
  • GProf: Требует, чтобы GCC был даже умеренно эффективным.
  • VTune: поддержка VT7 W7 граничит с преступностью. В остальном отлично
  • ПИН: Мне нужно взломать мой собственный инструмент, так что это своего рода последнее средство.
  • Sleepy \ VerySleepy: Полезно для небольших приложений, но мне не удалось.
  • EasyProfiler: Неплохо, если вы не возражаете против небольшого количества кода, введенного вручную, чтобы указать, где использовать инструмент.
  • Valgrind: * nix только, но очень хорошо, когда вы находитесь в этой среде.
  • OProfile: только для Linux.
  • Proffy: они стреляют в диких лошадей.

Предлагаемые инструменты, которые я не пробовал:

  • XPERF:
  • Glowcode:
  • DevPartner:

Примечания: среда Intel на данный момент. VS2008, буст библиотеки. Qt 4+. И жалкий скандал всех их: интеграция Qt / MFC через trolltech.


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

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

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

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

На вынос
Используйте профилировщик. Они достаточно хороши для Ричи, Кернигана, Бентли и Кнута. Мне все равно, кто ты такой. Используйте профилировщик. Если тот, который у вас есть, не работает, найдите другого. Если вы не можете найти его, используйте один код. Если вы не можете кодировать один, или это небольшое зависание, или вы просто застряли, используйте случайную паузу. Если все остальное терпит неудачу, нанять некоторых аспирантов, чтобы ударить профилировщик.


Более длинный взгляд
Итак, я подумал, что было бы неплохо написать небольшую ретроспективу. Я решил активно работать с Parallel Studios, отчасти потому, что он фактически построен на основе инструмента PIN. Имея академические отношения с некоторыми из вовлеченных исследователей, я чувствовал, что это, вероятно, знак некоторого качества. К счастью, я был прав. Хотя графический интерфейс немного ужасен, я обнаружил, что IPS невероятно полезен, хотя я не могу рекомендовать его всем. Крайне важно, что нет очевидного способа получить количество попаданий на уровне строки, что обеспечивают AQT и ряд других профилировщиков, и я нашел очень полезным для изучения скорости выбора веток среди прочего. В сети мне также понравилось использовать AQTime, и я обнаружил, что их поддержка действительно отзывчива. Опять же, я должен квалифицировать свою рекомендацию: Многие из их функций работают не так хорошо, а некоторые из них прямо подвержены сбоям на Win7x64. XPerf также работает превосходно, но мучительно медленно для деталей выборки, необходимых для получения хорошего чтения в определенных видах приложений.

Прямо сейчас я должен сказать, что я не думаю, что есть определенная опция для профилирования кода C ++ в среде W7x64, но, безусловно, есть опции, которые просто не в состоянии выполнить какую-либо полезную услугу.

Jake Kurzer
источник
18
Вы искали другую работу? :)
Николай Фетиссов
10
Где еще я мог бы решать головоломки так сложно? Думаю, я мог бы вернуться к взлому ядра, но это тоже не окупается.
Джейк Курцер
3
@Kos Я думаю, что для использования gprof вам нужно использовать набор инструментов gcc, скомпилированный с -pg, иначе он не создаст файл gprof.out. В случае с OP, похоже, он использует msvc, что исключает использование gprof. С другой стороны, я не думаю, что gprof будет лучше для него, если другие в списке не
отвечают
2
@ Marc Gravell Это достаточно справедливо, я полагаю .... Мне кажется странной эвристикой, что наиболее хорошо поддерживаемые посты внезапно переходят в область сообщества, эффективно создавая ситуацию, когда чем больше вы обновляете и поддерживаете свой вопрос или ответ тем меньше вы получаете от этого обслуживания в глазах сообщества в целом. Должен ли я принять это к мета?
Джейк Курцер
2
Кто-нибудь хочет ретроспективу, учитывая то, что я теперь знаю о профилировщиках?
Джейк Курзер

Ответы:

65

Первый:

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

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

Профилировщик временной выборки захватывает трассировку стека каждые N микросекунд.
Эта техника будет сосредоточена на «медленном» коде. Независимо от того, связана ли причина с ЦП, с блокировкой ввода-вывода, с мьютексом или с разделением кеша кода. Короче говоря, любой кусок кода замедляет работу вашего приложения.

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

Во-вторых:

Профилировщики выборки генерируют блоки данных. Данные чрезвычайно полезны, но зачастую их слишком много, чтобы их было легко использовать. Здесь очень помогает визуализатор данных профиля. Лучший инструмент, который я нашел для визуализации данных профиля - это gprof2dot . Не позволяйте имени обмануть вас, оно обрабатывает все виды выходных данных профилировщика выборки (AQtime, Sleepy, XPerf и т. Д.). После того, как визуализация укажет на нарушающую функцию (и), вернитесь к необработанным данным профиля, чтобы получить лучшие подсказки о том, какова реальная причина.

Инструмент gprof2dot генерирует описание точечного графа, которое затем передается в инструмент graphviz . Выходные данные - это, в основном, callgraph с цветовой кодировкой функций в зависимости от их влияния на приложение. альтернативный текст

Несколько советов, чтобы gprof2dot генерировал хороший вывод.

  • Я использую --skew0,001 на своих графиках, чтобы легко видеть горячие пути кода. В противном случае int main()доминирует над графиком.
  • Если вы делаете что-то сумасшедшее с шаблонами C ++, вы, вероятно, захотите добавить --strip. Это особенно верно с Boost.
  • Я использую OProfile для генерации данных выборки. Чтобы получить хороший вывод, мне нужно настроить его для загрузки символов отладки из сторонних и системных библиотек. Обязательно сделайте то же самое, в противном случае вы увидите, что CRT отнимает 20% времени вашего приложения, тогда как на самом деле происходит mallocуничтожение кучи и поглощение 15%.
deft_code
источник
Хотя я не знаю, что это полный ответ на мои проблемы, gprof2dot вошел в мой огромный арсенал и быстро занял любимое место. Я думаю, что это стоит награды!
Джейк Курзер
2
Я задал этот вопрос раз образец Linux профилировщика на основе . Предполагается, что OProfile будет в конечном итоге получать выборку на основе времени. Они производят очень высокое качество, поэтому, как только они добавят эту функцию, я буду их использовать. Кроме этого у меня был друг, взломавший решение для профилирования gdb + backtrace. Очень хакерский, но он нашел узкое место.
deft_code
@deft_code: " решение gdb + backtrace для профилирования. Очень хакерское, но оно нашло узкое место". Вы подтверждаете мою постоянную напыщенную речь :) Некоторые люди хотят, чтобы профилирование было красивым, но если результаты - это то, что вам нужно, выбирайте то, что работает, а не то, что красиво .
Майк Данлавей,
Я согласен с Майком Данлавей. Такие вещи, как XPerf / WPA, выглядят очень красиво и мощно, но выяснение того, как использовать эти инструменты, занимает некоторое время, и в конце концов случайная пауза настолько проста и предоставляет более полную информацию для решения проблемы. Более автоматизированные решения чаще всего отфильтровывают критически важную информацию, необходимую для устранения узкого места.
JDiMatteo
16

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

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

Затем я беру около 10 сэмплов, нажимая кнопку «пауза», пока она заставляет меня ждать . Я использую ^ A, ^ C и ^ V, чтобы скопировать их в блокнот, для справки. Затем я изучаю каждый из них, чтобы попытаться выяснить, что было в процессе достижения того времени.

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

Есть вещи , которые вы действительно не нужно знать, как точные проценты не важны, а то , что происходит внутри кода третьих сторон не важно, потому что вы ничего не можете сделать те . Что вы можете сделать, так это богатый набор точек вызова в коде, который вы можете изменить, отображаемый в каждом образце стека. Это ваше счастливое охотничье угодье.

Примеры видов вещей, которые я нахожу:

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

  • При обычном использовании некоторый код невинно устанавливает свойство Modified в некотором объекте. Этот объект происходит из суперкласса, который фиксирует изменения и запускает уведомления, которые распространяются по всей структуре данных, манипулируя пользовательским интерфейсом, создавая и уничтожая объекты, которые трудно предвидеть. Это может случиться много - неожиданные последствия уведомлений.

  • Заполнение таблицы по строкам, ячейка за ячейкой. Оказывается, если вы строите строку сразу из массива значений, это происходит намного быстрее.

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

Майк Данлавей
источник
2
Комментарии? Комментарии? ЭТО СПАРТА! Я ... Извините, не знаю, откуда это взялось. Нет, код делает Klingon Opera выглядящим читабельным, и он также хорошо документирован. На самом деле, я думаю, что это гораздо менее задокументировано ... О, боже.
Джейк Курцер
3
Интеграция QTMFC? О, отлично, у вас все сложное и злое , и вы еще даже не дошли до кода приложения.
Бен Фойгт
5
QT / MFC? Разве это не должно производить детей-мутантов с 3 головами, которые качаются взад и вперед, вызывая каждую идею, которую они слышат, самую глупую идею когда-либо? Э-э ... Я отвлекся ... Если вы используете какой-либо из классов сокетов MFC, немедленно переписайте код вашего сокета, а затем профилируйте. Есть много мест в коде CSocket, который использует версию цикла сообщений для WaitForSingleObject, которая, как я обнаружил, снижает производительность. На всю жизнь я не могу вспомнить название функции ожидания ...: /
JimR
2
О, боже, поверь мне, это так круто, как ты думаешь.
Джейк Курцер
3
@ Джейк: Не так много комфорта, но это слава универсальности Тьюринга. Любой язык, независимо от его уровня или высокого уровня, эквивалентен по своей неограниченной способности злоупотреблять.
Майк Данлавей
8

У меня был некоторый успех с AMD CodeAnalyst .

Адам Розенфилд
источник
Среда Intel, на данный момент. Я буду иметь это в виду, хотя! :)
Джейк Курцер
4
@ Джейк: Я не уверен, что ты имеешь в виду. AMD CodeAnalyst не требует чипов AMD, он должен работать на большинстве чипов x86 или x64 (он же x86-64 / IA-64 / AMD64), включая чипы Intel.
Адам Розенфилд
1
Видимо, я неграмотный! Это замечательные новости. Я попробую завтра и обновлю вопрос.
Джейк Курцер
Пока что это очень нестабильно при выборке в нужных мне разрешениях.
Джейк Курцер
@Adam: я недавно попробовал аналитик кода на компьютере Intel Pentium IV, и он предлагал только выборку по времени, без информации об использовании потоков или информации о потоках… объем информации, который я получил, был действительно посредственным… Кроме того, это вызвало сбои в интеграции
QT
7

Есть ли у вас функция MFC OnIdle? Раньше у меня было приложение, работающее почти в реальном времени, которое мне приходилось исправлять, которое сбрасывало последовательные пакеты при скорости 19,2 КБ, с которой PentiumD должен был справиться. Функция OnIdle была тем, что убивало вещи. Я не уверен, есть ли у QT такая концепция, но я бы тоже это проверил.

JimR
источник
2
У нас действительно есть OnIdle, и благодаря нашей интеграции с QTMFC он проходит через цикл событий QT ev..e ... eve .... О Боже
Джейк Курцер
Оказывается, это ведет непосредственно к нашему решению, поэтому, хотя это и не идеальный ответ на вопрос, я думаю, что вопрос не подлежит обсуждению.
Джейк Курцер
4

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

И в идеале, убедитесь, что вы не собираете пробы, пока не начнете заниматься проблемной зоной. Так что начните с приостановки сбора, заставьте вашу программу выполнять "медленную активность", затем начните сбор. Вам нужно всего не более 20 секунд сбора. Остановите сбор после этого.

Это должно помочь уменьшить размер файла образца и записать только то, что необходимо для анализа.

Алекс Будовски
источник
Я сделаю это завтра.
Джейк Курцер
4

Я успешно использовал PurifyPlus для Windows. Хотя это и не дешево, IBM предлагает пробную версию, которая слегка повреждена. Все, что вам нужно для профилирования с помощью quantify - это файлы pdb и ссылки с / FIXED: NO. Единственный недостаток: нет поддержки Win7 / 64.

hmuelner
источник
К сожалению, наша основная цель - Win7. Я добавлю эту информацию в основной пост.
Джейк Курзер
1
Текущая версия PurifyPlus поддерживает Win7 / 64.
hmuelner
3

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

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

greatwolf
источник
3

Еще два предложения инструмента.

У Люка Стакволкера есть милое имя (даже если он немного старается на мой вкус), оно ничего не будет стоить, и вы получите исходный код. Он также заявляет о поддержке многопоточных программ. Так что это, безусловно, стоит спина.

http://lukestackwalker.sourceforge.net/

Также Glowcode, который я указал мне как стоящий:

http://www.glowcode.com/

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


источник
3

Оформить заказ XPerf

Это бесплатный, неинвазивный и расширяемый профилировщик, предлагаемый MS. Он был разработан Microsoft для профиля Windows.

Санджит Салуджа
источник
3

Если вы с подозрением относитесь к циклу событий, может ли переопределить QCoreApplication :: notify () и ручное профилирование дозом (одна или две карты отправителей / событий на счетчики / время)?

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

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

Просто идея.

Маке
источник
Это прекрасная идея! Я не привык к среде QT, выполнив большую часть своей работы с pyGTK. Спасибо!
Джейк Курцер
У вас есть рекомендуемый способ поиска и разрешения характера данных сигналов?
Джейк Курцер
Я сделал это только для сигналов с QStateMachine :: SignalEvent, который, кажется, не то же самое. Источник все еще должен быть QObject* objectпараметром. Возможно, MetaCall является типом для всех сигналов (кажется вероятным), но я не уверен. Это выходит за рамки моего опыта, но заглянуть в источник Qt может почерпнуть немного правды. (Или задайте более острый вопрос в отношении вызовов сигналов в очереди здесь, на SO .. :)
Macke
2

Изменить: я вижу, теперь вы упомянули об этом в своем первом сообщении. Черт возьми, я никогда не думал, что буду таким парнем.

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

Аарон Альтман
источник
На самом деле, PIN был тем, к чему я впервые обратился. На самом деле есть нечто, называемое PIN Play, которое было бы идеально, но не для выхода за пределы Intel. Я не уверен, что помню достаточно об использовании PIN-кода, чтобы связать воедино что-то действительно хорошее, но ...
Джейк Курцер
2

Я могу сказать вам, что я использую каждый день.

а) AMD Code Analyst

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

б) VTune.

  • Это очень хорошо интегрировано в VS2008

  • после того, как вы узнаете «горячие точки», вам нужно будет отобрать не только время, но и другие вещи, такие как пропуск кеша и использование памяти. Это очень важно . Настройте сеанс выборки и измените свойства. Я всегда проверяю время, чтение / запись памяти и пропуски кэша (три разных прогона)

Но больше, чем инструмент, вам нужно получить опыт работы с профилированием. И это означает понимание того, как работает CPU / Memory / PCI ... так что это мой третий вариант

в) модульное тестирование

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

Мой совет - использовать случайную выборку в нескольких небольших тестах и ​​попытаться стандартизировать стратегию профилей.

Хавьер Лорейро
источник
AMD Code Analyst нестабилен в моей среде разработки, и VTune явно не поддерживает его. : S
Джейк Курзер
2

Я использую xperf / ETW для всех своих потребностей профилирования. У него крутая кривая обучения, но он невероятно мощный. Если вы выполняете профилирование в Windows, вы должны знать xperf. Я часто использую этот профилировщик, чтобы найти проблемы с производительностью в моем коде и в коде других людей.

В конфигурации, которую я использую:

  • xperf получает выборки ЦП от каждого ядра, которое выполняет код каждую мс. Частота дискретизации может быть увеличена до 8 кГц, и выборки включают пользовательский режим и код ядра. Это позволяет узнать, что поток делает во время работы
  • xperf записывает каждое переключение контекста (что позволяет идеально реконструировать, сколько времени использует каждый поток), плюс стеки вызовов для того, когда потоки включены, плюс стеки вызовов для того, какой поток подготовил другой поток, позволяя отслеживать цепочки ожидания и выяснять, почему поток не работает
  • xperf записывает все файловые операции ввода-вывода из всех процессов
  • xperf записывает весь дисковый ввод-вывод из всех процессов
  • xperf записывает, какое окно активно, частота процессора, состояние питания процессора, задержки пользовательского интерфейса и т. д.
  • xperf также может записывать все выделения кучи из одного процесса, все виртуальные выделения из всех процессов и многое другое.

Это много данных, все на одной временной шкале, для всех процессов. Никакой другой профилировщик в Windows не может этого сделать.

Я много писал о том, как использовать xperf / ETW. Эти сообщения в блоге и некоторые обучающие видео профессионального качества можно найти здесь: http://randomascii.wordpress.com/2014/08/19/etw-training-videos-available-now/

Если вы хотите узнать, что может произойти, если вы не используете xperf, прочитайте эти записи в блоге: http://randomascii.wordpress.com/category/investigative-reporting/ Это рассказы о проблемах производительности, которые я обнаружил в коде других людей. , что должны были найти разработчики. Это включает в себя загрузку mshtml.dll в компилятор VC ++, отказ в обслуживании в файлах VC ++ для поиска в файлах, термическое регулирование на удивительном количестве компьютеров пользователей, медленный пошаговый переход в Visual Studio, выделение 4 ГБ в жестком драйвер диска, ошибка производительности PowerPoint и многое другое.

Брюс Доусон
источник
1

Я только что закончил первую пригодную для использования версию CxxProf , переносимой инструментированной вручную библиотеки профилирования для C ++.

Он выполняет следующие цели:

  • Простая интеграция
  • Легко удалить библиотеку во время компиляции
  • Легко удалить библиотеку во время выполнения
  • Поддержка многопоточных приложений
  • Поддержка распределенных систем
  • Держите влияние на минимум

Эти пункты были извлечены из вики проекта , посмотрите там более подробную информацию.

Отказ от ответственности: я главный разработчик CxxProf

оборота МОНСДАР
источник
1

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

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

Куба Обер
источник
0

DevPartner, первоначально разработанный NuMega и теперь распространяемый MicroFocus, когда-то был предпочтительным решением для профилирования и анализа кода (например, утечки памяти и ресурсов). Я не пробовал это недавно, поэтому не могу заверить вас, что это поможет вам; но однажды у меня были отличные результаты, так что это альтернатива, которую я действительно рассматриваю, чтобы переустановить в нашем процессе качества кода (они обеспечивают 14-дневную пробную версию)

Паскаль Т.
источник
0

хотя ваша ОС - win7, программа не может работать под xp? как насчет профиля это под XP и результат должен быть подсказкой для Win7.

user541633
источник
Конечно, это возможно, но это потребует покупки лицензии на продукт, который может никогда не поддерживать вашу желаемую разработку или может потребовать годы для этого. 1.5k - это много денег для ставок, плюс затраты на создание изображений и развертывание xp box.
Джейк Курзер
0

Здесь перечислены многие профилировщики, и я попробовал некоторые из них сам - однако в итоге я написал свой собственный, основываясь на этом:

http://code.google.com/p/high-performance-cplusplus-profiler/

Конечно, это требует, чтобы вы изменили кодовую базу, но он идеально подходит для сужения узких мест, должен работать на всех x86 (может быть проблема с многоядерными блоками, то есть он использует rdtsc, однако - это в любом случае чисто для индикативной синхронизации). - так что я считаю, что этого достаточно для моих нужд ..)

Nim
источник
Копия проекта на github.com/michael-mayes/high-performance-cplusplus-profiler с описанием по адресу floodyberry.wordpress.com/2009/10/07/…
osgx