16.4.4. Intel vRAN Dedicated Accelerator ACC100에 대한 SR-IOV-FEC Operator 구성

Intel vRAN Dedicated Accelerator ACC100을 프로그래밍하면 vRAN 워크로드에서 FEC를 가속화하는 데 사용되는 SRIOV(Single Root I/O Virtualization) VF(가상 기능) 장치가 표시됩니다. Intel vRAN Dedicated Accelerator ACC100은 4G 및 5G VRAN(가상화된 라디오 액세스 네트워크) 업무 부하를 가속화합니다. 그 결과 상용 상용 플랫폼에서의 전반적인 컴퓨팅 용량이 증가합니다. 이 장치는 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 카드
  • FEC Accelerator용 OpenNESS Operator와 함께 설치된 노드 또는 노드
  • 노드의 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의 사양을 입력으로 사용하고 검색된 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개 큐 그룹 및 Downlink에 대한 다른 4개 큐 그룹을 구성합니다.

      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 Accelerator ACC100의 경우 16 VF를 모두 생성합니다.
      참고

      이 카드는 그룹당 최대 16개의 큐가 있는 최대 8개의 큐 그룹을 제공하도록 구성됩니다. 큐 그룹은 5G 및 4G 및 Uplink 및 Downlink에 할당된 그룹 간에 나눌 수 있습니다. Intel vRAN Dedicated Accelerator ACC100은 다음을 위해 구성할 수 있습니다.

      • 4G 또는 5G 전용
      • 4G 및 5G 동시에

      구성된 각 VF는 모든 큐에 액세스할 수 있습니다. 각 큐 그룹에는 고유한 우선 순위 수준이 있습니다. 지정된 큐 그룹에 대한 요청은 FEC 장치를 활용하는 vRAN 애플리케이션인 애플리케이션 수준에서 이루어집니다.

    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 가상 기능입니다.