How to bind DPDK threads to correct NUMA node when using 2 NUMA nodes with 1 NIC on each node

Hi,

System information:

  • 7.0.7
  • Ubuntu: 22.04
  • Built from source with DPDK

I have been wanting to configure DPDK with 2 NUMA nodes and 1 NIC on each NUMA node. However each and every time we configure DPDK, it ends up putting half the threads on the wrong NUMA node. This is probably due to DPDK assigning threads sequentially from 0-56.

Example setup:

Numa0: 0-13,27-41
Numa1: 14-26,42-55

CPU affinity setup:

threading:
  set-cpu-affinity: yes
  cpu-affinity:
    - management-cpu-set:
        cpu: [ 0 ]
    - receive-cpu-set:
        cpu: [ 0 ] 
    - worker-cpu-set:
        cpu: [ "0-13", "27-41", "14-26", "42-55" ]
        mode: "exclusive"
        prio:
          low: [ 0 ]
          medium: [ "1-2" ]
          high: [ "0-13", "27-41", "14-26", "42-55" ]
          default: "high"

DPDK configuration:

dpdk:
  eal-params:
    proc-type: primary

    - interface: 0000:3b:00.0 # PCIe address of the NIC port
      threads: 28
      ....
    - interface: 0000:80:00.0 # PCIe address of the NIC port
      threads: 28

I would expect the configuration to work like this:
0000:3b:00.0: “0-13”, “27-41”
0000:80:00.0: “14-26”, “42-55”

However it seems like DPDK binds the first 28 threads (“0-13”, “14-26”) to 0000:3b:00.0. This causes 14 of the threads to be on the wrong NUMA node.

Is there any way to work around this with DPDK eal params?

I would prefer not running two different suricata processes if possible.

Thanks in advance

EDIT: forgot to remove some comments and the fact that cpu-affinity is set to true

Hi,
so far Suri doesn’t have support for that but if you could check this PR:

that satisfies what you are looking for - check suricata.yaml.in how it can be configured.

I would appreciate feedback if the suggested solution is user-friendly enough and I can proceed with it.
Thanks.