mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Chen, Kenneth W" <kenneth.w.chen@intel.com>
To: "'Nick Piggin'" <nickpiggin@yahoo.com.au>
Cc: "Con Kolivas" <kernel@kolivas.org>,
	<linux-kernel@vger.kernel.org>, "'Chris Mason'" <mason@suse.com>,
	"Ingo Molnar" <mingo@elte.hu>
Subject: RE: [PATCH RFC] smt nice introduces significant lock contention
Date: Fri, 2 Jun 2006 02:36:54 -0700	[thread overview]
Message-ID: <000201c68628$16f64550$0c4ce984@amr.corp.intel.com> (raw)
In-Reply-To: <447FFD35.9020909@yahoo.com.au>

Nick Piggin wrote on Friday, June 02, 2006 1:56 AM
> Chen, Kenneth W wrote:
> 
> > Ha, you beat me by one minute. It did cross my mind to use try lock there as
> > well, take a look at my version, I think I have a better inner loop.
> 
> Actually you *have* to use trylocks I think, because the current runqueue
> is already locked.
> 
> And why do we lock all siblings in the other case, for that matter? (not
> that it makes much difference except on niagara today).
> 
> Rolled up patch with everyone's changes attached.


OK, it's down to nit-picking now:

Remove this_rq argument from wake_sleeping_dependent() since it is not
used.  Nick, you had that in your earlier version, but it got lost in
the woods.

I don't like cpumask being declared on the stack.  Here is my version
to rid it out in wake_sleeping_dependent() and dependent_sleeper().

- Ken


--- ./kernel/sched.c.orig	2006-06-02 03:20:40.000000000 -0700
+++ ./kernel/sched.c	2006-06-02 03:20:59.000000000 -0700
@@ -2714,10 +2714,9 @@ static inline void wakeup_busy_runqueue(
 /*
  * Called with interrupts disabled and this_rq's runqueue locked.
  */
-static void wake_sleeping_dependent(int this_cpu, runqueue_t *this_rq)
+static void wake_sleeping_dependent(int this_cpu)
 {
 	struct sched_domain *tmp, *sd = NULL;
-	cpumask_t sibling_map;
 	int i;
 
 	for_each_domain(this_cpu, tmp)
@@ -2728,10 +2727,11 @@ static void wake_sleeping_dependent(int 
 	if (!sd)
 		return;
 
-	sibling_map = sd->span;
-	cpu_clear(this_cpu, sibling_map);
-	for_each_cpu_mask(i, sibling_map) {
+	for_each_cpu_mask(i, sd->span) {
 		runqueue_t *smt_rq = cpu_rq(i);
+
+		if (i == this_cpu)
+			continue;
 		if (unlikely(!spin_trylock(&smt_rq->lock)))
 			continue;
 
@@ -2761,7 +2761,6 @@ static int dependent_sleeper(int this_cp
 	struct task_struct *p)
 {
 	struct sched_domain *tmp, *sd = NULL;
-	cpumask_t sibling_map;
 	int ret = 0, i;
 
 	for_each_domain(this_cpu, tmp)
@@ -2772,12 +2771,13 @@ static int dependent_sleeper(int this_cp
 	if (!sd)
 		return 0;
 
-	sibling_map = sd->span;
-	cpu_clear(this_cpu, sibling_map);
-	for_each_cpu_mask(i, sibling_map) {
+	for_each_cpu_mask(i, sd->span) {
 		runqueue_t *smt_rq;
 		task_t *smt_curr;
 
+		if (i == this_cpu)
+			continue;
+
 		smt_rq = cpu_rq(i);
 		if (unlikely(!spin_trylock(&smt_rq->lock)))
 			continue;
@@ -2842,7 +2842,7 @@ check_smt_task:
 	return ret;
 }
 #else
-static inline void wake_sleeping_dependent(int this_cpu, runqueue_t *this_rq)
+static inline void wake_sleeping_dependent(int this_cpu)
 {
 }
 
@@ -2973,7 +2973,7 @@ need_resched_nonpreemptible:
 		if (!rq->nr_running) {
 			next = rq->idle;
 			rq->expired_timestamp = 0;
-			wake_sleeping_dependent(cpu, rq);
+			wake_sleeping_dependent(cpu);
 			goto switch_tasks;
 		}
 	}

  parent reply	other threads:[~2006-06-02  9:37 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-06-01 22:55 Chris Mason
2006-06-01 23:57 ` Chen, Kenneth W
2006-06-02  1:59   ` Con Kolivas
2006-06-02  2:28     ` Con Kolivas
2006-06-02  3:55       ` Con Kolivas
2006-06-02  4:18         ` Nick Piggin
2006-06-02  6:08           ` Con Kolivas
2006-06-02  7:53             ` Nick Piggin
2006-06-02  8:17               ` Con Kolivas
2006-06-02  8:28                 ` Nick Piggin
2006-06-02  8:34                   ` Chen, Kenneth W
2006-06-02  8:56                     ` Nick Piggin
2006-06-02  9:17                       ` Chen, Kenneth W
2006-06-02  9:25                         ` Con Kolivas
2006-06-02  9:31                           ` Chen, Kenneth W
2006-06-02  9:34                             ` Con Kolivas
2006-06-02  9:53                               ` Chen, Kenneth W
2006-06-02 10:12                                 ` Con Kolivas
2006-06-02 20:53                                   ` Chen, Kenneth W
2006-06-02 22:15                                     ` Con Kolivas
2006-06-02 22:19                                       ` Chen, Kenneth W
2006-06-02 22:31                                         ` Con Kolivas
2006-06-02 22:58                                           ` Chen, Kenneth W
2006-06-03  0:02                                             ` Con Kolivas
2006-06-03  0:08                                               ` Chen, Kenneth W
2006-06-03  0:27                                                 ` Con Kolivas
2006-06-02  9:36                       ` Chen, Kenneth W [this message]
2006-06-02 10:30                       ` Con Kolivas
2006-06-02 13:16                         ` Con Kolivas
2006-06-02 21:54                           ` Chen, Kenneth W
2006-06-02 22:04                             ` Con Kolivas
2006-06-02 22:14                       ` Chen, Kenneth W
2006-06-02 10:19                   ` Con Kolivas
2006-06-02 20:59                     ` Chen, Kenneth W
2006-06-02  8:38               ` Chen, Kenneth W
2006-06-02  8:24           ` Chen, Kenneth W
2006-06-02  8:31         ` Chen, Kenneth W
2006-06-02  8:50         ` Chen, Kenneth W
2006-06-02  2:35     ` Chen, Kenneth W
2006-06-02  3:04       ` Con Kolivas
2006-06-02  3:23         ` Con Kolivas

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='000201c68628$16f64550$0c4ce984@amr.corp.intel.com' \
    --to=kenneth.w.chen@intel.com \
    --cc=kernel@kolivas.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mason@suse.com \
    --cc=mingo@elte.hu \
    --cc=nickpiggin@yahoo.com.au \
    /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