[ovs-dev] [PATCH v1 6/9] conntrack: Do not schedule zero ms timers

William Tu u9012063 at gmail.com
Tue Feb 23 22:56:01 UTC 2021


On Wed, Feb 17, 2021 at 8:34 AM Gaetan Rivet <grive at u256.net> wrote:
>
> When ct_sweep() is far behind on its work, the 'next_wake' returned can
> be before the moment it started. When it happens, the thread schedules a
> zero ms timer that is logged as an error.
>
> Instead, mark the thread for immediate wake in the next poll_block().
>
> Signed-off-by: Gaetan Rivet <grive at u256.net>
> Reviewed-by: Eli Britstein <elibr at nvidia.com>
> ---

Looks ok to me.
I guess previously we don't want to clean too often, so there is
a minimal CT_CLEAN_MIN_INTERVAL.
With this change, we might end up busy doing ct_sweep() and
hit 100% cpu?



>  lib/conntrack.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/lib/conntrack.c b/lib/conntrack.c
> index 5aad64994..71f79a790 100644
> --- a/lib/conntrack.c
> +++ b/lib/conntrack.c
> @@ -1628,6 +1628,8 @@ clean_thread_main(void *f_)
>          next_wake = conntrack_clean(ct, now);
>
>          if (next_wake < now) {
> +            poll_immediate_wake();
> +        } else if (next_wake < now + CT_CLEAN_MIN_INTERVAL) {
>              poll_timer_wait_until(now + CT_CLEAN_MIN_INTERVAL);
>          } else {
>              poll_timer_wait_until(MAX(next_wake, now + CT_CLEAN_INTERVAL));
> --
> 2.30.0
>


More information about the dev mailing list