mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-09 23:00:07 +00:00
benchtests: Clean up the alloc_bufs
Drop realloc_bufs in favour of making alloc_bufs transparently reallocate the buffers if it had allocated before. Also consolidate computation of buffer lengths so that they don't get repeated on every reallocation. * benchtests/bench-string.h (buf1_size, buf2_size): New variables. (init_sizes): New function. (test_init): Use it. (alloc_buf, exit_error): New functions. (alloc_bufs): Use ALLOC_BUF. (realloc_bufs): Remove. * benchtests/bench-memcmp.c (do_test): Adjust. * benchtests/bench-memset-large.c (do_test): Likewise. * benchtests/bench-memset-walk.c (do_test): Likewise. * benchtests/bench-memset.c (do_test): Likewise. * benchtests/bench-strncmp.c (do_test): Likewise.
This commit is contained in:
parent
92a4cba760
commit
014efdd7ea
15
ChangeLog
15
ChangeLog
@ -1,3 +1,18 @@
|
||||
2018-08-07 Siddhesh Poyarekar <siddhesh@sourceware.org>
|
||||
|
||||
* benchtests/bench-string.h (buf1_size, buf2_size): New
|
||||
variables.
|
||||
(init_sizes): New function.
|
||||
(test_init): Use it.
|
||||
(alloc_buf, exit_error): New functions.
|
||||
(alloc_bufs): Use ALLOC_BUF.
|
||||
(realloc_bufs): Remove.
|
||||
* benchtests/bench-memcmp.c (do_test): Adjust.
|
||||
* benchtests/bench-memset-large.c (do_test): Likewise.
|
||||
* benchtests/bench-memset-walk.c (do_test): Likewise.
|
||||
* benchtests/bench-memset.c (do_test): Likewise.
|
||||
* benchtests/bench-strncmp.c (do_test): Likewise.
|
||||
|
||||
2018-08-06 Andreas Schwab <schwab@suse.de>
|
||||
|
||||
* sysdeps/riscv/nptl/tls.h (DB_THREAD_SELF): Use REGISTER instead
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
__attribute__ ((unused))
|
||||
realloc_bufs (void)
|
||||
exit_error (const char *id, const char *func)
|
||||
{
|
||||
int ret = 0;
|
||||
error (EXIT_FAILURE, errno, "%s: %s failed", id, func);
|
||||
}
|
||||
|
||||
if (buf1)
|
||||
ret = munmap (buf1, (BUF1PAGES + 1) * page_size);
|
||||
/* Allocate a buffer of size SIZE with a guard page at the end. */
|
||||
static void
|
||||
alloc_buf (const char *id, size_t size, unsigned char **retbuf)
|
||||
{
|
||||
size_t alloc_size = size + page_size;
|
||||
|
||||
if (ret != 0)
|
||||
error (EXIT_FAILURE, errno, "munmap failed for buf1");
|
||||
if (*retbuf != NULL)
|
||||
{
|
||||
int ret = munmap (*retbuf, alloc_size);
|
||||
if (ret != 0)
|
||||
exit_error (id, "munmap");
|
||||
}
|
||||
|
||||
if (buf2)
|
||||
ret = munmap (buf2, 2 * page_size);
|
||||
unsigned char *buf = mmap (0, alloc_size, PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANON, -1, 0);
|
||||
|
||||
if (ret != 0)
|
||||
error (EXIT_FAILURE, errno, "munmap failed for buf2");
|
||||
if (buf == MAP_FAILED)
|
||||
exit_error (id, "mmap");
|
||||
if (mprotect (buf + size, page_size, PROT_NONE))
|
||||
exit_error (id, "mprotect");
|
||||
|
||||
alloc_bufs ();
|
||||
*retbuf = buf;
|
||||
}
|
||||
|
||||
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)
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user