[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <49b867c1-2b68-c034-9f60-b26a77ff326a@bytedance.com>
Date: Mon, 16 Jan 2023 16:40:47 +0800
From: Peng Zhang <zhangpeng.00@...edance.com>
To: Mike Rapoport <rppt@...nel.org>
Cc: akpm@...ux-foundation.org, linux-mm@...ck.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH 2/3] memblock: Make finding index faster when modify
regions.
在 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
Powered by blists - more mailing lists