aboutsummaryrefslogtreecommitdiff
path: root/benchtests
diff options
context:
space:
mode:
Diffstat (limited to 'benchtests')
-rw-r--r--benchtests/bench-memcmp.c2
-rw-r--r--benchtests/bench-memset-large.c2
-rw-r--r--benchtests/bench-memset-walk.c2
-rw-r--r--benchtests/bench-memset.c2
-rw-r--r--benchtests/bench-string.h63
-rw-r--r--benchtests/bench-strncmp.c4
6 files changed, 42 insertions, 33 deletions
diff --git a/benchtests/bench-memcmp.c b/benchtests/bench-memcmp.c
index 69ed9c9..b566f48 100644
--- a/benchtests/bench-memcmp.c
+++ b/benchtests/bench-memcmp.c
@@ -132,7 +132,7 @@ do_test (json_ctx_t *json_ctx, size_t align1, size_t align2, size_t len,
s2[len - 1] -= exp_result;
do_one_test (json_ctx, impl, s1, s2, len, exp_result);
- realloc_bufs ();
+ alloc_bufs ();
}
json_array_end (json_ctx);
diff --git a/benchtests/bench-memset-large.c b/benchtests/bench-memset-large.c
index 2482891..1f7bf81 100644
--- a/benchtests/bench-memset-large.c
+++ b/benchtests/bench-memset-large.c
@@ -92,7 +92,7 @@ do_test (json_ctx_t *json_ctx, size_t align, int c, size_t len)
FOR_EACH_IMPL (impl, 0)
{
do_one_test (json_ctx, impl, (CHAR *) (buf1) + align, c, len);
- realloc_bufs ();
+ alloc_bufs ();
}
json_array_end (json_ctx);
diff --git a/benchtests/bench-memset-walk.c b/benchtests/bench-memset-walk.c
index 4dcb152..753d6f3 100644
--- a/benchtests/bench-memset-walk.c
+++ b/benchtests/bench-memset-walk.c
@@ -88,7 +88,7 @@ do_test (json_ctx_t *json_ctx, int c, size_t len)
{
do_one_test (json_ctx, impl, (CHAR *) buf1,
(CHAR *) buf1 + MIN_PAGE_SIZE - len, c, len);
- realloc_bufs ();
+ alloc_bufs ();
}
json_array_end (json_ctx);
diff --git a/benchtests/bench-memset.c b/benchtests/bench-memset.c
index 0ae201d..a47620c 100644
--- a/benchtests/bench-memset.c
+++ b/benchtests/bench-memset.c
@@ -134,7 +134,7 @@ do_test (json_ctx_t *json_ctx, size_t align, int c, size_t len)
FOR_EACH_IMPL (impl, 0)
{
do_one_test (json_ctx, impl, (CHAR *) (buf1) + align, c, len);
- realloc_bufs ();
+ alloc_bufs ();
}
json_array_end (json_ctx);
diff --git a/benchtests/bench-string.h b/benchtests/bench-string.h
index 94aaafd..f838998 100644
--- a/benchtests/bench-string.h
+++ b/benchtests/bench-string.h
@@ -76,10 +76,8 @@ extern impl_t __start_impls[], __stop_impls[];
# define INNER_LOOP_ITERS 64
-unsigned char *buf1, *buf2;
int ret, do_srandom;
unsigned int seed;
-size_t page_size;
# ifndef ITERATIONS
size_t iterations = 100000;
@@ -182,47 +180,57 @@ static impl_t *impl_array;
# define BUF1PAGES 1
# endif
+unsigned char *buf1, *buf2;
+static size_t buf1_size, buf2_size, page_size;
+
static void
-alloc_bufs (void)
+init_sizes (void)
{
page_size = 2 * getpagesize ();
# ifdef MIN_PAGE_SIZE
if (page_size < MIN_PAGE_SIZE)
page_size = MIN_PAGE_SIZE;
# endif
- buf1 = mmap (0, (BUF1PAGES + 1) * page_size, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANON, -1, 0);
- if (buf1 == MAP_FAILED)
- error (EXIT_FAILURE, errno, "mmap failed for buf1");
- if (mprotect (buf1 + BUF1PAGES * page_size, page_size, PROT_NONE))
- error (EXIT_FAILURE, errno, "mprotect failed for buf1");
- buf2 = mmap (0, 2 * page_size, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANON, -1, 0);
- if (buf2 == MAP_FAILED)
- error (EXIT_FAILURE, errno, "mmap failed for buf2");
- if (mprotect (buf2 + page_size, page_size, PROT_NONE))
- error (EXIT_FAILURE, errno, "mprotect failed for buf2");
+
+ buf1_size = BUF1PAGES * page_size;
+ buf2_size = page_size;
+}
+
+static void
+exit_error (const char *id, const char *func)
+{
+ error (EXIT_FAILURE, errno, "%s: %s failed", id, func);
}
+/* Allocate a buffer of size SIZE with a guard page at the end. */
static void
-__attribute__ ((unused))
-realloc_bufs (void)
+alloc_buf (const char *id, size_t size, unsigned char **retbuf)
{
- int ret = 0;
+ size_t alloc_size = size + page_size;
- if (buf1)
- ret = munmap (buf1, (BUF1PAGES + 1) * page_size);
+ if (*retbuf != NULL)
+ {
+ int ret = munmap (*retbuf, alloc_size);
+ if (ret != 0)
+ exit_error (id, "munmap");
+ }
- if (ret != 0)
- error (EXIT_FAILURE, errno, "munmap failed for buf1");
+ unsigned char *buf = mmap (0, alloc_size, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANON, -1, 0);
- if (buf2)
- ret = munmap (buf2, 2 * page_size);
+ if (buf == MAP_FAILED)
+ exit_error (id, "mmap");
+ if (mprotect (buf + size, page_size, PROT_NONE))
+ exit_error (id, "mprotect");
- if (ret != 0)
- error (EXIT_FAILURE, errno, "munmap failed for buf2");
+ *retbuf = buf;
+}
- alloc_bufs ();
+static void
+alloc_bufs (void)
+{
+ alloc_buf ("buf1", buf1_size, &buf1);
+ alloc_buf ("buf2", buf2_size, &buf2);
}
static void
@@ -234,6 +242,7 @@ test_init (void)
/ sizeof func_list[0]));
# endif
+ init_sizes ();
alloc_bufs ();
if (do_srandom)
diff --git a/benchtests/bench-strncmp.c b/benchtests/bench-strncmp.c
index 97dc390..92cf0d2 100644
--- a/benchtests/bench-strncmp.c
+++ b/benchtests/bench-strncmp.c
@@ -150,7 +150,7 @@ do_test_limit (json_ctx_t *json_ctx, size_t align1, size_t align2, size_t len,
FOR_EACH_IMPL (impl, 0)
{
- realloc_bufs ();
+ alloc_bufs ();
s1 = (CHAR *) (buf1 + page_size - n * CHARBYTES);
s2 = (CHAR *) (buf2 + page_size - n * CHARBYTES);
@@ -207,7 +207,7 @@ do_test (json_ctx_t *json_ctx, size_t align1, size_t align2, size_t len, size_t
FOR_EACH_IMPL (impl, 0)
{
- realloc_bufs ();
+ alloc_bufs ();
s1 = (CHAR *) (buf1 + align1);
s2 = (CHAR *) (buf2 + align2);