summaryrefslogtreecommitdiff
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
benchtests: New benchmark for sem_timedwaitsiddhesh/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);
+}