3.2解决方案探讨
针对以上弊端,分别提出以下技术点进行探讨:
- 控制层和数据层分离。将数据包处理、内存管理、处理器调度等任务转移到用户空间去完成,而内核仅仅负责部分控制指令的处理。这样就不存在上述所说的系统中断、上下文切换、系统调用、系统调度等等问题。
- 使用多核编程技术代替多线程技术,并设置 CPU 的亲和性,将线程和 CPU 核进行一比一绑定,减少彼此之间调度切换。
- 针对 NUMA 系统,尽量使 CPU 核使用所在 NUMA 节点的内存,避免跨内存访问。
- 使用大页内存代替普通的内存,减少 cache-miss。
- 采用无锁技术解决资源竞争问题。
经很多前辈先驱的研究,目前业内已经出现了很多优秀的集成了上述技术方案的高性能网络数据处理框架,如wind、windriver、netmap、dpdk 等,其中,Intel 的 dpdk 在众多方案脱颖而出,一骑绝尘。DPDK目前支持的CPU体系架构包括x86、ARM、PowerPC(PPC),支持的网卡列表:包括主流使用Intel 82599(光口)、Intel x540(电口)。
dpdk 全称data plane development kit(数据平面转发工具),为 Intel 处理器架构下用户空间高效的数据包处理提供了库函数和驱动的支持,数据包的控制层和数据层分开,dpdk绕过linux内核协议栈将数据包的接受处理放到应用层。
也就是 dpdk 绕过了 Linux 内核协议栈对数据包的处理过程,在用户空间实现了一套数据平面来进行数据包的收发与处理。在内核看来,dpdk 就是一个普通的用户态进程,它的编译、连接和加载方式和普通程序没有什么两样。
四、DPDk应用场景
dpdk 作为优秀的用户空间高性能数据包加速套件,现在已经作为一个“胶水”模块被用在多个网络数据处理方案中,用来提高性能。如下是众多的应用。
4.1网络虚拟化
网络虚拟化是一种将物理网络资源虚拟化为多个逻辑网络资源的技术,它可以帮助企业节省网络设备成本,提高网络资源利用率。DPDK可以帮助网络虚拟化平台实现高性能、低延迟的数据包处理,从而提高虚拟网络的性能和可靠性。
4.2云计算
云计算是一-种将计算资源虚拟化为多个逻辑计算资源的技术,它可以帮助企业节省计算资源成本,提高计算资源利用率。DPDK可以帮助云计算平台实现高性能、低延迟的数据包处理,从而提高云计算的性能和可靠性。
4.3网络安全
网络安全是一种保护网络资源免受恶意攻击的技术,它可以帮助企业保护网络资源的安全性和可靠性。DPDK可以帮助网络安全平台实现高性能、低延迟的数据包处理,从而提高网络安全的性能和可靠性。
4.45G通信
5G通信是一-种新一代的移动通信技术,它可以帮助企业实现更快、更可靠的移动通信服务。DPDK 可以帮助5G通信平台实现高性能、低延迟的数据包处理,从而提高5G通信的性能和可靠性。
4.5数据面(虚拟交换机)
- OVS:Open vSwitch 是一个多核虚拟交换机平台,支持标准的管理接口和开放可扩展的可编程接口,支持第三方的控制接入。
- VPP:是 cisco 开源的一个高性能的包处理框架,提供了交换/路由功能,在虚拟化环境中,使它可以当做一个虚拟交换机来使用。在一个类 SDN 的处理框架中,它往往充当数据面的角色。经研究表明,VPP 性能要好于 ovs+dpdk 的组合,但它更适用于NFV,适合做特定功能的网络模块。
- Lagopus:是另一个多核虚拟交换的实现,功能和 OVS 差不多,支持多种网络协议,如 Ethernet,VLAN,QinQ,MAC-in-MAC,MPLS 和 PBB,以及隧道协议,如 GRE,VxLan 和 GTP。
- Snabb: 是一个简单且快速的数据包处理工具箱。
4.6数据面(虚拟路由器)
- OPENCONTRAIL:一个集成了 SDN 控制器的虚拟路由器,现在多用在 OpenStack 中,结合 Neutron 为 OpenStack 提供一站式的网络支持。
- CloudRouter:一个分布式的路由器。
4.7用户空间协议栈
- mTCP:是一个针对多核系统的高可扩展性的用户空间 TCP/IP 协议栈。
- IwIP:针对 RAM 平台的精简版的 TCP/IP 协议栈实现。
- Seastar:是一个开源的,基于 C++ 11/14 feature,支持高并发和低延迟的异步编程高性能库。
- f-stack:腾讯开源的用户空间协议栈,移植于 FreeBSD协议栈,粘合了 POSIX API,上层应用(协程框架,Nginx,Redis),纯 C 编写,易上手。
五、DPDK的影响力
通信行业
通信行业正逐步迁移至虚拟化,以便在其网络环境中增强弹性、灵活性和标准化,随着时间的推移,这种趋势的发展已经变得更加多元化。SDN、NFV、DPDK、Openflow 和 Open vSwitch 都得以使用。移动网的PGW网元和宽带网络的BRAS类转发设备,对转发性能有着非常高的要求。如果用x86架构的NFV服务器取代上述设备,由于Linux内核的限制和通用I/O报文读写方式,这种基于传统Linux和虚拟化技术的转发平面万兆端口普遍仅有1 Gbit/s以内的转发能力;而目前的电信级硬件转发设备可以轻松做到64 byte小报文不分组丢失线速转发。
下一代防火墙
持续优化网路安全需要不断改进防火墙的实施,这将受益于DPDK并不断发展。下一代防火墙也可以是 NFV 解决方案的一部分。用于简单数据分组过滤的基本防火墙已演进多年,可以执行更加高级的应用,比如入侵检测与防御 (IPS)、网络杀毒、IPsec、SSL 和应用控制等。这些功能均位于数据平台,要求对数据流进行深度数据包检查、具备加密和压缩功能,以及执行大量数据分组内容处理。下一代防火墙在设计时运用了采用DPDK的 Wind River 网络加速平台以及QuickAssist 。DPDK 提供了相应的机制,支持通过其他高性能方法来替代 Linux 系统调用,从而避免 Linux 内核出现的常见问题。Wind River 网络加速平台能够加速 Apache 服务器 等本机 Linux 应用,并为移植在网络加速引擎上的安全应用提供更高的加速性能。
大数据分析
关于涉及大数据分析的使用案例,Aspera公司与英特尔公司研究了超高速数据传输解决方案,该解决方案能够在裸机和虚拟化硬件平台上帮助商用互联网连接达到可预测的超高 WAN 传输速度,包括超过往返时间为数百毫秒的网络,以及常见远距离 WAN 几个百分点的数据分组丢失率。借助DPDK,软件工程师可减少收发数据分组所需的内存副本数量。Aspera公司因此成功地将测试系统上单个流数据的传输速度提高至 37.75 Gbit/s,加上以太网帧和 IP 数据分组标头,网络利用率达到了 39 Gbit/s。通过在基于内核的虚拟机 (KVM) 管理程序上进行测试,对虚拟化平台的传输性能开始了初步研究,并实现了 16.1 Gbit/s 的初始传输速度。
电网
作为全球最大的电力公司,中国国家电网公司承担着向大约 11 亿人口供电的坚决任务。SGCC 依赖高性能计算集群确保电网的安全和平稳运行。伴随着中国电网规模的不断扩大,SGCC 急需增强其全数字实时仿真系统,以满足国家日益增长的电力供应需求。DPDK 是其中一项关键组件,帮助将 ADPSS 的延迟降到 50μs之内。这也是为 3,000 台发电机和 30,000 根电网线路创建大型电力系统仿真的必要条件。
六、DPDK市场发展
DPDK的大多数应用最初是在电信领域。随着CSP采用网络虚拟化来降低运营成本并加快新服务的部署,他们虚拟化了需要高吞吐量和/或低延迟的用例,例如路由器,防火墙,无线电访问网络(RAN)和演进的分组核心(EPC)。虚拟化平台的供应商,在这些情况下,VNF和应用程序
已在其产品中利用了DPDK,以实现CSP的性能目标。随着CSP探索新的边缘托管应用,例如视频缓存,监控,增强现实(AR),辅助驾驶,零售和工业物联网,DPDK仍然是实现积极性能目标的关键技术。
类似DPDK最先在电信应用程序中, 对数据包处理功能的性能要求一样, DPDK越来越多地应用于企业和云当中。例如,在2018年,VMware引入了他们的NSX-T数据中心软件定义基础结构的基于DPDK的边缘配置。此版本的NSX-T地址需要具有可变数据包大小的高数据包吞吐量的应用程序以及支持具有以下功能的高速NIC的服务器高达100Gbps的北/南流量。通常,南北向流的包大小各不相同,数据包处理要求,即使它们只占总流量的不到20%。在此用例中,通过使用带有小数据包(64字节)的DPDK,英特尔和VMware的分析表明,性能提高了五倍。
同时有几家公司已将DPDK用于金融应用,其中低延迟带来了巨大的竞争优势。例如,在高频交易(HFT)中,延迟会直接影响交易者的交易效率 算法策略及其超越竞争对手的能力。信息周刊
估计,对于一家大型经纪公司来说,一毫秒每年价值1亿美元。DPDK是这个市场解决方案供应商开发所依赖的关键技术。
七、DPDK学习路线
这里给大家推荐零声教育全网独家的【dpdk-网络协议栈-vpp-OVS-DDos-虚拟化技术】课程体系,通过32个项目案例,2W+行手写代码,全面解析4个dpdk技术方向:
7.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原理与使用
7.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实现
- 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.测试用例与性能测试
7.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的缺陷与不足
7.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
7.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性能对比
7.6性能测试专栏
(1)性能指标
- 1.吞吐量bps
- 2.拆链/建链pps
- 3.并发
- 4.最大时延
- 5.最小时延
- 6.平均时延
- 7.负载
- 8.包速fps
- 9.丢包率
(2)测试方法
- 1.测试用例
- 2.vpp sandbox
- 3.perf3灌包
- 4.rfc2544
学习后可从事开发岗位:
- 高级网络开发工程师
- DPDK开发工程师
- 云产品研发工程师
- 云基础开发工程师
- 高性能优化工程师
- SDN开发工程师
- NFV开发工程师
大家想学习DPDK高性能课程 可以扫码下面微信领取粉丝专属优惠券。
写在最后:
Dpdk作为目前在互联网越来越流行的底层技术,受到越来越多的优秀互联网公司的欢迎与使用。但对于不少程序员来说可能只是见过或是听过,并没有深入的学习和使用。
