Messages in this thread | | | Date | Mon, 16 Jan 2023 16:40:47 +0800 | Subject | Re: [PATCH 2/3] memblock: Make finding index faster when modify regions. | From | Peng Zhang <> |
| |
在 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
If max_nr_regions is larger, the difference will be more.
Thanks.
Sincerely yours, Peng
| |