On Tue, Aug 23, 2016 at 05:51:37PM -0700, Jarno Rajahalme wrote:
> Change the value and mask to be added to the end of the set field
> action without any extra bytes, exept for the usual ofp-actions
> padding to 8 bytes.  Together with some structure member packing this
> saves on average about to 256 bytes for each set field and load action
> (set field internal representation is also used for load actions).
> 
> On a specific production data set each flow entry uses on average
> about 4.1 load and set field actions.  This means that with this patch
> an average of more than 1kb can be saved for each flow with such a
> flow table.
> 
> Signed-off-by: Jarno Rajahalme <ja...@ovn.org>

Thanks for working on this!

Building on 32-bit I get assertion failures without:

diff --git a/include/openvswitch/ofp-actions.h 
b/include/openvswitch/ofp-actions.h
index 9eaa78c..198eedd 100644
--- a/include/openvswitch/ofp-actions.h
+++ b/include/openvswitch/ofp-actions.h
@@ -479,9 +479,11 @@ struct ofpact_stack {
  *
  * Used for NXAST_REG_LOAD and OFPAT12_SET_FIELD. */
 struct ofpact_set_field {
-    struct ofpact ofpact;
-    bool flow_has_vlan;   /* VLAN present at action validation time. */
-    const struct mf_field *field;
+    OFPACT_PADDED_MEMBERS(
+        struct ofpact ofpact;
+        bool flow_has_vlan;   /* VLAN present at action validation time. */
+        const struct mf_field *field;
+    );
     union mf_value value[];  /* Significant value bytes followed by
                               * significant mask bytes. */
 };

I'd suggest ALIGNED_CAST in ofpact_set_field_mask() to make the
cast-to-void-then-to-real-type trick more greppable.

There's a number of instances of code similar to:

+    struct ofpact_set_field *sf = ofpact_put_set_field(ofpacts, mf);
+    memcpy(sf->value, &sf_value, mf->n_bytes);
+    memcpy(ofpact_set_field_mask(sf), &sf_mask, mf->n_bytes);

so that it might be worthwhile to make a function that combines the
three steps (or just the memcpy()s?).

Acked-by: Ben Pfaff <b...@ovn.org>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to