Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Nov 2010 19:36:26 GMT
From:      Edward Tomasz Napierala <trasz@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 185409 for review
Message-ID:  <201011051936.oA5JaQuk003489@skunkworks.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@185409?ac=10

Change 185409 by trasz@trasz_victim on 2010/11/05 19:36:20

	Add cpu percentage accounting.

Affected files ...

.. //depot/projects/soc2009/trasz_limits/sys/kern/kern_container.c#31 edit
.. //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#96 edit
.. //depot/projects/soc2009/trasz_limits/sys/kern/kern_resource.c#50 edit
.. //depot/projects/soc2009/trasz_limits/sys/sys/container.h#14 edit

Differences ...

==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_container.c#31 (text+ko) ====

@@ -93,6 +93,7 @@
 	case RUSAGE_NPROC:
 	case RUSAGE_NTHR:
 	case RUSAGE_WALLCLOCK:
+	case RUSAGE_PCTCPU:
 		return (0);
 	default:
 		return (1);
@@ -106,6 +107,7 @@
 	switch (resource) {
 	case RUSAGE_RSS:
 	case RUSAGE_WALLCLOCK:
+	case RUSAGE_PCTCPU:
 		return (0);
 	default:
 		return (1);
@@ -578,6 +580,7 @@
 	/*
 	 * XXX: Free this some other way.
 	 */
+	rusage_set(p, RUSAGE_PCTCPU, 0);
 	rusage_set(p, RUSAGE_FSIZE, 0);
 	rusage_set(p, RUSAGE_NPTS, 0);
 	rusage_set(p, RUSAGE_NTHR, 0);

==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_hrl.c#96 (text+ko) ====

@@ -112,6 +112,7 @@
 	{ "nshm", RUSAGE_NSHM },
 	{ "shmsize", RUSAGE_SHMSIZE },
 	{ "wallclock", RUSAGE_WALLCLOCK },
+	{ "pctcpu", RUSAGE_PCTCPU },
 	{ NULL, -1 }};
 
 static struct dict actionnames[] = {

==== //depot/projects/soc2009/trasz_limits/sys/kern/kern_resource.c#50 (text+ko) ====

@@ -626,6 +626,7 @@
 static void
 rusage_cpu_task_fn(void *arg, int pending)
 {
+	int pctcpu;
 	struct thread *td;
 	struct proc *p;
 	struct timeval wallclock;
@@ -633,14 +634,20 @@
 	sx_slock(&allproc_lock);
 	FOREACH_PROC_IN_SYSTEM(p) {
 		PROC_SLOCK(p);
+		pctcpu = 0;
 		FOREACH_THREAD_IN_PROC(p, td) {
 			ruxagg(p, td);
+			thread_lock(td);
+			pctcpu += sched_pctcpu(td);
+			thread_unlock(td);
 		}
 		PROC_SUNLOCK(p);
 		rusage_set(p, RUSAGE_CPU, cputick2usec(p->p_rux.rux_runtime));
 		microuptime(&wallclock);
 		timevalsub(&wallclock, &p->p_stats->p_start);
 		rusage_set(p, RUSAGE_WALLCLOCK, wallclock.tv_sec * 1000000 + wallclock.tv_usec);
+		pctcpu = ((pctcpu * 10000 + FSCALE / 2) >> FSHIFT) / 100;
+		rusage_set(p, RUSAGE_PCTCPU, pctcpu);
 	}
 	sx_sunlock(&allproc_lock);
 

==== //depot/projects/soc2009/trasz_limits/sys/sys/container.h#14 (text+ko) ====

@@ -76,7 +76,8 @@
 #define	RUSAGE_NSHM		21
 #define	RUSAGE_SHMSIZE		22
 #define	RUSAGE_WALLCLOCK	23
-#define	RUSAGE_MAX		RUSAGE_WALLCLOCK
+#define	RUSAGE_PCTCPU		24
+#define	RUSAGE_MAX		RUSAGE_PCTCPU
 
 /*
  * 'container' defines resource consumption for a particular



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201011051936.oA5JaQuk003489>