OVS-DOCA 硬件加速
OVS-DOCA 基于 NVIDIA 的网络 API 设计,以保留相同的 OpenFlow、CLI 和数据接口(例如,vdpa、VF 直通),以及数据路径卸载 API,也称为 OVS-DPDK 和 OVS-Kernel。虽然所有 OVS 版本都使用流卸载进行硬件加速,但由于其架构和 DOCA 库的使用,OVS-DOCA 模式在其中提供了最有效的性能和功能集,从而最大限度地利用了 NVIDIA 网卡和 DPU。

以下小节提供了启动/部署 OVS DOCA 的必要步骤。
要配置 OVS DOCA HW 卸载
解绑 VF
echo 0000:04:00.2 > /sys/bus/pci/drivers/mlx5_core/unbind echo 0000:04:00.3 > /sys/bus/pci/drivers/mlx5_core/unbind
注意带有附加 VF 的虚拟机必须关闭电源才能解绑 VF。
将 PF 设备上的 e-switch 模式从
legacy
更改为switchdev
(确保所有 VF 都已解绑)echo switchdev > /sys/class/net/enp4s0f0/compat/devlink/mode
注意此命令还在主机操作系统中创建 VF representor 网络设备。
要恢复到 SR-IOV
legacy
模式echo legacy > /sys/class/net/enp4s0f0/compat/devlink/mode
绑定 VF
echo 0000:04:00.2 > /sys/bus/pci/drivers/mlx5_core/bind echo 0000:04:00.3 > /sys/bus/pci/drivers/mlx5_core/bind
配置巨页
mkdir -p /hugepages mount -t hugetlbfs hugetlbfs /hugepages echo 4096 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
运行 Open vSwitch 服务
systemctl start openvswitch
启用 DOCA 模式和硬件卸载(默认禁用)
ovs-vsctl --no-wait set Open_vSwitch . other_config:doca-init=true ovs-vsctl set Open_vSwitch . other_config:hw-offload=true
重启 Open vSwitch 服务。
systemctl restart openvswitch
信息此步骤是 HW 卸载更改生效所必需的。
创建 OVS-DOCA 网桥
ovs-vsctl --no-wait add-br br0-ovs -- set bridge br0-ovs datapath_type=netdev
将 PF 添加到 OVS
ovs-vsctl add-port br0-ovs enp4s0f0 -- set Interface enp4s0f0 type=dpdk
将 representor 添加到 OVS
ovs-vsctl add-port br0-ovs enp4s0f0_0 -- set Interface enp4s0f0_0 type=dpdk
信息通过提供 dpdk-devargs 来添加 DPDK 端口而不使用相关 netdev 的传统选项仍然存在
添加 PF 端口
ovs-vsctl add-port br0-ovs pf -- set Interface pf type=dpdk options:dpdk-devargs=
0000
:88
:00.0
添加 VF representor 端口
ovs-vsctl add-port br0-ovs representor -- set Interface representor type=dpdk options:dpdk-devargs=
0000
:88
:00.0
,representor=[0
]添加 SF representor 端口
ovs-vsctl add-port br0-ovs representor -- set Interface representor type=dpdk options:dpdk-devargs=
0000
:88
:00.0
,representor=sf[0
]添加 BlueField 主机 PF representor 端口
ovs-vsctl add-port br0-ovs hpf -- set Interface hpf type=dpdk options:dpdk-devargs=
0000
:88
:00.0
,representor=[65535
]
可选配置
要设置端口 MTU,请运行
ovs-vsctl set interface enp4s0f0 mtu_request=9000
注意OVS 重启是更改生效所必需的。
要设置 VF/SF MAC,请运行
ovs-vsctl add-port br0-ovs enp4s0f0 -- set Interface enp4s0f0 type=dpdk options:dpdk-vf-mac=00:11:22:33:44:55
注意解绑和重新绑定 VF/SF 是更改生效所必需的。
设置默认数据路径
通过配置默认数据路径类型可以简化 OVS 命令,这最大限度地减少了重复配置,并简化了硬件加速部署的 OVS 设置过程。
要设置默认数据路径类型,请使用以下命令
ovs-vsctl set Open_vSwitch . other_config:default-datapath-type=<type>
例如,要将默认数据路径类型设置为 netdev
ovs-vsctl set Open_vSwitch . other_config:default-datapath-type=netdev
此配置允许创建网桥和接口,而无需为每个命令显式指定数据路径类型。例如
ovs-vsctl --no-wait add-br br0-ovs
ovs-vsctl add-port br0-ovs enp4s0f0
这等效于以下命令,其中显式设置了数据路径类型
ovs-vsctl --no-wait add-br br0-ovs -- set bridge br0-ovs datapath_type=netdev
ovs-vsctl add-port br0-ovs enp4s0f0 -- set Interface enp4s0f0 type=dpdk
如果指定了不受支持的数据路径类型,OVS 将自动回退到默认的“system”类型。
OVS-DOCA 与 OVS-DPDK 共享其大部分结构。为了从 DOCA 卸载设计中受益,用户空间数据路径和端口的某些行为被修改。
Eswitch 依赖性
在 switchdev
模式下配置,物理端口和所有支持的功能共享一个通用域来执行卸载的流,即 eswitch
。
同一 eswitch 上的所有端口都依赖于其物理功能。如果此主物理功能被停用(例如,从 OVS 中移除或其链路关闭),则依赖端口也将被禁用。
预分配的卸载表
为了提供最高的插入速度,DOCA 卸载预先分配卸载结构(条目和容器)。
因此,在启动 vSwitch 守护程序时,卸载会配置为合理的默认值。如果需要不同数量的卸载,则可以使用特定于 OVS-DOCA 的配置条目,并在下一节中进行描述。
不支持 CT-CT-NAT
OVS-kernel 和 OVS-DPDK 中可以配置的特殊 ct-ct-nat 模式不受 OVS-DOCA 支持。
以下配置对于 OVS-DOCA 模式特别有用或特定。
完整的 OVS vSwitch 配置列表记录在 man ovs-vswitchd.conf.db
中。
other_config
下表提供了 other_config
配置,这些配置是 vSwitch 全局的(非详尽列表,更多信息请查看手册页)
配置 | 描述 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 借助 PMD 多线程支持,如果至少有一个来自该 NUMA 节点的 DPDK 接口添加到 OVS,则 OVS 默认情况下为每个 NUMA 节点创建一个 PMD 线程。但是,在存在多个端口/rxqs 产生流量的情况下,可以通过创建在单独内核上运行的多个 PMD 线程来提高性能。这些 PMD 线程可以通过各自负责不同的端口/rxqs 来共享工作负载。端口/rxqs 到 PMD 线程的分配是自动完成的。 掩码中的设置位表示创建了一个 PMD 线程并将其绑定到相应的 CPU 内核。例如,要在内核 1 和 2 上运行 PMD 线程,请运行
|
netdev-dpdk
下表提供了 netdev-dpdk
配置,这些配置仅用户空间(DOCA 或 DPDK)netdev 支持(非详尽列表,更多信息请查看手册页)
配置 | 描述 |
|
|
用户空间而不是基于内核的 Open vSwitch 中的 vSwitch 需要一个额外的网桥。此网桥的目的是允许使用内核网络堆栈进行路由和 ARP 解析。
数据路径必须查找路由表和 ARP 表,以准备隧道标头并将数据传输到输出端口。
VXLAN 封装/解封装卸载配置通过以下方式完成
PF 在
0000:03:00.0
PCIe 和 MAC98:03:9b:cc:21:e8
上本地 IP
56.56.67.1
–br-phy
接口配置为此 IP远程 IP
56.56.68.1
要配置 OVS DOCA VXLAN
创建
br-phy
网桥ovs-vsctl add-br br-phy -- set Bridge br-phy datapath_type=netdev -- br-set-external-id br-phy bridge-id br-phy -- set bridge br-phy fail-mode=standalone other_config:hwaddr=98:03:9b:cc:21:e8
将 PF 接口附加到
br-phy
网桥ovs-vsctl add-port br-phy enp4s0f0 -- set Interface enp4s0f0 type=dpdk
将 IP 配置到网桥
ip addr add 56.56.67.1/24 dev br-phy
创建
br-ovs
网桥ovs-vsctl add-br br-ovs -- set Bridge br-ovs datapath_type=netdev -- br-set-external-id br-ovs bridge-id br-ovs -- set bridge br-ovs fail-mode=standalone
将 representor 附加到
br-ovs
ovs-vsctl add-port br-ovs enp4s0f0_0 -- set Interface enp4s0f0_0 type=dpdk
为 VXLAN 隧道添加端口
ovs-vsctl add-port br-ovs vxlan0 -- set interface vxlan0 type=vxlan options:local_ip=56.56.67.1 options:remote_ip=56.56.68.1 options:key=45 options:dst_port=4789
VXLAN GBP 扩展
VXLAN 基于组的策略 (GBP) 模型概述了一个以应用程序为中心的策略框架,该框架指定应用程序的连接要求,而与网络的物理布局无关。
为 VXLAN 端口设置 GBP 扩展允许按流匹配和设置 GBP ID。要在首次添加端口 vxlan0
时启用 GBP 扩展
ovs-vsctl add-port br-int vxlan0 -- set interface vxlan0 type=vxlan options:key=30 options:remote_ip=10.0.30.1 options:exts=gbp
也可以为现有的 VXLAN 端口启用 GBP 扩展
ovs-vsctl set interface vxlan1 options:exts=gbp
此方法有一个限制,即它在 OVS vswitchd
服务重启后才生效。在有多个 VXLAN 端口的情况下,它们的所有端口选项都必须共享相同的 GBP 扩展配置。不支持某些 VXLAN 端口启用 GBP 扩展而其他端口禁用的混合配置。
启用 GBP 扩展后,可以卸载以下匹配 GBP ID 32 或在操作中设置 GBP ID 64 的 OpenFlow 规则
ovs-ofctl add-flow br-int table=0,priority=100,in_port=vxlan0,tun_gbp_id=32 actions=output:pf0vf0
ovs-ofctl add-flow br-int table=0,priority=100,in_port=pf0vf0 actions=load:64->NXM_NX_TUN_GBP_ID[],output:vxlan0
VF-隧道配置
为了有效地卸载底层流量,直接在网桥端口上配置底层 IP 是不够的。相反,应分配专用的 VF 或 SF,并将其 representor 添加到 br-phy
网桥。此设置允许正确卸载底层流量。
要将 representor 添加到网桥,请使用以下命令
ovs-vsctl add-port br-phy <REP> -- set interface <REP> type=dpdk
直接在 VF 或 SF 设备上配置底层 IP 地址。
限制
<REP>
指的是 representor 的 Linux 接口名称VF 或 SF 必须在将 representor 附加到 OVS 之前绑定到其驱动程序
VF 或 SF 必须与 OVS 位于同一命名空间中
底层 IP 地址应在 representor 附加到 OVS 后配置。可以在配置底层 IP 的情况下重启 OVS。
连接跟踪通过记录当前打开的连接来实现有状态的数据包处理。
利用连接跟踪的 OVS 流可以通过卸载已建立的连接,使用高级网卡进行加速。
要查看卸载统计信息,请运行
ovs-appctl dpctl/offload-stats-show
要配置 OVS-DOCA SR-IOV VF LAG
在网卡上启用 SR-IOV
// It is recommended to query the parameters first to determine if a change is needed, to save potentially unnecessary reboot. mst start mlxconfig -d <mst device> -y set PF_NUM_OF_VF_VALID=0 SRIOV_EN=1 NUM_OF_VFS=8
注意如果配置确实发生了更改,请执行 BlueField 系统重启,以使
mlxconfig
设置生效。为了能够在 VF/SF 存在的情况下移动到 VF LAG 模式,请在 BlueField Arm OS 或主机上为 ConnectX 设置 nvconig 参数
LAG_RESOURCE_ALLOCATION=1
mst start mlxconfig -d /dev/mst/mt*conf0 -y s LAG_RESOURCE_ALLOCATION=1
为每个端口分配所需的 VF 数量
echo $n > /sys/class/net/<net name>/device/sriov_numvfs
解绑所有 VF
echo <VF PCI> >/sys/bus/pci/drivers/mlx5_core/unbind
将两个网卡的模式都更改为 SwitchDev
devlink dev eswitch set pci/<PCI> mode switchdev
使用内核模块创建 Linux bonding
modprobe bonding mode=<desired mode>
注意此处可以添加其他 bonding 参数。支持的 bond 模式为 Active-Backup、XOR 和 LACP。
关闭所有 PF 和 VF
ip link set <PF/VF> down
将两个 PF 都附加到 bond
ip link set <PF> master bond0
启动 PF 和 bond 链路
ip link set <PF0> up ip link set <PF1> up ip link set bond0 up
将 bond 接口作为
type=dpdk
添加到网桥ovs-vsctl add-port br-phy bond0 -- set Interface bond0 type=dpdk options:dpdk-lsc-interrupt=true
信息在 OVS-DPDK 中使用 VF-LAG 的传统选项是将 bond master (PF) 接口添加到网桥
ovs-vsctl add-port br-phy p0 -- set Interface p0 type=dpdk options:dpdk-devargs=<PF0-PCI>,dv_flow_en=
2
,dv_xmeta_en=4
options:dpdk-lsc-interrupt=true
将 PF0 或 PF1 的 VF representor 添加到网桥
ovs-vsctl add-port br-phy enp4s0f0_0 -- set Interface enp4s0f0_0 type=dpdk
或
ovs-vsctl add-port br-phy enp4s0f1_0 -- set Interface enp4s0f1_0 type=dpdk
信息添加 DPDK 端口的传统选项
ovs-vsctl add-port br-phy rep$N -- set Interface rep$N type=dpdk options:dpdk-devargs=<PF0-PCI>,representor=pf0vf$N,dv_flow_en=
2
,dv_xmeta_en=4
或
ovs-vsctl add-port br-phy rep$N -- set Interface rep$N type=dpdk options:dpdk-devargs=<PF0-PCI>,representor=pf1vf$N,dv_flow_en=
2
,dv_xmeta_en=4
在多端口 eswitch 模式下,所有上行链路和所有物理端口的 VF/SF representor 都由同一硬件交换机管理。这允许从物理端口实体转发到物理端口二实体。
要配置多端口 eswitch 模式,必须在 BlueField Arm OS 中设置 nvconig 参数
LAG_RESOURCE_ALLOCATION=1
,按照以下说明进行操作mst start mlxconfig -d /dev/mst/mt*conf0 -y s LAG_RESOURCE_ALLOCATION=
1
执行 BlueField 系统重启,以使
mlxconfig
设置生效。在驱动程序加载后,以及移动到 switchdev 模式后,为每个 PF 配置多端口 eswitch,其中 p0 和 p1 代表 PF 的 netdevice
devlink dev param set pci/
0000
:03
:00.0
name esw_multiport value1
cmode runtime devlink dev param set pci/0000
:03
:00.1
name esw_multiport value1
cmode runtime信息在两个 PF 上都进入 switchdev 模式后,该模式变为可操作模式。
可以通过在
/etc/mellanox/mlnx-bf.conf
中添加以下行,默认激活此模式ENABLE_ESWITCH_MULTIPORT=
"yes"
在此模式下,第二个端口不是 eswitch 管理器,应使用此命令添加到 OVS
ovs-vsctl add-port br-phy enp4s0f1 -- set interface
enp4s0f1 type=dpdk
可以使用此命令添加第二个端口的 VF
ovs-vsctl add-port br-phy enp4s0f1_0 -- set interface
enp4s0f1_0 type=dpdk
添加 DPDK 端口的传统选项
ovs-vsctl add-port br-phy p1 -- set interface
p1 type=dpdk options:dpdk-devargs="0000
:08
:00.0
,dv_xmeta_en=4
,dv_flow_en=2
,representor=pf1
可以使用此命令添加第二个端口的 VF
ovs-vsctl add-port br-phy p1vf0 -- set interface
p1 type=dpdk options:dpdk-devargs="0000
:08
:00.0
,dv_xmeta_en=4
,dv_flow_en=2
,representor=pf1vf0
Geneve 隧道卸载支持包括匹配扩展标头。
OVS-DOCA Geneve 选项限制
仅支持 1 个 Geneve 选项
最大选项长度为 7
要更改当前正在匹配和封装的 Geneve 选项,用户必须删除所有端口或重启 OVS 并配置新选项
匹配 Geneve 选项可以使用
FLEX_PARSER
profile 0(默认 profile)。也支持使用FLEX_PARSER
profile 8。要配置它,请运行mst start mlxconfig -d <mst device> s FLEX_PARSER_PROFILE_ENABLE=8
注意执行 BlueField 系统重启,以使
mlxconfig
设置生效。
要配置 OVS-DOCA Geneve 封装/解封装
创建
br-phy
网桥ovs-vsctl --may-exist add-br br-phy -- set Bridge br-phy datapath_type=netdev -- br-set-external-id br-phy bridge-id br-phy -- set bridge br-phy fail-mode=standalone
将 PF 接口附加到
br-phy
网桥ovs-vsctl add-port br-phy enp4s0f0 -- set Interface enp4s0f0 type=dpdk
将 IP 配置到网桥
ifconfig br-phy <$local_ip_1> up
创建
br-int
网桥ovs-vsctl add-port br-int enp4s0f0_0 -- set Interface enp4s0f0_0 type=dpdk
将 representor 附加到
br-int
ovs-vsctl add-port br-int rep$x -- set Interface rep$x type=dpdk
为 Geneve 隧道添加端口
ovs-vsctl add-port br-int geneve0 -- set interface geneve0 type=geneve options:key=<VNI> options:remote_ip=<$remote_ip_1> options:local_ip=<$local_ip_1>
要配置 OVS-DOCA GRE 封装/解封装
创建
br-phy
网桥ovs-vsctl --may-exist add-br br-phy -- set Bridge br-phy datapath_type=netdev -- br-set-external-id br-phy bridge-id br-phy -- set bridge br-phy fail-mode=standalone
将 PF 接口附加到
br-phy
网桥ovs-vsctl add-port br-phy enp4s0f0 -- set Interface enp4s0f0 type=dpdk
将 IP 配置到网桥
ifconfig br-phy <$local_ip_1> up
创建
br-int
网桥ovs-vsctl --may-exist add-br br-int -- set Bridge br-int datapath_type=netdev -- br-set-external-id br-int bridge-id br-int -- set bridge br-int fail-mode=standalone
将 representor 附加到
br-int
ovs-vsctl add-port br-int enp4s0f0_0 -- set Interface enp4s0f0_0 type=dpdk
为 Geneve 隧道添加端口
ovs-vsctl add-port br-int gre0 -- set interface gre0 type=gre options:key=<VNI> options:remote_ip=<$remote_ip_1> options:local_ip=<$local_ip_1>
慢速路径速率限制允许控制绕过硬件卸载规则并随后由软件处理的流量速率。
要配置慢速路径速率限制
创建
br-phy
网桥ovs-vsctl --may-exist add-br br-phy -- set Bridge br-phy datapath_type=netdev -- br-set-external-id br-phy bridge-id br-phy -- set bridge br-phy fail-mode=standalone
将 PF 接口附加到
br-phy
网桥ovs-vsctl add-port br-phy pf0 -- set Interface pf0 type=dpdk
将
pf0vf0
的速率限制为 10Kpps,突发大小为 6Kovs-vsctl set interface pf0 options:sw-meter=pps:10k:6k
重启 OVS
systemctl restart openvswitch-switch.service
还支持 dry-run 选项,以允许在生产环境中测试不同的软件 meter 配置。这允许收集统计信息,而不会影响实际的流量流。然后可以分析这些统计信息,以确定适当的速率限制阈值。启用 dry-run 选项后,不会丢弃或速率限制流量,从而允许正常操作继续而不会中断。但是,系统会模拟速率限制过程并递增计数器,就像数据包被丢弃一样。
要启用慢速路径速率限制 dry-run
创建
br-phy
网桥ovs-vsctl --may-exist add-br br-phy -- set Bridge br-phy datapath_type=netdev -- br-set-external-id br-phy bridge-id br-phy -- set bridge br-phy fail-mode=standalone
将 PF 接口附加到
br-phy
网桥ovs-vsctl add-port br-phy pf0 -- set Interface pf0 type=dpdk
将
pf0vf0
的速率限制为 10Kpps,突发大小为 6Kovs-vsctl set interface pf0 options:sw-meter=pps:10k:6k
设置
sw-meter-dry-run
选项ovs-vsctl set interface pf0vf0 options:sw-meter-dry-run=true
重启 OVS
systemctl restart openvswitch-switch.service
发夹模式允许将数据包从线路转发到线路。
要配置发夹模式
创建
br-phy
网桥ovs-vsctl --may-exist add-br br-phy -- set Bridge br-phy datapath_type=netdev -- br-set-external-id br-phy bridge-id br-phy -- set bridge br-phy fail-mode=standalone
将 PF 接口附加到
br-phy
网桥ovs-vsctl add-port br-phy pf0 -- set Interface pf0 type=dpdk
添加发夹 OpenFlow 规则
ovs-ofctl add-flow br-phy"in_port=pf0,ip,actions=in_port"
OVS-DOCA 支持 OpenFlow meter 操作,如本文档的“OpenFlow Meters”部分所述。此外,OVS-DOCA 支持在单个数据路径规则中链接多个 meter 操作。
以下是此类 OpenFlow 规则的示例配置
ovs-ofctl add-flow br-phy -O OpenFlow13 "table=0,priority=1,in_port=pf0vf0_r,ip actions=meter=1,resubmit(,1)"
ovs-ofctl add-flow br-phy -O OpenFlow13 "table=1,priority=1,in_port=pf0vf0_r,ip actions=meter=2,normal"
Meter 操作按顺序应用,首先使用 meter ID 1,然后使用 meter ID 2。
此类配置的用例示例
使用不同的 meter 类型(每秒字节数和每秒数据包数)限制同一逻辑流的速率
计量一组流。由于 meter ID 可以被多个流使用,因此可以与其他逻辑流重用此示例中的 meter ID 2;从而确保它们的累积带宽受到 meter 的限制。
OVS 支持组配置。“select”类型执行组中的一个 bucket,根据其权重在 bucket 之间进行平衡。为了选择一个 bucket,对于每个活动的 bucket,OVS 使用 bucket ID 对流数据进行哈希处理,并将哈希值乘以 bucket 权重以获得“分数”。选择得分最高的 bucket。
有关更多详细信息,请参阅 ovs-ofctl 手册。
例如
ovs-ofctl add-group br-int 'group_id=1,type=select,bucket=<port1>'
ovs-ofctl add-flow br-int in_port=<port0>,actions=group=1
限制
卸载仅在 IP 流量(IPv4 或 IPv6)上受支持
sFlow 标准概述了一种在交换或路由网络中捕获流量数据的方法。它采用采样技术从设备收集统计信息,使其适用于高速网络。
使用预定的采样率,每 N 个数据包捕获一个数据包。虽然这种采样方法不会产生完全准确的结果,但它确实提供了可接受的准确性。
要激活对遍历名为 br-int
的 OVS 网桥的所有流量的 0.2% 进行采样,请运行
ovs-vsctl -- --id
=@sflow create sflow agent=lo target=127.0.0.1:6343 header=96 sampling=512 -- set
bridge br-int sflow=@sflow
通过在网桥上进行此 sFlow 配置,捕获的数据包将镜像到 sFlow 收集器应用程序,该应用程序在本地主机的默认 sFlow 端口 6343 上进行侦听。
sFlow 收集器应用程序不在此指南的范围内。
可以将采样率设置为 1,同时在网桥上配置 sFlow,这实际上会将所有流量镜像到 sFlow 收集器。
除了原始数据包目标之外,镜像还可用于将数据包从一个端口复制到另一个端口。这可以使用 OpenFlow 输出操作或 ovs-vsctl create mirror
命令来完成。
例如,要在 OVS 网桥 br-int
上配置将端口 pf0vf1_r
的所有流量镜像到端口 pf0vf2_r
,请运行
ovs-vsctl -- --id
=@p1 get port pf0vf1_r -- --id
=@p2 get port pf0vf2_r -- --id
=@m create mirror name=m1 select_dst_port=@p1 select_src_port=@p1 output-port=@p2 -- set
bridge br-int mirrors=@m
这将生成具有多个输出端口的数据路径规则。每个输出端口排列都需要不同的镜像配置。默认情况下,仅支持 128 种不同的此类配置。要更改此数字,请使用 doca-mirror-max
other_config
。例如,通过运行以下命令将 other_config:doca-mirror-max
设置为 2048
ovs-vsctl set
Open_vSwitch . other_config:doca-mirror-max=2048
当使用两个 PF,每个 PF 具有 127 个 VF,并将它们的 representor 添加到 OVS 网桥时,用户必须配置
dpdk-memzones
ovs-vsctl set o . other_config:dpdk-max-memzones=
6500
restart ovs在包含物理网桥和内部网桥的 OVS 拓扑中,当采用 VXLAN 隧道时,仅在内部网桥上支持 sFlow 卸载。在这种情况下,在物理网桥上使用 sFlow 会导致仅部分卸载流。
可以使用 dbg
日志级别在 vSwitch 日志文件中启用其他调试信息
(
topics='netdev|ofproto|ofp|odp|doca'
IFS=$'\n'
; for
topic in
$(ovs-appctl vlog/list | grep
-E "$topics"
| cut
-d' '
-f1)
do
printf
"$topic:file:dbg "
done
) | xargs
ovs-appctl vlog/set
列出的主题与 DOCA 卸载操作相关。
已添加特定于 DOCA 卸载提供程序的覆盖率计数器。应使用以下命令来检查它们
ovs-appctl coverage/show # Print the current non-zero coverage counters
下表提供了这些 DOCA 特定计数器背后的含义
计数器 | 描述 |
| 当守护程序尝试插入新的卸载时,异步卸载插入队列已满。 队列将被刷新,并再次尝试插入。 这不是致命错误,但表示硬件速度减慢。 |
| 即使在多次尝试刷新当前排队的请求后,异步卸载插入队列仍然已满。 虽然不是致命错误,但在正常的卸载操作期间永远不应发生,应将其视为错误。 |
| 异步插入失败,特别是由于其异步性质。这不应发生,应将其视为错误。 |
| DOCA 管道已调整大小的次数。这是正常且预期的,因为 DOCA 管道接收更多条目。 |
| DOCA 管道调整大小花费了超过 10 毫秒才能完成。这可能会偶尔发生。 如果测量到插入速率突然下降,则此计数器可以帮助识别根本原因。 |
要从提供的源和预安装的具有相同版本软件包的 DOCA 构建 OVS-DOCA,请运行
$ ./boot.sh
$ ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --with-dpdk=static
--with-doca=static
$ make -j 10
$ make install
帮助程序构建脚本与 OVS-DOCA 源代码捆绑在一起,可以按如下方式使用
$ ./build.sh --install-deps
$ ./build.sh --install-ovs
Megaflows 将多个微流聚合到单个流条目中,减少了流表的负载,并提高了数据包处理效率。在 OVS 中扩展 megaflows 对于优化网络性能和确保高效处理高流量至关重要。默认情况下,OVS-DOCA 可以处理多达 20 万个 megaflows。
为了有效地管理和扩展 megaflows,可以调整 OVS 的 other_config
部分中的几个关键配置
flow-limit
参数设置可以存储在流表中的最大流数,有助于控制内存使用并防止溢出。max-revalidator
参数定义了重新验证器线程在启动流重新验证之前将等待的最长时间(以毫秒为单位)。至关重要的是要理解,这表示上限,OVS 使用的实际超时是max-idle
和max-revalidator
值中的较小者。如果没有彻底了解其影响,通常不建议修改此参数。对于 CPU 功能较弱的系统,建议设置较高的max-revalidator
值,以补偿计算能力下降并确保重新验证完成。
微调这些设置可以提高 OVS 部署的可扩展性和性能,使其能够有效地管理更多数量的 megaflows。
要设置
flow-limit
(默认为 20 万)$ ovs-vsctl set o . other_config:flow-limit=<desired_value>
要设置
max-revalidator
(默认为 250 毫秒)。$ ovs-vsctl set o . other_config:max-revalidator=<desired_value>