mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-25 13:51:04 +08:00
benchtests: Reallocate buffers for memset
Keeping the same buffers along with copying the same size of data into the same location means that the first routine is typically the slowest since it has to bear the cost of fetching data into to cache. Reallocating buffers stabilizes numbers by a bit. * benchtests/bench-string.h (realloc_bufs): New function. (test_init): Call it. * benchtests/bench-memset-large.c (do_test): Likewise. * benchtests/bench-memset.c (do_test): Likewise.
This commit is contained in:
parent
29c933fb35
commit
503c92c37a
@ -1,5 +1,10 @@
|
||||
2017-09-14 Siddhesh Poyarekar <siddhesh@sourceware.org>
|
||||
|
||||
* benchtests/bench-string.h (realloc_bufs): New function.
|
||||
(test_init): Call it.
|
||||
* benchtests/bench-memset-large.c (do_test): Likewise.
|
||||
* benchtests/bench-memset.c (do_test): Likewise.
|
||||
|
||||
* benchtests/bench-memset-large.c: Print output in JSON
|
||||
format.
|
||||
* benchtests/bench-memset.c: Likewise.
|
||||
|
@ -90,7 +90,10 @@ do_test (json_ctx_t *json_ctx, size_t align, int c, size_t len)
|
||||
json_array_begin (json_ctx, "timings");
|
||||
|
||||
FOR_EACH_IMPL (impl, 0)
|
||||
do_one_test (json_ctx, impl, (CHAR *) (buf1) + align, c, len);
|
||||
{
|
||||
do_one_test (json_ctx, impl, (CHAR *) (buf1) + align, c, len);
|
||||
realloc_bufs ();
|
||||
}
|
||||
|
||||
json_array_end (json_ctx);
|
||||
json_element_object_end (json_ctx);
|
||||
|
@ -132,7 +132,10 @@ do_test (json_ctx_t *json_ctx, size_t align, int c, size_t len)
|
||||
json_array_begin (json_ctx, "timings");
|
||||
|
||||
FOR_EACH_IMPL (impl, 0)
|
||||
do_one_test (json_ctx, impl, (CHAR *) (buf1) + align, c, len);
|
||||
{
|
||||
do_one_test (json_ctx, impl, (CHAR *) (buf1) + align, c, len);
|
||||
realloc_bufs ();
|
||||
}
|
||||
|
||||
json_array_end (json_ctx);
|
||||
json_element_object_end (json_ctx);
|
||||
|
@ -173,14 +173,8 @@ static impl_t *impl_array;
|
||||
# endif
|
||||
|
||||
static void
|
||||
test_init (void)
|
||||
alloc_bufs (void)
|
||||
{
|
||||
# ifdef TEST_NAME
|
||||
func_count = __libc_ifunc_impl_list (TEST_NAME, func_list,
|
||||
(sizeof func_list
|
||||
/ sizeof func_list[0]));
|
||||
# endif
|
||||
|
||||
page_size = 2 * getpagesize ();
|
||||
# ifdef MIN_PAGE_SIZE
|
||||
if (page_size < MIN_PAGE_SIZE)
|
||||
@ -189,15 +183,49 @@ test_init (void)
|
||||
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");
|
||||
error (EXIT_FAILURE, errno, "mmap failed for buf1");
|
||||
if (mprotect (buf1 + BUF1PAGES * page_size, page_size, PROT_NONE))
|
||||
error (EXIT_FAILURE, errno, "mprotect failed");
|
||||
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");
|
||||
error (EXIT_FAILURE, errno, "mmap failed for buf2");
|
||||
if (mprotect (buf2 + page_size, page_size, PROT_NONE))
|
||||
error (EXIT_FAILURE, errno, "mprotect failed");
|
||||
error (EXIT_FAILURE, errno, "mprotect failed for buf2");
|
||||
}
|
||||
|
||||
static void
|
||||
__attribute__ ((unused))
|
||||
realloc_bufs (void)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (buf1)
|
||||
ret = munmap (buf1, (BUF1PAGES + 1) * page_size);
|
||||
|
||||
if (ret != 0)
|
||||
error (EXIT_FAILURE, errno, "munmap failed for buf1");
|
||||
|
||||
if (buf2)
|
||||
ret = munmap (buf2, 2 * page_size);
|
||||
|
||||
if (ret != 0)
|
||||
error (EXIT_FAILURE, errno, "munmap failed for buf2");
|
||||
|
||||
alloc_bufs ();
|
||||
}
|
||||
|
||||
static void
|
||||
test_init (void)
|
||||
{
|
||||
# ifdef TEST_NAME
|
||||
func_count = __libc_ifunc_impl_list (TEST_NAME, func_list,
|
||||
(sizeof func_list
|
||||
/ sizeof func_list[0]));
|
||||
# endif
|
||||
|
||||
alloc_bufs ();
|
||||
|
||||
if (do_srandom)
|
||||
{
|
||||
printf ("Setting seed to 0x%x\n", seed);
|
||||
|
Loading…
x
Reference in New Issue
Block a user