On Thu, Nov 06, 2014 at 01:16:39PM -0800, Jarno Rajahalme wrote:
> 
> On Nov 6, 2014, at 12:28 PM, Ben Pfaff <b...@nicira.com> wrote:
> 
> > On Thu, Nov 06, 2014 at 10:50:09AM -0800, Jarno Rajahalme wrote:
> >> With notes below:
> >> 
> >> Acked-by: Jarno Rajahalme <jrajaha...@nicira.com>
> >> 
> >> On Nov 6, 2014, at 10:03 AM, Ben Pfaff <b...@nicira.com> wrote:
> >> 
> >>> Inserting or removing a sequence of flows with different wildcard patterns
> >>> causes temporary use of O(n**2) memory due to pvector modifications inside
> >>> the classifier.  This commit fixes the problem in two easy cases.  There
> >>> is at least one more difficult case inside ovs-vswitchd that this does not
> >>> fix.
> >> 
> >> I’m curious about the case inside ovs-vswitchd...
> > 
> > It occurs when you do an "ovs-ofctl del-flows" that deletes all of the
> > subtables.  Each subtable deletion creates a new copy of the pvector but
> > we can't free the old one yet.  Bang!
> 
> This could be solved by changing the vector to create holes (NULL
> pointers), and make the users deal with those. It seems like updating
> the vector iterators would suffice, so the change could be invisible
> to the users, actually. Could rate-limit the reallocation or issue a
> new version whenever the number of holes gets too big?
> 
> Thoughts?

That would work, yes, and it is simple.  I like simple.

My favorite idea, so far, is to change pvector from an array to an
rculist.  pvector_change_priority() is tricky, though, and so it's not a
perfect match, and maybe that invalidates the whole idea.

Another thought I've had is to define a kind of "transaction" for the
classifier.  Before a sequence of modifications, you start the
transaction; after the sequence, you commit it.  In between, the work on
the pvector happens on a copy that is not exposed to readers, so that it
can be edited (and freed) as much as necessary, and then at commit time
the final version is exposed and the former version is postpone-deleted.
That kind of approach might be necessary at some point if we add
high-quality support for OpenFlow 1.4 "bundles", but it might be
premature.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to