16.4.4. 为 Intel vRAN Dedicated Accelerator ACC100 配置 SR-IOV-FEC Operator

编程 Intel vRAN Dedicated 加速器 ACC100 会公开用于在 vRAN 工作负载中加速转发错误 (FEC) 的单根 I/O 虚拟化 (SRIOV) 虚拟功能 (VF) 设备。Intel vRAN Dedicated 加速器 ACC100 加速了 4G 和 5G 虚拟化广播访问网络 (vRAN) 工作负载。这会增加一个商用的现成平台的总体计算能力。此设备也称为 Mount Bryce。

SR-IOV-FEC Operator 处理用于在 vRAN L1 应用程序中加快 FEC 进程的正向错误修正 (FEC) 设备的管理。

配置 SR-IOV-FEC Operator 涉及以下任务:

  • 为 FEC 设备创建虚拟功能 (VF)
  • 将 VF 绑定到适当的驱动程序
  • 为 4G 或 5G 部署中所需的功能配置 VF 队列

转发错误更正 (FEC) 的角色是更正传输错误,其中消息中的某些位可以丢失或垃圾化。由于传输媒体中的批注、干扰或信号强度较低,消息可能会丢失或被破坏。如果没有 FEC,则必须重新发送已垃圾化的消息,以添加到网络负载并影响吞吐量和延迟。

先决条件

  • Intel FPGA ACC100 5G/4G 卡
  • 使用 OpenNESS Operator 为 Wireless FEC 加速器安装的节点
  • 在 BIOS 中为节点启用全局 SR-IOV 和 VT-d 设置
  • 使用 Performance Addon Operator 配置 RT 内核
  • 以具有 cluster-admin 权限的用户身份登录

流程

  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

  3. 验证 sriov-fec pod 是否正在运行:

    $  oc get pods

    输出示例

    NAME                                            READY       STATUS      RESTARTS    AGE
    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

    • 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 加速器设备的物理功能 (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:af:00.0 1
             vendorID: "8086"
             virtualFunctions: [] 2

    1
    此字段表示卡的 PCI 地址。
    2
    此字段显示虚拟功能为空。
  6. 在 FEC 设备中配置虚拟功能和队列组的数量:

    1. 创建以下自定义资源(CR),并将 YAML 保存到 sriovfec_acc100cr.yaml 文件中:

      注意

      本例为 5G 配置 ACC100 8/8 队列组,为 Uplink 配置 4 个队列组,另一个 4 个队列组用于 Downlink。

      apiVersion: sriovfec.intel.com/v1
      kind: SriovFecClusterConfig
      metadata:
        name: config 1
      spec:
        nodes:
         - nodeName: node1 2
           physicalFunctions:
             - pciAddress: 0000:af:00.0 3
               pfDriver: "pci-pf-stub"
               vfDriver: "vfio-pci"
               vfAmount: 16 4
               bbDevConfig:
                 acc100:
                   # Programming mode: 0 = VF Programming, 1 = PF Programming
                   pfMode: false
                   numVfBundles: 16
                   maxQueueSize: 1024
                   uplink4G:
                     numQueueGroups: 0
                     numAqsPerGroups: 16
                     aqDepthLog2: 4
                   downlink4G:
                    numQueueGroups: 0
                    numAqsPerGroups: 16
                    aqDepthLog2: 4
                   uplink5G:
                    numQueueGroups: 4
                    numAqsPerGroups: 16
                    aqDepthLog2: 4
                   downlink5G:
                    numQueueGroups: 4
                    numAqsPerGroups: 16
                    aqDepthLog2: 4
      1
      为 CR 对象指定一个名称。可以指定的唯一名称是 config
      2
      指定节点名称。
      3
      指定 SR-IOV-FEC Operator 将要安装的卡的 PCI 地址。
      4
      指定要创建的虚拟功能数量。对于 Intel vRAN Dedicated 加速器 ACC100,创建所有 16 个 VF。
      注意

      该卡配置为提供最多 8 个队列组,每个组最多有 16 个队列。队列组可以划分到分配给 5G 和 4G 的组,以及 Uplink 和 Downlink。Intel vRAN Dedicated 加速器 ACC100 可以配置为:

      • 仅 4G 或 5G
      • 同时 4G 和 5G

      每个配置的 VF 都可以访问所有队列。每个队列组都具有不同的优先级级别。对给定队列组的请求从应用级别发出,即 vRAN 应用利用 FEC 设备。

    2. 应用 CR:

      $ oc apply -f sriovfec_acc100cr.yaml

      应用 CR 后,SR-IOV FEC 守护进程将开始配置 FEC 设备。

验证

  1. 检查状态:

    $ oc get sriovfecclusterconfig config -o yaml

    输出示例

    status:
        conditions:
        - lastTransitionTime: "2021-03-19T11:46:22Z"
          message: Configured successfully
          observedGeneration: 1
          reason: Succeeded
          status: "True"
          type: Configured
        inventory:
          sriovAccelerators:
          - deviceID: 0d5c
            driver: pci-pf-stub
            maxVirtualFunctions: 16
            pciAddress: 0000:af:00.0
            vendorID: "8086"
            virtualFunctions:
            - deviceID: 0d5d
              driver: vfio-pci
              pciAddress: 0000:b0:00.0
            - deviceID: 0d5d
              driver: vfio-pci
              pciAddress: 0000:b0:00.1
            - deviceID: 0d5d
              driver: vfio-pci
              pciAddress: 0000:b0:00.2
            - deviceID: 0d5d
              driver: vfio-pci
              pciAddress: 0000:b0:00.3
            - deviceID: 0d5d
              driver: vfio-pci
              pciAddress: 0000:b0:00.4

  2. 检查日志:

    1. 确定 SR-IOV 守护进程的 pod 名称:

      $ oc get po -o wide | grep sriov-fec-daemonset | grep node1

      输出示例

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

    2. 查看日志:

      $ oc logs sriov-fec-daemonset-kqqs6

      输出示例

      {"level":"Level(-2)","ts":1616794345.4786215,"logger":"daemon.drainhelper.cordonAndDrain()","msg":"node drained"}
      {"level":"Level(-4)","ts":1616794345.4786265,"logger":"daemon.drainhelper.Run()","msg":"worker function - start"}
      {"level":"Level(-4)","ts":1616794345.5762916,"logger":"daemon.NodeConfigurator.applyConfig","msg":"current node status","inventory":{"sriovAccelerat
      ors":[{"vendorID":"8086","deviceID":"0b32","pciAddress":"0000:20:00.0","driver":"","maxVirtualFunctions":1,"virtualFunctions":[]},{"vendorID":"8086"
      ,"deviceID":"0d5c","pciAddress":"0000:af:00.0","driver":"","maxVirtualFunctions":16,"virtualFunctions":[]}]}}
      {"level":"Level(-4)","ts":1616794345.5763638,"logger":"daemon.NodeConfigurator.applyConfig","msg":"configuring PF","requestedConfig":{"pciAddress":"
      0000:af:00.0","pfDriver":"pci-pf-stub","vfDriver":"vfio-pci","vfAmount":2,"bbDevConfig":{"acc100":{"pfMode":false,"numVfBundles":16,"maxQueueSize":1
      024,"uplink4G":{"numQueueGroups":4,"numAqsPerGroups":16,"aqDepthLog2":4},"downlink4G":{"numQueueGroups":4,"numAqsPerGroups":16,"aqDepthLog2":4},"uplink5G":{"numQueueGroups":0,"numAqsPerGroups":16,"aqDepthLog2":4},"downlink5G":{"numQueueGroups":0,"numAqsPerGroups":16,"aqDepthLog2":4}}}}}
      {"level":"Level(-4)","ts":1616794345.5774765,"logger":"daemon.NodeConfigurator.loadModule","msg":"executing command","cmd":"/usr/sbin/chroot /host/ modprobe pci-pf-stub"}
      {"level":"Level(-4)","ts":1616794345.5842702,"logger":"daemon.NodeConfigurator.loadModule","msg":"commands output","output":""}
      {"level":"Level(-4)","ts":1616794345.5843055,"logger":"daemon.NodeConfigurator.loadModule","msg":"executing command","cmd":"/usr/sbin/chroot /host/ modprobe vfio-pci"}
      {"level":"Level(-4)","ts":1616794345.6090655,"logger":"daemon.NodeConfigurator.loadModule","msg":"commands output","output":""}
      {"level":"Level(-2)","ts":1616794345.6091156,"logger":"daemon.NodeConfigurator","msg":"device's driver_override path","path":"/sys/bus/pci/devices/0000:af:00.0/driver_override"}
      {"level":"Level(-2)","ts":1616794345.6091807,"logger":"daemon.NodeConfigurator","msg":"driver bind path","path":"/sys/bus/pci/drivers/pci-pf-stub/bind"}
      {"level":"Level(-2)","ts":1616794345.7488534,"logger":"daemon.NodeConfigurator","msg":"device's driver_override path","path":"/sys/bus/pci/devices/0000:b0:00.0/driver_override"}
      {"level":"Level(-2)","ts":1616794345.748938,"logger":"daemon.NodeConfigurator","msg":"driver bind path","path":"/sys/bus/pci/drivers/vfio-pci/bind"}
      {"level":"Level(-2)","ts":1616794345.7492096,"logger":"daemon.NodeConfigurator","msg":"device's driver_override path","path":"/sys/bus/pci/devices/0000:b0:00.1/driver_override"}
      {"level":"Level(-2)","ts":1616794345.7492566,"logger":"daemon.NodeConfigurator","msg":"driver bind path","path":"/sys/bus/pci/drivers/vfio-pci/bind"}
      {"level":"Level(-4)","ts":1616794345.74968,"logger":"daemon.NodeConfigurator.applyConfig","msg":"executing command","cmd":"/sriov_workdir/pf_bb_config ACC100 -c /sriov_artifacts/0000:af:00.0.ini -p 0000:af:00.0"}
      {"level":"Level(-4)","ts":1616794346.5203931,"logger":"daemon.NodeConfigurator.applyConfig","msg":"commands output","output":"Queue Groups: 0 5GUL, 0 5GDL, 4 4GUL, 4 4GDL\nNumber of 5GUL engines 8\nConfiguration in VF mode\nPF ACC100 configuration complete\nACC100 PF [0000:af:00.0] configuration complete!\n\n"}
      {"level":"Level(-4)","ts":1616794346.520459,"logger":"daemon.NodeConfigurator.enableMasterBus","msg":"executing command","cmd":"/usr/sbin/chroot /host/ setpci -v -s 0000:af:00.0 COMMAND"}
      {"level":"Level(-4)","ts":1616794346.5458736,"logger":"daemon.NodeConfigurator.enableMasterBus","msg":"commands output","output":"0000:af:00.0 @04 = 0142\n"}
      {"level":"Level(-4)","ts":1616794346.5459251,"logger":"daemon.NodeConfigurator.enableMasterBus","msg":"executing command","cmd":"/usr/sbin/chroot /host/ setpci -v -s 0000:af:00.0 COMMAND=0146"}
      {"level":"Level(-4)","ts":1616794346.5795262,"logger":"daemon.NodeConfigurator.enableMasterBus","msg":"commands output","output":"0000:af:00.0 @04 0146\n"}
      {"level":"Level(-2)","ts":1616794346.5795407,"logger":"daemon.NodeConfigurator.enableMasterBus","msg":"MasterBus set","pci":"0000:af:00.0","output":"0000:af:00.0 @04 0146\n"}
      {"level":"Level(-4)","ts":1616794346.6867144,"logger":"daemon.drainhelper.Run()","msg":"worker function - end","performUncordon":true}
      {"level":"Level(-4)","ts":1616794346.6867719,"logger":"daemon.drainhelper.Run()","msg":"uncordoning node"}
      {"level":"Level(-4)","ts":1616794346.6896322,"logger":"daemon.drainhelper.uncordon()","msg":"starting uncordon attempts"}
      {"level":"Level(-2)","ts":1616794346.69735,"logger":"daemon.drainhelper.uncordon()","msg":"node uncordoned"}
      {"level":"Level(-4)","ts":1616794346.6973662,"logger":"daemon.drainhelper.Run()","msg":"cancelling the context to finish the leadership"}
      {"level":"Level(-4)","ts":1616794346.7029872,"logger":"daemon.drainhelper.Run()","msg":"stopped leading"}
      {"level":"Level(-4)","ts":1616794346.7030034,"logger":"daemon.drainhelper","msg":"releasing the lock (bug mitigation)"}
      {"level":"Level(-4)","ts":1616794346.8040674,"logger":"daemon.updateInventory","msg":"obtained inventory","inv":{"sriovAccelerators":[{"vendorID":"8086","deviceID":"0b32","pciAddress":"0000:20:00.0","driver":"","maxVirtualFunctions":1,"virtualFunctions":[]},{"vendorID":"8086","deviceID":"0d5c","pciAddress":"0000:af:00.0","driver":"pci-pf-stub","maxVirtualFunctions":16,"virtualFunctions":[{"pciAddress":"0000:b0:00.0","driver":"vfio-pci","deviceID":"0d5d"},{"pciAddress":"0000:b0:00.1","driver":"vfio-pci","deviceID":"0d5d"}]}]}}
      {"level":"Level(-4)","ts":1616794346.9058325,"logger":"daemon","msg":"Update ignored, generation unchanged"}
      {"level":"Level(-2)","ts":1616794346.9065044,"logger":"daemon.Reconcile","msg":"Reconciled","namespace":"vran-acceleration-operators","name":"pg-itengdvs02r.altera.com"}

  3. 检查卡的 FEC 配置:

    $ oc get sriovfecnodeconfig node1 -o yaml

    输出示例

    status:
        conditions:
        - lastTransitionTime: "2021-03-19T11:46:22Z"
          message: Configured successfully
          observedGeneration: 1
          reason: Succeeded
          status: "True"
          type: Configured
        inventory:
          sriovAccelerators:
          - deviceID: 0d5c 1
            driver: pci-pf-stub
            maxVirtualFunctions: 16
            pciAddress: 0000:af:00.0
            vendorID: "8086"
            virtualFunctions:
            - deviceID: 0d5d 2
              driver: vfio-pci
              pciAddress: 0000:b0:00.0
            - deviceID: 0d5d
              driver: vfio-pci
              pciAddress: 0000:b0:00.1
            - deviceID: 0d5d
              driver: vfio-pci
              pciAddress: 0000:b0:00.2
            - deviceID: 0d5d
              driver: vfio-pci
              pciAddress: 0000:b0:00.3
            - deviceID: 0d5d
              driver: vfio-pci
              pciAddress: 0000:b0:00.4

    1
    0d5c 是 FEC 设备的物理功能的 deviceID
    2
    0d5d 是 FEC 设备的虚拟功能的 deviceID