1.5 软件包处理的潜力——再识DPDK
DPDK很好地将IA上包处理的性能提升到一个高度,这个高度已经达到很多网络应用场景的最低要求,使得满足要求的场景下对于网络业务软化产生积极的作用。
1.5.1 DPDK加速网络节点
在理解了IA上包处理面临的根本性挑战后,我们会对DPDK所取得的性能提升感到异常兴奋。更令人兴奋的是,按照DPDK所倡导的方法,随着处理器的每一代更新,在IA上的性能提升以很高的斜率不断发酵。当千兆、万兆接口全速转发已不再是问题时,DPDK已将目标伸向百万兆的接口。
DPDK软件包内有一个最基本的三层转发实例(l3fwd),可用于测试双路服务器整系统的吞吐能力,实验表明可以达到220Gbit/s的数据报文吞吐能力。值得注意的是,除了通过硬件或者软件提升性能之外,如今DPDK整系统报文吞吐能力上限已经不再受限于CPU的核数,当前瓶颈在于PCIe(IO总线)的LANE数。换句话说,系统性能的整体I/O天花板不再是CPU,而是系统所提供的所有PCIe LANE的带宽,能插入多少个高速以太网接口卡。
在这样的性能基础上,网络节点的软化就成为可能。对于网络节点上运转的不同形态的网络功能,一旦软化并适配到一个通用的硬件平台,随之一个自然的诉求可能就是软硬件解耦。解耦正是网络功能虚拟化(NFV)的一个核心思想,而硬件解耦的多个网络功能在单一通用节点上的隔离共生问题,是另一个核心思想虚拟化诠释的。当然这个虚拟化是广义的,在不同层面可以有不同的支撑技术。
NFV有很多诉求,业务面高性能,控制面高可用、高可靠、易运维、易管理等。但没有业务面的高性能,后续的便无从谈起。DPDK始终为高性能业务面提供坚实的支撑,除此以外,DPDK立足IA的CPU虚拟化技术和IO的虚拟化技术,对各种通道做持续优化改进的同时,也对虚拟交换(vswitch)的转发面进化做出积极贡献。应对绝对高吞吐能力的要求,DPDK支持各种I/O的SR-IOV接口;应对高性能虚拟主机网络的要求,DPDK支持标准virtio接口;对虚拟化平台的支撑,DPDK从KVM、VMWARE、XEN的hypervisor到容器技术,可谓全平台覆盖。
可以说,在如火如荼的网络变革的大背景下,DPDK以强劲的驱动力加速各种虚拟化的网络功能部署到现实的网络节点上。
1.5.2 DPDK加速计算节点
DPDK之于网络节点,主要集中在数据面转发方面,这个很容易理解;对于计算节点,DPDK也拥有很多潜在的机会。
C10K是IT界的一个著名命题,甚至后续衍生出了关于C1M和C10M的讨论。其阐述的一个核心问题就是,随着互联网发展,随着数据中心接口带宽不断提升,计算节点上各种互联网服务对于高并发下的高吞吐有着越来越高的要求。详见[Ref1-5]。
但是单一接口带宽的提高并不能直接导致高并发、高吞吐服务的发生,即使用到了一系列系统方法(异步非阻塞,线程等),但网络服务受限于内核协议栈多核水平扩展上的不足以及建立拆除连接的高开销,开始逐渐阻碍进一步高并发下高带宽的要求。另一方面,内核协议栈需要考虑更广泛的支持,并不能为特定的应用做特殊优化,一般只能使用系统参数进行调优。
当然,内核协议栈也在不断改进,而以应用为中心的趋势也会不断推动用户态协议栈的涌现。有基于BSD协议栈移植的,有基于多核模型重写的原型设计,也有将整个Linux内核包装成库的。它们大多支持以DPDK作为I/O引擎,有些也将DPDK的一些优化想法加入到协议栈的优化中,取得了比较好的效果。
可以说,由DPDK加速的用户态协议栈将会越来越多地支撑起计算节点上的网络服务。
1.5.3 DPDK加速存储节点
除了在网络、计算节点的应用机会之外,DPDK的足迹还渗透到存储领域。Intel?最近开源了SPDK(Storage Performance Development Kit),一款存储加速开发套件,其主要的应用场景是iSCSI性能加速。目前iSCSI系统包括前端和后端两个部分,在前端,DPDK提供网络I/O加速,加上一套用户态TCP/IP协议栈(目前还不包含在开源包中),以流水线的工作方式支撑起基于iSCSI的应用;在后端,将DPDK用户态轮询驱动的方式实践在NVMe上,PMD的NVMe驱动加速了后端存储访问。这样一个端到端的整体方案,用数据证明了卓有成效的IOPS性能提升。SPDK的详细介绍见:https://01.org/spdk。
可以说,理解DPDK的核心方法,并加以恰当地实践,可以将I/O在IA多核的性能提升有效地拓展到更多的应用领域,并产生积极的意义。
1.5.4 DPDK的方法论
DPDK采用了很多具体优化方法来达到性能的提升,有一些是利用IA软件优化的最佳实践方法,还有一些是利用了IA的处理器特性。这里希望脱离这一个个技术细节,尝试着去还原一些核心的指导思想,试图从方法论的角度去探寻DPDK成功背后的原因,但愿这样的方法论总结,可以在开拓未知领域的过程中对大家有所助益。
1.专用负载下的针对性软件优化
专用处理器通过硬件架构专用优化来达到高性能,DPDK则利用通用处理器,通过优化的专用化底层软件来达到期望的高性能。这要求DPDK尽可能利用一切平台(CPU,芯片组,PCIe以及网卡)特性,并针对网络负载的特点,做针对性的优化,以发掘通用平台在某一专用领域的最大能力。
2.追求可水平扩展的性能
利用多核并行计算技术,提高性能和水平扩展能力。对于产生的并发干扰,遵循临界区越薄越好、临界区碰撞越少越好的指导原则。数据尽可能本地化和无锁化,追求吞吐率随核数增加而线性增长。
3.向Cache索求极致的实现优化性能
相比于系统优化和算法优化,实现优化往往较少被提及。实现优化对开发者的要求体现在需要对处理器体系结构有所了解。DPDK可谓集大量的实现优化之大成,而这些方法多数围绕着Cache进行,可以说能娴熟地驾驭好Cache,在追求极致性能的路上就已经成功了一半。
4.理论分析结合实践推导
性能的天花板在哪,调优是否还有空间,是否值得花更多的功夫继续深入,这些问题有时很难直接找到答案。分析、推测、做原型、跑数据、再分析,通过这样的螺旋式上升,慢慢逼近最优解,往往是实践道路上的导航明灯。条件允许下,有依据的理论量化计算,可以更可靠地明确优化目标。
《深入浅出DPDK》—第1章1.5节软件包处理的潜力——再识DPDK
时间: 2024-09-17 20:20:10
《深入浅出DPDK》—第1章1.5节软件包处理的潜力——再识DPDK的相关文章
《深入浅出DPDK》—第1章1.7节实例
1.7 实例在对DPDK的原理和代码展开进一步解析之前,先看一些小而简单的例子,建立一个形象上的认知.1)helloworld,启动基础运行环境,DPDK构建了一个基于操作系统的,但适合包处理的软件运行环境,你可以认为这是个mini-OS.最早期DPDK,可以完全运行在没有操作系统的物理核(bare-metal)上,这部分代码现在不在主流的开源包中.2)skeleton,最精简的单核报文收发骨架,也许这是当前世界上运行最快的报文进出测试程序.3)l3fwd,三层转发是DPDK用于发布性能测试指标
《Google软件测试之道》—第2章2.2节测试认证
本节书摘来自异步社区<Google软件测试之道>一书中的第2章2.2节测试认证,作者[美]James Whittaker , Jason Arbon , Jeff Carollo,更多章节 2.2 测试认证 Patrick Copeland在本书的序中强调了让开发人员参与测试的难度.招聘到技术能力强的测试人员只是刚刚开始的第一步,我们依然需要开发人员参与进来一起做测试.其中我们使用的一个 关键方法就是被称为"测试认证"(译注:Test Certified)的计划.现在回过头
《深入浅出DPDK》—第3章3.1节并行计算
第3章 并 行 计 算 处理器性能提升主要有两个途径,一个是提高IPC(每个时钟周期内可以执行的指令条数),另一个是提高处理器主频率.每一代微架构的调整可以伴随着对IPC的提高,从而提高处理器性能,只是幅度有限.而提高处理器主频率对于性能的提升作用是明显而直接的.但一味地提高频率很快会触及频率墙,因为处理器的功耗正比于主频的三次方. 所以,最终要取得性能提升的进一步突破,还是要回到提高IPC这个因素.经过处理器厂商的不懈努力,我们发现可以通过提高指令执行的并行度来提高IPC.而提高并行度主要有两
《深入浅出DPDK》—第2章2.6节Cache一致性
2.6 Cache一致性 我们知道,Cache是按照Cache Line作为基本单位来组织内容的,其大小是32(较早的ARM.1990年-2000年早期的x86和PowerPC).64(较新的ARM和x86)或128(较新的Power ISA机器)字节.当我们定义了一个数据结构或者分配了一段数据缓冲区之后,在内存中就有一个地址和其相对应,然后程序就可以对它进行读写.对于读,首先是从内存加载到Cache,最后送到处理器内部的寄存器:对于写,则是从寄存器送到Cache,最后通过内部总线写回到内存.这
《深入浅出DPDK》—第1章1.2节初识DPDK
1.2 初识DPDK 本书介绍DPDK,主要以IA(Intel Architecture)多核处理器为目标平台.在IA上,网络数据包处理远早于DPDK而存在.从商业版的Windows到开源的Linux操作系统,所有跨主机通信几乎都会涉及网络协议栈以及底层网卡驱动对于数据包的处理.然而,低速网络与高速网络处理对系统的要求完全不一样. 1.2.1 IA不适合进行数据包处理吗 以Linux为例,传统网络设备驱动包处理的动作可以概括如下: 数据包到达网卡设备. 网卡设备依据配置进行DMA操作. 网卡发送
《深入浅出DPDK》—第1章1.8节小结
1.8 小结什么是DPDK?相信读完本章,读者应该对它有了一个整体的认识.DPDK立足通用多核处理器,经过软件优化的不断摸索,实践出一套行之有效的方法,在IA数据包处理上取得重大性能突破.随着软硬件解耦的趋势,DPDK已经成为NFV事实上的数据面基石.着眼未来,无论是网络节点,还是计算节点,或是存储节点,这些云服务的基础设施都有机会因DPDK而得到加速.在IT和CT不断融合的过程中,在运营商网络和数据中心网络持续SDN化的过程中,在云基础设施对数据网络性能孜孜不倦的追求中,DPDK将扮演越来越重
《深入浅出DPDK》—第3章3.2节指令并发与数据并行
3.2 指令并发与数据并行前面我们花了较大篇幅讲解多核并发对于整体性能提升的帮助,从本节开始,我们将从另外一个维度--指令并发,站在一个更小粒度的视角,去理解指令级并发对于性能提升的帮助.3.2.1 指令并发现代多核处理器几乎都采用了超标量的体系结构来提高指令的并发度,并进一步地允许对无依赖关系的指令乱序执行.这种用空间换时间的方法,极大提高了IPC,使得一个时钟周期完成多条指令成为可能.图3-6中Haswell微架构流水线是Haswell微架构的流水线参考,从中可以看到Scheduler下挂了
《深入浅出DPDK》—第1章1.1节认识DPDK
第一部分 Part 1DPDK基础篇软件正在统治整个世界.--马克·安德森本书的开始部分会重点介绍DPDK诞生的背景.基本概念.核心算法,并结合实例讲解各种基于IA平台的数据面优化技术,包括相关的网卡加速技术.希望可以帮助初次接触DPDK的读者全面了解DPDK,为后面的阅读打下基础. 第1章 认识DPDK什么是DPDK?对于用户来说,它可能是一个性能出色的包数据处理加速软件库:对于开发者来说,它可能是一个实践包处理新想法的创新工场:对于性能调优者来说,它可能又是一个绝佳的成果分享平台.当下火热的
《深入浅出DPDK》—第1章1.4节探索IA处理器上最艰巨的任务
1.4 探索IA处理器上最艰巨的任务在通用处理器上处理包的最大挑战是什么?为什么以往通用处理器很少在数据面中扮演重要的角色?如果我们带着这些问题来看数据面上的负载,就会有一个比较直观的理解.这里拿40Gbit/s的速率作为考察包转发能力的样本.如图1-8所示,曲线为不同大小的包的最大理论转发能力. 分别截取64B和1024B数据包长,图1-8所示的线速情况下的报文的指令成本能明显地说明不同报文大小给系统带来的巨大差异.就如我们在包转发率那一节中理解的,对于越小的包,相邻包到达的时间间隔就越小,1