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

Davidlohr Bueso
2017-07-19T23:01:07Z

On Wed, 19 Jul 2017, Andrew Morton wrote:

>On Thu, 29 Jun 2017 10:15:44 -0700 Davidlohr Bueso <dave@stgolabs.net> 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