PERFORCE change 74466 for review
John Baldwin
jhb at FreeBSD.org
Mon Apr 4 12:08:59 PDT 2005
http://perforce.freebsd.org/chv.cgi?CH=74466
Change 74466 by jhb at jhb_slimer on 2005/04/04 19:08:11
Use PCPU_LAZY_INC() more to try to reduce atomic ops.
Affected files ...
.. //depot/projects/smpng/sys/alpha/alpha/interrupt.c#33 edit
.. //depot/projects/smpng/sys/alpha/alpha/trap.c#57 edit
.. //depot/projects/smpng/sys/amd64/amd64/intr_machdep.c#10 edit
.. //depot/projects/smpng/sys/amd64/amd64/trap.c#23 edit
.. //depot/projects/smpng/sys/amd64/ia32/ia32_syscall.c#8 edit
.. //depot/projects/smpng/sys/arm/arm/trap.c#9 edit
.. //depot/projects/smpng/sys/arm/arm/undefined.c#6 edit
.. //depot/projects/smpng/sys/i386/i386/intr_machdep.c#13 edit
.. //depot/projects/smpng/sys/i386/i386/trap.c#74 edit
.. //depot/projects/smpng/sys/ia64/ia32/ia32_trap.c#3 edit
.. //depot/projects/smpng/sys/ia64/ia64/interrupt.c#28 edit
.. //depot/projects/smpng/sys/ia64/ia64/trap.c#72 edit
.. //depot/projects/smpng/sys/kern/kern_intr.c#66 edit
.. //depot/projects/smpng/sys/notes#34 edit
.. //depot/projects/smpng/sys/powerpc/powerpc/trap.c#43 edit
.. //depot/projects/smpng/sys/sparc64/sparc64/trap.c#60 edit
Differences ...
==== //depot/projects/smpng/sys/alpha/alpha/interrupt.c#33 (text+ko) ====
@@ -139,7 +139,7 @@
break;
case ALPHA_INTR_DEVICE: /* I/O device interrupt */
- cnt.v_intr++;
+ PCPU_LAZY_INC(cnt.v_intr);
if (platform.iointr)
(*platform.iointr)(framep, a1);
break;
@@ -462,7 +462,7 @@
alpha_clock_interrupt(struct trapframe *framep)
{
- cnt.v_intr++;
+ PCPU_LAZY_INC(cnt.v_intr);
#ifdef EVCNT_COUNTERS
clock_intr_evcnt.ev_count++;
#else
==== //depot/projects/smpng/sys/alpha/alpha/trap.c#57 (text+ko) ====
@@ -295,7 +295,7 @@
* Giant hasn't been acquired yet.
*/
- cnt.v_trap++;
+ PCPU_LAZY_INC(cnt.v_trap);
ucode = 0;
user = (framep->tf_regs[FRAME_PS] & ALPHA_PSL_USERMODE) != 0;
CTR5(KTR_TRAP, "%s trap: pid %d, (%lx, %lx, %lx)",
@@ -655,7 +655,7 @@
panic("syscall");
#endif
- cnt.v_syscall++;
+ PCPU_LAZY_INC(cnt.v_syscall);
td->td_frame = framep;
opc = framep->tf_regs[FRAME_PC] - 4;
sticks = td->td_sticks;
==== //depot/projects/smpng/sys/amd64/amd64/intr_machdep.c#10 (text+ko) ====
@@ -167,7 +167,7 @@
* processed too.
*/
(*isrc->is_count)++;
- cnt.v_intr++;
+ PCPU_LAZY_INC(cnt.v_intr);
it = isrc->is_ithread;
if (it == NULL)
==== //depot/projects/smpng/sys/amd64/amd64/trap.c#23 (text+ko) ====
@@ -162,7 +162,7 @@
u_int sticks = 0;
int i = 0, ucode = 0, type, code;
- atomic_add_int(&cnt.v_trap, 1);
+ PCPU_LAZY_INC(cnt.v_trap);
type = frame.tf_trapno;
#ifdef KDB
==== //depot/projects/smpng/sys/amd64/ia32/ia32_syscall.c#8 (text+ko) ====
@@ -106,7 +106,7 @@
* note: PCPU_LAZY_INC() can only be used if we can afford
* occassional inaccuracy in the count.
*/
- cnt.v_syscall++;
+ PCPU_LAZY_INC(cnt.v_syscall);
sticks = td->td_sticks;
td->td_frame = &frame;
==== //depot/projects/smpng/sys/arm/arm/trap.c#9 (text+ko) ====
@@ -251,7 +251,7 @@
td = curthread;
p = td->td_proc;
- atomic_add_int(&cnt.v_trap, 1);
+ PCPU_LAZY_INC(cnt.v_trap);
/* Data abort came from user mode? */
user = TRAP_USERMODE(tf);
@@ -716,7 +716,7 @@
td = curthread;
p = td->td_proc;
- atomic_add_int(&cnt.v_trap, 1);
+ PCPU_LAZY_INC(cnt.v_trap);
if (TRAP_USERMODE(tf)) {
td->td_frame = tf;
@@ -867,7 +867,7 @@
int locked = 0;
u_int sticks = 0;
- atomic_add_int(&cnt.v_syscall, 1);
+ PCPU_LAZY_INC(cnt.v_syscall);
sticks = td->td_sticks;
if (td->td_ucred != td->td_proc->p_ucred)
cred_update_thread(td);
==== //depot/projects/smpng/sys/arm/arm/undefined.c#6 (text+ko) ====
@@ -185,7 +185,7 @@
enable_interrupts(I32_bit);
frame->tf_pc -= INSN_SIZE;
- atomic_add_int(&cnt.v_trap, 1);
+ PCPU_LAZY_INC(cnt.v_trap);
fault_pc = frame->tf_pc;
==== //depot/projects/smpng/sys/i386/i386/intr_machdep.c#13 (text+ko) ====
@@ -167,7 +167,7 @@
* processed too.
*/
(*isrc->is_count)++;
- cnt.v_intr++;
+ PCPU_LAZY_INC(cnt.v_intr);
it = isrc->is_ithread;
if (it == NULL)
==== //depot/projects/smpng/sys/i386/i386/trap.c#74 (text+ko) ====
@@ -180,7 +180,7 @@
static int lastalert = 0;
#endif
- atomic_add_int(&cnt.v_trap, 1);
+ PCPU_LAZY_INC(cnt.v_trap);
type = frame.tf_trapno;
#ifdef KDB
==== //depot/projects/smpng/sys/ia64/ia32/ia32_trap.c#3 (text+ko) ====
@@ -62,7 +62,7 @@
u_int code;
int error, i, narg;
- atomic_add_int(&cnt.v_syscall, 1);
+ PCPU_LAZY_INC(cnt.v_syscall);
td = curthread;
params = (caddr_t)(tf->tf_special.sp & ((1L<<32)-1)) +
@@ -205,7 +205,7 @@
KASSERT(TRAPF_USERMODE(tf), ("%s: In kernel mode???", __func__));
ia64_set_fpsr(IA64_FPSR_DEFAULT);
- atomic_add_int(&cnt.v_trap, 1);
+ PCPU_LAZY_INC(cnt.v_trap);
td = curthread;
td->td_frame = tf;
==== //depot/projects/smpng/sys/ia64/ia64/interrupt.c#28 (text+ko) ====
@@ -150,7 +150,7 @@
if (vector == CLOCK_VECTOR) {/* clock interrupt */
/* CTR0(KTR_INTR, "clock interrupt"); */
- cnt.v_intr++;
+ PCPU_LAZY_INC(cnt.v_intr);
#ifdef EVCNT_COUNTERS
clock_intr_evcnt.ev_count++;
#else
==== //depot/projects/smpng/sys/ia64/ia64/trap.c#72 (text+ko) ====
@@ -332,7 +332,7 @@
user = TRAPF_USERMODE(tf) ? 1 : 0;
- atomic_add_int(&cnt.v_trap, 1);
+ PCPU_LAZY_INC(cnt.v_trap);
td = curthread;
p = td->td_proc;
@@ -896,7 +896,7 @@
code = tf->tf_scratch.gr15;
args = &tf->tf_scratch.gr16;
- atomic_add_int(&cnt.v_syscall, 1);
+ PCPU_LAZY_INC(cnt.v_syscall);
td = curthread;
td->td_frame = tf;
==== //depot/projects/smpng/sys/kern/kern_intr.c#66 (text+ko) ====
@@ -457,7 +457,7 @@
struct ithd *it = ih->ih_ithread;
int error;
- atomic_add_int(&cnt.v_intr, 1); /* one more global interrupt */
+ PCPU_LAZY_INC(cnt.v_intr);
CTR3(KTR_INTR, "swi_sched pid %d(%s) need=%d",
it->it_td->td_proc->p_pid, it->it_td->td_proc->p_comm, it->it_need);
==== //depot/projects/smpng/sys/notes#34 (text+ko) ====
@@ -80,6 +80,13 @@
spinlock_*() changes happen.
- KTR change: include __func__ along with __FILE__ and __LINE__ and display
it after cpu number by default
+- Cheapen global stats counters via PCPU_LAZY_INC
+ + cnt.v_trap
+ + cnt.v_syscall
+ + cnt.v_intr
+ - not implemented at all on arm, powerpc, or sparc64
+ + cnt.v_soft
+ - fork counts?
Active child branches:
- jhb_intr - intr_vector stuff
==== //depot/projects/smpng/sys/powerpc/powerpc/trap.c#43 (text+ko) ====
@@ -147,7 +147,7 @@
int sig, type, user;
u_int sticks, ucode;
- atomic_add_int(&cnt.v_trap, 1);
+ PCPU_LAZY_INC(cnt.v_trap);
td = PCPU_GET(curthread);
p = td->td_proc;
@@ -338,7 +338,7 @@
td = PCPU_GET(curthread);
p = td->td_proc;
- atomic_add_int(&cnt.v_syscall, 1);
+ PCPU_LAZY_INC(cnt.v_syscall);
if (p->p_flag & P_SA)
thread_user_enter(td);
==== //depot/projects/smpng/sys/sparc64/sparc64/trap.c#60 (text+ko) ====
@@ -240,7 +240,7 @@
trap_msg[tf->tf_type & ~T_KERNEL],
(TRAPF_USERMODE(tf) ? "user" : "kernel"), rdpr(pil));
- atomic_add_int(&cnt.v_trap, 1);
+ PCPU_LAZY_INC(cnt.v_trap);
if ((tf->tf_tstate & TSTATE_PRIV) == 0) {
KASSERT(td != NULL, ("trap: curthread NULL"));
@@ -510,7 +510,7 @@
p = td->td_proc;
- atomic_add_int(&cnt.v_syscall, 1);
+ PCPU_LAZY_INC(cnt.v_syscall);
narg = 0;
error = 0;
More information about the p4-projects
mailing list