XDP eBPF怎么利用操作系统玩转快速数据包处理

eBPF是一种注入式技术,让研究内核的工程师们在应用层上展现自己的奇思妙想,这种能力确实让人趋之若鹜。

近些年来,内核的网络协议栈总被人诟病,人们对网络的依赖感越强,这种声浪也就越明显。暴露出问题很好,因为会涌现很多好玩的东西。

内核被人diss的本质原因就是用户态和内核态大量的上下文切换!应付的任务越多,切换的越频繁,开销也就越大,速度也自然快不起来。

网络任务因需求量自然居高不下,现在谁也不能断别人的网,网意味着生活技能!

于是,聪明人开始想办法解决这种‘慢’的影响,首先‘慢’有很大程度上来自于数据包处理,让数据包走快速路径处理(也就是没那么多审查,限制多了自然会慢)是解决问题的核心诉求。

简单再说下DPDK

DPDK是一种解决诉求的高效方案,它放弃了传统的内核网络协议栈处理,用内核旁路机制,跨过了完整的内核网络协议栈。决定在应用层上去加速数据包处理,把快速路径放在应用层,不用受到内核的限制,这样可以减少大量的上下文切换的开销,是一种改革派的做法。

为什么DPDK不是万应灵药

因为改革派是要放弃所有原本的东西,认为它的一切都是不合理的。但内核的快速路径处理虽然比DPDK要慢,但完全放弃内核的数据包处理,自然也意味着要放弃很多内核支持的机制。如果在应用层复现这些机制则会显得不伦不类,你关注网络,却要实现很多管理,安全的工作,等于在应用层造一个内核,这不高效,它只会变得更复杂。

内核也在求变

内核不是短时间的革新,但它也在推新。并且赋予一些技术以手段。不是老古董,这可能是技术人的亮点。

eBPF在内核的网络层面上有下了很大的功夫,这很显而意见,定制化的优化考虑到了不同使用者的应用场景,也使得eBPF的路越走越宽,完全可以和应用层那些能力扳扳手腕。

那就可以聊聊eBPF在网络上是怎么去解决快速数据包处理这样的诉求的,也就是XDP技术。

既然同样是想快速处理数据包,那么第一个念头肯定是多余的路不走。

驱动作为一个接收器,网络的数据包往我这里填,我得有一定的判断能力,门卫不可能让所有的人都进去,它是第一道关卡,卡住那些不值得协议栈开销的陌生人等。

对于你来了,怎么安置,eBPF用驱动的XDP hook完全可以做到定制化的处理。你是流氓,痴汉,直接让你滚蛋;你是老人,小孩,那告诉你应该怎么回,或者直接送去派出所;你是贵宾,青春靓丽美少女,我给你开VIP通道,直接AF_XDP socket到应用层。

如果门卫让你过了,说明你有通行证,但是你的目标不是我,我对你来说只是一个代理,你不需要去向我的服务,我只需要对你转发,转发权归我,那么eBPF利用hook去定制转发规则也很轻松。

一般而言,XDP技术就是上面说的底层过滤和转发,但eBPF依然可以继续进行这些数据包的处理,之前eBPF常常说的是内核eBPF程序和用户eBPF程序的交互,但对于eBPF而言,任何的eBPF程序都可以互相交互,只不过之前把XDP这些eBPF程序全部归纳入了内核eBPF程序。

而交互的关键就是虚拟共享内存BPF Maps,贯穿整个内核。

eBPF是内核之上的一种技术,挣脱不开,自然XDP这些都是内核协议栈进步的体现。

至于说现在的网卡驱动支持XDP的能力,是想着让CPU不牺牲算力去做软件层面的处理,网卡自己做了,相当于帮CPU和网络协议栈省一点力,毕竟这活网卡做很合适。 但说那么没有支持XDP的网卡而言,内核网络协议栈的XDP程序也会让你可以尽情使用这项技术。

eBPF果真还是做到了数据包处理提速的效果。值得挖挖。
XDP eBPF怎么利用操作系统玩转快速数据包处理_第1张图片

你可能感兴趣的:(网络,网络协议)