All of lore.kernel.org
 help / color / mirror / Atom feed
From: Shailabh Nagar <nagar@watson.ibm.com>
To: Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [Patch 3/8] cpu delays
Date: Thu, 30 Mar 2006 11:01:27 -0500	[thread overview]
Message-ID: <442C00D7.3000502@watson.ibm.com> (raw)
In-Reply-To: <20060329210352.53a64b5c.akpm@osdl.org>

Andrew Morton wrote:

>Shailabh Nagar <nagar@watson.ibm.com> wrote:
>  
>
>>delayacct-schedstats.patch
>>
>>Make the task-related schedstats functions
>>callable by delay accounting even if schedstats
>>collection isn't turned on. This removes the
>>dependency of delay accounting on schedstats and allows
>>cpu delays to be exported.
>>
>>..
>>
>>Index: linux-2.6.16/include/linux/sched.h
>>===================================================================
>>--- linux-2.6.16.orig/include/linux/sched.h	2006-03-29 18:13:13.000000000 -0500
>>+++ linux-2.6.16/include/linux/sched.h	2006-03-29 18:13:15.000000000 -0500
>>@@ -525,7 +525,7 @@ typedef struct prio_array prio_array_t;
>> struct backing_dev_info;
>> struct reclaim_state;
>>
>>-#ifdef CONFIG_SCHEDSTATS
>>+#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
>> struct sched_info {
>> 	/* cumulative counters */
>> 	unsigned long	cpu_time,	/* time spent on the cpu */
>>@@ -537,10 +537,14 @@ struct sched_info {
>> 			last_queued;	/* when we were last queued to run */
>> };
>>
>>+#ifdef CONFIG_SCHEDSTATS
>> extern struct file_operations proc_schedstat_operations;
>>-#endif
>>+#endif /* CONFIG_SCHEDSTATS */
>>+#endif /* defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) */
>>
>> #ifdef CONFIG_TASK_DELAY_ACCT
>>+extern int delayacct_on;
>>+
>>    
>>
>
>This was already declared in delayacct.h and nothing in sched.h needs it. 
>So it's better if .c files pick this declaration up from delayacct.h.
>
>  
>
>>+static inline void rq_sched_info_arrive(struct runqueue *rq,
>>+						unsigned long diff)
>>+{
>>+	if (rq) {
>>+		rq->rq_sched_info.run_delay += diff;
>>+		rq->rq_sched_info.pcnt++;
>>+	}
>>+}
>>    
>>
>
>The nonatomic updates need locking.  I assume it's runqueue.lock, but a
>comment describing the rules would be good.
>
>  
>
Yes, it is rq.lock. Will add comment.

>>+static inline void rq_sched_info_depart(struct runqueue *rq,
>>+						unsigned long diff)
>>+{
>>+	if (rq)
>>+		rq->rq_sched_info.cpu_time += diff;
>>+}
>>    
>>
>
>Ditto.
>  
>
Will add comment.

>  
>
>> static inline void sched_info_queued(task_t *t)
>> {
>>-	if (!t->sched_info.last_queued)
>>-		t->sched_info.last_queued = jiffies;
>>+	if (unlikely(sched_info_on()))
>>+		if (!t->sched_info.last_queued)
>>+			t->sched_info.last_queued = jiffies;
>> }
>>    
>>
>
>It might be better to put the unlikely() into sched_info_on() itself.
>  
>
The function sched_info_on has only got a return statement so putting 
the unlikely within
it doesn't seem possible.

This is a rather aggressive use of the unlikely. In the case where 
CONFIG_SCHEDSTATS is
defined, sched_info_on always returns 1 so the unlikely will always 
cause a mispredict. I'm assuming
the extra penalty for that is acceptable for those using schedstats 
since its never turned on in a production
kernel.
If only CONFIG_TASK_DELAY_ACCT is configured, the value of delayacct_on, 
which is very
likely going to be 0, will be returned so the unlikely is potentially 
helpful to reduce overhead.

Thoughts ?

As I write this, I realize the function sched_info_on() is also wrongly 
written and doesn't account for the
case where both SCHEDSTATS and TASK_DELAY_ACCT  are configured. Will fix 
that. But thats
orthogonal to the above discussion of whether the unlikely should be used.

--Shailabh



  reply	other threads:[~2006-03-30 16:01 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-03-30  0:32 [Patch 0/8] per-task delay accounting Shailabh Nagar
2006-03-30  0:35 ` [Patch 1/8] Setup Shailabh Nagar
2006-03-30  5:03   ` Andrew Morton
2006-03-30 15:07     ` Shailabh Nagar
2006-03-30  0:37 ` [Patch 2/8] Block I/O, swapin delays Shailabh Nagar
2006-03-30  5:03   ` Andrew Morton
2006-03-30 15:21     ` Shailabh Nagar
2006-03-30  0:42 ` [Patch 3/8] cpu delays Shailabh Nagar
2006-03-30  5:03   ` Andrew Morton
2006-03-30 16:01     ` Shailabh Nagar [this message]
2006-03-30 16:00   ` Dave Hansen
2006-03-30 16:03     ` Shailabh Nagar
2006-03-30  0:48 ` [Patch 4/8] generic netlink utility functions Shailabh Nagar
2006-03-30  0:52 ` [Patch 5/8] generic netlink interface for delay accounting Shailabh Nagar
2006-03-30  5:04   ` Andrew Morton
2006-03-30  6:10     ` Balbir Singh
2006-03-30  6:26       ` Andrew Morton
2006-03-30  6:29         ` Balbir Singh
2006-03-30 16:24       ` Shailabh Nagar
2006-03-30  0:54 ` [Patch 6/8] virtual cpu run time Shailabh Nagar
2006-03-30  5:04   ` Andrew Morton
2006-03-30 16:10     ` Shailabh Nagar
2006-03-30  0:56 ` [Patch 7/8] proc interface for block I/O delays Shailabh Nagar
2006-03-30  5:04   ` Andrew Morton
2006-03-30  0:59 ` [Patch 8/8] documentation, userspace utility Shailabh Nagar
2006-03-30  5:03 ` [Patch 0/8] per-task delay accounting Andrew Morton
2006-03-30  6:23   ` Balbir Singh
2006-03-30  6:47     ` Andrew Morton
2006-03-30  9:55       ` Paul Jackson
2006-03-30 13:23       ` [Lse-tech] " Dipankar Sarma
2006-03-30 17:23       ` Shailabh Nagar
2006-03-31  2:54         ` Peter Chubb
2006-03-31  5:27           ` Shailabh Nagar
2006-03-31  8:17             ` Peter Chubb
2006-03-31 16:03               ` Shailabh Nagar
     [not found]       ` <442CCF54.3000501@watson.ibm.com>
2006-03-31  7:31         ` Guillaume Thouvenin
2006-03-31 17:01           ` Shailabh Nagar
     [not found]         ` <442D8E39.8080606@engr.sgi.com>
     [not found]           ` <442DED81.5060009@engr.sgi.com>
2006-04-10 17:15             ` Jay Lan
2006-04-10 21:44               ` Shailabh Nagar
2006-04-10 22:33                 ` [Lse-tech] " Jay Lan

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=442C00D7.3000502@watson.ibm.com \
    --to=nagar@watson.ibm.com \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    /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.