From: "Onur Özkan" <work@onurozkan.dev>
To: Yury Norov <ynorov@nvidia.com>
Cc: "Eliot Courtney" <ecourtney@nvidia.com>,
"Greg KH" <gregkh@linuxfoundation.org>,
"Burak Emir" <bqe@google.com>,
"John Hubbard" <jhubbard@nvidia.com>,
"Alice Ryhl" <aliceryhl@google.com>,
"Liam R . Howlett" <liam@infradead.org>,
"Andrew Ballance" <andrewjballance@gmail.com>,
"Matthew Wilcox" <willy@infradead.org>,
"Alexandre Courbot" <acourbot@nvidia.com>,
"Alistair Popple" <apopple@nvidia.com>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Benno Lossin" <lossin@kernel.org>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Boqun Feng" <boqun@kernel.org>,
"Daniel Almeida" <daniel.almeida@collabora.com>,
"Danilo Krummrich" <dakr@kernel.org>,
"David Airlie" <airlied@gmail.com>, "Gary Guo" <gary@garyguo.net>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Simona Vetter" <simona@ffwll.ch>,
"Tamir Duberstein" <tamird@kernel.org>,
"Timur Tabi" <ttabi@nvidia.com>,
"Trevor Gross" <tmgross@umich.edu>,
"Yury Norov" <yury.norov@gmail.com>, "Zhi Wang" <zhiw@nvidia.com>,
maple-tree@lists.infradead.org, linux-kernel@vger.kernel.org,
nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org,
rust-for-linux@vger.kernel.org
Subject: Re: [PATCH v2] lib: test bitmap vs IDA vs Maple Tree performance for region allocations
Date: Sat, 11 Jul 2026 11:27:08 +0300 [thread overview]
Message-ID: <20260711082725.12176-1-work@onurozkan.dev> (raw)
In-Reply-To: <20260711063602.426311-1-ynorov@nvidia.com>
On Sat, 11 Jul 2026 02:36:01 -0400
Yury Norov <ynorov@nvidia.com> wrote:
> Compare the cost of allocating and freeing variable-sized regions using
> a bitmap, IDA and a Maple Tree. All implementations process the same
> randomly generated sequence of region sizes, ranging from 1 to 32 entries,
> until the configured capacity is exhausted.
>
> Run the benchmark at several capacities to show how the approaches
> scale. Report allocation and free times separately because bitmap,
> IDA and Maple Tree removal have substantially different costs.
>
> On x86/kvm, the output example is:
>
> type alloc (ns) free (ns) capacity memory (B)
> bitmap 179573071 342105 1000000 125000
> IDA 46555636 33931498 1000000 134864
> maple 18629665 19741396 1000000 1548304
> bitmap 1630912 30933 100000 12504
> IDA 6144785 3354590 100000 14288
> maple 1745026 1825032 100000 155408
> bitmap 28448 3374 10000 1256
> IDA 418978 333641 10000 1872
> maple 185398 211138 10000 15632
> bitmap 2253 610 1000 128
> IDA 42755 36432 1000 144
> maple 19728 23474 1000 1552
>
> Reported IDA and Maple Tree memory figures exclude slab overhead
> and transient allocations. The Maple Tree figure is additionally
> a lower-bound estimate that assumes fully occupied leaf nodes and
> excludes internal nodes.
The report itself doesn't make it obvious. I think "memory (B)" can be
misleading. Perhaps we should use a clearer column name or add a short note
before/after the report for explaining the columns?
Regards,
Onur
>
> IDA has no region-allocation API, so each region is implemented as
> a sequence of single-ID allocations. The IDs remain contiguous
> because this benchmark fills an initially empty IDA monotonically.
>
> The benchmark is motivated by the discussion at the link below about
> choosing the best data structure for the channel ID pool with the
> capacity of 2048 IDs for the nova GPU driver.
>
> Specifically for 2048 IDs the result is:
>
> bitmap 3907 831 2048 256
> IDA 83545 71007 2048 848
> maple 34632 39710 2048 3600
>
> Link: https://lore.kernel.org/all/20260710-chid-maple-v1-1-4ee869055268@nvidia.com/
> Signed-off-by: Yury Norov <ynorov@nvidia.com>
> ---
> v2: add IDA benchmark (Matthew)
> v1: https://lore.kernel.org/all/20260711013910.349586-1-ynorov@nvidia.com/
>
> MAINTAINERS | 3 +
> lib/Kconfig.debug | 9 ++
> lib/Makefile | 1 +
> lib/region_alloc_benchmark.c | 174 +++++++++++++++++++++++++++++++++++
> 4 files changed, 187 insertions(+)
> create mode 100644 lib/region_alloc_benchmark.c
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 7cc4bca5a2c5..9e487a94aba4 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -4615,6 +4615,7 @@ F: lib/bitmap.c
> F: lib/cpumask.c
> F: lib/find_bit.c
> F: lib/find_bit_benchmark.c
> +F: lib/region_alloc_benchmark.c
> F: lib/test_bitmap.c
> F: lib/tests/cpumask_kunit.c
> + bitmap_count = benchmark_bitmap(capacities[i]);
[...]
> + ida_count = benchmark_ida(capacities[i]);
> + maple_count = benchmark_maple_tree(capacities[i]);
> + WARN_ON(bitmap_count != ida_count);
> + WARN_ON(bitmap_count != maple_count);
> + }
> +
> + /* Let the benchmark be loaded and run repeatedly without rmmod. */
> + return -EINVAL;
> +}
> +module_init(region_alloc_benchmark);
> +
> +MODULE_AUTHOR("Yury Norov <ynorov@nvidia.com>");
> +MODULE_DESCRIPTION("Benchmark bitmap, IDA and Maple Tree region allocation");
> +MODULE_LICENSE("GPL");
> --
> 2.53.0
>
next prev parent reply other threads:[~2026-07-11 8:27 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-11 6:36 [PATCH v2] lib: test bitmap vs IDA vs Maple Tree performance for region allocations Yury Norov
2026-07-11 8:27 ` Onur Özkan [this message]
2026-07-11 13:51 ` Gary Guo
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=20260711082725.12176-1-work@onurozkan.dev \
--to=work@onurozkan.dev \
--cc=a.hindborg@kernel.org \
--cc=acourbot@nvidia.com \
--cc=airlied@gmail.com \
--cc=aliceryhl@google.com \
--cc=andrewjballance@gmail.com \
--cc=apopple@nvidia.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun@kernel.org \
--cc=bqe@google.com \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=ecourtney@nvidia.com \
--cc=gary@garyguo.net \
--cc=gregkh@linuxfoundation.org \
--cc=jhubbard@nvidia.com \
--cc=liam@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=maple-tree@lists.infradead.org \
--cc=nova-gpu@lists.linux.dev \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=simona@ffwll.ch \
--cc=tamird@kernel.org \
--cc=tmgross@umich.edu \
--cc=ttabi@nvidia.com \
--cc=willy@infradead.org \
--cc=ynorov@nvidia.com \
--cc=yury.norov@gmail.com \
--cc=zhiw@nvidia.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox