[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <bde967f7aa5d401b8f968b15dc33acfd@AcuMS.aculab.com>
Date: Wed, 26 Jul 2023 14:06:23 +0000
From: David Laight <David.Laight@...LAB.COM>
To: 'Eric Dumazet' <edumazet@...gle.com>
CC: Paolo Abeni <pabeni@...hat.com>, "willemdebruijn.kernel@...il.com"
<willemdebruijn.kernel@...il.com>, "davem@...emloft.net"
<davem@...emloft.net>, "dsahern@...nel.org" <dsahern@...nel.org>,
"kuba@...nel.org" <kuba@...nel.org>, "netdev@...r.kernel.org"
<netdev@...r.kernel.org>
Subject: RE: [PATCH 1/2] Move hash calculation inside udp4_lib_lookup2()
From: Eric Dumazet
> Sent: 26 July 2023 15:04
>
> On Wed, Jul 26, 2023 at 4:02 PM David Laight <David.Laight@...lab.com> wrote:
> >
> > From: Paolo Abeni
> > > Sent: 26 July 2023 14:44
> > >
> > > On Wed, 2023-07-26 at 12:05 +0000, David Laight wrote:
> > > > Pass the udptable address into udp4_lib_lookup2() instead of the hash slot.
> > > >
> > > > While ipv4_portaddr_hash(net, IP_ADDR_ANY, 0) is constant for each net
> > > > (the port is an xor) the value isn't saved.
> > > > Since the hash function doesn't get simplified when passed zero the hash
> > >
> > > Are you sure? could you please objdump and compare the binary code
> > > generated before and after the patch? In theory all the callers up to
> > > __jhash_final() included should be inlined, and the compiler should be
> > > able to optimze at least rol32(0, <n>).
> >
> > I looked the hash is 20+ instructions and pretty much all of
> > them appeared twice.
> > (I'm in the wrong building to have a buildable kernel tree.)
> >
> > It has to be said that ipv4_portaddr_hash(net, IPADDR_ANY, port)
> > could just be net_hash_mix(net) ^ port.
> > (Or maybe you could use a different random value.)
> >
> > I'm not even sure the relatively expensive mixing of 'saddr'
> > is needed - it is one of the local IPv4 addresses.
> > Mixing in the remote address for connected sockets might
> > be useful for any server code that uses a lot of connected
> > udp sockets - but that isn't done.
> >
> > We will have hundreds of udp sockets with different ports that
> > are not connected (I don't know if they get bound to a local
> > address). So a remote address hash wouldn't help.
> >
> > If you look at the generated code for __udp4_lib_lookup()
> > it is actually quite horrid.
> > Too many called functions with too many parameters.
> > Things spill to the stack all the time.
> >
> > The reuse_port code made it a whole lot worse.
> >
>
> Maybe ... Please show us performance numbers.
>
> If less than 1%, I would not bother changing this code, making future
> backports more risky.
I didn't :-)
David
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)
Powered by blists - more mailing lists