mbox series

[v5,0/2] Upper bound kernel timers

Message ID 20220505131811.3744503-1-asavkov@redhat.com (mailing list archive)
Headers show
Series Upper bound kernel timers | expand

Message

Artem Savkov May 5, 2022, 1:18 p.m. UTC
As previously discussed [1] we had a report of a regression in TCP keepalive
timer where timers were up to 4 minutes late resulting in disconnects.

This patchset tries to fix the problem by introducing upper bound kernel timers
and making tcp keepalive timer use those.

[1] https://lore.kernel.org/all/20210302001054.4qgrvnkltvkgikzr@treble/T/#u

---
Changes in v5:
  - The least intrusive and most straightforward approach. This avoids touching
    any of existing code. The timeout supplied is always reduced by a known
    timer wheel error margin of 12.5%.
  - Commit message adjustments.

Changes in v4:
  - Drop any attempts to be smart when calculating timer adjustment and always
    substract LVL_GRAN so that base clock lag won't be such a problem. This
    means that in some cases we will always be early, but all we want is not to
    be late.

Changes in v3:
  - A different approach: instead of introducing upper bound timers try to
    account for timer wheen granularity on timer (re)arming step.
  - Not sure whether moving lvl calculation into a separate function is worth
    it.
  - Had a hard time naming the upper_bount_timeout() function - any suggestions
    welcome.

Changes in v2:
  - TIMER_UPPER_BOUND flag description added as a comment in timer.h
  - Code style fixes
  - More elaborate commit message in timer commit

Artem Savkov (2):
  timer: add a function to adjust timeouts to be upper bound
  net: make tcp keepalive timer upper bound

 include/linux/timer.h           |  1 +
 kernel/time/timer.c             | 14 ++++++++++++++
 net/ipv4/inet_connection_sock.c |  2 +-
 3 files changed, 16 insertions(+), 1 deletion(-)

Comments

Josh Poimboeuf July 26, 2022, 10:42 p.m. UTC | #1
Hi Thomas,

Ping?

On Thu, May 05, 2022 at 03:18:09PM +0200, Artem Savkov wrote:
> As previously discussed [1] we had a report of a regression in TCP keepalive
> timer where timers were up to 4 minutes late resulting in disconnects.
> 
> This patchset tries to fix the problem by introducing upper bound kernel timers
> and making tcp keepalive timer use those.
> 
> [1] https://lore.kernel.org/all/20210302001054.4qgrvnkltvkgikzr@treble/T/#u
> 
> ---
> Changes in v5:
>   - The least intrusive and most straightforward approach. This avoids touching
>     any of existing code. The timeout supplied is always reduced by a known
>     timer wheel error margin of 12.5%.
>   - Commit message adjustments.
> 
> Changes in v4:
>   - Drop any attempts to be smart when calculating timer adjustment and always
>     substract LVL_GRAN so that base clock lag won't be such a problem. This
>     means that in some cases we will always be early, but all we want is not to
>     be late.
> 
> Changes in v3:
>   - A different approach: instead of introducing upper bound timers try to
>     account for timer wheen granularity on timer (re)arming step.
>   - Not sure whether moving lvl calculation into a separate function is worth
>     it.
>   - Had a hard time naming the upper_bount_timeout() function - any suggestions
>     welcome.
> 
> Changes in v2:
>   - TIMER_UPPER_BOUND flag description added as a comment in timer.h
>   - Code style fixes
>   - More elaborate commit message in timer commit
> 
> Artem Savkov (2):
>   timer: add a function to adjust timeouts to be upper bound
>   net: make tcp keepalive timer upper bound
> 
>  include/linux/timer.h           |  1 +
>  kernel/time/timer.c             | 14 ++++++++++++++
>  net/ipv4/inet_connection_sock.c |  2 +-
>  3 files changed, 16 insertions(+), 1 deletion(-)
> 
> -- 
> 2.34.1
>