2010-08-25 5 views
1

Этот вопрос относится к xperf и xperfview, утилитам, которые являются частью инструментария Performance Performance Toolkit (в свою очередь, часть Windows SDK 7.1).Xperfview: В чем разница между выборкой процессора и использованием ЦП?

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

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

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

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

  4. Номера для любого процесса в% использования ЦП и% Вес столбцов всегда разные. Иногда они отличаются более чем на 75%.

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

ответ

3

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

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

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

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

Есть преимущества для каждых данных:

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

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

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