Я подключаю несколько виртуальных машин KVM к виртуальной сети, которая направлена в физическую сеть 1 Гбит. Маршрутизатор использует netfilter / iptables для фильтрации трафика между реальной и виртуальной сетями. Для коммутатора виртуальной сети я использую SR-IOV с сквозной пропускной способностью PCI. По сравнению с использованием моста Linux эта настройка обеспечивает более высокую пропускную способность (ограниченную полосой пропускания PCIe) с меньшими накладными расходами ЦП (см. Стр. 22-23 из Презентация Тошиаки Макиты на LinuxCon Japan, 2014.
Я назначил по одной VF одного и того же порта сетевой карты Intel I350 каждой виртуальной машине и хосту KVM. (Каждый порт I350 имеет максимум 7 VF, поэтому 6 виртуальных машин + хост - это максимальный размер этой виртуальной сети). Эта настройка работает должным образом, за исключением досадной причуды: встроенный коммутатор I350 работает только тогда, когда я подключаю связанный физический порт I350 с помощью физического соединительного кабеля к физическому внешнему коммутатору (у которого все остальные порты пусты). При включенном внешнем переключателе виртуальная сеть работает нормально; но когда внешний коммутатор отключается, статус канала PF изменяется на «NO-CARRIER», и виртуальная сеть больше не передает пакеты.
Кто-нибудь знает, как заставить работать встроенный переключатель I350? без активная ссылка на физический порт?
Хост виртуальной машины работает под управлением Debian 10 (Buster), если это важно.
Спасибо за свет, который вы пролили!
Дополнительные примечания:
Заглушка с обратной связью, такая как Smartronix SuperLooper будет менее громоздким, чем внешний переключатель, и мощь работай. Однако, по словам производителя, он «предназначен исключительно для тестирования систем, в которых функция перекрестных помех на ближнем конце (NEXT) может быть отключена», а в таблице данных I350 такая функция не упоминается.
Раздел 3.7.6 Лист данных I350 описывает 4 различных поддерживаемых режима внутренней петли. (Та же функция внутренней петли также присутствует в I210и, вероятно, другие чипы Intel.) Однако я не нашел никакой информации об использовании инструментов Linux для настройки I350 / I210 / etc для использования внутренней обратной петли. Также неясно, будет ли активация одного из внутренних режимов обратной петли также активировать встроенный переключатель I350 ...?
Обновления:
Благодаря @Tomek я попробовал
# ip link set dev eth1 vf 0 state enable
RTNETLINK answers: Operation not supported
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
- Когда канал не работает, поток Tx останавливается, и, следовательно, также останавливается локальный коммутируемый трафик.
и
7.3.3.5 Коммутация пакетов TX
К кольцевому трафику применяются следующие правила:
- Петля отключается, когда сетевое соединение отключено.
В то время как Лист данных Intel 710 читается совсем иначе:
Таблица 1-7. Функции внутренней коммутации
Внутренняя коммутация работает независимо от состояния портов LAN (также когда порты LAN не работают).
Все больше похоже на то, что ответ на мой вопрос: да, I350 действительно нужен внешний коммутатор для переключения трафика VM-VM. Я бы хотел, чтобы кто-нибудь доказал, что я неправ!
Хотя я не уверен, будет ли это работать на сетевом адаптере I350, я думаю, что ответ находится на странице руководства ip-link:
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
должен активировать все VF независимо от состояния канала и разрешать переключение между ними даже без кабеля.