Эту статью я публикую с целью лишь познакомить читателя с самим фактом существования технологии SR-IOV, а не с тонкостями настройки Hyper-V или сетевых адаптеров. Я сам впервые столкнулся с ней, и потратил много времени, чтобы понять, что к чему, такого очень краткого ликбеза мне не хватало.
В связи с запуском новых серверов и переходом на 10 Гбит/с. решил поразбираться с SR-IOV. После прочтения пачки статей сложилось поверхностное понимание того, что это и как им пользоваться. И почему после установки галочки «Включить SR-IOV» в свойствах сетевого адаптера ВМ в Hyper-V магии не случается. Сразу отмечу, что пытаться запустить ее на 1Гбит/с. нет смысла. Не все адаптеры это поддерживают, да и толку будет мало.
В связи с запуском новых серверов и переходом на 10 Гбит/с. решил поразбираться с SR-IOV. После прочтения пачки статей сложилось поверхностное понимание того, что это и как им пользоваться. И почему после установки галочки «Включить SR-IOV» в свойствах сетевого адаптера ВМ в Hyper-V магии не случается. Сразу отмечу, что пытаться запустить ее на 1Гбит/с. нет смысла. Не все адаптеры это поддерживают, да и толку будет мало.
SR-IOV (Single Root Input/Output Virtualization) — технология виртуализации части аппаратных функций хоста, которая позволяет предоставлять виртуальным машинам прямой доступ к ним. По сути, насколько я понимаю, это еще один механизм оптимизации виртуализации вроде Intel VT-x/VT-d. Сама технология предполагает виртуализацию не только сетевых устройств, но в Hyper-V реализована работа именно с сетевыми адаптерами.
Каждое устройство SR-IOV имеет набор PF и VF: Physical Features и Virtual Features. И по идее можно выделять эти функции разным ВМ, но в моем тестовом случае я и близко не подобрался к лимиту в 128 VF моего сетевого адаптера. В Hyper-V поддержка технологии реализована так, что в случае, если использовать аппаратную разгрузку не получается, сетевой трафик будет обрабатываться обычным способом, т.е. софтово. При этом по заверениям разработчиков потери пакетов при переключении не произойдет.
Я пробовал все на сетевых адаптерах Intel X722, поэтому буду приводить последовательность на их примере. Но для других сетевых адаптеров все будет, скорее всего, более-менее аналогично.
Что нужно для того, чтобы технология SR-IOV заработала:
Не забудьте подписаться на канал в Телеграм чтобы быть в курсе.
Я пробовал все на сетевых адаптерах Intel X722, поэтому буду приводить последовательность на их примере. Но для других сетевых адаптеров все будет, скорее всего, более-менее аналогично.
Что нужно для того, чтобы технология SR-IOV заработала:
- На хосте установить специальный драйвер. Он может идти одним пакетом для хостовой ОС и гостевых, как у Intel, или в виде двух пакетов: отдельно для PF и для VF, т.е. для хоста и гостевых ОС.
- Включить поддержку SR-IOV в свойствах сетевого адаптера (в диспетчере устройств на вкладке Дополнительно).
- Создать виртуальный коммутатор Hyper-V на основе сетевого адаптера, для которого была включена поддержка. При создании обязательно поставить галочку (или параметр в Hyper-V) "Включить технологию виртуализации SR-IOV".
- В свойствах виртуальных машин во вкладке "Аппаратное ускорение" сетевого адаптера установить галочку "Включить SR-IOV". После этого в консоли Hyper-V в окне статуса ВМ на вкладке "Сеть" состояние адаптера должно смениться на "Поддержка SR-IOV".
- Не готов говорить за других, но в случае с Intel в гостевой ОС появляется дополнительный сетевой адаптер. Для него также нужно установить драйвер. Стоит отметить, что драйвер должен быть одинаковой версии на хосте и в гостевой ОС.
В теории, после всех манипуляций аппаратная разгрузка должна заработать. Но суровая правда жизни говорит нам о другом. Я встретил сразу несколько проблем.
На ОС Windows Server 2016 в качестве хостовой и гостевой с последней версией драйверов Intel на одном из серверов аппаратная разгрузка включалась не всегда после миграции или перезагрузки ОС. В некоторых случаях при перезагрузке одной из гостевых машин с включенной SR-IOV сетевой адаптер сервера отваливался, после чего перезапускался. Видимо, все же проблема с драйвером.
В конце концов, когда это все работало, работало оно круто, но нестабильность с активацией аппаратной разгрузки и отсутствие времени на выяснение причин положили конец экспериментам.
Проблемы усугубляются не только сложностью диагностики причин, по которым SR-IOV может не активироваться, но и, например, ограничениями в реализации технологии в конкретном сетевом адаптере. В моем случае не поддерживались ОС младше Windows Server 2016, да и других нюансов в заметках к выпуску хватало.
Выводы
SR-IOV - интересная технология. Синтетические тесты при ее включении позволяют добиться пропускной способности 10 Гбит/с., но в боевых условиях все упирается в вычислительные мощности самого сервера. Современные процессоры легко обрабатывают в районе 5 Гбит/с. сетевого трафика на ядро в Hyper-V, поэтому реальная необходимость в полноценных 10 Гбит/с. понадобится далеко не всегда. Если бы стояла конкретная задача о внедрении технологии, я бы потратил больше времени и, возможно, добил бы эту тему, но в текущих условиях эксперименты были закончены.
Когда SR-IOV работает, это действительно круто, но первый опыт в моем случае оказался не самым положительным, слишком много плавающих багов, а диагностика представляется туманной.
В конце концов, эйфория от крутости новой технологии сменилась у меня на понимание, что SR-IOV - специфичная штука, которая нужна далеко не всем. Если у вас большая загрузка сетевых интерфейсов и все затыкается в производительность сети, обрабатываемой процессорами, то да, SR-IOV даст неплохой буст.
Для желающих погрузиться в тему есть хороший цикл статей от разработчиков: https://docs.microsoft.com/ru-ru/archive/blogs/jhoward/everything-you-wanted-to-know-about-sr-iov-in-hyper-v-part-1
Не забудьте подписаться на канал в Телеграм чтобы быть в курсе.
Комментарии
Отправить комментарий