网卡SR-IOV:单个物理网卡(PF)被划分为多个虚拟功能(VF)
SR-IOV(Single Root I/O Virtualization)是一种网络虚拟化技术,允许单个物理网卡被划分为多个虚拟功能(VF),每个虚拟功能可以独立地作为虚拟机的网络接口使用。
- 虚拟功能(VF)和物理功能(PF):SR-IOV将物理网卡(PF)分割成多个虚拟功能(VF),每个VF可分配给不同的虚拟机使用。
- 用户态访问:VF直接通过网卡硬件与用户态应用交互,避免内核态中断的干预,减少延迟和性能损失。
- 网卡驱动:SR-IOV通过网卡驱动(如Intel的ixgbevf、Mellanox的mlx5vf等)支持虚拟功能,虚拟机通过VF与硬件通信,绕过传统内核网络栈。
- 内核与用户态:SR-IOV通过硬件资源分配给虚拟机,使得虚拟机能够直接控制VF并与外部网络通信,减少了内核与用户态之间的切换,提高性能。
SR-IOV提升了虚拟化环境中的网络效率,降低了数据处理的延迟。
模式 | 概述 | 工作原理 |
---|---|---|
混杂模式(Promiscuous Mode) | 网卡接收所有经过的数据包,而不仅仅是发往自身的数据包。 | PF:在PF端,网卡启用混杂模式后,所有数据包会被传送至PF处理。PF决定是否将数据包分发给不同的VF。 VF:在VF端,VF通过驱动接收所有传送给它的数据包(包括不是发往自己的包),用户态应用可以处理这些包,通常用于网络监控。 |
接收模式(Receive Mode) | 网卡只接收发往该设备的特定数据包。 | PF:PF负责配置VF的接收模式,仅转发目标数据包至指定VF。 VF:VF只接收发往自身的数据包,内核通过VF驱动进行数据处理,确保流量仅限于目标虚拟机,提升网络性能和安全性。 |
VLAN模式(VLAN Mode) | 网卡支持虚拟局域网(VLAN)标签数据包的处理和转发。 | PF:PF配置VLAN标签,管理多个VF的VLAN流量隔离。 VF:VF接收带VLAN标签的数据包并处理,确保每个虚拟机仅接收其VLAN对应的数据流量。PF通过硬件和驱动管理VF之间的VLAN划分,确保流量隔离。 |
单播模式(Unicast Mode) | 网卡仅接收发往特定MAC地址的数据包。 | PF:PF配置网卡仅转发到特定VF的单播数据包。 VF:VF只接收目标MAC地址为自己的一对一单播数据包,避免不必要的流量消耗,提升网络效率。PF通过硬件过滤机制确保只有正确的流量到达VF。 |
VF多队列技术使得每个虚拟功能(VF)能够拥有多个独立的接收(Rx)和发送(Tx)队列,提升虚拟机的网络性能,支持更高的并发处理能力。通过将流量分配到多个队列,减少了网络瓶颈,并实现了更好的负载均衡和吞吐量。
工作原理:
- 网卡驱动:网卡驱动负责在硬件上配置多个队列,分配给每个VF。硬件支持多个队列,能够并行处理来自不同源的数据包。
- 内核态:内核通过多队列模式管理和调度网络流量,将数据包分配到不同的队列,并利用中断合并等技术优化性能。内核保证每个VF的队列分配合理,减少CPU资源的竞争。
- 用户态:用户态应用通过网络栈与驱动交互,实现对多队列的访问和管理,优化数据的处理和调度,提高吞吐量和响应速度。
VF QinQ(虚拟功能的双层VLAN标签)技术通过在每个虚拟功能(VF)上使用双层VLAN标签(即QinQ)来实现更细粒度的网络隔离和流量管理。QinQ技术允许在数据帧中嵌套两个VLAN标签,提供多层次的虚拟网络分割,提升虚拟化环境中网络资源的安全性与效率。
工作原理:
- 网卡驱动:网卡驱动在硬件上支持双层VLAN标签的处理,能够为每个VF配置VLAN标签的嵌套。硬件根据配置将QinQ标签附加到进出数据包中,确保不同VLAN之间的流量隔离。
- 内核态:内核通过配置虚拟接口处理QinQ标签,管理每个VF的流量,并负责标签的添加、删除和转发。内核还负责调度数据包,确保QinQ标签正确地应用于数据帧。
- 用户态:用户态应用通过配置网络接口和VLAN标签,控制流量的流向及其处理方式。用户态程序可以根据VLAN标签进行流量分类与过滤,优化网络的资源分配。
VF QoS(虚拟功能的服务质量)技术用于在虚拟化环境中对每个虚拟功能(VF)分配带宽、延迟和优先级等资源,确保不同虚拟机或应用的网络流量得到合理的优先级调度,避免网络拥塞,提升网络性能和可靠性。
工作原理:
- 网卡驱动:网卡驱动在硬件中配置VF的QoS策略,支持流量的优先级和带宽控制。硬件基于这些配置对网络流量进行分类和调度,确保重要流量优先传输。
- 内核态:内核负责管理QoS策略,通过TC(Traffic Control)等工具配置流量的优先级、带宽限制等。内核根据网络流量的类型和QoS设置,执行数据包调度、队列管理等功能。
- 用户态:用户态应用通过配置QoS策略(如使用
tc
命令)来定义流量的优先级和带宽要求,优化虚拟机之间的网络资源分配,保障高优先级应用的网络质量。