]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commit
net: reorder 'struct net' fields to avoid false sharing
authorEric Dumazet <edumazet@google.com>
Fri, 18 Oct 2019 22:20:05 +0000 (15:20 -0700)
committerStefan Bader <stefan.bader@canonical.com>
Tue, 12 Nov 2019 17:47:43 +0000 (18:47 +0100)
commit8cad669db928290402bc21c83120199ed5cab5aa
treecb28a727f78294441d21614dd434eeb3102afc46
parentb0bd95eeaa05e813658eaf5309ae374d6b44c0a8
net: reorder 'struct net' fields to avoid false sharing

BugLink: https://bugs.launchpad.net/bugs/1852111
[ Upstream commit 2a06b8982f8f2f40d03a3daf634676386bd84dbc ]

Intel test robot reported a ~7% regression on TCP_CRR tests
that they bisected to the cited commit.

Indeed, every time a new TCP socket is created or deleted,
the atomic counter net->count is touched (via get_net(net)
and put_net(net) calls)

So cpus might have to reload a contended cache line in
net_hash_mix(net) calls.

We need to reorder 'struct net' fields to move @hash_mix
in a read mostly cache line.

We move in the first cache line fields that can be
dirtied often.

We probably will have to address in a followup patch
the __randomize_layout that was added in linux-4.13,
since this might break our placement choices.

Fixes: 355b98553789 ("netns: provide pure entropy for net_hash_mix()")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: kernel test robot <oliver.sang@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Connor Kuehl <connor.kuehl@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
include/net/net_namespace.h