public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] 2.6.0-test4 -- add context switch counters
@ 2003-08-27  0:57 Peter Chubb
  2003-08-27  1:18 ` Andrew Morton
  2003-08-27  6:54 ` William Lee Irwin III
  0 siblings, 2 replies; 21+ messages in thread
From: Peter Chubb @ 2003-08-27  0:57 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel


Currently, the context switch counters reported by getrusage() are
always zero.  The appended patch adds fields to struct task_struct to
count context switches, and adds code to do the counting.

The patch adds 4 longs to struct task struct, and a single addition to
the fast path in schedule().

# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.1291  -> 1.1292 
#	include/linux/sched.h	1.162   -> 1.163  
#	       kernel/fork.c	1.137   -> 1.138  
#	        kernel/sys.c	1.54    -> 1.55   
#	      kernel/sched.c	1.207   -> 1.208  
#	       kernel/exit.c	1.111   -> 1.112  
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 03/08/27	peterc@gelato.unsw.edu.au	1.1292
# Add context switch counters to struct task_struct; add code to 
# update them in schedule(), initialise them in copy_mm(), and copy
# them to user space in getrusage().
# --------------------------------------------
#
diff -Nru a/include/linux/sched.h b/include/linux/sched.h
--- a/include/linux/sched.h	Wed Aug 27 10:57:24 2003
+++ b/include/linux/sched.h	Wed Aug 27 10:57:24 2003
@@ -391,6 +391,7 @@
 	struct timer_list real_timer;
 	struct list_head posix_timers; /* POSIX.1b Interval Timers */
 	unsigned long utime, stime, cutime, cstime;
+	unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw; /* context switch counts */
 	u64 start_time;
 /* mm fault and swap info: this can arguably be seen as either mm-specific or thread-specific */
 	unsigned long min_flt, maj_flt, nswap, cmin_flt, cmaj_flt, cnswap;
diff -Nru a/kernel/exit.c b/kernel/exit.c
--- a/kernel/exit.c	Wed Aug 27 10:57:24 2003
+++ b/kernel/exit.c	Wed Aug 27 10:57:24 2003
@@ -80,6 +80,8 @@
 	p->parent->cmin_flt += p->min_flt + p->cmin_flt;
 	p->parent->cmaj_flt += p->maj_flt + p->cmaj_flt;
 	p->parent->cnswap += p->nswap + p->cnswap;
+	p->parent->cnvcsw += p->nvcsw + p->cnvcsw;
+	p->parent->cnivcsw += p->nivcsw + p->cnivcsw;
 	sched_exit(p);
 	write_unlock_irq(&tasklist_lock);
 	spin_unlock(&p->proc_lock);
diff -Nru a/kernel/fork.c b/kernel/fork.c
--- a/kernel/fork.c	Wed Aug 27 10:57:24 2003
+++ b/kernel/fork.c	Wed Aug 27 10:57:24 2003
@@ -461,6 +461,7 @@
 	tsk->min_flt = tsk->maj_flt = 0;
 	tsk->cmin_flt = tsk->cmaj_flt = 0;
 	tsk->nswap = tsk->cnswap = 0;
+	tsk->nvcsw = tsk->nivcsw = tsk->cnvcsw = tsk->cnivcsw = 0;
 
 	tsk->mm = NULL;
 	tsk->active_mm = NULL;
diff -Nru a/kernel/sched.c b/kernel/sched.c
--- a/kernel/sched.c	Wed Aug 27 10:57:24 2003
+++ b/kernel/sched.c	Wed Aug 27 10:57:24 2003
@@ -1325,8 +1325,9 @@
 		}
 	default:
 		deactivate_task(prev, rq);
+		prev->nvcsw++;
 	case TASK_RUNNING:
-		;
+		prev->nivcsw++;
 	}
 pick_next_task:
 	if (unlikely(!rq->nr_running)) {
diff -Nru a/kernel/sys.c b/kernel/sys.c
--- a/kernel/sys.c	Wed Aug 27 10:57:24 2003
+++ b/kernel/sys.c	Wed Aug 27 10:57:24 2003
@@ -1309,6 +1309,8 @@
 		case RUSAGE_SELF:
 			jiffies_to_timeval(p->utime, &r.ru_utime);
 			jiffies_to_timeval(p->stime, &r.ru_stime);
+			r.ru_nvcsw = p->nvcsw;
+			r.ru_nivcsw = p->nivcsw;
 			r.ru_minflt = p->min_flt;
 			r.ru_majflt = p->maj_flt;
 			r.ru_nswap = p->nswap;
@@ -1316,6 +1318,8 @@
 		case RUSAGE_CHILDREN:
 			jiffies_to_timeval(p->cutime, &r.ru_utime);
 			jiffies_to_timeval(p->cstime, &r.ru_stime);
+			r.ru_nvcsw = p->cnvcsw;
+			r.ru_nivcsw = p->cnivcsw;
 			r.ru_minflt = p->cmin_flt;
 			r.ru_majflt = p->cmaj_flt;
 			r.ru_nswap = p->cnswap;
@@ -1323,6 +1327,8 @@
 		default:
 			jiffies_to_timeval(p->utime + p->cutime, &r.ru_utime);
 			jiffies_to_timeval(p->stime + p->cstime, &r.ru_stime);
+			r.ru_nvcsw = p->nvcsw + p->cnvcsw;
+			r.ru_nivcsw = p->nivcsw + p->cnivcsw;
 			r.ru_minflt = p->min_flt + p->cmin_flt;
 			r.ru_majflt = p->maj_flt + p->cmaj_flt;
 			r.ru_nswap = p->nswap + p->cnswap;

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2003-11-18  1:19 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-08-27  0:57 [PATCH] 2.6.0-test4 -- add context switch counters Peter Chubb
2003-08-27  1:18 ` Andrew Morton
2003-08-27  1:29   ` Mike Fedyk
2003-08-27  1:52     ` Peter Chubb
2003-08-27  7:16     ` William Lee Irwin III
2003-08-27  7:39       ` Peter Chubb
2003-08-27  7:51         ` William Lee Irwin III
2003-08-28 16:55           ` Mike Fedyk
2003-08-28 17:07             ` William Lee Irwin III
2003-08-28 17:09             ` William Lee Irwin III
2003-08-28 17:48               ` Mike Fedyk
2003-08-27  8:10         ` William Lee Irwin III
2003-08-27  1:50   ` Peter Chubb
2003-08-27  7:26     ` William Lee Irwin III
2003-11-18  1:18       ` William Lee Irwin III
2003-08-27 14:41   ` bert hubert
2003-08-27  6:54 ` William Lee Irwin III
2003-08-27 15:52   ` Larry McVoy
2003-08-27 16:01     ` William Lee Irwin III
2003-08-27 16:09       ` Larry McVoy
2003-08-27 17:57         ` William Lee Irwin III

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox