Eric Dumazet bcdce7195e net: speedup sk_wake_async()
An incoming datagram must bring into cpu cache *lot* of cache lines,
in particular : (other parts omitted (hash chains, ip route cache...))

On 32bit arches :

offsetof(struct sock, sk_rcvbuf)       =0x30    (read)
offsetof(struct sock, sk_lock)         =0x34   (rw)

offsetof(struct sock, sk_sleep)        =0x50 (read)
offsetof(struct sock, sk_rmem_alloc)   =0x64   (rw)
offsetof(struct sock, sk_receive_queue)=0x74   (rw)

offsetof(struct sock, sk_forward_alloc)=0x98   (rw)

offsetof(struct sock, sk_callback_lock)=0xcc    (rw)
offsetof(struct sock, sk_drops)        =0xd8 (read if we add dropcount support, rw if frame dropped)
offsetof(struct sock, sk_filter)       =0xf8    (read)

offsetof(struct sock, sk_socket)       =0x138 (read)

offsetof(struct sock, sk_data_ready)   =0x15c   (read)


We can avoid sk->sk_socket and socket->fasync_list referencing on sockets
with no fasync() structures. (socket->fasync_list ptr is probably already in cache
because it shares a cache line with socket->wait, ie location pointed by sk->sk_sleep)

This avoids one cache line load per incoming packet for common cases (no fasync())

We can leave (or even move in a future patch) sk->sk_socket in a cold location

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2009-10-06 17:28:29 -07:00
..
2009-09-23 13:03:46 -05:00
2009-08-05 10:42:58 -07:00
2009-09-01 17:40:31 -07:00
2008-09-12 16:30:20 -07:00
2009-09-01 17:40:57 -07:00
2009-03-21 19:06:54 -07:00
2009-09-01 17:40:31 -07:00
2009-09-01 17:40:31 -07:00
2008-11-25 17:35:18 -08:00
2008-07-05 21:26:57 -07:00
2009-07-12 14:03:27 -07:00
2009-06-03 02:51:04 -07:00
2009-06-03 02:51:04 -07:00
2008-06-11 21:00:38 -07:00
2009-06-03 02:51:04 -07:00
2008-06-11 21:00:38 -07:00
2009-08-05 10:42:58 -07:00
2008-06-11 21:00:38 -07:00
2009-10-05 00:21:57 -07:00
2008-03-28 16:28:36 -07:00
2009-09-01 17:40:57 -07:00
2009-01-06 11:38:15 -07:00
2009-08-25 16:07:40 +02:00
2008-11-16 23:01:49 -08:00
2009-09-14 17:03:05 -07:00
2009-03-21 19:06:50 -07:00
2009-04-22 16:57:17 -04:00
2009-07-26 19:11:14 -07:00
2009-06-03 02:51:02 -07:00
2009-04-27 02:45:02 -07:00
2009-10-06 17:28:29 -07:00
2008-07-05 21:25:39 -07:00
2009-06-03 14:06:13 -04:00