中堂仿做网站,手表排名哪个网站好,网站建设教程视频百度云,专业做相册书的网站一、网络编程常见的技术
在前面已经分析过了XDP、TC和eBPF。也基本把三者间的关系理清了#xff0c;但现在又有一个疑惑涌了上来。在前面提到过的IO_URING和DPDK与这些技术有什么关系呢#xff1f;其实只要认真的看过分析文章可能大家心里都已经基本清楚了。 正如在前面不断…一、网络编程常见的技术
在前面已经分析过了XDP、TC和eBPF。也基本把三者间的关系理清了但现在又有一个疑惑涌了上来。在前面提到过的IO_URING和DPDK与这些技术有什么关系呢其实只要认真的看过分析文章可能大家心里都已经基本清楚了。 正如在前面不断提到的网络编程不是简单的一个部分在努力它是一个系统工程从网卡到驱动从驱动到内核的协议栈再到上层的应用。它是一整套完整的流程在这个流程上就如学计算机知识的都明白的木桶原理只要有一个不够给力那么其它人的努力可能就大为减弱甚至是失效。 明白了上述的说明基本也就弄明白了几者之间的关系。
二、技术间的关系
仍然按照传统的用户层、内核和驱动硬件NIC三层来说明几者的关系 1、IO_URING是一个异步编程框架可以认为是提供给应用层使用的一个网络编程框架一如开发经常使用epoll,select,poll等。它更多的是向上层提供一套更高效的网络通信接口。 2、DPDKDPDK属于用户层程序可以直接处理网络数据的一种框架它可以略过大多数的和内核交互的过程。DPDK的优秀之处已经在应用中体现出来但是DPDK的不足也同样暴露了出来 3、XDP、TCeBPF则可以认为是与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还是有一些复杂。
四、总结
学习理论知识十分的枯燥特别对工作后的人不论是从记忆力还是注意力已经从单纯的学习转向了为了生活而打拼。此时对一些理论性的东西往往感到没有什么意义。但还是需要强调的是计算机技术是一门非常强的理论和实践高度结合的技术学科。理论和实践缺一不可新技术的突破往往是开发应用瓶颈的突破口不需要到处再打补丁同样丰富的实践场景可以推动技术的完善和创新。 思维不要僵化要与时俱进。