Skip to content

Commit

Permalink
ofproto-dpif: Rate limit calls to facet_learn().
Browse files Browse the repository at this point in the history
In the TCP_CRR benchmark, ovs-vswitchd spends so much time in
update_stats() that it has a significant impact on flow setup
performance.  Further work is needed in this area, but for now,
simply rate limiting facet_learn() has a roughly 10% improvement
with complex flow tables.

Signed-off-by: Ethan Jackson <[email protected]>
  • Loading branch information
ejj committed Mar 27, 2013
1 parent 4d2a0f3 commit 6cf474d
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions ofproto/ofproto-dpif.c
Original file line number Diff line number Diff line change
Expand Up @@ -491,6 +491,8 @@ struct facet {
* always be valid, since it could have been removed after newer
* subfacets were pushed onto the 'subfacets' list.) */
struct subfacet one_subfacet;

long long int learn_rl; /* Rate limiter for facet_learn(). */
};

static struct facet *facet_create(struct rule_dpif *,
Expand Down Expand Up @@ -4376,6 +4378,8 @@ facet_create(struct rule_dpif *rule, const struct flow *flow, uint32_t hash)
netflow_flow_init(&facet->nf_flow);
netflow_flow_update_time(ofproto->netflow, &facet->nf_flow, facet->used);

facet->learn_rl = time_msec() + 500;

return facet;
}

Expand Down Expand Up @@ -4452,6 +4456,12 @@ facet_learn(struct facet *facet)
struct subfacet, list_node);
struct action_xlate_ctx ctx;

if (time_msec() < facet->learn_rl) {
return;
}

facet->learn_rl = time_msec() + 500;

if (!facet->has_learn
&& !facet->has_normal
&& (!facet->has_fin_timeout
Expand Down

0 comments on commit 6cf474d

Please sign in to comment.