On 30 September 2014 09:51, Ben Pfaff <b...@nicira.com> wrote:

> On Fri, Sep 26, 2014 at 09:28:14PM +1200, Joe Stringer wrote:
> > This patch shifts the responsibility for determining the hash for a flow
> > from the revalidation logic down to the dpif layer. This assists in
> > handling backward-compatibility for revalidation with the upcoming
> > unique identifier "UID" patches, and allows ovs-dpctl to automatically
> > determine flow hashes while keeping dpif logic separate from the
> > ofproto-dpif logic.
> >
> > A 128-bit UID was selected to minimize the likelihood of hash conflicts.
> > Handler threads will not install a flow that has an identical UID as
> > another flow, to prevent misattribution of stats and to ensure that the
> > correct flow key cache is used for revalidation.
> >
> > The UID for a flow is a 128-bit hash of the flow key. For datapaths that
> > do not support UID, which is currently all datapaths, the dpif will
> > generate the UID and pass it up during upcall and flow_dump. This is
> > generated based on the datapath flow key.
> >
> > Later patches will add support for datapaths to store and interpret this
> > UID, in which case the dpif has a responsibility to pass it through
> > transparently.
> >
> > Signed-off-by: Joe Stringer <joestrin...@nicira.com>
> > ---
> > v6: Split out from "dpif: Add Unique flow identifiers."
> >     Store flow hash seed staticly for all dpifs.
> >     Rebase.
> > v5: Always pass flow_key down to dpif, to improve error logging.
> >     Rebase.
> > v4: Generate UID in dpif layer and pass up to ofproto-dpif-upcall.
> >     Skip sending flow key in flow_del.
> >     Combine dpif,upcall,dpif-netdev,dpif-linux changes into one patch.
> > v3: Rebase.
>
> Comparisons of uids here and in the previous patch generally use
> memcmp().  memcmp() is usually written with a few assumptions in mind
> that can make it slower than, say, something like (a->lo != b->lo ||
> a->hi != b->hi) or ((a->lo ^ b->lo) | (a->hi ^ b->hi)).  The first
> assumption is that the arguments might not be properly aligned (which
> doesn't matter much on x86.  The second assumption is that memcmp() is
> usually careful not to read more bytes than necessary to find a
> mismatch, because that might read beyond the end of a page and
> segfault.  (I'm not sure all implementations are careful that way.)
> Anyone, writing a simple uid_equal() might be worth it.
>
> Acked-by: Ben Pfaff <b...@nicira.com>
>

I see, writing up a uid_equal() is straightforward, so that change into
this patch.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to