]> git.baikalelectronics.ru Git - kernel.git/commitdiff
openvswitch: Optimize operation for key comparison
authorBaowen Zheng <baowen.zheng@corigine.com>
Tue, 29 Jun 2021 07:22:11 +0000 (09:22 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 1 Jul 2021 18:13:10 +0000 (11:13 -0700)
In the current implement when comparing two flow keys, we will return
result after comparing the whole key from start to end.

In our optimization, we will return result in the first none-zero
comparison, then we will improve the flow table looking up efficiency.

Signed-off-by: Baowen Zheng <baowen.zheng@corigine.com>
Signed-off-by: Louis Peens <louis.peens@corigine.com>
Signed-off-by: Simon Horman <simon.horman@corigine.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/openvswitch/flow_table.c

index c89c8da99f1a2ea234b5a5cbbc40c2635d181d4a..d4a2db0b229989864fa821f38e7787b13f5c583c 100644 (file)
@@ -670,13 +670,13 @@ static bool cmp_key(const struct sw_flow_key *key1,
 {
        const long *cp1 = (const long *)((const u8 *)key1 + key_start);
        const long *cp2 = (const long *)((const u8 *)key2 + key_start);
-       long diffs = 0;
        int i;
 
        for (i = key_start; i < key_end; i += sizeof(long))
-               diffs |= *cp1++ ^ *cp2++;
+               if (*cp1++ ^ *cp2++)
+                       return false;
 
-       return diffs == 0;
+       return true;
 }
 
 static bool flow_cmp_masked_key(const struct sw_flow *flow,