我正在尝试使用 ethtool 更改我的 NIC(Intel 10G NIC)设置,但似乎无法做到这一点。
我试过
ethtool -G xge0 rx 32768 tx 32768
然后尝试使用以下方法查看设置是否已更改
ethtool -g xge0
但我看到了输出
Ring parameters for xge0:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
为何我无法更改设置?
答案1
控制器只能处理每个环中的 4,096 个环条目。NIC 实际上需要每个环缓冲区中每个可用插槽的 DMA 地址。它在每个方向上只有 4,096 个插槽。(而且无论如何,更多也无济于事。)
戒指的工作原理如下(我仅介绍接收,因为它更简单,但概念是一样的):
驱动程序在 DMAable 主内存中分配一定数量的接收缓冲区。
驱动程序告诉 NIC 这些缓冲区的基地址。
当 NIC 接收到数据包时,它会通过 DMA 将其放入这些缓冲区中。
驱动程序询问 NIC 已将多少个数据包通过 DMA 传输到主内存。
驱动程序处理这些数据包。
驱动程序分配新的接收缓冲区来重新填充环。
驱动程序向 NIC 注册新缓冲区的基地址。
因此 NIC 必须知道环中每个缓冲区的物理地址。此 NIC 在每个方向上只有 4,096 个插槽用于这些物理地址。