据我所知,有一个网络接口卡的环形缓冲区,如果这样的缓冲区溢出,输入的数据包将被丢弃,除非内核耗尽缓冲区中的数据包和空闲空间。
我的问题是如何检测Linux上的这种NIC环缓冲区溢出?
如何在Linux上模拟这种环形缓冲区溢出?如有必要,可以接受/ proc的修改。
于2016年2月2日更新:
我接受John Zwinck的解释作为答案,如果有人知道模拟环形缓冲区溢出,请提前告知我们,谢谢。
答案 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 10000
和sudo ethtool -G eth0 rx 48
填充缓冲区。第一个命令设置在数据包到达后有多少usecs延迟RX中断。第二条命令设置RX环形缓冲区的大小。然后我打开了一些网站并观看了一些视频,环形缓冲区已满,然后丢弃的数据包计数增加。
似乎环形缓冲区的最小大小是48,无论我将其设置为多小,ethtool -g eth0
始终显示当前缓冲区大小是48。