eBPF是一种注入式技术,让研究内核的工程师们在应用层上展现自己的奇思妙想,这种能力确实让人趋之若鹜。
近些年来,内核的网络协议栈总被人诟病,人们对网络的依赖感越强,这种声浪也就越明显。暴露出问题很好,因为会涌现很多好玩的东西。
内核被人diss的本质原因就是用户态和内核态大量的上下文切换!应付的任务越多,切换的越频繁,开销也就越大,速度也自然快不起来。
网络任务因需求量自然居高不下,现在谁也不能断别人的网,网意味着生活技能!
于是,聪明人开始想办法解决这种‘慢’的影响,首先‘慢’有很大程度上来自于数据包处理,让数据包走快速路径处理(也就是没那么多审查,限制多了自然会慢)是解决问题的核心诉求。
简单再说下DPDK
DPDK是一种解决诉求的高效方案,它放弃了传统的内核网络协议栈处理,用内核旁路机制,跨过了完整的内核网络协议栈。决定在应用层上去加速数据包处理,把快速路径放在应用层,不用受到内核的限制,这样可以减少大量的上下文切换的开销,是一种改革派的做法。
为什么DPDK不是万应灵药
因为改革派是要放弃所有原本的东西,认为它的一切都是不合理的。但内核的快速路径处理虽然比DPDK要慢,但完全放弃内核的数据包处理,自然也意味着要放弃很多内核支持的机制。如果在应用层复现这些机制则会显得不伦不类,你关注网络,却要实现很多管理,安全的工作,等于在应用层造一个内核,这不高效,它只会变得更复杂。