Re: [PATCH v4] drivers/base/memory.c: cache blocks in radix tree to accelerate lookup

From: Andrew Morton
Date: Thu Jan 09 2020 - 17:00:07 EST


On Thu, 9 Jan 2020 15:25:16 -0600 Scott Cheloha <cheloha@xxxxxxxxxxxxxxxxxx> wrote:

> Searching for a particular memory block by id is an O(n) operation
> because each memory block's underlying device is kept in an unsorted
> linked list on the subsystem bus.
>
> We can cut the lookup cost to O(log n) if we cache the memory blocks in
> a radix tree. With a radix tree cache in place both memory subsystem
> initialization and memory hotplug run palpably faster on systems with a
> large number of memory blocks.
>
> ...
>
> @@ -56,6 +57,13 @@ static struct bus_type memory_subsys = {
> .offline = memory_subsys_offline,
> };
>
> +/*
> + * Memory blocks are cached in a local radix tree to avoid
> + * a costly linear search for the corresponding device on
> + * the subsystem bus.
> + */
> +static RADIX_TREE(memory_blocks, GFP_KERNEL);

What protects this tree from racy accesses?