Эта статья была написана Абхиджитом Кханде и Винитом В. Ачарьей из группы проектирования DELL Windows.
Комментарии приветствуются! Чтобы предложить тему или оставить другие комментарии, свяжитесь с WinServerBlogs@dell.com.
В бета-версии операционной системы Microsoft® Windows Server® 2012 корпорация Майкрософт представила поддержку ряда функций в сетевом пространстве. Одной из таких важных и интересных особенностей является
Виртуализация ввода-вывода с одним корнем (SR-IOV), которая позволяет виртуальным машинам совместно использовать одно устройство PCI-e. В этом посте представлен базовый обзор SR-IOV в бета-версии Windows Server 2012 и то, как он значительно снижает загрузку ЦП в виртуализированной среде во время сетевого ввода-вывода.
Интерфейс SR-IOV представляет собой расширение спецификации PCI Express (PCIe). SR-IOV позволяет одному устройству PCIe, например сетевому адаптеру, предоставлять несколько облегченных аппаратных поверхностей на шине PCI и разделять доступ к ее ресурсам между различными экземплярами. Это достигается за счет использования нескольких виртуальных функций (VF) в дополнение к (обычной) физической функции (PF). Поскольку она зависит от оборудования, устройство PCIe и платформа должны поддерживать эту функцию.
Традиционно пакет, предназначенный для виртуальной машины, принимает физический сетевой адаптер (с помощью физической функции), присутствующей в ОС хоста. Этот пакет обрабатывается модулем драйверов NDIS (спецификация интерфейса сетевых драйверов для сетевых плат). Затем пакет передается коммутатору Hyper-V, который обрабатывает пакет (например, маршрутизация, фильтрация VLAN) и пересылает пакет на целевую виртуальную машину через VMBus, как показано на рис. 1. Обратный путь будет использован, когда виртуальная машина должна отправить пакет.
ПРИ ИСПОЛЬЗОВАНИИ SR-IOV ВИРТУАЛЬНАЯ МАШИНА МОЖЕТ ИСПОЛЬЗОВАТЬ ВИРТУАЛЬНУЮ ФУНКЦИЮ (VF) ДЛЯ ОТПРАВКИ И ПОЛУЧЕНИЯ ПАКЕТОВ НЕПОСРЕДСТВЕННО НА ФИЗИЧЕСКИЙ СЕТЕВОЙ АДАПТЕР, ПОЛНОСТЬЮ МИНУЯ ТРАДИЦИОННЫЙ ПУТЬ, КАК ПОКАЗАНО НА РИС. 1. Это не только повышает производительность сетевых операций ввода-вывода, но и снижает нагрузку на процессор хост-компьютера.
Рисунок 1: Путь прохождения данных с SR-IOV и без него
Live Migration и SR-IOV
В бета-версии Windows Server 2012 динамическую миграцию можно выполнить с использованием SR-IOV виртуальной машиной. Если исходная и целевая системы поддерживают SR-IOV и в целевой системе есть доступный виртуальный модуль, виртуальная машина будет использовать виртуальную функцию. В противном случае виртуальная машина вернется к традиционному пути (VM-Bus).
Каждый сетевой адаптер с поддержкой SR-IOV предоставляет фиксированное количество виртуальных функций, которые можно получить, выполнив команду PowerShell «Get-NetAdapterSriov».
Анализ производительности
Мы провели несколько тестов в нашей лаборатории, чтобы сравнить производительность с SR-IOV и без него. Тестовая среда состоит из одного тестового сервера (на котором выполняются тесты) и одного файлового сервера. В качестве тестового сервера используется сервер Dell PowerEdge™ R710 II с адаптером Intel X520 Ethernet 10 Гбит/с® и бета-версией ОС Windows Server 2012. На файловом сервере размещается несколько общих ресурсов SMB, и он подключен к тестовому серверу через сеть 10 Гбит/с через коммутатор Dell PowerConnect™ 8024.
Мы собрали данные о производительности с точки зрения использования ЦП отложенными вызовами процедур DPC (Deferred Procedure Call), запланированными различными модулями драйверов, участвующими в передаче сетевых данных. Эти данные были собраны в гостевой ОС и ОС хоста, как описано в следующих сценариях. Тестовый сервер имеет 4 идентичные виртуальные машины с бета-версией Windows Server 2012 в качестве гостевой ОС. 4 ВМ подключены к сети 10 Гбит/с через виртуальный коммутатор. Эта тестовая конфигурация показана на рис. 2.
Рисунок 2. Тестовая конфигурация
Прежде чем мы продемонстрируем данные о производительности, важно ввести очень важный параметр, используемый для этого тестирования. В
Microsoft Windows В ОС существует системный механизм, называемый Deferred Procedure Call (DPC), который позволяет выполнять высокоприоритетные задачи (например,
Обработчик прерываний), чтобы отложить обязательные, но менее приоритетные задачи для последующего выполнения. Это позволяет драйверам устройств и другим низкоуровневым потребителям событий быстро выполнять высокоприоритетную часть обработки и планировать некритическую дополнительную обработку для выполнения с более низким приоритетом.
Сценарий 1. Результаты производительности в виртуальной машине (гостевая ОС):
Для этого сценария мы использовали четыре виртуальные машины (ВМ 1–ВМ 4). Мы включили SR-IOV на виртуальных машинах 1 и 2 (установив флажок «Enable SR-IOV» в настройках виртуальной машины) и отключили SR-IOV на виртуальных машинах 3 и 4 (сняв этот флажок). Таким образом, виртуальные машины 1 и 2 будут использовать виртуальную функцию (предоставляемую адаптером Intel), а виртуальные машины 3 и 4 будут использовать синтетический путь (VMBus) для любого сетевого взаимодействия, как показано на рисунке 2.
Мы начали копирование данных (размером 20 Гбайт) из одной сетевой папки SMB на виртуальные машины и собрали журналы использования ЦП системы в гостевой ОС.
Рисунок 3: Использование ЦП DPC в виртуальной машине
На рис. 3 SR-IOV относится к среднему использованию ЦП DPC в VM-1 и VM-2, а без SR-IOV — к среднему использованию ЦП DPC в VM-3 и VM-4. Если мы посмотрим на график, то увидим, что большой разницы в использовании ЦП между двумя случаями нет, но мы еще не учли использование ЦП на хост-компьютере.
Сценарий 2. Результат производительности на хост-компьютере (ОС хоста):
Для этого сценария мы использовали одну виртуальную машину. Мы начали копирование данных (размером 20 Гбайт) из общего ресурса SMB в виртуальную машину и зафиксировали загрузку ЦП DPC 2 модулей, NDIS и VMBUS, которые используются в сетевом вводе-выводе.
Рисунок 4. Использование ЦП DPC на хост-компьютере
Результаты показаны на рисунке 4. Как и ожидалось, существует большая разница в использовании ЦП между двумя случаями (SR-IOV и Non-SR-IOV). Использование ЦП составляет порядка 102 в случае SR-IOV и порядка 103-104 в случае Non-SR-IOV. В основном это связано с тем, что в случае SR-IOV виртуальная машина напрямую взаимодействует с физической сетевой платой через виртуальную функцию. Таким образом, циклы ЦП хоста не используются для обработки сетевых пакетов. В случае Non-SR-IOV (как показано на рис. 1) гостевая ОС взаимодействует с ОС хоста через шину виртуальной машины, которая, в свою очередь, обрабатывает пакеты и отправляет их через физическую сетевую плату. Поэтому широко используются такие модули, как VM Bus и NDIS.
При расчете общего использования ЦП мы заметили, что при использовании SR-IOV использование ЦП во время сетевого ввода-вывода намного меньше. Таким образом, бета-версия Windows Server 2012 с включенным SR-IOV поможет пользователям снизить нагрузку на процессор во время сетевых операций ввода-вывода и тем самым повысить общую производительность системы.
Настройка SR-IOV с помощью PowerShell
Можно использовать следующие команды PowerShell для создания нового виртуального коммутатора с включенным SR-IOV и подключения этого виртуального коммутатора к виртуальному сетевому адаптеру существующей виртуальной машины.
ПРИМЕЧАНИЕ: Перед выполнением следующих команд необходимо включить в BIOS следующие параметры
- Технология виртуализации
- Глобальное включение SR-IOV
(При условии, что подключен один сетевой адаптер (Intel X520))
$NetAdap = Get-NetAdapter | Где-объект { $_. Status -eq "Up"}(Параметр -EnableIov используется для включения SR-IOV в виртуальном коммутаторе)
New-VMSwitch -Name "SRIOV Switch" -NetAdapterName $NetAdap.Name -AllowManagementOS $True -Notes "SRIOV switch on x520" -EnableIov $True$VMSw
= Get-VMSwitch
Добавление нового сетевого адаптера в виртуальную машину-1 и подключение его к виртуальному коммутатору.
Add-VMNetworkAdapter -SwitchName $VMSw.Name -VMName VM-1 -Name "SRIOV Adapter"
ПРИМЕЧАНИЕ:Чтобы эта команда работала, виртуальная машина должна быть выключена)
Вы также можете использовать уже существующий сетевой адаптер виртуальной машины, выполнив следующие команды)
$VMNet = Get-VMNetworkAdapter -VMName VM-1
Connect-VMName VM-1 -SwitchName $VMSw.Name -Name $VMNet.Name
Каждый сетевой адаптер виртуальной машины имеет два свойства, IovWeight и VmqWeight, которые соответствуют SR-IOV и VMQ соответственно. Настройка этих весов включает или отключает функции.