On Tue, Feb 2, 2016 at 4:31 PM, Russell Bryant <russ...@ovn.org> wrote:
> On 02/02/2016 05:21 PM, Ben Pfaff wrote:
>> On Tue, Feb 02, 2016 at 05:01:35PM -0500, Russell Bryant wrote:
>>> On 02/02/2016 04:49 PM, Ben Pfaff wrote:
>>>> On Thu, Jan 21, 2016 at 03:21:00PM -0500, Russell Bryant wrote:
>>>>> Previously, ovn-controller translated logical flows into OpenFlow flows
>>>>> for *every* logical datapath.  This patch makes it so we skip doing so
>>>>> for the egress pipeline if the datapath is a logical switch with no
>>>>> logical ports bound locally.  In that case, the flows have no effect.
>>>>>
>>>>> This was the code path taking the most time in a large scale OVN
>>>>> environment and was an easy optimization to make based on the existing
>>>>> local_datapaths info.
>>>>>
>>>>> In this environment, while idling, ovn-controller was taking up about
>>>>> 20% CPU with this patch, while other nodes were in the 40-70% range.
>>>>>
>>>>> Reported-at: https://bugs.launchpad.net/networking-ovn/+bug/1536003
>>>>> Signed-off-by: Russell Bryant <russ...@ovn.org>
>>>>> Tested-by: Matt Mulsow <mailto:mamul...@us.ibm.com>
>>>>> ---
>>>>>
>>>>>
>>>>> As discussed in the OVN IRC meeting today, this is one patch I came up
>>>>> with while trying to analyze the performance in a large scale OVN
>>>>> test setup.  It made a big impact for not much code.  I know Ben had some
>>>>> suggestions for how to clean this up, so I'm just submitting as RFC for 
>>>>> now.
>>>>
>>>> I think this is fine for now; we can optimize more later.
>>>>
>>>> However I get a compile error against current master, perhaps it has
>>>> moved on since you posted the patch:
>>>>
>>>>     ../ovn/controller/ovn-controller.c: In function ‘main’:
>>>>     ../ovn/controller/ovn-controller.c:300:54: error: ‘local_datapaths’ 
>>>> undeclared (first use in this function)
>>>>                  lflow_run(&ctx, &flow_table, &ct_zones, &local_datapaths);
>>>>                                                           ^
>>>>     ../ovn/controller/ovn-controller.c:300:54: note: each undeclared 
>>>> identifier is reported only once for each function it appears in
>>>
>>> Yeah, I actually wrote this on top of this patch series:
>>>
>>> https://patchwork.ozlabs.org/bundle/russellb/localnet/
>>>
>>> mainly because the scale test environment had those patches applied.
>>>
>>>> I think that the way to optimize this, in the end, is to use a kind of
>>>> "flood fill" algorithm:
>>>>
>>>>     1. Initialize set S to the logical datapaths that have a port
>>>>        located on the hypervisor.
>>>>
>>>>     2. For each patch port P in a logical datapath in S, add the logical
>>>>        datapath of the remote end of P to S.
>>>>
>>>> Extra credit if there's a way to infer (or specify) that a logical
>>>> datapath is "terminal", that is, that a packet that comes into it from a
>>>> different logical datapath will never come back out.
>>>
>>> right, because #2 needs to happen on every datapath added as a result of
>>> #2, as well.
>>
>> Yes, I forgot to mention that #2 iterates until you reach a fixed point.
>>
>> I guess I'll ack this quickly when it reaches non-RFC.
>>
>
> You can ACK it now if you're happy with it and you'd like to skip the
> formality.  I was only going to update comment text based on our
> discussion here about "flood fill".
>

Acked-By: Kyle Mestery <mest...@mestery.com>

> --
> Russell Bryant
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to