Использование встроенного коммутатора SR-IOV I350 для виртуальной сети KVM - требуется ли внешний коммутатор?

Я подключаю несколько виртуальных машин KVM к виртуальной сети, которая направляется в физическую сеть 1 Гбит. Маршрутизатор использует netfilter / iptables для фильтрации трафика между реальной и виртуальной сетями. Для коммутатора виртуальной сети я использую SR-IOV с сквозной пропускной способностью PCI. По сравнению с использованием моста Linux, эта установка обеспечивает более высокую пропускную способность (ограниченную пропускной способностью PCIe) с меньшими накладными расходами ЦП (ссылка: стр. 22-23 из Презентация Тошиаки Макиты на LinuxCon Japan, 2014 .

I ' Мы назначили одну VF одного и того же порта Intel I350 NIC каждой виртуальной машине и хосту KVM (каждый порт I350 имеет максимум 7 VF, поэтому 6 виртуальных машин + хост - это максимальный размер этой виртуальной сети). работает, как ожидалось, за исключением досадной причуды: встроенный коммутатор I350 функционирует только тогда, когда я подключаю связанный физический порт I350 с помощью физического соединительного кабеля к физическому внешнему коммутатору (у которого все остальные порты пусты). При включенном внешнем коммутаторе виртуальный сеть работает нормально, но когда внешний коммутатор отключается, статус канала PF меняется на «NO-CARRIER», и виртуальная сеть больше не передает пакеты.

Кто-нибудь знает, как заставить работать встроенный коммутатор I350 без активного канала на физическом порту? [12 22] Хост виртуальной машины работает под управлением Debian 10 (Buster), если это имеет значение.

Спасибо за любой свет, который вы можете пролить!

Дополнительные примечания:

  • Заглушка обратной связи, такая как Smartronix SuperLooper , могла бы быть менее громоздким, чем внешний переключатель, и может работать . Однако, по словам производителя, он «предназначен исключительно для тестирования систем, в которых функция перекрестных помех на ближнем конце (NEXT) может быть отключена» - и в таблице данных I350 такая функция не упоминается.

  • Раздел 3.7.6 таблицы I350 описывает 4 различных поддерживаемых режима внутренней петли. (Та же функция внутренней петли также присутствует в I210 и, вероятно, в других микросхемах Intel.) Однако я не нашел никакой информации об использовании инструментов Linux для настройки I350 / I210 / и т. Д. Для использования внутренних петля. Также неясно, будет ли активация одного из режимов внутренней петли также активировать встроенный коммутатор I350 ...?

Обновления:

  • Благодаря @Tomek я попробовал

     # ip link set dev eth1 vf 0 state enable
    RTNETLINK отвечает: операция не поддерживается
     

    ip link set dev eth1 vf 0 trust on действительно работает, поэтому синтаксис правильный и драйвер работает. Мне стало любопытно, мешает ли драйвер igb или оборудование I350 установить состояние ссылки vf на enable . Если посмотреть на i40e_main.c (например), struct net_device_ops i40e_netdev_ops содержит

     .ndo_set_vf_link_state = i40e_ndo_set_vf_link_state,
     .ndo_set_vf_spoofchk = i40e_ndo_set_vf_spoofchk,
     .ndo_set_vf_trust = i40e_ndo_set_vf_trust,
     

    тогда как в igb_main.c struct net_device_ops igb_netdev_op имеет

     .ndo_set_vf_spoofchk = igb_ndo_set_vf_spoofchk,
     .ndo_set_vf_trust = igb_ndo_set_vf_trust,
     

    , но отсутствует .ndo_set_vf_link_state . Похоже, что igb не поддерживает установку состояния связи VF на «включено». Другой вопрос, может ли оборудование I350 поддерживать эту функцию. Похоже, этот стандартный способ включения встроенного коммутатора не подойдет для I350. Может быть, есть другой способ?

  • В таблице данных I350 содержатся некоторые обескураживающие утверждения:

    7.8.3.1 Модель коммутации пакетов (VMDq): Допущения VMDq

    1. Когда канал не работает, поток Tx прерывается. остановлен, и, таким образом, локальный коммутационный трафик также останавливается.

    и

    7.3.3.5 Коммутация TX-пакетов

    Следующие правила применяются к кольцевому трафику:

    • Кольцевая проверка отключается при отключении сетевого канала.

    В то время как таблица данных Intel 710 читается совершенно иначе:

    Таблица 1-7. Функции внутренней коммутации

    Внутренняя коммутация работает независимо от состояния портов LAN (также когда порты LAN не работают).

    Все больше похоже на то, что ответ на мой вопрос таков: Да, I350 действительно требует подключения внешнего коммутатора для переключения трафика VM-VM. Мне бы очень хотелось, чтобы кто-нибудь доказал, что я неправ!

6
задан 2 October 2019 в 02:08
1 ответ

В то время как я не уверен, будет ли это работать над I350 NIC, я думаю, что ответ находится в странице справочника IP ссылки:

vf NUM specify a Virtual Function device to be configured. The associated PF device
must be specified using the dev parameter.
[--cut--]
    state auto|enable|disable - set the virtual link state as seen by
    the specified VF. Setting to auto means a reflection of the PF link state,
    enable lets the VF to communicate with other VFs on this host even
    if the PF link state is down, disable causes the HW to drop any packets
    sent by the VF.

Установка VF state к enable должна повысить весь VFs независимо от состояния канала и позволить переключаться между ними даже без кабеля.

5
ответ дан 3 December 2019 в 00:31

Теги

Похожие вопросы