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

56 篇文章 29 订阅
26 篇文章 3 订阅

一、网络编程常见的技术

在前面已经分析过了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还是有一些复杂。

四、总结

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

  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值