使用 ethtool 管理 NIC 环形缓冲区大小很简单,例如:
ethtool -G eth0 rx 4096 tx 4096
(或替换eth0
为您需要管理的任何界面。)
现场直播很容易。
麻烦的是,当您在属于绑定接口的每个从属接口上执行此操作时,您会弄乱绑定。(聚合器 ID 在许多情况下不会像以前那样匹配。) 编辑:我了解到这不是预期的行为。(当我了解更多关于我观察到的案例中发生这种情况的原因时,我可能会更新。)
ETHTOOL_OPTS
在 RHEL 7 中,您可以通过将值设置/etc/sysconfig/network-scripts/ifcfg-eth0
为(例如)ETHTOOL_OPTS="-G ${DEVICE} rx 4096 tx 4096"
(根据访问 Red Hat 文章)来设置在引导时出现的环形缓冲区大小。(警告:我没有测试过这实际上避免了上面提到的聚合器 ID 不匹配。)
但是,对于 Ubuntu 18.04,没有这么明显的容易查看的地方。
我已经深入研究了 netplan 文档、systemd 网络文档和 networkd-dispatcher。
我的一位同事提出了一个使用 networkd-dispatcher 的解决方案,该解决方案似乎可行,但尚不清楚是否仍可能涉及竞争条件,以至于它只是碰巧起作用,而不是保证在接口绑定建立。我将在下面发布(稍后),但我不知道这是否是正确的答案。(此外,任何 systemd 文档中都没有提到它。)
所以问题是:
在绑定这些接口之前,在启动时管理以太网接口的环形缓冲区大小的 systemd 本机方法是什么?
这是适用于 Ubuntu 18 的 udev 规则:
把它放进去
/etc/udev/rules.d/59-net.ring.rules
,它会在启动过程的早期生效。设置参数的 systemd 本机方法是使用
.link
文件(请参阅systemd.link 手册页,但是它目前没有设置环形缓冲区参数的方法。所以 AFAIK 没有本机 systemd 方法可以做到这一点。这个当带有通配符功能请求RxBufferSize
的新 systemd 与和TxBufferSize
选项一起发布时,将发生变化。如果您实际上是
/etc/network/interfaces
用来配置的,那么只需在pre-up
那里使用一个命令。这将是我的偏好,而不是打扰 systemd-networkd。您可以设置一些 udev 规则以在设备出现时匹配它,并在那里运行 ethtool。这应该在 systemd 被告知设备之前运行(并且在它对它做任何事情之前)。
您可以设置一个 systemd 服务(键入 oneshot,只需 exec ethtool)在任何服务设置您的绑定设备之前和设备出现之后运行,然后使用它。systemd
.device
为以太网设备制作单元;用于systemctl list-units | grep sys-subsystem-net
找到正确的(这样您就可以让您的服务成为想要/之后的服务)。