Applied. Thanks. --Justin
On Mar 5, 2014, at 4:56 PM, Joe Stringer <joestrin...@nicira.com> wrote: > This patch adds a new configuration option, "max-idle" to the > Open_vSwitch "other-config" column. This sets how long datapath flows > are cached in the datapath before revalidators expire them. > > Signed-off-by: Joe Stringer <joestrin...@nicira.com> > > --- > v6: Shift documentation to ofproto-provider.h. > v5: Rebase. > v4: Remove extra "max_idle" from Flow_Table table. > v3: Use 'unsigned' instead of 'long long int' for ofproto_max_idle. > v2: Don't cache the max_idle in 'struct udpif'. > Extend range of valid values to 100-30000. > --- > ofproto/ofproto-dpif-upcall.c | 5 ++--- > ofproto/ofproto-provider.h | 5 +++++ > ofproto/ofproto.c | 9 +++++++++ > ofproto/ofproto.h | 2 ++ > vswitchd/bridge.c | 2 ++ > 5 files changed, 20 insertions(+), 3 deletions(-) > > diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c > index 7dbd7f7..0d5b251 100644 > --- a/ofproto/ofproto-dpif-upcall.c > +++ b/ofproto/ofproto-dpif-upcall.c > @@ -41,7 +41,6 @@ > #define MAX_QUEUE_LENGTH 512 > #define FLOW_MISS_MAX_BATCH 50 > #define REVALIDATE_MAX_BATCH 50 > -#define MAX_IDLE 1500 > > VLOG_DEFINE_THIS_MODULE(ofproto_dpif_upcall); > > @@ -646,7 +645,7 @@ udpif_flow_dumper(void *arg) > } > > skip: > - poll_timer_wait_until(start_time + MIN(MAX_IDLE, 500)); > + poll_timer_wait_until(start_time + MIN(ofproto_max_idle, 500)); > seq_wait(udpif->reval_seq, udpif->last_reval_seq); > latch_wait(&udpif->exit_latch); > poll_block(); > @@ -1510,7 +1509,7 @@ revalidate_udumps(struct revalidator *revalidator, > struct list *udumps) > n_flows = udpif_get_n_flows(udpif); > > must_del = false; > - max_idle = MAX_IDLE; > + max_idle = ofproto_max_idle; > if (n_flows > flow_limit) { > must_del = n_flows > 2 * flow_limit; > max_idle = 100; > diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h > index 2c72fbc..d116451 100644 > --- a/ofproto/ofproto-provider.h > +++ b/ofproto/ofproto-provider.h > @@ -464,6 +464,11 @@ void rule_collection_destroy(struct rule_collection *); > * ofproto-dpif implementation. */ > extern unsigned ofproto_flow_limit; > > +/* Maximum idle time (in ms) for flows to be cached in the datapath. > + * Revalidators may expire flows more quickly than the configured value based > + * on system load and other factors. This variable is subject to change. */ > +extern unsigned ofproto_max_idle; > + > /* Number of upcall handler and revalidator threads. Only affects the > * ofproto-dpif implementation. */ > extern size_t n_handlers, n_revalidators; > diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c > index 19e7091..e691bb9 100644 > --- a/ofproto/ofproto.c > +++ b/ofproto/ofproto.c > @@ -307,6 +307,7 @@ static size_t allocated_ofproto_classes; > struct ovs_mutex ofproto_mutex = OVS_MUTEX_INITIALIZER; > > unsigned ofproto_flow_limit = OFPROTO_FLOW_LIMIT_DEFAULT; > +unsigned ofproto_max_idle = OFPROTO_MAX_IDLE_DEFAULT; > > size_t n_handlers, n_revalidators; > > @@ -697,6 +698,14 @@ ofproto_set_flow_limit(unsigned limit) > ofproto_flow_limit = limit; > } > > +/* Sets the maximum idle time for flows in the datapath before they are > + * expired. */ > +void > +ofproto_set_max_idle(unsigned max_idle) > +{ > + ofproto_max_idle = max_idle; > +} > + > /* If forward_bpdu is true, the NORMAL action will forward frames with > * reserved (e.g. STP) destination Ethernet addresses. if forward_bpdu is > false, > * the NORMAL action will drop these frames. */ > diff --git a/ofproto/ofproto.h b/ofproto/ofproto.h > index 1f9cb15..546827f 100644 > --- a/ofproto/ofproto.h > +++ b/ofproto/ofproto.h > @@ -214,6 +214,7 @@ int ofproto_port_dump_done(struct ofproto_port_dump *); > ) > > #define OFPROTO_FLOW_LIMIT_DEFAULT 200000 > +#define OFPROTO_MAX_IDLE_DEFAULT 1500 > > const char *ofproto_port_open_type(const char *datapath_type, > const char *port_type); > @@ -236,6 +237,7 @@ void ofproto_set_extra_in_band_remotes(struct ofproto *, > const struct sockaddr_in *, size_t n); > void ofproto_set_in_band_queue(struct ofproto *, int queue_id); > void ofproto_set_flow_limit(unsigned limit); > +void ofproto_set_max_idle(unsigned max_idle); > void ofproto_set_forward_bpdu(struct ofproto *, bool forward_bpdu); > void ofproto_set_mac_table_config(struct ofproto *, unsigned idle_time, > size_t max_entries); > diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c > index 0f7ca84..f7bd657 100644 > --- a/vswitchd/bridge.c > +++ b/vswitchd/bridge.c > @@ -493,6 +493,8 @@ bridge_reconfigure(const struct ovsrec_open_vswitch > *ovs_cfg) > > ofproto_set_flow_limit(smap_get_int(&ovs_cfg->other_config, "flow-limit", > OFPROTO_FLOW_LIMIT_DEFAULT)); > + ofproto_set_max_idle(smap_get_int(&ovs_cfg->other_config, "max-idle", > + OFPROTO_MAX_IDLE_DEFAULT)); > > ofproto_set_threads( > smap_get_int(&ovs_cfg->other_config, "n-handler-threads", 0), > -- > 1.7.9.5 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev