On Wed, Aug 26, 2015 at 01:59:39PM -0700, Jarno Rajahalme wrote: > > > On Aug 26, 2015, at 1:41 PM, Ben Pfaff <b...@nicira.com> wrote: > > > > On Wed, Aug 26, 2015 at 01:31:25PM -0700, Jarno Rajahalme wrote: > >> > >>> On Aug 26, 2015, at 10:15 AM, Ben Pfaff <b...@nicira.com> wrote: > >>> > >>> On Fri, Aug 21, 2015 at 03:25:21PM -0700, Jarno Rajahalme wrote: > >>>> Classifier partitions allowed skipping subtables when if was known > >>>> from the flow's metadata field that the subtable cannot possibly > >>>> match. This functionality was later implemented in a more general > >>>> fashion by staged lookup, where the first stage also covers the > >>>> metadata field, among the rest of the non-packet fields in the struct > >>>> flow. While in theory skipping a subtable on the basis of the > >>>> metadata field alone could produce more effective wildcards, on the > >>>> basis of our testsuite coverage it does not seem to be the case, as > >>>> removing the partitioning feature did not result in any test failures. > >>> > >>> I don't understand this part of the rationale. Why would removing a > >>> classifier optimization cause test failures? > >>> > >> > >> If we can skip a subtable based on the partition, we do not need to > >> add any bits to the flow wildcards, as the only field we examined was > >> the ‘metadata’ field, which has no datapath representation. Now, if we > >> instead go to the metadata stage and find the subtable cannot contain > >> a match (at least the metadata field value of the flow would be > >> different from any of the rules in the classifier, otherwise we could > >> not have skipped this subtable with partitions), we need to unwildcard > >> all the bits in any of the metadata covered by the metadata > >> stage. These could include in_port, skb_priority, tunnel metadata, > >> etc. In this case we could unwildcard more bits than with partition > >> check alone. This could cause a test case failure, as the wildcard > >> mask could be different. > > > > Oh, a testcase failure not based on the correctness of the > > classification algorithm but based on a change in the wildcard mask > > generated by the algorithm. I see. > > > > I doubt that the testsuite ever really exercised this optimization, but > > it's intended for OVN (and before it, NVP) which uses the OpenFlow > > metadata field to partition each OpenFlow table according to the logical > > datapath. The idea is that, if logical switch A has complicated flows > > and exercises special features, and logical switch B does not, then > > packets from B should not suffer from excessive matching > > ("unwildcarding"). Do you think that partitioning is not actually > > necessary to achieve that? It's hard for me to judge that on the basis > > of the testsuite that doesn't really test it, but if you think that it > > is the case then I'll accept your judgment. > > If the complicated flows deal with actual packet fields (like ACLs > would, for example) then the staged lookup failure on metadata stage > (non-matching ‘metadata’ field) will take care of the partitioning > (skipping the rest of the subtable). The only concern is the other > metadata in the metadata stage. I do not know how likely it is that > the subtables of interest would match on e.g. tunnel metadata that > would otherwise not get unwildcarded?
I doubt tunnel metadata matches are significant. OK, given your confidence (and the significant performance benefit), I'll reserve my doubts and review this in detail. Thanks! _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev