Поза вибіркою стека: профілі C ++


146

Казка хакера

Дата - 12.02.10. Дні перед Різдвом пропадають, і я досить сильно потрапив у головний блок дороги як програміст Windows. Я використовував AQTime, я спробував сонливий, блискучий і дуже сонний, і, як ми говоримо, VTune встановлює. Я намагався використовувати профілер VS2008, і це було позитивно покаранням, а також часто нечутливим. Я використав техніку випадкової паузи. Я оглянув дерева дзвінків. Я скинув функції слідів. Але сумний болісний факт у тому, що додаток, з яким я працюю, має понад мільйон рядків коду, мабуть, ще мільйон рядків варті сторонніх додатків.

Мені потрібні кращі інструменти. Я прочитав інші теми. Я випробував кожного перерахованого в кожній темі. Тут просто повинно бути щось краще, ніж ці незбагненні та дорогі варіанти, або смішні обсяги роботи майже без вигоди. Щоб ще більше ускладнити питання, наш код є сильним потоком і виконує ряд циклів подій Qt, деякі з яких настільки крихкі, що вони забиваються під час важких інструментів через затримки часу. Не запитуйте мене, чому ми виконуємо кілька циклів подій. Ніхто не може мені сказати.

Чи є якісь варіанти по лінії Valgrind в середовищі Windows?
Чи є щось краще, ніж довгий пробій розбитих інструментів, які я вже пробував?
Чи є щось, призначене для інтеграції з Qt, можливо, з корисним відображенням подій у черзі?

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

  • AQTime: Досить добре! Виникає певна проблема з глибокою рекурсією, але графік виклику в цих випадках правильний, і його можна використовувати для усунення будь-якої плутанини, яка може виникнути. Не ідеальний інструмент, але варто спробувати. Це може відповідати вашим потребам, і це, безумовно, було досить добре для мене більшу частину часу.
  • Випадкова пауза атаки в режимі налагодження: недостатньо інформації, часу достатньо.
    Хороший інструмент, але не повне рішення.
  • Паралельні студії: ядерний варіант. Нав'язливий, дивний і шалено потужний. Я думаю, ви повинні підняти 30-денне оцінювання і зрозуміти, чи це добре. Це просто проклято круто.
  • AMD Codeanalyst: Чудовий, простий у використанні, дуже схильний до аварій, але я думаю, що це навколишнє середовище. Я рекомендую спробувати його, оскільки це безкоштовно.
  • Люк Stackwalker: Чудово працює на малих проектах, трохи намагається змусити це працювати над нашими. Хоча деякі непогані результати, і це, безумовно, замінює сонний для моїх особистих завдань.
  • PurifyPlus: Немає підтримки для середовищ Win-x64, найбільш видатна Windows 7. Інакше чудово. Ряд моїх колег з інших відомств присягаються.
  • VS2008 Profiler: Виводить вихід у діапазоні 100 гігів у режимі відстеження функцій при необхідній роздільній здатності. З іншого боку, це дає надійні результати.
  • GProf: Вимагає, щоб GCC був навіть помірно ефективним.
  • VTune: WTune W7 підтримує межу зі злочинністю. Інакше чудово
  • ПІН: Мені потрібно зламати власний інструмент, тож це в крайньому випадку.
  • Sleepy \ VerySleepy: Корисно для менших додатків, але тут мені не вдається.
  • EasyProfiler: Непогано, якщо ви не заперечуєте трохи введеного вручну коду, щоб вказати, куди підключити інструмент.
  • Valgrind: * nix тільки, але дуже добре, коли ти в цьому середовищі.
  • OProfile: Лише Linux.
  • Проффі: Вони стріляють у диких коней.

Пропоновані інструменти, які я не пробував:

  • XPerf:
  • Glowcode:
  • Devpartner:

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


Зараз: Майже через два тижні, схоже, моє питання вирішено. Завдяки різноманітним інструментам, включаючи майже все в списку та пару моїх особистих хитрощів, ми знайшли основні вузькі місця. Однак я продовжую тестувати, досліджувати та випробовувати нові профілі, а також нові технології. Чому? Тому що я завдячую вам, хлопці, тому що ви, хлопці, рок. Це трохи сповільнює часову шкалу, але я все ще дуже рада продовжувати випробовувати нові інструменти.

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

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

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

Винос
Використовуйте профілер. Вони досить хороші для Річі, Керніган, Бентлі та Кнут. Мені все одно, хто ти думаєш. Використовуйте профілер. Якщо той, який у вас є, не працює, знайдіть інший. Якщо ви не можете його знайти, кодуйте його. Якщо ви не можете його кодувати, або це невелика повіска, або ви просто застрягли, використовуйте випадкову паузу. Якщо все інше не вдасться, наймайте учнів з другого класу, щоб вирвати профайлера.


Довший вигляд
Отже, я подумав, що може бути приємно написати ретроспективу. Я вирішив широко працювати з Parallel Studios, частково тому, що він фактично побудований на основі інструмента PIN. Маючи академічні стосунки з деякими залученими дослідниками, я відчув, що це, мабуть, відмітка певної якості. На щастя, я мав рацію. Хоча GUI трохи жахливий, я виявив IPS неймовірно корисним, хоча не можу з комфортом рекомендувати його для всіх. Критично, немає очевидного способу отримати підрахунок ліній на рівні рядків - те, що пропонують AQT та ряд інших профілів, і я знайшов дуже корисним для вивчення швидкості вибору галузей серед іншого. У мережі я також насолоджувався використанням AQTime і виявив, що їх підтримка дуже реагує. Знову ж таки, я повинен кваліфікувати свою рекомендацію: Багато їх функцій не так добре працюють, і деякі з них прямо схильні до аварій на Win7x64. XPerf також чудово працював, але знемагає повільно для деталізації вибірки, необхідної для отримання чітких показників для певних програм.

Зараз я повинен сказати, що я не думаю, що існує певний варіант для профілювання коду C ++ у середовищі W7x64, але, безумовно, є варіанти, які просто не виконують жодної корисної послуги.


18
Ви шукали, як отримати іншу роботу? :)
Микола Фетисов

10
Де б я ще міг так важко розгадати загадки? Я думаю, я міг би повернутися до злому ядра, але це також не платить.
Джейк Курцер

3
@Kos Я вважаю, що для gprof будь-яка користь ви повинні використовувати набір інструментів gcc, складений з -pg, інакше він не створює файл gprof.out. У випадку з ОП це здається, що він використовує msvc, який виключає використання gprof. Тоді я знову не думаю, що gprof стане для нього кращим, якщо інші в списку не задовольнять його потреб
greatwolf

2
@Marc Gravell Я думаю, що це досить справедливо. Мені здається дивним евристичним, що найбільш доглянуті пости різко переходять у домен спільноти, фактично створюючи ситуацію, коли тим більше ви оновлюєте та підтримуєте своє запитання чи відповідь. , тим менше ви виходите з цього утримання в очах громади взагалі. Чи варто брати це до мета?
Джейк Курцер

2
Хтось хоче ретроспективу, враховуючи те, що я тепер знаю про профілістів?
Джейк Курцер

Відповіді:


65

Перший:

Профілери вибірки часу більш надійні, ніж профілі для відбору проб CPU. Я не дуже знайомий з інструментами розробки Windows, тому не можу сказати, які з них є. Більшість профільних користувачів є вибіркою процесора.

Профілер пробовідбору процесора захоплює стеження стека кожні N інструкцій.
Ця методика виявить частини вашого коду, які пов'язані з процесором. Що дивовижно, якщо це шийка пляшки у вашій заяві. Не так вже й чудово, якщо нитки ваших програм проводять більшу частину часу, борючись за мютекс.

Профілер пробовідбору часу отримує слід стека кожні N мікросекунд.
Ця техніка буде нульовою для "повільного" коду. Незалежно від того, чи причина пов'язана з процесором, блокування зв'язаних вводу-виводу, зв'язане з мютекс або кеш-пам'ять розділів коду. Коротше кажучи, те, що коли-небудь код уповільнює вашу програму, буде видатним.

Тож використовуйте профайлер вибірки часу, якщо це взагалі можливо, особливо під час профілювання потокового коду.

Друге:

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

Інструмент gprof2dot генерує опис крапкового графіка, який ви подаєте в інструмент graphviz . Вихідний сигнал - це, в основному, телефонний позивник з кольором функцій, кодованим їх впливом на додаток. alt текст

Кілька підказок, щоб отримати gprof2dot, щоб отримати хороший вихід.

  • Я використовую --skew0,001 у своїх графіках, щоб я міг легко бачити гарячі кодові шляхи. Інакше int main()домінує в графіку.
  • Якщо ви робите щось шалене з шаблонами C ++, ви, ймовірно, захочете додати --strip. Особливо це стосується Boost.
  • Я використовую OProfile для генерування даних проб. Для отримання гарного результату мені потрібно налаштувати його для завантаження символів налагодження з моїх сторонніх та системних бібліотек. Обов’язково зробіть те ж саме, інакше ви побачите, що CRT займає 20% часу вашої програми, коли те, що відбувається насправді, - mallocце вивалити купу і з'їсти 15%.

Поки я не знаю, що це повна відповідь на мої проблеми, gprof2dot увійшов до мого величезного арсеналу і стрімко займає улюблене місце. Я думаю, що це коштує великої винагороди!
Джейк Курцер

2
Я поставив це запитання Linux на основі зразка часу . Передбачається, що в кінцевому рахунку OProfile отримає вибірку на основі часу. Вони дають дуже високу якість продукції, тому, коли вони додадуть цю функцію, я буду їх використовувати. Крім того, у мене був друг, який зламав рішення gdb + backtrace для профілювання. Дуже хакі, але це знайшло вузьке місце.
deft_code

@deft_code: "зламати разом gdb + backtrace рішення для профілювання. Дуже хакі, але воно знайшло вузьке місце". Ви підтверджуєте мою постійну рентгенографію :) Деякі люди хочуть, щоб профілювання було гарним, але якщо результати потрібні вам, займіться тим, що працює, а не тим, що є гарним .
Майк Данлаве

Я згоден з Майком Данлаве. Такі речі, як XPerf / WPA, виглядають дуже гарними та потужними, але з'ясування способів використання цих інструментів займає певний час, а в кінці дня випадкове паузавання настільки просто і надає кращу інформацію для вирішення проблеми. Більш автоматизовані рішення, швидше за все, не фільтрують критичну інформацію, необхідну для вирішення вузького місця.
JDiMatteo

16

Що сталося, коли ви спробували випадкову паузу? Я використовую його весь час у програмі-монстрі. Ви сказали, що це не дає достатньо інформації, і ви запропонували потребувати високої роздільної здатності. Іноді людям потрібна невелика допомога в розумінні того, як ним користуватися.

Те, що я роблю в VS, - це налаштування дисплея стека, щоб він не показував мені аргументи функції, тому що це робить дисплей стека абсолютно нечитабельним, IMO.

Тоді я беру близько 10 зразків, натискаючи "паузу" протягом часу, який змушує мене чекати . Я використовую ^ A, ^ C і ^ V, щоб скопіювати їх у блокнот, для довідки. Потім я вивчаю кожного з них, щоб спробувати зрозуміти, що це було в процесі спроб досягти того часу.

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

Є речі, які вам насправді не потрібно знати, як точні відсотки не важливі, і те, що відбувається всередині стороннього коду, не важливо, тому що ви нічого з цим не можете зробити . Що ви можете щось зробити, це багатий набір точок виклику в коді, який ви можете змінити, що відображається на кожному зразку стека. Ось ваш щасливий мисливський угідь.

Приклади тих речей, які я знаходжу:

  • Під час запуску це може бути приблизно 30 шарів глибиною, в процесі спроби витягти інтернаціоналізовані рядки символів з ресурсів DLL. Якщо вивчити фактичні рядки, то може легко виявитись, що рядки насправді не потрібно інтернаціоналізувати, як вони є рядками, які користувач ніколи насправді не бачить.

  • Під час звичайного використання деякий код невинно встановлює властивість Modified в якомусь об'єкті. Цей об’єкт походить від суперкласу, який фіксує зміни та запускає сповіщення, які пульсують у всій структурі даних, маніпулюючи інтерфейсом користувача, створюючи та зневоднюючи об'єкти способами, важко передбачити. Це може статися багато - несподівані наслідки повідомлень.

  • Заповнення робочого аркуша рядок за рядком по клітинці. Виявляється, якщо ви будуєте рядок усі відразу, з масиву значень, це набагато швидше.

PS Якщо ви є багатопотоковою, коли ви призупиняєте її, всі нитки призупиняються. Погляньте на стек виклику кожного потоку. Швидше за все, лише один з них справжній винуватець, а інші простоюють.


2
Коментарі? Коментарі? ЦЕ СПАРТА! Я ... Вибачте, не знаю, звідки це взялося. Ні, код робить операцію Klingon Opera зручною для читання, і це приблизно так добре зафіксовано. Насправді, я думаю, це набагато менш задокументовано .... О боже.
Джейк Курцер

3
Інтеграція QTMFC? О, чудово, у вас складні і злі , і ви ще навіть не дійшли до конкретного коду програми.
Бен Войгт

5
QT / MFC? Чи не повинно це робити дітей-мутантів з 3 головами, які гойдаються туди-сюди, називаючи кожну ідею, яку вони чують найглупішу ідею? Помилка ... Я відволікаюсь ... Якщо ви використовуєте будь-який з класів Socket MFC, негайно перепишіть код сокета і потім профіль. У коді CSocket є ALOT місць, які використовують версію циклу повідомлень WaitForSingleObject, яку я виявив, щоб знищити продуктивність. За все життя я не можу пригадати ім'я функції очікування ...: /
JimR

2
О боже, повірте мені, це точно так само дурно, як ви думаєте.
Джейк Курцер

3
@Jake: Не надто комфорт, але це слава універсальності Тьюрінга. Будь-яка мова, незалежно від того, високий чи низький рівень, рівнозначна за своєю необмеженою здатністю неправомірно використовувати.
Майк Данлаве

8

Я мав певний успіх з AMD CodeAnalyst .


На даний момент середовище Intel. Я все ж пам’ятаю про це! :)
Джейк Курцер

4
@Jake: Я не впевнений, що ти там маєш на увазі. AMD CodeAnalyst не вимагає чіпів AMD, він повинен працювати на більшості чіпів x86 або x64 (він же x86-64 / IA-64 / AMD64), включаючи мікросхеми Intel.
Адам Розенфілд

1
Мабуть, я неграмотний! Це чудова новина. Я спробую це завтра і оновлю питання.
Джейк Курцер

Поки що це дуже нестабільно під час вибірки в потрібних мені резолюціях.
Джейк Курцер

@Adam: нещодавно я спробував аналітик коду на машині intel pentium IV, і він пропонував лише тимчасовий вибірки, не маючи жодної інформації про використання потоку, а також жодної інформації, пов’язаної з потоком ... кількість інформації, яку я отримав, була справді посередньою. до того ж це спричинило збої в інтеграції qt візуальної студії .. я не був задоволений :(
smerlin

7

Чи є у вас функція MFC OnIdle? У минулому я мав майже програму в режимі реального часу, мені довелося виправити, що було скидання послідовних пакетів, коли було встановлено на швидкості 19,2 К, яку PentiumD повинен був би бути в курсі. Функція OnIdle - це те, що вбивало речі. Я не впевнений, чи є у QT таке поняття, але я б і це перевірив.


2
Насправді у нас є OnIdle, і завдяки нашій інтеграції QTMFC вона проходить через цикл подій QT ee..e ... eve .... О Гід.
Джейк Курцер

Виявляється, це призводить безпосередньо до нашого рішення, тому, хоча це не є ідеальною відповіддю на питання, я вважаю, що це питання не відповідає.
Джейк Курцер

4

Знову VS Profiler - якщо він генерує такі великі файли, можливо, ваш інтервал вибірки занадто часто? Спробуйте знизити його, оскільки у вас, мабуть, достатньо зразків.

І в ідеалі переконайтеся, що ви не збираєте зразки, поки ви фактично не використовуєте проблемну область. Тож почніть із призупинення колекції, змусьте програму виконувати свою "повільну активність", а потім почніть колекцію. Вам потрібно лише не більше 20 секунд колекції. Припиніть колекцію після цього.

Це повинно допомогти зменшити розміри зразкових файлів і зафіксувати лише те, що необхідно для аналізу.


Я завтра пострілю.
Джейк Курцер

4

Я успішно використовував PurifyPlus для Windows. Хоча це не дешево, IBM пропонує пробну версію, яка трохи покалічена. Все, що вам потрібно для профілювання з кількісною оцінкою, - це файли pdb та посилання на / FIXED: NO. Єдиний недолік: Немає підтримки для Win7 / 64.


На жаль, наша основна мета - Win7. Я додам цю інформацію до головної публікації.
Джейк Курцер

1
Поточна версія PurifyPlus підтримує Win7 / 64.
hmuelner

3

Easyprofiler - я ще не бачив його згаданого тут, тому не впевнений, чи вже ви його дивилися. Для збирання метричних даних потрібен дещо інший підхід. Недоліком використання підходу профілю компіляції в часі є те, що ви повинні внести зміни в кодову базу. Таким чином, вам потрібно мати деяке уявлення про те, де може бути повільний, і вставити туди профілюючий код.

Хоча за останніми коментарями, здається, ви хоч трохи просуваєтесь. Можливо, цей інструмент може забезпечити корисні показники для вас. Якщо нічого іншого, у нього є справді несерйозні діаграми та зображення: P


3

Ще дві пропозиції щодо інструмента.

Люк Stackwalker має миле ім’я (навіть якщо він дуже важко намагається на мій смак), це нічого не коштуватиме вам, і ви отримаєте вихідний код. Він також стверджує, що підтримує багатопотокові програми. Тож це, безумовно, варто віджимати.

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 може отримати деяку правду. (Або задайте більш загострене запитання викликів wrt в черзі тут на SO .. :)
Macke

2

Редагувати: я бачу, що ви згадали про це у своєму першому дописі. Чорт, я ніколи не думав, що буду цим хлопцем.

Ви можете використовувати Pin для присвоєння коду більш тонкої деталізації. Я думаю, що Pin дозволить вам створити інструмент для підрахунку, скільки разів ви вводите функцію або скільки годинних годинників ви там витрачаєте, приблизно імітуючи щось на зразок VTune або CodeAnalyst. Тоді ви можете зняти, які функції інструментуються, поки ваші проблеми з термінами не зникнуть.


Насправді PIN-код - це те, до чого я вперше дійшов. Насправді є щось, що називається PIN Play, що було б ідеально, але це не для випуску поза Intel. Я не впевнений, що достатньо пам’ятаю про використання ПІН-коду для спільного підключення чогось дійсно доброго, але ...
Джейк Курзер

2

Я можу вам сказати, чим я користуюся щодня.

а) Аналітичний код AMD

  • Це легко, і це дасть вам швидкий огляд того, що відбувається. Більшу частину часу це буде нормально.
  • З процесорами AMD він повідомляє вам інформацію про конвеєр процесора, але це вам потрібно лише в тому випадку, якщо у вас є великі петлі, як, наприклад, у графічних двигунах, відеокодеках тощо.

б) VTune.

  • Він дуже добре інтегрований у vs2008

  • після того, як ви дізнаєтесь гарячі точки, вам потрібно взяти вибірку не лише часу, але й інших речей, таких як пропуски кешу та використання пам'яті. Це дуже важливо . Налаштуйте сеанс вибірки та відредагуйте властивості. Я завжди вибираю час, помилка читання / запису пам’яті та кеш пропускає (три різні прогони)

Але більше, ніж інструмент, вам потрібно отримати досвід роботи з профілюванням. А це означає розуміння того, як працює процесор / пам'ять / 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.


Звичайно, це може, але це зажадає придбання ліцензії на продукт, який ніколи не може підтримувати бажаний розробник, або може зайняти роки для цього. 1,5 тис. - це багато грошей на ставку, плюс витрати на час створення зображень та розгортання xp-коробки.
Джейк Курцер

0

Тут перелічено безліч профілів, і я спробував декілька з них сам, однак я, нарешті, написав власний на основі цього:

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

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



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.