Re: [neutron][ovn] Logical flow scaling (flow explosion in lr_in_arp_resolve)
Krzysztof Klimonda
kklimonda at syntaxhighlighted.com
Fri Sep 18 12:22:28 UTC 2020
Hi Daniel,
Sure, I've opened https://review.opendev.org/#/c/752678/ so we can move the discussion there - I'll add tests next week.
--
Krzysztof Klimonda
kklimonda at syntaxhighlighted.com
On Fri, Sep 18, 2020, at 11:17, Daniel Alvarez Sanchez wrote:
> Hey folks, thanks for bringing this up!
>
> On Fri, Sep 18, 2020 at 10:39 AM Krzysztof Klimonda <kklimonda at syntaxhighlighted.com> wrote:
>> So just for testing I've applied this patch to our neutron-server:
>>
>> --8<--8<--8<--
>> diff --git a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py
>> index 23a841d7a1..41200786f1 100644
>> --- a/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py
>> +++ b/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py
>> @@ -1141,11 +1141,15 @@ class OVNClient(object):
>> enabled = router.get('admin_state_up')
>> lrouter_name = utils.ovn_name(router['id'])
>> added_gw_port = None
>> + options = {
>> + "always_learn_from_arp_request": "false",
>> + "dynamic_neigh_routers": "true"
>> + }
>> with self._nb_idl.transaction(check_error=True) as txn:
>> txn.add(self._nb_idl.create_lrouter(lrouter_name,
>> external_ids=external_ids,
>> enabled=enabled,
>> - options={}))
>> + options=options))
>> # TODO(lucasagomes): add_external_gateway is being only used
>> # by the ovn_db_sync.py script, remove it after the database
>> # synchronization work
>> --8<--8<--8<--
>>
>
> Do you want to propose a formal patch with this change and some test? I think we may want this in.
> The question is if we want to make it configurable and, if so, how to expose it to an admin...
>
> When enabling this, we're going to have ARP requests between the logical routers and, depending on the topology, this can create other scaling issues due to MAC_Binding entries in the Southbound database. Also, these entries do not age out [0] so we might end up with a very large amount of rows here.
>
> This is probably an unlikely pattern in OpenStack where usually projects connect their routers to a localnet Logical Switch but routers across projects are not interconnected. Hence, the amount of E/W traffic is not a full mesh and, probably, even in the worst case it's going to be still better than what we have right now in terms of scaling.
>
> On the ARP traffic side, it should not be a big deal, they'll be sent between routers when needed and, since the entries do not age out, they're not going to be sent again.
>
> Again, thanks for bringing this up! I'd +1 this change :)
>
> [0] https://www.mail-archive.com/ovs-discuss@openvswitch.org/msg05917.html
>
>
>> and also executed that for each logical router in OVN:
>>
>> # ovn-nbctl set Logical_Router $router options=dynamic_neigh_routers=true,always_learn_from_arp_request=false
>>
>> This had a huge impact on both a number of logical flows and a number of ovs flows on chassis nodes:
>>
>> --8<--8<--8<--
>> # cat lflows-new.txt |grep -v Datapath |cut -d'(' -f 2 | cut -d ')' -f1 |sort | uniq -c |sort -n | tail -10
>> 2170 ls_out_port_sec_l2
>> 2172 lr_in_learn_neighbor
>> 2666 lr_in_admission
>> 2690 ls_in_port_sec_l2
>> 3190 lr_in_ip_routing
>> 4276 lr_in_lookup_neighbor
>> 4873 lr_in_arp_resolve
>> 5864 ls_in_arp_rsp
>> 5873 ls_in_l2_lkup
>> 14343 lr_in_ip_input
>> # ovn-sbctl --timeout=120 lflow-list > lflows-new.txt
>> --8<--8<--8<--
>>
>> (and this is even more routers than before - 500 vs 400). I'll have to read what impact do those options have on ARP activity though.
>>
>> --
>> Krzysztof Klimonda
>> kklimonda at syntaxhighlighted.com
>>
>> On Thu, Sep 17, 2020, at 21:14, Krzysztof Klimonda wrote:
>> > Hi Tony,
>> >
>> > Indeed I forgot to mention that all routers are using the same external
>> > network (and subnet) for the external gateway.
>> >
>> > Creating separate external networks per router wouldn't really work for
>> > us, and I'm not even quite sure what the setup would look like in that
>> > case.
>> >
>> > --
>> > Krzysztof Klimonda
>> > kklimonda at syntaxhighlighted.com
>> >
>> > On Thu, Sep 17, 2020, at 20:31, Tony Liu wrote:
>> > > I am trying to reach 5000. The problem I hit is that northd is
>> > > stuck in translating from NB to SB when connect router to external
>> > > network.
>> > >
>> > > I assume all your 400 routers connect to the same subnet in that
>> > > external network. I am trying another approach where one subnet
>> > > is created for each router in external network. That may help to
>> > > reduce the ARP flow?
>> > >
>> > > Thanks!
>> > > Tony
>> > > > -----Original Message-----
>> > > > From: Krzysztof Klimonda <kklimonda at syntaxhighlighted.com>
>> > > > Sent: Thursday, September 17, 2020 8:57 AM
>> > > > To: openstack-discuss at lists.openstack.org
>> > > > Subject: [neutron][ovn] Logical flow scaling (flow explosion in
>> > > > lr_in_arp_resolve)
>> > > >
>> > > > Hi,
>> > > >
>> > > > We're running some tests of ussuri deployment with ovn ML2 driver and
>> > > > seeing some worrying numbers of logical flows generated for our test
>> > > > deployment.
>> > > >
>> > > > As a test, we create 400 routes, 400 private networks and connect each
>> > > > network to its own routers. We also connect each router to an external
>> > > > network. After doing that a dump of logical flows shows almost 800k
>> > > > logical flows, most of them in lr_in_arp_resolve table:
>> > > >
>> > > > --8<--8<--8<--
>> > > > # cat lflows.txt |grep -v Datapath |cut -d'(' -f 2 | cut -d ')' -f1
>> > > > |sort | uniq -c |sort -n | tail -10
>> > > > 3264 lr_in_learn_neighbor
>> > > > 3386 ls_out_port_sec_l2
>> > > > 4112 lr_in_admission
>> > > > 4202 ls_in_port_sec_l2
>> > > > 4898 lr_in_lookup_neighbor
>> > > > 4900 lr_in_ip_routing
>> > > > 9144 ls_in_l2_lkup
>> > > > 9160 ls_in_arp_rsp
>> > > > 22136 lr_in_ip_input
>> > > > 671656 lr_in_arp_resolve
>> > > > #
>> > > > --8<--8<--8<--
>> > > >
>> > > > ovn: 20.06.2 + patch for SNAT IP ARP reply issue
>> > > > openvswitch: 2.13.0
>> > > > neutron: 16.1.0
>> > > >
>> > > > I've seen some discussion about similar issue at OVS mailing lists:
>> > > > https://www.mail-archive.com/ovs-discuss@openvswitch.org/msg07014.html -
>> > > > is this relevant to neutron, and not just kubernetes?
>> > > >
>> > > > --
>> > > > Krzysztof Klimonda
>> > > > kklimonda at syntaxhighlighted.com
>> > >
>> > >
>> >
>> >
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-discuss/attachments/20200918/e3bab4a8/attachment-0001.html>
More information about the openstack-discuss
mailing list