All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pavel Machek <pavel@ucw.cz>
To: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	kernel list <linux-kernel@vger.kernel.org>
Subject: Re: nohz and strange sleep latencies
Date: Thu, 22 Nov 2007 19:52:38 +0100	[thread overview]
Message-ID: <20071122185238.GA1821@elf.ucw.cz> (raw)
In-Reply-To: <20071120225246.GA24380@elte.hu>

Hi!

> > > to me this has the feeling of lapic breakage in C2 mode. Does it get any 
> > > better if you boot with 'nolapic'? (but that might in turn turn off 
> > > high-res timers and nohz in essence) Thomas, any ideas?
> > 
> > Hmm, lapic is considered unstable in c2 by default. You have to tell 
> > the kernel that you trust it in C2 on the command line.
> 
> yeah, i was wondering about that too. ACPI enumerated them properly at a 
> certain stage:
> 
>  ACPI: CPU0 (power states: C1[C1] C2[C2] C3[C3])
>  ACPI: CPU1 (power states: C1[C1] C2[C2] C3[C3])
> 
> but perhaps somehow we miss this fact and fail to turn off the lapic 
> clockevents drivers?

Ok, I guess I'm lost. If I offline second CPU, I immediately get
1000Hz timer tick... is that expected?

I'm trying to decide when system is idle (lets say that means "no user
task is scheduled to wakeup within 10 seconds)... I added some
instrumentation to nohz subsystem, but it does not behave like I'd
expect: even if I run "while true; do sleep .01; done" loop, I see
nohz preparing for 5 seconds sleep... while it seems obvious that it
can only be 10msec sleep, and with max_cstate=1, it works that
way... Plus, nte->start_pid seems to contain some random numbers :-(.

What am I doing wrong?

(Patch for illustration, I can generate full diff against vanilla,
but...)
								Pavel

+++ b/kernel/time/tick-sched.c
@@ -229,11 +232,13 @@ void tick_nohz_stop_sched_tick(void)
 		if (delta_jiffies > 1)
 			cpu_set(cpu, nohz_cpu_mask);
 
+		{
+			int user_wait = get_next_timer_interrupt(last_jiffies, 1) - last_jiffies;
+
+			if ((user_wait > HZ/10) && (num_online_cpus() == 1))
+				printk("NOHZ: user ready for %d:%d sec wait (kernel %d:%d sec wait), naughty %d\n", user_wait/HZ, user_wait%HZ, delta_jiffies/HZ, delta_jiffies%HZ, naughty_pid);
+		}
+
 		/*
 		 * nohz_stop_sched_tick can be called several times before
 		 * the nohz_restart_sched_tick is called. This happens when
+++ b/kernel/timer.c
@@ -691,6 +693,12 @@ static unsigned long __next_timer_interr
 			if (tbase_get_deferrable(nte->base))
 				continue;
 
+			if (flags && (nte->start_pid < 1))
+				continue;
+
+			if (flags)
+				naughty_pid = nte->start_pid;
+
 			found = 1;
 			expires = nte->expires;
 			/* Look at the cascade bucket(s)? */



-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

  parent reply	other threads:[~2007-11-22 18:52 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-19 20:31 nohz and strange sleep latencies Pavel Machek
2007-11-19 20:55 ` Ingo Molnar
2007-11-19 21:11   ` Pavel Machek
2007-11-20  8:57     ` Ingo Molnar
2007-11-20  9:05       ` Ingo Molnar
2007-11-20 10:54       ` Pavel Machek
2007-11-20 20:54         ` Ingo Molnar
2007-11-20 22:48           ` Thomas Gleixner
2007-11-20 22:52             ` Ingo Molnar
2007-11-22 10:09               ` Pavel Machek
2007-11-22 18:51               ` Pavel Machek
2007-11-22 18:52               ` Pavel Machek [this message]
2007-11-22 20:29                 ` Thomas Gleixner
2007-11-23 12:22                   ` Pavel Machek
2007-11-24 22:29                   ` Pavel Machek
2007-11-24 22:40                   ` Pavel Machek
2007-11-24 23:29                     ` Rafael J. Wysocki
2007-11-24 23:35                       ` Rafael J. Wysocki
2007-11-25 21:51                       ` Thomas Gleixner
2007-11-25 20:25                   ` [patch] " Pavel Machek
2007-11-25 21:42                     ` Thomas Gleixner
2007-11-26 11:54                   ` Pavel Machek
2007-11-20  9:44 ` Thomas Gleixner

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=20071122185238.GA1821@elf.ucw.cz \
    --to=pavel@ucw.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=tglx@linutronix.de \
    /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.