嗨 OVS 网络专家,
我是一名开发人员,正在测试一个新的客户端/服务器应用程序,有一天它必须通过 OVS 网络运行。一位同事从备用 Ubuntu 主机(版本 16.04.2 LTS)为我构建了一个工作测试平台。我的测试客户端和服务器机器连接到 Ubuntu,在主机内,它们的流量通过 OVS 网桥运行。(OVS 版本 2.12.1,DPDK 版本 18.11.2)您可以这样考虑测试平台:
我对 Ubuntu 和 OVS 有所了解,但我的同事在 Ubuntu 的物理接口(eno1和eno2)连接到 OVS 桥上的逻辑接口( dpdk1和dpdk2 )的地方做了一些事情,我记得他告诉我他会“在物理接口上安装 DPDK 驱动程序。” 我的笔记告诉我他使用了这些命令:
/usr/local/share/dpdk/tools/dpdk_nic_bind.py -u 01:00.0
/usr/local/share/dpdk/tools/dpdk_nic_bind.py -u 01:00.1
/usr/local/share/dpdk/tools/dpdk_nic_bind.py -b igb_uio 01:00.1
/usr/local/share/dpdk/tools/dpdk_nic_bind.py -b igb_uio 01:00.0
ovs-vsctl add-port OVS_Bridge dpdk1 -- set Interface dpdk1 type=dpdk options:dpdk-devargs=0000:01:00.0
ovs-vsctl add-port OVS_Bridge dpdk2 -- set Interface dpdk2 type=dpdk options:dpdk-devargs=0000:01:00.1
一切都很好。我的客户端和服务器主机能够很好地相互交谈。
但后来,我的同事离开了公司。
在那之后,我得到了一个新的测试要求,我的客户端和服务器必须通过发送巨型数据包进行通信,即大于 1518 字节的数据包。我可以在我的测试主机上设置数据包大小,没问题。但是当他们通过 Ubuntu 发送流量时,流量会分成 1518 字节。通过在 Ubuntu 中使用虚拟主机,我知道问题不在于 OVS 网桥。我猜瓶颈是两个物理接口。
默认情况下,Ubuntu 接口的 MTU 为 1500 字节。当我的同事为我设置这个环境时,我们从未玩过 MTU,所以我认为eno1和eno2的 MTU 仍然为 1500。但不幸的是,这些接口不再出现在ifconfig
输出中。
如果这些接口正在运行 DPDK 驱动程序,有谁知道如何检查当前的 MTU?如果是这样,我可以将该 MTU 设置为 9000 吗?谢谢!
@heynnema 的更新...
me@linux:~# tracepath 168.161.114.120
1?: [LOCALHOST] pmtu 1500
1: 168.161.114.100 2999.544ms !H
Resume: pmtu 1500
root@upce-superl1:~#
@heynnema 的第二次更新:
“ovs-vsctl list-ports PDH_bridge2”被删减以显示我关心的两个端口。“sudo lshw -C bridge”完全没有删节,因为我不知道这里有什么相关的。
然而......我相当肯定OVS桥不是瓶颈。当我启动两个虚拟机并使用 iPerf 在它们之间运行流量时,大于 1500 字节的数据包没有问题。但是,当我通过连接到 OVS 网桥端口 dpdk1 和 dpdk2 的两个物理接口运行流量时,我的大数据包碎片。我希望找到一种方法在物理接口绑定到 DPDK 驱动程序之后在物理接口上设置 MTU。谢谢你。
met@linux:~# ovs-vsctl list-ports PDH_bridge2
dpdk1
dpdk2
met@linux:~#
met@linux:~#
met@linux:~#
met@linux:~# sudo lshw -C bridge
*-pci:0
description: Host bridge
product: Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D DMI2
vendor: Intel Corporation
physical id: 100
bus info: pci@0000:00:00.0
version: 01
width: 32 bits
clock: 33MHz
*-pci:0
description: PCI bridge
product: Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 1
vendor: Intel Corporation
physical id: 1
bus info: pci@0000:00:01.0
version: 01
width: 32 bits
clock: 33MHz
capabilities: pci msi pciexpress pm normal_decode bus_master cap_list
configuration: driver=pcieport
resources: irq:25 ioport:6000(size=4096) memory:90000000-903fffff ioport:c7a00000(size=5242880)
*-pci:1
description: PCI bridge
product: Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 2
vendor: Intel Corporation
physical id: 2
bus info: pci@0000:00:02.0
version: 01
width: 32 bits
clock: 33MHz
capabilities: pci msi pciexpress pm normal_decode bus_master cap_list
configuration: driver=pcieport
resources: irq:27 ioport:5000(size=4096) memory:90400000-90afffff
*-pci:2
description: PCI bridge
product: Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 3
vendor: Intel Corporation
physical id: 3
bus info: pci@0000:00:03.0
version: 01
width: 32 bits
clock: 33MHz
capabilities: pci msi pciexpress pm normal_decode bus_master cap_list
configuration: driver=pcieport
resources: irq:29
*-pci:3
description: PCI bridge
product: C610/X99 series chipset PCI Express Root Port #1
vendor: Intel Corporation
physical id: 1c
bus info: pci@0000:00:1c.0
version: d5
width: 32 bits
clock: 33MHz
capabilities: pci pciexpress msi pm normal_decode bus_master cap_list
configuration: driver=pcieport
resources: irq:30
*-pci:4
description: PCI bridge
product: C610/X99 series chipset PCI Express Root Port #5
vendor: Intel Corporation
physical id: 1c.4
bus info: pci@0000:00:1c.4
version: d5
width: 32 bits
clock: 33MHz
capabilities: pci pciexpress msi pm normal_decode bus_master cap_list
configuration: driver=pcieport
resources: irq:31 ioport:4000(size=4096) memory:c6000000-c70fffff
*-pci
description: PCI bridge
product: AST1150 PCI-to-PCI Bridge
vendor: ASPEED Technology, Inc.
physical id: 0
bus info: pci@0000:05:00.0
version: 03
width: 32 bits
clock: 33MHz
capabilities: pci msi pm pciexpress normal_decode bus_master cap_list
resources: ioport:4000(size=4096) memory:c6000000-c70fffff
*-isa
description: ISA bridge
product: C610/X99 series chipset LPC Controller
vendor: Intel Corporation
physical id: 1f
bus info: pci@0000:00:1f.0
version: 05
width: 32 bits
clock: 33MHz
capabilities: isa bus_master cap_list
configuration: driver=lpc_ich latency=0
resources: irq:0
*-pci:1
description: PCI bridge
product: Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D PCI Express Root Port 3
vendor: Intel Corporation
physical id: 3
bus info: pci@0000:80:03.0
version: 01
width: 32 bits
clock: 33MHz
capabilities: pci msi pciexpress pm normal_decode bus_master cap_list
configuration: driver=pcieport
resources: irq:33 memory:fba00000-fbefffff ioport:c8000000(size=1048576)
met@linux:~#
met@linux:~#
首先,阅读
man ip;man ip-link
您可以通过以下方式查看您的 MTU 值:
上面显示了系统知道的所有接口的 MTU。
并且您可以使用 更改 MTU
ip link set
,如man
页面中所述。如果您的界面未显示在
ip link
命令中,您可以通过
sudo journalctl -b 0
.翻阅此页面以了解您的系统如何(错误地)处理接口。
这不是一个简洁的答案,但您可能需要的所有信息都在这里......
来源:http ://docs.openvswitch.org/en/latest/topics/dpdk/jumbo-frames/
另请阅读:https ://software.intel.com/en-us/articles/jumbo-frames-in-open-vswitch-with-dpdk
备忘单:https ://therandomsecurityguy.com/openvswitch-cheat-sheet/
巨型帧
2.6.0 版中的新功能。
默认情况下,DPDK 端口配置有标准以太网 MTU (1500B)。要为 DPDK 端口启用巨型帧支持,请将接口的 mtu_request 属性更改为足够大的值。例如,要添加 MTU 为 9000 的 DPDK 物理端口,请运行:
同样,要将现有端口的 MTU 更改为 6200,请运行:
需要一些额外的配置来利用带有 vHost 用户端口的巨型帧:
必须为 vHost 用户端口启用可合并缓冲区,如下面的 QEMU 命令行片段所示:
在 virtio 设备绑定到来宾环境中的 Linux 内核驱动程序(即接口未绑定到来宾 DPDK 驱动程序)的情况下,这些逻辑网络接口的 MTU 也必须增加到足够大的值。这避免了访客接收到的巨型帧的分段。请注意,“MTU”仅指 IP 数据包的长度,而不是整个帧的长度。
要计算标准 IPv4 帧的准确 MTU,请从支持的最大帧大小中减去 L2 报头和 CRC 长度(即 18B)。因此,要为 9018B 巨型帧设置 MTU:
当启用巨型帧时,DPDK 端口的 mbuf 段的大小会增加,这样特定大小的完整巨型帧可以容纳在单个 mbuf 段中。
巨型帧支持已针对 9728B 帧进行验证,这是 Fortville NIC 使用 DPDK i40e 驱动程序支持的最大帧大小,但可能支持更大的帧和其他 DPDK NIC 驱动程序。这些案例对于仅涉及东西向流量的用例很常见。
更新#1:
你可能需要类似的东西......但不能保证,因为我不是任何类型的 OVS 专家......