Menu Close

6.7. OVS ハードウェアオフロードのトラブルシューティング

前提条件

  • 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」を参照してください。

OVS HW オフロードデプロイメントでのネットワーク設定

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

インターフェース設定の確認

以下の手順で、インターフェース設定を確認します。

手順

  1. デプロイメント時に、ホストネットワーク設定ツール os-net-config を使用して hw-tc-offload を有効にします。
  2. コンピュートノードをリブートするたびに、sriov_config サービスで hw-tc-offload を有効にします。
  3. ボンディングに接続されている NIC について、hw-tc-offload パラメーターを on に設定します。

    [root@overcloud-computesriov-0 ~]# ethtool -k ens1f0 | grep tc-offload
    hw-tc-offload: on

インターフェースモードの確認

以下の手順で、インターフェースモードを確認します。

手順

  1. HW オフロードに使用するインターフェースの eswitch モードを switchdev に設定します。
  2. ホストネットワーク設定ツール os-net-config を使用して、デプロイメント時に eswitch を有効にします。
  3. コンピュートノードをリブートするたびに、sriov_config サービスで eswitch を有効にします。

    [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 アップリンクポートのレプリゼンターであることが示されます。これは機能には影響を及ぼしません。

OVS のオフロード状態の確認

以下の手順で、OVS のオフロード状態を確認します。

  • コンピュートノードにおいて、OVS のハードウェアオフロードを有効にします。

    [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}"

ネットワークトラフィックフローの調査

HW オフロードが設定されたネットワークフローは、特定用途向け集積回路 (ASIC) チップを持つ物理スイッチまたはルーターと同じ様に機能します。スイッチまたはルーターの ASIC シェルにアクセスして、ルーティングテーブルの調査や他のデバッグを行うことができます。以下の手順では、例として Cumulus Linux スイッチの Broadcom チップセットを使用しています。実際の環境に応じて値を置き換えてください。

手順

  1. 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
  2. トラフィック制御 (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
  3. この出力で in_hw フラグおよび統計値を調べます。hardware という言葉は、ハードウェアがネットワークトラフィックを処理していることを示しています。tc-policy=none を使用する場合は、この出力または tcpdump を確認して、ハードウェアまたはソフトウェアがパケットを処理するタイミングを調べることができます。ドライバーがパケットをオフロードできない場合は、dmesg または ovs-vswitch.log に対応するログメッセージが表示されます。
  4. 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

システムの検証

以下の手順で、ご自分のシステムを検証します。

手順

  1. システムで SR-IOV および VT-d が有効であることを確認します。
  2. たとえば GRUB を使用して、カーネルパラメーターに intel_iommu=on を追加して Linux の IOMMU を有効にします。

制限事項

OVS 2.11 のオフロードパスでは、フローの接続追跡属性がサポートされないため、HW オフロードで OVS ファイアウォールドライバーを使用することはできません。