From: Vlad Buslov <[email protected]> This patch adds a new configuration option, "max-revalidator" to the Open_vSwitch "other-config" column. This sets maximum allowed ravalidator timeout. Actual timeout value is determined at runtime as minimum of "max-idle" and "max-revalidator".
Signed-off-by: Vlad Buslov <[email protected]> Acked-by: Roi Dayan <[email protected]> --- ofproto/ofproto-dpif-upcall.c | 3 ++- ofproto/ofproto-provider.h | 4 ++++ ofproto/ofproto.c | 10 ++++++++++ ofproto/ofproto.h | 2 ++ vswitchd/bridge.c | 3 +++ vswitchd/vswitch.xml | 14 ++++++++++++++ 6 files changed, 35 insertions(+), 1 deletion(-) diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c index 731ee7280029..b3598742b4d1 100644 --- a/ofproto/ofproto-dpif-upcall.c +++ b/ofproto/ofproto-dpif-upcall.c @@ -978,7 +978,8 @@ udpif_revalidator(void *arg) duration); } - poll_timer_wait_until(start_time + MIN(ofproto_max_idle, 500)); + poll_timer_wait_until(start_time + MIN(ofproto_max_idle, + ofproto_max_revalidator)); seq_wait(udpif->reval_seq, last_reval_seq); latch_wait(&udpif->exit_latch); latch_wait(&udpif->pause_latch); diff --git a/ofproto/ofproto-provider.h b/ofproto/ofproto-provider.h index 7907d4bfb416..92b384448f27 100644 --- a/ofproto/ofproto-provider.h +++ b/ofproto/ofproto-provider.h @@ -524,6 +524,10 @@ extern unsigned ofproto_flow_limit; * on system load and other factors. This variable is subject to change. */ extern unsigned ofproto_max_idle; +/* Maximum timeout (in ms) for revalidator timer. + * Revalidator timeout is a minimum of max_idle and max_revalidator values. */ +extern unsigned ofproto_max_revalidator; + /* 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 1d6fc00696f8..6f1d327ee87d 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -306,6 +306,7 @@ struct ovs_mutex ofproto_mutex = OVS_MUTEX_INITIALIZER; unsigned ofproto_flow_limit = OFPROTO_FLOW_LIMIT_DEFAULT; unsigned ofproto_max_idle = OFPROTO_MAX_IDLE_DEFAULT; +unsigned ofproto_max_revalidator = OFPROTO_MAX_REVALIDATOR_DEFAULT; size_t n_handlers, n_revalidators; @@ -702,6 +703,15 @@ ofproto_set_max_idle(unsigned max_idle) ofproto_max_idle = max_idle; } +/* Sets the maximum allowed revalidator timeout. */ +void +ofproto_set_max_revalidator(unsigned max_revalidator) +{ + if (max_revalidator >= 100) { + ofproto_max_revalidator = max_revalidator; + } +} + /* 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 6e4afffa17e0..6e17fd317fbc 100644 --- a/ofproto/ofproto.h +++ b/ofproto/ofproto.h @@ -308,6 +308,7 @@ int ofproto_port_dump_done(struct ofproto_port_dump *); #define OFPROTO_FLOW_LIMIT_DEFAULT 200000 #define OFPROTO_MAX_IDLE_DEFAULT 10000 /* ms */ +#define OFPROTO_MAX_REVALIDATOR_DEFAULT 500 /* ms */ const char *ofproto_port_open_type(const struct ofproto *, const char *port_type); @@ -335,6 +336,7 @@ void ofproto_set_in_band_queue(struct ofproto *, int queue_id); void ofproto_set_bundle_idle_timeout(unsigned timeout); void ofproto_set_flow_limit(unsigned limit); void ofproto_set_max_idle(unsigned max_idle); +void ofproto_set_max_revalidator(unsigned max_revalidator); 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 2976771aeaba..be093af1d821 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -601,6 +601,9 @@ bridge_reconfigure(const struct ovsrec_open_vswitch *ovs_cfg) OFPROTO_FLOW_LIMIT_DEFAULT)); ofproto_set_max_idle(smap_get_int(&ovs_cfg->other_config, "max-idle", OFPROTO_MAX_IDLE_DEFAULT)); + ofproto_set_max_revalidator(smap_get_int(&ovs_cfg->other_config, + "max-revalidator", + OFPROTO_MAX_REVALIDATOR_DEFAULT)); ofproto_set_vlan_limit(smap_get_int(&ovs_cfg->other_config, "vlan-limit", LEGACY_MAX_VLAN_HEADERS)); ofproto_set_bundle_idle_timeout(smap_get_int(&ovs_cfg->other_config, diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml index 027aee2f523b..533823c3d853 100644 --- a/vswitchd/vswitch.xml +++ b/vswitchd/vswitch.xml @@ -190,6 +190,20 @@ </p> </column> + <column name="other_config" key="max-revalidator" + type='{"type": "integer", "minInteger": 100}'> + <p> + The maximum time (in ms) that revalidator threads will wait before + executing flow revalidation. Note that this is maximum allowed value. + Actual timeout used by OVS is minimum of max-idle and max-revalidator + values. Tweaking this value is discouraged unless you know exactly + what you're doing. + </p> + <p> + The default is 500. + </p> + </column> + <column name="other_config" key="hw-offload" type='{"type": "boolean"}'> <p> -- 2.7.0 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
