Module Name: src
Committed By: rmind
Date: Fri May 13 22:16:44 UTC 2011
Modified Files:
src/sys/kern: kern_cpu.c kern_mutex_obj.c kern_rwlock_obj.c
kern_synch.c subr_percpu.c subr_xcall.c sysv_sem.c vfs_vnode.c
Log Message:
Sprinkle __cacheline_aligned and __read_mostly.
To generate a diff of this commit:
cvs rdiff -u -r1.45 -r1.46 src/sys/kern/kern_cpu.c
cvs rdiff -u -r1.2 -r1.3 src/sys/kern/kern_mutex_obj.c \
src/sys/kern/kern_rwlock_obj.c
cvs rdiff -u -r1.288 -r1.289 src/sys/kern/kern_synch.c
cvs rdiff -u -r1.12 -r1.13 src/sys/kern/subr_percpu.c \
src/sys/kern/subr_xcall.c
cvs rdiff -u -r1.86 -r1.87 src/sys/kern/sysv_sem.c
cvs rdiff -u -r1.5 -r1.6 src/sys/kern/vfs_vnode.c
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.45 src/sys/kern/kern_cpu.c:1.46
--- src/sys/kern/kern_cpu.c:1.45 Wed Dec 22 02:43:23 2010
+++ src/sys/kern/kern_cpu.c Fri May 13 22:16:43 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_cpu.c,v 1.45 2010/12/22 02:43:23 matt Exp $ */
+/* $NetBSD: kern_cpu.c,v 1.46 2011/05/13 22:16:43 rmind Exp $ */
/*-
* Copyright (c) 2007, 2008, 2009, 2010 The NetBSD Foundation, Inc.
@@ -56,7 +56,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_cpu.c,v 1.45 2010/12/22 02:43:23 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_cpu.c,v 1.46 2011/05/13 22:16:43 rmind Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -103,13 +103,14 @@
D_OTHER | D_MPSAFE
};
-kmutex_t cpu_lock;
-int ncpu;
-int ncpuonline;
-bool mp_online;
-struct cpuqueue cpu_queue = CIRCLEQ_HEAD_INITIALIZER(cpu_queue);
+kmutex_t cpu_lock __cacheline_aligned;
+int ncpu __read_mostly;
+int ncpuonline __read_mostly;
+bool mp_online __read_mostly;
+struct cpuqueue cpu_queue __cacheline_aligned
+ = CIRCLEQ_HEAD_INITIALIZER(cpu_queue);
-static struct cpu_info **cpu_infos;
+static struct cpu_info **cpu_infos __read_mostly;
int
mi_cpu_attach(struct cpu_info *ci)
Index: src/sys/kern/kern_mutex_obj.c
diff -u src/sys/kern/kern_mutex_obj.c:1.2 src/sys/kern/kern_mutex_obj.c:1.3
--- src/sys/kern/kern_mutex_obj.c:1.2 Wed Mar 31 19:59:39 2010
+++ src/sys/kern/kern_mutex_obj.c Fri May 13 22:16:43 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_mutex_obj.c,v 1.2 2010/03/31 19:59:39 ad Exp $ */
+/* $NetBSD: kern_mutex_obj.c,v 1.3 2011/05/13 22:16:43 rmind Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_mutex_obj.c,v 1.2 2010/03/31 19:59:39 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_mutex_obj.c,v 1.3 2011/05/13 22:16:43 rmind Exp $");
#include <sys/param.h>
#include <sys/atomic.h>
@@ -47,7 +47,7 @@
static int mutex_obj_ctor(void *, void *, int);
-static pool_cache_t mutex_obj_cache;
+static pool_cache_t mutex_obj_cache __read_mostly;
/*
* mutex_obj_init:
Index: src/sys/kern/kern_rwlock_obj.c
diff -u src/sys/kern/kern_rwlock_obj.c:1.2 src/sys/kern/kern_rwlock_obj.c:1.3
--- src/sys/kern/kern_rwlock_obj.c:1.2 Wed Mar 31 19:59:39 2010
+++ src/sys/kern/kern_rwlock_obj.c Fri May 13 22:16:43 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_rwlock_obj.c,v 1.2 2010/03/31 19:59:39 ad Exp $ */
+/* $NetBSD: kern_rwlock_obj.c,v 1.3 2011/05/13 22:16:43 rmind Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_rwlock_obj.c,v 1.2 2010/03/31 19:59:39 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_rwlock_obj.c,v 1.3 2011/05/13 22:16:43 rmind Exp $");
#include <sys/param.h>
#include <sys/atomic.h>
@@ -47,7 +47,7 @@
static int rw_obj_ctor(void *, void *, int);
-static pool_cache_t rw_obj_cache;
+static pool_cache_t rw_obj_cache __read_mostly;
/*
* rw_obj_init:
Index: src/sys/kern/kern_synch.c
diff -u src/sys/kern/kern_synch.c:1.288 src/sys/kern/kern_synch.c:1.289
--- src/sys/kern/kern_synch.c:1.288 Mon May 2 00:29:53 2011
+++ src/sys/kern/kern_synch.c Fri May 13 22:16:43 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_synch.c,v 1.288 2011/05/02 00:29:53 rmind Exp $ */
+/* $NetBSD: kern_synch.c,v 1.289 2011/05/13 22:16:43 rmind Exp $ */
/*-
* Copyright (c) 1999, 2000, 2004, 2006, 2007, 2008, 2009
@@ -69,7 +69,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_synch.c,v 1.288 2011/05/02 00:29:53 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_synch.c,v 1.289 2011/05/13 22:16:43 rmind Exp $");
#include "opt_kstack.h"
#include "opt_perfctrs.h"
@@ -128,13 +128,15 @@
syncobj_noowner,
};
-unsigned sched_pstats_ticks;
-kcondvar_t lbolt; /* once a second sleep address */
+/* "Lightning bolt": once a second sleep address. */
+kcondvar_t lbolt __cacheline_aligned;
-/* Preemption event counters */
-static struct evcnt kpreempt_ev_crit;
-static struct evcnt kpreempt_ev_klock;
-static struct evcnt kpreempt_ev_immed;
+u_int sched_pstats_ticks __cacheline_aligned;
+
+/* Preemption event counters. */
+static struct evcnt kpreempt_ev_crit __cacheline_aligned;
+static struct evcnt kpreempt_ev_klock __cacheline_aligned;
+static struct evcnt kpreempt_ev_immed __cacheline_aligned;
/*
* During autoconfiguration or after a panic, a sleep will simply lower the
Index: src/sys/kern/subr_percpu.c
diff -u src/sys/kern/subr_percpu.c:1.12 src/sys/kern/subr_percpu.c:1.13
--- src/sys/kern/subr_percpu.c:1.12 Tue Apr 19 07:12:59 2011
+++ src/sys/kern/subr_percpu.c Fri May 13 22:16:44 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: subr_percpu.c,v 1.12 2011/04/19 07:12:59 martin Exp $ */
+/* $NetBSD: subr_percpu.c,v 1.13 2011/05/13 22:16:44 rmind Exp $ */
/*-
* Copyright (c)2007,2008 YAMAMOTO Takashi,
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_percpu.c,v 1.12 2011/04/19 07:12:59 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_percpu.c,v 1.13 2011/05/13 22:16:44 rmind Exp $");
#include <sys/param.h>
#include <sys/cpu.h>
@@ -58,10 +58,10 @@
#define percpu_decrypt(pc) (pc)
#endif /* defined(DIAGNOSTIC) */
-static krwlock_t percpu_swap_lock;
-static kmutex_t percpu_allocation_lock;
-static vmem_t *percpu_offset_arena;
-static unsigned int percpu_nextoff = PERCPU_QUANTUM_SIZE;
+static krwlock_t percpu_swap_lock __cacheline_aligned;
+static kmutex_t percpu_allocation_lock __cacheline_aligned;
+static vmem_t * percpu_offset_arena __cacheline_aligned;
+static unsigned int percpu_nextoff __cacheline_aligned;
static percpu_cpu_t *
cpu_percpu(struct cpu_info *ci)
@@ -217,6 +217,7 @@
ASSERT_SLEEPABLE();
rw_init(&percpu_swap_lock);
mutex_init(&percpu_allocation_lock, MUTEX_DEFAULT, IPL_NONE);
+ percpu_nextoff = PERCPU_QUANTUM_SIZE;
percpu_offset_arena = vmem_create("percpu", 0, 0, PERCPU_QUANTUM_SIZE,
percpu_backend_alloc, NULL, NULL, PERCPU_QCACHE_MAX, VM_SLEEP,
Index: src/sys/kern/subr_xcall.c
diff -u src/sys/kern/subr_xcall.c:1.12 src/sys/kern/subr_xcall.c:1.13
--- src/sys/kern/subr_xcall.c:1.12 Tue Jun 22 18:29:01 2010
+++ src/sys/kern/subr_xcall.c Fri May 13 22:16:44 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: subr_xcall.c,v 1.12 2010/06/22 18:29:01 rmind Exp $ */
+/* $NetBSD: subr_xcall.c,v 1.13 2011/05/13 22:16:44 rmind Exp $ */
/*-
* Copyright (c) 2007-2010 The NetBSD Foundation, Inc.
@@ -74,7 +74,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_xcall.c,v 1.12 2010/06/22 18:29:01 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_xcall.c,v 1.13 2011/05/13 22:16:44 rmind Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -100,16 +100,16 @@
#define XC_PRI_BIT (1ULL << 63)
/* Low priority xcall structures. */
-static xc_state_t xc_low_pri;
-static uint64_t xc_tailp;
+static xc_state_t xc_low_pri __cacheline_aligned;
+static uint64_t xc_tailp __cacheline_aligned;
/* High priority xcall structures. */
-static xc_state_t xc_high_pri;
-static void * xc_sih;
+static xc_state_t xc_high_pri __cacheline_aligned;
+static void * xc_sih __cacheline_aligned;
/* Event counters. */
-static struct evcnt xc_unicast_ev;
-static struct evcnt xc_broadcast_ev;
+static struct evcnt xc_unicast_ev __cacheline_aligned;
+static struct evcnt xc_broadcast_ev __cacheline_aligned;
static void xc_init(void);
static void xc_thread(void *);
Index: src/sys/kern/sysv_sem.c
diff -u src/sys/kern/sysv_sem.c:1.86 src/sys/kern/sysv_sem.c:1.87
--- src/sys/kern/sysv_sem.c:1.86 Mon Oct 5 23:46:02 2009
+++ src/sys/kern/sysv_sem.c Fri May 13 22:16:44 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: sysv_sem.c,v 1.86 2009/10/05 23:46:02 rmind Exp $ */
+/* $NetBSD: sysv_sem.c,v 1.87 2011/05/13 22:16:44 rmind Exp $ */
/*-
* Copyright (c) 1999, 2007 The NetBSD Foundation, Inc.
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysv_sem.c,v 1.86 2009/10/05 23:46:02 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysv_sem.c,v 1.87 2011/05/13 22:16:44 rmind Exp $");
#define SYSVSEM
@@ -59,18 +59,22 @@
* 3rd: Conditional variables
* 4th: Undo structures
*/
-struct semid_ds *sema;
-static struct __sem *sem;
-static kcondvar_t *semcv;
-static int *semu;
-
-static kmutex_t semlock;
-static struct sem_undo *semu_list; /* list of active undo structures */
-static u_int semtot = 0; /* total number of semaphores */
-
-static u_int sem_waiters = 0; /* total number of semop waiters */
-static bool sem_realloc_state;
-static kcondvar_t sem_realloc_cv;
+struct semid_ds * sema __read_mostly;
+static struct __sem * sem __read_mostly;
+static kcondvar_t * semcv __read_mostly;
+static int * semu __read_mostly;
+
+static kmutex_t semlock __cacheline_aligned;
+static bool sem_realloc_state __read_mostly;
+static kcondvar_t sem_realloc_cv;
+
+/*
+ * List of active undo structures, total number of semaphores,
+ * and total number of semop waiters.
+ */
+static struct sem_undo *semu_list __read_mostly;
+static u_int semtot __cacheline_aligned;
+static u_int sem_waiters __cacheline_aligned;
/* Macro to find a particular sem_undo vector */
#define SEMU(s, ix) ((struct sem_undo *)(((long)s) + ix * seminfo.semusz))
@@ -94,6 +98,8 @@
mutex_init(&semlock, MUTEX_DEFAULT, IPL_NONE);
cv_init(&sem_realloc_cv, "semrealc");
sem_realloc_state = false;
+ semtot = 0;
+ sem_waiters = 0;
/* Allocate the wired memory for our structures */
sz = ALIGN(seminfo.semmni * sizeof(struct semid_ds)) +
Index: src/sys/kern/vfs_vnode.c
diff -u src/sys/kern/vfs_vnode.c:1.5 src/sys/kern/vfs_vnode.c:1.6
--- src/sys/kern/vfs_vnode.c:1.5 Mon Apr 4 02:46:57 2011
+++ src/sys/kern/vfs_vnode.c Fri May 13 22:16:44 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_vnode.c,v 1.5 2011/04/04 02:46:57 rmind Exp $ */
+/* $NetBSD: vfs_vnode.c,v 1.6 2011/05/13 22:16:44 rmind Exp $ */
/*-
* Copyright (c) 1997-2011 The NetBSD Foundation, Inc.
@@ -91,7 +91,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.5 2011/04/04 02:46:57 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_vnode.c,v 1.6 2011/05/13 22:16:44 rmind Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -115,20 +115,20 @@
#include <uvm/uvm.h>
#include <uvm/uvm_readahead.h>
-u_int numvnodes;
+u_int numvnodes __cacheline_aligned;
-static pool_cache_t vnode_cache;
-static kmutex_t vnode_free_list_lock;
+static pool_cache_t vnode_cache __read_mostly;
+static kmutex_t vnode_free_list_lock __cacheline_aligned;
-static vnodelst_t vnode_free_list;
-static vnodelst_t vnode_hold_list;
-static vnodelst_t vrele_list;
-
-static kmutex_t vrele_lock;
-static kcondvar_t vrele_cv;
-static lwp_t * vrele_lwp;
-static int vrele_pending;
-static int vrele_gen;
+static vnodelst_t vnode_free_list __cacheline_aligned;
+static vnodelst_t vnode_hold_list __cacheline_aligned;
+static vnodelst_t vrele_list __cacheline_aligned;
+
+static kmutex_t vrele_lock __cacheline_aligned;
+static kcondvar_t vrele_cv __cacheline_aligned;
+static lwp_t * vrele_lwp __cacheline_aligned;
+static int vrele_pending __cacheline_aligned;
+static int vrele_gen __cacheline_aligned;
static vnode_t * getcleanvnode(void);
static void vrele_thread(void *);