Re: [PATCH] sched/cpufreq: Use USEC_PER_SEC for deadline task

From: Christian Loehle
Date: Tue Aug 13 2024 - 06:17:19 EST


On 8/13/24 08:54, Vincent Guittot wrote:
> On Fri, 9 Aug 2024 at 09:42, Juri Lelli <juri.lelli@xxxxxxxxxx> wrote:
>>
>> On 09/08/24 02:24, Qais Yousef wrote:
>>> Adding more sched folks to CC
>>>
>>> On 08/06/24 14:41, Christian Loehle wrote:
>>>> Convert the sugov deadline task attributes to use the available
>>>> definitions to make them more readable.
>>>> No functional change.
>>>>
>>>> Signed-off-by: Christian Loehle <christian.loehle@xxxxxxx>
>>>> ---
>>>> kernel/sched/cpufreq_schedutil.c | 6 +++---
>>>> 1 file changed, 3 insertions(+), 3 deletions(-)
>>>>
>>>> diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
>>>> index eece6244f9d2..012b38a04894 100644
>>>> --- a/kernel/sched/cpufreq_schedutil.c
>>>> +++ b/kernel/sched/cpufreq_schedutil.c
>>>> @@ -654,9 +654,9 @@ static int sugov_kthread_create(struct sugov_policy *sg_policy)
>>>> * Fake (unused) bandwidth; workaround to "fix"
>>>> * priority inheritance.
>>>> */
>>>> - .sched_runtime = 1000000,
>>>> - .sched_deadline = 10000000,
>>>> - .sched_period = 10000000,
>>>> + .sched_runtime = USEC_PER_SEC,
>>>> + .sched_deadline = 10 * USEC_PER_SEC,
>>>> + .sched_period = 10 * USEC_PER_SEC,
>>>
>>> I think NSEC_PER_MSEC is the correct one. The units in
>>> include/uapi/linux/sched/types.h is not specified. Had to look at
>>> sched-deadline.rst to figure it out.

Huh, that's what I used, see below.

>>
>> In practice it's the same number :). But, you are correct, we want
>> 1ms/10ms and unit is nanoseconds, so NSEC_PER_MSEC.
>
> Yes NSEC_PER_MSEC is the correct unit

Thank you Qais, Juri and Vincent, but if I'm not missing something we
have a contradiction.
This patch should indeed be NSEC_PER_MSEC and I'll send a v2 but:
- Documentation/scheduler/sched-deadline.rst talks about microseconds:
SCHED_DEADLINE [18] uses three parameters, named "runtime", "period", and
"deadline", to schedule tasks. A SCHED_DEADLINE task should receive
"runtime" microseconds of execution time every "period" microseconds, and
these "runtime" microseconds are available within "deadline" microseconds
from the beginning of the period.

- sched_setattr / sched_getattr manpages talks about nanoseconds:
sched_deadline
This field specifies the "Deadline" parameter for deadline
scheduling. The value is expressed in nanoseconds.

- include/uapi/linux/sched/types.h doesn't mention any unit.
I will add that to the v2 series.

- kernel/sched/deadline.c works with nanoseconds internally (although
with the precision limitation in microseconds).

No conversion so
attr->sched_deadline (uapi) == dl_se->dl_deadline (kernel) etc.
So Documentation/scheduler/sched-deadline.rst is false or what is it that
I'm missing?