From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Michal Hocko <mhocko@kernel.org>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>,
linux-kernel@vger.kernel.org,
Scott Cheloha <cheloha@linux.vnet.ibm.com>,
David Hildenbrand <david@redhat.com>,
nathanl@linux.ibm.com, ricklind@linux.vnet.ibm.com,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH v3] drivers/base/memory.c: cache blocks in radix tree to accelerate lookup
Date: Thu, 9 Jan 2020 10:33:59 +0100 [thread overview]
Message-ID: <20200109093359.GA44349@kroah.com> (raw)
In-Reply-To: <20200109091934.GK4951@dhcp22.suse.cz>
On Thu, Jan 09, 2020 at 10:19:34AM +0100, Michal Hocko wrote:
> On Thu 09-01-20 09:56:23, Greg KH wrote:
> > On Thu, Jan 09, 2020 at 09:49:55AM +0100, Michal Hocko wrote:
> > > On Tue 07-01-20 22:48:04, Michal Hocko wrote:
> > > > [Cc Andrew]
> > > >
> > > > On Tue 17-12-19 13:32:38, Scott Cheloha wrote:
> > > > > Searching for a particular memory block by id is slow because each block
> > > > > device is kept in an unsorted linked list on the subsystem bus.
> > > >
> > > > Noting that this is O(N^2) would be useful.
> > > >
> > > > > Lookup is much faster if we cache the blocks in a radix tree.
> > > >
> > > > While this is really easy and straightforward, is there any reason why
> > > > subsys_find_device_by_id has to use such a slow lookup? I suspect nobody
> > > > simply needed a more optimized data structure for that purpose yet.
> > > > Would it be too hard to use radix tree for all lookups rather than
> > > > adding a shadow copy for memblocks?
> > >
> > > Greg, Rafael, this seems to be your domain. Do you have any opinion on
> > > this?
> >
> > No one has cared about the speed of that call as it has never been on
> > any "fast path" that I know of. And it should just be O(N), isn't it
> > just walking the list of devices in order?
>
> Which means that if you have to call it N times then it is O(N^2) and
> that is the case here because you are adding N memblocks. See
> memory_dev_init
> for each memblock
> add_memory_block
> init_memory_block
> find_memory_block_by_id # checks all existing devices
> register_memory
> device_register # add new device
>
> In this particular case find_memory_block_by_id is called mostly to make
> sure we are no re-registering something multiple times which shouldn't
> happen so it sucks to spend a lot of time on that. We might think of
> removing that for boot time but who knows what kind of surprises we
> might see from crazy HW setups.
Ok, so this is a self-inflicted issue, not a driver core issue :)
> > If the "memory subsystem" wants a faster lookup for their objects,
> > there's nothing stopping you from using your own data structure for the
> > pointers to the objects if you want. Just be careful about the lifetime
> > rules.
>
> The main question is whether replacing the linked list with a radix tree
> in the generic code is something more meaningful.
I strongly doubt it, it looks like you all are doing something very
specific to your subsystem that would need this type of speed/lookup. I
suggest doing it on your own for now.
thanks,
greg k-h
next prev parent reply other threads:[~2020-01-09 9:34 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-20 19:25 [PATCH] memory subsystem: cache memory blocks in radix tree to accelerate lookup Scott Cheloha
2019-11-21 9:34 ` David Hildenbrand
2019-11-21 9:35 ` David Hildenbrand
2019-11-21 19:59 ` [PATCH v2] drivers/base/memory.c: cache " Scott Cheloha
2019-11-25 6:36 ` kbuild test robot
2019-11-25 6:36 ` kbuild test robot
2019-12-17 19:32 ` [PATCH v3] " Scott Cheloha
2019-12-18 9:00 ` David Hildenbrand
2019-12-19 17:33 ` Scott Cheloha
2019-12-20 10:50 ` David Hildenbrand
2019-12-19 18:09 ` Nathan Lynch
2020-01-07 21:48 ` Michal Hocko
2020-01-08 13:36 ` David Hildenbrand
2020-01-08 14:21 ` Michal Hocko
2020-01-08 15:23 ` David Hildenbrand
2020-01-09 8:49 ` Michal Hocko
2020-01-09 8:56 ` Greg Kroah-Hartman
2020-01-09 9:19 ` Michal Hocko
2020-01-09 9:24 ` David Hildenbrand
2020-01-09 9:31 ` David Hildenbrand
2020-01-09 9:41 ` Greg Kroah-Hartman
2020-01-09 9:33 ` Greg Kroah-Hartman [this message]
2020-01-09 9:50 ` Michal Hocko
2020-01-09 9:48 ` Michal Hocko
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=20200109093359.GA44349@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=akpm@linux-foundation.org \
--cc=cheloha@linux.vnet.ibm.com \
--cc=david@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mhocko@kernel.org \
--cc=nathanl@linux.ibm.com \
--cc=rafael@kernel.org \
--cc=ricklind@linux.vnet.ibm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.