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(Programming)용 OpenNESS Operator와 함께 설치된 노드 또는 노드
  • FEC Accelerator용 OpenNESS Operator와 함께 설치된 노드 또는 노드
  • 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. N3000sriov-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 는 필요한 OPAE(Open Programmable Accelerator Engine) 드라이버를 제공하고 로드합니다.
    • fpgainfo-exporter 는 Prometheus에 N3000 Telemetry 데이터를 제공합니다.
    • n 3000-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의 사양을 입력으로 사용하고 검색된 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.1d.00.0 1
              vendorID: "8086"
              virtualFunctions: [] 2

    1
    이 필드는 카드의 PCI 주소를 나타냅니다.
    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 주소를 지정합니다.
      3
      가상 함수 수를 지정합니다. 두 개의 가상 함수를 만듭니다.
      4
      vf0 에서 16개의 버스(downlink 및 uplink)를 사용하여 대기열 한 개를 만듭니다.
      5
      vf1 에서 16개의 버스(downlink 및 uplink)로 하나의 대기열을 만듭니다.
      참고

      Intel PAC N3000 for vRAN Acceleration의 경우 사용자는 최대 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 가상 기능입니다.