Project

General

Profile

Actions

Feature #7036

open

Feature #6805: cpu-affinity: enhance CPU affinity logic with per-interface NUMA preferences

DPDK NUMA setup: choose correct CPUs from worker-cpu-set

Added by Adhirath Kabra 5 months ago. Updated about 2 months ago.

Status:
In Progress
Priority:
Normal
Assignee:
Target version:
Effort:
Difficulty:
Label:

Description

My machine has even numbered cores on NUMA0 and odd numbered cores on NUMA1. I have defined two vdev interfaces, one on each socket, and defined worker-cpu-set as:
cpu: [ 2,4,6,8,10,12,14,3,5,7,9,11,13,15 ]

The desired behaviour is that first 7 threads (2,4,6,8,10,12,14) use NIC on NUMA0 and the remaining 7 (3,5,7,9,11,13,15) use NIC on NUMA1.

Actual behaviour is that the cpu list is probably sorted internally and read as [ 2,3,4,5,6,7,8,9,10,11,12,13,14,15 ]. As a result, I receive a warning stating -
dpdk: net_bonding0: NIC is on NUMA 0, 3 threads on different NUMA node(s) , which indicates that threads 2-8 are using NIC on NUMA0 and 9-15 are using NIC on NUMA1.


Related issues 2 (2 open0 closed)

Related to Suricata - Task #3318: Research: NUMA awarenessNewOISF DevActions
Related to Suricata - Bug #7137: "invalid cpu range" when trying to use CPU affinityNewOISF DevActions
Actions #1

Updated by Adhirath Kabra 5 months ago

  • Subject changed from NUMA: choose correct CPUs from worker-cpu-set to DPDK NUMA setup: choose correct CPUs from worker-cpu-set
  • Assignee changed from OISF Dev to Lukas Sismis
Actions #2

Updated by Lukas Sismis 5 months ago

  • Tracker changed from Bug to Feature
  • Status changed from New to Assigned
  • Target version changed from TBD to 8.0.0-beta1
  • Parent task set to #6805
  • Affected Versions deleted (7.0.5)
Actions #3

Updated by Lukas Sismis 5 months ago

  • Status changed from Assigned to In Progress
Actions #4

Updated by Victor Julien 5 months ago

  • Related to Task #3318: Research: NUMA awareness added
Actions #5

Updated by Victor Julien 4 months ago

  • Related to Bug #7137: "invalid cpu range" when trying to use CPU affinity added
Actions #6

Updated by Lukas Sismis 4 months ago

Here is the suggestion for the feature.

    // threading.cpu-assignment:
    //   - legacy - assign as usual
    //   - auto - use hwloc to determine NUMA locality of the NIC and try to assign a core from this NUMA node.
    //            If it fails then use the other NUMA node.
    //            Using this approach e.g. on bonded devices/aliased and any other will not work
    //            Warn/Notify a user when device's NUMA node cannot be determined.
    //            Mention in the docs that NUMA locatity supports PCIe addresses and Kernel interfaces
    //   - manual - in workers CPU set either:
    //              - Specify in one line ([ "eth0@1,2,3,4,7-9", "eth1@10,11" ])
    //              - Specify threading in a list:
    //              - worker-cpu-set:
    //                - interface: eth0
    //                    cpu: [ 1,2,3,4 ]
    //                    mode: "exclusive" 
    //                    prio:
    //                      high: [ 3 ]
    //                      default: "medium" 
Actions #7

Updated by Lukas Sismis 4 months ago ยท Edited

Current draft containing something like auto mode (not fully implemented yet):
https://github.com/OISF/suricata/compare/master...lukashino:suricata:feat/6805-numa-cpu-locality-v1

(Manual support not included)

Actions #8

Updated by Adhirath Kabra 4 months ago

Lukas Sismis wrote in #note-6:

Here is the suggestion for the feature.

[...]

Nice suggestion, especially the flexibility in resource allocation that manual mode would offer. For example as an IDS, monitored links can be assigned CPUs proportionate to the amount of average traffic they have.

Actions #9

Updated by Victor Julien 4 months ago

Lukas Sismis wrote in #note-7:

Current draft containing something like auto mode (not fully implemented yet):
https://github.com/OISF/suricata/compare/master...lukashino:suricata:feat/6805-numa-cpu-locality-v1

(Manual support not included)

Please do this as a draft PR so we can discuss implementation things there.

Actions #11

Updated by Lukas Sismis about 2 months ago

New update is here - https://github.com/OISF/suricata/pull/11706

It has been polished and now I have added a manual setting as well.

Actions

Also available in: Atom PDF