Распределение ресурсов в Hyper-V (часть 2)

Опубликовано: 23 Апреля, 2023

  • Распределение ресурсов в Hyper-V (часть 1)
  • Распределение ресурсов в Hyper-V (часть 4)

В моей предыдущей статье из этой серии я говорил о некоторых аспектах аппаратного обеспечения, которые необходимо учитывать при выделении системных ресурсов виртуальным машинам в среде Hyper-V. В этой статье я хочу продолжить обсуждение, рассказав о мониторинге производительности в среде Hyper-V. Хотя основные концепции мониторинга производительности очень мало изменились со времен Windows NT, получение точной информации о мониторинге производительности является особенно сложной задачей в среде Hyper-V. В этой статье я объясню почему.

Мониторинг производительности

Первое, о чем я хочу рассказать, это мониторинг производительности. Мне это кажется немного странным, но по какой-то причине кажется, что мониторинг производительности стал горячей темой виртуализации почти за одну ночь. Я думаю, что частично причина этого в том, что люди начинают понимать, что монитору производительности нельзя полностью доверять в среде Hyper-V. Однако ненадежным становится не только системный монитор. Многим другим доступным механизмам мониторинга ресурсов также больше нельзя доверять. Например, консоль управления Hyper-V очень часто сообщает об уровнях использования ЦП, которые совершенно отличаются от тех, которые отображаются в диспетчере задач Windows. На самом деле, если вы посмотрите на рисунок A, вы увидите, что диспетчер Hyper-V сообщает о 5 % загрузки ЦП, в то время как диспетчер задач Windows сообщает, что виртуальная машина использует 0 % ресурсов ЦП.

Изображение 28406
Рисунок А:

Диспетчер задач Windows и диспетчер Hyper-V редко соглашаются в том, сколько процессорного времени использует виртуальная машина.

Причина этого несоответствия немного сложна, но я постараюсь максимально упростить объяснение. Самое главное, что нужно помнить, пытаясь понять причину этого несоответствия, это то, что Hyper-V позволяет виртуальным машинам напрямую взаимодействовать с оборудованием сервера. Конечно, возникает вопрос: если это так, то почему диспетчер задач Windows вообще показывает процесс для виртуальной машины?

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

Итак, мы установили, что диспетчер задач Windows совершенно не знает, сколько процессорного времени фактически использует виртуальная машина. Однако это вызывает как минимум пару других вопросов. Один из вопросов: почему ресурсы ЦП фактически используются виртуальными машинами? Однако, возможно, более очевидный вопрос заключается в том, как мы можем отслеживать это использование?

Как я упоминал ранее, Hyper-V позволяет виртуальным машинам напрямую взаимодействовать с оборудованием с помощью гипервизора. Это то место, где подавляющая часть использования ЦП фактически приходится на виртуальную машину. Вы можете получить приблизительное представление о том, сколько процессорного времени на самом деле использует виртуальная машина, взглянув либо на монитор производительности, либо на диспетчер задач Windows из виртуальной машины.

Если вы посмотрите на рисунок B, то увидите, что я запустил диспетчер задач внутри своего виртуального сервера. В то время, когда был сделан снимок экрана, диспетчер задач Windows сообщает об использовании ЦП для виртуальной машины на уровне 13%, в то время как диспетчер Hyper-V сообщает только об использовании ЦП на уровне 4% в тот же момент.

Изображение 28407
Рисунок Б:

Существует большое расхождение между диспетчером задач Windows и диспетчером Hyper-V.

Как видите, существует большая разница между отчетом об уровне использования ЦП диспетчером задач Windows из виртуальной машины и тем, что сообщает диспетчер Hyper-V. Так кто из них прав? На самом деле, это вопрос с подвохом; оба отчета совершенно неверны, но диспетчер задач Windows намного ближе к правильному, чем диспетчер Hyper-V.

Причина, по которой вы не можете полностью доверять информации, предоставленной вам диспетчером задач Windows, заключается в том, что сообщаемые данные о производительности искажены. Например, машина, с которой я снял снимок экрана, имеет один процессор с четырьмя ядрами. Таким образом, нет выделенного процессора, обслуживающего виртуальную машину. Вместо этого виртуальная машина получает процент от общего времени ЦП физического оборудования. Виртуальная машина об этом не знает. Он думает, что полностью управляет системным процессором. Отчет об использовании ЦП, предоставляемый диспетчером задач Windows, будет точным только в том случае, если виртуальной машине было выделено все время ЦП системы или если для обслуживания виртуальной машины был выделенный процессор. Как бы то ни было, диспетчер задач Windows фактически сообщает, какой процент ресурсов ЦП, выделенных виртуальной машине, фактически используется.

Так как же узнать, сколько процессорного времени на самом деле потребляет виртуальная машина? Я не думаю, что есть какой-либо способ точно узнать, сколько процессорного времени потребляет виртуальная машина. Однако Microsoft интегрировала ряд специальных счетчиков Hyper-V в копию Performance Monitor основной операционной системы. Поскольку эти счетчики поддерживают Hyper-V, вы можете использовать их, чтобы получить довольно хорошее представление о том, как работают виртуальные машины.

Существует слишком много счетчиков, связанных с Hyper-V, чтобы говорить о них всех, но есть два счетчика, которые могут вас особенно заинтересовать. Одним из таких счетчиков является счетчик Hyper-V Hypervisor Virtual Processor\% Guest Run Time. Он предназначен для того, чтобы показать вам, сколько процессорного времени действительно использует гостевая машина. Например, если вы посмотрите на рисунок C, вы увидите, что мой виртуальный сервер на самом деле потреблял около 31 % ресурсов физического ЦП сервера, когда был сделан снимок экрана, но диспетчер Hyper-V сообщал об использовании только 7 %..

Изображение 28408
Рисунок C. Счетчик Hyper-V Hypervisor Virtual Processor\% Guest Run Time, вероятно, является наиболее надежным способом узнать, сколько процессорного времени использует виртуальная машина.

Еще один счетчик, на который интересно взглянуть, — это счетчик Hyper-V Hypervisor Virtual Processor\% Hypervisor Run Time. Он показывает, насколько усердно работает гипервизор сервера для управления виртуальными машинами. Этот счетчик обычно не будет таким высоким, как последний счетчик, который я вам показал, если только у вас не запущено много виртуальных машин одновременно. Тем не менее, на этот счетчик стоит обратить внимание, поскольку он отражает уровень использования процессора, о котором иначе не сообщается.

Итак, какой из них вы используете?

В этой статье я показал вам несколько различных способов получения эталонных показателей производительности для виртуальных машин, поэтому вам может быть интересно, какой метод следует использовать. Ответ на самом деле зависит только от вашей цели. Если вы пытаетесь выяснить, сколько процессорного времени фактически потребляется, я бы рекомендовал отслеживать счетчик Hyper-V Hypervisor Virtual Processor\% Guest Run Time. Однако если ваша цель — выяснить, приемлема ли производительность виртуальной машины для конкретного приложения, то вам лучше всего запускать системный монитор обычным способом, но изнутри виртуальной машины. Причина этого в том, что ресурсы, отображаемые при запуске системного монитора внутри виртуальной машины, — это те же ресурсы, которые доступны приложениям, работающим на этой виртуальной машине.

Вывод

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

  • Распределение ресурсов в Hyper-V (часть 1)
  • Распределение ресурсов в Hyper-V (часть 4)