以太网桥性能低下

以太网桥性能低下

我有一台带有 2 个网卡的 Ubuntu 20.04 服务器,这两个网卡都是(独立)网桥的一部分,其中一个还处理 VLAN。它连接到托管交换机,最后连接到我的防火墙(OPNsense)上的中继端口。br0刚好桥接到我的主 LAN(无 VLAN),并且br1是带有标签 13 的 VLAN 的一部分。我还有另一个 VLAN(标签 2),它直接通过 使用的物理接口br1

现在,当我通过不同的界面运行速度测试(Ookla)时,会发生以下情况:

$ (speedtest -s 43267 -I br0; speedtest -s 43267 -I br1; speedtest -s 43267 -I vlan2) | grep -E '(Latency|Download|Upload|Packet Loss)'
    Latency:    10.83 ms   (2.03 ms jitter)
   Download:   136.67 Mbps (data used: 160.7 MB )
     Upload:    30.44 Mbps (data used: 15.2 MB )
Packet Loss:     0.0%

    Latency:    11.32 ms   (3.09 ms jitter)
   Download:   155.42 Mbps (data used: 183.3 MB )
     Upload:    30.37 Mbps (data used: 14.5 MB )
Packet Loss:     0.0%

    Latency:    11.91 ms   (9.06 ms jitter)
   Download:   294.56 Mbps (data used: 393.4 MB )
     Upload:    29.76 Mbps (data used: 13.4 MB )
Packet Loss:     0.0%

我之所以选择这个特定的服务器,是因为我一直能够从中获得一致的结果。我的 ISP 给我 300/30,而当使用接口时,vlan2我始终获得 290+ 的下载速度。但正如你所看到的,通过桥接的任何东西都只能获得一半。我知道 Ookla 的速度测试可能不算“好”的测试,但有时确实感觉 NIC 很慢,因为 SSH 进入盒子(通过br0)有时不是即时的。即便如此,为什么 Ookla 的测试会始终如一达到可用带宽的一半左右?这让我相信实际上网桥出了问题。另外别忘了,最后两个结果使用了相同的物理接口,所以这不是布线/硬件问题。

此外,iptablesebtables都设置为ACCEPT所有内容。我不确定是否ebtables正在使用,因为应该有 3 个默认表,但我只有filterlsmod也没有显示任何内容eb(我认为模块被调用了ebt还是什么?)。

相关部分来自lshw

  *-network
       description: Ethernet interface
       product: I211 Gigabit Network Connection
       vendor: Intel Corporation
       physical id: 0
       bus info: pci@0000:06:00.0
       logical name: enp6s0
       version: 03
       serial: 70:85:c2:31:6d:b1
       size: 1Gbit/s
       capacity: 1Gbit/s
       width: 32 bits
       clock: 33MHz
       capabilities: pm msi msix pciexpress bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=igb driverversion=5.6.0-k duplex=full firmware=0. 4-1 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
       resources: irq:17 memory:dc200000-dc21ffff ioport:e000(size=32) memory:dc220000-dc223fff

  *-network
       description: Ethernet interface
       product: Ethernet Connection (2) I219-V
       vendor: Intel Corporation
       physical id: 1f.6
       bus info: pci@0000:00:1f.6
       logical name: enp0s31f6
       version: 00
       serial: 70:85:c2:31:6d:b3
       size: 1Gbit/s
       capacity: 1Gbit/s
       width: 32 bits
       clock: 33MHz
       capabilities: pm msi bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=3.2.6-k duplex=full firmware=0.2-4 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
       resources: irq:144 memory:dc500000-dc51ffff

接口enp0s31f6由 所使用br0,因此enp6s0br1也是vlan13vlan2有一件事可能会进一步复杂化:NIC 使用完全不同的驱动程序(igbvs e1000e)和两个都有同样的问题。驱动程序固件似乎也正确加载了。当我检查时sysctl -a | grep -F .br1... | grep -F .vlan2所有值都是确切地一样。无论如何,我只做了一些 sysctl 调整:

# Reverse path fltering (0 = disabled, 1 = strict, 2 = loose)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.enp0s31f6.rp_filter = 1
net.ipv4.conf.br0.rp_filter = 1

# VLAN interfaces should do loose checking
net.ipv4.conf.enp6s0.rp_filter = 2
net.ipv4.conf.vlan2.rp_filter = 2
net.ipv4.conf.vlan13.rp_filter = 2
net.ipv4.conf.br1.rp_filter = 2

# Disable IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.enp0s31f6.disable_ipv6 = 1
net.ipv6.conf.enp6s0.disable_ipv6 = 1
net.ipv6.conf.br0.disable_ipv6 = 1
net.ipv6.conf.br1.disable_ipv6 = 1
net.ipv6.conf.vlan2.disable_ipv6 = 1
net.ipv6.conf.vlan13.disable_ipv6 = 1

最后,uname -pr5.4.0-113-generic x86_64

我确实注意到在使用时enp6s0使用了mq调度程序/规则。不过,切换它们并没有改变任何事情,而且由于它们是不同的驱动程序,我想看到不同的调度程序并不意外。我还发现了一些关于桥梁和enp0s31f6fq_codele1000e驱动程序,但由于我也遇到了伊格拜尔我认为这些与这里的问题无关。当此服务器在 Ubuntu 18.04 上使用相同的网络设置时,我绝对可以饱和我的 ISP,当时他们只给我 250/25,而测试通常会显示 240+。所以我想要么是桥接处理方式发生了变化,要么是某些系统参数的默认设置发生了变化,并且与我的设置不兼容,要么是驱动程序中确实存在(另一个)错误。

顺便说一下,我的接口由 networkd(通过 netplan)管理。我会添加 YAML 文件,但我认为描述非常清楚,而且已经很长了。:> 当然,如果需要,我可以随时编辑它们。

我的桥梁性能相对较差的原因可能是什么?

答案1

我遇到了类似的问题,我发现在进行速度测试等时,通过桥接的 ping 会失败。

将 mtu 提升到 9000 对我来说解决了问题,现在 ping 延迟几乎没有变化,而 speedtest 以 500mbps 的速度下载,请注意,在我的情况下,我只修改了 mtu br1,这是我的内部接口,br0 连接到的路由器仅使用 1500 的 mtu,提高接口 mtu 会导致性能下降。

查看桥接接口的 mtu

bridge link

我的 netplan /etc/netplan/xxxxx.yml

# This is the network config written by 'subiquity'
network:
  ethernets:
    ens160:
      mtu:  9000
      dhcp4:  no
    ens192:
      mtu:  1500
      dhcp4:  no
    ens224:
      mtu:  1500
      dhcp4:  no
    ens256:
      mtu:  9000
      dhcp4: no
  bridges:
    br0:
      dhcp4:  true
      interfaces:
        -  ens192
        -  ens224
    br1:
      dhcp4:  true
      interfaces:
        -  ens160
        -  ens256
  version: 2

我希望这有帮助

相关内容