6.7. OVS 硬件卸载故障排除
先决条件
- Linux Kernel 4.13 或更新版本
- OVS 2.8 或更新版本
- RHOSP 12 或更新版本
- iproute 4.12 或更新版本
- Mellanox NIC 固件,如 FW ConnectX-5 16.21.0338 或更新版本
有关支持的先决条件的更多信息,请参阅红帽知识库解决方案网络适配器 Fast Datapath 功能支持列表。
在 OVS HW 卸载部署中配置网络
在 HW 卸载部署中,您可以根据您的要求选择以下网络配置情况之一:
- 您可以使用附加到绑定的同一组接口或每种类型的不同 NIC 集在 VXLAN 和 VLAN 上基本客户机虚拟机。
- 您可以使用 Linux 绑定绑定 Mellanox NIC 的两个端口。
- 您可以在 Mellanox Linux 绑定之上的 VLAN 接口托管租户 VXLAN 网络。
确保单个 NIC 和绑定是 ovs-bridge 的成员。
请参考以下示例网络配置:
- type: ovs_bridge name: br-offload mtu: 9000 use_dhcp: false members: - type: linux_bond name: bond-pf bonding_options: "mode=active-backup miimon=100" members: - type: sriov_pf name: p5p1 numvfs: 3 primary: true promisc: true use_dhcp: false defroute: false link_mode: switchdev - type: sriov_pf name: p5p2 numvfs: 3 promisc: true use_dhcp: false defroute: false link_mode: switchdev - type: vlan vlan_id: get_param: TenantNetworkVlanID device: bond-pf addresses: - ip_netmask: get_param: TenantIpSubnet
- type: ovs_bridge
name: br-offload
mtu: 9000
use_dhcp: false
members:
- type: linux_bond
name: bond-pf
bonding_options: "mode=active-backup miimon=100"
members:
- type: sriov_pf
name: p5p1
numvfs: 3
primary: true
promisc: true
use_dhcp: false
defroute: false
link_mode: switchdev
- type: sriov_pf
name: p5p2
numvfs: 3
promisc: true
use_dhcp: false
defroute: false
link_mode: switchdev
- type: vlan
vlan_id:
get_param: TenantNetworkVlanID
device: bond-pf
addresses:
- ip_netmask:
get_param: TenantIpSubnet
Copy to clipboardCopied请参考以下验证的绑定配置:
- active-backup - mode=1
- active-active or balance-xor - mode=2
- 802.3ad (LACP) - mode=4
验证接口配置
通过以下步骤验证接口配置。
流程
-
在部署期间,使用主机网络配置工具
os-net-config
启用hw-tc-offload
。 -
在重启 Compute 节点时,在
sriov_config
服务中启用hw-tc-offload
。 对于附加到绑定的 NIC,将
hw-tc-offload
参数设置为on
。ethtool -k ens1f0 | grep tc-offload
Copy to clipboardCopied[root@overcloud-computesriov-0 ~]# ethtool -k ens1f0 | grep tc-offload hw-tc-offload: on
验证接口模式
通过以下步骤验证接口模式。
流程
-
将用于 HW 卸载接口的 eswitch 模式设置为
switchdev
。 -
使用主机网络配置工具
os-net-config
在部署期间启用eswitch
。 在您重新引导 Compute 节点时,在
sriov_config
服务中启用eswitch
。devlink dev eswitch show pci/$(ethtool -i ens1f0 | grep bus-info | cut -d ':' -f 2,3,4 | awk '{$1=$1};1')
Copy to clipboardCopied[root@overcloud-computesriov-0 ~]# devlink dev eswitch show pci/$(ethtool -i ens1f0 | grep bus-info | cut -d ':' -f 2,3,4 | awk '{$1=$1};1')
PF 接口的驱动程序设置为 "mlx5e_rep"
,以显示它是 e-switch uplink 端口的代表器。这不会影响功能。
验证 OVS 中的卸载状态
通过以下步骤,验证 OVS 中的卸载状态。
在 Compute 节点中启用 OVS 中的硬件卸载。
ovs-vsctl get Open_vSwitch . other_config:hw-offload
Copy to clipboardCopied[root@overcloud-computesriov-0 ~]# ovs-vsctl get Open_vSwitch . other_config:hw-offload "true"
验证 VF 代表或端口的名称
为确保 VF 表示器端口的一致性命名,os-net-config
使用 udev 规则以 <PF-name>_<VF_id> 格式重命名端口。
流程
部署后,验证 VF 代表器端口是否正确命名。
root@overcloud-computesriov-0 ~]# cat /etc/udev/rules.d/80-persistent-os-net-config.rules # This file is autogenerated by os-net-config SUBSYSTEM=="net", ACTION=="add", ATTR{phys_switch_id}!="", ATTR{phys_port_name}=="pf*vf*", ENV{NM_UNMANAGED}="1" SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNELS=="0000:65:00.0", NAME="ens1f0" SUBSYSTEM=="net", ACTION=="add", ATTR{phys_switch_id}=="98039b7f9e48", ATTR{phys_port_name}=="pf0vf*", IMPORT{program}="/etc/udev/rep-link-name.sh $attr{phys_port_name}", NAME="ens1f0_$env{NUMBER}" SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNELS=="0000:65:00.1", NAME="ens1f1" SUBSYSTEM=="net", ACTION=="add", ATTR{phys_switch_id}=="98039b7f9e49", ATTR{phys_port_name}=="pf1vf*", IMPORT{program}="/etc/udev/rep-link-name.sh $attr{phys_port_name}", NAME="ens1f1_$env{NUMBER}"
Copy to clipboardCopiedroot@overcloud-computesriov-0 ~]# cat /etc/udev/rules.d/80-persistent-os-net-config.rules # This file is autogenerated by os-net-config SUBSYSTEM=="net", ACTION=="add", ATTR{phys_switch_id}!="", ATTR{phys_port_name}=="pf*vf*", ENV{NM_UNMANAGED}="1" SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNELS=="0000:65:00.0", NAME="ens1f0" SUBSYSTEM=="net", ACTION=="add", ATTR{phys_switch_id}=="98039b7f9e48", ATTR{phys_port_name}=="pf0vf*", IMPORT{program}="/etc/udev/rep-link-name.sh $attr{phys_port_name}", NAME="ens1f0_$env{NUMBER}" SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNELS=="0000:65:00.1", NAME="ens1f1" SUBSYSTEM=="net", ACTION=="add", ATTR{phys_switch_id}=="98039b7f9e49", ATTR{phys_port_name}=="pf1vf*", IMPORT{program}="/etc/udev/rep-link-name.sh $attr{phys_port_name}", NAME="ens1f1_$env{NUMBER}"
检查网络流量流
HW 卸载的网络流功能的方式类似于物理交换机或带有特定于应用程序的集成电路(ASIC)芯片的路由器。您可以访问交换机或路由器的 ASIC shell,以检查路由表并进行其他调试。以下流程使用 Cumulus Linux 交换机的 Broadcom 芯片组作为示例。替换适合您环境的值。
流程
要获取 Broadcom 芯片表内容,请使用
bcmcmd
命令。root@dni-7448-26:~# cl-bcmcmd l2 show mac=00:02:00:00:00:08 vlan=2000 GPORT=0x2 modid=0 port=2/xe1 mac=00:02:00:00:00:09 vlan=2000 GPORT=0x2 modid=0 port=2/xe1 Hit
Copy to clipboardCopiedroot@dni-7448-26:~# cl-bcmcmd l2 show mac=00:02:00:00:00:08 vlan=2000 GPORT=0x2 modid=0 port=2/xe1 mac=00:02:00:00:00:09 vlan=2000 GPORT=0x2 modid=0 port=2/xe1 Hit
检查流量控制(TC)层。
tc -s filter show dev p5p1_1 ingress
Copy to clipboardCopied# tc -s filter show dev p5p1_1 ingress … filter block 94 protocol ip pref 3 flower chain 5 filter block 94 protocol ip pref 3 flower chain 5 handle 0x2 eth_type ipv4 src_ip 172.0.0.1 ip_flags nofrag in_hw in_hw_count 1 action order 1: mirred (Egress Redirect to device eth4) stolen index 3 ref 1 bind 1 installed 364 sec used 0 sec Action statistics: Sent 253991716224 bytes 169534118 pkt (dropped 0, overlimits 0 requeues 0) Sent software 43711874200 bytes 30161170 pkt Sent hardware 210279842024 bytes 139372948 pkt backlog 0b 0p requeues 0 cookie 8beddad9a0430f0457e7e78db6e0af48 no_percpu
-
检查
in_hw
标志以及此输出中的统计信息。术语硬件
表示硬件处理网络流量。如果使用tc-policy=none
,您可以检查此输出,或者在硬件或软件处理数据包时进行调查。当驱动程序无法卸载数据包时,您可以在dmesg
中看到对应的日志消息,或者在ovs-vswitch.log
中看到相应的日志消息。 例如,Mlanox 中的日志条目与
dmesg
中的 syndrome 信息类似。[13232.860484] mlx5_core 0000:3b:00.0: mlx5_cmd_check:756:(pid 131368): SET_FLOW_TABLE_ENTRY(0x936) op_mod(0x0) failed, status bad parameter(0x3), syndrome (0x6b1266)
Copy to clipboardCopied[13232.860484] mlx5_core 0000:3b:00.0: mlx5_cmd_check:756:(pid 131368): SET_FLOW_TABLE_ENTRY(0x936) op_mod(0x0) failed, status bad parameter(0x3), syndrome (0x6b1266)
在本例中,错误代码(0x6b1266)代表以下行为:
0x6B1266 | set_flow_table_entry: pop vlan and forward to uplink is not allowed
Copy to clipboardCopied0x6B1266 | set_flow_table_entry: pop vlan and forward to uplink is not allowed
验证系统
使用以下流程验证您的系统。
流程
- 确保系统上已启用 SR-IOV 和 VT-d。
-
通过在内核参数中添加
intel_iommu=on
在 Linux 中启用 IOMMU,例如使用 GRUB。
限制
您不能将 OVS 防火墙驱动程序与 HW 卸载结合使用,因为 OVS 2.11 中的卸载路径不支持流跟踪属性。