On 7/14/23 12:42, Eelco Chaudron wrote:
> 
> 
> On 1 Jul 2023, at 16:40, [email protected] wrote:
> 
>> From: Lin Huang <[email protected]>
>>
>> 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 <[email protected]>
> 
> Thank for the patch Lin,
> 
> However what about updating this entire patch to use time_now() instead of 
> time_msec()?

Hmm.  But time_now() is in seconds.  It's a much lower resolution
for a bucket.  We'll also need to change all the users to adjust
the configuration.

Or am I missing something?

Bets regards, Ilya Maximets.

> This makes it more clear for me. I did a quick change to see how it looks.
> 
> This is what it looks like, let me know what you think:
> 
> 
> diff --git a/include/openvswitch/token-bucket.h 
> b/include/openvswitch/token-bucket.h
> index d1191e956..3ae6b03fb 100644
> --- a/include/openvswitch/token-bucket.h
> +++ b/include/openvswitch/token-bucket.h
> @@ -19,6 +19,7 @@
> 
>  #include <limits.h>
>  #include <stdbool.h>
> +#include <time.h>
> 
>  #ifdef __cplusplus
>  extern "C" {
> @@ -41,7 +42,7 @@ void token_bucket_init(struct token_bucket *,
>  void token_bucket_set(struct token_bucket *,
>                         unsigned int rate, unsigned int burst);
>  bool token_bucket_withdraw(struct token_bucket *tb, unsigned int n,
> -                           long long int now);
> +                           time_t 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 60eb26e53..65fe924eb 100644
> --- a/lib/token-bucket.c
> +++ b/lib/token-bucket.c
> @@ -60,7 +60,7 @@ token_bucket_set(struct token_bucket *tb,
>   * removed) . */
>  bool
>  token_bucket_withdraw(struct token_bucket *tb, unsigned int n,
> -                      long long int now)
> +                      time_t now)
>  {
>      if (tb->tokens < n) {
>          if (now > tb->last_fill) {
> diff --git a/lib/vlog.c b/lib/vlog.c
> index 380dcd479..91f2ae905 100644
> --- a/lib/vlog.c
> +++ b/lib/vlog.c
> @@ -1320,10 +1320,10 @@ vlog_should_drop(const struct vlog_module *module, 
> enum vlog_level level,
>          return true;
>      }
> 
> +    time_t now = time_now();
> +
>      ovs_mutex_lock(&rl->mutex);
> -    if (!token_bucket_withdraw(&rl->token_bucket, VLOG_MSG_TOKENS,
> -                               time_msec())) {
> -        time_t now = time_now();
> +    if (!token_bucket_withdraw(&rl->token_bucket, VLOG_MSG_TOKENS, now)) {
>          if (!rl->n_dropped) {
>              rl->first_dropped = now;
>          }
> diff --git a/ofproto/pinsched.c b/ofproto/pinsched.c
> index a39e4d2ee..e857bf996 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, time_msec());
> +    return token_bucket_withdraw(&ps->token_bucket, 1000, time_now());
>  }
> 
>  void
> 
> 
> Cheers,
> 
> Eelco

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to