[Oisf-users] Question about cpu-affinity

Victor Julien lists at inliniac.net
Fri Mar 2 10:48:27 UTC 2018


On 02-03-18 11:35, Eric Leblond wrote:
> Hi Cooper,
> 
> On Thu, 2018-03-01 at 08:12 -0800, Cooper F. Nelson wrote:
>> Hi Eric,
>>
>> I hope you don't mind me copying you directly, as I saw you were the
>> author of the threading/cpu-affinity module.
> 
> That was long ago ;)
> 
>> I'm wondering if it is currently possible when using multiple
>> interfaces
>> to 'interleave' the threads so that they are evenly distributed
>> across
>> all cores.  For example, consider a system with 16 cores and two
>> interfaces, configured with 8 threads each.
>>
>> Can you do something like this?
>>
>>   - detect-cpu-set
>>
>>         cpu: [ 0, 2, 4, 6, 8, 10, 12, 14, 1, 3, 5, 7, 9, 11, 13, 15 ]
>>
>>         mode: "exclusive"
>>
>> The idea is we want the first 8 threads allocated to 0-14, even cores
>> only.  The next 8 threads being allocated to 1-16, odd cores only. 
>> Lets
>> assume we are using RSS in this example.
>>
>> I had a look at the code and while it appears that this how you have
>> implemented it, I'm not 100% certain, so I wanted to verify.
> 
> I don't think this will work. The CPU set is an unordered. Suricata
> build the CPU set as a map then it start by 0, get next CPU in the set
> (testing if 0 is in then switching to 1 and checking if it is in the
> set).
> 
> So with current code, the only way to do what you want is to have a
> ["all"] CPU set in exclusive mode in the affinity and an ugly af-packet 
> configuration like:
> 
>   af-packet:
>     - interface: eth0
>       threads: 1
>       cluster-id: 99
>     - interface: eth1
>       threads: 1
>       cluster-id: 98
>     - interface: eth0
>       threads: 1
>       cluster-id: 99
>     - interface: eth1
>       threads: 1
>       cluster-id: 98
>     ...
>     -
> default:
>       #set every global variable here
> 

Wonder how hard it would be to hide this kind of detail. E.g. something
like:

af-packet:
  - interface: eth0
    cluster-id: 99
    numa-node: 0
  - interface: eth1
    cluster-id: 98
    numa-node: 1

It would immediately bring up the issue of how to exclude cores, etc. So
might not be trivial.

-- 
---------------------------------------------
Victor Julien
http://www.inliniac.net/
PGP: http://www.inliniac.net/victorjulien.asc
---------------------------------------------




More information about the Oisf-users mailing list