如何在 Ubuntu 18.04 中永久禁用 TSO 和 GSO

如何在 Ubuntu 18.04 中永久禁用 TSO 和 GSO

我正在将生产服务器从 Ubuntu 14.04 升级到 18.04,遇到了很多令人惊讶的变化。例如,我试图永久使用 ethtool 禁用 TSO 和 GSO,但找不到/etc/rc.local,或者/etc/network/interfaces在 14.04 中曾经存在并且也提到过在此链接中

我如何通过netplan这似乎是在 Ubuntu 18.04 中设置网络基础设施的全新方法?

有关的:如何使用 netplan 执行后续脚本

答案1

应该可以直接在 systemd 中执行此操作。

Netplan(根据您链接到的文档)将您输入的 yaml 配置渲染到配置文件中,然后将其提供给任何底层引擎,可能是 NetworkManager 或 systemd-networkd。它将这些文件放入适当的/run目录中。

手册systemd-link页有TCPSegmentationOffload 指令, 和一个用于 GenericSegmentationOffload

Systemd 认为 /etc/ 中的文件具有最高优先级(高于 /run/),那么应该工作是将一个 .link 单元文件放在 中/etc/systemd/network/,可能名为01-tso-and-gso.link,其内容如下:

[Match]
# Set a match condition appropriate for your use case
Name=*

[Link]
TCPSegmentationOffload=false
GenericSegmentationOffload=false

我没有测试过这个;我没有简单的方法来测试它;但我最近读了很多 systemd 文档,我很确定这是你需要的。请让我知道它是否适合你。

答案2

其实并不像@Wildcard说的那么简单。首先,他的Match部分有一个错误。应该是:

[Match]
# Set a match condition appropriate for your use case
OriginalName=*

[Link]
TCPSegmentationOffload=false
GenericSegmentationOffload=false

其次,如果你将其添加为01-tso-和-gso.link/etc/systemd/网络/它通常会弊大于利;] 这是因为 Match 规则将应用于所有接口,因此其他文件中定义的这些接口(在这种情况下是所有接口)的所有其他规则都将被忽略。这是因为:“第一个(按词汇顺序)链接文件与给定设备匹配的。请注意,系统附带一个默认文件 99-default.link。因此,任何用户提供的 .link 都应该具有词汇上更早的名称,以便完全考虑。"。因此,“好”的效果是,例如,99-default.link 文件中定义的接口 NamePolicy 不被考虑在内 - 您的接口名称在重新启动后会发生变化,这通常不是您想要的 ;]

因此,为了让事情顺利进行,正如您可能希望的那样,您应该:

  • 将 [Link] 部分规则放入影响接口的每个现有 .link 文件中。这些规则位于:/usr/lib/systemd/网络/运行/systemd/网络/etc/systemd/网络例如,Ubuntu 中/lib/systemd/网络
  • 将 [link] 部分规则放入默认的 .link 文件中:/lib/systemd/network/99-default.link(这是在 Ubuntu 18.04 中 - 不知道其他系统中的位置)

相关内容