网络编程之XDP、TC和IO_URING以及DPDK

news2025/1/9 5:56:29

一、网络编程常见的技术

在前面已经分析过了XDP、TC和eBPF。也基本把三者间的关系理清了,但现在又有一个疑惑涌了上来。在前面提到过的IO_URING和DPDK与这些技术有什么关系呢?其实只要认真的看过分析文章可能大家心里都已经基本清楚了。
正如在前面不断提到的,网络编程不是简单的一个部分在努力,它是一个系统工程,从网卡到驱动,从驱动到内核的协议栈再到上层的应用。它是一整套完整的流程,在这个流程上,就如学计算机知识的都明白的木桶原理,只要有一个不够给力,那么其它人的努力可能就大为减弱甚至是失效。
明白了上述的说明,基本也就弄明白了几者之间的关系。

二、技术间的关系

仍然按照传统的用户层、内核和驱动(硬件NIC)三层来说明几者的关系:
1、IO_URING是一个异步编程框架,可以认为是提供给应用层使用的一个网络编程框架,一如开发经常使用epoll,select,poll等。它更多的是向上层提供一套更高效的网络通信接口。
2、DPDK:DPDK属于用户层程序可以直接处理网络数据的一种框架,它可以略过大多数的和内核交互的过程。DPDK的优秀之处已经在应用中体现出来,但是DPDK的不足也同样暴露了出来,
3、XDP、TC(eBPF)则可以认为是与DPDK不同的另外一种方案,DPDK是尽量减少和内核的交互,直接连接用户层和网络数据(驱动或网卡),而XDP等则在仍然与内核保持较强的联系
可以简单理解为,IO_URING是为应用层服务的。后两者是在内核层次上的一次优化。虽然DPDK也实现了用户层的网络数据处理,但从数据处理的方式来看,仍然可以将其划到内核逻辑中去。而XDP等则可以看作内核对DPDK一种快速的应变。
下面是三者的关系图:

在这里插入图片描述

三、应用分析

针对这三类技术,做一下整体的技术应用分析:
1、IO_URING:
做存储起家的异步框架,主要是解决IO与CPU、内存的不匹配出现的。应用在网络编程上,再自然不过。它解决的主要痛点就是在上层应用中支持C100K、C1000K甚至更多。通过对内核的交互大幅减少相关的内存拷贝和通信次数。略过一些不必要的过程,同时对外暴露接口,让用户层感受不到内核的复杂。
目前在Java的Netty 中已经封装了IO_URING的应用,不过据说并没有发挥出其最大效用,有兴趣可以用一下。其它的有名气的应用案例目前还没看到。

2、DPDK
DPDK这个就不用细讲了,在前面已经分析了几十篇,它既可以在上层写传统的SOCKET编程,也可以做为网络监控等的手段。基本上大公司都有基于此框架的应用,开源的更是多,可以去Github上搜索一下就明白了。

3、eBPF(XDP、TC)
XDP之类的应用本身就集成在内核中,再加上eBPF的大力支持,它的应用更多。国内诸如腾讯、阿里等大互联网公司都有相关的应用如蓝鲸;中国移动的磐基,其它开源的也有很多,比如反复提到的Cilium。
不用想,它的应用前景非常被看好,除了各个大公司的支持外,最重要的它是在内核中,免费啊。

在《High-Performance Networking Using eBPF, XDP, and io_uring》,提出了使用IO_URING和XDP以及eBPF一起来实现一个高性能的网络,也就是说,这些技术间其实是互相配合,共同合作为主的。当然,DPDK可能有一点小小小的冲突,这就看大家的实际场景中到底想怎么做了。不过一个普遍比较被大家接受的观点,DPDK还是有一些复杂。

四、总结

学习理论知识十分的枯燥,特别对工作后的人,不论是从记忆力还是注意力,已经从单纯的学习转向了为了生活而打拼。此时对一些理论性的东西往往感到没有什么意义。但还是需要强调的是,计算机技术是一门非常强的理论和实践高度结合的技术学科。理论和实践缺一不可,新技术的突破往往是开发应用瓶颈的突破口,不需要到处再打补丁;同样,丰富的实践场景可以推动技术的完善和创新。
思维不要僵化,要与时俱进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1854991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视频格式怎么转换?9 个免费视频转换工具

前 9 款免费视频转换器有哪些?在此视频转换器评论中,我们收集了一些有用的提示并列出了顶级免费视频转换器软件,还找出了适合所有级别(从初学者到专家)的最佳免费视频转换器。 1. Geekersoft免费在线视频转换 最好的免…

【HTTPS云证书部署】SpingBoot部署证书

这里以华为云证书为例。 1. 下载证书 2. 解压 3. 选择.top_Tomcat复制到SpringBoot的Resource/source下 4. 在.properties文件中进行配置 修改key-store和key-store-password

vue3源码(五)ref、toRef、toRefs、proxyRefs

1.ref 功能 ref与reactive功能类似,都是将数据变为响应式,ref通常用来定义基本类型数据,如字符串、数字、布尔值等。而reactive用来定义对象(或数组)类型数据。虽然ref也可以用来定义对象或数组类型的数据,但内部会通…

Rxjava2最全面的解析

说到区别,可能有的小伙伴会问,我没看过rxjava1。可以直接看rxjava2么。个人觉得不必要,因为 rxjava2.x 是按照 Reactive-Streams specification 规范完全的重写的,完全独立于 rxjava1.x 而存在,它改变了以往 rxjava1的…

Springboot 项目启动时扫描所有枚举并存入缓存(redis)

为什么这么做? 为了springboot 注解属性转换字典方便一点(使用缓存的方式在Springboot 启动时获取字典数据) 在启动时会扫描com.vehicle.manager.core.enumerate包下的所有枚举(包括类中的内部枚举),并取出对应属性以json的方式存入redis 目录结构如下: RedisUtil可以在Red…

已解决javax.management.BadStringOperationException异常的正确解决方法,亲测有效!!!

已解决javax.management.BadStringOperationException异常的正确解决方法,亲测有效!!! 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查字符串值合法性 确认字符串格式 优化代码逻辑 增加…

【数据结构与算法】图论 详解

何为完全图、稀疏图、稠密图。 完全图:完全图是一种简单的无向图,其中每对不同的顶点之间都恰好有一条边。对于有n个顶点的完全图,它包含n(n-1)/2条边。在有向图中,如果任意两个顶点之间都存在方向相反的两条边,包含n(…

汇编快速入门

一.基础知识 1.数据类型 DB(Define Byte,字节类型 占位8位bit 1字节) 范围:DB可以用来定义(无符号、有符号)整数(包含二、十、十六进制)和字符 语法:a DB 数据个数…

C++基础知识——引用

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:Yan. yan.                        …

热电阻温度计的测量电路

热电阻温度计的测量电路,为达到高精度测量,通常会采用电桥测量原理,并结合适当的热电阻类型和连接方式。 惠斯通电桥是用于测量一组电阻式元件阻值变化的电路。该电路具有两个并联电阻支路,充当激励电压 VEXCITATION 的分压器。每…

C++ 教程 - 04 类的使用

文章目录 类的定义类定义案例构造函数 类的定义 C 在 C 语言的基础上增加面向对象编程,类是用于指定对象的形式,是一种用户自定义的数据类型,封装了数据和函数。类可以被看作是一种模板,可以用来创建具有相同属性和行为的多个对象…

LLM技术全景图:技术人必备的技术指南,一张图带你掌握从基础设施到AI应用的全面梳理

LLM技术全景图:技术人必备的技术指南,一张图带你掌握从基础设施到AI应用的全面梳理 LLM 技术图谱(LLM Tech Map)是将 LLM 相关技术进行系统化和图形化的呈现,此图谱主要特点是“专注于技术人视角”,不求从…

【吊打面试官系列-Mysql面试题】视图有哪些优点?

大家好,我是锋哥。今天分享关于 【视图有哪些优点?】面试题,希望对大家有帮助; 视图有哪些优点? 答: (1) 视图能够简化用户的操作; (2) 视图使用户能以多种角度看待同一数据; (3) 视…

深入学习Java1213新特性

一、关于Java生态圈 二、Java老矣,尚能饭否? 三、JDK各版本主要特性 四、JDK与IDE的下载与安装 五、Java12新特性 1.switch表达式(预览) 2.Shenandoah GC:低停顿时间的GC(预览) 3.JVM常量API 4.微基准测试套…

Vue76-路由对浏览器历史记录的影响

一、push模式 默认是push 二、replace模式 替换当前记录! (当前指针指向的那一条记录) 三、小结

Tobii Pro Lab 1.232是全球领先的眼动追踪研究实验软件

Tobii Pro Lab是全球领先的眼动追踪研究实验软件。软件功能强大且拥有友好的用户界面,使眼动追踪研究变得更加简单、高效。该软件提供了很高的灵活性,可运行高级实验,深入了解注意力和认知过程。 获取软件安装包以及永久授权联系邮箱:289535…

QT事件处理系统之二:窗口部件的事件拦截,以及事件的传递顺序

1、案例说明 在父窗口中为selfLineEdit窗口安装事件过滤器,这样我们可以在父窗口中首先拦截来自于selfLineEdit本身产生的事件,并且决定该事件最终是否继续传递到selfLineEdit窗口本身。 2、关键代码 selfLineEdit.cpp #include "selfLineEdit.h" #include &l…

getPhysicalNumberOfCells获取列数不是合并前实际列数

问题就是:有的导入复杂表头被合并的单元格有默认空字符串,有的直接不存在这个单元格 实际我需要下面这种情况 断点可以看到这个导入第一行合并了,被合并单元格还有默认的空字符串 解决办法就是在合并单元格里面判断,不是第一行第一列都设置…

软件培训方案(Word原件)

1. 培训目的 2. 培训方式 3. 培训内容 4. 培训讲师 5. 培训教材 6. 培训质量保证 软件全套资料:本文末个人名片直接获取或者进主页。

利用定时器1产生全双工软件串口

代码; /*《AVR专题精选》随书例程3.通信接口使用技巧项目:使用AVR定时器1和外中断实现全双工软件串口文件:softuart.c说明:软件串口驱动文件作者:邵子扬时间:2012年12月16日*/ #include "softuart.h"// 内部…