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 커널
절차
vran-acceleration-operators
프로젝트로 변경합니다.$ oc project vran-acceleration-operators
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
N3000
및sriov-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를 구성합니다.
-
지원되는 vRAN FEC 액셀러레이터 장치 중 하나를 포함하는 모든 노드를 검색합니다.
$ oc get sriovfecnodeconfig
출력 예
NAME CONFIGURED node1 Succeeded
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
원하는 설정으로 FEC 장치를 구성합니다.
다음 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
참고Intel PAC N3000 for vRAN Acceleration의 경우 사용자는 최대 8개의 VF 장치를 생성할 수 있습니다. 각 FEC PF 장치는 구성할 총 64개 대기열, 업링크는 32개 대기열, 다운링크는 32개 대기열을 제공합니다. 일반적으로 큐는 VF 전체에 균등하게 배포됩니다.
CR을 적용합니다.
$ oc apply -f sriovfec_n3000_cr.yaml
CR을 적용하면 SR-IOV FEC 데몬이 FEC 장치 구성을 시작합니다.
검증
상태를 확인합니다.
$ 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
로그를 확인합니다.
SR-IOV 데몬 Pod의 이름을 확인합니다.
$ oc get pod | grep sriov-fec-daemonset
출력 예
sriov-fec-daemonset-kqqs6 1/1 Running 0 19h
로그를 확인합니다.
$ 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}
카드의 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