.. _configure-sriov-fec-operator-to-enable-hw-accelerators-for-hosted-vran-containarized-workloads: =================================================================== Configure Intel Wireless FEC Accelerators using SR-IOV FEC operator =================================================================== This section provides the instructions for installing the |SRIOV| |FEC| operator that provides detailed configurability of Wireless |FEC| Accelerators on |prod-long| (|AIO-SX|). .. rubric:: |context| The |SRIOV| |FEC| Operator for Intel Wireless |FEC| Accelerators supports the following |vRAN| |FEC| accelerators: - Intel® vRAN Dedicated Accelerator ACC100. - Intel® |FPGA| Programmable Acceleration Card N3000. - Intel® vRAN Dedicated Accelerator ACC200. .. rubric:: |prereq| - The system has been provisioned and unlocked. .. rubric:: |proc| #. Source the platform environment. .. code-block:: none $ source /etc/platform/openrc ~(keystone_admin)$ #. Upload the |SRIOV| |FEC| Operator. .. code-block:: none ~(keystone_admin)$ system application-upload /usr/local/share/applications/helm/sriov-fec-operator-.tgz +---------------+-------------------------------------+ | Property | Value | +---------------+-------------------------------------+ | active | False | | app_version | 1.0-1 | | created_at | 2022-09-29T19:47:29.427225+00:00 | | manifest_file | fluxcd-manifests | | manifest_name | sriov-fec-operator-fluxcd-manifests | | name | sriov-fec-operator | | progress | None | | status | uploading | | updated_at | None | +---------------+-------------------------------------+ #. Configure a different resource name for |FEC| devices as desired. - To change the resource name for ACC100, use the following command: .. code-block:: none ~(keystone_admin)$ system helm-override-update sriov-fec-operator sriov-fec-operator sriov-fec-system --set env.SRIOV_FEC_ACC100_RESOURCE_NAME=intel_acc100_fec #. Apply the |SRIOV| |FEC| Operator. .. code-block:: none ~(keystone_admin)$ system application-apply sriov-fec-operator +---------------+-------------------------------------+ | Property | Value | +---------------+-------------------------------------+ | active | False | | app_version | 1.0-1 | | created_at | 2022-09-29T19:47:29.427225+00:00 | | manifest_file | fluxcd-manifests | | manifest_name | sriov-fec-operator-fluxcd-manifests | | name | sriov-fec-operator | | progress | None | | status | applying | | updated_at | 2022-09-29T19:47:33.599867+00:00 | +---------------+-------------------------------------+ .. code-block:: none ~(keystone_admin)$ system application-show sriov-fec-operator +---------------+-------------------------------------+ | Property | Value | +---------------+-------------------------------------+ | active | True | | app_version | 1.0-1 | | created_at | 2022-09-29T19:47:29.427225+00:00 | | manifest_file | fluxcd-manifests | | manifest_name | sriov-fec-operator-fluxcd-manifests | | name | sriov-fec-operator | | progress | completed | | status | applied | | updated_at | 2022-09-29T19:50:27.543655+00:00 | +---------------+-------------------------------------+ #. Verify that all the operator pods are up and running. .. code-block:: none $ kubectl get pods -n sriov-fec-system NAME READY STATUS RESTARTS AGE accelerator-discovery-svh87 1/1 Running 0 3m26s sriov-device-plugin-j54hh 1/1 Running 0 3m26s sriov-fec-controller-manager-77bb5b778b-bjmr8 2/2 Running 0 3m28s sriov-fec-daemonset-stnjh 1/1 Running 0 3m26s #. List all the nodes in the cluster with |FEC| accelerators installed. .. code-block:: none $ kubectl get sriovfecnodeconfigs.sriovfec.intel.com -n sriov-fec-system NAME CONFIGURED controller-0 NotRequested #. Find the |PCI| address of the |PF| of |SRIOV| |FEC| accelerator device to be configured. - ACC100 .. code-block:: none $ kubectl get sriovfecnodeconfigs.sriovfec.intel.com -n sriov-fec-system controller-0 -o yaml apiVersion: sriovfec.intel.com/v2 kind: SriovFecNodeConfig metadata: creationTimestamp: "2022-08-25T01:33:35Z" generation: 1 name: controller-0 namespace: sriov-fec-system resourceVersion: "8298897" selfLink: /apis/sriovfec.intel.com/v2/namespaces/sriov-fec-system/sriovfecnodeconfigs/controller-0 uid: dcab90d9-2fe2-4769-81b0-fdd54e96e287 spec: physicalFunctions: [] status: conditions: - lastTransitionTime: "2022-08-25T01:33:35Z" message: "" observedGeneration: 1 reason: NotRequested status: "False" type: Configured inventory: sriovAccelerators: - deviceID: 0d5c driver: "" maxVirtualFunctions: 16 pciAddress: "0000:17:00.0" vendorID: "8086" virtualFunctions: [] - N3000 .. code-block:: none $ kubectl get sriovfecnodeconfigs.sriovfec.intel.com -n sriov-fec-system controller-0 -o yaml apiVersion: sriovfec.intel.com/v2 kind: SriovFecNodeConfig metadata: creationTimestamp: "2022-10-21T18:17:55Z" generation: 1 name: controller-0 namespace: sriov-fec-system resourceVersion: "1996828" selfLink: /apis/sriovfec.intel.com/v2/namespaces/sriov-fec-system/sriovfecnodeconfigs/controller-0 uid: 05db8606-8236-4efd-99bb-7b5ca20cd02e spec: physicalFunctions: [] status: conditions: - lastTransitionTime: "2022-10-21T18:17:55Z" message: "" observedGeneration: 1 reason: NotRequested status: "False" type: Configured inventory: sriovAccelerators: - deviceID: 0d8f driver: "" maxVirtualFunctions: 8 pciAddress: 0000:1c:00.0 vendorID: "8086" virtualFunctions: [] - ACC200 .. code-block:: none $ kubectl get sriovfecnodeconfigs.sriovfec.intel.com -n sriov-fec-system controller-0 -o yaml apiVersion: sriovfec.intel.com/v2 kind: SriovFecNodeConfig metadata: creationTimestamp: "2022-10-21T18:31:41Z" generation: 1 name: controller-0 namespace: sriov-fec-system resourceVersion: "2144487" selfLink: /apis/sriovfec.intel.com/v2/namespaces/sriov-fec-system/sriovfecnodeconfigs/controller-0 uid: e4e536fc-a777-4e26-974d-71226d43c4ed spec: physicalFunctions: [] status: conditions: - lastTransitionTime: "2022-10-21T18:31:41Z" message: "" observedGeneration: 1 reason: NotRequested status: "False" type: Configured inventory: sriovAccelerators: - deviceID: 57c0 driver: "" maxVirtualFunctions: 16 pciAddress: 0000:f7:00.0 vendorID: "8086" virtualFunctions: [] #. Apply the |FEC| device configuration. #. ACC100 device configuration. - The maximum number of |VFs| that can be configured for ACC100 is 16 |VFs|. - There are 8 queue groups available which can be allocated to any available operation (4GUL/4GDL/5GUL/5GDL) based on the ``numQueueGroups`` parameter. - The product of ``numQueueGroups`` x ``numAqsPerGroups`` x ``aqDepthLog2`` x ``numVfBundles`` must be less than 32K. - The following example creates 1 |VF|, configures ACC100's 8 queue groups; allocating 4 queue groups for 5G Uplink and another 4 queue groups for 5G Downlink. .. code-block:: none apiVersion: sriovfec.intel.com/v2 kind: SriovFecClusterConfig metadata: name: config namespace: sriov-fec-system spec: priority: 1 nodeSelector: kubernetes.io/hostname: controller-0 acceleratorSelector: pciAddress: 0000:17:00.0 physicalFunction: pfDriver: "vfio-pci" vfDriver: "vfio-pci" vfAmount: 1 bbDevConfig: acc100: # pfMode: false = VF Programming, true = PF Programming pfMode: false numVfBundles: 1 maxQueueSize: 1024 uplink4G: numQueueGroups: 0 numAqsPerGroups: 16 aqDepthLog2: 4 downlink4G: numQueueGroups: 0 numAqsPerGroups: 16 aqDepthLog2: 4 uplink5G: numQueueGroups: 4 numAqsPerGroups: 16 aqDepthLog2: 4 downlink5G: numQueueGroups: 4 numAqsPerGroups: 16 aqDepthLog2: 4 drainSkip: true - The following example creates 2 |VFs|, configures ACC100's 8 queue groups; allocating 2 queue groups each for 4G Uplink, 4G downlink, 5G Uplink and 5G downlink. .. code-block:: none apiVersion: sriovfec.intel.com/v2 kind: SriovFecClusterConfig metadata: name: config namespace: sriov-fec-system spec: priority: 1 nodeSelector: kubernetes.io/hostname: controller-0 acceleratorSelector: pciAddress: 0000:17:00.0 physicalFunction: pfDriver: "vfio-pci" vfDriver: "vfio-pci" vfAmount: 2 bbDevConfig: acc100: # pfMode: false = VF Programming, true = PF Programming pfMode: false numVfBundles: 2 maxQueueSize: 1024 uplink4G: numQueueGroups: 2 numAqsPerGroups: 16 aqDepthLog2: 4 downlink4G: numQueueGroups: 2 numAqsPerGroups: 16 aqDepthLog2: 4 uplink5G: numQueueGroups: 2 numAqsPerGroups: 16 aqDepthLog2: 4 downlink5G: numQueueGroups: 2 numAqsPerGroups: 16 aqDepthLog2: 4 drainSkip: true #. N3000 device configuration. - The maximum number of |VFs| that can be configured for N3000 is 8 |VFs|. - The maximum number of queues that can be mapped to each VF for uplink or downlink is 32. - The following configuration for N3000 creates 1 |VF| with 32 queues each for 5G uplink and 5G downlink. .. code-block:: none apiVersion: sriovfec.intel.com/v2 kind: SriovFecClusterConfig metadata: name: config namespace: sriov-fec-system spec: priority: 1 nodeSelector: kubernetes.io/hostname: controller-0 acceleratorSelector: pciAddress: 0000:1c:00.0 physicalFunction: pfDriver: pci-pf-stub vfDriver: vfio-pci vfAmount: 1 bbDevConfig: n3000: # Network Type: either "FPGA_5GNR" or "FPGA_LTE" networkType: "FPGA_5GNR" # Pf mode: false = VF Programming, true = PF Programming pfMode: false flrTimeout: 610 downlink: bandwidth: 3 loadBalance: 128 queues: vf0: 32 vf1: 0 vf2: 0 vf3: 0 vf4: 0 vf5: 0 vf6: 0 vf7: 0 uplink: bandwidth: 3 loadBalance: 128 queues: vf0: 32 vf1: 0 vf2: 0 vf3: 0 vf4: 0 vf5: 0 vf6: 0 vf7: 0 drainSkip: true - The following configuration for N3000 creates 2 |VFs| with 16 queues each, mapping 32 queues with 2 |VFs| for 5G uplink and another 32 queues with 2 |VFs| for 5G downlink. .. code-block:: none apiVersion: sriovfec.intel.com/v2 kind: SriovFecClusterConfig metadata: name: config namespace: sriov-fec-system spec: priority: 1 nodeSelector: kubernetes.io/hostname: controller-0 acceleratorSelector: pciAddress: 0000:1c:00.0 physicalFunction: pfDriver: pci-pf-stub vfDriver: vfio-pci vfAmount: 2 bbDevConfig: n3000: # Network Type: either "FPGA_5GNR" or "FPGA_LTE" networkType: "FPGA_5GNR" # Pf mode: false = VF Programming, true = PF Programming pfMode: false flrTimeout: 610 downlink: bandwidth: 3 loadBalance: 128 queues: vf0: 16 vf1: 16 vf2: 0 vf3: 0 vf4: 0 vf5: 0 vf6: 0 vf7: 0 uplink: bandwidth: 3 loadBalance: 128 queues: vf0: 16 vf1: 16 vf2: 0 vf3: 0 vf4: 0 vf5: 0 vf6: 0 vf7: 0 drainSkip: true #. ACC200 device configuration. - The maximum number of |VFs| that can be configured for ACC200 is 16 |VFs|. - There are 16 queue groups available which can be allocated to any available operation (4GUL/4GDL/5GUL/5GDL) based on the ``numQueueGroups`` parameter. - The product of ``numQueueGroups`` x ``numAqsPerGroups`` x ``aqDepthLog2`` x ``numVfBundles`` must be less than 64K. - The following configuration creates 1 |VF|, configures ACC200's 12 queue groups; allocating 16 queues per |VF| for 5G processing engine functions(5GUL/5GDL/FFT). .. code-block:: none apiVersion: sriovfec.intel.com/v2 kind: SriovFecClusterConfig metadata: name: config namespace: sriov-fec-system spec: priority: 1 nodeSelector: kubernetes.io/hostname: controller-0 acceleratorSelector: pciAddress: 0000:f7:00.0 physicalFunction: pfDriver: vfio-pci vfDriver: vfio-pci vfAmount: 1 bbDevConfig: acc200: # Pf mode: false = VF Programming, true = PF Programming pfMode: false numVfBundles: 1 maxQueueSize: 1024 uplink4G: numQueueGroups: 0 numAqsPerGroups: 16 aqDepthLog2: 4 downlink4G: numQueueGroups: 0 numAqsPerGroups: 16 aqDepthLog2: 4 uplink5G: numQueueGroups: 4 numAqsPerGroups: 16 aqDepthLog2: 4 downlink5G: numQueueGroups: 4 numAqsPerGroups: 16 aqDepthLog2: 4 qfft: numQueueGroups: 4 numAqsPerGroups: 16 aqDepthLog2: 4 drainSkip: true - The following configuration creates 2 |VF|, configures ACC200's 16 queue groups; allocating 16 queues per |VF| for 4G and 5G processing engine functions(4GUL/4GDL/5GUL/5GDL/FFT). .. code-block:: none apiVersion: sriovfec.intel.com/v2 kind: SriovFecClusterConfig metadata: name: config namespace: sriov-fec-system spec: priority: 1 nodeSelector: kubernetes.io/hostname: controller-0 acceleratorSelector: pciAddress: 0000:f7:00.0 physicalFunction: pfDriver: vfio-pci vfDriver: vfio-pci vfAmount: 2 bbDevConfig: acc200: # Pf mode: false = VF Programming, true = PF Programming pfMode: false numVfBundles: 2 maxQueueSize: 1024 uplink4G: numQueueGroups: 2 numAqsPerGroups: 16 aqDepthLog2: 4 downlink4G: numQueueGroups: 2 numAqsPerGroups: 16 aqDepthLog2: 4 uplink5G: numQueueGroups: 4 numAqsPerGroups: 16 aqDepthLog2: 4 downlink5G: numQueueGroups: 4 numAqsPerGroups: 16 aqDepthLog2: 4 qfft: numQueueGroups: 4 numAqsPerGroups: 16 aqDepthLog2: 4 drainSkip: true #. The ``SriovFecClusterConfig`` must be provided with ``spec.drainSkip: True`` to avoid node draining. #. Create and apply a ``SriovFecClusterConfig`` custom resource using the above examples as templates, setting the parameters ``nodeSelector:kubernetes.io/hostname`` and ``acceleratorSelector:pciAddress`` to select the desired device and configuring ``vfAmount`` and ``numVfBundles`` as desired. .. code-block:: none $ kubectl apply -f .yaml sriovfecclusterconfig.sriovfec.intel.com/config created .. note:: The ``vfAmount`` and ``numVfBundles`` in ``SriovFecClusterConfig`` must be always equal for ACC100/ACC200. #. Verify that the |FEC| configuration is applied. - An example of ACC100 status after applying 1 |VF| configuration. .. code-block:: none $ kubectl get sriovfecnodeconfigs.sriovfec.intel.com -n sriov-fec-system controller-0 -o yaml apiVersion: sriovfec.intel.com/v2 kind: SriovFecNodeConfig metadata: creationTimestamp: "2022-09-29T19:49:59Z" generation: 2 name: controller-0 namespace: sriov-fec-system resourceVersion: "2935834" selfLink: /apis/sriovfec.intel.com/v2/namespaces/sriov-fec-system/sriovfecnodeconfigs/controller-0 uid: 1a39b2a6-7512-4f44-8a64-083df7e480f3 spec: physicalFunctions: - bbDevConfig: acc100: downlink4G: aqDepthLog2: 4 numAqsPerGroups: 16 numQueueGroups: 0 downlink5G: aqDepthLog2: 4 numAqsPerGroups: 16 numQueueGroups: 4 maxQueueSize: 1024 numVfBundles: 1 pfMode: false uplink4G: aqDepthLog2: 4 numAqsPerGroups: 16 numQueueGroups: 0 uplink5G: aqDepthLog2: 4 numAqsPerGroups: 16 numQueueGroups: 4 pciAddress: "0000:17:00.0" pfDriver: vfio-pci vfAmount: 1 vfDriver: vfio-pci status: conditions: - lastTransitionTime: "2022-09-29T20:33:13Z" message: Configured successfully observedGeneration: 2 reason: Succeeded status: "True" type: Configured inventory: sriovAccelerators: - deviceID: 0d5c driver: vfio-pci maxVirtualFunctions: 16 pciAddress: "0000:17:00.0" vendorID: "8086" virtualFunctions: - deviceID: 0d5d driver: vfio-pci pciAddress: "0000:18:00.0" - An example of N3000 status after applying 2 |VFs| configuration. .. code-block:: none $ kubectl get sriovfecnodeconfigs.sriovfec.intel.com -n sriov-fec-system controller-0 -o yaml apiVersion: sriovfec.intel.com/v2 kind: SriovFecNodeConfig metadata: creationTimestamp: "2022-10-21T18:17:55Z" generation: 2 name: controller-0 namespace: sriov-fec-system resourceVersion: "2011601" selfLink: /apis/sriovfec.intel.com/v2/namespaces/sriov-fec-system/sriovfecnodeconfigs/controller-0 uid: 05db8606-8236-4efd-99bb-7b5ca20cd02e spec: drainSkip: true physicalFunctions: - bbDevConfig: n3000: downlink: bandwidth: 3 loadBalance: 128 queues: vf0: 16 vf1: 16 vf2: 0 vf3: 0 vf4: 0 vf5: 0 vf6: 0 vf7: 0 flrTimeout: 610 networkType: FPGA_5GNR uplink: bandwidth: 3 loadBalance: 128 queues: vf0: 16 vf1: 16 vf2: 0 vf3: 0 vf4: 0 vf5: 0 vf6: 0 vf7: 0 pciAddress: 0000:1c:00.0 pfDriver: pci-pf-stub vfAmount: 2 vfDriver: vfio-pci status: conditions: - lastTransitionTime: "2022-10-21T19:35:18Z" message: Configured successfully observedGeneration: 2 reason: Succeeded status: "True" type: Configured inventory: sriovAccelerators: - deviceID: 0d8f driver: pci-pf-stub maxVirtualFunctions: 8 pciAddress: 0000:1c:00.0 vendorID: "8086" virtualFunctions: - deviceID: 0d90 driver: vfio-pci pciAddress: 0000:1c:00.1 - deviceID: 0d90 driver: vfio-pci pciAddress: 0000:1c:00.2 - An example of ACC200 status after applying 1 |VF| configuration. .. code-block:: none $ kubectl get sriovfecnodeconfigs.sriovfec.intel.com -n sriov-fec-system controller-0 -o yaml apiVersion: sriovfec.intel.com/v2 kind: SriovFecNodeConfig metadata: creationTimestamp: "2022-10-21T18:31:41Z" generation: 3 name: controller-0 namespace: sriov-fec-system resourceVersion: "2159562" selfLink: /apis/sriovfec.intel.com/v2/namespaces/sriov-fec-system/sriovfecnodeconfigs/controller-0 uid: e4e536fc-a777-4e26-974d-71226d43c4ed spec: drainSkip: true physicalFunctions: - bbDevConfig: acc200: downlink4G: aqDepthLog2: 4 numAqsPerGroups: 16 numQueueGroups: 2 downlink5G: aqDepthLog2: 4 numAqsPerGroups: 16 numQueueGroups: 4 maxQueueSize: 1024 numVfBundles: 1 qfft: aqDepthLog2: 4 numAqsPerGroups: 16 numQueueGroups: 4 uplink4G: aqDepthLog2: 4 numAqsPerGroups: 16 numQueueGroups: 2 uplink5G: aqDepthLog2: 4 numAqsPerGroups: 16 numQueueGroups: 4 pciAddress: 0000:f7:00.0 pfDriver: vfio-pci vfAmount: 1 vfDriver: vfio-pci status: conditions: - lastTransitionTime: "2022-10-21T19:48:26Z" message: Configured successfully observedGeneration: 3 reason: Succeeded status: "True" type: Configured inventory: sriovAccelerators: - deviceID: 57c0 driver: vfio-pci maxVirtualFunctions: 16 pciAddress: 0000:f7:00.0 vendorID: "8086" virtualFunctions: - deviceID: 57c1 driver: vfio-pci pciAddress: 0000:f7:00.1 #. Modify |FEC| Cluster config. #. To further modify |FEC| device configuration, make desired modifications to the sriov-fec custom resource file and re-apply. .. code-block:: none $ kubectl apply -f .yaml sriovfecclusterconfig.sriovfec.intel.com/config configured #. Delete ``SriovFecClusterConfig``. .. code-block:: none $ kubectl delete -f .yaml sriovfecclusterconfig.sriovfec.intel.com "config" deleted #. Configure |VFIO| for |PF| interface. |SRIOV| |FEC| operator also supports ``vfio-pci`` driver for |PF| interface. If the ``vfio-pci`` driver is used to bind the |PF| interface, then a UUID token must be configured as a ``VFIO_TOKEN`` to both |PF| and |VF| interfaces. - For the |PF| interface, the ``VFIO_TOKEN`` is configured by |SRIOV| |FEC| operator and has the default value of ``02bddbbf-bbb0-4d79-886b-91bad3fbb510`` - It is highly recommended to change the default vfio-token when configuring the accelerator in vfio mode (ie., vfio-pci driver for PF interface). - The ``VFIO_TOKEN`` could be changed by setting ``SRIOV_FEC_VFIO_TOKEN`` before application Apply with :command:`system helm-override-update`. - This example sets the ``SRIOV_FEC_VFIO_TOKEN`` using ``uuidgen``. .. code-block:: none ~(keystone_admin)$ system helm-override-update sriov-fec-operator sriov-fec-operator sriov-fec-system --set env.SRIOV_FEC_VFIO_TOKEN=`uuidgen` .. note:: You must configure ``SRIOV_FEC_VFIO_TOKEN`` before installing the application. If ``SRIOV_FEC_VFIO_TOKEN`` needs to be updated after the application is installed, removing the application will be necessary before proceeding with updating ``SRIOV_FEC_VFIO_TOKEN`` and reinstalling the application. - For the |VF| interface, the same ``VFIO_TOKEN`` must be configured by the application. You can get the token using the command :command:`system helm-override-show sriov-fec-operator sriov-fec-operator sriov-fec-system`. - To configure ACC100, N3000 and ACC200 in vfio mode, you should provide ``sriovFecClusterConfig`` with ``spec.physicalFunction.pfDriver: vfio-pci``. #. Switch between Static method configuration and Operator method. #. Delete ``SriovFecClusterConfig``. #. Remove ``sriov-fec-operator`` using the command :command:`system application-remove`. #. Apply the configuration using :command:`system host-device-modify`, see :ref:`Enable ACC100/ACC200 Hardware Accelerators for Hosted vRAN Containerized Workloads `. .. rubric:: |postreq| - See :ref:`Set Up Pods to Use SRIOV to Access ACC100/ACC200 HW Accelerators `. - Resource Request: The resource name for |FEC| |VFs| configured with |SRIOV| |FEC| operator must be ``intel.com/intel_fec_acc100`` for ACC100, ``intel.com/intel_fec_5g`` for N3000 and ``intel.com/intel_fec_acc200`` for ACC200 when requested in a pod spec unless the resource name was modified using the `system helm-override-update` command. - Resource request for ACC100. .. code-block:: none resources: requests: intel.com/intel_fec_acc100: '16' limits: intel.com/intel_fec_acc100: '16' - Resource request for N3000. .. code-block:: none resources: requests: intel.com/intel_fec_5g: '2' limits: intel.com/intel_fec_5g: '2' - Resource request for ACC200. .. code-block:: none resources: requests: intel.com/intel_fec_acc200: '16' limits: intel.com/intel_fec_acc200: '16' - vfio-token: (in case of vfio mode) An application pod can get the |VFIO| token through a pod environment variable. For example, reference the pod spec section for vfio token injection. .. code-block:: none env: - name: SRIOV_FEC_VFIO_TOKEN value: "02bddbbf-bbb0-4d79-886b-91bad3fbb510" .. note:: The application can get the existing vfio-token using the command below, if the user updates the custom vfio-token. :command:`system helm-override-show sriov-fec-operator sriov-fec-operator sriov-fec-system` If the vfio-token is available by default, it will not be displayed in the output file. .. note:: Use the default vfio-token for testing purposes only. - Run the following command once the application pod is ready to get the |PCI| address of the allocated |FEC| device along with the |VFIO| token when applicable. - ACC100 .. code-block:: none sysadmin@controller-0:~$ kubectl exec -ti app-pod -- env | grep FEC PCIDEVICE_INTEL_COM_INTEL_FEC_ACC100=0000:32:00.0 SRIOV_FEC_VFIO_TOKEN=02bddbbf-bbb0-4d79-886b-91bad3fbb510 - ACC200 .. code-block:: none sysadmin@controller-0:~$ kubectl exec -ti app-pod -- env | grep FEC PCIDEVICE_INTEL_COM_INTEL_FEC_ACC200=0000:f7:00.0 SRIOV_FEC_VFIO_TOKEN=02bddbbf-bbb0-4d79-886b-91bad3fbb510 - N3000 .. code-block:: none sysadmin@controller-0:~$ kubectl exec -ti app-pod -- env | grep FEC PCIDEVICE_INTEL_COM_INTEL_FEC_5G=0000:1f:00.0 - Applications that are using |FEC| |VFs| when the |PF| interface is bound with the ``vfio-pci`` driver, should provide the ``vfio-token`` to the |VF| interface. For example, a sample |DPDK| application can provide ``vfio-vf-token`` via Environment Abstraction Layer (EAL) parameters. :command:`./test-bbdev.py -e="--vfio-vf-token=$SRIOV_FEC_VFIO_TOKEN -a$PCIDEVICE_INTEL_COM_INTEL_FEC_ACC200"`