开通VIP,畅享免费电子书等14项超值服
首页
好书
留言交流
下载APP
联系客服
2023.09.21湖南
2008年,DPDK由英特尔公司的网络通信部门提出,主要是针对基于Intel的处理器和网卡开发。正如其全称(DataPlaneDevelopmentKit,数据平面开发套件),DPDK提供丰富、完整的框架,让CPU快速实现数据平面应用的数据包处理,高效完成网络转发等工作。
说到这里,有必要解释一下数据平面的概念。在通信框架中,数据传输和连接管理通常被拆分为多个独立的操作,这些操作被称为“平面”,平面包括管理平面、数据平面、控制平面。在传统网络,这些平面都在路由器和交换机的固件中实现,管理平面负责为网络堆栈各个层级和网络系统的其他部分提供管理、监控和配置服务;控制平面决定流量的传输路径;数据平面又称为用户平面,承载用户流量,并负责接口间的数据包转发。
DPDK的环境抽象层向应用与函数库隐藏了底层环境的细节,因而能扩展到任何处理器上使用。就操作系统来说,它提供了对Linux和FreeBSD的支持。
还不熟悉的朋友,这里可以先领取一份dpdk新手学习资料包(入坑不亏):
本文介绍下DPDK进阶到高性能专家的学习路线,整个学习路线,直接对标DPDK资深架构师岗位,知识点包括dpdk、储存、网关开发、网络协议栈、网络安全、TRex、vpp、OVS、DDos、虚拟化技术等等。其次你把整个内容,全部消化,是完全可以胜任任何DPDK资深架构师岗位招聘,DPDK开发招聘。
(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.tcpacknum与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.ddosattach检测精确度调试
5.ddosattach测试T具hping3
6.布谷鸟hash原理与使用
(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.fioplugin工作流程
11.fioplugin开发
(2)spdk文件系统的实现
1.文件系统功能拆解
2.spdk_env_init与spdk_appinit的差别
3.spdk__thread_poll实现rpc回调
4.fs_operations结构体定义
5.file_operations结构体定义
6.dir_operations结构体定义
7.syscall的hook实现
9.基数树对文件系统内存管理
10.spdk_blob的open,read,write,close
11.测试用例与调试入口函数
(3)spdkkv存储的实现
1.KV存储拆解Set,Get,Mod,Del
2.app/.a库/so库对于kv存储的选择
3.bdev与blob对于kv存储的选择
4.kvservice启动blob资源操作
5.kvservice关闭blob资源回收
6.kvservice接口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.测试用例与性能测试
(1)可扩展的矢量数据包处理框架vpp(c/c++)
1.vpp命令详解
2.mac/ip转发plugin
3.load_balanceplugin
4.flowtableplugin
5.vpp源码之间的差异
6.多网卡数据接收与转发
7.解决plugin编译加载
8.vpp启动loadso的流程
9.vpp的结构体vlib__main实现分析
10.vpp的结构体vnet_main
11.vector的操作实现
12.vppvcl库与LD_PRELOAD实现分析
13.vcl原理讲解
14.vcltcpserver实现原理
15.vcltcpclient实现原理
16.vcl与iperf3的客户端与服务器
17.vcl与nginx的wrk性能测试
18.vcl与haproxy的性能测试
19.vpp1801版本与vpp2206版本
21.vpppluginquic源码分析
22.vpppluginhs_app的源码
23.vpppluginrdma的实现分析
24.vpppluginloadbalance
25.vpppluginnat的源码分析
26.vpphost-stacktcp协议实现
27.vppplugin的测试用例实现
(2)golang的网络开发框架nff-go(golang)
1.nff-go实现的技术原理
2.nff-go/low.h实现分析
3.nff-go数据接收的实现
4.nff-go数据发送的实现
5.ipsec协议解析与strongswan的ipsec
6.nffgo的缺陷与不足
(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.ovsdbserver与ovsdb协议
9.json-rpc为控制面提供开发
10.ovs-tcpdump/ovs-l3ping
11.OvS4种数据路径
12.VXLAN数据协议
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
(1)perf3
1.vppvcl的perf3接口hook
2.perf3测网络带宽
3.tcp吞吐量测试
4.udp丢包与延迟测试
5.json测试结果输出
(2)TRex
1.TRex的运行原理
2.TRex与dpdk
3.构建TRex测试系统
4.t-rex-64-debuggdb调试
5.bg-sim-64模拟单元测试
6.YAML文件编写
7.流编排与自动化框架
8.报文变量设置
(3)dpdk-pktgen
1.pktgen命令讲解
2.default.cfg配置文件分析
3.120Mbits/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性能对比
(1)性能指标
1.吞吐量bps
2.拆链/建链pps
3.并发
4.最大时延
5.最小时延
6.平均时延
7.负载
8.包速fps
9.丢包率
(2)测试方法
1.测试用例
2.vppsandbox
3.perf3灌包
4.rfc2544
工作中技术没有挑战,工作中接触不到新技术的在职工程师
从事嵌入式开发对网络存储底层感兴趣在职工程师
自己研究学习速度较慢,不能系统构建知识体系的开发人员
从事网络存储安全的工程师,想深入了解底层技术原理
高级网络开发工程师
DPDK开发工程师
云基础开发工程师
NFV开发工程师
高性能优化工程师
云产品研发工程师
SDN开发工程师
学习成果检验
系统学习课程咨询,扫码添加小雯老师(备注AAA)领取专属优惠券。
传统的数据包捕获瓶颈往往在于LinuxKernel,数据流需要经过LinuxKernel,就会带来KernelSpcae和UserSpace数据拷贝的消耗;系统调用的消耗;中断处理的消耗等。
DPDK针对LinuxKernel传统的数据包捕获模式的问题,进行了一定程度的优化。DPDK的优化可以概括为:
UIO+mmap实现零拷贝(zerocopy)
UIO+PMD减少中断和CPU上下文切换
HugePages减少TLBmiss
其他代码优化
内核弊端:
1、中断处理:当网络中大量数据包到来时,会频繁产生中断请求,频繁的中断会产生较高的性能开销、并造成上下文的切换产生时延。
2、内存拷贝:网络数据包到来时,网卡通过DMA等拷贝到内核缓冲区,内核协议栈再从内核空间拷贝到用户态空间,在Linux内核协议栈中,这个耗时操作甚至占到了数据包整个处理流程的57.1%。
3、局部性失效:目前主流处理器都是多个CPU核心的,这意味着一个数据包的处理可能跨多个CPU核心。比如:一个数据包可能中断在cpu0,内核态处理在cpu1,用户态处理在cpu2,这样跨多个核心,容易造成CPU缓存失效,造成局部性失效。
DPDK优点:
从前面的分析得知目前网络IO的实现的方式中,内核是导致性能瓶颈的原因所在,要解决性能问题就需要绕过内核,直接在用户态收发包。
1、内核bypass:通过UIO(UserspaceI/O)旁路数据包,实现用户态数据包收发,减少上下文切换以及内存拷贝。
2、使用多核编程代替多线程编程:设置CPU的亲和性,将线程和CPU核进行一比一绑定,减少彼此之间调度切换。
3、使用大页内存代替普通的内存:减少cache-miss。
4、采用无锁技术:解决资源竞争问题。
1、spdkblob文件系统设计分析
2、文件系统引入线程与json配置解析
3、文件系统四层架构设计与构建git版本管理
4、从blob读写到文件系统的原语操作实现
5、syscall的hook实现
6、基数树对文件系统内存管理
7、文件系统hookapi的设计与实现
8、文件系统posixapi的兼容问题与文件夹设计
dpdk作为优秀的用户空间高性能数据包加速套件,现在已经作为一个“胶水”模块被用在多个网络数据处理方案中,用来提高性能。如下是众多的应用。
网络虚拟化是一种将物理网络资源虚拟化为多个逻辑网络资源的技术,它可以帮助企业节省网络设备成本,提高网络资源利用率。DPDK可以帮助网络虚拟化平台实现高性能、低延迟的数据包处理,从而提高虚拟网络的性能和可靠性。
云计算是一-种将计算资源虚拟化为多个逻辑计算资源的技术,它可以帮助企业节省计算资源成本,提高计算资源利用率。DPDK可以帮助云计算平台实现高性能、低延迟的数据包处理,从而提高云计算的性能和可靠性。
网络安全是一种保护网络资源免受恶意攻击的技术,它可以帮助企业保护网络资源的安全性和可靠性。DPDK可以帮助网络安全平台实现高性能、低延迟的数据包处理,从而提高网络安全的性能和可靠性。
5G通信是一-种新一代的移动通信技术,它可以帮助企业实现更快、更可靠的移动通信服务。DPDK可以帮助5G通信平台实现高性能、低延迟的数据包处理,从而提高5G通信的性能和可靠性。
OVS:OpenvSwitch是一个多核虚拟交换机平台,支持标准的管理接口和开放可扩展的可编程接口,支持第三方的控制接入。
VPP:是cisco开源的一个高性能的包处理框架,提供了交换/路由功能,在虚拟化环境中,使它可以当做一个虚拟交换机来使用。在一个类SDN的处理框架中,它往往充当数据面的角色。经研究表明,VPP性能要好于ovs+dpdk的组合,但它更适用于NFV,适合做特定功能的网络模块。
Lagopus:是另一个多核虚拟交换的实现,功能和OVS差不多,支持多种网络协议,如Ethernet,VLAN,QinQ,MAC-in-MAC,MPLS和PBB,以及隧道协议,如GRE,VxLan和GTP。
Snabb:是一个简单且快速的数据包处理工具箱。
OPENCONTRAIL:一个集成了SDN控制器的虚拟路由器,现在多用在OpenStack中,结合Neutron为OpenStack提供一站式的网络支持。
CloudRouter:一个分布式的路由器。
mTCP:是一个针对多核系统的高可扩展性的用户空间TCP/IP协议栈。
IwIP:针对RAM平台的精简版的TCP/IP协议栈实现。
Seastar:是一个开源的,基于C++11/14feature,支持高并发和低延迟的异步编程高性能库。
f-stack:腾讯开源的用户空间协议栈,移植于FreeBSD协议栈,粘合了POSIXAPI,上层应用(协程框架,Nginx,Redis),纯C编写,易上手。
持续优化网路安全需要不断改进防火墙的实施,这将受益于DPDK并不断发展。下一代防火墙也可以是NFV解决方案的一部分。用于简单数据分组过滤的基本防火墙已演进多年,可以执行更加高级的应用,比如入侵检测与防御(IPS)、网络杀毒、IPsec、SSL和应用控制等。这些功能均位于数据平台,要求对数据流进行深度数据包检查、具备加密和压缩功能,以及执行大量数据分组内容处理。下一代防火墙在设计时运用了采用DPDK的WindRiver网络加速平台以及QuickAssist。DPDK提供了相应的机制,支持通过其他高性能方法来替代Linux系统调用,从而避免Linux内核出现的常见问题。WindRiver网络加速平台能够加速Apache服务器等本机Linux应用,并为移植在网络加速引擎上的安全应用提供更高的加速性能。
作为全球最大的电力公司,中国国家电网公司承担着向大约11亿人口供电的坚决任务。SGCC依赖高性能计算集群确保电网的安全和平稳运行。伴随着中国电网规模的不断扩大,SGCC急需增强其全数字实时仿真系统,以满足国家日益增长的电力供应需求。DPDK是其中一项关键组件,帮助将ADPSS的延迟降到50μs之内。这也是为3,000台发电机和30,000根电网线路创建大型电力系统仿真的必要条件。
最后:
给校招的小伙伴一句话:第一份工作不亚于一次高考,珍惜校招,社招的竞争是你目前想象不到的。能去大厂觉不妥协,IT行业第一份工作背景越好,起点越高,后续发展空间越好!
给那些1-3年的安于现状的伙伴一句话:
不要抱怨市场,不要安于现状,在低端,往中端领域看,在中端往高端领域看。认知以及对自身的要求,都会有所改变。
给那些担心35岁的伙伴一句话:
决定上限的不是年纪,而是技术。最后:希望学习路线对你有所帮助,希望码农的我们越来越好!