Xperfview: В чем разница между выборкой ЦП и использованием ЦП? - PullRequest
1 голос
/ 25 августа 2010

Этот вопрос относится к xperf и xperfview, утилитам, входящим в состав Windows Performance Toolkit (в свою очередь, к Windows SDK 7.1).

Сравнивая две диаграммы: "Выборка процессора по потокам" и "Загрузка процессора по потокам", я не понимаю нескольких различий. Я буду использовать audiodg.exe в качестве примера.

  1. В раскрывающемся списке «Потоки» на диаграмме сэмплирования процессора есть только один поток для audiodg; диаграмма использования CPU показывает несколько потоков аудиоданных.

  2. Оба графика имеют ось Y, помеченную «% использования», но измерения отличаются. Обычно процент использования для данного потока на диаграмме выборки ЦП ниже, чем на диаграмме использования ЦП.

  3. Сводная таблица выборки ЦП показывает вес и% веса для каждого модуля / процесса. Если я загружаю символы, я могу глубоко погрузиться в процесс audiodg. Таблица Сводная сводка по планированию ЦП (запущенная из графика использования ЦП) показывает использование ЦП и% использования ЦП - Вес недоступен. (И наоборот, загрузка ЦП недоступна в сводной таблице «Выборка ЦП».) Я не могу копаться так глубоко в audiodg - я вижу только основной поток и несколько потоков ntdll.dll.

  4. Числа для любого процесса в колонках% CPU и% Weight всегда разные. Иногда они отличаются более чем на 75%.

Итак, мои вопросы ... какова надежная мера использования процессора здесь? Разве цифры использования ЦП не получены из образцов ЦП? Разве числа не должны как-то соотноситься?

1 Ответ

4 голосов
/ 06 февраля 2011

Xperf немного сбивает с толку, вот мое понимание того, что происходит:

  • Образцы данных процессора, включенные с флагом ядра PROFILE. Данные выборки ЦП собираются через некоторый регулярный интервал и записывают информацию о том, что ЦП делал в это время (например, процесс, идентификатор потока и стек вызовов во время выборки.)
  • Данные переключения контекста, включенные с флагом ядра CSWITCH. Он записывает данные о каждом происходящем переключении контекста (например, кто был включен / выключен и стеки вызовов).

Выборка ЦП по потоку показывает количество событий профиля, которые были записаны для каждого потока, агрегированных за некоторый интервал времени для продолжительности трассировки. Например, если audiodg выполнял 10% времени в течение 2 секунд, мы ожидаем увидеть около 10% использования за это время. Однако, поскольку это основано на выборке, возможно, что при каждом событии выборки выполнялись потоки из другого процесса - другими словами, 10% «пропустили» события выборки.

Загрузка ЦП по потокам рассчитывается с использованием данных переключения контекста. «Использование» - это промежуток времени между включением и отключением контекста (и, конечно, эти данные агрегируются за некоторый небольшой интервал).

Есть преимущества для каждой информации:

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

Итак, чтобы ответить на ваш вопрос, диаграмма использования ЦП «более точна» для понимания того, сколько времени выполнялся каждый поток. Тем не менее, не исключайте использование данных выборки, потому что это может быть гораздо полезнее для понимания того, где ваши потоки фактически проводят свое время! Для данных выборки ЦП сводная таблица является более ценной, потому что она покажет вам стеки. Для данных об использовании процессора диаграмма, вероятно, более полезна, чем сводная таблица.

Надеюсь, это поможет!

...