Skip to content

Commit

Permalink
upcall: Configure datapath max-revalidator through ovs-vsctl.
Browse files Browse the repository at this point in the history
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]>
Signed-off-by: Ben Pfaff <[email protected]>
  • Loading branch information
w1ldptr authored and blp committed Aug 21, 2019
1 parent c194367 commit b6bdc3c
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 1 deletion.
3 changes: 2 additions & 1 deletion ofproto/ofproto-dpif-upcall.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
4 changes: 4 additions & 0 deletions ofproto/ofproto-provider.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
10 changes: 10 additions & 0 deletions ofproto/ofproto.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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. */
Expand Down
2 changes: 2 additions & 0 deletions ofproto/ofproto.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down
3 changes: 3 additions & 0 deletions vswitchd/bridge.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
14 changes: 14 additions & 0 deletions vswitchd/vswitch.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down

0 comments on commit b6bdc3c

Please sign in to comment.