From: Qais Yousef <qyousef@layalina.io>
To: Peter Zijlstra <peterz@infradead.org>
Cc: John Stultz <jstultz@google.com>,
LKML <linux-kernel@vger.kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
Frederic Weisbecker <frederic@kernel.org>,
Ingo Molnar <mingo@redhat.com>,
Juri Lelli <juri.lelli@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Steven Rostedt <rostedt@goodmis.org>,
Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
Daniel Bristot de Oliveira <bristot@redhat.com>,
Valentin Schneider <vschneid@redhat.com>,
Joel Fernandes <joel@joelfernandes.org>,
kernel-team@android.com
Subject: Re: [PATCH] RFC: sched: Rework task_sched_runtime to avoid calling update_rq_clock
Date: Tue, 18 Jun 2024 16:24:01 +0100 [thread overview]
Message-ID: <20240618152401.flylbc5ye2ch54j4@airbuntu> (raw)
In-Reply-To: <20240618070412.GA31592@noisy.programming.kicks-ass.net>
On 06/18/24 09:04, Peter Zijlstra wrote:
> On Sun, Jun 16, 2024 at 11:36:16PM +0100, Qais Yousef wrote:
>
> > > Which then gets me something like the (completely untested) below..
> > >
> > > Hmm?
> > >
> > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> > > index 0935f9d4bb7b..36aed99d6a6c 100644
> > > --- a/kernel/sched/core.c
> > > +++ b/kernel/sched/core.c
> > > @@ -724,7 +724,6 @@ static void update_rq_clock_task(struct rq *rq, s64 delta)
> > >
> > > rq->prev_irq_time += irq_delta;
> > > delta -= irq_delta;
> > > - psi_account_irqtime(rq->curr, irq_delta);
> > > delayacct_irq(rq->curr, irq_delta);
> > > #endif
> > > #ifdef CONFIG_PARAVIRT_TIME_ACCOUNTING
> > > @@ -5459,6 +5458,8 @@ void sched_tick(void)
> > >
> > > sched_clock_tick();
> > >
> > > + psi_account_irqtime(curr, NULL, &rq->psi_irq_time);
> > > +
> > > rq_lock(rq, &rf);
> > >
> > > update_rq_clock(rq);
> > > @@ -6521,6 +6524,7 @@ static void __sched notrace __schedule(unsigned int sched_mode)
> > > ++*switch_count;
> > >
> > > migrate_disable_switch(rq, prev);
> > > + psi_account_irqtime(prev, next, &rq->psi_irq_time);
> >
> > Hmm are prev and next swapped here? next == curr in my view if there's no
> > subtly I missed
>
> This is before context_switch() so prev == current at this point.
> However, more importantly, the PSI thing accounts to its 'curr' group
> and that should very much be the outgoing task's group in this case.
>
> That is, we need to make sure the outgoing group is up-to-date before
> switching to a new group.
>
> Makes sense?
Yes, thanks! After reviewing the patch though I wondered if we care to handle
when the group changes while we're RUNNING. There will be no __schedule() then.
But it's a matter of how accurate this is supposed to be. In sched_move_task()
we dequeue with DEQUEUE_NOCLOCK which IIUC would have not caused
psi_account_irqtime() to be called on the move already. So we're doing the
same.
We can still maybe move this to sched_change_group() (keeping the psi group
change check you added)? This still LGTM anyway, but thought I'll spill it out.
>
> > > psi_sched_switch(prev, next, !task_on_rq_queued(prev));
> > >
> > > trace_sched_switch(sched_mode & SM_MASK_PREEMPT, prev, next, prev_state);
> > > diff --git a/kernel/sched/psi.c b/kernel/sched/psi.c
> > > index 146baa91d104..65bba162408f 100644
> > > --- a/kernel/sched/psi.c
> > > +++ b/kernel/sched/psi.c
> > > @@ -991,22 +991,31 @@ void psi_task_switch(struct task_struct *prev, struct task_struct *next,
> > > }
> > >
> > > #ifdef CONFIG_IRQ_TIME_ACCOUNTING
> > > -void psi_account_irqtime(struct task_struct *task, u32 delta)
> > > +void psi_account_irqtime(struct task_struct *curr, struct task_struct *prev, u64 *time)
> > > {
> > > - int cpu = task_cpu(task);
> > > + int cpu = task_cpu(curr);
> > > struct psi_group *group;
> > > struct psi_group_cpu *groupc;
> > > - u64 now;
> > > + u64 now, irq;
> > > + s64 delta;
> > >
> > > if (static_branch_likely(&psi_disabled))
> > > return;
> > >
> > > - if (!task->pid)
> > > + if (!curr->pid)
> > > + return;
> > > +
> > > + group = task_psi_group(curr);
> > > + if( prev && task_psi_group(prev) == group)
> >
> > nit: whitespace misplaced
>
> Ha!, is that's all and it all works in one go it's awesome :-)
>
> I'm still trying to learn to type again after switching keyboards. I've
> used a thinkpad keyboard (either on an actual laptop or the travel
> version on my desktop for nearly 20 years... Now I've picked up a split
> keyboard out of necessity (UHK 60 v2 for those interested) and muscle
> memory is still cursing me every single day.
I failed to use those split keyboards..
>
> As a result, I now also cannot type on my laptop anymore, so lose-lose I
> suppose ... urgh.
You mean you're not using AI yet?! :-O
>
> > LGTM otherwise.
> >
> > Reviewed-by: Qais Yousef <qyousef@layalina.io>
>
> Thanks!
>
> John, can you write up a changelog with some pretty numbers and all
> that? Also, when you re-post, can you make sure to Cc the PSI folks
> (johannes and suren iirc, get_maintainers.pl seems to find them).
next prev parent reply other threads:[~2024-06-18 15:24 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-13 1:58 [PATCH] RFC: sched: Rework task_sched_runtime to avoid calling update_rq_clock John Stultz
2024-06-13 3:54 ` John Stultz
2024-06-13 10:04 ` Peter Zijlstra
2024-06-13 11:51 ` Qais Yousef
2024-06-14 9:48 ` Peter Zijlstra
2024-06-15 4:30 ` John Stultz
2024-06-16 22:36 ` Qais Yousef
2024-06-18 7:04 ` Peter Zijlstra
2024-06-18 15:24 ` Qais Yousef [this message]
2024-06-18 0:42 ` John Stultz
2024-06-18 4:45 ` John Stultz
2024-06-18 15:04 ` Qais Yousef
2024-06-18 8:12 ` Peter Zijlstra
2024-06-18 17:59 ` Johannes Weiner
2024-06-18 19:02 ` John Stultz
2024-06-13 18:59 ` John Stultz
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=20240618152401.flylbc5ye2ch54j4@airbuntu \
--to=qyousef@layalina.io \
--cc=bristot@redhat.com \
--cc=bsegall@google.com \
--cc=dietmar.eggemann@arm.com \
--cc=frederic@kernel.org \
--cc=joel@joelfernandes.org \
--cc=jstultz@google.com \
--cc=juri.lelli@redhat.com \
--cc=kernel-team@android.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 \
/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