16.3. 为 Intel FPGA PAC N3000 编程 OpenNESS Operator
当 Intel FPGA PAC N3000 使用 vRAN 5G 位流编程时,硬件会使用 vRAN 5G 位流公开 Intel FPGA PAC N3000。此位流公开了用于在 vRAN 工作负载中加速 FEC 的单根 I/O 虚拟化 (SR-IOV) 虚拟功能 (VF) 设备。
作为集群管理员,您可以使用 OpenShift Container Platform CLI 或 Web 控制台为 Intel FPGA PAC N3000 安装 OpenNESS Operator。
16.3.1. 使用 vRAN 位流编程 N3000
作为集群管理员,您可以使用 vRAN 5G 位流对 Intel FPGA PAC N3000 进行编程。此位流公开了用于在 vRAN 工作负载中加快向前更正 (FEC) 的单根 I/O 虚拟化 (SR-IOV) 虚拟功能 (VF) 设备。
转发错误更正 (FEC) 的角色是更正传输错误,其中消息中的某些位可以丢失或垃圾化。由于传输媒体中的批注、干扰或信号强度较低,消息可能会丢失或被破坏。如果没有 FEC,被破坏的信息需要被重新发送,并添加到网络负载中从而会影响吞吐量和延迟。
先决条件
- Intel FPGA PAC N3000 卡
- 带有 RT 内核配置的 Performance Addon Operator
- 使用 OpenNESS Operator 为 Intel FPGA PAC N3000 安装的节点
以具有
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) 驱动程序 -
fpgainfo-exporter
为 Prometheus 提供 N3000 遥测数据 -
N3000-controller-manager
将 N3000Node CR 应用到集群,并管理所有操作对象容器 -
N3000-daemonset
是主 worker 应用程序。它监控每个节点的 CR 中的更改,并操作更改。在此守护进程中实施的逻辑负责更新卡的 FPGA 用户镜像和 NIC 固件。它还负责排空节点,并在更新需要时将其从委托中删除。 -
N3000-discovery
发现安装 N3000 加速器设备,并在设备存在时标记 worker 节点
-
获取包含 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"
保存当前的
bitstreamId
、PCIAddr
、名称和deviceId
(没有 "0x" padding)。$ 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 守护进程使用开放程序加速引擎 (OPAE) 工具更新 FPGA 用户位流并重置 PCI 设备。FPGA 用户位流的更新每个卡最多需要 40 分钟。对于多个节点上的编程卡,在一个时间点上只在一个节点上进行编程。
应用更新以使用位流开始对卡编程:
$ oc apply -f n3000-cluster.yaml
N3000 守护进程在置备了适当的 5G FEC 用户位流后启动位流编程,如
20ww27.5-2x2x25G-5GLDPC-v1.6.1-3.0.0_unsigned.bin
,在本例中创建 CR 后。检查状态:
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 设备或设备会被重新载入。Wireless FEC 加速器的 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 设备的物理功能。