BPF(Berkeley Packet Filter)内核应用性能调优之 高效的驱动级网络数据包处理

BPF(Berkeley Packet Filter)内核应用性能调优之 高效的驱动级网络数据包处理 

   在高效数据包处理转发和SDN功能实现的过程中,BPF机制可以简单粗暴优雅的解决如下痛点:
1. 数据包转发效率的性能调优,比如交换器路由器海量数据包的转发处理中的性能优化;音视频流媒体处理过程中大容量一致性数据包的实时直播性优化,降低音视频数据在数据中心服务器的直播delay
2. SDN中在最底层第一时间实现数据平面(Data Plan)和控制平面(Control Plan)数据包的解析和分离


对BPF了解不多,应该听说过Linux内核对数据包skbuff的Netfliter钩子机制以及iptable的应用,BPF比Netfilter处在数据协议栈的更底层,更高效,而且更关键的是他比Netfliter更加灵活。 


利用BPF,在数据链路层网卡驱动eth_recv_skbuff()的地方,利用内核微码的灵活形式简单实现对协议数据包的MAC/IP/UDP的高效过滤和匹配,匹配规则利用微码自定义。
匹配成功的数据包直接通过RAW-SOCKET punt到用户空间,完美绕开整个TCP/IP协议栈的处理;
规则不匹配的数据包route默认通道,走Linux内核默认的TCP/IP协议栈处理。 


在对效率和delay要求比较高的应用场景,比如音视频CDN,流媒体直播实时realy中可以达到2个数量级别的性能提升。

你可能感兴趣的:(BPF(Berkeley Packet Filter)内核应用性能调优之 高效的驱动级网络数据包处理)