如何在Linux中更改networking接口的接收队列长度?

我有一台运行Linux(内核2.6.18)的服务器,它将大量丢弃传入的networking数据包。 我认为这是因为这个接口的接收队列的长度太小(默认是1000)的痛苦。 我想通过修改/proc/sys/net/core/netdev_max_backlog (到3000)来扩大这个队列。 但似乎没有工作。 我GOOGLE了一下,发现有人说这个值只适用于非NAPI设备,我不认为我的设备是NAPI自内核2.4.20以来被引入。 我不知道这是否是真的,并转向安装在该服务器上的内核文档,但该文档自从内核2.2以来没有更新过。

所以我想知道这是否属实,如果是这样,我怎样才能改变一个NAPI设备的队列长度?

谢谢。 丰

我终于发现接口丢包,因为驱动程序configuration了一个太小的Rx描述符大小,在处理中断合并时,会决定在发送内核中断之前,驱动程序可以保存多less个数据包。 如果该值(用ethtool -g <interface> )太小,则在引发中断之前将丢弃数据包。 在用ethtool -G <interface> Rx <a some big value> ,从此没有出现粪便。

谢谢大家。

ethtool -g的输出中,您将获得NIC的“预设最大值”和“当前硬件设置”。 应始终build议将您的设置设置为允许的最大值以避免数据包丢失,但更具体地说:rx错误或超限(例如发生突发时可能发生)。

即使在某些情况下,驱动程序更新也会增加NIC的“预设最大值”,这一切取决于型号。