98% времени программы в профилировщике не учитывается - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь отладить проблему производительности в простой тестовой программе, но профилирование программы (которая выполняется ~ 16 секунд) приводит к трассировке (рисунок ниже), где учитывается только ~ 200 мс.

macOS Instruments Time Profiler results

Обратите внимание также на результаты профилировщика, что светло-голубые столбцы «процента использования» вдоль оси x профилировщика одинаково разнесены на десятки или сотни миллисекунд друг от друга и почти все находятся примерно на 10%.

Код создает вектор и добавляет к нему целые числа в узком цикле. Предполагается, что программа является базовым эталоном для результатов экспериментального компилятора, который использует LLVM для выполнения компиляции.

macOS версия: 10.14.4

Версия инструментов: 9.2

Другие вещи, которые я профилировал

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

Однако в результатах ничего не показалось слишком неожиданным - поток программы провел 9,82 секунды в состоянии «Выполнение» и провел ~ 28 мс внутри системных вызовов.

macOS Instruments SystemПереключение контекста трассировки

macOS Instruments System Trace Context Switches

Выполнение системных вызовов macOS Instruments

macOS Instruments System Calls Made

Мысли

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

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

...