On Oct 31, 2014, at 2:10 PM, Ben Pfaff <b...@nicira.com> wrote:

> On Fri, Oct 31, 2014 at 01:08:37PM -0700, Jarno Rajahalme wrote:
>> 
>> On Oct 30, 2014, at 4:43 PM, Jarno Rajahalme <jrajaha...@nicira.com> wrote:
>> 
>>> 
>>> On Oct 30, 2014, at 3:38 PM, Ben Pfaff <b...@nicira.com> wrote:
>>> 
>>>> On Tue, Oct 28, 2014 at 07:05:01PM -0700, Jarno Rajahalme wrote:
>>>>> 
>>>>>> On Oct 28, 2014, at 4:36 PM, Ben Pfaff <b...@nicira.com> wrote:
>>>>>> 
>>>>>>> On Fri, Oct 24, 2014 at 01:36:40PM -0700, Jarno Rajahalme wrote:
>>>>>>> Previously, accurate iteration required writers to be excluded during
>>>>>>> iteration.  This patch changes the structure of the classifier by
>>>>>>> moving the list of rules from struct cls_match to struct cls_subtable.
>>>>>>> The list element is also moved from the struct cls_match to struct
>>>>>>> cls_rule, which makes iteration more straightforward, and allows the
>>>>>>> iterators to remain ignorant of the internals of the cls_match.  These
>>>>>>> changes allow iteration of rules in the classifier by traversing the
>>>>>>> RCU-friendly subtables vector, and the rculist of rules in each
>>>>>>> subtable.  Classifier modifications may be performed concurrently, but
>>>>>>> whether or not the concurrent iterator sees those changes depends on
>>>>>>> the timing of change.  This is similar to having writers excluded by a
>>>>>>> mutex, where visibility of changes depends on the timing of mutex
>>>>>>> acquisition.
>>>>>>> 
>>>>>>> The subtable's rculist also allows to make
>>>>>>> classifier_find_rule_exactly() and classifier_rule_overlaps()
>>>>>>> lockless.
>>>>>>> 
>>>>>>> Signed-off-by: Jarno Rajahalme <jrajaha...@nicira.com>
>>>>>> 
>>>>>> I *think* I follow what's going on here, but just to be sure, let me
>>>>>> try to explain it.  After this patch, the subtable has a list of every
>>>>>> rule in the subtable, as 'rules_list'.  The rules in the list are in
>>>>>> no particular order, except that rules with identical match criteria
>>>>>> are in subsequent positions.  Is that correct?
>>>>> 
>>>>> Yes :-)
>>>> 
>>>> The conjunctive match series uses the list of lower-priority rules in
>>>> lookup.  I think that this patch, as-is, would make that a lot more
>>>> expensive, because it's no longer cheap to tell whether the next rule
>>>> in the list has the same match.  I guess one could still mark
>>>> boundaries somehow; do you have an idea?
>>> 
>>> Will have to think about this. However, I totally missed this in
>>> my review of the conjunctive match; as the lower-priority rules
>>> list is not yet RCU, it cannot be safely used on lookups. It
>>> should be sufficient to convert from struct list in struct
>>> cls_match to struct rculist, tough.
>>> 
>> 
>> My assumption with this patch was that the list entry in cls_match
>> is not used in lookup, and hence it can be moved to cls_rule. Now,
>> since conjunctive match is going to use the list in lookup, not only
>> does the list be an rculist, but moving it to cls_rule will add
>> unnecessary memory indirections.
>> 
>> How about simply having two rculist nodes, one in cls_match (like
>> before) and another in cls_rule for iteration? I kind of liked the
>> fact that this patch did not add to the memory footprint at all, but
>> I guess more robust iteration is worth it, even if we add a new
>> rculist node.
> 
> I agree.
> 
> When I stopped by your desk, it sounded like you're working on a
> patch, so I'll wait for it.

Just sent them out.

  Jarno

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to