如何在Linux上模拟和检测NIC环缓冲区溢出

时间:2015-01-05 05:40:27

标签: linux networking

据我所知,有一个网络接口卡的环形缓冲区,如果这样的缓冲区溢出,输入的数据包将被丢弃,除非内核耗尽缓冲区中的数据包和空闲空间。

我的问题是如何检测Linux上的这种NIC环缓冲区溢出?

如何在Linux上模拟这种环形缓冲区溢出?如有必要,可以接受/ proc的修改。

于2016年2月2日更新:

我接受John Zwinck的解释作为答案,如果有人知道模拟环形缓冲区溢出,请提前告知我们,谢谢。

3 个答案:

答案 0 :(得分:1)

我认为你不能(便携)检测或模拟这个。可能有一些方法可以使用特定的NIC驱动程序来执行此操作,但您必须准确指定您正在使用的内容,并且我怀疑对于消费级产品而言它是不可能的。您可以使用ethtool -g来衡量和调整环形缓冲区的大小,具体说明如下:http://www.scottalanmiller.com/linux/2011/06/20/working-with-nic-ring-buffers/

答案 1 :(得分:0)

1)您可以通过检查NIC统计信息来检测缓冲区溢出:ethtool -s eno1。输出中会有很多信息。字段的名称是驱动程序所依赖的。例如在tg3驱动程序中提交" rx_discards" - 是你要找的人。它存储因完全缓冲而丢弃的数据包数量。

2)当我需要丢弃数据包时,我将缓冲区大小设置为非常小的值(例如2):ethtool -G eno1 rx 2。并使用netperf加载网卡。

答案 2 :(得分:0)

我试图用sudo ethtool -C eth0 rx-usecs 10000sudo ethtool -G eth0 rx 48填充缓冲区。第一个命令设置在数据包到达后有多少usecs延迟RX中断。第二条命令设置RX环形缓冲区的大小。然后我打开了一些网站并观看了一些视频,环形缓冲区已满,然后丢弃的数据包计数增加。

似乎环形缓冲区的最小大小是48,无论我将其设置为多小,ethtool -g eth0始终显示当前缓冲区大小是48。