On 6 Feb 2024, at 15:50, David Marchand wrote:

> On Tue, Feb 6, 2024 at 3:47 PM Eelco Chaudron <echau...@redhat.com> wrote:
>> On 6 Feb 2024, at 15:17, David Marchand wrote:
>>
>>> On Tue, Feb 6, 2024 at 2:31 PM Eelco Chaudron <echau...@redhat.com> wrote:
>>>>
>>>> Avoid unnecessary thread creation as no upcalls are generated,
>>>> resulting in idle threads waiting for process termination.
>>>>
>>>> This optimization significantly reduces memory usage, cutting it
>>>> by half on a 128 CPU/thread system during testing, with the number
>>>> of threads reduced from 95 to 0.
>>>>
>>>> Signed-off-by: Eelco Chaudron <echau...@redhat.com>
>>>
>>> I find it weird that the dpif layer reports an information on how the
>>> ofproto-dpif layer behaves.
>>> The handler threads are something ofproto-dpif is responsible for.
>>> The upcall receiving loop is something the ofproto-dpif owns.
>>> Why should the dpif layer tells how many handlers are needed?
>>>
>>>
>>> I would have seen a different change, where the dpif layer exports a
>>> capability, like dpif_can_recv() { return !!dpif->dpif_class->recv; }.
>>> ofproto-dpif would then deduce there is no handler to start at all.
>>
>> That was my first idea also, but then I found there is already an API call 
>> to the dpif layer where it can tell the user (ofproto in this case) how many 
>> threads it needs to function correctly. Here is the API definition:
>>
>> 369      /* Queries 'dpif' to see if a certain number of handlers are 
>> required by
>> 370       * the implementation.
>> 371       *
>> 372       * If a certain number of handlers are required, returns 'true' and 
>> sets
>> 373       * 'n_handlers' to that number of handler threads.
>> 374       *
>> 375       * If not, returns 'false'.
>> 376       */
>> 377      bool (*number_handlers_required)(struct dpif *dpif, uint32_t 
>> *n_handlers);
>>
>> I guess the ‘If a certain number of handlers are required, returns 'true’’ 
>> part fits here, as we need 0.
>
> The fact that it exists does not convince me on its validity :-).
> I must be missing something.

Well, it makes sense that if your dpif requires a specific number of handlers 
other than what ofproto suggests you can override this.
And this is what happens here, ofproto will suggest 90+ threads if we do not 
report that we want 0.

I think this is more clean than doing another check for a missing callback and 
using that to determine if we need to start threads.

//Eelco

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to