APP下载

基于vDPA 的虚拟网络转发技术研究与优化

2022-01-08欧阳卓玥邹素雯

电子设计工程 2022年1期
关键词:驱动程序网卡内核

欧阳卓玥,邹素雯

(1.武汉邮电科学研究院,湖北武汉 430074;2.烽火通信科技股份有限公司,湖北武汉 430205)

5G 时代的到来,加速了网络虚拟化的进程。随着软件定义网络(SDN)和网络功能虚拟化(NFV)的快速发展,云数据中心网络的架构也随之发生转变,开始使用虚拟化技术[1]。在虚拟网络转发过程中,虽然内核模块可以直接访问硬件设备,但是用户空间应用程序需要执行系统调用并在内核中执行中间步骤,增加了主要任务的开销[2]。基于Intel x86架构的数据平面开发套件(Data Plane Development Kit,DPDK)是一套为Linux 用户空间应用程序提供优化库的解决方案,可以避免从用户空间到内核态空间报文的复制过程。虽然基于DPDK 的OVS 方案在数据包处理效率方面相对于传统的Linux 数据收发方案有很大提高,但依然无法满足现在日益增长的对网络转发性能的需求。vhost数据路径加速(vhost Data Path Acceleration,vDPA)技术在基于DPDK 的OVS 方案的基础上,通过优化virtio 数据平面的vhost 数据路径,使得数据流转发达到线速性能,提升了虚拟网络转发效率。

1 虚拟网络转发技术

1.1 DPDK虚拟化技术

DPDK(Data Plane Development Kit)是Intel 提供的基于x86 架构的数据平面开发工具集[3],主要以Intel Architecture(IA)多核处理器为目标平台,实现了高性能数据包处理。DPDK 是一个全面的网络内核旁路解决方案,不仅支持众多的网卡类型,也有多种内存和CPU 调度的优化方案。

DPDK 的主要模块包括核心库Core Libs、PMD库、Classify库和QoS库等[4]。核心库Core Libs 是DPDK 程序的基础,包括系统抽象层、内存管理、无锁环、缓存池等;PMD 库提供全用户态的驱动,通过轮询和线程绑定得到极高的网络吞吐,支持各种物理和虚拟网卡;Classify 库支持精确匹配、最长匹配和通配符匹配,提供常用包处理的查表操作;QoS 库提供网络服务质量相关组件,如限速和调度等。

DPDK 解决了IA 多核处理器对高性能数据包处理的需求[5],其核心思想主要包括以下几个方面:①轮询模式[6],DPDK 轮询网卡检测是否有网络报文的接收或者发送,避免了传统网卡驱动的中断上下文的开销;②用户态驱动,DPDK 通过用户态驱动的开发框架在用户态操作设备及数据包,避免了不必要的用户态和内核态之间的数据拷贝和系统调用;③亲和性与独占,利用线程的CPU 亲和绑定的方式,将特定的线程指定在固定的核上运行,避免线程在不同核之间频繁切换带来的开销,提高并行处理的吞吐量;④降低访问存储开销,DPDK 使用大页技术降低TLB(Translation Lookaside Buffer)未命中率,利用预取命令提高缓存的访问率等。

1.2 Open vSwitch及相关技术

Open vSwitch(OVS)主要用于云环境中虚拟网络的管理,使得对网络状态的流量监控变得更容易。OVS 是一个高质量的多层虚拟交换机,满足了不同虚拟化平台间的移植性。OVS 支持可编程自动化网络大规模部署及拓展,能够支持标准网络管理接口和协议,还支持与其他现有虚拟交换方案的混合部署。OVS 在物理服务器上创建一个或多个vSwitch供各个虚拟机接入,将接入到OVS 的虚拟机分配到不同的VLAN 中实现网络隔离。

Open vSwitch产生的主要目的是管理和配置虚拟机网络,如图1 所示,在软件定义网络的架构下,OVS作为SDN交换机,向上连接控制器,向下连接主机,同时OVS 交换机可以与物理交换机通信,相互交流数据。OVS 的基本功能主要包括:①自动化控制:OVS支持Open Flow[7],用户可以通过ovs-ofctl 使用Open Flow 协议连接交换机,实现查询和控制;②QoS:支持拥塞管理和流量整形;③安全:支持VLAN 隔离、流量过滤等功能,保证了虚拟网络的安全性;④监控:支持Netflow、SFlow、SPAN、RSPAN 等网络监控技术。

图1 OVS交换机的角色

1.3 基于DPDK的OVS转发技术

虽然OVS 作为虚拟交换机已经进行了优化,但是它在网络功能虚拟化场景下的转发性能、时延等方面还需要提高。Intel 利用DPDK 的加速思想,通过配置软件架构,使得从OVS 连接的某个网络端口接收到的报文不需要openvswitch.ko 内核态的处理,报文直接通过DPDK PMD 驱动到达用户态ovsvswitchd 里[8],对OVS 的转发性能进行了优化。

DPDK 加速的OVS利用了DPDK 的PMD 驱动、向量指令、大页等技术,来优化用户态的数据通路,直接绕过内核态的数据通路,加速物理网口和虚拟网口的报文处理速度。图2 显示了基于DPDK 加速的OVS转发流程图。

图2 基于DPDK加速的OVS转发流程图

2 vDPA技术简介

2.1 vDPA技术

vDPA(vhost Data Path Acceleration)虚拟数据路径加速,主要目的是标准化网卡的SRIOV 数据通路,让SRIOV 的虚拟功能可以支持virtio ring 的layout,并且在Guest的空间可以使用标准的virtio 驱动。

vDPA 本质上是一种使用virtio ring layout 标准化NIC SRIOV 数据平面并将单个标准virtio 驱动程序放置在与任何供应商实现分离的方法,同时向其中添加了通用控制平面来支持它[9]。因为vDPA 是SRIOV 之上的抽象层,因此它还可以支持可扩展IOV 等新兴技术。

vDPA 有潜力成为为虚拟机提供线速以太网接口的解决方案,它具有以下优势:①开放的公共规范:任何人都可以看到、使用和参与更新规范(virtio规范),而不用锁定特定的供应商;②线速性能:与SRIOV 类似,中间没有memory 地址翻译;③单个通用NIC 驱动程序:可以将virtio-net 驱动程序作为标准驱动程序,和用于存储设备的NVMe 驱动程序一样,通过vDPA 框架支持不同厂家的网卡。

2.2 vDPA DPDK设计

DPDK 基于vhost-user 的协议为vDPA 技术提供了一个后端实现。在内核里,DPDK 主要基于mdev框架实现。DPDK 中设计增加两个新组件:vDPA 驱动和用户态驱动,来控制vDPA 设备硬件;vDPA 框架提供vhost-user socket 和vDPA 驱动的连接。vDPA DPDK 框架提供一系列的设备回调函数,由网卡厂家实现,这些函数被vhost-user 调用来创建数据路径[10]。vDPA 在vhost-user 库中添加选择性的数据路径支持,将设备驱动程序与vhost socket 关联,将vswitch 添加为端口代表,同时能将信息返回到数据路径中。

在应用场景中使用vDPA 设备,其数据路径还是全硬件卸载,而控制路径可以使用vDPA API。相对于全卸载的virtio PMD 模式,这种方式的好处是更加灵活,可以切换到其他使用vDPA 的硬件设备或回到全软件路径,同时也可以实现对热迁移的支持并实现标准化。

3 基于vDPA转发优化的实现

自DPDK18.05 版本开始,DPDK 实现了对vDPA的支持。它基于vhost-user 协议,为前端提供统一的控制路径[11]。在DPDK 中支持vDPA 功能,使得内核中基于MDEV 框架的vDPA 框架能更标准地实现。

如图3 所示,为运用vDPA 技术的数据流在各个模块中的转发流程图。硬件层中有一个vDPA 设备,位于网卡中虚拟功能(Virtual Function,VF)和物理功能(Physical Function,PF)中间的模块,该设备使用其专有的控制路径直接填充虚拟队列。virtio-net设备实现了驱动底层vDPA 设备的实际功能。这个vDPA 设备采用将virtio 数据路径卸载到该设备的方式。virito-mdev 设备通过自身的API 接口传输virtio-mdev 命令[12],并执行命令转换、仿真或调解。

图3 vDPA流程图

vDPA DPDK 框架引入了一组由供应商vDPA 设备驱动程序实现的回调,由vhost-user 库调用以设置数据路径,在rte_vdpa_dev_ops 结构体中可以看到,这些回调中一半与标准vhost-user 协议请求具有一一对应的关系,例如获取和设置virito 功能[13]、获取受支持的vhost-user 协议功能等。其中dev_conf 回调函数用于设置和启动设备,并在vhost-user 层接收到设置和启用数据路径所需的所有信息后被调用。在此回调函数中,vDPA 设备驱动程序将设置环地址、DMA mapping 并 启动设 备[14]。

4 性能测试

在Linux 环境中对虚拟机之间的通信进行测试,主要是vDPA 技术使用前后对网络I/O 性能的对比测试。在两台相同的服务器中搭建实验环境,服务器的配置如表1 所示。

表1 服务器基本配置表

在第一台服务器中搭建基于DPDK 加速的OVS实验环境,在第二台服务器中搭建vDPA 的实验环境,分别在两种实验环境中创建虚拟机进行通信测试。实验环境中使用iperf 命令行作为网络性能的测试工具,可以测试两台虚拟机之间的带宽性能[15]。

在DPDK-OVS 实验环境中,配置、编译DPDK 和OVS 并进行大页设置和VFIO[16]。vDPA 实验环境中的测试方案如图4 所示,在环境中修改.config 文件进行配置,用Linux 命令启动librte_pmd_mlx5_vdpa 程序,使DPDK 应用程序与libibverbs 连接。然后创建两台虚拟机,其中一台作为客户端,另一台作为服务端,从客户端向服务端发送数据,数据直接通过数据平面到达网卡进行转发,进一步提高了数据转发效率。实验中分别测试TCP 协议和UDP 协议在虚拟机之间的传输带宽值。

图4 优化后转发测试网络拓扑图

对实验测试结果进行整理,TCP 转发测试数据如图5 所示,UDP 转发测试数据如图6 所示。可以看到使用vDPA 技术优化后网络带宽在原来DPDKOVS 基础上几乎增加了一倍。

图5 TCP转发测试数据

图6 UDP转发测试数据

5 结束语

文中首先对当前虚拟网络转发技术进行了分析研究,提出了一种新的基于vDPA 技术的虚拟网络转发性能优化设计方案并进行实现,通过加速数据路径达到优化数据流转发过程的目的,通过在实验环境中进行优化前后的对比测试验证了该解决方案的可行性。

猜你喜欢

驱动程序网卡内核
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
部署Linux虚拟机出现的网络故障
阻止Windows Update更新驱动程序
微软发布新Edge浏览器预览版下载换装Chrome内核
Server 2016网卡组合模式
计算机硬件设备驱动程序分析
挑战Killer网卡Realtek网游专用Dragon网卡
USB故障又一原因