Re: [PATCH net-next] ipv6/route: inherit max_sizes from current netns
From: David Ahern
Date: Wed May 20 2020 - 13:27:06 EST
On 5/20/20 11:24 AM, Christian Brauner wrote:
> On Wed, May 20, 2020 at 10:54:21AM -0600, David Ahern wrote:
>> On 5/20/20 8:58 AM, Christian Brauner wrote:
>>> During NorthSec (cf. [1]) a very large number of unprivileged
>>> containers and nested containers are run during the competition to
>>> provide a safe environment for the various teams during the event. Every
>>> year a range of feature requests or bug reports come out of this and
>>> this year's no different.
>>> One of the containers was running a simple VPN server. There were about
>>> 1.5k users connected to this VPN over ipv6 and the container was setup
>>> with about 100 custom routing tables when it hit the max_sizes routing
>>> limit. After this no new connections could be established anymore,
>>> pinging didn't work anymore; you get the idea.
>>>
>>
>> should have been addressed by:
>>
>> commit d8882935fcae28bceb5f6f56f09cded8d36d85e6
>> Author: Eric Dumazet <edumazet@xxxxxxxxxx>
>> Date: Fri May 8 07:34:14 2020 -0700
>> ipv6: use DST_NOCOUNT in ip6_rt_pcpu_alloc()
>> We currently have to adjust ipv6 route gc_thresh/max_size depending
>> on number of cpus on a server, this makes very little sense.
>>
>>
>> Did your tests include this patch?
>
> No, it's also pretty hard to trigger. The conference was pretty good for
> this.
> I tested on top of rc6. I'm probably missing the big picture here, could
> you briefy explain how this commit fixes the problem we ran into?
>
ipv6 still has limits on the number of dst_entry's that can be created.
Eric traced the overflow to per-cpu caches in each FIB entry.
Larger systems (lots of cpus) x lots of unique connections = overflow
Eric's change removes the per-cpu dst caches from the counting, so only
exceptions (mtu, redirect) are now counted towards the limit.