From: Thomas Gleixner <tglx@linutronix.de>
To: Artem Savkov <asavkov@redhat.com>,
jpoimboe@redhat.com, netdev@vger.kernel.org
Cc: davem@davemloft.net, yoshfuji@linux-ipv6.org, dsahern@kernel.org,
linux-kernel@vger.kernel.org, Artem Savkov <asavkov@redhat.com>,
Anna-Maria Gleixner <anna-maria@linutronix.de>
Subject: Re: [PATCH 1/2] timer: introduce upper bound timers
Date: Thu, 24 Mar 2022 14:54:21 +0100 [thread overview]
Message-ID: <87h77ncv76.ffs@tglx> (raw)
In-Reply-To: <87tubn8rgk.ffs@tglx>
On Thu, Mar 24 2022 at 13:28, Thomas Gleixner wrote:
> On Wed, Mar 23 2022 at 12:16, Artem Savkov wrote:
>> Add TIMER_UPPER_BOUND flag which allows creation of timers that would
>> expire at most at specified time or earlier.
>>
>> This was previously discussed here:
>> https://lore.kernel.org/all/20210302001054.4qgrvnkltvkgikzr@treble/T/#u
>
> please add the context to the changelog. A link is only supplemental
> information and does not replace content.
>
>> static inline unsigned calc_index(unsigned long expires, unsigned lvl,
>> - unsigned long *bucket_expiry)
>> + unsigned long *bucket_expiry, bool upper_bound)
>> {
>>
>> /*
>> @@ -501,34 +501,39 @@ static inline unsigned calc_index(unsigned long expires, unsigned lvl,
>> * - Truncation of the expiry time in the outer wheel levels
>> *
>> * Round up with level granularity to prevent this.
>> + * Do not perform round up in case of upper bound timer.
>> */
>> - expires = (expires + LVL_GRAN(lvl)) >> LVL_SHIFT(lvl);
>> + if (upper_bound)
>> + expires = expires >> LVL_SHIFT(lvl);
>> + else
>> + expires = (expires + LVL_GRAN(lvl)) >> LVL_SHIFT(lvl);
>
> While this "works", I fundamentally hate this because it adds an extra
> conditional into the common case. That affects every user of the timer
> wheel. We went great length to optimize that code and I'm not really enthused
> to sacrifice that just because of _one_ use case.
Aside of that this is not mathematically correct. Why?
The level selection makes the cutoff at: LEVEL_MAX(lvl) - 1. E.g. 62
instead of 63 for the first level.
The reason is that this accomodates for the + LVL_GRAN(lvl). Now with
surpressing the roundup this creates a gap. Not a horrible problem, but
not correct either.
Thanks,
tglx
next prev parent reply other threads:[~2022-03-24 13:54 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-23 11:16 [PATCH 0/2] Upper bound mode for kernel timers Artem Savkov
2022-03-23 11:16 ` [PATCH 1/2] timer: introduce upper bound timers Artem Savkov
2022-03-23 18:40 ` Josh Poimboeuf
2022-03-24 9:14 ` [PATCH v2 0/2] Upper bound mode for kernel timers Artem Savkov
2022-03-24 9:14 ` [PATCH v2 1/2] timer: introduce upper bound timers Artem Savkov
2022-03-24 9:15 ` [PATCH v2 2/2] net: make tcp keepalive timer upper bound Artem Savkov
2022-03-24 12:28 ` [PATCH 1/2] timer: introduce upper bound timers Thomas Gleixner
2022-03-24 13:54 ` Thomas Gleixner [this message]
2022-03-26 21:13 ` Thomas Gleixner
2022-03-30 8:20 ` [PATCH v3 0/2] Upper bound kernel timers Artem Savkov
2022-03-30 8:20 ` [PATCH v3 1/2] timer: add a function to adjust timeouts to be upper bound Artem Savkov
2022-03-30 13:40 ` Anna-Maria Behnsen
2022-04-02 6:55 ` Artem Savkov
2022-04-05 15:33 ` Thomas Gleixner
2022-04-07 7:52 ` [PATCH v4 0/2] Upper bound kernel timers Artem Savkov
2022-04-07 7:52 ` [PATCH v4 1/2] timer: add a function to adjust timeouts to be upper bound Artem Savkov
2022-04-08 0:37 ` Thomas Gleixner
2022-04-08 5:39 ` Josh Poimboeuf
2022-04-12 13:42 ` Artem Savkov
2022-05-05 13:18 ` [PATCH v5 0/2] Upper bound kernel timers Artem Savkov
2022-05-05 13:18 ` [PATCH v5 1/2] timer: add a function to adjust timeouts to be upper bound Artem Savkov
2022-05-05 13:18 ` [PATCH v5 2/2] net: make tcp keepalive timer " Artem Savkov
2022-05-05 17:56 ` Josh Poimboeuf
2022-05-06 6:39 ` Artem Savkov
2022-05-06 16:24 ` Josh Poimboeuf
2022-07-26 22:42 ` [PATCH v5 0/2] Upper bound kernel timers Josh Poimboeuf
2022-04-07 7:52 ` [PATCH v4 2/2] net: make tcp keepalive timer upper bound Artem Savkov
[not found] ` <Yk1i3WrcVIICAiF0@samus.usersys.redhat.com>
2022-04-07 23:26 ` [PATCH v3 1/2] timer: add a function to adjust timeouts to be " Thomas Gleixner
2022-03-30 8:20 ` [PATCH v3 2/2] net: make tcp keepalive timer " Artem Savkov
2022-04-02 3:09 ` [net] 6ef3f95797: UBSAN:shift-out-of-bounds_in_kernel/time/timer.c kernel test robot
2022-04-02 3:09 ` kernel test robot
2022-04-02 7:11 ` Artem Savkov
2022-04-02 7:11 ` Artem Savkov
2022-03-30 10:28 ` [PATCH v3 0/2] Upper bound kernel timers David Laight
2022-03-25 7:38 ` [timer] d41e0719d5: UBSAN:shift-out-of-bounds_in_lib/flex_proportions.c kernel test robot
2022-03-25 7:38 ` kernel test robot
2022-03-25 19:14 ` Thomas Gleixner
2022-03-25 19:14 ` Thomas Gleixner
2022-03-23 11:16 ` [PATCH 2/2] net: make tcp keepalive timer upper bound Artem Savkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87h77ncv76.ffs@tglx \
--to=tglx@linutronix.de \
--cc=anna-maria@linutronix.de \
--cc=asavkov@redhat.com \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=jpoimboe@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=yoshfuji@linux-ipv6.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.