Date: Thu, 5 Sep 2002 16:12:53 -0400 (EDT) From: Andrew Gallatin <gallatin@cs.duke.edu> To: John Baldwin <jhb@FreeBSD.org> Cc: freebsd-alpha@FreeBSD.org, ticso@cicely.de Subject: Re: alpha performance on -current Message-ID: <15735.47813.266130.216534@grasshopper.cs.duke.edu> In-Reply-To: <XFMail.20020905122734.jhb@FreeBSD.org> References: <15735.31557.85006.684144@grasshopper.cs.duke.edu> <XFMail.20020905122734.jhb@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
OK, if the appended is what you had in mind, then I'm a much happier
camper.
This patch:
8314.06 real 7025.32 user 956.14 sys
Stock kernel:
8699.25 real 6985.64 user 1379.72 sys
A 30% reduction in system time is pretty good.
Cheers,
Drew
Index: include/atomic.h
===================================================================
RCS file: /home/ncvs/src/sys/alpha/include/atomic.h,v
retrieving revision 1.14
diff -u -r1.14 atomic.h
--- include/atomic.h 17 May 2002 05:45:39 -0000 1.14
+++ include/atomic.h 5 Sep 2002 17:03:21 -0000
@@ -55,7 +55,6 @@
"bis %0, %3, %0\n\t" /* calculate new value */
"stl_c %0, %1\n\t" /* attempt to store */
"beq %0, 2f\n\t" /* spin if failed */
- "mb\n\t" /* drain to memory */
".section .text3,\"ax\"\n" /* improve branch prediction */
"2:\tbr 1b\n" /* try again */
".previous\n"
@@ -73,7 +72,6 @@
"bic %0, %3, %0\n\t" /* calculate new value */
"stl_c %0, %1\n\t" /* attempt to store */
"beq %0, 2f\n\t" /* spin if failed */
- "mb\n\t" /* drain to memory */
".section .text3,\"ax\"\n" /* improve branch prediction */
"2:\tbr 1b\n" /* try again */
".previous\n"
@@ -91,7 +89,6 @@
"addl %0, %3, %0\n\t" /* calculate new value */
"stl_c %0, %1\n\t" /* attempt to store */
"beq %0, 2f\n\t" /* spin if failed */
- "mb\n\t" /* drain to memory */
".section .text3,\"ax\"\n" /* improve branch prediction */
"2:\tbr 1b\n" /* try again */
".previous\n"
@@ -109,7 +106,6 @@
"subl %0, %3, %0\n\t" /* calculate new value */
"stl_c %0, %1\n\t" /* attempt to store */
"beq %0, 2f\n\t" /* spin if failed */
- "mb\n\t" /* drain to memory */
".section .text3,\"ax\"\n" /* improve branch prediction */
"2:\tbr 1b\n" /* try again */
".previous\n"
@@ -130,7 +126,7 @@
"beq %1,2f\n\t" /* if the store failed, spin */
"br 3f\n" /* it worked, exit */
"2:\tbr 1b\n" /* *addr not updated, loop */
- "3:\tmb\n" /* it worked */
+ "3:\n" /* it worked */
: "=&r"(result), "=&r"(temp), "=m" (*addr)
: "m"(*addr)
: "memory");
@@ -147,7 +143,6 @@
"bis %0, %3, %0\n\t" /* calculate new value */
"stq_c %0, %1\n\t" /* attempt to store */
"beq %0, 2f\n\t" /* spin if failed */
- "mb\n\t" /* drain to memory */
".section .text3,\"ax\"\n" /* improve branch prediction */
"2:\tbr 1b\n" /* try again */
".previous\n"
@@ -165,7 +160,6 @@
"bic %0, %3, %0\n\t" /* calculate new value */
"stq_c %0, %1\n\t" /* attempt to store */
"beq %0, 2f\n\t" /* spin if failed */
- "mb\n\t" /* drain to memory */
".section .text3,\"ax\"\n" /* improve branch prediction */
"2:\tbr 1b\n" /* try again */
".previous\n"
@@ -183,7 +177,6 @@
"addq %0, %3, %0\n\t" /* calculate new value */
"stq_c %0, %1\n\t" /* attempt to store */
"beq %0, 2f\n\t" /* spin if failed */
- "mb\n\t" /* drain to memory */
".section .text3,\"ax\"\n" /* improve branch prediction */
"2:\tbr 1b\n" /* try again */
".previous\n"
@@ -201,7 +194,6 @@
"subq %0, %3, %0\n\t" /* calculate new value */
"stq_c %0, %1\n\t" /* attempt to store */
"beq %0, 2f\n\t" /* spin if failed */
- "mb\n\t" /* drain to memory */
".section .text3,\"ax\"\n" /* improve branch prediction */
"2:\tbr 1b\n" /* try again */
".previous\n"
@@ -222,7 +214,7 @@
"beq %1,2f\n\t" /* if the store failed, spin */
"br 3f\n" /* it worked, exit */
"2:\tbr 1b\n" /* *addr not updated, loop */
- "3:\tmb\n" /* it worked */
+ "3:\n" /* it worked */
: "=&r"(result), "=&r"(temp), "=m" (*addr)
: "m"(*addr)
: "memory");
@@ -257,7 +249,7 @@
atomic_##NAME##_acq_##WIDTH(volatile u_int##WIDTH##_t *p, u_int##WIDTH##_t v)\
{ \
atomic_##NAME##_##WIDTH(p, v); \
- /* alpha_mb(); */ \
+ alpha_mb(); \
} \
\
static __inline void \
@@ -271,7 +263,7 @@
atomic_##NAME##_acq_##TYPE(volatile u_int##WIDTH##_t *p, u_int##WIDTH##_t v)\
{ \
atomic_##NAME##_##WIDTH(p, v); \
- /* alpha_mb(); */ \
+ alpha_mb(); \
} \
\
static __inline void \
@@ -361,7 +353,6 @@
"mov %3, %0\n\t" /* value to store */
"stl_c %0, %1\n\t" /* attempt to store */
"beq %0, 3f\n\t" /* if it failed, spin */
- "mb\n\t" /* drain to memory */
"2:\n" /* done */
".section .text3,\"ax\"\n" /* improve branch prediction */
"3:\tbr 1b\n" /* try again */
@@ -390,7 +381,6 @@
"mov %3, %0\n\t" /* value to store */
"stq_c %0, %1\n\t" /* attempt to store */
"beq %0, 3f\n\t" /* if it failed, spin */
- "mb\n\t" /* drain to memory */
"2:\n" /* done */
".section .text3,\"ax\"\n" /* improve branch prediction */
"3:\tbr 1b\n" /* try again */
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-alpha" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?15735.47813.266130.216534>
