From: Peter Zijlstra <peterz@infradead.org>
To: Tom Zanussi <tzanussi@gmail.com>
Cc: linux-kernel@vger.kernel.org, mingo@elte.hu, fweisbec@gmail.com,
rostedt@goodmis.org, anton@samba.org, hch@infradead.org,
Mike Galbraith <efault@gmx.de>
Subject: Re: [RFC][PATCH 0/7] perf trace: general-purpose scripting support, v2
Date: Wed, 25 Nov 2009 10:38:11 +0100 [thread overview]
Message-ID: <1259141891.4027.199.camel@laptop> (raw)
In-Reply-To: <1259137695.4027.45.camel@laptop>
On Wed, 2009-11-25 at 09:28 +0100, Peter Zijlstra wrote:
> On Wed, 2009-11-25 at 01:15 -0600, Tom Zanussi wrote:
> > sched::sched_wakeup 0 01238.657997033 6183 firefox comm=firefox, pid=6199, prio=120, success=1, target_cpu=1
> > sched::sched_switch 1 01238.657991740 7140 firefox prev_comm=firefox, prev_pid=7140, prev_prio=120, prev_state=S, next_comm=firefox, next_pid=6199, next_prio=120
> >
> > min_wakeup_latency: -5293
>
> Looks like we missed a clock update on the cross cpu wakeup, Mike was
> busy plugging those holes -- I've been starting at a patch that might
> cure this (amongst other things).
Hmm, current -tip should have that cured as per:
---
commit 055a00865dcfc8e61f3cbefbb879c9577bd36ae5
Author: Mike Galbraith <efault@gmx.de>
Date: Thu Nov 12 11:07:44 2009 +0100
sched: Fix/add missing update_rq_clock() calls
kthread_bind(), migrate_task() and sched_fork were missing
updates, and try_to_wake_up() was updating after having already
used the stale clock.
Aside from preventing potential latency hits, there' a side
benefit in that early boot printk time stamps become monotonic.
Signed-off-by: Mike Galbraith <efault@gmx.de>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <1258020464.6491.2.camel@marge.simson.net>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
LKML-Reference: <new-submission>
diff --git a/kernel/sched.c b/kernel/sched.c
index 3c11ae0..701eca4 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -2017,6 +2017,7 @@ void kthread_bind(struct task_struct *p, unsigned int cpu)
}
spin_lock_irqsave(&rq->lock, flags);
+ update_rq_clock(rq);
set_task_cpu(p, cpu);
p->cpus_allowed = cpumask_of_cpu(cpu);
p->rt.nr_cpus_allowed = 1;
@@ -2115,6 +2116,7 @@ migrate_task(struct task_struct *p, int dest_cpu, struct migration_req *req)
* it is sufficient to simply update the task's cpu field.
*/
if (!p->se.on_rq && !task_running(rq, p)) {
+ update_rq_clock(rq);
set_task_cpu(p, dest_cpu);
return 0;
}
@@ -2376,14 +2378,15 @@ static int try_to_wake_up(struct task_struct *p, unsigned int state,
task_rq_unlock(rq, &flags);
cpu = p->sched_class->select_task_rq(p, SD_BALANCE_WAKE, wake_flags);
- if (cpu != orig_cpu)
+ if (cpu != orig_cpu) {
+ local_irq_save(flags);
+ rq = cpu_rq(cpu);
+ update_rq_clock(rq);
set_task_cpu(p, cpu);
-
+ local_irq_restore(flags);
+ }
rq = task_rq_lock(p, &flags);
- if (rq != orig_rq)
- update_rq_clock(rq);
-
WARN_ON(p->state != TASK_WAKING);
cpu = task_cpu(p);
@@ -2545,6 +2548,7 @@ static void __sched_fork(struct task_struct *p)
void sched_fork(struct task_struct *p, int clone_flags)
{
int cpu = get_cpu();
+ unsigned long flags;
__sched_fork(p);
@@ -2581,7 +2585,10 @@ void sched_fork(struct task_struct *p, int clone_flags)
#ifdef CONFIG_SMP
cpu = p->sched_class->select_task_rq(p, SD_BALANCE_FORK, 0);
#endif
+ local_irq_save(flags);
+ update_rq_clock(cpu_rq(cpu));
set_task_cpu(p, cpu);
+ local_irq_restore(flags);
#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
if (likely(sched_info_on()))
next prev parent reply other threads:[~2009-11-25 9:38 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-25 7:15 [RFC][PATCH 0/7] perf trace: general-purpose scripting support, v2 Tom Zanussi
2009-11-25 7:15 ` [RFC][PATCH 1/7] perf trace: Add scripting ops Tom Zanussi
2009-11-30 8:21 ` [tip:perf/scripting] " tip-bot for Tom Zanussi
2009-11-25 7:15 ` [RFC][PATCH 2/7] perf trace: Add flag/symbolic format_flags Tom Zanussi
2009-11-30 8:22 ` [tip:perf/scripting] " tip-bot for Tom Zanussi
2009-11-25 7:15 ` [RFC][PATCH 3/7] perf trace: Add Perl scripting support Tom Zanussi
2009-11-30 8:22 ` [tip:perf/scripting] " tip-bot for Tom Zanussi
2009-11-25 7:15 ` [RFC][PATCH 4/7] perf trace: Add perf trace scripting support modules for Perl Tom Zanussi
2009-11-30 8:22 ` [tip:perf/scripting] " tip-bot for Tom Zanussi
2009-11-25 7:15 ` [RFC][PATCH 5/7] perf trace: Add interface to access perf data from Perl handlers Tom Zanussi
2009-11-30 8:22 ` [tip:perf/scripting] " tip-bot for Tom Zanussi
2009-11-25 7:15 ` [RFC][PATCH 6/7] perf trace: Add Documentation for perf trace Perl support Tom Zanussi
2009-11-30 8:23 ` [tip:perf/scripting] " tip-bot for Tom Zanussi
2009-11-25 7:15 ` [RFC][PATCH 7/7] perf trace: Add a scripts/perl/bin for perf trace shell scripts Tom Zanussi
2009-11-30 8:23 ` [tip:perf/scripting] " tip-bot for Tom Zanussi
2009-11-25 8:28 ` [RFC][PATCH 0/7] perf trace: general-purpose scripting support, v2 Peter Zijlstra
2009-11-25 9:38 ` Peter Zijlstra [this message]
2009-11-25 9:43 ` Ingo Molnar
2009-11-25 9:58 ` Peter Zijlstra
2009-11-25 10:00 ` Peter Zijlstra
2009-11-28 9:14 ` Ingo Molnar
2009-11-30 7:17 ` Tom Zanussi
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=1259141891.4027.199.camel@laptop \
--to=peterz@infradead.org \
--cc=anton@samba.org \
--cc=efault@gmx.de \
--cc=fweisbec@gmail.com \
--cc=hch@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rostedt@goodmis.org \
--cc=tzanussi@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.