16.3. Intel FPGA PAC N3000용 OpenNESS Operator 프로그래밍

Intel FPGA PAC N3000이 vRAN 5G 비트스트림으로 프로그래밍되면 하드웨어는 vRAN 5G 비트스트림으로 Intel FPGA PAC N3000을 노출합니다. 이 비트스트림은 vRAN 워크로드에서 FEC를 가속화하는 데 사용되는 SR-IOV(Single Root I/O Virtualization) VF(가상 기능) 장치를 노출합니다.

클러스터 관리자는 OpenShift Container Platform CLI 또는 웹 콘솔을 사용하여 Intel FPGA PAC N3000에 대한 OpenNESS Operator를 설치할 수 있습니다.

16.3.1. vRAN 비트스트림으로 N3000 프로그래밍

클러스터 관리자는 vRAN 5G 비트스트림을 사용하여 Intel FPGA PAC N3000을 프로그래밍할 수 있습니다. 이 비트스트림은 vRAN 워크로드에서 전달 오류 수정(FEC)을 가속화하는 데 사용되는 SR-IOV(Single Root I/O Virtualization) VF(가상 기능) 장치를 노출합니다.

FEC(전달 오류 수정)의 역할은 메시지의 특정 비트를 손실하거나 무시할 수 있는 전송 오류를 수정하는 것입니다. 전송 미디어, 간섭 또는 신호 강도의 노이즈로 인해 메시지를 손실하거나 숨길 수 있습니다. FEC가 없으면 가파른 메시지가 다시 전송되어 네트워크 부하에 추가하고 처리량과 대기 시간에 모두 영향을 미칩니다.

사전 요구 사항

  • Intel FPGA PAC N3000 카드
  • RT 커널 구성을 사용한 Performance Addon Operator
  • Intel FPGA PAC N3000용 OpenNESS Operator와 함께 설치된 노드 또는 노드
  • cluster-admin 권한이 있는 사용자로 로그인합니다.

    참고

    모든 명령은 vran-acceleration-operators 네임스페이스에서 실행됩니다.

절차

  1. vran-acceleration-operators 프로젝트로 변경합니다.

    $ oc project vran-acceleration-operators
  2. 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

    다음 섹션에서는 설치된 Pod에 대한 정보를 제공합니다.

    • FPGA-driver-daemonset 는 필요한 OPAE(Open Programmable Accelerator Engine) 드라이버를 제공하고 로드합니다.
    • fpgainfo-exporter 는 Prometheus에 N3000 Telemetry 데이터를 제공합니다.
    • n 3000-controller-manager 가 N3000Node CR을 클러스터에 적용하고 모든 피연산자 컨테이너를 관리합니다.
    • N3000-daemonset 은 주요 작업자 애플리케이션입니다. 각 노드의 CR의 변경 사항을 모니터링하고 변경 사항에 적용됩니다. 이 데몬에 구현된 논리는 카드의 FPGA 사용자 이미지 및 NIC 펌웨어를 업데이트하는 작업을 담당합니다. 업데이트에 필요한 경우 노드를 드레이닝하고 커미션을 해제합니다.
    • N3000-discovery 가 설치된 N3000 Accelerator 장치를 검색하고 장치가 있는 경우 작업자 노드에 레이블을 지정합니다.
  3. Intel FPGA PAC N3000 카드가 포함된 모든 노드를 가져옵니다.

    $ oc get n3000node

    출력 예

    NAME                       FLASH
    node1                      NotRequested

  4. 각 노드의 카드 정보를 가져옵니다.

    $ oc get n3000node node1 -o yaml

    출력 예

    status:
      conditions:
      - lastTransitionTime: "2020-12-15T17:09:26Z"
        message: Inventory up to date
        observedGeneration: 1
        reason: NotRequested
        status: "False"
        type: Flashed
      fortville:
      - N3000PCI: 0000:1b:00.0
        NICs:
        - MAC: 64:4c:36:11:1b:a8
          NVMVersion: 7.00 0x800052b0 0.0.0
          PCIAddr: 0000:1a:00.0
          name: Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
        - MAC: 64:4c:36:11:1b:a9
          NVMVersion: 7.00 0x800052b0 0.0.0
          PCIAddr: 0000:1a:00.1
          name: Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
        - MAC: 64:4c:36:11:1b:ac
          NVMVersion: 7.00 0x800052b0 0.0.0
          PCIAddr: 0000:1c:00.0
          name: Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
        - MAC: 64:4c:36:11:1b:ad
          NVMVersion: 7.00 0x800052b0 0.0.0
          PCIAddr: 0000:1c:00.1
          name: Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
      fpga:
      - PCIAddr: 0000:1b:00.0 1
        bitstreamId: "0x23000410010310" 2
        bitstreamVersion: 0.2.3
        deviceId: "0x0b30"

    1
    PCIAddr 필드는 카드의 PCI 주소를 나타냅니다.
    2
    bitstreamId 필드는 현재 플래시로 저장된 비트스트림을 나타냅니다.
  5. "0x" 패딩 없이 현재 bitstreamId,PCIAddr, 이름 및 deviceId 를 저장합니다.

    $ oc get n3000node -o json
  6. Intel FPGA PAC N3000 카드의 사용자 비트스트림을 업데이트합니다.

    1. 다음 예와 같이 n3000-cluster.yaml이라는 파일을 생성하여 프로그래밍할 N3000 클러스터 리소스를 정의합니다.

      apiVersion: fpga.intel.com/v1
      kind: N3000Cluster
      metadata:
          name: n3000 1
          namespace: vran-acceleration-operators
      spec:
          nodes:
            - nodeName: "node1" 2
              fpga:
                - userImageURL: "http://10.10.10.122:8000/pkg/20ww27.5-2x2x25G-5GLDPC-v1.6.1-3.0.0_unsigned.bin" 3
                  PCIAddr: "0000:1b:00.0" 4
                  checksum: "0b0a87b974d35ea16023ceb57f7d5d9c" 5
      1
      이름을 지정합니다. 이름은 n3000 이어야 합니다.
      2
      프로그램할 노드를 지정합니다.
      3
      사용자 bitstream의 URL을 지정합니다. 이 비트스트림 파일은 HTTP 또는 HTTPS 서버에서 액세스할 수 있어야 합니다.
      4
      프로그램할 카드의 PCI 주소를 지정합니다.
      5
      userImageURL 필드에 지정된 비트 스트림의 MD5 체크섬을 지정합니다.

      N3000 데몬은 Open Programmable Acceleration Engine(OPAE) 도구를 사용하여 FPGA 사용자 비트스트림을 업데이트하고 PCI 장치를 재설정합니다. FPGA 사용자 비트스트림 업데이트에는 카드당 최대 40분이 걸릴 수 있습니다. 여러 노드의 프로그래밍 카드의 경우 프로그래밍은 한 번에 하나의 노드씩 실행됩니다.

    2. 비트스트림으로 카드 프로그래밍을 시작하려면 업데이트를 적용합니다.

      $ oc apply -f n3000-cluster.yaml

      N3000 데몬은 20ww27.5-2x2x25G-5GLDPC-v1.6.1-3.0.0_unsigned.bin과 같이 적절한 5G FEC 사용자 비트스트림이 프로비저닝된 후 비트스트림 프로그래밍을 시작합니다.

    3. 상태를 확인합니다.

      oc get n3000node

      출력 예

      NAME             FLASH
      node1            InProgress

  7. 로그를 확인합니다.

    1. N3000 데몬의 Pod 이름을 확인합니다.

      $ oc get pod -o wide | grep n3000-daemonset | grep node1

      출력 예

      n3000-daemonset-5k55l              1/1     Running   0          15d

    2. 로그를 확인합니다.

      $ oc logs n3000-daemonset-5k55l

      출력 예

      ...
      {"level":"info","ts":1608054338.8866854,"logger":"daemon.drainhelper.cordonAndDrain()","msg":"node drained"}
      {"level":"info","ts":1608054338.8867319,"logger":"daemon.drainhelper.Run()","msg":"worker function - start"}
      {"level":"info","ts":1608054338.9003832,"logger":"daemon.fpgaManager.ProgramFPGAs","msg":"Start program","PCIAddr":"0000:1b:00.0"}
      {"level":"info","ts":1608054338.9004142,"logger":"daemon.fpgaManager.ProgramFPGA","msg":"Starting","pci":"0000:1b:00.0"}
      {"level":"info","ts":1608056309.9367146,"logger":"daemon.fpgaManager.ProgramFPGA","msg":"Program FPGA completed, start new power cycle N3000 ...","pci":"0000:1b:00.0"}
      {"level":"info","ts":1608056333.3528838,"logger":"daemon.drainhelper.Run()","msg":"worker function - end","performUncordon":true}
      ...

      로그 파일은 다음과 같은 이벤트 흐름을 나타냅니다.

      • 비트스트림을 다운로드하고 검증합니다.
      • 노드가 드레인되어 이 시간 동안 실행할 수 있는 워크로드가 없습니다.
      • 플래시가 시작됨:

        • 비트스트림은 카드로 깜박여집니다.
        • 비트스트림이 적용됩니다.
      • 플래시를 완료하면 노드 또는 노드의 PCI 장치 또는 장치가 다시 로드됩니다. 이제 FEC Accelerator용 OpenNESS SR-IOV Operator에서 새로 깜빡이는 장치 또는 장치를 찾을 수 있습니다.

검증

  1. FPGA 사용자 비트스트림 업데이트가 완료된 후 상태를 확인합니다.

    oc get n3000node

    출력 예

    NAME             FLASH
    node1            Succeeded

  2. 카드의 비트 스트림 ID가 변경되었는지 확인합니다.

    oc get n3000node node1 -o yaml

    출력 예

    status:
          conditions:
              - lastTransitionTime: "2020-12-15T18:18:53Z"
                message: Flashed successfully 1
                observedGeneration: 2
                reason: Succeeded
                status: "True"
                type: Flashed
          fortville:
          - N3000PCI: 0000:1b:00.0
            NICs:
            - MAC: 64:4c:36:11:1b:a8
              NVMVersion: 7.00 0x800052b0 0.0.0
              PCIAddr: 0000:1a:00.0
              name: Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
            - MAC: 64:4c:36:11:1b:a9
              NVMVersion: 7.00 0x800052b0 0.0.0
              PCIAddr: 0000:1a:00.1
              name: Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
            - MAC: 64:4c:36:11:1b:ac
              NVMVersion: 7.00 0x800052b0 0.0.0
              PCIAddr: 0000:1c:00.0
              name: Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
            - MAC: 64:4c:36:11:1b:ad
              NVMVersion: 7.00 0x800052b0 0.0.0
              PCIAddr: 0000:1c:00.1
              name: Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
          fpga:
          - PCIAddr: 0000:1b:00.0 2
            bitstreamId: "0x2315842A010601" 3
            bitstreamVersion: 0.2.3
            deviceId: "0x0b30" 4

    1
    메시지 필드는 장치가 성공적으로 깜빡임을 나타냅니다.
    2
    PCIAddr 필드는 카드의 PCI 주소를 나타냅니다.
    3
    bitstreamId 필드는 업데이트된 비트스트림 ID를 나타냅니다.
    4
    deviceID 필드는 시스템에 노출된 카드 내의 비트스트림의 장치 ID를 나타냅니다.
  3. 노드에서 FEC PCI 장치를 확인합니다.

    1. 노드 구성이 올바르게 적용되었는지 확인합니다.

      $ oc debug node/node1

      예상 출력

      Starting pod/<node-name>-debug ...
      To use host binaries, run `chroot /host`
      
      Pod IP: <ip-address>
      If you don't see a command prompt, try pressing enter.
      
      sh-4.4#

    2. 노드 파일 시스템을 사용할 수 있는지 확인합니다.

      sh-4.4# chroot /host

      예상 출력

      sh-4.4#

    3. 시스템의 액셀러레이터와 연결된 PCI 장치를 나열합니다.

      $ lspci | grep accelerators

      예상 출력

      1b:00.0 Processing accelerators: Intel Corporation Device 0b30
      1d:00.0 Processing accelerators: Intel Corporation Device 0d8f (rev 01)

      FPGA에 속하는 장치는 출력에 보고됩니다. 장치 ID 0b30 은 카드를 프로그래밍하는 데 사용되는 RSU 인터페이스이며 0d8f 는 새로 프로그래밍된 5G 장치의 물리적 기능입니다.