less than 1 minute read

eBPF程序分类

跟踪类eBPF程序

主要用于从系统中提取跟踪信息,进而为监控,排错、性能优化等提供数据支持

网络类eBPF程序

网络类eBPF 程序,主要对网络数据包进行过滤和处理,进而实现网络的观测、过滤、流量控制以及性能优化等各种丰富的功能。在触发位置的不同,网络类eBPF又可以分为:XDP(高速数据路径)程序,TC(流量控制)程序,套接字程序、以及cgroup程序。

XDP(高速数据路径)程序

BPF_PROG_TYPE_XDP ,在网络驱动程序刚刚收到数据包的时候触发执行。由于无需通过繁杂的内核协议栈,XDP程序可以用来实现高性能的网络处理方案,常用于DDoS防御、防火墙、4层负载均衡等场景

需要注意的是XDP不是绕过了内核协议栈,它只是在内核协议栈之前处理了数据包,而处理过了的数据包还可以正常通过内核协议栈继续处理。

根据网卡和网卡驱动是否原生支持XDP 程序,XDP 程序又分为以下三种模式:

  • 通用模式:不需要网卡和网卡驱动支持,XDP 程序像是常规的网络协议栈一样运行在内核中,性能比较差,一般用于测试
  • 原生模式:需要网卡驱动程序的支持,XDP 程序在网卡驱动程序的早期路径运行
  • 卸载模式:需要网卡固件支持XDP卸载,XDP程序直接运行在网卡上,不需要消耗主机的CPU资源,具有极好的性能。

无论那种模式,XDP 程序在处理过网络包之后,都需要根据eBPF 程序执行结果,来决定数据包的去处。下面是5中XDP 程序的执行结果

  • XDP_DROP:丢包。数据包尽早丢弃可以减少CPU处理时间,因为用于防火墙、DDoS防御等丢弃非法数据包的场景。
  • XDP_PASS: 内核协议栈接受到网络包,按照正常流程继续处理。
  • XDP_TX / XDP_REDIRECT: 数据包在XDP程序修改后转发到网卡中,继续按正常的内核协议栈流程处理,常用于负载均衡。
  • XDP_ABORTEDXDP 程序运行出错,数据包丢弃并记录错误行为,以便排查。

Categories:

Updated: