Performance Optimization

This section presents some guidelines to get optimal performance from the fast path with FPN-SDK Add-on for DPDK.

Set up your BIOS

To get optimal performance, you may have to edit your BIOS settings.

For instance, the following parameters can enhance performance on an Intel Ivy-Bridge platform:

BIOS CPU Setting Value
Intel(R) QPI Frequency Select Auto Max
Intel(R) Turbo Boost Technology Disabled
Enhanced Intel SpeedStep(R) Tech Disabled
Processor C3 Disabled
Processor C6 Disabled
Intel(R) Hyper-Threading Tech Enabled
Active Processor Cores All
Execute Disable Bit Enabled
Intel(R) Virtualization Technology Enabled
Intel(R) VT for Directed I/O Enabled
  • Interrupt Remapping
Enabled
  • Coherency Support
Disabled
  • ATS Support
Enabled
  • Pass-through DMA Support
Enabled
Intel(R) TXT Disabled
Enhanced Error Containment Mode Disabled
MLC Streamer Enabled
MLC Spatial Prefetcher Enabled
DCU Data Prefetcher Enabled
DCU Instruction Prefetcher Enabled
Direct Cache Access (DCA) Enabled
Extended ATR 0x01

Allocate logical cores to the fast path

NICs, PCI slots, ports and cores

NICs are attached to PCI slots, which are attached to sockets. NICs are recognized as fast path ports.

../../../_images/core-nic-relation.svg

Core - NIC relation

Cores allocation

When starting the fast path via the fast-path.sh script, some logical cores are allocated to the fast path, and other logical cores, to the other Linux processes.

../../../_images/fp-cores-allocation.svg

Cores allocation to the fast path

You can specify which logical cores are allocated to the fast path via the /etc/fast-path.env fast path configuration file FP_MASK parameter.

Important

Never allocate core 0 to the fast path.

Example

Allocate logical cores 2, 3, 18 and 19 to the fast path:

: ${FP_MASK:=2,3,18,19}

Note

Logical core numbering can change between platforms and should be determined beforehand.

Make sure logical cores poll only ports located on the same socket

As the fast path constantly polls the NICs, it is critical that logical cores allocated to the fast path do not poll ports located on a different socket. Otherwise, memory accesses constantly traverse the processor interconnect, which may lead to a bottleneck.

../../../_images/qpi.svg

Cores managing ports on another socket

Map ports and logical cores

If you set CORE_PORT_MAPPING manually in the fast path configuration file, you must map ports and logical cores to fit your network architecture, as illustrated in the topologies below. By default (when CORE_PORT_MAPPING is set to auto), the core/port mapping already matches these constraints.

To specify which fast path logical cores poll which ports, edit the fast path fast-path.env configuration file CORE_PORT_MAPPING parameter.

Topology 1: as many logical cores as ports on the same socket

When there are as many fast path logical cores as ports, each core should poll one different port:

../../../_images/num-cores-ports-same.svg

As many cores as ports

Topology 2: not as many logical cores as ports on the same socket

When there are not as many fast path logical cores as ports, the easiest topology to implement is one of the following, where all fast path logical cores poll all ports. These topologies often offer a good support of borderline cases.

../../../_images/num-cores-ports-diff.svg

Different number of cores and ports

You can also test other configurations to better suit your needs.

Prevent packets from being processed on different sockets

For even better performance, try to prevent too many packets from being processed on different sockets. This avoids overloading the processor interconnect.

../../../_images/qpi-forwarding.svg

RX and TX on different sockets