Module Name:    src
Committed By:   mrg
Date:           Wed Jan 13 01:57:17 UTC 2010

Modified Files:
        src/sys/kern: kern_cpu.c kern_runq.c
        src/sys/sys: cpu.h cpu_data.h

Log Message:
introduce a new function that returns a unique string for each cpu:

        char *cpu_name(struct cpu_info *);

and use it when setting up the runq event counters, avoiding an 8 byte
kmem(4) allocation for each cpu.  there are more places the cpuname is
used that can be converted to using this new interface, but that can
and will be done as future work.

as discussed with rmind.


To generate a diff of this commit:
cvs rdiff -u -r1.42 -r1.43 src/sys/kern/kern_cpu.c
cvs rdiff -u -r1.28 -r1.29 src/sys/kern/kern_runq.c
cvs rdiff -u -r1.30 -r1.31 src/sys/sys/cpu.h
cvs rdiff -u -r1.27 -r1.28 src/sys/sys/cpu_data.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/kern_cpu.c
diff -u src/sys/kern/kern_cpu.c:1.42 src/sys/kern/kern_cpu.c:1.43
--- src/sys/kern/kern_cpu.c:1.42	Sun Apr 19 14:11:37 2009
+++ src/sys/kern/kern_cpu.c	Wed Jan 13 01:57:17 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_cpu.c,v 1.42 2009/04/19 14:11:37 ad Exp $	*/
+/*	$NetBSD: kern_cpu.c,v 1.43 2010/01/13 01:57:17 mrg Exp $	*/
 
 /*-
  * Copyright (c) 2007, 2008, 2009 The NetBSD Foundation, Inc.
@@ -56,7 +56,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_cpu.c,v 1.42 2009/04/19 14:11:37 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_cpu.c,v 1.43 2010/01/13 01:57:17 mrg Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -111,6 +111,10 @@
 	TAILQ_INIT(&ci->ci_data.cpu_ld_locks);
 	__cpu_simple_lock_init(&ci->ci_data.cpu_ld_lock);
 
+	/* This is useful for eg, per-cpu evcnt */
+	snprintf(ci->ci_data.cpu_name, sizeof(ci->ci_data.cpu_name), "cpu%d",
+		 cpu_index(ci));
+
 	sched_cpuattach(ci);
 
 	error = create_idle_lwp(ci);

Index: src/sys/kern/kern_runq.c
diff -u src/sys/kern/kern_runq.c:1.28 src/sys/kern/kern_runq.c:1.29
--- src/sys/kern/kern_runq.c:1.28	Wed Dec 30 23:49:59 2009
+++ src/sys/kern/kern_runq.c	Wed Jan 13 01:57:17 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_runq.c,v 1.28 2009/12/30 23:49:59 rmind Exp $	*/
+/*	$NetBSD: kern_runq.c,v 1.29 2010/01/13 01:57:17 mrg Exp $	*/
 
 /*
  * Copyright (c) 2007, 2008 Mindaugas Rasiukevicius <rmind at NetBSD org>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_runq.c,v 1.28 2009/12/30 23:49:59 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_runq.c,v 1.29 2010/01/13 01:57:17 mrg Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -147,7 +147,6 @@
 	runqueue_t *ci_rq;
 	void *rq_ptr;
 	u_int i, size;
-	char *cpuname;
 
 	if (ci->ci_schedstate.spc_lwplock == NULL) {
 		ci->ci_schedstate.spc_lwplock =
@@ -180,17 +179,14 @@
 
 	ci->ci_schedstate.spc_sched_info = ci_rq;
 
-	cpuname = kmem_alloc(8, KM_SLEEP);
-	snprintf(cpuname, 8, "cpu%d", cpu_index(ci));
-
 	evcnt_attach_dynamic(&ci_rq->r_ev_pull, EVCNT_TYPE_MISC, NULL,
-	   cpuname, "runqueue pull");
+	   cpu_name(ci), "runqueue pull");
 	evcnt_attach_dynamic(&ci_rq->r_ev_push, EVCNT_TYPE_MISC, NULL,
-	   cpuname, "runqueue push");
+	   cpu_name(ci), "runqueue push");
 	evcnt_attach_dynamic(&ci_rq->r_ev_stay, EVCNT_TYPE_MISC, NULL,
-	   cpuname, "runqueue stay");
+	   cpu_name(ci), "runqueue stay");
 	evcnt_attach_dynamic(&ci_rq->r_ev_localize, EVCNT_TYPE_MISC, NULL,
-	   cpuname, "runqueue localize");
+	   cpu_name(ci), "runqueue localize");
 }
 
 /*

Index: src/sys/sys/cpu.h
diff -u src/sys/sys/cpu.h:1.30 src/sys/sys/cpu.h:1.31
--- src/sys/sys/cpu.h:1.30	Sun Apr 19 14:11:37 2009
+++ src/sys/sys/cpu.h	Wed Jan 13 01:57:17 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.h,v 1.30 2009/04/19 14:11:37 ad Exp $	*/
+/*	$NetBSD: cpu.h,v 1.31 2010/01/13 01:57:17 mrg Exp $	*/
 
 /*-
  * Copyright (c) 2007 YAMAMOTO Takashi,
@@ -93,6 +93,12 @@
 	return ci->ci_index;
 }
 
+static inline char *
+cpu_name(struct cpu_info *ci)
+{
+	return ci->ci_data.cpu_name;
+}
+
 #endif	/* !_LOCORE */
 
 /* flags for cpu_need_resched */

Index: src/sys/sys/cpu_data.h
diff -u src/sys/sys/cpu_data.h:1.27 src/sys/sys/cpu_data.h:1.28
--- src/sys/sys/cpu_data.h:1.27	Tue Jun  3 15:50:22 2008
+++ src/sys/sys/cpu_data.h	Wed Jan 13 01:57:17 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu_data.h,v 1.27 2008/06/03 15:50:22 ad Exp $	*/
+/*	$NetBSD: cpu_data.h,v 1.28 2010/01/13 01:57:17 mrg Exp $	*/
 
 /*-
  * Copyright (c) 2004, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -96,6 +96,7 @@
 	__cpu_simple_lock_t cpu_ld_lock;	/* lockdebug */
 	uint64_t	cpu_cc_freq;		/* cycle counter frequency */
 	int64_t		cpu_cc_skew;		/* counter skew vs cpu0 */
+	char		cpu_name[8];		/* eg, "cpu4" */
 };
 
 /* compat definitions */

Reply via email to