Re: [PATCH v3] sched: cpuset: Don't rebuild root domains on suspend-resume

From: Dietmar Eggemann
Date: Mon Mar 13 2023 - 08:38:00 EST


On 08/03/2023 11:19, Juri Lelli wrote:
> On 01/03/23 17:03, Qais Yousef wrote:
>> On 03/01/23 15:26, Juri Lelli wrote:
>>> On 01/03/23 12:28, Qais Yousef wrote:
>>>> On 03/01/23 08:31, Juri Lelli wrote:
>>>
>>> ...
>>>
>>>>> Not ignoring you guys here, but it turns out I'm quite bogged down with
>>>>> other stuff at the moment. :/ So, apologies and I'll try to get to this
>>>>> asap. Thanks a lot for all your efforts and time reviewing so far!
>>>>
>>>> Np, I can feel you :-)
>>>
>>> Eh. :/
>>
>> I hope I did not offend. That was meant as no pressure, I understand.
>
> No offence at all! I meant "we are all on the same boat it seems". :)
>
>>> BTW, do you have a repro script of some sort handy I might play with?
>>
>> Sorry no. You'll just need to suspend to ram. I had a simple patch to measure
>> the time around the call and trace_printk'ed the result.
>>
>> I was working on a android phone which just suspends to ram if you turn the
>> screen off and disconnect the usb.
>
> Looks like I could come up with the following
>
> https://github.com/jlelli/linux.git deadline/rework-cpusets
> https://github.com/jlelli/linux/tree/deadline/rework-cpusets
>
> which I don't think it's at a point that I feel comfortable to propose
> as an RFC (not even sure if it actually makes sense), but it survived my
> very light testing.
>
> Could you please take a look and, if it makes some sense in theory, give
> it a try on your end?

sched/cpuset: Keep track of SCHED_DEADLINE task in cpusets

@@ -2474,6 +2494,11 @@ static int cpuset_can_attach(struct
cgroup_taskset *tset)
goto out_unlock;
}

+ if (dl_task(task)) {
+ cs->deadline_tasks++;
+ cpuset_attach_old_cs->deadline_tasks--;
+ }
+

This one looks odd. task is NULL here ?

If you move a DL task from one cpuset to another this happens now:

root@juno:~# ps2 | grep DLN
82 82 140 0 - DLN sugov:0
83 83 140 0 - DLN sugov:1
1615 1616 140 0 - DLN thread0-0
1615 1617 140 0 - DLN thread0-1
1615 1618 140 0 - DLN thread0-2
1615 1619 140 0 - DLN thread0-3
1615 1620 140 0 - DLN thread0-4
1615 1621 140 0 - DLN thread0-5
1615 1622 140 0 - DLN thread0-6
1615 1623 140 0 - DLN thread0-7
1615 1624 140 0 - DLN thread0-8
1615 1625 140 0 - DLN thread0-9
1615 1626 140 0 - DLN thread0-10
1615 1627 140 0 - DLN thread0-11 <--

root@juno:~# cd /sys/fs/cgroup/cpuset
root@juno:~# mkdir cs1
root@juno:~# echo 0 > cs1/cpuset.mems
root@juno:~# echo 0,3-5 > cs1/cpuset.cpus

root@juno:~# echo 1627 > cs1/tasks

root@juno:~# [ 154.968900] *** task=0000000000000000

[...]