我正在设计一个实验,其中我们有多个 VLAN 到达单个 NIC,每个 VLAN 都与单个 VM 相关联。
实现此目的的直接方法是使用 vconfig 设置标记接口,并将这些接口与每个虚拟机关联。我有点担心这可能会对性能(CPU 利用率和延迟)产生影响,因为我不确定数据包是如何重新路由到虚拟主机中的特定虚拟接口的。是否有办法使用 IOMMU 执行相同操作,假设这将允许虚拟机中的应用程序直接访问?
答案1
简单的解决方案是创建标记接口,在每个接口上构建桥接,然后将虚拟机插入桥接中。使用 IOMMU 可能会在延迟方面表现更好,但在虚拟机内部对 IOMMU 进行标记更容易。
只需确保交换机端口设置为中继即可。
至于主机上的负载,我见过具有数百个标记接口的主机,而对主机资源没有明显的负担。
答案2
在此用例中,您不能使用 IOMMU。IOMMU 为虚拟机提供对完整物理 PCI-e 卡的直接访问。
在您的情况下,由于您希望每个 VM 位于不同的 VLAN,因此您无法通过 IOMMU 提供整个网络接口,因为它还会将所有 VLAN 移动到该 VM。
因此,实现您的目标的唯一解决方案就是@dyasny 上面写的解决方案,即在主机中创建 VLAN 标记接口(eth0.X),然后将每个接口桥接到虚拟机。
答案3
我不能代表 KVM 发言,但对于 vSphere 来说,这似乎不是一个 CPU 方面的问题 - 我在我们的生产服务器上使用了多个 VLAN(在交换机上标记),与之前未标记的单 VLAN 设置相比,我没有发现任何明显的变化。