mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Dominik Brodowski <linux@dominikbrodowski.net>
To: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>,
	Peter Zijlstra <peterz@infradead.org>,
	Arjan van de Ven <arjan@linux.intel.com>
Cc: linux-kernel@vger.kernel.org
Subject: [RFC PATCH v2] nohz/sched: disable ilb on !mc_capable()
Date: Mon, 26 Apr 2010 22:31:36 +0200	[thread overview]
Message-ID: <20100426203136.GA1539@comet.dominikbrodowski.net> (raw)

From: Dominik Brodowski <linux@dominikbrodowski.net>
Date: Thu, 8 Apr 2010 21:51:18 +0200
Subject: [PATCH] nohz/sched: disable ilb on !mc_capable()

On my dual-core, !mc_capbale() CPU, the idle load balancer (ilb) is one
of the main reasons ticks are not stopped: Under moderate load (~98 % idle),
upt o half of the calls to tick_nohz_top_sched_tick() are aborted due
to calls to select_nohz_load_balancer(1).

I suspect this is caused by the following phenomenon:

    CPU0				CPU1
    <active>				<active>
    tick_nohz_stop_sched_tick(1)
    select_nohz_load_balancer(1)
     => CPU0 becomes ilb owner,		<CPU1 becomes idle a bit later>
        tick is not stopped,		tick_nohz_stop_sched_tick(1)
        CPU0 goes to sleep for		 => CPU1 isn't the ilb owner,
        exactly 1 tick.			    tick is stopped.
    <short sleep>			<long sleep>
    ---> scheduler_tick()
    tick_nohz_stop_sched_tick(0)
    tick_nohz_stop_sched_tick(1)
     => is ilb owner, all CPUs are
        idle, CPU0 may go to sleep.

If all CPU cores have hardly anything to do, letting the active CPU do
idle load balancing allows us to enter deep sleep states earlier, and for
longer periods of time. Furthermore, on !mc_capable() systems, it seems that
the ilb algorithm isn't needed at all. Let's show this for a 2-core system:

- if both cores are active, ilb is deactivated
- if no core is active, ilb is deactivated
- if only one core is active, it attempts to balance its load off to other
  CPUs on each tick anyway. ilb wouldn't act quicker.

This patch decreases the amount of wakeups on my completely idle notebook by
about two thirds.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>

diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
index 5a5ea2c..8ad8a03 100644
--- a/kernel/sched_fair.c
+++ b/kernel/sched_fair.c
@@ -3290,6 +3290,9 @@ int select_nohz_load_balancer(int stop_tick)
 	if (stop_tick) {
 		cpu_rq(cpu)->in_nohz_recently = 1;
 
+		if (!mc_capable())
+			return 0;
+
 		if (!cpu_active(cpu)) {
 			if (atomic_read(&nohz.load_balancer) != cpu)
 				return 0;
@@ -3339,6 +3342,9 @@ int select_nohz_load_balancer(int stop_tick)
 		if (!cpumask_test_cpu(cpu, nohz.cpu_mask))
 			return 0;
 
+		if (!mc_capable())
+			return 0;
+
 		cpumask_clear_cpu(cpu, nohz.cpu_mask);
 
 		if (atomic_read(&nohz.load_balancer) == cpu)

             reply	other threads:[~2010-04-26 20:31 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-04-26 20:31 Dominik Brodowski [this message]
2010-05-04 13:14 ` Peter Zijlstra
2010-05-04 20:14   ` Dominik Brodowski
2010-05-05 23:03     ` Suresh Siddha

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=20100426203136.GA1539@comet.dominikbrodowski.net \
    --to=linux@dominikbrodowski.net \
    --cc=arjan@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=peterz@infradead.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®