现在非常流行的DPDK技术,随着实时响应万维网的广泛使用,音频、图像、视频的使用越来越多,带动了服务质量需求的增长。为了应对这种增长,TCP/IP体系结构开发了QoS(服务质量),以支持具有各种QoS要求的各种类型的流量。数据平面是QoS框架的三个平面之一,承担着分组队列管理、队列调度、拥塞避免等机制,对提高网络通信效率起着至关重要的作用。
一、《深入浅出:DPDK入门与实战》——由浅入深,快速掌握DPDK技术
《深入浅出DPDK》(作者:张梅、许云杰)- 该书是目前市场上关于DPDK的最佳实践和最全面的参考书之一,既深入浅出地介绍了DPDK的基础知识,又详细地讲解了如何使用DPDK构建高性能的应用程序。
近年来,随着网络技术的不断创新和市场的发展,越来越多的网络设备基础架构开始向基于通用处理器平台的架构方向融合,期望用更低的成本和更短的产品开发周期来提供多样的网络单元和丰富的功能,如应用处理、控制处理、包处理、信号处理等。为了适应这一新的产业趋势, 英特尔公司 联合第三方软件开发公司及时推出了基于Intel⑧x86架构的DPDK (Data Plane DevelopmentKit,数据平面开发套件),实现了高效灵活的包处理解决方案。经过近6年的发展DPDK已经发展成支持多种高性能网卡和多通用处理器平台的开源软件I具包,并已成为通用处理器平台上影响力最大的数据平面解决方案。本书汇 聚了资深的DPDK技术专家的精辟见解和实战体验, 详细介绍了DPDK技术发展趋势、数据包处理、硬件加速技术、包处理和虚拟化, 以及DPDK技术在SDN、NFV、网络存储等领域的实际应用。书中还使用大量的篇幅讲解各种核心软件算法、先进的数据优化思想、大量详尽的实战心得和使用指南。作为国内唯一本全面阐述网络数据面的核心技术的书籍,本书主要面向IT、网络通讯行业的从业人员,以及大专院校的学生,用通俗易懂的文字打开了一扇通向新代网络处理架构的大门。
由于书中有太多的知识点,刚好又触及我的知识盲区,所以读完的时间久了点,不过有一说一,内容还是挺全面的,能从书中掌握其中的10%-20%我觉得就很厉害了,第一部分讲DPDK基础,第二部分介绍DPDK虚拟化,第三部分介绍DPDK的应用,理论知识偏多。
作为入门书籍,讲解的很全面,从问世的原因讲起,到为了提高转发性能而从各个方面做出的优化努力,最终有了集大成的dpdk:包括提高cache命中,使用大页内存,网卡收包模式中断改轮询,处理器亲和性绑定核心,内存架构改进NUMA,DMA,虚拟化IO透传,用户态vhost等各个方面的优化与新技术实现。后面又介绍了dpdk带来的行业应用和机会前景,一概而全。特别要说明的一点是基 于dpdk的ovs的应用实现,dpdk收包后可以直接将数据提供给用户态访问,直接提高了11倍。试想如果收包后继续有流量处理需求,如传统dpi,防火墙等处理,则用户态报文可以直接给上层vnf实例,相对于传统报文路径的多次拷贝收发传递,将有极大的效率提升,这是文章中所没有提及的。
个人理解书大致分为了几个部分:
- 1、高性能计算,包括cache内存架构多核体系numa无锁计算等
- 2、高性能网络,包括硬件卸载,多队列网卡, mapi轮训和基于中断的网络模式之间的差别等。
- 3、dpdk在1和2.上面的思考,做的一些性能方面的优化,比如批量处理优化cache ,使用用户态驱动减少内核和用户态频繁切换导致的性能损耗等
- 4、dpdk在虚拟化方面的应用
- 5、dpdk在网络存储方面的应用,比如将文件驱动做到用户态以及mtcp等的落地
总得来说是一本好 书,虽然中间有一些错误。个人在看的时候跳过了虚拟化方面的内容,一个原因是虚拟化方面的确很复杂涉及到软硬件虚拟化,而本书的重点又不在这,看起来比较费力。
二、《DPDK应用基础》——深入浅出,结合实际案例进行讲解,既适合初学者入门学习
《DPDK 应用基础》本书作者:罗鑫,这是官方文档之一,不仅深入浅出地介绍了 DPDK 的基础原理和安装调试方法,还详细介绍了 DPDK 在 NFV 中的应用场景和测试方法,并叙述了 DPDK 应用开发的技术细节和实践经验,是 DPDK 的入门必读,是了解 NFV 加速转发技术的入门指南。
该书共分为 11 章,内容涵盖 DPDK 的基础知识、API 接口、大规模流量处理、中间件和协议栈等方面。其中,第一章介绍了 DPDK 的概念和特点;第二章至第四章详细讲解了 DPDK 的核心 API 和内部实现原理;第五章到第七章重点探讨了在 DPDK 环境下如何进行大规模流量处理;第八章和第九章介绍了 DPDK 中常用的中间件和协议栈;最后两章则通过案例分析展示了如何利用 DPDK 实现高速网关和防火墙系统。同时,该书还提供了丰富的代码示例和演示视频等辅助材料,有助于读者更好地理解和应用 DPDK 技术。
我觉得这本书讲dpdk讲的挺深了,从代码上分析dpdk实现的原理虽然我看不懂代码,后面还有些dpdk的测试方法和步骤 ,一些dpdk应用案例的介绍 ,虽然这本书讲的很详细,个人觉得不如朱河清的《深入浅出dpdk》讲的全面,各有利弊吧。
DPDK快速入门指南:
- 安装DPDK:在Linux系统中安装DPDK非常简单。您可以从DPDK官网下载最新版本并按照说明进行安装。
- 配置环境变量:要使用DPDK,必须设置环境变量。您需要设置RTE_SDK和RTE_TARGET两个环境变量。其中RTE_SDK表示您所安装的DPDK目录的路径,而RTE_TARGET则表示您要构建的目标体系结构。
- 编译示例程序:为了测试您的DPDK安装是否正确,您可以编译一个示例程序helloworld。运行make命令即可编译该程序。
- 运行示例程序:编译完成后,在终端输入./build/helloworld即可运行该示例程序。如果一切正常,您应该会看到“Hello World”这个输出语句。
- 使用DPDK API:通过使用API接口,您可以使用DPDK来实现各种不同类型的数据包处理任务。例如,您可以使用rte_eth_rx_burst()函数来接收数据包或者使用rte_eth_tx_burst()函数来发送数据包。
- 配置网络接口:要使DPDK接口能够与网络进行通信,您需要将其配置为相应的网络接口。可以通过使用rte_eth_dev_configure()函数来实现此功能。
- 配置内存池:DPDK使用内存池来管理数据包缓冲区。您可以通过调用rte_pktmbuf_pool_create()函数来创建一个内存池并设置其大小。
- 启动DPDK应用程序:要启动一个DPDK应用程序,您需要在终端中运行sudo ./build/your_app -l 0-3 -- -p 0x3。其中-l选项表示要绑定到的CPU核心,--选项后面的参数则表示要使用哪个端口进行通信。
希望这些步骤对于初学者来说足够简单易懂。当然,在实际开发过程中,还需要进一步深入了解DPDK的各种API和库函数,并掌握更高级别的技巧和优化技术才能更好地利用DPDK提供的高性能数据平面处理能力。
三、《Mastering DPDK》——从源码到性能优化,全方位解析DPDK核心技术
Mastering DPDK》是一本介绍如何使用DPDK(Data Plane Development Kit)技术进行高性能网络数据平面开发的书籍。该书作者为中兴通讯资深工程师Venkata Pingali。
该书共分为 14 章,内容涵盖了 DPDK 的基础知识、API 接口、内存管理、多核编程、流量处理、QoS 等方面。其中,第一章至第五章详细介绍了 DPDK 的概念、特点和原理;第六章到第十二章则从不同角度探讨了如何利用 DPDK 技术构建高效的数据平面应用程序;最后两章则介绍了如何测试和调试DPDK应用程序以及未来DPDK的发展趋势。
《Mastering DPDK》适合具有一定 Linux 和 C/C++ 编程经验的读者阅读,其中包含大量代码示例和实践案例,读者可以通过学习这些案例加深对 DPDK 技术的理解和应用。此外,该书还提供了丰富的演示视频和源码下载等辅助材料,方便读者更好地学习和实践。
四、《High Performance Browser Networking》——这本书不是关于DPDK的专业著作,但其中有关于网络性能优化、数据包处理
《High Performance Browser Networking》是一本关于浏览器网络性能的书籍,由Ilya Grigorik撰写。该书介绍了如何利用现代浏览器提供的各种功能和技术来优化网络性能,包括网络协议、缓存、安全等方面。
该书分为六个部分:基础知识、传输层、应用层协议、HTTP/2、安全以及性能优化工具。其中,基础知识部分介绍了网络协议的基础知识,传输层部分主要讲述TCP和UDP协议,应用层协议则着重介绍DNS、HTTP和WebSocket等常见协议。
在HTTP/2部分中,作者详细介绍了HTTP/2协议的特点、设计思想以及与HTTP/1.x之间的差异。在安全方面,作者讲述了TLS(Transport Layer Security)协议及其实现方式,并探讨了如何保护用户隐私和数据完整性。
最后,在性能优化工具部分,作者介绍了多种常用的性能测试工具和调试工具,如Wireshark、Chrome DevTools等。整本书深入浅出地解释了相关概念和技术,并提供了大量实例和示例代码帮助读者更好地理解
五、《Network Function Virtualization with High Performance Networking》
《Network Function Virtualization with High Performance Networking》是一本由吴嘉豪、陈林主编的专业书籍,主要介绍了网络功能虚拟化(NFV)和高性能网络技术的基础知识、原理和实践。
该书分为三个部分。第一部分介绍了NFV的概念、演进和发展趋势,以及NFV平台的架构、组件和应用场景。第二部分重点讲解了高性能网络技术,包括数据平面开发工具包(DPDK)、用户空间网络协议栈(USP)等常见技术。该部分还涉及到高性能网络设备如网卡、交换机等的设计与实现方法。第三部分以OpenStack为例,阐述了在云计算环境中如何使用NFV和高性能网络技术构建可靠、弹性、高效的虚拟化网络服务。
该书内容丰富,结合了理论与实践,并提供了大量示例代码及配置文件。适合从事或学习网络虚拟化与高性能网络相关领域人员参考。
六、DPDK学习路线
那什么样的程序员适合学习dpdk技术?
对于dpdk来说,它更看重计算机原理和底层技术,和业务上的关联不大,适合:
- 计算机相关专业,对底层技术原理感兴趣的应届生;
- 对网络原理、dpdk、高性能网络开发的在职工程师;
- 工作中从事dpdk/vpp/ovs等开发的工程师;
- 有良好的计算机原理和底层技术基础,想往互联网行业发展的桌面开发,c++开发工程师等等。
这里给大家推荐零声教育全网独家的【dpdk-网络协议栈-vpp-OVS-DDos-虚拟化技术】课程体系,通过32个项目案例,2W+行手写代码,全面解析4个dpdk技术方向:
6.1DPDK网络专栏
(1)dpdk基础知识
- 1.多队列网卡,vmxnet/e1000
- 2.igb_ uio与vfio模块
- 3.kni模块
- 4.hugepage的理解
- 5.零拷贝
- 6.dpdk与netmap区别
- 7.dpdk的工作环境
(2)网络协议栈
- 1.dpdk-arp
- 2.netsh静态arp表设置
- 3.dpdk-icmp
- 4.udp协议格式分析
- 5.udp协议sendto, recvfrom实现
- 6.dpdk-ip
- 7.dpdk-tcp
- 8.tcp协议栈bind,listen, accept实现
- 9.tcp协议栈recv, send, close的实现
- 10.tcp三次握手实现
- 11.tcp四次挥手实现
- 12.tcp acknum与seqnum的确认机制实现
- 13.tcp的并发连接设计
- 14.epoll并发的实现
- 15.tcp协议栈与epoll之间的回调实现
(3)dpdk组件项目
- 1.dpdk-ac
- 2.dpdk-kni
- 3./dev/ kni的原理分析
- 4.kni_ dev的流程
- 5.kni的t缓冲区,rx缓冲区
- 6.kni的用户空间与内核空间映射
- 7.mbuf如何转化为kernel的sk_ buff
- 8.dpdk- timer
- 9.bpftrace的使用
- 10.dpdk- bpf源码流程
(4)dpdk经典项目
- 1.dpdk- dns
- 2.dpdk- gateway
- 3.dpdk-ddos熵计算源码
- 4.ddos attach检测精确度调试
- 5.ddos attach测试T具hping3
- 6.布谷鸟hash原理与使用
6.2储存技术专栏
(1)高效磁盘io读写spdk(C)
- 1.存储框架spdk,为技术栈打开扇存储的大门
- 2.spdk运行环境与vhost
- 3.NVMe与PCl的关系
- 4.手把手实现spdk_ server
- 5.nvme与pcie以及手写nvme读写操作
- 6.bdev与blob之间的关系
- 7.实现blob异步读写
- 8.blobstore的读写操作实现与rpc的关系
- 9.fio性能测试性能对比libaio,io_ uring,psync
- 10.fio plugin工作流程
- 11.fio plugin开发
(2)spdk文件系统的实现
- 1.文件系统功能拆解
- 2.spdk_ env_ init与spdk_ app init的差别
- 3.spdk_ _thread_ poll实现rpc回调
- 4.fs_ operations结构体定义
- 5.file_ operations结构体定义
- 6.dir_ operations结构体定义
- 7.syscall的hook实现
- http://8.io内存管理
- 9.基数树对文件系统内存管理
- 10.spdk_ blob的open,read,write,close
- 11.测试用例与调试入口函数
(3)spdk kv存储的实现
- 1.KV存储拆解Set, Get, Mod, Del
- 2.app/.a库/so库对于kv存储的选择
- 3.bdev与blob对于kv存储的选择
- 4.kv service启动blob资源操作
- 5.kv service关闭blob资源回收
- 6.kv service接口set,get,modify,delete
- 7.kv遍历与查找实现
- 8.page存储chunk的管理
- 9.pagechunk的get与put
- 10.page单查找与多页查找
- 11.btree, artree, hashmap,radixtree, rbtree之间的选择
- 12.slab的实现
- 13.slab分配slot与释放slot
- 14.为kv加上conf文件
- 15.测试用例与性能测试
6.3安全与网关开发专栏
(1)可扩展的矢量数据包处理框架vpp(c/c++)
- 1.vpp命令详解
- 2.mac/ip转发plugin
- 3.load_ balance plugin
- 4.flowtable plugin
- 5.vpp源码之间的差异
- 6.多网卡数据接收与转发
- 7.解决plugin编译加载
- 8.vpp启动load so的流程
- 9.vpp的结构体vlib_ _main实现分析
- 10.vpp的结构体vnet_ main
- 11.vector的操作实现
- 12.vpp vcl库与LD_ PRELOAD实现分析
- 13.vcl原理讲解
- 14.vcl tcpserver实现原理
- 15.vcl tcpclient实现原理
- 16.vcl与iperf3的客户端与服务器
- 17.vcl与nginx的wrk性能测试
- 18.vcl与haproxy的性能测试
- 19.vpp 1801版本与vpp 2206版本
- 20.vpp httpserver的实现源码
- 21.vpp plugin quic源码分析
- 22.vpp plugin hs_ app的源码
- 23.vpp plugin rdma的实现分析
- 24.vpp plugin loadbalance
- 25.vpp plugin nat的源码分析
- 26.vpp host-stack tcp协议实现
- 27.vpp plugin的测试用例实现
(2)golang的网络开发框架nff-go(golang)
- 1.nff-go实现的技术原理
- 2.nff-go/low.h实现分析
- 3.nff- go数据接收的实现
- 4.nff-go数据发送的实现
- 5.ipsec协议解析与strongswan的ipsec
- 6.nff go的缺陷与不足
6.4虚拟化与云原生专栏
(1)DPDK的虚拟交换机框架OvS
- 1.ovs编译安装,ovs核心组件内容
- 2.ovs-vswitchd的工作原理
- 3.ovs-vswitchd与dpdk的关系
- 4.ovs-vsctl的网桥,网口操作
- 5.qemu-system-x86_ 64构建多子网
- 6.ovs与qemu数据流分发
- 7.ovs搭建docker跨主机通信
- 8.ovsdb server与ovsdb协议
- 9.json-rpc为控制面提供开发
- 10.ovs-tcpdump/ovs-l3ping
- 11.OvS 4种数据路径
- 12.VXL AN数据协议
- 13.ovs流量统计
(2)高性能4层负载均衡器DPVS
- 1.dpvs的技术组件与功能边界
- 2.lvs+keepalived配置高可用server
- 3.dpvs与|lvs+ keepalived的关系
- 4.dpvs.conf的配置文件
- 5.dpvs的FNat/NAT/SNAT模式
- 6.dpvs的DR模式
- 7.dpvs的tun模式
- 8.通过quagga配置ospf
- 9.dpvs的tc流控操作与源码实现
- 10.dpvs代码架构分析
- 11.dpvs测试用例ipset, tc,mempool
6.5测试工具专栏
(1)perf3
- 1.vpp vcl的perf3接口hook
- 2.perf3测网络带宽
- 3.tcp吞吐量测试
- 4.udp丢包与延迟测试
- 5.json测试结果输出
(2)TRex
- 1.TRex的运行原理
- 2.TRex与dpdk
- 3.构建TRex测试系统
- 4.t-rex -64- debug gdb调试
- 5.bg-sim- 64模拟单元测试
- 6.YAML文件编写
- 7.流编排与自动化框架
- 8.报文变量设置
(3)dpdk-pktgen
- 1.pktgen命令讲解
- 2.default.cfg配置文件分析
- 3.120M bits/s的转发速率
(4)fio
- 1.ioengine的实现
- 2.ioengine_ ops的分析
- 3.iodepth的分析
- 4.spdk_ nvme的fio分析
- 5.spdk_ bdev的fio分析
- 6.spdk_ blob的ioengine实现
- 7.psync,io_ uring, libaio性能对比
6.6性能测试专栏
(1)性能指标
- 1.吞吐量bps
- 2.拆链/建链pps
- 3.并发
- 4.最大时延
- 5.最小时延
- 6.平均时延
- 7.负载
- 8.包速fps
- 9.丢包率
(2)测试方法
- 1.测试用例
- 2.vpp sandbox
- 3.perf3灌包
- 4.rfc2544
还不熟悉的朋友,这里可以先领取一份dpdk新手学习资料包(入坑不亏):
学习后可从事开发岗位:
- 高级网络开发工程师
- DPDK开发工程师
- 云产品研发工程师
- 云基础开发工程师
- 高性能优化工程师
- SDN开发工程师
- NFV开发工程师
写在最后:
Dpdk作为目前在互联网越来越流行的底层技术,受到越来越多的优秀互联网公司的欢迎与使用。但对于不少程序员来说可能只是见过或是听过,并没有深入的学习和使用。