From c7a660ef933e8d96d34b78591705fe488e78ee7f Mon Sep 17 00:00:00 2001 From: Tony Mulqueen Date: Tue, 31 May 2022 14:36:06 +0100 Subject: [PATCH] TELCODOCS-395: restore file --- images/261_OpenShift_DPDK_0722.png | Bin 0 -> 60124 bytes images/dpdk_line_rate.png | Bin 0 -> 47762 bytes modules/nw-sriov-concept-dpdk-line-rate.adoc | 31 ++++++ modules/nw-sriov-create-object.adoc | 40 ++++++++ modules/nw-sriov-dpdk-base-workload.adoc | 82 +++++++++++++++ modules/nw-sriov-dpdk-example-mellanox.adoc | 48 ++++----- modules/nw-sriov-dpdk-running-testpmd.adoc | 21 ++++ modules/nw-sriov-example-dpdk-line-rate.adoc | 58 +++++++++++ modules/nw-sriov-network-operator.adoc | 93 ++++++++++++++++++ .../using-dpdk-and-rdma.adoc | 24 ++++- 10 files changed, 371 insertions(+), 26 deletions(-) create mode 100644 images/261_OpenShift_DPDK_0722.png create mode 100644 images/dpdk_line_rate.png create mode 100644 modules/nw-sriov-concept-dpdk-line-rate.adoc create mode 100644 modules/nw-sriov-create-object.adoc create mode 100644 modules/nw-sriov-dpdk-base-workload.adoc create mode 100644 modules/nw-sriov-dpdk-running-testpmd.adoc create mode 100644 modules/nw-sriov-example-dpdk-line-rate.adoc create mode 100644 modules/nw-sriov-network-operator.adoc diff --git a/images/261_OpenShift_DPDK_0722.png b/images/261_OpenShift_DPDK_0722.png new file mode 100644 index 0000000000000000000000000000000000000000..3eaf53747c80fe31568c1885628f82976bd69cc3 GIT binary patch literal 60124 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 D&e-_$ literal 0 HcmV?d00001 diff --git a/modules/nw-sriov-concept-dpdk-line-rate.adoc b/modules/nw-sriov-concept-dpdk-line-rate.adoc new file mode 100644 index 0000000000..a6698c796a --- /dev/null +++ b/modules/nw-sriov-concept-dpdk-line-rate.adoc @@ -0,0 +1,31 @@ +// Module included in the following assemblies: +// +// * networking/hardware_networks/using-dpdk-and-rdma.adoc + +:_content-type: CONCEPT +[id="nw-sriov-example-dpdk-line-rate_{context}"] += Overview of achieving a specific DPDK line rate + +To achieve a specific Data Plane Development Kit (DPDK) line rate, deploy a Node Tuning Operator and configure Single Root I/O Virtualization (SR-IOV). You must also tune the DPDK settings for the following resources: + +- Isolated CPUs +- Hugepages +- The topology scheduler + +[NOTE] +==== +In previous versions of {product-title}, the Performance Addon Operator was used to implement automatic tuning to achieve low latency performance for {product-title} applications. In {product-title} 4.11 and later, this functionality is part of the Node Tuning Operator. +==== + +.DPDK test environment +The following diagram shows the components of a traffic-testing environment: + +image::261_OpenShift_DPDK_0722.png[DPDK test environment] + +- **Traffic generator**: An application that can generate high-volume packet traffic. +- **SR-IOV-supporting NIC**: A network interface card compatible with SR-IOV. The card runs a number of virtual functions on a physical interface. +- **Physical Function (PF)**: A PCI Express (PCIe) function of a network adapter that supports the SR-IOV interface. +- **Virtual Function (VF)**: A lightweight PCIe function on a network adapter that supports SR-IOV. The VF is associated with the PCIe PF on the network adapter. The VF represents a virtualized instance of the network adapter. +- **Switch**: A network switch. Nodes can also be connected back-to-back. +- **`testpmd`**: An example application included with DPDK. The `testpmd` application can be used to test the DPDK in a packet-forwarding mode. The `testpmd` application is also an example of how to build a fully-fledged application using the DPDK Software Development Kit (SDK). +- **worker 0** and **worker 1**: {product-title} nodes. diff --git a/modules/nw-sriov-create-object.adoc b/modules/nw-sriov-create-object.adoc new file mode 100644 index 0000000000..16aa95b9d6 --- /dev/null +++ b/modules/nw-sriov-create-object.adoc @@ -0,0 +1,40 @@ +// Module included in the following assemblies: +// +// * networking/hardware_networks/using-dpdk-and-rdma.adoc + +:_content-type: REFERENCE +[id="nw-sriov-create-object_{context}"] += Example SR-IOV network operator + +The following is an example definition of an `sriovNetwork` object. In this case, Intel and Mellanox configurations are identical: +[source,yaml] +---- +apiVersion: sriovnetwork.openshift.io/v1 +kind: SriovNetwork +metadata: + name: dpdk-network-1 + namespace: openshift-sriov-network-operator +spec: + ipam: '{"type": "host-local","ranges": [[{"subnet": "10.0.1.0/24"}]],"dataDir": + "/run/my-orchestrator/container-ipam-state-1"}' <1> + networkNamespace: dpdk-test <2> + spoofChk: "off" + trust: "on" + resourceName: dpdk_nic_1 <3> +--- +apiVersion: sriovnetwork.openshift.io/v1 +kind: SriovNetwork +metadata: + name: dpdk-network-2 + namespace: openshift-sriov-network-operator +spec: + ipam: '{"type": "host-local","ranges": [[{"subnet": "10.0.2.0/24"}]],"dataDir": + "/run/my-orchestrator/container-ipam-state-1"}' + networkNamespace: dpdk-test + spoofChk: "off" + trust: "on" + resourceName: dpdk_nic_2 +---- +<1> You can use a different IP Address Management (IPAM) implementation, such as Whereabouts. For more information, see _Dynamic IP address assignment configuration with Whereabouts_. +<2> You must request the `networkNamespace` where the network attachment definition will be created. You must create the `sriovNetwork` CR under the `openshift-sriov-network-operator` namespace. +<3> The `resourceName` value must match that of the `resourceName` created under the `sriovNetworkNodePolicy`. diff --git a/modules/nw-sriov-dpdk-base-workload.adoc b/modules/nw-sriov-dpdk-base-workload.adoc new file mode 100644 index 0000000000..0ab92f1e76 --- /dev/null +++ b/modules/nw-sriov-dpdk-base-workload.adoc @@ -0,0 +1,82 @@ +// Module included in the following assemblies: +// +// * networking/hardware_networks/using-dpdk-and-rdma.adoc + +:_content-type: REFERENCE +[id="nw-sriov-dpdk-base-workload_{context}"] += Example DPDK base workload + +The following is an example of a Data Plane Development Kit (DPDK) container: +[source,yaml] +---- +apiVersion: v1 +kind: Namespace +metadata: + name: dpdk-test +--- +apiVersion: v1 +kind: Pod +metadata: + annotations: + k8s.v1.cni.cncf.io/networks: '[ <1> + { + "name": "dpdk-network-1", + "namespace": "dpdk-test" + }, + { + "name": "dpdk-network-2", + "namespace": "dpdk-test" + } + ]' + irq-load-balancing.crio.io: "disable" <2> + cpu-load-balancing.crio.io: "disable" + cpu-quota.crio.io: "disable" + labels: + app: dpdk + name: testpmd + namespace: dpdk-test +spec: + runtimeClassName: performance-performance <3> + containers: + - command: + - /bin/bash + - -c + - sleep INF + image: registry.redhat.io/openshift4/dpdk-base-rhel8 + imagePullPolicy: Always + name: dpdk + resources: <4> + limits: + cpu: "16" + hugepages-1Gi: 8Gi + memory: 2Gi + requests: + cpu: "16" + hugepages-1Gi: 8Gi + memory: 2Gi + securityContext: + capabilities: + add: + - IPC_LOCK + - SYS_RESOURCE + - NET_RAW + - NET_ADMIN + runAsUser: 0 + volumeMounts: + - mountPath: /mnt/huge + name: hugepages + terminationGracePeriodSeconds: 5 + volumes: + - emptyDir: + medium: HugePages + name: hugepages +---- +<1> Request the SR-IOV networks you need. Resources for the devices will be injected automatically. +<2> Disable the CPU and IRQ load balancing base. See _Disabling interrupt processing for individual pods_ for more information. +<3> Set the `runtimeClass` to `performance-performance`. Do not set the `runtimeClass` to `HostNetwork` or `privileged`. +<4> Request an equal number of resources for requests and limits to start the pod with `Guaranteed` Quality of Service (QoS). + +[NOTE] +==== +Do not start the pod with `SLEEP` and then exec into the pod to start the testpmd or the DPDK workload. This can add additional interrupts as the `exec` process is not pinned to any CPU. +==== diff --git a/modules/nw-sriov-dpdk-example-mellanox.adoc b/modules/nw-sriov-dpdk-example-mellanox.adoc index 38a96e6d93..2047381482 100644 --- a/modules/nw-sriov-dpdk-example-mellanox.adoc +++ b/modules/nw-sriov-dpdk-example-mellanox.adoc @@ -6,15 +6,17 @@ [id="example-vf-use-in-dpdk-mode-mellanox_{context}"] = Using a virtual function in DPDK mode with a Mellanox NIC +You can create a network node policy and create a Data Plane Development Kit (DPDK) pod using a virtual function in DPDK mode with a Mellanox NIC. + .Prerequisites -* Install the OpenShift CLI (`oc`). -* Install the SR-IOV Network Operator. -* Log in as a user with `cluster-admin` privileges. +* You have installed the OpenShift CLI (`oc`). +* You have installed the Single Root I/O Virtualization (SR-IOV) Network Operator. +* You have logged in as a user with `cluster-admin` privileges. .Procedure -. Create the following `SriovNetworkNodePolicy` object, and then save the YAML in the `mlx-dpdk-node-policy.yaml` file. +. Save the following `SriovNetworkNodePolicy` YAML configuration to an `mlx-dpdk-node-policy.yaml` file: + [source,yaml] ---- @@ -37,16 +39,16 @@ spec: deviceType: netdevice <2> isRdma: true <3> ---- -<1> Specify the device hex code of the SR-IOV network device. The only allowed values for Mellanox cards are `1015`, `1017`. -<2> Specify the driver type for the virtual functions to `netdevice`. Mellanox SR-IOV VF can work in DPDK mode without using the `vfio-pci` device type. VF device appears as a kernel network interface inside a container. -<3> Enable RDMA mode. This is required by Mellanox cards to work in DPDK mode. +<1> Specify the device hex code of the SR-IOV network device. The only allowed values for Mellanox cards are `1015` and `1017`. +<2> Specify the driver type for the virtual functions to `netdevice`. A Mellanox SR-IOV Virtual Function (VF) can work in DPDK mode without using the `vfio-pci` device type. The VF device appears as a kernel network interface inside a container. +<3> Enable Remote Direct Memory Access (RDMA) mode. This is required for Mellanox cards to work in DPDK mode. + [NOTE] ===== -See the `Configuring SR-IOV network devices` section for detailed explanation on each option in `SriovNetworkNodePolicy`. +See _Configuring an SR-IOV network device_ for a detailed explanation of each option in the `SriovNetworkNodePolicy` object. -When applying the configuration specified in a `SriovNetworkNodePolicy` object, the SR-IOV Operator may drain the nodes, and in some cases, reboot nodes. -It may take several minutes for a configuration change to apply. +When applying the configuration specified in an `SriovNetworkNodePolicy` object, the SR-IOV Operator might drain the nodes, and in some cases, reboot nodes. +It might take several minutes for a configuration change to apply. Ensure that there are enough available nodes in your cluster to handle the evicted workload beforehand. After the configuration update is applied, all the pods in the `openshift-sriov-network-operator` namespace will change to a `Running` status. @@ -59,7 +61,7 @@ After the configuration update is applied, all the pods in the `openshift-sriov- $ oc create -f mlx-dpdk-node-policy.yaml ---- -. Create the following `SriovNetwork` object, and then save the YAML in the `mlx-dpdk-network.yaml` file. +. Save the following `SriovNetwork` YAML configuration to an `mlx-dpdk-network.yaml` file: + [source,yaml] ---- @@ -71,27 +73,27 @@ metadata: spec: networkNamespace: ipam: |- <1> -# ... +... vlan: resourceName: mlxnics ---- -<1> Specify a configuration object for the ipam CNI plug-in as a YAML block scalar. The plug-in manages IP address assignment for the attachment definition. +<1> Specify a configuration object for the IP Address Management (IPAM) Container Network Interface (CNI) plug-in as a YAML block scalar. The plug-in manages IP address assignment for the attachment definition. + [NOTE] ===== -See the "Configuring SR-IOV additional network" section for a detailed explanation on each option in `SriovNetwork`. +See _Configuring an SR-IOV network device_ for a detailed explanation on each option in the `SriovNetwork` object. ===== + -An optional library, app-netutil, provides several API methods for gathering network information about a container's parent pod. +The `app-netutil` option library provides several API methods for gathering network information about the parent pod of a container. -. Create the `SriovNetworkNodePolicy` object by running the following command: +. Create the `SriovNetwork` object by running the following command: + [source,terminal] ---- $ oc create -f mlx-dpdk-network.yaml ---- +. Save the following `Pod` YAML configuration to an `mlx-dpdk-pod.yaml` file: -. Create the following `Pod` spec, and then save the YAML in the `mlx-dpdk-pod.yaml` file. + [source,yaml] ---- @@ -130,13 +132,13 @@ spec: emptyDir: medium: HugePages ---- -<1> Specify the same `target_namespace` where `SriovNetwork` object `mlx-dpdk-network` is created. If you would like to create the pod in a different namespace, change `target_namespace` in both `Pod` spec and `SriovNetowrk` object. -<2> Specify the DPDK image which includes your application and the DPDK library used by application. +<1> Specify the same `target_namespace` where `SriovNetwork` object `mlx-dpdk-network` is created. To create the pod in a different namespace, change `target_namespace` in both the `Pod` spec and `SriovNetwork` object. +<2> Specify the DPDK image which includes your application and the DPDK library used by the application. <3> Specify additional capabilities required by the application inside the container for hugepage allocation, system resource allocation, and network interface access. -<4> Mount the hugepage volume to the DPDK pod under `/dev/hugepages`. The hugepage volume is backed by the emptyDir volume type with the medium being `Hugepages`. -<5> Optional: Specify the number of DPDK devices allocated to the DPDK pod. This resource request and limit, if not explicitly specified, will be automatically added by SR-IOV network resource injector. The SR-IOV network resource injector is an admission controller component managed by SR-IOV Operator. It is enabled by default and can be disabled by setting the `enableInjector` option to `false` in the default `SriovOperatorConfig` CR. -<6> Specify the number of CPUs. The DPDK pod usually requires exclusive CPUs be allocated from kubelet. This is achieved by setting CPU Manager policy to `static` and creating a pod with `Guaranteed` QoS. -<7> Specify hugepage size `hugepages-1Gi` or `hugepages-2Mi` and the quantity of hugepages that will be allocated to DPDK pod. Configure `2Mi` and `1Gi` hugepages separately. Configuring `1Gi` hugepage requires adding kernel arguments to Nodes. +<4> Mount the hugepage volume to the DPDK pod under `/dev/hugepages`. The hugepage volume is backed by the `emptyDir` volume type with the medium being `Hugepages`. +<5> Optional: Specify the number of DPDK devices allocated for the DPDK pod. If not explicitly specified, this resource request and limit is automatically added by the SR-IOV network resource injector. The SR-IOV network resource injector is an admission controller component managed by SR-IOV Operator. It is enabled by default and can be disabled by setting the `enableInjector` option to `false` in the default `SriovOperatorConfig` CR. +<6> Specify the number of CPUs. The DPDK pod usually requires that exclusive CPUs be allocated from the kubelet. To do this, set the CPU Manager policy to `static` and create a pod with `Guaranteed` Quality of Service (QoS). +<7> Specify hugepage size `hugepages-1Gi` or `hugepages-2Mi` and the quantity of hugepages that will be allocated to the DPDK pod. Configure `2Mi` and `1Gi` hugepages separately. Configuring `1Gi` hugepages requires adding kernel arguments to Nodes. . Create the DPDK pod by running the following command: + diff --git a/modules/nw-sriov-dpdk-running-testpmd.adoc b/modules/nw-sriov-dpdk-running-testpmd.adoc new file mode 100644 index 0000000000..8f01f46190 --- /dev/null +++ b/modules/nw-sriov-dpdk-running-testpmd.adoc @@ -0,0 +1,21 @@ +// Module included in the following assemblies: +// +// * networking/hardware_networks/using-dpdk-and-rdma.adoc + +:_content-type: REFERENCE +[id="nw-sriov-dpdk-running-testpmd_{context}"] += Example testpmd script + +The following is an example script for running `testpmd`: + +[source,terminal] +---- +#!/bin/bash +set -ex +export CPU=$(cat /sys/fs/cgroup/cpuset/cpuset.cpus) +echo ${CPU} + +dpdk-testpmd -l ${CPU} -a ${PCIDEVICE_OPENSHIFT_IO_DPDK_NIC_1} -a ${PCIDEVICE_OPENSHIFT_IO_DPDK_NIC_2} -n 4 -- -i --nb-cores=15 --rxd=4096 --txd=4096 --rxq=7 --txq=7 --forward-mode=mac --eth-peer=0,50:00:00:00:00:01 --eth-peer=1,50:00:00:00:00:02 +---- +This example uses two different `sriovNetwork` CRs. The environment variable contains the Virtual Function (VF) PCI address that was allocated for the pod. If you use the same network in the pod definition, you must split the `pciAddress`. +It is important to configure the correct MAC addresses of the traffic generator. This example uses custom MAC addresses. diff --git a/modules/nw-sriov-example-dpdk-line-rate.adoc b/modules/nw-sriov-example-dpdk-line-rate.adoc new file mode 100644 index 0000000000..f4944d09d5 --- /dev/null +++ b/modules/nw-sriov-example-dpdk-line-rate.adoc @@ -0,0 +1,58 @@ +// Module included in the following assemblies: +// +// * networking/hardware_networks/using-dpdk-and-rdma.adoc + +:_content-type: PROCEDURE +[id="nw-example-dpdk-line-rate_{context}"] += Using SR-IOV and the Node Tuning Operator to achieve a DPDK line rate +You can use the Node Tuning Operator to configure isolated CPUs, hugepages, and a topology scheduler. +You can then use the Node Tuning Operator with Single Root I/O Virtualization (SR-IOV) to achieve a specific Data Plane Development Kit (DPDK) line rate. + +.Prerequisites + +* You have installed the OpenShift CLI (`oc`). +* You have installed the SR-IOV Network Operator. +* You have logged in as a user with `cluster-admin` privileges. +* You have deployed a standalone Node Tuning Operator. ++ +[NOTE] +==== +In previous versions of {product-title}, the Performance Addon Operator was used to implement automatic tuning to achieve low latency performance for OpenShift applications. In {product-title} 4.11 and later, this functionality is part of the Node Tuning Operator. +==== + +.Procedure +. Create a `PerformanceProfile` object based on the following example: ++ +[source,yaml] +---- +apiVersion: performance.openshift.io/v2 +kind: PerformanceProfile +metadata: + name: performance +spec: + globallyDisableIrqLoadBalancing: true + cpu: + isolated: 21-51,73-103 <1> + reserved: 0-20,52-72 <2> + hugepages: + defaultHugepagesSize: 1G <3> + pages: + - count: 32 + size: 1G + net: + userLevelNetworking: true + numa: + topologyPolicy: "single-numa-node" + nodeSelector: + node-role.kubernetes.io/worker-cnf: "" +---- +<1> If hyperthreading is enabled on the system, allocate the relevant symbolic links to the `isolated` and `reserved` CPU groups. If the system contains multiple non-uniform memory access nodes (NUMAs), allocate CPUs from both NUMAs to both groups. You can also use the Performance Profile Creator for this task. For more information, see _Creating a performance profile_. +<2> You can also specify a list of devices that will have their queues set to the reserved CPU count. For more information, see _Reducing NIC queues using the Node Tuning Operator_. +<3> Allocate the number and size of hugepages needed. You can specify the NUMA configuration for the hugepages. By default, the system allocates an even number to every NUMA node on the system. If needed, you can request the use of a realtime kernel for the nodes. See _Provisioning a worker with real-time capabilities_ for more information. +. Save the `yaml` file as `mlx-dpdk-perfprofile-policy.yaml`. +. Apply the performance profile using the following command: ++ +[source,terminal] +---- +$ oc create -f mlx-dpdk-perfprofile-policy.yaml +---- diff --git a/modules/nw-sriov-network-operator.adoc b/modules/nw-sriov-network-operator.adoc new file mode 100644 index 0000000000..f5ba2b29c6 --- /dev/null +++ b/modules/nw-sriov-network-operator.adoc @@ -0,0 +1,93 @@ +// Module included in the following assemblies: +// +// * networking/hardware_networks/using-dpdk-and-rdma.adoc + +:_content-type: REFERENCE +[id="nw-sriov-network-operator_{context}"] += Example SR-IOV Network Operator for virtual functions + +You can use the Single Root I/O Virtualization (SR-IOV) Network Operator to allocate and configure Virtual Functions (VFs) from SR-IOV-supporting Physical Function NICs on the nodes. + +For more information on deploying the Operator, see _Installing the SR-IOV Network Operator_. +For more information on configuring an SR-IOV network device, see _Configuring an SR-IOV network device_. + +There are some differences between running Data Plane Development Kit (DPDK) workloads on Intel VFs and Mellanox VFs. This section provides object configuration examples for both VF types. +The following is an example of an `sriovNetworkNodePolicy` object used to run DPDK applications on Intel NICs: +[source,yaml] +---- +apiVersion: sriovnetwork.openshift.io/v1 +kind: SriovNetworkNodePolicy +metadata: + name: dpdk-nic-1 + namespace: openshift-sriov-network-operator +spec: + deviceType: vfio-pci <1> + needVhostNet: true <2> + nicSelector: + pfNames: ["ens3f0"] + nodeSelector: + node-role.kubernetes.io/worker-cnf: "" + numVfs: 10 + priority: 99 + resourceName: dpdk_nic_1 +--- +apiVersion: sriovnetwork.openshift.io/v1 +kind: SriovNetworkNodePolicy +metadata: + name: dpdk-nic-1 + namespace: openshift-sriov-network-operator +spec: + deviceType: vfio-pci + needVhostNet: true + nicSelector: + pfNames: ["ens3f1"] + nodeSelector: + node-role.kubernetes.io/worker-cnf: "" + numVfs: 10 + priority: 99 + resourceName: dpdk_nic_2 + +---- +<1> For Intel NICs, `deviceType` must be `vfio-pci`. +<2> If kernel communication with DPDK workloads is required, add `needVhostNet: true`. This mounts the `/dev/net/tun` and `/dev/vhost-net` devices into the container so the application can create a tap device and connect the tap device to the DPDK workload. + +The following is an example of an `sriovNetworkNodePolicy` object for Mellanox NICs: +[source,yaml] +---- +apiVersion: sriovnetwork.openshift.io/v1 +kind: SriovNetworkNodePolicy +metadata: + name: dpdk-nic-1 + namespace: openshift-sriov-network-operator +spec: + deviceType: netdevice <1> + isRdma: true <2> + nicSelector: + rootDevices: + - "0000:5e:00.1" + nodeSelector: + node-role.kubernetes.io/worker-cnf: "" + numVfs: 5 + priority: 99 + resourceName: dpdk_nic_1 +--- +apiVersion: sriovnetwork.openshift.io/v1 +kind: SriovNetworkNodePolicy +metadata: + name: dpdk-nic-2 + namespace: openshift-sriov-network-operator +spec: + deviceType: netdevice + isRdma: true + nicSelector: + rootDevices: + - "0000:5e:00.0" + nodeSelector: + node-role.kubernetes.io/worker-cnf: "" + numVfs: 5 + priority: 99 + resourceName: dpdk_nic_2 +---- +<1> For Mellanox devices the `deviceType` must be `netdevice`. +<2> For Mellanox devices `isRdma` must be `true`. +Mellanox cards are connected to DPDK applications using Flow Bifurcation. This mechanism splits traffic between Linux user space and kernel space, and can enhance line rate processing capability. diff --git a/networking/hardware_networks/using-dpdk-and-rdma.adoc b/networking/hardware_networks/using-dpdk-and-rdma.adoc index 5827fd152b..441262f611 100644 --- a/networking/hardware_networks/using-dpdk-and-rdma.adoc +++ b/networking/hardware_networks/using-dpdk-and-rdma.adoc @@ -6,7 +6,6 @@ include::_attributes/common-attributes.adoc[] toc::[] - The containerized Data Plane Development Kit (DPDK) application is supported on {product-title}. You can use Single Root I/O Virtualization (SR-IOV) network hardware with the Data Plane Development Kit (DPDK) and with remote direct memory access (RDMA). For information on supported devices, refer to xref:../../networking/hardware_networks/about-sriov.adoc#supported-devices_about-sriov[Supported devices]. @@ -15,6 +14,18 @@ include::modules/nw-sriov-dpdk-example-intel.adoc[leveloffset=+1] include::modules/nw-sriov-dpdk-example-mellanox.adoc[leveloffset=+1] +include::modules/nw-sriov-concept-dpdk-line-rate.adoc[leveloffset=+1] + +include::modules/nw-sriov-example-dpdk-line-rate.adoc[leveloffset=+1] + +include::modules/nw-sriov-network-operator.adoc[leveloffset=+2] + +include::modules/nw-sriov-create-object.adoc[leveloffset=+2] + +include::modules/nw-sriov-dpdk-base-workload.adoc[leveloffset=+2] + +include::modules/nw-sriov-dpdk-running-testpmd.adoc[leveloffset=+2] + [id="example-vf-use-in-rdma-mode-mellanox_{context}"] == Using a virtual function in RDMA mode with a Mellanox NIC @@ -28,7 +39,14 @@ include::modules/nw-sriov-rdma-example-mellanox.adoc[tag=content] [id="additional-resources_using-dpdk-and-rdma"] == Additional resources -* xref:../../networking/hardware_networks/configuring-sriov-net-attach.adoc#configuring-sriov-net-attach[Configuring an SR-IOV Ethernet network attachment]. -* The xref:../../networking/hardware_networks/about-sriov.adoc#nw-sriov-app-netutil_about-sriov[app-netutil library], provides several API methods for gathering network information about a container's parent pod. +* xref:../../scalability_and_performance/cnf-create-performance-profiles.adoc#cnf-about-the-profile-creator-tool_cnf-create-performance-profiles[Creating a performance profile] +* xref:../../scalability_and_performance/cnf-low-latency-tuning.adoc#adjusting-nic-queues-with-the-performance-profile_cnf-master[Reducing NIC queues using the Node Tuning Operator] +* xref:../../scalability_and_performance/cnf-low-latency-tuning.adoc#performance-addon-operator-provisioning-worker-with-real-time-capabilities_cnf-master[Provisioning a worker with real-time capabilities] +* xref:../../networking/hardware_networks/installing-sriov-operator.adoc#installing-sr-iov-operator_installing-sriov-operator[Installing the SR-IOV Network Operator] +* xref:../../networking/hardware_networks/configuring-sriov-device.adoc#nw-sriov-networknodepolicy-object_configuring-sriov-device[Configuring an SR-IOV network device] +* xref:../../networking/multiple_networks/configuring-additional-network.adoc#nw-multus-whereabouts_configuring-additional-network[Dynamic IP address assignment configuration with Whereabouts] +* xref:../../scalability_and_performance/cnf-low-latency-tuning.adoc#disabling_interrupt_processing_for_individual_pods_cnf-master[Disabling interrupt processing for individual pods] +* xref:../../networking/hardware_networks/configuring-sriov-net-attach.adoc#configuring-sriov-net-attach[Configuring an SR-IOV Ethernet network attachment] +* The xref:../../networking/hardware_networks/about-sriov.adoc#nw-sriov-app-netutil_about-sriov[app-netutil library] provides several API methods for gathering network information about a container's parent pod. :!FeatureName: