检查 NIC 环形缓冲区:
# ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 256
RX Mini: 0
RX Jumbo: 0
TX: 256
可以将“RX/TX”设置为“预设最大值”中显示的限制,例如:
# ethtool -G eth0 rx 4096 rx 4096
问题是:默认情况下;,为什么这些设置得这么低(在我拥有的每台服务器中,它们都是 256)而不是更高的值,或者是它们的硬件最大能力?增加这些值有什么缺点吗(如果有,是什么?)?
答案1
首先,你设定的数字不字节正如许多人认为的那样,他们描述符(描述符大小取决于硬件)。因此,当您增加环长度时,您会请求在内核中为这些描述符分配更多内存。通常,您希望此内核内存位于 L1 缓存中,以便中断处理尽可能快。增加环大小会使这种情况发生的可能性降低,在某些情况下甚至完全不可能。
接下来是中断合并 - 通常,当您增加环形缓冲区大小时,NIC 将适当调整其低/高标记,并在缓冲更多数据时触发中断(这种情况不太常见)。因此,内核在中断处理期间处理这些大量数据所需的时间也会增加。
以上所有情况都会导致简单的桶效应 - 环越大,丢包概率越低,网络延迟越长。如果您通过 TCP 传输大型文件,这可能完全没问题,但如果您使用的是低延迟小数据包应用程序(例如游戏等),则可能完全不受欢迎。
您看到的默认数字是两者之间的合理权衡。