DPDK应用基础
上QQ阅读APP看书,第一时间看更新

第1章 背景概述

1.1 产业背景

长期以来,电信业依托各类功能专用的网络设备和庞大的支撑系统组建通信网络,形成了相对封闭的运营环境。这种刚性的运营体系在互联网业务飞速发展的今天,遇到了前所未有的挑战:功能固化的运营设施与业务的灵活适配、稳定的通信标准与新业务的快速部署、粗粒度的网络资源调整与用户/业务资源的按需分配能力等几方面的矛盾日益突出。

互联网的本质特征是以应用为中心和以用户体验为中心,一个架构灵活、富有弹性的网络是连接应用与用户的重要桥梁。随着云计算/大数据应用的不断深化以及网络界对网络重构技术的长期思考,SDN/NFV这种变革性技术应运而生,为解决上述挑战性问题提供了历史性机遇。

尤其是ETSI NFV技术,它使得专有的网络功能能够运行在通用x86架构硬件上的虚拟化网络功能(Virtual Network Function,VNF)中,为电信运营商和互联网服务商提供了一种灵活的业务部署手段和高效的组网方案,可以支持固移网络和 IDC 中 NAT(Network Address Translation,网络地址转换)、DPI(Deep Packet Inspection,深度分组检测)、EPC (Evolved Packet Core,演进分组核心网)、防火墙(Firewall)等各类业务功能的广域灵活部署与网元弹性扩展。网元设备未来可能会被“统一的标准化硬件平台+专用软件”所取代,统一标准化的硬件设备有利于降低设备成本与实现资源共享,从而简化网络的部署成本,实现资源的灵活调度。

不同于典型的数据中心业务和企业网业务,电信广域网业务要求网元(如 BNG、DPI等)具有高吞吐、低时延、海量流表支持和用户级QoS控制的特点。大量实践表明,通用x86服务器作为NFV基础设施用于高速转发业务时,面临着严重的转发性能瓶颈,需要针对性地从硬件架构、系统I/O、操作系统、虚拟化层、组网与流量调度和VNF功能等层面进行性能优化,才能达到各类NFV网络业务的高性能转发要求。

根据ETSI的NFV参考架构,现实中的NFV应用系统一般由NFV基础设施和VNF两类系统服务商提供。因此,相应的NFV网络端到端性能测试,也应划分为底层的NFV基础设施性能与上层的VNF性能两类,以明确各自的性能瓶颈,并避免性能调优工作的相互干扰。

同样,NFV基础设施又可进一步划分为物理主机(包括操作系统)、虚拟化层和网络3个部分,下面简要分析与三者相关的性能问题。

1.1.1 x86架构性能分析

首先从物理主机(包括操作系统)的性能问题进行分析。大量实践表明:处理器/内存规格、软件代码、操作系统和I/O设备的不同是导致物理主机间性能差异的主要原因。

(1)在物理硬件中,处理器架构、CPU 核的数量、时钟速率、处理器内部缓冲尺寸、内存通道、内存时延、外设总线带宽和处理器间总线带宽以及CPU指令集等因素,对应用软件(VNF)有较大影响。

(2)多核处理器环境下的软件设计水平也会导致应用软件性能的差异。例如,基于流水线、多线程和防死锁的设计,对底层硬件架构的准确感知,根据CPU/核的负荷状态分配线程,执行内存就近访问等操作,均可极大提升通信进程的处理性能。

(3)操作系统作为应用软件与物理硬件间的桥梁,通过对物理资源进行合理抽象,不仅提供了多核实时运行环境、内存管理机制、独立内存访问(不同进程间)、文件系统等基本功能,还提供了诸如巨页表管理等高级功能。更大的页表可以减少从逻辑内存页面到物理内存的转换时间、增加缓存命中率,甚至为了获得更快的访问速度,这些地址转译映射可以保存在处理器的内部一个称为TLB(Translation Lookaside Buffer)的缓存中。但是,获得巨页表和TLB支持的前提,是需要对处理器和操作系统(Linux或者Windows)进行正确的配置。

此外,将不同的应用软件线程安排在特定处理器核上运行,这种调优方法可以大幅提升软件处理性能。因此,操作系统的高级功能还需要在多个CPU核之间提供任务(Task)隔离操作和算法。

在某些场合,应用软件甚至还可能旁路掉部分操作系统的特性,开发出一些实时特性或者特殊的操作库函数。例如,避免操作系统加锁的独立内存结构、基于内部内存流水线的线程间通信机制、旁路操作系统内核协议栈及提供特殊内存读写的I/O加速技术、有助于内存就近访问的特殊库函数等。

最后,网卡等外设的驱动程序如何与操作系统连接,并将数据收入内存的过程,对I/O性能有重大影响。现代处理器均支持DMA(Direct Memory Access,直接内存访问)功能,保证外设直接访问系统内存而无需CPU参与底层报文的收发过程;但是,在普通网卡驱动程序中,DMA对每个报文处理完毕后依然会产生一个中断送达CPU,高速网卡中频繁的硬中断将导致严重的CPU阻塞。目前大多数优化技术采用关闭中断的轮询方式,甚至允许I/O报文直接访问CPU内部缓存。

比较有趣的是,尽管强调正确配置操作系统的重要性,但是由于I/O和内存访问的性能对整个NFV性能有决定性影响,因此目前的NFV性能优化技术往往都是旁路掉操作系统及其相关的I/O机制和中断机制。

接下来再分析虚拟化层的相关性能问题。

相比裸金属物理主机,虚拟化层最大的区别就是引入了虚拟化管理程序(Hypervisor)。作为一个软件层,Hypervisor创建了一个中间抽象层用以屏蔽物理资源(CPU、内存、磁盘和I/O设备等)的差异,并将物理硬件分片为虚拟硬件资源,在这些虚拟的分片硬件上可以运行多个操作系统。Hypervisor具体功能包括以下几个方面。

● 屏蔽硬件资源并对来宾操作系统(Guest OS)提供统一的虚拟硬件。

● 管理中断:将硬件中断映射至对应的来宾操作系统,反之亦然。

● 转译虚拟内存地址至物理内存地址:Hypervisor负责将来宾操作系统所使用的来宾物理内存页转译为宿主物理内存地址页,包括I/O内存地址块(如DMA地址操作)。

● 为来宾操作系统提供一个严格的CPU指令集,以保证来宾操作系统运行在一个稳定的仿真硬件平台中。

在环境配置不当时,Hypervisor必然会引入一定的性能开销,例如成倍的内存页面转译、中断重映射、指令集转译等操作。随着Hypervisor技术的演进,这些开销目前已经大为减少,所采用的新技术包括以下几个方面。

(1)采用两级地址转译服务(硬件支持的虚拟化技术),CPU可以旁路Hypervisor而直接访问虚拟内存,并支持包括巨页表在内的地址转译,所以虚拟机内可以透明使用巨页表。

(2)针对I/O的IOMMU(Input Output Memory Management Unit,输入输出内存管理单元)或转译服务:针对I/O的两级内存地址提供转译服务和中断重映射、I/O巨页表转译,从而使I/O设备可以旁路Hypervisor而直接访问物理内存和I/O TLB处理器缓存。

(3)为处理器的一级缓存和TLB缓存新增部分新字段以避免缓存刷新,允许不同的虚拟机共享相同的缓存或TLB缓存而不会相互影响。

(4)I/O设备复用(如SR-IOV)技术则将单一PCIe设备分片为多个PCI设备,这些分片设备在PCI-SIG(Peripheral Component Interconnect Special Interest Group)中被称为虚拟化功能(Virtual Function,VF),拥有独立的配置空间、中断、I/O内存空间等。每个VF可以被直接分配给一个虚拟机使用,以避免Hypervisor带来的软件上下文切换。

(5)在虚拟机中,对报文收/发队列中的数据进行报文分类,允许一台虚拟机直接管理I/O中断,以避免Hypervisor中虚拟交换机的每个报文收发产生的单个中断。

上述这些所谓硬件支持(在处理器和网卡中)的虚拟化功能,极大地提升了虚拟化层的处理性能。而且,与物理主机环境类似,虚拟化层同样需要考虑虚拟机与物理主机中的地址映射问题、线程在多核间的分配问题和资源亲和性问题。

1.1.2 NFV中的网络转发性能分析

在 SDN/NFV 技术的推动下,各类具有高性能转发要求的会话控制类业务功能,如v BNG、v PGW(40 Gbit/s以上)、v IMS等虚拟化业务也逐步加入NFV的应用行列。下面通过分析NFV基础设施的流量转发性能瓶颈,说明DPDK提出的技术背景。

NFV中的网络业务App运行于服务器的虚拟化环境中,单个App业务流量的收发要经过虚拟化层、服务器I/O通道、内核协议栈等多个处理流程,而多个App业务之间又可以用复杂的物理或虚拟网络相连接,称为业务链(Service Chaining)技术。因此,NFV系统的整体性能取决于单服务器转发性能与业务链转发性能(端到端转发性能)两个方面。

由于采用软件转发和交换技术,单服务器内部转发性能是 NFV 系统的主要瓶颈。如图1-1所示,业务App(VNF)流量的收发I/O通道依次包括物理网卡、虚拟交换机、虚拟网卡几个环节(图1-1左半部分)。从软件结构上看,报文的收发需要经过物理网卡驱程、宿主机内核网络协议栈、内核态虚拟交换层、虚拟机(VM)网卡驱程、虚拟机内核态网络协议栈、虚拟机用户态App等多个转发通道,存在着海量系统中断、内核上下文切换、内存复制、虚拟化封装/解封等大量CPU费时操作过程。

图1-1 典型的NFV应用部署示意

(1)网卡硬件中断

目前大量流行的PCI/PCIe网卡在收到报文后,一般采用DMA方式直接写入内存并产生CPU硬件中断,当网络流量激增时,CPU大部分时间阻塞于中断响应。在多核系统中,可能存在多块网卡绑定同一个CPU核的情况,使其占用率达到100%。因此,网卡性能改进一般采用减少或关闭中断、多核CPU负载均衡等优化措施。

(2)内核网络协议栈

Linux或Free BSD系统中,用户态程序调用系统套接字进行数据收发时,会使用内核网络协议栈。这将产生两方面的性能问题:一是系统调用导致的内核上下文切换会频繁占用CPU周期;二是协议栈与用户进程间的报文复制是一种费时的操作。NFV系统中,业务App报文从物理网卡到业务App需要完成收发操作各1次,至少经过多次上下文切换(宿主机2次以及VM内2次)和多次报文复制。将网络协议栈移植到用户态是一种可行思路,但这种方法可能违反GNU协议。因此,弃用网络协议栈以换取转发性能是唯一可行的办法,但需要付出大量修改业务App代码的代价。

(3)虚拟化层的封装效率

业务App中存在2类封装:服务器内部的I/O封装和网络层对数据报文的虚拟化封装。前者是由于NFV的业务App运行于VM中,流量需要经历多次封装/解封装过程:宿主机Hypervisor对VM的I/O封装(如QEMU)、虚拟交换机对端口的封装(如OVS的tap)、云管理平台对虚拟网络端口的封装;后者是为实现NFV用户隔离而在流量中添加的用户标识,如VLAN、Vx LAN等。这2类封装/解封均要消耗CPU周期,从而降低了NFV系统的转发效率。

(4)业务链网络转发效率

NFV的业务链存在星型和串行2种组网方式,如图1-2所示。星型连接依赖物理网络设备的硬件转发能力,整体转发性能较优,但当App(运行于x86服务器)的数量较大时,会消耗大量昂贵的网络设备端口。因此,在业务链组网范围不大时,如在广域网的业务 Po P点,为简化组网和节约端口,可以考虑采用串行连接。在串行组网方式下,不合适的负载均衡算法会造成流量在不同进程组的上下行链路之间反复穿越,严重降低业务链网络的带宽利用率。

图1-2 两种常见的NFV组网连接方法

从电信业对NFV系统的组网和转发性能要求来看,需要考虑服务器宿主OS的I/O通道、业务App及其VM转发通道、虚拟交换机、业务链组网效率以及NFV控制器等多个方面的性能优化,才能实现NFV系统性能的整体提升,相关的优化思路如下。

(1)优化网卡驱动

采用应用层轮询或内核轮询机制,关闭网卡中断,释放CPU中断处理时间。

(2)旁路内核协议栈,减少内核上下文切换

数据通道应采用UIO技术,用户态进程直接读写网卡缓冲区,减少报文处理中的内核系统调用,但同时应保留协议栈功能供网络管理使用。

(3)提供虚拟网络的性能优化

虚拟交换机容易导致性能瓶颈,选择用户态虚拟交换机有利于提升性能和进行故障定位;方案应支持Open Flow功能,满足各类复杂的转发要求;可关闭不必要的虚拟化端口和封装,减少CPU开销。

(4)提供VM内部I/O优化能力

优化方案应能覆盖对VM内部的虚拟网卡及其业务App转发通道的性能提升。

(5)与OpenStack类云管理平台的无缝对接

优化技术不能影响OpenStack相关网络插件和虚拟网络的管理。

(6)支持CPU与网络资源的负载分担

利用CPU亲和性技术,可按需调整和定制多核CPU的负载分布;利用NFV控制器的全局拓扑,提供业务链的链路负荷优化和路由优化。

1.1.3 DPDK的引入

针对上述转发性能影响因素,目前业界已提出多种解决方法。对网卡频繁中断问题,提出DMA方式和设备轮询(NAPI)机制,其中NAPI采用“中断+轮询”方式工作;网卡驱动在中断量较大(设定阈值)时会关闭中断,并自动采用轮询方式收发报文。

针对网络协议栈多次复制和内核上下文切换问题,业界提出了大量零复制(Zero-Copy)技术,如UIO技术和PF_RING技术。其主要思想是:用户态进程直接读取网卡缓冲区、旁路网络协议栈。其中,UIO(Userspace I/O)技术通过设置内核态UIO驱动,不仅可关闭中断,还可通过内核的mmap功能将内核空间映射至用户空间,用户通过标准的读写操作实现对网卡缓冲的零复制收发;另一类称为PF_RING技术,它在内核定义一个定长的环型缓冲,并创建了一类特殊的PF_Socket,用户态进程通过PF_Socket,直接访问内核中的RING缓冲区,避免了标准内核协议栈的处理。

此外,部分开源项目提供了基于上述技术的综合解决方案,典型方案以Netmap和Intel DPDK工具包为代表,可大幅提升单服务器内的报文转发性能。两者思路相似,Netmap采用了UIO的零复制、设备轮询、定长环型队列、多核负载分担等多项技术,在内核开辟环型缓冲,以mmap技术实现用户进程、内核线程和网卡之间的共享内存,以旁路协议栈处理。用户进程通过调用Netmap API,即可实现对环型队列和网卡I/O通道的高效读写,单核(1 GHz主频)转发能力高达14 Mpps。

更进一步地,DPDK不仅实现了网卡缓冲区到用户空间的零复制,还提供虚拟环境下的虚拟接口、兼容Open v Swich的虚拟交换机、专为短小报文提供的巨页访问机制等实用技术,可以达到单核20 Mpps的处理能力。

随着时间的推移,DPDK已逐步发展为一种业界普遍采用的网络加速方法,它以用户数据I/O通道优化为基础,结合了Intel VT技术、操作系统、虚拟化层与v Switch等多种优化方案,已经形成了完善的性能加速整体架构,并提供了用户态API供高速转发类应用访问。随着相关开源社区的不断壮大,DPDK正在逐步演变为一套完整的NFV基础设施转发性能优化技术方案,相信未来将会得到更为广泛的应用。

1.1.4 本书范围

本书面向中初级技术人员,是一本基于DPDK的NFV系统性能优化技术入门参考书。在NFV应用技术中,大多数希望从事DPDK相关应用与开发的读者一般会关注如下几类问题:

● DPDK应用于不同硬件、软件环境下的基本性能;

● DPDK转发性能影响因素、性能调优方法;

● DPDK调优参考配置;

● DPDK应用开发的稳定性、可移植性。

针对这些问题,本书提供基于DPDK的NFV转发性能调优思路、最佳实践和测试结果,以助业界同仁开展NFV系统的研发与性能评估工作。

本书共分3个部分:第一部分分别介绍DPDK社区、基本技术原理、简单应用例、安装部署方法几项内容,主要根据社区文档和部分技术资料编写而成;第二部分主要介绍DPDK在NFV的应用场景并提供丰富的测试例,书中提供的测试方法学是建立在大量测试和实验基础上的,是本书的特色部分;第三部分基于几款开源网络功能软件,介绍了基于DPDK的应用开发案例,是对DPDK相关开发实践的重要总结。

需要说明的是:本书主要集中分析基于DPDK的单节点物理主机与虚拟机环境的I/O性能优化方法以及相关性能指标与测试方法。有关多节点NFV服务器、端到端NFV基础设施、VNF相关性能的集成测试方法,请读者自行参阅ETS NFV GS-PER-001相关报告。另外,我们使用DPDK网站提供的L2/L3转发样例程序作为性能测试的环回工具,关于具体的VNF性能调优问题,本书仅提供优化思路,并在第三部分介绍开发方法。

希望通过阅读本书,读者可以了解以下内容:

● DPDK技术的应用场景、部署方法、工作原理、调优思路;

● 通过介绍部分实验性结果,分析DPDK转发技术的性能及其影响因素;

● DPDK测试方法、测试基准、不同软硬件配置下的DPDK性能测试结果,包括物理机、SR-IOV和OVS环境下的海量流表和高负载压力测试等各种测试例;

● 根据我们的最佳实践经验,提供不同用例的硬件、OS、虚拟化层、DPDK配置模板;

● DPDK应用开发入门技巧。