Я нахожусь в процессе разработки эксперимента, в котором у нас есть несколько VLAN, поступающих на одну сетевую карту, причем каждая VLAN связана с одной виртуальной машиной.
Самый простой способ сделать это - настроить тегированные интерфейсы с помощью vconfig и связать эти интерфейсы с каждой из виртуальных машин. Меня несколько беспокоит влияние этого на производительность (использование ЦП и задержка), потому что я не уверен, как пакеты перенаправляются на определенные виртуальные интерфейсы на виртуальных хостах. Есть ли способ сделать то же самое с помощью IOMMU, предполагая, что это обеспечит прямой доступ для приложений в виртуальных машинах?
В этом случае нельзя использовать IOMMU. IOMMU обеспечивает прямой доступ к полной физической карте PCI-e для виртуальной машины.
В вашем случае, поскольку вы хотите, чтобы каждая виртуальная машина находилась в другой VLAN, вы не можете предоставить весь сетевой интерфейс через IOMMU, поскольку он также переместит все VLAN на эту виртуальную машину.
Итак, единственное решение для достижения вашей цели - это то, что @dyasny написал выше, то есть создать интерфейсы с тегами VLAN (eth0.X) на хосте, а затем связать каждый интерфейс с виртуальной машиной.
Простым решением было бы создать интерфейсы с тегами, построить мост на каждом и подключить виртуальные машины к ним. С IOMMU у вас, вероятно, будет лучше с точки зрения задержки, но теги на IOMMU проще выполнять внутри виртуальной машины.
Просто убедитесь, что порт коммутатора настроен на транк.
Что касается нагрузки на хост, я видел хосты с сотнями помеченных интерфейсов без видимого налогообложения ресурсов хоста.
Я не могу говорить о KVM, но с vSphere это не похоже на проблему с точки зрения ЦП - я использую несколько VLAN (помеченных на коммутаторе) на нашем производственном сервере, и я не могу говорить о каких-либо заметных изменениях по сравнению с немаркированная настройка одного VLAN раньше.