https://lwn.net/Articles/708087/ 

一斋

XDP价值大讨论

内核各个子系统的设计都面临扩展性和性能的要求,网络子系统走在了前面。最近出现了一种XDP(express data patch)的计数开始出现,然而评论褒贬不一。XDP大致想对收方向的packets做出一些简单快速判断,它最早被希望应用在丢弃不需要的包上,随后加上了简单路由和包修改的功能。实现上内核通过加载BPF程序,在包进入内核协议栈之前做出判断。

很多关于XDP的讨论都集中在XDP的实现方面,而不是XDP设计本身。直到12月初,Florian Westphal在给Hannes Frederic Sowa的回信中说到,“netdev分支开始出现大量关于XDP的patch,我觉得应该停一下了”。他宁愿开发者解决那些网络子系统正在面临的问题,而不是那些“很有意义但是意义不大”事情。

这些事情,(包括DPDK)用用户态程序来bypass网络协议栈,需要使用定义限制严格的一套机制,并且把通用内核协议栈带来的好处全部抛弃,来换取性能上的提升。他还说,这种情况下用硬件提供的包过滤功能比较合适。Westphal还认为XDP是一种比较low的机制。用户态的网络代码好歹可以用各种语言编写,调试方便等等。相比之下,BPF开发不方便,功能上也更受限制。用XDP来解决的路由、负载均衡和先期包过滤等功能,各自都有更好的解决方式。

Thomas Graf提到:packet出了内æ ¸之后一切就变得不可控了,在用户态做安全控制就不合适了,用户态代码可能被破坏。内核里面的BPF代码应该更难被破坏,他也不同意负载均衡这样的事情在用户态来做。

Sowa提到:在早期包丢弃这个应用场景下,用硬件做丢包已经可以解决问题,使用XDP有什么好处呢?Herbert解释了这个问题,灵活性和高性能都是需要的:面对DDOS攻击的时候XDP非常有帮助,XDP让系统遭受攻击时可以尽å¿«丢包,可以影响到协议栈,可编程对越来越鸡贼的攻击者来说也非常必要。仅仅用硬件解决方案在这个问题上远远不够。

网络模块maintainer David Miller也认为XDP应用在丢包场景非常合适,硬件方案不足以解决问题。

Sowa还提到了不太好解决的API问题,随着XDP的发展会用到越来越多内核用户态的ABI。反过来ABI会限制网络协议栈的发展。