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
네임스페이스에서 실행됩니다.
절차
vran-acceleration-operators
프로젝트로 변경합니다.$ oc project vran-acceleration-operators
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 장치를 검색하고 장치가 있는 경우 작업자 노드에 레이블을 지정합니다.
-
Intel FPGA PAC N3000 카드가 포함된 모든 노드를 가져옵니다.
$ oc get n3000node
출력 예
NAME FLASH node1 NotRequested
각 노드의 카드 정보를 가져옵니다.
$ 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"
"0x" 패딩 없이 현재
bitstreamId
,PCIAddr
, 이름 및deviceId
를 저장합니다.$ oc get n3000node -o json
Intel FPGA PAC N3000 카드의 사용자 비트스트림을 업데이트합니다.
다음 예와 같이
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
N3000 데몬은 Open Programmable Acceleration Engine(OPAE) 도구를 사용하여 FPGA 사용자 비트스트림을 업데이트하고 PCI 장치를 재설정합니다. FPGA 사용자 비트스트림 업데이트에는 카드당 최대 40분이 걸릴 수 있습니다. 여러 노드의 프로그래밍 카드의 경우 프로그래밍은 한 번에 하나의 노드씩 실행됩니다.
비트스트림으로 카드 프로그래밍을 시작하려면 업데이트를 적용합니다.
$ oc apply -f n3000-cluster.yaml
N3000 데몬은
20ww27.5-2x2x25G-5GLDPC-v1.6.1-3.0.0_unsigned.bin과 같이 적절한 5G
FEC 사용자 비트스트림이 프로비저닝된 후 비트스트림 프로그래밍을 시작합니다.상태를 확인합니다.
oc get n3000node
출력 예
NAME FLASH node1 InProgress
로그를 확인합니다.
N3000 데몬의 Pod 이름을 확인합니다.
$ oc get pod -o wide | grep n3000-daemonset | grep node1
출력 예
n3000-daemonset-5k55l 1/1 Running 0 15d
로그를 확인합니다.
$ 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에서 새로 깜빡이는 장치 또는 장치를 찾을 수 있습니다.
검증
FPGA 사용자 비트스트림 업데이트가 완료된 후 상태를 확인합니다.
oc get n3000node
출력 예
NAME FLASH node1 Succeeded
카드의 비트 스트림 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
노드에서 FEC PCI 장치를 확인합니다.
노드 구성이 올바르게 적용되었는지 확인합니다.
$ 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#
노드 파일 시스템을 사용할 수 있는지 확인합니다.
sh-4.4# chroot /host
예상 출력
sh-4.4#
시스템의 액셀러레이터와 연결된 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 장치의 물리적 기능입니다.