为什么 NIC 环参数没有预设为其硬件最大功能?

为什么 NIC 环参数没有预设为其硬件最大功能?

检查 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 传输大型文件,这可能完全没问题,但如果您使用的是低延迟小数据包应用程序(例如游戏等),则可能完全不受欢迎。

您看到的默认数字是两者之间的合理权衡。

相关内容