摘要:随着云计算的蓬勃发展和 5G 时代的到来,虚拟网络中对数据流转发效率的需求也越来越高,但是当前所使用的常见网络加速技术已不能满足日益增长的需求。文中主要介绍了当前虚拟网络转发技术的基本原理,研究了一种基于 vDPA(vhost 数据路径加速)技术的优化数据流转发的解决方案。通过对优化前后的虚拟网络数据流转发性能进行对比测试,可以看到网络带宽速率在原来的基础上提高了近一倍,验证了文中设计方案的有效性,优化了虚拟网络转发性能。
关键词:虚拟网络;数据流转发;vDPA;性能优化
欧阳卓玥; 邹素雯 电子设计工程 2022-01-05
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.3 基于DPDK的OVS转发技术
虽然 OVS 作为虚拟交换机已经进行了优化,但是它在网络功能虚拟化场景下的转发性能、时延等方面还需要提高。Intel 利用 DPDK 的加速思想,通过配置软件架构,使得从 OVS 连接的某个网络端口接收到的报文不需要 openvswitch.ko 内核态的处理,报 文 直 接 通 过 DPDK PMD 驱 动 到 达 用 户 态 ovsvswitchd里[8] ,对 OVS的转发性能进行了优化。 DPDK加速的 OVS利用了 DPDK的 PMD驱动、向量指令、大页等技术,来优化用户态的数据通路,直接绕过内核态的数据通路,加速物理网口和虚拟网口的报文处理速度。图 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] ,并执行命令转换、仿真或调解。
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所示。
在第一台服务器中搭建基于 DPDK 加速的 OVS 实验环境,在第二台服务器中搭建 vDPA 的实验环境,分别在两种实验环境中创建虚拟机进行通信测试。实验环境中使用 iperf命令行作为网络性能的测试工具,可以测试两台虚拟机之间的带宽性能[15] 。在 DPDK-OVS 实验环境中,配置、编译 DPDK 和 OVS 并进行大页设置和 VFIO[16] 。vDPA 实验环境中的测试方案如图 4 所示,在环境中修改.config 文件进行配置,用 Linux 命令启动 librte_pmd_mlx5_vdpa 程序,使 DPDK 应用程序与 libibverbs 连接。然后创建两台虚拟机,其中一台作为客户端,另一台作为服务端,从客户端向服务端发送数据,数据直接通过数据平面到达网卡进行转发,进一步提高了数据转发效率。实验中分别测试 TCP 协议和 UDP 协议在虚拟机之间的传输带宽值。
对实验测试结果进行整理,TCP 转发测试数据如图 5所示,UDP 转发测试数据如图 6所示。可以看到使用 vDPA 技术优化后网络带宽在原来 DPDKOVS基础上几乎增加了一倍。
5 结束语
文中首先对当前虚拟网络转发技术进行了分析研究,提出了一种新的基于 vDPA 技术的虚拟网络转发性能优化设计方案并进行实现,通过加速数据路径达到优化数据流转发过程的目的,通过在实验环境中进行优化前后的对比测试验证了该解决方案的可行性。
论文指导 >
SCI期刊推荐 >
论文常见问题 >
SCI常见问题 >