Thanks for the reviews. I pushed both patches to the relevant branches. --Justin
On Jun 28, 2013, at 6:31 PM, Ethan Jackson <[email protected]> wrote: > Looks good to me thanks. > > Acked-by: Ethan Jackson <[email protected]> > > > On Fri, Jun 28, 2013 at 6:26 PM, Justin Pettit <[email protected]> wrote: >> Add new "dpif/disable-megaflows" and "dpif/enable-megaflows" commands to >> ovs-appctl to disable and enable megaflows, respectively. By default, >> megaflows are enabled, and these commands should only be used for >> debugging. >> >> Feature #18265. >> >> Requested-by: Ronghua Zhang <[email protected]> >> Signed-off-by: Justin Pettit <[email protected]> >> --- >> ofproto/ofproto-dpif.c | 62 ++++++++++++++++++++++++++++++++++++++++++++--- >> 1 files changed, 58 insertions(+), 4 deletions(-) >> >> diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c >> index 5ca16b7..2d42c83 100644 >> --- a/ofproto/ofproto-dpif.c >> +++ b/ofproto/ofproto-dpif.c >> @@ -404,6 +404,10 @@ static void update_moving_averages(struct dpif_backer >> *backer); >> * for debugging the asynchronous flow_mod implementation.) */ >> static bool clogged; >> >> +/* By default, flows in the datapath are wildcarded (megaflows). They >> + * may be disabled with the "ovs-appctl dpif/disable-megaflows" command. */ >> +static bool enable_megaflows = true; >> + >> /* All existing ofproto_dpif instances, indexed by ->up.name. */ >> static struct hmap all_ofproto_dpifs = HMAP_INITIALIZER(&all_ofproto_dpifs); >> >> @@ -3476,8 +3480,10 @@ handle_flow_miss_with_facet(struct flow_miss *miss, >> struct facet *facet, >> subfacet->path = want_path; >> >> ofpbuf_use_stack(&op->mask, &op->maskbuf, sizeof op->maskbuf); >> - odp_flow_key_from_mask(&op->mask, &facet->xout.wc.masks, >> - &miss->flow, UINT32_MAX); >> + if (enable_megaflows) { >> + odp_flow_key_from_mask(&op->mask, &facet->xout.wc.masks, >> + &miss->flow, UINT32_MAX); >> + } >> >> op->xout_garbage = false; >> op->dpif_op.type = DPIF_OP_FLOW_PUT; >> @@ -5064,8 +5070,10 @@ subfacet_install(struct subfacet *subfacet, const >> struct ofpbuf *odp_actions, >> } >> >> ofpbuf_use_stack(&mask, &maskbuf, sizeof maskbuf); >> - odp_flow_key_from_mask(&mask, &facet->xout.wc.masks, >> - &facet->flow, UINT32_MAX); >> + if (enable_megaflows) { >> + odp_flow_key_from_mask(&mask, &facet->xout.wc.masks, >> + &facet->flow, UINT32_MAX); >> + } >> >> ret = dpif_flow_put(subfacet->backer->dpif, flags, subfacet->key, >> subfacet->key_len, mask.data, mask.size, >> @@ -6388,6 +6396,48 @@ ofproto_unixctl_dpif_dump_megaflows(struct >> unixctl_conn *conn, >> ds_destroy(&ds); >> } >> >> +/* Disable using the megaflows. >> + * >> + * This command is only needed for advanced debugging, so it's not >> + * documented in the man page. */ >> +static void >> +ofproto_unixctl_dpif_disable_megaflows(struct unixctl_conn *conn, >> + int argc OVS_UNUSED, >> + const char *argv[] OVS_UNUSED, >> + void *aux OVS_UNUSED) >> +{ >> + struct ofproto_dpif *ofproto; >> + >> + enable_megaflows = false; >> + >> + HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) { >> + flush(&ofproto->up); >> + } >> + >> + unixctl_command_reply(conn, "megaflows disabled"); >> +} >> + >> +/* Re-enable using megaflows. >> + * >> + * This command is only needed for advanced debugging, so it's not >> + * documented in the man page. */ >> +static void >> +ofproto_unixctl_dpif_enable_megaflows(struct unixctl_conn *conn, >> + int argc OVS_UNUSED, >> + const char *argv[] OVS_UNUSED, >> + void *aux OVS_UNUSED) >> +{ >> + struct ofproto_dpif *ofproto; >> + >> + enable_megaflows = true; >> + >> + HMAP_FOR_EACH (ofproto, all_ofproto_dpifs_node, &all_ofproto_dpifs) { >> + flush(&ofproto->up); >> + } >> + >> + unixctl_command_reply(conn, "megaflows enabled"); >> +} >> + >> static void >> ofproto_unixctl_dpif_dump_flows(struct unixctl_conn *conn, >> int argc OVS_UNUSED, const char *argv[], >> @@ -6501,6 +6551,10 @@ ofproto_dpif_unixctl_init(void) >> ofproto_unixctl_dpif_del_flows, NULL); >> unixctl_command_register("dpif/dump-megaflows", "bridge", 1, 1, >> ofproto_unixctl_dpif_dump_megaflows, NULL); >> + unixctl_command_register("dpif/disable-megaflows", "", 0, 0, >> + ofproto_unixctl_dpif_disable_megaflows, NULL); >> + unixctl_command_register("dpif/enable-megaflows", "", 0, 0, >> + ofproto_unixctl_dpif_enable_megaflows, NULL); >> } >> >> /* Linux VLAN device support (e.g. "eth0.10" for VLAN 10.) >> -- >> 1.7.5.4 >> >> _______________________________________________ >> dev mailing list >> [email protected] >> http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
