[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20221115224042.GA722789@lothringen>
Date: Tue, 15 Nov 2022 23:40:42 +0100
From: Frederic Weisbecker <frederic@...nel.org>
To: "Zhou, Yun" <Yun.Zhou@...driver.com>
Cc: "jstultz@...gle.com" <jstultz@...gle.com>,
"tglx@...utronix.de" <tglx@...utronix.de>,
"sboyd@...nel.org" <sboyd@...nel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] timers: fix LVL_START macro
On Tue, Nov 15, 2022 at 01:15:11PM +0000, Zhou, Yun wrote:
> Hi Frederic,
>
> The issue now is that a timer may be thrown into the upper level bucket. For example, expires 4090 and 1000 HZ, it should be in level 2, but now it will be placed in the level 3. Is this expected?
>
> * HZ 1000 steps
> * Level Offset Granularity Range
> * 0 0 1 ms 0 ms - 63 ms
> * 1 64 8 ms 64 ms - 511 ms
> * 2 128 64 ms 512 ms - 4095 ms (512ms - ~4s)
> * 3 192 512 ms 4096 ms - 32767 ms (~4s - ~32s)
> * 4 256 4096 ms (~4s) 32768 ms - 262143 ms (~32s - ~4m)
The rule is that a timer is not allowed to expire too early. But it can expire
a bit late. Hence why it is always rounded up. So in the case of 4090, we have
the choice between:
1) expiring at bucket 2 after 4096 - 64 = 4032 ms
2) expiring at bucket 3 after 4096 ms
The 1) rounds down and expires too early. The 2) rounds up and expires a bit
late. So the second solution is preferred.
Thanks.
Powered by blists - more mailing lists