gpt4 book ai didi

networking - 为什么 GRO 效率更高?

转载 作者:行者123 更新时间:2023-12-02 18:20:31 28 4
gpt4 key购买 nike

Generic Receive Offload (GRO) 是 Linux 中的一种软件技术,用于聚合属于同一流的多个传入数据包。链接的文章声称 CPU 利用率降低,因为不是每个数据包单独遍历网络堆栈,而是单个聚合数据包遍历网络堆栈。

但是,如果查看 GRO 的源代码,就会发现它本身就像一个网络堆栈。例如,传入的 TCP/IPv4 数据包需要经过:

每个函数都会执行解封装并查看相应的帧/网络/传输 header ,正如“常规”网络堆栈所期望的那样。

假设机器不执行防火墙/NAT 或其他明显昂贵的每数据包处理,那么“常规”网络堆栈中的速度如此之慢,“GRO 网络堆栈”可以加速吗?

最佳答案

简短回答:GRO 是在接收流程的早期完成的,因此它基本上减少了 ~(GRO session 大小/MTU)的操作数量。

更多详细信息:最常见的 GRO 函数是napi_gro_receive() 。几乎所有网络驱动程序都使用了 93 次(在内核 4.14 中)。通过在 NAPI 级别使用 GRO,驱动程序很早就在接收完成处理程序处对大型 SKB 进行聚合。这意味着接收堆栈中的所有后续函数执行的处理要少得多。

这是 Mellanox ConnectX-4Lx NIC 的 RX 流程的直观展示(抱歉,这是我有权访问的内容): enter image description here

如您所见,GRO 聚合位于调用堆栈的最底部。您还可以查看之后完成了多少工作。想象一下,如果这些功能中的每一个都在单个 MTU 上运行,您将有多少开销。

希望这有帮助。

关于networking - 为什么 GRO 效率更高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47332232/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com