Re: Regression: kernel 4.14 an later very slow with many ipsec tunnels

From: Steffen Klassert
Date: Fri Sep 14 2018 - 01:07:02 EST


On Thu, Sep 13, 2018 at 11:03:25PM +0200, Florian Westphal wrote:
> David Miller <davem@xxxxxxxxxxxxx> wrote:
> > From: Florian Westphal <fw@xxxxxxxxx>
> > Date: Thu, 13 Sep 2018 18:38:48 +0200
> >
> > > Wolfgang Walter <linux@xxxxxxx> wrote:
> > >> What I can say is that it depends mainly on number of policy rules and SA.
> > >
> > > Thats already a good hint, I guess we're hitting long hash chains in
> > > xfrm_policy_lookup_bytype().
> >
> > I don't really see how recent changes can influence that.
>
> I don't think there is a recent change that did this.
>
> Walter says < 4.14 is ok, so this is likely related to flow cache removal.
>
> F.e. it looks like all prefixed policies end up in a linked list
> (net->xfrm.policy_inexact) and are not even in a hash table.
>
> I am staring at b58555f1767c9f4e330fcf168e4e753d2d9196e0
> but can't figure out how to configure that away from the
> 'no hashing for prefixed policies' default or why we even have
> policy_inexact in first place :/

The hash threshold can be configured like this:

ip x p set hthresh4 0 0

This sets the hash threshold to local /0 and remote /0 netmasks.
With this configuration, all policies should go to the hashtable.
This might help to balance the hash chains better.

Default hash thresholds are local /32 and remote /32 netmasks, so
all prefixed policies go to the inexact list.

To view the configuration:

ip -s -s x p count