16.4.3. Intel FPGA PAC N3000 向け SR-IOV-FEC Operator の設定

このセクションでは、Intel FPGA PAC N3000 向け SR-IOV-FEC Operator をプログラムする方法を説明します。SR-IOV-FEC Operator は、vRAN L1 アプリケーションの FEC プロセスを加速するために使用される前方誤り訂正 (FEC) デバイスの管理を処理します。

SR-IOV-FEC Operator を設定するには、以下のことを行う必要があります。

  • FEC デバイスに必要な仮想機能 (VF) の作成
  • VF を適切なドライバーにバインド
  • 4G または 5G デプロイメントで希望する機能向け VF キューの設定

前方誤り訂正 (FEC) の役割は、メッセージ内の特定のビットが失われたり、文字化けしている可能性がある転送エラーの修正です。伝送メディアのノイズ、干渉、または信号強度の低下により、メッセージが失われたり文字化けしたりする可能性があります。FEC を使用しないと、文字化けしたメッセージは、ネットワーク負荷に加え、スループットとレイテンシーに影響を与える必要があります。

前提条件

  • Intel FPGA PAC N3000 カード
  • Intel FPGA PAC N3000 (プログラミング) 向け OpenNESS Operator でインストールされる 1 つまたは複数のノード
  • ワイヤレス FEC Accelerator 向け OpenNESS Operator でインストールされる 1 つまたは複数のノード
  • Performance Addon Operator で設定された RT カーネル

手順

  1. vran-acceleration-operators プロジェクトに切り替えます。

    $ oc project vran-acceleration-operators
  2. SR-IOV-FEC Operator がインストールされていることを確認します。

    $ oc get csv -o custom-columns=Name:.metadata.name,Phase:.status.phase

    出力例

    Name                                        Phase
    sriov-fec.v1.1.0                            Succeeded
    n3000.v1.1.0                                Succeeded

  3. N3000 および sriov-fec Pod が実行していることを確認します。

    $  oc get pods

    出力例

    NAME                                            READY       STATUS      RESTARTS    AGE
    fpga-driver-daemonset-8xz4c                     1/1         Running     0           15d
    fpgainfo-exporter-vhvdq                         1/1         Running     1           15d
    N3000-controller-manager-b68475c76-gcc6v        2/2         Running     1           15d
    N3000-daemonset-5k55l                           1/1         Running     1           15d
    N3000-discovery-blmjl                           1/1         Running     1           15d
    N3000-discovery-lblh7                           1/1         Running     1           15d
    sriov-device-plugin-j5jlv                       1/1         Running     1           15d
    sriov-fec-controller-manager-85b6b8f4d4-gd2qg   1/1         Running     1           15d
    sriov-fec-daemonset-kqqs6                       1/1         Running     1           15d

    以下のセクションでは、インストールされた Pod に関する情報を提供します。

    • fpga-driver-daemonset は必要な Open Programmable Accelerator Engine (OPAE) ドライバーを提供し、読み込みます。
    • fpgainfo-exporter は Prometheus に N3000 Telemetry データを提供します。
    • N3000-controller-manager は N3000Node CR をクラスターに適用し、すべてのオペランドコンテナーを管理します。
    • N3000-daemonset が主要なワーカーアプリケーションです。
    • N3000-discovery は、デバイスが存在する場合にワーカーノードがインストールされ、ラベルのワーカーノードがある場合に N3000 Accelerator デバイスを検出します。
    • sriov-device-plugin は、FEC 仮想機能をノードの下にあるリソースとして公開します。
    • sriov-fec-controller-manager は CR をノードに適用し、オペランドコンテナーを維持します。
    • sriov-fec-daemonset は、次のことを行います。

      • 各ノードで SRIOV NIC の検出
      • ステップ 6 で定義されたカスタムリソース (CR) のステータスの同期
      • CR の spec を入力として実行し、検出された NIC の設定
  4. サポート対象の vRAN FEC アクセラレーターデバイスのいずれかを含むすべてのノードを取得します。

    $ oc get sriovfecnodeconfig

    出力例

    NAME             CONFIGURED
    node1            Succeeded

  5. 設定する SR-IOV FEC アクセラレーターデバイスの Physical Function (PF) を検索します。

    $ oc get sriovfecnodeconfig node1 -o yaml

    出力例

    status:
        conditions:
        - lastTransitionTime: "2021-03-19T17:19:37Z"
          message: Configured successfully
          observedGeneration: 1
          reason: ConfigurationSucceeded
          status: "True"
          type: Configured
        inventory:
            sriovAccelerators:
            - deviceID: 0d5c
              driver: ""
              maxVirtualFunctions: 16
              pciAddress: 0000.1d.00.0 1
              vendorID: "8086"
              virtualFunctions: [] 2

    1
    このフィールドは、カードの PCI Address を示します。
    2
    このフィールドは、仮想関数が空であることを示します。
  6. 希望の設定で FEC デバイスを設定します。

    1. 以下のカスタムリソース (CR) を作成し、YAML を sriovfec_n3000_cr.yaml ファイルに保存します。

      apiVersion: sriovfec.intel.com/v1
      kind: SriovFecClusterConfig
      metadata:
          name: config
          namespace: vran-acceleration-operators
      spec:
        nodes:
          - nodeName: node1 1
            physicalFunctions:
              - pciAddress: 0000:1d:00.0 2
                pfDriver: pci-pf-stub
                vfDriver: vfio-pci
                vfAmount: 2 3
                bbDevConfig:
                  n3000:
                    # Network Type: either "FPGA_5GNR" or "FPGA_LTE"
                    networkType: "FPGA_5GNR"
                    pfMode: false
                    flrTimeout: 610
                    downlink:
                      bandwidth: 3
                      loadBalance: 128
                      queues: 4
                        vf0: 16
                        vf1: 16
                        vf2: 0
                        vf3: 0
                        vf4: 0
                        vf5: 0
                        vf6: 0
                        vf7: 0
                    uplink:
                      bandwidth: 3
                      loadBalance: 128
                      queues: 5
                        vf0: 16
                        vf1: 16
                        vf2: 0
                        vf3: 0
                        vf4: 0
                        vf5: 0
                        vf6: 0
                        vf7: 0
      1
      ノード名を指定します。
      2
      SR-IOV-FEC Operator がインストールされているカードの PCI Address を指定します。
      3
      仮想関数の数を指定します。2 つの仮想関数を作成します。
      4
      vf0 で、16 バス (ダウンリンクおよびアップリンク) を使用してキューを 1 つ作成します。
      5
      vf1 で、16 バス (ダウンリンクおよびアップリンク) を使用してキューを 1 つ作成します。
      注記

      vRAN Acceleration 向け Intel PAC N3000 では、ユーザーが最大 8 個の VF デバイスを作成できます。各 FEC PF デバイスでは、設定可能な合計 64 個のキュー (アップリンク用に 32 個と、ダウンリンク用に 32 個) が提供されます。キューは通常、VF 全体に均等に分散されます。

    2. CR を適用します。

      $ oc apply -f sriovfec_n3000_cr.yaml

      CR の適用後、SR-IOV FEC デーモンは FEC デバイスの設定を開始します。

検証

  1. ステータスを確認します。

    $ oc get sriovfecclusterconfig config -o yaml

    出力例

    status:
        conditions:
        - lastTransitionTime: "2020-12-15T17:19:37Z"
          message: Configured successfully
          observedGeneration: 1
          reason: ConfigurationSucceeded
          status: "True"
          type: Configured
        inventory:
          sriovAccelerators:
          - deviceID: 0d8f
            driver: pci-pf-stub
            maxVirtualFunctions: 8
            pciAddress: 0000:1d:00.0
            vendorID: "8086"
            virtualFunctions:
            - deviceID: 0d90
              driver: vfio-pci
              pciAddress: 0000:1d:00.1
            - deviceID: 0d90
              driver: vfio-pci
              pciAddress: 0000:1d:00.2

  2. ログを確認します。

    1. SR-IOV デーモン Pod の名前を確認します。

      $ oc get pod | grep sriov-fec-daemonset

      出力例

      sriov-fec-daemonset-kqqs6                      1/1     Running   0          19h

    2. ログを表示します。

      $ oc logs sriov-fec-daemonset-kqqs6

      出力例

      2020-12-16T12:46:47.720Z        INFO    daemon.NodeConfigurator.applyConfig     configuring PF  {"requestedConfig": {"pciAddress":"0000:1d:00.0","pfDriver":"pci-pf-stub","vfDriver":"vfio-pci","vfAmount":2,"bbDevConfig":{"n3000":{
      "networkType":"FPGA_5GNR","pfMode":false,"flrTimeout":610,"downlink":{"bandwidth":3,"loadBalance":128,"queues":{"vf0":16,"vf1":16}},"uplink":{"bandwidth":3,"loadBalance":128,"queues":{"vf0":16,"vf1":16}}}}}}
      2020-12-16T12:46:47.720Z        INFO    daemon.NodeConfigurator.loadModule      executing command       {"cmd": "/usr/sbin/chroot /host/ modprobe pci-pf-stub"}
      2020-12-16T12:46:47.724Z        INFO    daemon.NodeConfigurator.loadModule      commands output {"output": ""}
      2020-12-16T12:46:47.724Z        INFO    daemon.NodeConfigurator.loadModule      executing command       {"cmd": "/usr/sbin/chroot /host/ modprobe vfio-pci"}
      2020-12-16T12:46:47.727Z        INFO    daemon.NodeConfigurator.loadModule      commands output {"output": ""}
      2020-12-16T12:46:47.727Z        INFO    daemon.NodeConfigurator device's driver_override path   {"path": "/sys/bus/pci/devices/0000:1d:00.0/driver_override"}
      2020-12-16T12:46:47.727Z        INFO    daemon.NodeConfigurator driver bind path        {"path": "/sys/bus/pci/drivers/pci-pf-stub/bind"}
      2020-12-16T12:46:47.998Z        INFO    daemon.NodeConfigurator device's driver_override path   {"path": "/sys/bus/pci/devices/0000:1d:00.1/driver_override"}
      2020-12-16T12:46:47.998Z        INFO    daemon.NodeConfigurator driver bind path        {"path": "/sys/bus/pci/drivers/vfio-pci/bind"}
      2020-12-16T12:46:47.998Z        INFO    daemon.NodeConfigurator device's driver_override path   {"path": "/sys/bus/pci/devices/0000:1d:00.2/driver_override"}
      2020-12-16T12:46:47.998Z        INFO    daemon.NodeConfigurator driver bind path        {"path": "/sys/bus/pci/drivers/vfio-pci/bind"}
      2020-12-16T12:46:47.999Z        INFO    daemon.NodeConfigurator.applyConfig     executing command       {"cmd": "/sriov_workdir/pf_bb_config FPGA_5GNR -c /sriov_artifacts/0000:1d:00.0.ini -p 0000:1d:00.0"}
      2020-12-16T12:46:48.017Z        INFO    daemon.NodeConfigurator.applyConfig     commands output {"output": "ERROR: Section (FLR) or name (flr_time_out) is not valid.
      FEC FPGA RTL v3.0
      UL.DL Weights = 3.3
      UL.DL Load Balance = 1
      28.128
      Queue-PF/VF Mapping Table = READY
      Ring Descriptor Size = 256 bytes
      
      --------+-----+-----+-----+-----+-----+-----+-----+-----+-----+
              |  PF | VF0 | VF1 | VF2 | VF3 | VF4 | VF5 | VF6 | VF7 |
      --------+-----+-----+-----+-----+-----+-----+-----+-----+-----+
      UL-Q'00 |     |  X  |     |     |     |     |     |     |     |
      UL-Q'01 |     |  X  |     |     |     |     |     |     |     |
      UL-Q'02 |     |  X  |     |     |     |     |     |     |     |
      UL-Q'03 |     |  X  |     |     |     |     |     |     |     |
      UL-Q'04 |     |  X  |     |     |     |     |     |     |     |
      UL-Q'05 |     |  X  |     |     |     |     |     |     |     |
      UL-Q'06 |     |  X  |     |     |     |     |     |     |     |
      UL-Q'07 |     |  X  |     |     |     |     |     |     |     |
      UL-Q'08 |     |  X  |     |     |     |     |     |     |     |
      UL-Q'09 |     |  X  |     |     |     |     |     |     |     |
      UL-Q'10 |     |  X  |     |     |     |     |     |     |     |
      UL-Q'11 |     |  X  |     |     |     |     |     |     |     |
      UL-Q'12 |     |  X  |     |     |     |     |     |     |     |
      UL-Q'13 |     |  X  |     |     |     |     |     |     |     |
      UL-Q'14 |     |  X  |     |     |     |     |     |     |     |
      UL-Q'15 |     |  X  |     |     |     |     |     |     |     |
      UL-Q'16 |     |     |  X  |     |     |     |     |     |     |
      UL-Q'17 |     |     |  X  |     |     |     |     |     |     |
      UL-Q'18 |     |     |  X  |     |     |     |     |     |     |
      UL-Q'19 |     |     |  X  |     |     |     |     |     |     |
      UL-Q'20 |     |     |  X  |     |     |     |     |     |     |
      UL-Q'21 |     |     |  X  |     |     |     |     |     |     |
      UL-Q'22 |     |     |  X  |     |     |     |     |     |     |
      UL-Q'23 |     |     |  X  |     |     |     |     |     |     |
      UL-Q'24 |     |     |  X  |     |     |     |     |     |     |
      UL-Q'25 |     |     |  X  |     |     |     |     |     |     |
      UL-Q'26 |     |     |  X  |     |     |     |     |     |     |
      UL-Q'27 |     |     |  X  |     |     |     |     |     |     |
      UL-Q'28 |     |     |  X  |     |     |     |     |     |     |
      UL-Q'29 |     |     |  X  |     |     |     |     |     |     |
      UL-Q'30 |     |     |  X  |     |     |     |     |     |     |
      UL-Q'31 |     |     |  X  |     |     |     |     |     |     |
      DL-Q'32 |     |  X  |     |     |     |     |     |     |     |
      DL-Q'33 |     |  X  |     |     |     |     |     |     |     |
      DL-Q'34 |     |  X  |     |     |     |     |     |     |     |
      DL-Q'35 |     |  X  |     |     |     |     |     |     |     |
      DL-Q'36 |     |  X  |     |     |     |     |     |     |     |
      DL-Q'37 |     |  X  |     |     |     |     |     |     |     |
      DL-Q'38 |     |  X  |     |     |     |     |     |     |     |
      DL-Q'39 |     |  X  |     |     |     |     |     |     |     |
      DL-Q'40 |     |  X  |     |     |     |     |     |     |     |
      DL-Q'41 |     |  X  |     |     |     |     |     |     |     |
      DL-Q'42 |     |  X  |     |     |     |     |     |     |     |
      DL-Q'43 |     |  X  |     |     |     |     |     |     |     |
      DL-Q'44 |     |  X  |     |     |     |     |     |     |     |
      DL-Q'45 |     |  X  |     |     |     |     |     |     |     |
      DL-Q'46 |     |  X  |     |     |     |     |     |     |     |
      DL-Q'47 |     |  X  |     |     |     |     |     |     |     |
      DL-Q'48 |     |     |  X  |     |     |     |     |     |     |
      DL-Q'49 |     |     |  X  |     |     |     |     |     |     |
      DL-Q'50 |     |     |  X  |     |     |     |     |     |     |
      DL-Q'51 |     |     |  X  |     |     |     |     |     |     |
      DL-Q'52 |     |     |  X  |     |     |     |     |     |     |
      DL-Q'53 |     |     |  X  |     |     |     |     |     |     |
      DL-Q'54 |     |     |  X  |     |     |     |     |     |     |
      DL-Q'55 |     |     |  X  |     |     |     |     |     |     |
      DL-Q'56 |     |     |  X  |     |     |     |     |     |     |
      DL-Q'57 |     |     |  X  |     |     |     |     |     |     |
      DL-Q'58 |     |     |  X  |     |     |     |     |     |     |
      DL-Q'59 |     |     |  X  |     |     |     |     |     |     |
      DL-Q'60 |     |     |  X  |     |     |     |     |     |     |
      DL-Q'61 |     |     |  X  |     |     |     |     |     |     |
      DL-Q'62 |     |     |  X  |     |     |     |     |     |     |
      DL-Q'63 |     |     |  X  |     |     |     |     |     |     |
      --------+-----+-----+-----+-----+-----+-----+-----+-----+-----+
      
      Mode of operation = VF-mode
      FPGA_5GNR PF [0000:1d:00.0] configuration complete!"}
      2020-12-16T12:46:48.017Z        INFO    daemon.NodeConfigurator.enableMasterBus executing command       {"cmd": "/usr/sbin/chroot /host/ setpci -v -s 0000:1d:00.0 COMMAND"}
      2020-12-16T12:46:48.037Z        INFO    daemon.NodeConfigurator.enableMasterBus commands output {"output": "0000:1d:00.0 @04 = 0102\n"}
      2020-12-16T12:46:48.037Z        INFO    daemon.NodeConfigurator.enableMasterBus executing command       {"cmd": "/usr/sbin/chroot /host/ setpci -v -s 0000:1d:00.0 COMMAND=0106"}
      2020-12-16T12:46:48.054Z        INFO    daemon.NodeConfigurator.enableMasterBus commands output {"output": "0000:1d:00.0 @04 0106\n"}
      2020-12-16T12:46:48.054Z        INFO    daemon.NodeConfigurator.enableMasterBus MasterBus set   {"pci": "0000:1d:00.0", "output": "0000:1d:00.0 @04 0106\n"}
      2020-12-16T12:46:48.160Z        INFO    daemon.drainhelper.Run()        worker function - end   {"performUncordon": true}

  3. カードの FEC 設定を確認します。

    $ oc get sriovfecnodeconfig node1 -o yaml

    出力例

    status:
        conditions:
        - lastTransitionTime: "2020-12-15T17:19:37Z"
          message: Configured successfully
          observedGeneration: 1
          reason: ConfigurationSucceeded
          status: "True"
          type: Configured
        inventory:
          sriovAccelerators:
          - deviceID: 0d8f 1
            driver: pci-pf-stub
            maxVirtualFunctions: 8
            pciAddress: 0000:1d:00.0
            vendorID: "8086"
          virtualFunctions:
          - deviceID: 0d90 2
            driver: vfio-pci
            pciAddress: 0000:1d:00.1
          - deviceID: 0d90
            driver: vfio-pci
            pciAddress: 0000:1d:00.2

    1
    0d8f は、FEC デバイスの deviceID 物理機能です。
    2
    0d90 は、FEC デバイスの deviceID 仮想機能です。