Message ID | SY4PR01MB843862311364069FFD783829CD0DA@SY4PR01MB8438.ausprd01.prod.outlook.com |
---|---|
State | Changes Requested |
Headers | show |
Series | netdev-dpdk: Add support for userspace port-based packet-per-second policing. | expand |
Context | Check | Description |
---|---|---|
ovsrobot/apply-robot | success | apply and check: success |
ovsrobot/github-robot-_Build_and_Test | success | github build: passed |
On Wed, Aug 09, 2023 at 12:19:19AM +0800, miterv@outlook.com wrote: > From: Lin Huang <linhuang@ruijie.com.cn> > > Now, token-bucket 'last_fill' is updated by token_bucket_withdraw() itself. > Add a new function parameter 'now' to update timestamp by caller. > > Signed-off-by: Lin Huang <linhuang@ruijie.com.cn> ... > diff --git a/lib/vlog.c b/lib/vlog.c > index b2653142f..a025f79e5 100644 > --- a/lib/vlog.c > +++ b/lib/vlog.c > @@ -1321,12 +1321,13 @@ vlog_should_drop(const struct vlog_module *module, enum vlog_level level, > } > > ovs_mutex_lock(&rl->mutex); > - if (!token_bucket_withdraw(&rl->token_bucket, VLOG_MSG_TOKENS)) { > - time_t now = time_now(); > + long long int now = time_msec(); > + time_t now_sec = now / 1000; Sorry for not noticing this earlier, but I think it would be more in keeping with the prevailing code stile to declare variables at the top of a block. So now and now_set should be declared at the beginning of the function. > + if (!token_bucket_withdraw(&rl->token_bucket, VLOG_MSG_TOKENS, now)) { > if (!rl->n_dropped) { > - rl->first_dropped = now; > + rl->first_dropped = now_sec; > } > - rl->last_dropped = now; > + rl->last_dropped = now_sec; > rl->n_dropped++; > ovs_mutex_unlock(&rl->mutex); > return true; > @@ -1335,10 +1336,9 @@ vlog_should_drop(const struct vlog_module *module, enum vlog_level level, > if (!rl->n_dropped) { > ovs_mutex_unlock(&rl->mutex); > } else { > - time_t now = time_now(); > unsigned int n_dropped = rl->n_dropped; > - unsigned int first_dropped_elapsed = now - rl->first_dropped; > - unsigned int last_dropped_elapsed = now - rl->last_dropped; > + unsigned int first_dropped_elapsed = now_sec - rl->first_dropped; > + unsigned int last_dropped_elapsed = now_sec - rl->last_dropped; > rl->n_dropped = 0; > ovs_mutex_unlock(&rl->mutex); > ...
diff --git a/include/openvswitch/token-bucket.h b/include/openvswitch/token-bucket.h index 580747f61..d1191e956 100644 --- a/include/openvswitch/token-bucket.h +++ b/include/openvswitch/token-bucket.h @@ -40,7 +40,8 @@ void token_bucket_init(struct token_bucket *, unsigned int rate, unsigned int burst); void token_bucket_set(struct token_bucket *, unsigned int rate, unsigned int burst); -bool token_bucket_withdraw(struct token_bucket *, unsigned int n); +bool token_bucket_withdraw(struct token_bucket *tb, unsigned int n, + long long int now); void token_bucket_wait_at(struct token_bucket *, unsigned int n, const char *where); #define token_bucket_wait(bucket, n) \ diff --git a/lib/token-bucket.c b/lib/token-bucket.c index 0badeb46b..60eb26e53 100644 --- a/lib/token-bucket.c +++ b/lib/token-bucket.c @@ -59,10 +59,10 @@ token_bucket_set(struct token_bucket *tb, * if 'tb' contained fewer than 'n' tokens (and thus 'n' tokens could not be * removed) . */ bool -token_bucket_withdraw(struct token_bucket *tb, unsigned int n) +token_bucket_withdraw(struct token_bucket *tb, unsigned int n, + long long int now) { if (tb->tokens < n) { - long long int now = time_msec(); if (now > tb->last_fill) { unsigned long long int elapsed_ull = (unsigned long long int) now - tb->last_fill; diff --git a/lib/vlog.c b/lib/vlog.c index b2653142f..a025f79e5 100644 --- a/lib/vlog.c +++ b/lib/vlog.c @@ -1321,12 +1321,13 @@ vlog_should_drop(const struct vlog_module *module, enum vlog_level level, } ovs_mutex_lock(&rl->mutex); - if (!token_bucket_withdraw(&rl->token_bucket, VLOG_MSG_TOKENS)) { - time_t now = time_now(); + long long int now = time_msec(); + time_t now_sec = now / 1000; + if (!token_bucket_withdraw(&rl->token_bucket, VLOG_MSG_TOKENS, now)) { if (!rl->n_dropped) { - rl->first_dropped = now; + rl->first_dropped = now_sec; } - rl->last_dropped = now; + rl->last_dropped = now_sec; rl->n_dropped++; ovs_mutex_unlock(&rl->mutex); return true; @@ -1335,10 +1336,9 @@ vlog_should_drop(const struct vlog_module *module, enum vlog_level level, if (!rl->n_dropped) { ovs_mutex_unlock(&rl->mutex); } else { - time_t now = time_now(); unsigned int n_dropped = rl->n_dropped; - unsigned int first_dropped_elapsed = now - rl->first_dropped; - unsigned int last_dropped_elapsed = now - rl->last_dropped; + unsigned int first_dropped_elapsed = now_sec - rl->first_dropped; + unsigned int last_dropped_elapsed = now_sec - rl->last_dropped; rl->n_dropped = 0; ovs_mutex_unlock(&rl->mutex); diff --git a/ofproto/pinsched.c b/ofproto/pinsched.c index 59561f076..a39e4d2ee 100644 --- a/ofproto/pinsched.c +++ b/ofproto/pinsched.c @@ -184,7 +184,7 @@ get_tx_packet(struct pinsched *ps) static bool get_token(struct pinsched *ps) { - return token_bucket_withdraw(&ps->token_bucket, 1000); + return token_bucket_withdraw(&ps->token_bucket, 1000, time_msec()); } void