К основному контенту

Кратко и понятно о SR-IOV

Эту статью я публикую с целью лишь познакомить читателя с самим фактом существования технологии SR-IOV, а не с тонкостями настройки Hyper-V или сетевых адаптеров. Я сам впервые столкнулся с ней, и потратил много времени, чтобы понять, что к чему, такого очень краткого ликбеза мне не хватало.

В связи с запуском новых серверов и переходом на 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 заработала:

  1. На хосте установить специальный драйвер. Он может идти одним пакетом для хостовой ОС и гостевых, как у Intel, или в виде двух пакетов: отдельно для PF и для VF, т.е. для хоста и гостевых ОС.
  2. Включить поддержку SR-IOV в свойствах сетевого адаптера (в диспетчере устройств на вкладке Дополнительно).
  3. Создать виртуальный коммутатор Hyper-V на основе сетевого адаптера, для которого была включена поддержка. При создании обязательно поставить галочку (или параметр в Hyper-V) "Включить технологию виртуализации SR-IOV".
  4. В свойствах виртуальных машин во вкладке "Аппаратное ускорение" сетевого адаптера установить галочку "Включить SR-IOV". После этого в консоли Hyper-V в окне статуса ВМ на вкладке "Сеть" состояние адаптера должно смениться на "Поддержка SR-IOV".
  5.  Не готов говорить за других, но в случае с 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

Не забудьте подписаться на канал в Телеграм чтобы быть в курсе.

Комментарии

Популярные сообщения из этого блога

В чем разница между частотами russia, russia2, russia3 и russia4 в Mikrotik.

Для большинства пользователей WiFi бывает только 2,4 ГГц и 5 ГГц. Если кто-то еще и слышал о стандартах вроде b/g/n/ac, то уж про каналы почти никто не знает, а про частоты — тем более. К счастью, мы с вами (я надеюсь) разбираемся в вопросе лучше простых пользователей, а значит должны настраивать оборудование правильно. С начала года все ввозимые на территорию РФ устройства Mikrotik с поддержкой WiFi залочены на Country: russia3. Увидеть это можно, если открыть свойства беспроводного интерфейса, нажать на кнопку Advanced Mode/Simple Mode и оценить поля Frequency Mode и Country. Наиболее простым и понятным вариантом здесь является regulatory-domain, т.е. на основе законодательства страны, выбранной в поле Country. Это гарантированно избавит вас от возможных проблем с радиочастотными службами и подбором силы излучения передатчика. Напомню, что для России максимально разрешенным является уровень излучения 20 dBm или 100 мВт. Устанавливая значение передатчика больше умышленно, вы не

Проблема в Zabbix: Ping loss is too high при больших задержках

Столкнулся с интересной проблемой, до сути которой докопался как-то не сразу, хотя решение в итоге вышло простым. После настройки мониторинга резервных каналов связи на объектах Zabbix стал регулярно ругаться, что на этих элементах большие потери пакетов, хотя по факту их не было. Зато были задержки: по 900 и более мс. Попытавшись как-то потюнить сам Zabbix, начал копать глубже, в результате чего выяснилось, что простые проверки, реализованные в частности в дефолтном шаблоне системы Template ICMP Ping, опираются на fping с параметрами по-умолчанию, что описано в данной статье . То есть если ответ на ICMP запрос не получен в установленное время, пинг считается потерянным. В моем случае zabbix 3.0 и fping 3.8 значение таймаута по умолчанию составляет 500 мс, что явно меньше того, что требуется. Увеличить это можно в самих настройках шаблона, указав в элементе ICMP loss ключ icmppingloss[,,,,3000], где 3000 - искомый таймаут (тут каждому свой, я установил 3000 для компенсации роста зад