2023年C/C++高性能技术知识大整理(进阶到大神级别)

开通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岁的伙伴一句话:

决定上限的不是年纪,而是技术。最后:希望学习路线对你有所帮助,希望码农的我们越来越好!

THE END
1.什么是android的四大组件嘉兴雷鸟软件科技有限公司是专注于提供软件外包、手机APP开发、微信公众号开发、商城网站开发、企业软件定制、政府信息化等综合型互联网方案,APP开发服务包括IOS开发、安卓开发、平板Pad开发;为顾客提供软件定制开发、微信开发、商城网站开发一站式解决方案服务。http://www.lei-niao.com/news_407.html
2.绵山悬空栈道在哪一站下车车友交流懂车帝提供绵山悬空栈道在哪一站下车的车友交流详细内容,懂车帝是一个汽车资讯平台,懂车更懂你。我们提供最新汽车报价,汽车图片,汽车价格大全,行情、评测、导购等内容,看车选车买车就上懂车帝。https://www.dongchedi.com/tag/ugc/12875108
3.上海市育鹰学校“基于“基于教学改革融合信息技术的新型教与学...4、一站式服务支撑,助推因材施教 实现各类业务系统间基于数据中心的数据融通,建立个性化的学生画像,辅助教师开展个性化学习支持和教学指导,促进学生综合素质提升。 二、成果应用效果、推广设想、可持续发展情况 1、预期成果如下: 1)学校信息化三年发展规划一个 ...http://www.yuying.edu.sh.cn/info/1076/8592.htm
1.初阶数据结构5栈栈的概念:栈是一种只能在一端进行数据的删除或增加的一种线性表,它的物理结构不一定是线性的。进入数据或删除数据的一端称为栈顶,另一端称为栈底。增加(进入)数据的过程称为进栈(压栈),删除数据的过程称为出栈。如图所示: 什么数据也没有就称为空栈,如图所示: ...https://blog.csdn.net/2401_83009236/article/details/143805232
2.LinuxC编程一站式学习勤于思考.本书尽最大努力理清概念之间的依赖关系,力求一站式学习,读者不需要为了 找一个概念的定义去翻其它书,也不需要为了搞清楚一个概念在本书中前后一通乱翻,只 需从前到后按顺序学习即可.但一站式学习并不等于傻瓜式学习,有些章节有一定的难 度,需要积极思考才能领会.本书可以替你节省时间,但不能替你...http://staff.ustc.edu.cn/~guoyan/os12/LinuxC.pdf?eqid=872ddca70000a53b0000000464740f10
3.开源模型还是商业模型?阿里云智能张翅提出金融企业选择大模型的6大挑...在《全域数据“观”》一书中,我们曾断言:“数据的下一站是智能,数据最终会走向与业务系统的数智融合”,数据消费正在由“人”变成“系统”。未来数据技术将与云原生和智能化全面融合,形成“云数智一体化”服务。云原生技术栈,为企业带来了资源弹性、异构算力、容器和微服务等技术手段,为业务创新和系统建设提供了高效...http://finance.sina.com.cn/roll/2024-05-27/doc-inawsceu2479379.shtml
4.学习springcloudalibaba之前要学习springcloud吗学springcloud...Dubbo这一套方案并不完善 3. Spring Cloud Alibaba 最新的一站式解决方案!更简单 1. 注册中心:Nacos 2. 熔断:Sentinel 3. 网关:GetWay 新概念: 服务网格~Server Mesh 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ...https://blog.51cto.com/u_12228/10153861
5.一站式数字化营销宜昌数字化营销数字人视频矩阵宜昌臻岛信息技术有限公司是珍岛集团T云宜昌运营中心,为中小微企业提供宜昌数字化营销实施方案,T云产品包括网站小程序制作,云引擎智能推广,覆盖80%流量平台的在线商机,电子名片,数字人视频矩阵,短视频AI制作,BI决策,AI臻图臻文,新浪,搜狐,网易,腾讯新闻发布,企业口碑,再营销https://www.zdtyun.com/
6.数据库系列报告开篇:技术路径复盘及展望演进方向一:多模数据库。数据模型繁复、多系统运维带来难题,企业开始寻求技术栈收敛的一站式解决方案。企业在数字化转型早期,会选择一些核心的、成熟的场景进行单点数据库部署。但随着业务发展、场景变迁,企业面对多样化的数据来源,需要配合多种数据存储模型进行管理。使用多种单模型数据库将会导致数据冗余、数据一致性治...https://research.cicc.com/frontend/recommend/detail?id=2640
7.美军联合信息环境(JIE)启示和综述简单地说,传输型CDS其实就是网闸和光闸这类隔离交换产品;访问型CDS则是多网切换和跨网终端类产品;多级型CDS则是包含访问CDS和传输CDS能力的一站式CDS(这种产品非常罕见)。 4、CDS的基础理论 CDS使用了两种安全理论模型:MILS(多独立级别安全)和MLS(多级安全)。其中,访问CDS基于MILS架构;多级CDS基于MLS架构。 https://www.secrss.com/articles/17467
8.数据仓库与数据湖与湖仓一体:概述及比较腾讯云开发者社区数据湖仓一体提供的独特功能越来越模糊了两种结构之间的界限。Presto 和 Spark 技术引入了高性能 SQL,在数据湖上提供近乎交互式的速度。这一创新为数据湖直接服务分析和探索创造了可能性,无需汇总到传统数据仓库中。 Parquet 等文件格式为数据湖表引入了更严格的架构,并采用列式格式来提高查询效率。为了进一步缩小差距...https://cloud.tencent.com/developer/article/2409056
9.袋鼠云数栈DTinsight和药融云哪个好有什么区别优缺点药融云是一家生物医药大数据一站式检索平台,其目的是为全球生物医药行业的专业人员提供高效、精准的搜索服务,帮助他们更好地获取所需信息、快速掌握动态,为未来的研究和发展提供支持。药融云平台主要包含以下模块:药物化学、药理学、生物学、化学生物学、基因组学、药物代谢和药动学、生物技术、临床研究等。药融云还提...https://www.36dianping.com/vs/jvy8.html
10.云开发支付宝云开发结合COCOS一站式小游戏开发语言开发语言,这样很多情况下可以做到下游戏前后端一栈式开发,简化游戏开发者技术栈要求。支付宝云开发...https://open.alipay.com/portal/forum/post/132401037