edpm-ansible variables for SR-IOV and OVS-DPDK

Use edpm-ansible variables to optimize CPU and memory performance for OVS-DPDK and SR-IOV workloads on Red Hat OpenStack Services on OpenShift (RHOSO) data plane nodes.

Note

Always pair CPU sibling threads, or logical CPUs, together in the physical core when allocating CPU cores.

Use the variables to align your hardware configuration with host, guest instance, and OVS-DPDK process needs.

Data plane (EDPM) Ansible variables

You can use a set of Ansible variables to optimize CPU and memory parameters for performance on data plane nodes with OVS-DPDK and SR-IOV.

You can use the following Ansible roles variables in a custom resource (CR).

edpm_ovs_dpdk
Enables you to add, modify, and delete OVS-DPDK configurations, by using values defined in the OVS-DPDK edpm Ansible variables.
edpm_ovs_dpdk_pmd_core_list
Provides the CPU cores that are used for the DPDK poll mode drivers (PMD). Choose CPU cores that are associated with the local NUMA nodes of the DPDK interfaces.
edpm_ovs_dpdk_enable_tso
Enables (true) or disables (false) the TCP segmentation offloading (TSO) for DPDK feature. The default is false.
edpm_tuned_profile
Name of the custom TuneD profile. The default value is throughput-performance.
edpm_tuned_isolated_cores
A set of CPU cores isolated from the host processes.
edpm_ovs_dpdk_socket_memory

Specifies the amount of memory in MB to pre-allocate from the hugepage pool, per NUMA node. dpm_ovs_dpdk_socket_memory is the other_config:dpdk-socket-mem value in OVS:

  • Provide as a comma-separated list.
  • For a NUMA node without a DPDK NIC, use the static value of 1024MB (1GB).
  • Calculate the edpm_ovs_dpdk_socket_memory value from the MTU value of each NIC on the NUMA node. The following equation approximates the value:
    MEMORY_REQD_PER_MTU = (ROUNDUP_PER_MTU + 800) * (4096 * 64) Bytes
    • 800 is the overhead value.
    • 4096 * 64 is the number of packets in the mempool.
  • Add the MEMORY_REQD_PER_MTU for each of the MTU values set on the NUMA node and add another 512MB as buffer. Round the value up to a multiple of 1024.
edpm_ovs_dpdk_memory_channels

Maps memory channels in the CPU per NUMA node. edpm_ovs_dpdk_memory_channels is the other_config:dpdk-extra="-n <value>" value in OVS:

  • Use dmidecode -t memory or your hardware manual to determine the number of memory channels available.
  • Use ls /sys/devices/system/node/node* -d to determine the number of NUMA nodes.
  • Divide the number of memory channels available by the number of NUMA nodes.
edpm_ovs_dpdk_vhost_postcopy_support
Enable or disable OVS-DPDK vhost post-copy support. Setting this to true enables post-copy support for all vhost user client ports.
edpm_nova_libvirt_qemu_group
Set edpm_nova_libvirt_qemu_group to hugetlbfs`so that the `ovs-vswitchd and qemu processes can access the shared huge pages and UNIX socket that configures the virtio-net device. This value is role-specific and should be applied to any role leveraging OVS-DPDK.
edpm_ovn_bridge_mappings

List of bridge and DPDK ports mappings.

Example:

 edpm_ovn_bridge_mappings:
   - "datacentre:br-ex"
edpm_kernel_args
Provides multiple kernel arguments to /etc/default/grub for the compute nodes at boot time.

Configuration map parameters

You can set various parameters in the ConfigMap section of a custom resource (CR) to configure the CPU and memory for optimum performance on data plane nodes for OVS-DPDK and SR-IOV.

cpu_shared_set
List or range of host CPU cores used to determine the host CPUs that instance emulator threads should be offloaded to for instances configured with the share emulator thread policy (hw::emulator_threads_policy=share).
cpu_dedicated_set

A comma-separated list or range of physical host CPU numbers to which processes for pinned instance CPUs can be scheduled.

  • Exclude all cores from the edpm_ovs_dpdk_pmd_core_list.
  • Include all remaining cores.
  • Pair the sibling threads together.
reserved_host_memory_mb
Reserves memory in MB for tasks on the host. Use the static value of 4096MB.