Re: [PATCH -next v3 0/9] rbtree: Cache leftmost node internally

From: Davidlohr Bueso
Date: Wed Jul 19 2017 - 19:01:11 EST


On Wed, 19 Jul 2017, Andrew Morton wrote:

On Thu, 29 Jun 2017 10:15:44 -0700 Davidlohr Bueso <dave@xxxxxxxxxxxx> wrote:

Changes from v2 (https://lkml.org/lkml/2017/6/8/857):
- Fixed 0day reported crash for drm_mm selftest program. We were
not correctly using the cached version of rbtree with the allocated
nodes.
- Added cfq patch to use internal rbtree caching.
- Added Christian's and Jan's reviews.

Changes from v1 (https://marc.info/?l=linux-kernel&m=149611025616685):
- No longer rfc.
- Removed bogus semimcolon in rb_first_cached()
- Updated missing interval tree user drivers/infiniband/hw/hfi1/
- Removed redundant @cached arg in when erasing a node.
- Added more patches that make use of rb_first_cached(), which I
thought might be worth it: procfs and epoll.
- Cc more people for patch 5, which touches drivers such as infiniband
and gpu. The rest of the changes are pretty covered with the current
Cc'ed maintainers and mm folks.

Hi,

Here's a proposal for extending rbtrees to internally cache the leftmost
node such that we can have fast overlap check optimization for all interval
tree users[1]. The benefits of this series are that:

(i) Unify users that do internal leftmost node caching.

That's nice. Except the series adds more lines than it removes.

(ii) Optimize all interval tree users.

Was any attempt made to quantify the benefit?

Yes, but ultimately it will depend a lot on the workload and size of the tree.
For bare numbers, on a Xeon E5-2450 @ 2.10GHz the cost of a rb_first() was
~60 cycles for 100 nodes, and ~75 cycles with 1000 nodes. fwiw.

Thanks,
Davidlohr