From: Yury Norov <ynorov@nvidia.com>
To: Akinobu Mita <akinobu.mita@gmail.com>
Cc: linux-kernel@vger.kernel.org, akpm@linux-foundation.org,
Yury Norov <yury.norov@gmail.com>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>
Subject: Re: [PATCH] lib/find_bit_benchmark: avoid clearing randomly filled bitmap in test_find_first_bit()
Date: Tue, 10 Mar 2026 12:57:28 -0400 [thread overview]
Message-ID: <abBNeMV5R3QlUT27@yury> (raw)
In-Reply-To: <20260310152126.6919-1-akinobu.mita@gmail.com>
On Wed, Mar 11, 2026 at 12:21:26AM +0900, Akinobu Mita wrote:
> test_find_first_bit() searches for a set bit from the beginning of the
> test bitmap and clears it repeatedly, eventually clearing the entire
> bitmap.
>
> After test_find_first_bit() is executed, test_find_first_and_bit() and
> test_find_next_and_bit() are executed without randomly reinitializing the
> cleared bitmap.
>
> In the first phase (testing find_bit() with a random-filled bitmap),
> test_find_first_bit() only operates on 1/10 of the entire size of the
> testing bitmap, so this isn't a big problem.
>
> However, in the second phase (testing find_bit() with a sparse bitmap),
> test_find_first_bit() clears the entire test bitmap, so the subsequent
> test_find_first_and_bit() and test_find_next_and_bit() will not find any
> set bits. This is probably not the intended benchmark.
>
> To fix this issue, test_find_first_bit() operates on a duplicated bitmap
> and does not clear the original test bitmap.
> The same is already done in test_find_first_and_bit().
>
> While we're at it, add const qualifiers to the bitmap pointer arguments
> in the test functions.
>
> Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
> Cc: Yury Norov <yury.norov@gmail.com>
> Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Applied, thanks!
> ---
> lib/find_bit_benchmark.c | 15 +++++++++------
> 1 file changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/lib/find_bit_benchmark.c b/lib/find_bit_benchmark.c
> index 402e160e7186..00d9dc61cd46 100644
> --- a/lib/find_bit_benchmark.c
> +++ b/lib/find_bit_benchmark.c
> @@ -30,18 +30,20 @@ static DECLARE_BITMAP(bitmap, BITMAP_LEN) __initdata;
> static DECLARE_BITMAP(bitmap2, BITMAP_LEN) __initdata;
>
> /*
> - * This is Schlemiel the Painter's algorithm. It should be called after
> - * all other tests for the same bitmap because it sets all bits of bitmap to 1.
> + * This is Schlemiel the Painter's algorithm.
> */
> -static int __init test_find_first_bit(void *bitmap, unsigned long len)
> +static int __init test_find_first_bit(const void *bitmap, unsigned long len)
> {
> + static DECLARE_BITMAP(cp, BITMAP_LEN) __initdata;
> unsigned long i, cnt;
> ktime_t time;
>
> + bitmap_copy(cp, bitmap, BITMAP_LEN);
> +
> time = ktime_get();
> for (cnt = i = 0; i < len; cnt++) {
> - i = find_first_bit(bitmap, len);
> - __clear_bit(i, bitmap);
> + i = find_first_bit(cp, len);
> + __clear_bit(i, cp);
> }
> time = ktime_get() - time;
> pr_err("find_first_bit: %18llu ns, %6ld iterations\n", time, cnt);
> @@ -49,7 +51,8 @@ static int __init test_find_first_bit(void *bitmap, unsigned long len)
> return 0;
> }
>
> -static int __init test_find_first_and_bit(void *bitmap, const void *bitmap2, unsigned long len)
> +static int __init test_find_first_and_bit(const void *bitmap, const void *bitmap2,
> + unsigned long len)
> {
> static DECLARE_BITMAP(cp, BITMAP_LEN) __initdata;
> unsigned long i, cnt;
> --
> 2.43.0
prev parent reply other threads:[~2026-03-10 16:57 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-10 15:21 [PATCH] lib/find_bit_benchmark: avoid clearing randomly filled bitmap in test_find_first_bit() Akinobu Mita
2026-03-10 16:57 ` Yury Norov [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=abBNeMV5R3QlUT27@yury \
--to=ynorov@nvidia.com \
--cc=akinobu.mita@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=yury.norov@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.