N3000 FPGA Forward Error CorrectionΒΆ
The Intel N3000 FPGA also supports FEC capabilities.
The Intel N3000 FPGA FEC capabilities are exposed as a PCI device that may be used by a DPDK enabled container application to perform accelerated 5G LDPC encoding, and decoding operations.
Once the FPGA device is programmed, the FEC with device ID 0xd8f is displayed in the list of host devices by running the following command:
~(keystone_admin)$ system host-device-list worker-0
+-------+----------+--------+--------+--------+------------+-------------+----------------------+-----------+---------+
| name | address | class | vendor | device | class name | vendor name | device name | numa_node | enabled |
| | | id | id | id | | | | | |
+-------+----------+--------+--------+--------+------------+-------------+----------------------+-----------+---------+
| pci_0 | 0000:0c: | 030000 | 102b | 0522 | VGA | Matrox | MGA G200e [Pilot] | 0 | True |
| 000_0 | 00.0 | | | | compatible | Electronics | ServerEngines (SEP1) | | |
| c_00_ | | | | | controller | Systems Ltd | | | |
| 0 | | | | | | | | | |
| | | | | | | | | | |
|pci_0 | 0000:b7: | 120000 | 8086 | 0d8f | Processing |Intel | Device 0d8f | 1 | True |
|000_b7 | 00.0 | | | |accelerators|Corporation | | | |
|_00_0 | | | | | | | | | |
+-------+----------+--------+--------+--------+------------+-------------+----------------------+-----------+---------|
To enable the FEC device for SR-IOV interfaces, it must be modified in order to set the number of virtual functions (VF), and the appropriate userspace drivers for the physical function (PF), and VFs.
The following PF and VF drivers are supported:
PF driver: igb_uio
VF driver: igb_uio, vfio
For example, run the following commands:
~(keystone_admin)$ system host-lock worker-0
~(keystone_admin)$ system host-device-modify <worker> <name> --driver <vf driver> --vf-driver <vf driver> -N <number_of_vfs>
~(keystone_admin)$ system host-unlock worker-0
To pass the FEC device to a container, the following requests/limits must be entered into the pod specification:
intel.com/intel_fpga_fec: <number_of_vfs>
For example:
apiVersion: v1
kind: Pod
metadata:
name: 5gnr
annotations:
k8s.v1.cni.cncf.io/networks: '[
{ "name": "sriov1" }
]'
spec:
restartPolicy: Never
containers:
- name: 5gnr
image: "5gnr-image"
volumeMounts:
- mountPath: /mnt/huge-1048576kB
name: hugepage
stdin: true
tty: true
resources:
requests:
memory: 4Gi
intel.com/intel_fpga_fec: '1'
intel.com/pci_sriov_net_datanetwork_a: '1'
limits:
hugepages-1Gi: 4Gi
memory: 4Gi
intel.com/intel_fpga_fec: '1'
intel.com/pci_sriov_net_datanetwork_a: '1'
volumes:
- name: hugepage
emptyDir:
medium: HugePages