From: David Ahern <dsah...@gmail.com> Date: Tue, 17 Apr 2018 17:33:06 -0700
> IPv6 uses the same data struct for both control plane (FIB entries) and > data path (dst entries). This struct has elements needed for both paths > adding memory overhead and complexity (taking a dst hold in most places > but an additional reference on rt6i_ref in a few). Furthermore, because > of the dst_alloc tie, all FIB entries are allocated with GFP_ATOMIC. > > This patch set separates FIB entries from dst entries, better aligning > IPv6 code with IPv4, simplifying the reference counting and allowing > FIB entries added by userspace (not autoconf) to use GFP_KERNEL. It is > first step to a number of performance and scalability changes. > > The end result of this patch set: > - FIB entries (fib6_info): > /* size: 208, cachelines: 4, members: 25 */ > /* sum members: 207, holes: 1, sum holes: 1 */ > > - dst entries (rt6_info) > /* size: 240, cachelines: 4, members: 11 */ > > Versus the the single rt6_info struct today for both paths: > /* size: 320, cachelines: 5, members: 28 */ > > This amounts to a 35% reduction in memory use for FIB entries and a > 25% reduction for dst entries. Looks great, series applied, thanks David!