
SR-IOV (Single Root Input/Output Virtualization
) — это технология виртуализации аппаратных устройств хоста, которая позволяет виртуальным машинам иметь прямой доступ к устройствам хоста. Она может виртуализировать различные типы устройств, но чаще всего используется для виртуализации сетевых адаптеров. В этой статье мы покажем вам, как включить и настроить SR-IOV для сетевых адаптеров виртуальных машин на сервере Windows Hyper-V.
SRV-IOV поддерживается в Hyper-V 2012+, включая бесплатный Windows Hyper-V Server. Мы не будем подробно рассматривать принципы SR-IOV, поскольку вы можете получить полное руководство в Интернете. Для практического понимания достаточно знать, что SR-IOV позволяет предоставить виртуальным машинам прямой доступ к физическим сетевым адаптерам хоста и обойти обработку трафика виртуальными коммутаторами Hyper-V. Один физический сетевой адаптер в режиме SR-IOV может обслуживать несколько виртуальных машин.
Благодаря использованию SR-IOV для виртуальных машин Hyper-V вы сможете значительно увеличить пропускную способность, уменьшение сетевых задержек и нагрузки на процессор , вызванных обработкой сетевого трафика программным обеспечением Hyper-V.
Чтобы включить SRV-IOV на хосте Hyper-V, необходимо выполнить некоторые требования.
Прежде всего, включите SRV-IOV и поддержку виртуализации в BIOS вашего сервера. В зависимости от производителя, настройки могут отличаться.
- Поддержка виртуализации: Intel (технология виртуализации, Intel VT, VT-d, Vanderpool), AMD (SVM, AMD-V)
- IOMMU
- SR-IOV
- ASPM
У вас могут быть не все пункты, даже отсутствие SR-IOV. Но это не означает, что SR-IOV не поддерживается вашим сервером. Например, материнские платы Supermicro могут не иметь SR-IOV в BIOS, но в них по умолчанию отключен ASPM. Если вы включите ASPM и поддержку виртуализации, SR-IOV будет включен автоматически.
Убедиться в том, что SR-IOV поддерживается сервером Hyper-V на аппаратном уровне, можно с помощью PowerShell:
(get-vmhost).IovSupport
(get-vmhost).IovSupportReasons
Если ваш сервер поддерживает эту функцию, IovSupport будет содержать True
. Если не поддерживает, то будет False
. В этом случае IovSupportReasons элемент показывает причину, по которой SR-IOV не поддерживается. Обычно причина подробно описывается. Вот типичные причины:
- Чипсет системы не выполняет ремаппинг прерываний, без которого поддержка SR-IOV невозможна.
- SR-IOV не может быть использован на этом компьютере, потому что процессор не поддерживает трансляцию адресов второго уровня (SLAT). Для процессоров Intel эта функция может называться расширенными таблицами страниц (Extended Page Tables, EPT). Для процессоров AMD эта функция может называться Rapid Virtualization Indexing (RVI) или Nested Page Tables (NPT).
- SR-IOV нельзя использовать в этой системе, поскольку аппаратное обеспечение PCI Express не поддерживает службы контроля доступа (ACS) ни на одном корневом порту. За дополнительной информацией обратитесь к поставщику системы.
- Чтобы использовать SR-IOV на этом компьютере, необходимо обновить BIOS, поскольку он содержит неверную информацию о возможностях оборудования. Обратитесь к производителю компьютера для обновления.
- Чипсет системы не выполняет ремаппинг DMA, без которого поддержка SR-IOV невозможна.
- SR-IOV не может быть использован в этой системе, поскольку она настроена на отключение использования аппаратного ремаппинга ввода-вывода.
- Чтобы использовать SR-IOV в этой системе, необходимо обновить BIOS системы, чтобы Windows могла управлять PCI Express. Обратитесь к производителю системы для получения обновления.
- Убедитесь, что система имеет поддержку чипсета для SR-IOV и что виртуализация ввода-вывода включена в BIOS.
- SR-IOV не может быть использован в этой системе, так как он сообщает об отсутствии шины PCI Express. Обратитесь к производителю системы за дополнительной информацией.
Полный вывод get-vmswitch | fl *iov*
содержит некоторую полезную информацию. Например:
IovVirtualFunctionCount : 6 IovVirtualFunctionsInUse : 3
Цифры показывают, сколько виртуальных устройств IOV доступно и сколько из них используется виртуальными машинами.
При создании виртуального коммутатора Hyper-V проверьте параметр поддержки SR-IOV — Включить виртуализацию ввода-вывода с одним корнем (SR-IOV).
Или включите параметр EnableIOV при создании виртуального коммутатора с помощью PowerShell:
New-VMSwitch -Name "VMNetExt" -NetAdapterName "Ethernet 2" -EnableIov 1
Если SR-IOV поддерживается хостом гипервизора, это не означает, что он будет работать на конкретном виртуальном коммутаторе. Коммутатор должен быть привязан к сетевому адаптеру с поддержкой SR-IOV.
Есть еще один важный момент. На материнской плате может быть несколько сетевых адаптеров, но SR-IOV может поддерживаться только некоторыми из них. Более того, если SR-IOV поддерживается адаптером в соответствии с его техническим паспортом, это не означает, что он работает на вашей материнской плате.
Итак, после настройки коммутатора проверьте его с помощью команды:
get-vmswitch | select IovSupport, IovSupportReasons, IovEnabled
Параметр IovEnabled показывает, включен ли SR-IOV.
Список сетевых адаптеров с поддержкой SR-IOV можно отобразить с помощью PowerShell:
Get-NetAdapterSriov | sort name | ft Name, InterfaceDescription, SriovSupport
После включения SR-IOV на уровне гипервизора и виртуального коммутатора вы можете включить его на своих виртуальных машинах (по умолчанию он отключен). Вы можете найти Включить SR-IOV опция в Аппаратное ускорение раздел сетевого адаптера виртуальной машины.
Или можно включить SR-IOV для сетевого адаптера виртуальной машины с помощью PowerShell:
Set-VMNetworkAdapter -VMName mytestvm -VMNetworkAdapterName “Network Adapter” -IovWeight 100
Все ошибки и события SR-IOV в Hyper-V можно найти в отдельном журнале Event Viewer:
Журналы приложений и служб -> Microsoft -> Windows -> Hyper-V-SynthNic -> Admin.
Если SR-IOV работает правильно, при запуске виртуальной машины вы увидите следующие записи в Event Viewer:
12597 Network adapter (%NIC_ID%) Connected to virtual network. 12582 Network adapter (%NIC_ID%) started successfully. 12584 Network adapter (%NIC_ID%) allocated a virtual function. 12588 Network adapter (%NIC_ID%) assigned a virtual function.
SR-IOV повышает производительность сети виртуальных машин и гипервизора. Наибольший результат от использования SR-IOV можно получить на хостах Hyper-V с высоким трафиком виртуальных машин, вызывающим большую нагрузку на процессоры хоста.