8.9. OVS TC-flower ハードウェアオフロードのトラブルシューティング
OVS TC-flower ハードウェアオフロードを使用する Red Hat OpenStack Platform (RHOSP) 環境のトラブルシューティングを行う場合は、ネットワークとインターフェイスの前提条件と設定を確認してください。
前提条件
- Linux カーネル 4.13 以降
- OVS 2.8 以降
- RHOSP 12 以降
- Iproute 4.12 以降
- Mellanox NIC ファームウェア (例: FW ConnectX-5 16.21.0338 以降)
サポート対象となる前提条件の詳細は、Red Hat ナレッジベースのソリューション Network Adapter Fast Datapath Feature Support Matrix を参照してください。
ネットワーク設定
HW オフロードのデプロイメントでは、ネットワーク設定として、以下のシナリオのどちらかを要件に応じて使用することができます。
- ボンディングに接続された同じインターフェイスセットを使用するか、種別ごとに異なる NIC セットを使用して、VXLAN および VLAN 上でゲスト仮想マシンをホストすることができます。
- Linux ボンディングを使用して、Mellanox NIC の 2 つのポートをボンディングすることができます。
- 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 ...
次のボンディング設定がサポートされています。
- active-backup: mode=1
- active-active または balance-xor: mode=2
- 802.3ad (LACP): mode=4
以下のボンディング設定はサポートされません。
- xmit_hash_policy=layer3+4
インターフェイス設定
インターフェイス設定を確認するには、次の手順に従います。
手順
-
デプロイメント時に、ホストネットワーク設定ツール
os-net-config
を使用してhw-tc-offload
を有効にします。 -
Compute ノードをリブートするたびに、
sriov_config
サービスでhw-tc-offload
を有効にします。 ボンディングに接続されている NIC について、
hw-tc-offload
パラメーターをon
に設定します。例
$ 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')
PF インターフェイスのドライバーが "mlx5e_rep"
に設定され、e-switch アップリンクポートのレプリゼンターであることが示されます。これは機能には影響を及ぼしません。
OVS オフロード状態
OVS オフロードの状態を確認するには、次の手順に従います。
Compute ノードにおいて、OVS のハードウェアオフロードを有効にします。
$ ovs-vsctl get Open_vSwitch . other_config:hw-offload "true"
VF 代表ポート名
VF レプリゼンターポートの命名に一貫性を持たせるために、os-net-config
は udev ルールを使用してポートの名前を <PF-name>_<VF_id> の形式で変更します。
手順
デプロイメント後に、VF レプリゼンターポートの名前が正しく付けられていることを確認します。
例
$ 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 シェルにアクセスして、ルーティングテーブルの調査や他のデバッグを行うことができます。以下の手順では、例として Cumulus Linux スイッチの Broadcom チップセットを使用しています。実際の環境に応じて値を置き換えてください。
手順
Broadcom チップのルーティングテーブルの内容を取得するには、
bcmcmd
コマンドを使用します。$ 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
出力例
… 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
フラグおよび統計値を調べます。hardware
という言葉は、ハードウェアがネットワークトラフィックを処理していることを示しています。tc-policy=none
を使用する場合は、この出力または tcpdump を確認して、ハードウェアまたはソフトウェアがパケットを処理するタイミングを調べることができます。ドライバーがパケットをオフロードできない場合は、dmesg
またはovs-vswitch.log
に対応するログメッセージが表示されます。 Mellanox を例に取ると、ログエントリーは
dmesg
の徴候メッセージに類似しています。出力例
[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
Systems
以下の手順で、ご自分のシステムを検証します。
手順
- システムで SR-IOV および VT-d が有効であることを確認します。
-
たとえば GRUB を使用して、カーネルパラメーターに
intel_iommu=on
を追加して Linux の IOMMU を有効にします。