为什么每个网卡有 5 个 rx 队列

为什么每个网卡有 5 个 rx 队列

在我的办公室服务器上,输出cat /proc/interrupts显示一个 tx 队列和 5 个 rx 队列。这是由于 NIC 硬件功能还是您可以在 Linux 中为每个 NIC 配置多个接收环形缓冲区?此外,5 个 rx 队列不会增加延迟,因为 tcp 必须轮询 5 个队列才能获得答案,即使 5 个队列的填充是由 5 个不同的 CPU 完成的,因为所有 5 个 rx 队列都有不同的 CPU 亲和性。我想指出的是,NIC 支持 10GE,但网络仅支持 1Gb 带宽。

答案1

使用多个队列可以让多个核心同时高效地轮询网卡,从而提高性能。

另外,5 个 rx 队列也不会增加延迟,因为 tcp 必须轮询 5 个队列才能获得答案,尽管 5 个队列的填充是由 5 个不同的 CPU 完成的,因为所有 5 个 rx 队列都有不同的 CPU 亲和性。

延迟将是很多更好,因为每个数据包在队列中平均只有 1/5 的数据包在它前面。

如果您只有一个队列,那么您只能使用单个核心有效地从队列中提取数据包。如果该核心继续处理数据包,则会导致严重的瓶颈,因为没有任何东西可以从 NIC 中提取下一个数据包。如果您将数据包移交给另一个核心,那么您将再次遇到严重的瓶颈,因为将数据从一个核心移交给另一个核心会导致大量缓存未命中。最有效的设置是让数据包从多个队列流入多个核心,然后并行调度这些数据包。

相关内容