On Tue, 2016-12-06 at 20:16 +0100, Paolo Abeni wrote: > On Tue, 2016-12-06 at 10:58 -0800, Eric Dumazet wrote: > > On Tue, 2016-12-06 at 19:31 +0100, Paolo Abeni wrote: > > > > > cacheline 2 boundary (128 bytes) is 8 bytes before sk_lock: cacheline 2 > > > includes also skc_refcnt and skc_rxhash from __sk_common (I use 'pahole > > > -E ...' to get the full blown output). skc_rxhash is read for each > > > packet in inet_recvmsg()/sock_rps_record_flow() if CONFIG_RPS is set. I > > > get a cache miss per packet there and inet_recvmsg() in my test takes > > > about 8% of the whole u/s processing time. > > > > Wait a minute, this sk->sk_rxhash should only be read on connected > > socket. Relying on it being 0 was okay only if we did not care > > of false sharing. And UDP sockets used to grab socket refcount, so we > > had false sharing a _lot_ in the past. > > Thank you for the pointer. > > > We must fix this if not already done properly. > > > > Can you take care of this problem ? > > I'll try, but it can be very soon: I'll have limited time and bad > internet connection up to next week.
Do not worry, I had a better idea anyway. I am testing it ;)