Hi Dumitru!

I’ve performed test on the host, where ovn-controller (22.09.x) without your 
patch and without any local datapaths consumed 3+GiB of ram after start and the 
process start took 100% CPU during ~40 seconds after start.
With your patch ovn-controller starts during ~5 seconds with max cpu 
consumption seen in top ~35-36%.
Memory consumption doesn’t exceed 220-222 MiB on the same host with same NB/SB 
contents.

Many thanks for this improvement!

I guess after this patch got merged to main branch, it should be backported 
down to 22.03 (branch, to which initial commit [0] introduced such behaviour 
was backported).

0: 
https://github.com/ovn-org/ovn/commit/525829c47d09a114de8536d23784c458977d8321

> On 31 Jul 2023, at 14:43, Vladislav Odintsov <odiv...@gmail.com> wrote:
> 
> Thanks Dumitru!
> 
> I’ll test this patch in a few days.
> 
>> On 28 Jul 2023, at 14:36, Dumitru Ceara <dce...@redhat.com> wrote:
>> 
>> Hi Vladislav,
>> 
>> After quite some time trying to implement the IDL API change to allow
>> setting a different default monitor condition and mostly struggling with
>> ovn-controller using that properly I kind of gave up and decided to
>> approach this in a different way.
>> 
>> We have guidelines about supported upgrade scenarios [0] so we can use
>> the same guidelines for defining which tables ovn-controller is entitled
>> to assume exist in the SB (without having to check).
>> 
>> I ended up with:
>> https://github.com/dceara/ovn/commit/f5e8b9bcba61a2528b67854bb4211981a99feaa8
>> 
>> I know it's not perfect but it might be the least risky and a good
>> enough solution.
>> 
>> It would be great if you could try it out on your data set too.
>> 
>> Thanks,
>> Dumitru
>> 
>> [0]
>> https://github.com/ovn-org/ovn/blob/5a1d82cb28c554276e0c17718f808b8f244cb162/Documentation/intro/install/ovn-upgrades.rst?plain=1#L28
>> 
>> On 7/25/23 10:19, Vladislav Odintsov wrote:
>>> Many thanks for the information!
>>> 
>>>> On 25 Jul 2023, at 11:14, Dumitru Ceara <dce...@redhat.com> wrote:
>>>> 
>>>> On 7/24/23 21:10, Vladislav Odintsov wrote:
>>>>> Hi Dumitru,
>>>>> 
>>>> 
>>>> Hi Vladislav,
>>>> 
>>>>> I just wanted to ask wether you need any help (maybe, testing) in this?
>>>>> I’m ready to check this on my dataset if you were successful to
>>>>> implement a fix.
>>>>> 
>>>> 
>>>> Thanks for offering to help.  I didn't get the chance to properly write
>>>> and test the patches for this (we need a change in OVS IDL first and
>>>> then one in OVN).  It would be great if you could try them out on your
>>>> data sets so I'll CC you on the patches when posting them.  I hope to do
>>>> that this week.
>>>> 
>>>> Regards,
>>>> Dumitru
>>>> 
>>>>>> On 12 Jul 2023, at 12:15, Dumitru Ceara <dce...@redhat.com> wrote:
>>>>>> 
>>>>>> On 7/12/23 00:01, Ilya Maximets wrote:
>>>>>>> On 7/11/23 19:01, Dumitru Ceara wrote:
>>>>>>>> On 7/11/23 18:33, Vladislav Odintsov wrote:
>>>>>>>>> Hi Dumitru,
>>>>>>>>> 
>>>>>>>>> The system on which I reproduced this issue is running 22.09.x
>>>>>>>>> version. I’ve tried to upgrade ovn-controller to main branch + your
>>>>>>>>> patch. Please, note that it has test error: [1].
>>>>>>>>> After two minutes after upgrade it still consumed 3.3G.
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> Ack, I need to re-think the patch then.  Maybe a hard deadline to run
>>>>>>>> malloc_trim() at least once every X seconds.  I'll see what I can come
>>>>>>>> up with.
>>>>>>>> 
>>>>>>>>> I tried to backport your patch to 22.09, it required to backport
>>>>>>>>> also this commit: [2] and it failed some tests: [3].
>>>>>>>>> 
>>>>>>>>> But I’ve got general question: prior to commit that I mentioned in
>>>>>>>>> initial mail, ovn-controller even didn’t try load such amount of
>>>>>>>>> data. And now it does and IIUC, your patch just releases memory
>>>>>>>>> that was freed after ovn-controller fully loaded.
>>>>>>>>> I’m wonder wether it should load that excess data at all? Seems
>>>>>>>>> like it did.
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> Looking again at 1b0dbde94070 ("ovn-controller: Only set monitor
>>>>>>>> conditions on available tables.") it's kind of expected indeed:
>>>>>>>> 
>>>>>>>> Initially all tables are "unavailable" because we didn't get the schema
>>>>>>>> so we don't set any condition for any table.
>>>>>>>> 
>>>>>>>> After ovn-controller connects to the SB for the first time it will
>>>>>>>> determine that the SB tables are in the schema so it will explicitly 
>>>>>>>> add
>>>>>>>> them to the monitor condition and restrict the SB data it is
>>>>>>>> interested in.
>>>>>>>> 
>>>>>>>> Maybe we need to change the IDL/CS modules to wait with the
>>>>>>>> monitor_cond/monitor_cond_since until instructed by the client
>>>>>>>> (ovn-controller).  Ilya do you have any thoughts on this matter?
>>>>>>> 
>>>>>>> So, AFAICT, the issue is that we're running with
>>>>>>> 'monitor_everything_by_default'
>>>>>>> option, the default condition is 'true' and the monitor request for
>>>>>>> the main
>>>>>>> database is sent out immediately after receiving the schema, so the
>>>>>>> application
>>>>>>> has no time to react.
>>>>>>> 
>>>>>>> I think, there are few possible solutions for this:
>>>>>>> 
>>>>>>> 1. Introduce a new state in the CS state machine, e.g.
>>>>>>> CS_S_SERVER_SCHEMA_RCEIVED, and move out from this state in the run()
>>>>>>> callback.  This way the application will have a chance to set up
>>>>>>> conditions
>>>>>>> before they are sent.  Slightly not intuitive.
>>>>>>> 
>>>>>>> 2. A variation on what you suggested, i.e. enter the
>>>>>>> CS_S_SERVER_SCHEMA_RCEIVED
>>>>>>> state and wait for some sort of the signal from the application to
>>>>>>> proceed.
>>>>>>> Sounds a bit counter-intuitive for an IDL user.
>>>>>>> 
>>>>>>> 3. Introduce an application callback that can be called from the
>>>>>>> ovsdb_idl_compose_monitor_request() the same way as this function
>>>>>>> is getting
>>>>>>> called form the ovsdb_cs_send_monitor_request().  An application
>>>>>>> will be
>>>>>>> able to influence conditions before they are sent.
>>>>>>> Might be tricky due to new->req->ack state transition.
>>>>>>> 
>>>>>>> 4. Make the default condition configurable, e.g. by an additional
>>>>>>> argument
>>>>>>> 'default_condition' = true/false for an ovsdb_idl_create().  This
>>>>>>> way the
>>>>>>> application will not get any data until conditions are actually set.
>>>>>>> 
>>>>>>> 5. Or it maybe just a separate config function that will set default
>>>>>>> conditions
>>>>>>> to 'false' and will need to be called before the first run().
>>>>>>> 
>>>>>>> 6. Change behavior of 'monitor_everything_by_default' argument.  Make it
>>>>>>> actually add all the tables to the monitor, but with the 'false'
>>>>>>> condition.
>>>>>>> Result should technically be the same.  Might be tricky to get
>>>>>>> right though
>>>>>>> with all the backward compatibility.
>>>>>>> 
>>>>>>> Option 5 might be the better option of these.
>>>>>>> 
>>>>>>> What do you think?
>>>>>>> 
>>>>>> 
>>>>>> I think option 5 sounds the simplest to implement indeed.  It also
>>>>>> doesn't induce any compatibility issues as you mentioned.
>>>>>> 
>>>>>> The only "issue" is we'd probably want this backported to stable OVN
>>>>>> releases so it means we need to bump the submodule version to an
>>>>>> unreleased version of OVS.  But that's an OVN problem and we discussed
>>>>>> similar instances of it before.
>>>>>> 
>>>>>> I'll prepare a patch soon.
>>>>>> 
>>>>>> Best regards,
>>>>>> Dumitru
>>>>> 
>>>>> 
>>>>> Regards,
>>>>> Vladislav Odintsov
>>>>> 
>>>> 
>>>> _______________________________________________
>>>> dev mailing list
>>>> d...@openvswitch.org <mailto:d...@openvswitch.org>
>>>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>>> 
>>> 
>>> Regards,
>>> Vladislav Odintsov
>>> 
>>> _______________________________________________
>>> dev mailing list
>>> d...@openvswitch.org
>>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>> 
>> _______________________________________________
>> dev mailing list
>> d...@openvswitch.org
>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> 
> 
> Regards,
> Vladislav Odintsov
> 
> _______________________________________________
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev


Regards,
Vladislav Odintsov

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

Reply via email to