From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com [IPv6:2a00:1450:4864:20::533]) by sourceware.org (Postfix) with ESMTPS id 8C24B3858CDB for ; Thu, 23 Mar 2023 18:17:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8C24B3858CDB Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-x533.google.com with SMTP id r11so90587898edd.5 for ; Thu, 23 Mar 2023 11:17:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679595449; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=dN54nrbHq3cL9kNxUsHCypaJW4yw/JZBkq8jH9Jed3o=; b=I9dVk1neY/xekQh/ACm3+b+Tq90ZzChTfryWGzybgI5ubSCvMVZGb3XgLkwXRfvFw+ m9RNL77QOP4bR/HpvGAbrVdG7TzmBi2ilvC3lsuo6kmFjjvt9mocBuXBP5jb99gpTuwu 9UgobMAoB1XWRYEwq1sKttQloDJonNz2epreu1ovuatTdlZhygcaACMaQgmLv2UfHrqi nbSuRLGH4zKX+ULit5LgUHOUrmJX1BNrqEO9sHArFbzEmyJaMr5RbAEjnEXewxMmKjzo v0F9lxtJ/Kqn9ZMnehDPnPz/8EWAl7oqPIEYe7S0Edn/4NkhblqLBxdOATFnyaaiJ0AR G3jQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679595449; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dN54nrbHq3cL9kNxUsHCypaJW4yw/JZBkq8jH9Jed3o=; b=bVMHbB/Osxedima37jKjpVZ+MFVbf+ad1SF+7HkZQu1JagImF1zjB5/OkHkmz/vpPo 361oRQmSkeGa5et+2msTsubeIkrUQc/SACuPNQjKA00UjpSbgTuGkA7wg87IE575X7Ms heiOr7CKjJtUjauAktgdSJDyXwLY58RRHYvGTgpFYilaz7EUbhUQiN7Pa+OzNldFReiJ o7utEw2YL9JnJluLSZEl+iRflUrxK26s5+JnOU0wpcXsSMG31yPbJGvGwz+CHajN6I/l Wo2tExo9veQdMN8OXCLjAHaA+Yhs01cdVWCnuQQ414jR1w7D5/tgb9H1BqBKlohyfK/L nFNg== X-Gm-Message-State: AO0yUKWLyMbAP4W/abQ75uhKnzfsdpPHqRp0vhEf6Bawq+JKqsN+UnLC vpudqI28pJG9VP6T/bCb+iGAEzU0/qsLjHh1ryaTmQaS X-Google-Smtp-Source: AK7set9WV1ko+bN37IbMWvtmTSuBYO4cj357eE/DJDjAXyGZrlTN731Bb2ryNudXAZf1vtlj4Ww8Wc26tU+aBeozSYs= X-Received: by 2002:a05:6402:3496:b0:4ad:739c:b38e with SMTP id v22-20020a056402349600b004ad739cb38emr5196820edc.1.1679595449186; Thu, 23 Mar 2023 11:17:29 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Noah Goldstein Date: Thu, 23 Mar 2023 13:17:17 -0500 Message-ID: Subject: Re: [PATCH] Benchtests: Improve large memcpy/memset benchmarks To: Wilco Dijkstra Cc: GNU C Library Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-9.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_LOTSOFHASH,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Thu, Mar 23, 2023 at 6:41=E2=80=AFAM Wilco Dijkstra via Libc-alpha wrote: > > > Adjust sizes between 64KB and 16MB and iterations based on length. > Remove incorrect uses of alloc_bufs (since we're not interested in measur= ing > Linux clear_page time). > > --- > > diff --git a/benchtests/bench-bzero-large.c b/benchtests/bench-bzero-larg= e.c > index 7076c0a17b00d76c26aa6adb4c3cc0aedcf69955..dea414ec8d1bb160409725996= 244178ee4fa93fd 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 =3D 16; > + size_t i, iters =3D (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 &=3D 63; Can you replace with `align &=3D getpagesize () - 1`? > - if ((align + len) * sizeof (CHAR) > page_size) > - return; Is there a reason to remove the out of bounds check? > - > 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-la= rge.c > index 7b2c5530af3883acc4b3895cb11667e6ff1a55ff..9e544a4729197f886f6cb092e= c225004b586d197 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 =3D 16; > + size_t i, iters =3D (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 a= lign2, size_t len, > char *s1, *s2; > size_t repeats; > align1 &=3D 4095; > - if (align1 + len >=3D page_size) > - return; > - > align2 &=3D 4095; Might as well fix these up, can you replace 4095 with `getpagesize () - 1`? > - if (align2 + len >=3D page_size) > - return; > > s1 =3D (char *) (buf1 + align1); > s2 =3D (char *) (buf2 + align2); > diff --git a/benchtests/bench-memmove-large.c b/benchtests/bench-memmove-= large.c > index a09dd3678848a3bf8612732439700eb8ef5d82ea..fd504653f681b172800cc34e0= 54cc745180aa4fa 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 =3D 16; > + size_t i, iters =3D (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 a= lign2, size_t len) > size_t i, j; > char *s1, *s2; > > - align1 &=3D 127; > - if (align1 + len >=3D page_size) > - return; > - > - align2 &=3D 127; > - if (align2 + len >=3D page_size) > - return; > + align1 &=3D 4095; > + align2 &=3D 4095; `getpagesize () - 1` > > s1 =3D (char *) (buf2 + align1); > s2 =3D (char *) (buf2 + align2); > diff --git a/benchtests/bench-memset-large.c b/benchtests/bench-memset-la= rge.c > index a1f33245d4960c1e82fc441b5faf322204035202..c3f9ee0cd75d3cb30f8b3df15= 672f895c111fc28 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 =3D 16; > + size_t i, iters =3D (MIN_PAGE_SIZE * 64) / n; this takes [.5, 10] seconds? > 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 &=3D 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, si= ze_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); > >