mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Luis Machado <luis.machado@arm.com>
To: Mike Galbraith <efault@gmx.de>, Peter Zijlstra <peterz@infradead.org>
Cc: Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Hongyan Xia <hongyan.xia2@arm.com>,
	mingo@redhat.com, juri.lelli@redhat.com, rostedt@goodmis.org,
	bsegall@google.com, mgorman@suse.de, vschneid@redhat.com,
	linux-kernel@vger.kernel.org, kprateek.nayak@amd.com,
	wuyun.abel@bytedance.com, youssefesmat@chromium.org,
	tglx@linutronix.de
Subject: Re: [PATCH 10/24] sched/uclamg: Handle delayed dequeue
Date: Thu, 12 Sep 2024 13:58:41 +0100	[thread overview]
Message-ID: <6df12fde-1e0d-445f-8f8a-736d11f9ee41@arm.com> (raw)
In-Reply-To: <4fde8f26a9aeaeafda15b81bbb17b0ffc96941f0.camel@gmx.de>

On 9/11/24 10:10, Mike Galbraith wrote:
> On Wed, 2024-09-11 at 10:45 +0200, Peter Zijlstra wrote:
>> On Wed, Sep 11, 2024 at 09:35:16AM +0100, Luis Machado wrote:
>>>>
>>>> I'm assuming that removing the usage sites restores function?
>>>
>>> It does restore function if we remove the usage.
>>>
>>> From an initial look:
>>>
>>> cat /sys/kernel/debug/sched/debug | grep -i delay                                                                                                                                                                                                                             
>>>   .h_nr_delayed                  : -4
>>>   .h_nr_delayed                  : -6
>>>   .h_nr_delayed                  : -1
>>>   .h_nr_delayed                  : -6
>>>   .h_nr_delayed                  : -1
>>>   .h_nr_delayed                  : -1
>>>   .h_nr_delayed                  : -5
>>>   .h_nr_delayed                  : -6
>>>
>>> So probably an unexpected decrement or lack of an increment somewhere.
>>
>> Yeah, that's buggered. Ok, I'll go rebase sched/core and take this patch
>> out. I'll see if I can reproduce that.
> 
> Hm, would be interesting to know how the heck he's triggering that.
> 
> My x86_64 box refuses to produce any such artifacts with anything I've
> tossed at it, including full LTP with enterprise RT and !RT configs,
> both in master and my local SLE15-SP7 branch.  Hohum.
> 
> 	-Mike

Ok, I seem to have narrowed this down to scheduler class switching. In particular
switched_from_fair.

Valentin's patch (75b6499024a6c1a4ef0288f280534a5c54269076
sched/fair: Properly deactivate sched_delayed task upon class change) introduced
finish_delayed_dequeue_entity, which takes care of cleaning up the state of delayed-dequeue
tasks during class change. Things work fine (minus delayed task accounting) up to this point.

When Peter introduced his patch to do h_nr_delayed accounting, we modified
finish_delayed_dequeue_entity to also call clear_delayed, instead of simply
zeroing se->sched_delayed.

The call to clear_delayed decrements the rq's h_nr_delayed, and it gets used elsewhere
to cleanup the state of delayed-dequeue tasks, in order to share some common code.

With that said, my testing on Android shows that when we hit switched_from_fair during
switching sched classes (due to some RT task), we're in a state where...

1 - We already called into dequeue_entities for this delayed task.
2 - We tested true for the !task_sleep && !task_delayed condition.
3 - se->sched_delayed is true, so h_nr_delayed == 1.
4 - We carry on executing the rest of dequeue_entities and decrement the rq's h_nr_running by 1.

In switched_from_fair, after the above events, we call into finish_delayed_dequeue_entity -> clear_delayed
and do yet another decrement to the rq's h_nr_delayed, now potentially making it negative. As
a consequence, we probably misuse the negative value and adjust the frequencies incorrectly. I
think this is the issue I'm seeing.

It is worth pointing out that even with the Android setup, things only go bad when there is enough
competition and switching of classes (lots of screen events etc).

My suggestion of a fix (below), still under testing, is to inline the delayed-dequeue and the lag zeroing
cleanup within switched_from_fair instead of calling finish_delayed_dequeue_entity. Or maybe
drop finish_delayed_dequeue_entity and inline its contents into its callers.

The rest of Peter's patch introducing h_nr_delayed seems OK as far as I could test.


diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index f993ac282a83..f8df2f8d2e11 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -13168,7 +13168,9 @@ static void switched_from_fair(struct rq *rq, struct task_struct *p)
                 * related to sched_delayed being true and that wasn't done
                 * due to the generic dequeue not using DEQUEUE_DELAYED.
                 */
-               finish_delayed_dequeue_entity(&p->se);
+               p->se.sched_delayed = 0;
+               if (sched_feat(DELAY_ZERO) && p->se.vlag > 0)
+                       p->se.vlag = 0;
                p->se.rel_deadline = 0;
                __block_task(rq, p);
        }

  parent reply	other threads:[~2024-09-12 12:59 UTC|newest]

Thread overview: 241+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-27 10:27 [PATCH 00/24] Complete EEVDF Peter Zijlstra
2024-07-27 10:27 ` [PATCH 01/24] sched/eevdf: Add feature comments Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 02/24] sched/eevdf: Remove min_vruntime_copy Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 03/24] sched/fair: Cleanup pick_task_fair() vs throttle Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 04/24] sched/fair: Cleanup pick_task_fair()s curr Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] sched/fair: Cleanup pick_task_fair()'s curr tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 05/24] sched/fair: Unify pick_{,next_}_task_fair() Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 06/24] sched: Allow sched_class::dequeue_task() to fail Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 07/24] sched/fair: Re-organize dequeue_task_fair() Peter Zijlstra
2024-08-09 16:53   ` Valentin Schneider
2024-08-10 22:17     ` Peter Zijlstra
2024-08-12 10:02       ` Valentin Schneider
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 08/24] sched: Split DEQUEUE_SLEEP from deactivate_task() Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 09/24] sched: Prepare generic code for delayed dequeue Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 10/24] sched/uclamg: Handle " Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-08-19  9:14     ` Christian Loehle
2024-08-20 16:23   ` [PATCH 10/24] " Hongyan Xia
2024-08-21 13:34   ` Hongyan Xia
2024-08-22  8:19     ` Vincent Guittot
2024-08-22  8:21       ` Vincent Guittot
2024-08-22  9:21       ` Luis Machado
2024-08-22  9:53         ` Vincent Guittot
2024-08-22 10:20           ` Vincent Guittot
2024-08-22 10:28           ` Luis Machado
2024-08-22 12:07             ` Luis Machado
2024-08-22 12:10               ` Vincent Guittot
2024-08-22 14:58                 ` Vincent Guittot
2024-08-29 15:42                   ` Hongyan Xia
2024-09-05 13:02                     ` Dietmar Eggemann
2024-09-05 13:33                       ` Vincent Guittot
2024-09-05 14:07                         ` Dietmar Eggemann
2024-09-05 14:29                           ` Vincent Guittot
2024-09-05 14:50                             ` Dietmar Eggemann
2024-09-05 14:53                           ` Peter Zijlstra
2024-09-06  6:14                             ` Vincent Guittot
2024-09-06 10:45                             ` Peter Zijlstra
2024-09-08  7:43                               ` Mike Galbraith
2024-09-10  8:09                               ` [tip: sched/core] sched/eevdf: More PELT vs DELAYED_DEQUEUE tip-bot2 for Peter Zijlstra
2024-11-27  4:17                                 ` K Prateek Nayak
2024-11-27  9:34                                   ` Luis Machado
2024-11-28  6:35                                     ` K Prateek Nayak
2024-09-10 11:04                               ` [PATCH 10/24] sched/uclamg: Handle delayed dequeue Luis Machado
2024-09-10 14:05                                 ` Peter Zijlstra
2024-09-11  8:35                                   ` Luis Machado
2024-09-11  8:45                                     ` Peter Zijlstra
2024-09-11  8:55                                       ` Luis Machado
2024-09-11  9:10                                       ` Mike Galbraith
2024-09-11  9:13                                         ` Peter Zijlstra
2024-09-11  9:27                                           ` Mike Galbraith
2024-09-12 14:00                                             ` Mike Galbraith
2024-09-13 16:39                                               ` Mike Galbraith
2024-09-14  3:40                                                 ` Mike Galbraith
2024-09-24 15:16                                                   ` Luis Machado
2024-09-24 17:35                                                     ` Mike Galbraith
2024-09-25  5:14                                                       ` Mike Galbraith
2024-09-11 11:49                                           ` Dietmar Eggemann
2024-09-11  9:38                                         ` Luis Machado
2024-09-12 12:58                                         ` Luis Machado [this message]
2024-09-12 20:44                                           ` Dietmar Eggemann
2024-09-11 10:46                                       ` Luis Machado
2024-09-06  9:55                           ` Dietmar Eggemann
2024-09-05 14:18                       ` Peter Zijlstra
2024-09-10  8:09                       ` [tip: sched/core] kernel/sched: Fix util_est accounting for DELAY_DEQUEUE tip-bot2 for Dietmar Eggemann
2024-07-27 10:27 ` [PATCH 11/24] sched/fair: Assert {set_next,put_prev}_entity() are properly balanced Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 12/24] sched/fair: Prepare exit/cleanup paths for delayed_dequeue Peter Zijlstra
2024-08-13 12:43   ` Valentin Schneider
2024-08-13 21:54     ` Peter Zijlstra
2024-08-13 22:07       ` Peter Zijlstra
2024-08-14  5:53         ` Peter Zijlstra
2024-08-27  9:35           ` Chen Yu
2024-08-27 20:29             ` Valentin Schneider
2024-08-28  2:55               ` Chen Yu
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-08-27  9:17   ` [PATCH 12/24] " Chen Yu
2024-08-28  3:06     ` Chen Yu
2024-07-27 10:27 ` [PATCH 13/24] sched/fair: Prepare pick_next_task() for delayed dequeue Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-09-10  9:16   ` [PATCH 13/24] " Luis Machado
2024-07-27 10:27 ` [PATCH 14/24] sched/fair: Implement ENQUEUE_DELAYED Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 15/24] sched,freezer: Mark TASK_FROZEN special Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 16/24] sched: Teach dequeue_task() about special task states Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 17/24] sched/fair: Implement delayed dequeue Peter Zijlstra
2024-08-02 14:39   ` Valentin Schneider
2024-08-02 14:59     ` Peter Zijlstra
2024-08-02 16:32       ` Valentin Schneider
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-08-19 10:01   ` [PATCH 17/24] " Luis Machado
     [not found]   ` <CGME20240828223802eucas1p16755f4531ed0611dc4871649746ea774@eucas1p1.samsung.com>
2024-08-28 22:38     ` Marek Szyprowski
2024-10-10  2:49       ` Sean Christopherson
2024-10-10  7:57         ` Mike Galbraith
2024-10-10 16:18           ` Sean Christopherson
2024-10-10 17:12             ` Mike Galbraith
2024-10-10  8:19         ` Peter Zijlstra
2024-10-10  9:18           ` Peter Zijlstra
2024-10-10 18:23             ` Sean Christopherson
2024-10-12 14:15             ` [tip: sched/urgent] sched: Fix external p->on_rq users tip-bot2 for Peter Zijlstra
2024-10-14  7:28             ` [tip: sched/urgent] sched/fair: " tip-bot2 for Peter Zijlstra
2024-11-01 12:47   ` [PATCH 17/24] sched/fair: Implement delayed dequeue Phil Auld
2024-11-01 12:56     ` Peter Zijlstra
2024-11-01 13:38       ` Phil Auld
2024-11-01 14:26         ` Peter Zijlstra
2024-11-01 14:42           ` Phil Auld
2024-11-01 18:08             ` Mike Galbraith
2024-11-01 20:07               ` Phil Auld
2024-11-02  4:32                 ` Mike Galbraith
2024-11-04 13:05                   ` Phil Auld
2024-11-05  4:05                     ` Mike Galbraith
2024-11-05  4:22                       ` K Prateek Nayak
2024-11-05  6:46                         ` Mike Galbraith
2024-11-06  3:02                           ` K Prateek Nayak
2024-11-05 15:20                       ` Phil Auld
2024-11-05 19:05                         ` Phil Auld
2024-11-06  2:45                           ` Mike Galbraith
2024-11-06 13:53                       ` Peter Zijlstra
2024-11-06 14:14                         ` Peter Zijlstra
2024-11-06 14:38                           ` Peter Zijlstra
2024-11-06 15:22                           ` Mike Galbraith
2024-11-07  4:03                             ` Mike Galbraith
2024-11-07  9:46                               ` Mike Galbraith
2024-11-07 14:02                                 ` Mike Galbraith
2024-11-07 14:09                                   ` Peter Zijlstra
2024-11-08  0:24                                     ` [PATCH] sched/fair: Dequeue sched_delayed tasks when waking to a busy CPU Mike Galbraith
2024-11-08 13:34                                       ` Phil Auld
2024-11-11  2:46                                       ` Xuewen Yan
2024-11-11  3:53                                         ` Mike Galbraith
2024-11-12  7:05                                       ` Mike Galbraith
2024-11-12 12:41                                         ` Phil Auld
2024-11-12 14:23                                           ` Peter Zijlstra
2024-11-12 14:23                                           ` Mike Galbraith
2024-11-12 15:41                                             ` Phil Auld
2024-11-12 16:15                                               ` Mike Galbraith
2024-11-14 11:07                                                 ` Mike Galbraith
2024-11-14 11:28                                                   ` Phil Auld
2024-11-19 11:30                                                     ` Phil Auld
2024-11-19 11:51                                                       ` Mike Galbraith
2024-11-20 18:37                                                         ` Mike Galbraith
2024-11-21 11:56                                                           ` Phil Auld
2024-11-21 12:07                                                             ` Phil Auld
2024-11-21 21:21                                                               ` Phil Auld
2024-11-23  8:44                                                             ` [PATCH V2] " Mike Galbraith
2024-11-26  5:32                                                               ` K Prateek Nayak
2024-11-26  6:30                                                                 ` Mike Galbraith
2024-11-26  9:42                                                                   ` Mike Galbraith
2024-12-02 19:15                                                                     ` Phil Auld
2024-11-27 14:13                                                                   ` Mike Galbraith
2024-12-02 16:24                                                               ` Phil Auld
2024-12-02 16:55                                                                 ` Mike Galbraith
2024-12-02 19:12                                                                   ` Phil Auld
2024-12-09 13:11                                                                     ` Phil Auld
2024-12-09 15:06                                                                       ` Mike Galbraith
2024-11-06 14:14                         ` [PATCH 17/24] sched/fair: Implement delayed dequeue Mike Galbraith
2024-11-06 14:33                           ` Peter Zijlstra
2024-11-04  9:28     ` Dietmar Eggemann
2024-11-04 11:55       ` Dietmar Eggemann
2024-11-04 12:50       ` Phil Auld
2024-11-05  9:53         ` Christian Loehle
2024-11-05 15:55           ` Phil Auld
2024-11-08 14:53         ` Dietmar Eggemann
2024-11-08 18:16           ` Phil Auld
2024-11-11 11:29             ` Dietmar Eggemann
2024-07-27 10:27 ` [PATCH 18/24] sched/fair: Implement DELAY_ZERO Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 19/24] sched/eevdf: Fixup PELT vs DELAYED_DEQUEUE Peter Zijlstra
2024-08-13 12:43   ` Valentin Schneider
2024-08-13 22:18     ` Peter Zijlstra
2024-08-14  7:25       ` Peter Zijlstra
2024-08-14  7:28         ` Peter Zijlstra
2024-08-14 10:23         ` Valentin Schneider
2024-08-14 12:59       ` Vincent Guittot
2024-08-17 23:06         ` Peter Zijlstra
2024-08-19 12:50           ` Vincent Guittot
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 20/24] sched/fair: Avoid re-setting virtual deadline on migrations Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] sched/fair: Avoid re-setting virtual deadline on 'migrations' tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 21/24] sched/eevdf: Allow shorter slices to wakeup-preempt Peter Zijlstra
2024-08-05 12:24   ` Chunxin Zang
2024-08-07 17:54     ` Peter Zijlstra
2024-08-13 10:44       ` Chunxin Zang
2024-08-08 10:15   ` Chen Yu
2024-08-08 10:22     ` Peter Zijlstra
2024-08-08 12:31       ` Chen Yu
2024-08-09  7:35         ` Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 22/24] sched/eevdf: Use sched_attr::sched_runtime to set request/slice suggestion Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-07-27 10:27 ` [PATCH 23/24] sched/eevdf: Propagate min_slice up the cgroup hierarchy Peter Zijlstra
2024-08-18  6:23   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2024-09-29  2:02   ` [PATCH 23/24] " Tianchen Ding
2024-07-27 10:27 ` [RFC PATCH 24/24] sched/time: Introduce CLOCK_THREAD_DVFS_ID Peter Zijlstra
2024-07-28 21:30   ` Thomas Gleixner
2024-07-29  7:53   ` Juri Lelli
2024-08-02 11:29     ` Peter Zijlstra
2024-08-19 11:11   ` Christian Loehle
2024-08-01 12:08 ` [PATCH 00/24] Complete EEVDF Luis Machado
2024-08-14 14:34 ` Vincent Guittot
2024-08-14 16:45   ` Mike Galbraith
2024-08-14 16:59     ` Vincent Guittot
2024-08-14 17:18       ` Mike Galbraith
2024-08-14 17:25         ` Vincent Guittot
2024-08-14 17:35       ` K Prateek Nayak
2024-08-16 15:22 ` Valentin Schneider
2024-08-20 16:43 ` Hongyan Xia
2024-08-21  9:46   ` Hongyan Xia
2024-08-21 16:25     ` Mike Galbraith
2024-08-22 15:55     ` Peter Zijlstra
2024-08-27  9:43       ` Hongyan Xia
2024-08-29 17:02 ` Aleksandr Nogikh
2024-09-10 11:45 ` Sven Schnelle
2024-09-10 12:21   ` Sven Schnelle
2024-09-10 14:07     ` Peter Zijlstra
2024-09-10 14:52       ` Sven Schnelle
2024-11-06  1:07 ` Saravana Kannan
2024-11-06  6:19   ` K Prateek Nayak
2024-11-06 11:09     ` Peter Zijlstra
2024-11-06 12:06       ` Luis Machado
2024-11-08  7:07         ` Saravana Kannan
2024-11-08 23:17           ` Samuel Wu
2024-11-11  4:07             ` K Prateek Nayak
2024-11-26 23:32               ` Saravana Kannan
2024-11-28 10:32 ` [REGRESSION] " Marcel Ziswiler
2024-11-28 10:58   ` Peter Zijlstra
2024-11-28 11:37     ` Marcel Ziswiler
2024-11-29  9:08       ` Peter Zijlstra
2024-12-02 18:46         ` Marcel Ziswiler
2024-12-09  9:49           ` Peter Zijlstra
2024-12-10 16:05             ` Marcel Ziswiler
2024-12-10 16:13           ` Steven Rostedt
2024-12-10  8:45   ` Luis Machado

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=6df12fde-1e0d-445f-8f8a-736d11f9ee41@arm.com \
    --to=luis.machado@arm.com \
    --cc=bsegall@google.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=efault@gmx.de \
    --cc=hongyan.xia2@arm.com \
    --cc=juri.lelli@redhat.com \
    --cc=kprateek.nayak@amd.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mgorman@suse.de \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=vincent.guittot@linaro.org \
    --cc=vschneid@redhat.com \
    --cc=wuyun.abel@bytedance.com \
    --cc=youssefesmat@chromium.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome