From: Wilco Dijkstra Date: Mon, 18 Mar 2024 15:05:38 +0000 (+0000) Subject: benchtests: Improve large memcpy/memset benchmarks X-Git-Tag: glibc-2.42~429 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=dac7ea4a6fb8111e60fc35c104302800cf986ad2;p=thirdparty%2Fglibc.git benchtests: Improve large memcpy/memset benchmarks Adjust sizes between 64KB and 16MB and iterations based on length. Remove incorrect uses of alloc_bufs since we're not interested in measuring Linux clear_page time. Use getpagesize() - 1 instead of 4095 when aligning within a page. Reviewed-by: Adhemerval Zanella  --- diff --git a/benchtests/bench-bzero-large.c b/benchtests/bench-bzero-large.c index e126372210..c6fff9da04 100644 --- a/benchtests/bench-bzero-large.c +++ b/benchtests/bench-bzero-large.c @@ -22,9 +22,8 @@ #else # define TEST_NAME "bzero" #endif -#define START_SIZE (128 * 1024) -#define MIN_PAGE_SIZE (getpagesize () + 64 * 1024 * 1024) -#define TIMEOUT (20 * 60) +#define START_SIZE (64 * 1024) +#define MIN_PAGE_SIZE (getpagesize () + 16 * 1024 * 1024) #include "bench-string.h" #include "json-lib.h" @@ -52,7 +51,7 @@ IMPL (memset_zero, 0) static void do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) { - size_t i, iters = 16; + size_t i, iters = (MIN_PAGE_SIZE * 64) / n; timing_t start, stop, cur; TIMING_NOW (start); @@ -74,20 +73,13 @@ do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, size_t n) static void do_test (json_ctx_t *json_ctx, size_t align, size_t len) { - align &= 63; - if ((align + len) * sizeof (CHAR) > page_size) - return; - json_element_object_begin (json_ctx); json_attr_uint (json_ctx, "length", len); json_attr_uint (json_ctx, "alignment", align); json_array_begin (json_ctx, "timings"); FOR_EACH_IMPL (impl, 0) - { - do_one_test (json_ctx, impl, (CHAR *) (buf1) + align, len); - alloc_bufs (); - } + do_one_test (json_ctx, impl, (CHAR *) (buf1) + align, len); json_array_end (json_ctx); json_element_object_end (json_ctx); diff --git a/benchtests/bench-memcpy-large.c b/benchtests/bench-memcpy-large.c index cb83bac2bf..c5bd759dd5 100644 --- a/benchtests/bench-memcpy-large.c +++ b/benchtests/bench-memcpy-large.c @@ -19,10 +19,9 @@ #ifndef MEMCPY_RESULT # define MEMCPY_RESULT(dst, len) dst # define START_SIZE (64 * 1024) -# define MIN_PAGE_SIZE (getpagesize () + 32 * 1024 * 1024) +# define MIN_PAGE_SIZE (getpagesize () + 16 * 1024 * 1024) # define TEST_MAIN # define TEST_NAME "memcpy" -# define TIMEOUT (20 * 60) # include "bench-string.h" IMPL (memcpy, 1) @@ -36,7 +35,7 @@ static void do_one_test (json_ctx_t *json_ctx, impl_t *impl, char *dst, const char *src, size_t len) { - size_t i, iters = 16; + size_t i, iters = (MIN_PAGE_SIZE * 8) / len; timing_t start, stop, cur; TIMING_NOW (start); @@ -59,12 +58,7 @@ do_test (json_ctx_t *json_ctx, size_t align1, size_t align2, size_t len, char *s1, *s2; size_t repeats; align1 &= 4095; - if (align1 + len >= page_size) - return; - align2 &= 4095; - if (align2 + len >= page_size) - return; s1 = (char *) (buf1 + align1); s2 = (char *) (buf2 + align2); diff --git a/benchtests/bench-memmove-large.c b/benchtests/bench-memmove-large.c index 9a331543e8..305b2236cd 100644 --- a/benchtests/bench-memmove-large.c +++ b/benchtests/bench-memmove-large.c @@ -16,12 +16,10 @@ License along with the GNU C Library; if not, see . */ -#define BASE_PAGE_SIZE (1024 * 1024) -#define START_SIZE (4 * 1024) +#define START_SIZE (64 * 1024) #define MIN_PAGE_SIZE (getpagesize () + 16 * 1024 * 1024) #define TEST_MAIN #define TEST_NAME "memmove" -#define TIMEOUT (20 * 60) #include "bench-string.h" #include "json-lib.h" @@ -33,7 +31,7 @@ static void do_one_test (json_ctx_t *json_ctx, impl_t *impl, char *dst, char *src, size_t len) { - size_t i, iters = 16; + size_t i, iters = (MIN_PAGE_SIZE * 8) / len; timing_t start, stop, cur; TIMING_NOW (start); @@ -54,13 +52,8 @@ do_test (json_ctx_t *json_ctx, size_t align1, size_t align2, size_t len) size_t i, j; char *s1, *s2; - align1 &= 127; - if (align1 + len >= page_size) - return; - - align2 &= 127; - if (align2 + len >= page_size) - return; + align1 &= 4095; + align2 &= 4095; s1 = (char *) (buf2 + align1); s2 = (char *) (buf2 + align2); diff --git a/benchtests/bench-memset-large.c b/benchtests/bench-memset-large.c index 578a1ec319..71514fca8a 100644 --- a/benchtests/bench-memset-large.c +++ b/benchtests/bench-memset-large.c @@ -18,9 +18,8 @@ #define TEST_MAIN #define TEST_NAME "memset" -#define START_SIZE (128 * 1024) -#define MIN_PAGE_SIZE (getpagesize () + 64 * 1024 * 1024) -#define TIMEOUT (20 * 60) +#define START_SIZE (64 * 1024) +#define MIN_PAGE_SIZE (getpagesize () + 16 * 1024 * 1024) #include "bench-string.h" #include "json-lib.h" @@ -35,7 +34,7 @@ static void do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, int c __attribute ((unused)), size_t n) { - size_t i, iters = 16; + size_t i, iters = (MIN_PAGE_SIZE * 64) / n; timing_t start, stop, cur; TIMING_NOW (start); @@ -53,10 +52,6 @@ do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, static void do_test (json_ctx_t *json_ctx, size_t align, int c, size_t len) { - align &= 63; - if ((align + len) * sizeof (CHAR) > page_size) - return; - json_element_object_begin (json_ctx); json_attr_uint (json_ctx, "length", len); json_attr_uint (json_ctx, "alignment", align); @@ -64,10 +59,7 @@ 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); - alloc_bufs (); - } + do_one_test (json_ctx, impl, (CHAR *) (buf1) + align, c, len); json_array_end (json_ctx); json_element_object_end (json_ctx);