Есть ли в Windows эквивалент Unix 'CPU Steal Time'?

Чтобы оценить точность мониторинга производительности на платформах виртуализации, время кражи ЦП становится все более актуальной метрикой - см. Мониторинг EC2: случай кражи ЦП с инструктивной сводкой в ​​контексте Amazon EC2 и статьи IBM о учете времени ЦП для более подробное техническое объяснение (включая иллюстрации) концепции:

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

Соответственно, в настоящее время оно доступно в большинстве связанных инструментов мониторинга Unix/Linux - см., Например, столбцы %steal или st в sar или же top:

ул - украсть время
Количество ЦП, "украденное" у этой виртуальной машины гипервизором для других задач (например, для запуска другой виртуальной машины).

Я не смог понять, как записать такой же показатель в Windows, возможно ли это уже? (Идеально для AMI Windows 2008 Server R2 на EC2 и через соответствующие счетчики производительности Windows, конечно.)

2 ответа

Решение

Редактировать: Обновление 1 октября 2013 г. - Некоторые из моих первоначальных ответов с тех пор устарели.

Я не уверен, что вы все еще активны на этом сайте или что вы это увидите, но я хотел, чтобы вы знали, что я прочитал этот вопрос сегодня, и это меня очаровало, и поэтому я провел весь день (когда я должен был работал) изучал внутренности Hyper-V и Windows и даже копался в самих понятиях виртуализации в надежде, что я буду готов ответить на ваш вопрос.

Позвольте мне в предисловии сказать, что я рассматриваю Hyper-V как платформу виртуализации, потому что именно там у меня больше всего опыта. Несмотря на то, что, как мы знаем, могут существовать определенные принципы виртуализации, от которых нельзя отказаться, Microsoft, VMware и Xen имеют разные стратегии разработки своих гипервизоров.

Это первое, что делает ваш вопрос сложным. Вы задаете свой вопрос так, как будто он не зависит от гипервизора, хотя на самом деле это не так. Amazon EC2, например, использует гипервизор Xen и метрику "CPU Steal Time", которую вы видите в выходных данных top Команда, выпущенная из виртуальной машины Linux, работающей на этом гипервизоре, является результатом служб интеграции, установленных в этой гостевой ОС (или инструментов для виртуализации в гостевой системе) в сочетании с данными, предоставленными этим конкретным гипервизором.

Прежде всего, позвольте мне ответить прямо на ваш вопрос: изнутри виртуальной машины, работающей под управлением Windows, невозможно увидеть, сколько времени процессоры, принадлежащие физической машине, на которой работает гипервизор, тратят другие вещи, если только конкретные виртуальные инструменты / сервисы или инструменты виртуализации для вашего конкретного гипервизора устанавливаются в гостевой виртуальной машине, и конкретный гипервизор, на котором работает гость, предоставляет эти данные гостю. Даже гость Windows, работающий на гипервизоре Hyper-V, не будет иметь немедленного доступа к информации о времени, которое физические процессоры на гипервизоре выполняли для других целей. (Процитируем voretaq7, что "разрушает четвертую стену".) Несмотря на то, что клиентские и серверные операционные системы Windows, работающие как виртуализированные гости в Hyper-V с установленными правильными службами / инструментами интеграции, используют "просветления" (которые буквально являются ядром). Изменения кода, сделанные специально для виртуальных машин, которые значительно повышают их производительность при использовании ресурсов физического хоста, сводятся к тому, что гипервизор не должен предоставлять гостевой ОС больше информации, чем он хочет. Это означает, что гипервизору не нужно сообщать гостевой виртуальной машине, что еще он делает, кроме обслуживания этой виртуальной машины... если он этого не хочет. И эта информация о том, что еще делают физические процессоры, необходима для получения метрики с точки зрения виртуальной машины, такой как "Время похищения ЦП: процент времени, в течение которого виртуальный ЦП ожидает физического ЦП".

Как может гостевая ОС знать об этом, если она даже не осознает, что она фактически виртуализирована?

Другими словами, без правильных инструментов интеграции, установленных на гостевой ОС, гостевая ОС даже не узнает, что ее ЦП фактически является ЦП. Он даже не будет знать, что есть другая сила вне его, "крадущая" циклы ЦП, поэтому такой метрики на гостевой ВМ не будет.

VMware начал предоставлять эти данные гостям Windows, а также ESXi 5.0. Инструменты интеграции VMware также необходимо обновить на гостевой. Вот ссылка; они называют его "CPU Stolen Time".

Гипервизор, такой как Hyper-V, не предоставляет гостям прямой доступ к физическим ресурсам, таким как физические процессоры или процессорные ядра. Вместо этого гипервизор предоставляет им виртуальные устройства vDevs, такие как виртуальные ЦП.

Яркий пример того, почему: скажем, гостевая ОС виртуальной машины выполняет вызов для сброса TLB (буфера преобразования в сторону просмотра), который является физическим компонентом физического ЦП. Если бы гостевой ОС было разрешено очищатьвесь TLB на физическом процессоре, это отрицательно сказалось бы на производительности всех других виртуальных машин, которые также использовали этот же физический TLB. В случае Windows этот вызов в гостевой ОС преобразуется в вызов "hypercall" или "просветленный", который интерпретируется гипервизором, так что очищается только тот раздел TLB, который относится к этой виртуальной машине.


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


Все это говорит о том, что вывсе еще можете обнаружить на хосте Hyper-V время, которое виртуальный процессор потратил на ожидание, пока реальный процессор станет доступным, чтобы его можно было запланировать для запуска. Но вы можете видеть эти данные только на гипервизоре Windows Hyper-V. Если это возможно увидеть в других гипервизорах, я настоятельно призываю других рассказать нам, как это увидеть в этом гипервизоре, а также, если он открыт для гостей. (Редактировать 01.10.2013 Спасибо evilensk y за то, что вы сделали именно это!)

Моим тестовым компьютером был Hyper-V Server 2012, который является бесплатной версией Server 2012, на которой работают только Core и роль Hyper-V. Он практически такой же, как и любой Windows Server 2012 с Hyper-V.

Запустите Perfmon на своем родительском разделе, он же физический хост. Загрузите этот счетчик:

Hyper-V Hypervisor Virtual Processor\CPU Wait Time Per Dispatch\*

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

Среднее время (в наносекундах), потраченное на ожидание отправки виртуального процессора на логический процессор.

Очевидно, вы хотите, чтобы это число было как можно ниже. Для компьютеров ожидание почти никогда не бывает полезным.

Другие счетчики производительности на гипервизоре, которые вы хотите исследовать, Hyper-V Hypervisor Root Virtual Processor\% Guest Run Time, % Hypervisor Run Time, а также % Total Run Time, Эти счетчики предоставляют вам проценты, которые можно использовать для определения таких фактов, как, например, сколько времени "реальные" процессоры тратят на выполнение других операций, помимо обслуживания виртуальной машины или всех виртуальных машин.

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

Я не знаю, как в гостевой системе Windows, с установленными или нет инструментами интеграции, узнать, сколько времени (в секундах или процентах) хост VM потратил на ее обслуживание или не обслуживание в соответствии с общим временем физического процессора. (Редактирование 01.10.2013: ESXi 5.0 или новее предоставляет эти данные гостевой виртуальной машине с помощью инструментов интеграции. Тем не менее, в Hyper-V все еще ничего.)

FWIW, я только что просмотрел счетчики Perfmon сервера Windows 2008r2, работающего под Hyper-V, и не увидел ничего, связанного со временем кражи (или вообще с виртуализацией).

Другие вопросы по тегам