为什么每个NIC有5个rx队列

在我的办公室服务器上, cat /proc/interrupts的输出显示一个tx队列和5个rx队列。 这是由于NIC硬件function还是可以在每个NIC的linux中configuration多个接收环形缓冲区? 也不会有5 rx队列,因为tcp必须轮询5个队列才能得到答案,所以即使5个队列由5个不同的CPU完成,所有5个rx队列具有不同的CPU关联性,也会增加延迟。 我想指出,网卡支持10GE,但networking只支持1Gb带宽。

多个队列的使用通过允许多个核心同时有效地轮询网卡来提供性能改进。

也不会有5 rx队列,因为tcp必须轮询5个队列才能得到答案,所以即使5个队列由5个不同的CPU完成,所有5个rx队列具有不同的CPU关联性,也会增加延迟。

延时会好很多,因为每个数据包平均只有队列中数据包的1/5。

如果你只有一个队列,你只能用一个内核有效地从它中取出数据包。 如果这个核心继续处理这个数据包,那么会导致可怕的瓶颈,因为没有任何东西会从NIC中拉出下一个数据包。 如果你closures数据包,你又会遇到可怕的瓶颈,因为将数据从一个内核移交给另一个会导致大量的caching未命中。 最有效的设置是让数据包从多个队列stream入多个核心,然后并行调度这些数据包。