嗨,OVS 网络专家,
我是一名开发人员,正在测试一个新的客户端/服务器应用程序,该应用程序有一天必须通过 OVS 网络运行。一位同事从备用 Ubuntu 主机(版本 16.04.2 LTS)为我构建了一个工作测试平台。我的测试客户端和服务器机器连接到 Ubuntu,并且在主机内,它们的流量通过 OVS 桥运行。(OVS ver 2.12.1,DPDK ver 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 桥”完全没有删节,因为我不知道这里有什么相关。
但是......我相当确定OVS桥不是瓶颈。当我启动两个 VM 并使用 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:~#
这不是一个简洁的答案,但您可能需要的所有信息都在这里......
来源: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 物理端口,请运行:
$ ovs-vsctl add-port br0 dpdk-p0 -- set Interface dpdk-p0 type=dpdk \
options:dpdk-devargs=0000:01:00.0 mtu_request=9000
同样,要将现有端口的 MTU 更改为 6200,请运行:
$ ovs-vsctl set Interface dpdk-p0 mtu_request=6200
需要一些额外的配置来利用具有 vHost 用户端口的巨型帧:
必须为 vHost 用户端口启用可合并缓冲区,如下面的 QEMU 命令行片段所示:
-netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce \
-device virtio-net-pci,mac=00:00:00:00:00:01,netdev=mynet1,mrg_rxbuf=on
如果 virtio 设备在来宾环境中绑定到 Linux 内核驱动程序(即接口未绑定到来宾中的 DPDK 驱动程序),则这些逻辑网络接口的 MTU 也必须增加到足够大的值。这避免了在来宾中接收的巨型帧的分段。请注意,“MTU”仅指 IP 数据包的长度,而不是整个帧的长度。
要计算标准 IPv4 帧的准确 MTU,请从支持的最大帧大小中减去 L2 标头和 CRC 长度(即 18B)。因此,要为 9018B 巨型帧设置 MTU:
$ ip link set eth1 mtu 9000
当启用 Jumbo Frames 时,DPDK 端口的 mbuf 段的大小会增加,以便特定大小的完整 Jumbo Frame 可以容纳在单个 mbuf 段中。
Jumbo 帧支持已针对 9728B 帧进行了验证,这是 Fortville NIC 使用 DPDK i40e 驱动程序支持的最大帧大小,但可能支持更大的帧和其他 DPDK NIC 驱动程序。这些情况对于仅涉及东西向流量的用例很常见。
更新 #1:
你可能需要类似的东西......不过不能保证,因为我不是任何类型的OVS专家......
sudo ovs-vsctl set Interface dpdk1 mtu_request=9000
sudo ovs-vsctl set Interface dpdk2 mtu_request=9000
sudo ip link set en01 mtu 9000
sudo ip link set en02 mtu 9000
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句