【问题标题】:Difference in eBPF XDP mode and Socket Filter Mode when parsing a packet header informationeBPF XDP模式和Socket Filter模式在解析包头信息时的区别
【发布时间】:2020-04-06 05:21:17
【问题描述】:

我想知道在解析数据包头信息时,eBPF XDP 和 eBPF 套接字过滤模式是否有区别。

假设我想使用 eBPF 从数据包头中检索目标 IP 地址和源 IP 地址。

如果在 XDP 和套接字过滤模式之间这样做没有区别,也许在 XDP 中实现数据包监控功能而不是在套接字过滤程序中实现它更好?

如果是这样,使用 XDP 而不是使用套接字缓冲区监视每个传入数据包不是总是更好吗,因为 XDP 可以在使用硬件卸载模式时将其操作卸载到 NIC?

谢谢!

【问题讨论】:

    标签: ebpf


    【解决方案1】:

    如果您的kernel supports direct packet access 用于套接字过滤程序,那么用套接字过滤器或 XDP 程序解析它们确实没有什么区别。

    然而,比起 XDP 程序,更喜欢 tc 或套接字过滤程序还有其他原因。主要原因可能是 XDP 有relatively few helpers available,尤其是与 tc 程序相比。然后,不同的程序类型可以访问不同的信息;例如,tc 程序可以部分访问skb,套接字过滤程序可以访问套接字 uid 和 cookie。

    【讨论】:

      【解决方案2】:

      作为对 pchaigno 回答的补充:硬件卸载在这里没什么用。 XDP 和 TC 程序都支持它,并且在两种情况下都会为您带来相同的性能。

      在 XDP 和套接字过滤器/TC 中解析数据包是相同的,所以如果您想要性能,请选择 XDP,期间。不使用 XDP 的原因是 pchaigno 所述:更多 TC 助手,访问套接字缓冲区。或者您的驱动程序缺乏 XDP 支持(在这种情况下,通用 XDP 应该为您带来与 TC 相当的性能)。请注意,这些额外的帮助程序和套接字缓冲区访问可能不适用于卸载到硬件的程序(在 Netronome NFP 上,从 XDP 和 TC 卸载的程序都表现相同并且可以访问相同的帮助程序子集)。

      与监控传入数据包无关,但目前 TC 的另一大优势是能够在出口端添加过滤器。在撰写本文时,支持 XDP 的工作正在进行中,但没有合并到内核中。

      【讨论】:

        猜你喜欢
        • 2023-01-08
        • 1970-01-01
        • 2012-03-27
        • 1970-01-01
        • 2013-08-09
        • 2011-01-06
        • 2013-01-18
        • 2010-11-16
        • 1970-01-01
        相关资源
        最近更新 更多