Чтобы оценить точность мониторинга производительности на платформах виртуализации, Время кражи процессора становится все более актуальной метрикой - см. Мониторинг EC2: случай кражи процессора для поучительного резюме в контексте Amazon EC2 и документ IBM о Учет процессорного времени для более подробного технического объяснения (включая иллюстрации) концепции:
Время кражи - это процент времени, в течение которого виртуальный ЦП ожидает реального ЦП, пока гипервизор обслуживает другой виртуальный процессор.
Соответственно, в настоящее время он доступен в большинстве связанных инструментов мониторинга Unix / Linux - см., Например, столбцы % украсть или ул в sar
или top
:
st - украсть время
Объем процессора, «украденного» с этой виртуальной машины гипервизором для других задач (например, для запуска другой виртуальной машины).
Я не смог понять, как получить ту же метрику в Windows, возможно ли это уже? (Идеально для AMI Windows 2008 Server R2 на EC2 и через соответствующий Счетчики производительности Windows конечно.)
Изменить: обновление 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 с правильными установленными службами / инструментами интеграции, используют «просветления» (которые буквально являются ядром изменения кода, сделанные специально для виртуальных машин), которые значительно увеличивают их производительность при использовании ресурсов физического хоста, суть в том, что гипервизор не иметь чтобы предоставить гостевой ОС больше информации, чем она хочет. Это означает, что гипервизор не иметь чтобы сообщить гостевой виртуальной машине, что еще она делает помимо обслуживания этой виртуальной машины ... если она не хочет. И эта информация о том, что еще делают физические процессоры, необходима для получения метрики с точки зрения виртуальной машины, такой как «CPU Steal Time: процент времени, в течение которого vCPU ожидает физического процессора».
Откуда гостевая ОС могла знать об этом, если даже не осознавала, что на самом деле виртуализирована?
Другими словами, без правильных инструментов интеграции, установленных на гостевой ОС, гостевая ОС даже не узнает, что ее ЦП на самом деле vЦПУ. Он даже не узнает, что есть еще одна сила вне его самого, «крадущая» у него циклы ЦП, поэтому эта метрика не будет существовать на гостевой виртуальной машине.
VMware начала предоставлять эти данные гостям Windows, а также ESXi 5.0. Инструменты интеграции VMware также необходимо обновить на гостевой системе. Вот ссылка; они называют это «украденным временем процессора».
Гипервизор, такой как Hyper-V, не предоставляет гостям прямой доступ к физическим ресурсам, таким как физические процессоры или ядра процессора. Вместо этого гипервизор предоставляет им vDevs - виртуальные устройства, такие как vCPU.
Наглядный пример того, почему: предположим, что гостевая ОС виртуальной машины делает вызов для очистки TLB (буфера просмотра в сторону), который является физическим компонентом физического процессора. Если гостевой ОС разрешено очистить весь TLB на физическом процессоре, что отрицательно сказалось бы на производительности для всех других виртуальных машин, которые также использовали тот же физический TLB. В случае Windows этот вызов в гостевой ОС переводится в «гипервызов» или «просвещенный» вызов, который интерпретируется гипервизором, так что очищается только часть TLB, относящаяся к этой виртуальной машине.
(Интересно, что это намекает мне на то, что гостевые виртуальные машины, у которых нет надлежащих инструментов интеграции и / или служб, могут иметь возможность влиять на производительность всех других виртуальных машин на том же хосте, но это полностью выходит за рамки этой темы. .)
Все, чтобы сказать, что ты жестяная банка по-прежнему обнаруживает на узле Hyper-V время, которое виртуальный процессор потратил на ожидание доступности реального процессора, чтобы его можно было запланировать для запуска. Но вы можете увидеть эти данные только на гипервизоре Windows Hyper-V. Если это возможно увидеть в других гипервизорах, я призываю других рассказать нам, как это увидеть в этом гипервизоре, а также если это доступно гостям. (Редактировать 01.10.2013 Спасибо Evilensky за это!)
Моей тестовой машиной был 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 установлены или не установлены инструменты интеграции, чтобы узнать, сколько времени (в секундах или процентах) хост виртуальной машины потратил на его обслуживание или не на обслуживание в соответствии с общим временем физического процессора. (Редактировать 01.10.2013: ESXi 5.0 или выше предоставляет эти данные гостевой виртуальной машине с помощью инструментов интеграции. Однако на Hyper-V все еще ничего.)
FWIW, я просто просмотрел счетчики Perfmon на сервере Windows 2008r2, работающем под Hyper-V, и не увидел ничего, связанного с кражей времени (или вообще с виртуализацией в этом отношении).