about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSiddhesh Poyarekar <siddhesh@redhat.com>2014-02-24 08:08:14 +0530
committerSiddhesh Poyarekar <siddhesh@redhat.com>2014-02-24 08:08:14 +0530
commit8068df4eb196130c20cf62f912913b9c80605fc7 (patch)
tree069f193bc67e38c3dddcf66c2710d169cac32596
parent21e0d3b8076ad3870cf82e91c48f0ecfb17f0c83 (diff)
downloadglibc-siddhesh/sem_timedwait.tar.gz
glibc-siddhesh/sem_timedwait.tar.xz
glibc-siddhesh/sem_timedwait.zip
benchtests: New benchmark for sem_timedwait siddhesh/sem_timedwait
Measure performance of the sem_timedwait function for a max wait of
1us in the contended and uncontended case.
-rw-r--r--benchtests/Makefile43
-rw-r--r--benchtests/sem_timedwait_test-inputs10
-rw-r--r--benchtests/src-sem_timedwait_test.c18
3 files changed, 49 insertions, 22 deletions
diff --git a/benchtests/Makefile b/benchtests/Makefile
index 792f61fdf9..1f38ff1afc 100644
--- a/benchtests/Makefile
+++ b/benchtests/Makefile
@@ -20,9 +20,13 @@
 # Add benchmark functions in alphabetical order.
 
 subdir := benchtests
-bench := acos acosh asin asinh atan atanh cos cosh exp exp2 log log2 modf pow \
+math-bench := acos acosh asin asinh atan atanh cos cosh exp exp2 log log2 modf pow \
 	 rint sin sincos sinh sqrt tan tanh
 
+pthread-bench := sem_timedwait_test
+
+bench := $(math-bench) $(pthread-bench)
+
 # String function benchmarks.
 string-bench := bcopy bzero memccpy memchr memcmp memcpy memmem memmove \
 		mempcpy memset rawmemchr stpcpy stpncpy strcasecmp strcasestr \
@@ -35,27 +39,6 @@ stdlib-bench := strtod
 
 benchset := $(string-bench-all) $(stdlib-bench)
 
-LDLIBS-bench-acos = -lm
-LDLIBS-bench-acosh = -lm
-LDLIBS-bench-asin = -lm
-LDLIBS-bench-asinh = -lm
-LDLIBS-bench-atan = -lm
-LDLIBS-bench-atanh = -lm
-LDLIBS-bench-cos = -lm
-LDLIBS-bench-cosh = -lm
-LDLIBS-bench-exp = -lm
-LDLIBS-bench-exp2 = -lm
-LDLIBS-bench-log = -lm
-LDLIBS-bench-log2 = -lm
-LDLIBS-bench-pow = -lm
-LDLIBS-bench-rint = -lm
-LDLIBS-bench-sin = -lm
-LDLIBS-bench-sinh = -lm
-LDLIBS-bench-sqrt = -lm
-LDLIBS-bench-tan = -lm
-LDLIBS-bench-tanh = -lm
-LDLIBS-bench-sincos = -lm
-
 
 
 # Rules to build and execute the benchmarks.  Do not put any benchmark
@@ -71,6 +54,22 @@ include ../Rules
 binaries-bench := $(addprefix $(objpfx)bench-,$(bench))
 binaries-benchset := $(addprefix $(objpfx)bench-,$(benchset))
 
+# Link to pthread
+ifeq ($(build-shared),yes)
+$(addprefix $(objpfx)bench-, \
+	    $(pthread-bench)): $(objpfx)$(..)nptl/libpthread.so \
+			       $(objpfx)$(..)nptl/libpthread_nonshared.a
+else
+$(addprefix $(objpfx)bench-,$(pthread-bench)): $(objpfx)$(..)libpthread.a
+endif
+
+# Link to libm
+ifeq ($(build-shared),yes)
+$(addprefix $(objpfx)bench-, $(math-bench)): $(objpfx)$(..)math/libm.so
+else
+$(addprefix $(objpfx)bench-,$(math-bench)): $(objpfx)$(..)math/libm.a
+endif
+
 # The default duration: 10 seconds.
 ifndef BENCH_DURATION
 BENCH_DURATION := 10
diff --git a/benchtests/sem_timedwait_test-inputs b/benchtests/sem_timedwait_test-inputs
new file mode 100644
index 0000000000..88a64f5265
--- /dev/null
+++ b/benchtests/sem_timedwait_test-inputs
@@ -0,0 +1,10 @@
+## includes: stdbool.h,pthread.h,semaphore.h
+## include-sources: src-sem_timedwait_test.c
+## init: init_test
+#  The sole argument differentiates between the default uncontended and
+#  the contended case.
+## args: bool
+## name: uncontended
+false
+## name: contended
+true
diff --git a/benchtests/src-sem_timedwait_test.c b/benchtests/src-sem_timedwait_test.c
new file mode 100644
index 0000000000..e50affd641
--- /dev/null
+++ b/benchtests/src-sem_timedwait_test.c
@@ -0,0 +1,18 @@
+sem_t sem;
+
+void
+init_test (void)
+{
+  sem_init (&sem, 0, 0);
+}
+
+static inline void __always_inline
+sem_timedwait_test (bool contended)
+{
+  struct timespec t;
+  clock_gettime (CLOCK_REALTIME, &t);
+  t.tv_nsec += 10000;
+  if (!contended)
+    sem_post (&sem);
+  sem_timedwait (&sem, &t);
+}