Re: [PATCH 2/3] memblock: Make finding index faster when modify regions.

From: Mike Rapoport
Date: Fri Jan 20 2023 - 00:33:18 EST


On Mon, Jan 16, 2023 at 04:40:47PM +0800, Peng Zhang wrote:
>
>
> 在 2023/1/16 15:37, Mike Rapoport 写道:
> > On Mon, Jan 16, 2023 at 11:17:40AM +0800, Peng Zhang wrote:
> > >
> > >
> > > 在 2023/1/15 22:02, Mike Rapoport 写道:
> > > > Hi,
> > > >
> > > > On Fri, Jan 13, 2023 at 04:26:58PM +0800, Peng Zhang wrote:
> > > > > We can use binary search to find the index to modify regions in
> > > > > memblock_add_range() and memblock_isolate_range(). Because the
> > > > > arrangement of regions is ordered. It may be faster when there are
> > > > > many regions. So implemented a binary search and a new macro to walk
> > > > > regions.
> > > >
> > > > Did you see a measurable speedup with this optimization?
> > > > I'm not in favor of micro-optimizations that complicate code.
> > > >
> > > Thank you for your reply. I haven't measured this patch yet, theoretically
> > > this small optimization might be difficult to observe.
> > > If you think this patch complicates the code, you can ignore this patch.
> > >
> > > These three patches are independent and they can be applied independently.
> > > The logic of the third patch is very simple. It will not complicate the
> > > code. It is tested by the default configuration of qemu. The total number of
> > > iterations of memblock_merge_regions() in the third patch is reduced from
> > > more than one thousand to more than one hundred, this is only in the case of
> > > a small number of regions. Can you consider the third patch?
> >
> > Can you please send the numbers and show how did you obtained them?
> >
> > > Sincerely yours,
> > > Peng.
> >
> I obtained the numbers like this:
>
> void memblock_merge_regions(struct memblock_type *type) {
> static int iteration_count = 0;
> static int max_nr_regions = 0;
>
> max_nr_regions = max(max_nr_regions, (int)type->cnt);
> ...
> while () {
> iteration_count++;
> ...
> }
> pr_info("iteration_count: %d max_nr_regions %d", iteration_count,
> max_nr_regions);
> }
>
> Boot the kernel by qemu.
> The folowing numbers is the last output.
>
> master branch:
> iteration_count: 1762 max_nr_regions 41
>
> patched:
> iteration_count: 182 max_nr_regions 41

The numbers that indicate what speed up your patch achieves should be a
part of the changelog. It would be great if you could test it on a real
machine and measure the actual time saved by your changes.

> If max_nr_regions is larger, the difference will be more.
>
> Thanks.
>
> Sincerely yours,
> Peng

--
Sincerely yours,
Mike.