Files
linux/include/linux
Eric Dumazet 567e4b7973 net: rfs: add hash collision detection
Receive Flow Steering is a nice solution but suffers from
hash collisions when a mix of connected and unconnected traffic
is received on the host, when flow hash table is populated.

Also, clearing flow in inet_release() makes RFS not very good
for short lived flows, as many packets can follow close().
(FIN , ACK packets, ...)

This patch extends the information stored into global hash table
to not only include cpu number, but upper part of the hash value.

I use a 32bit value, and dynamically split it in two parts.

For host with less than 64 possible cpus, this gives 6 bits for the
cpu number, and 26 (32-6) bits for the upper part of the hash.

Since hash bucket selection use low order bits of the hash, we have
a full hash match, if /proc/sys/net/core/rps_sock_flow_entries is big
enough.

If the hash found in flow table does not match, we fallback to RPS (if
it is enabled for the rxqueue).

This means that a packet for an non connected flow can avoid the
IPI through a unrelated/victim CPU.

This also means we no longer have to clear the table at socket
close time, and this helps short lived flows performance.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Acked-by: Tom Herbert <therbert@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-02-08 16:53:57 -08:00
..
2014-09-22 16:48:47 +09:00
2014-12-02 16:20:59 -08:00
2014-11-24 17:24:08 -05:00
2014-12-15 18:19:03 -08:00
2014-11-25 20:11:12 -08:00
2014-12-18 19:08:10 -08:00
2014-12-19 22:55:06 +01:00
2014-07-08 13:36:52 -07:00
2014-11-10 09:27:30 -07:00
2014-01-16 10:23:02 +10:30
2014-11-04 17:34:15 -08:00
2014-04-01 23:19:14 -04:00
2014-12-31 13:06:50 -05:00
2014-10-09 11:35:48 +03:00
2014-10-08 16:01:41 -04:00
2014-08-07 14:40:08 -04:00
2014-04-18 14:20:48 +02:00
2014-08-06 18:01:24 -07:00
2014-05-20 10:30:40 +09:00
2014-01-16 11:15:50 +01:00
2014-06-06 16:08:13 -07:00
2015-01-27 11:09:13 +01:00
2014-09-29 15:37:01 -04:00
2014-06-02 14:56:01 -07:00
2013-12-29 16:34:25 -05:00
2014-03-13 12:11:00 +10:30
2014-07-22 21:55:45 +01:00
2014-12-18 09:39:51 +01:00
2015-01-04 23:11:43 -05:00
2013-12-11 15:52:34 +01:00
2014-05-27 17:38:11 -07:00
2013-12-26 13:29:35 -05:00
2014-12-17 08:26:51 -05:00
2015-01-29 10:51:32 -08:00
2014-10-09 22:25:58 -04:00
2014-10-24 00:14:36 +02:00
2014-03-04 13:51:06 -05:00
2014-01-27 21:02:39 -08:00
2014-04-01 23:19:10 -04:00
2014-11-25 16:38:32 -05:00
2014-11-25 16:38:32 -05:00
2014-01-25 03:14:05 -05:00
2014-04-07 10:59:19 -07:00
2014-11-04 13:18:52 -07:00
2014-11-04 13:29:38 +00:00
2014-07-09 14:58:37 +01:00
2013-12-19 19:09:38 -05:00
2014-08-08 15:57:26 -07:00
2014-08-08 15:57:31 -07:00
2015-01-03 14:32:57 -05:00
2014-06-12 00:21:11 -04:00
2014-02-17 15:01:37 -08:00
2014-06-04 16:53:57 -07:00
2014-08-08 15:57:24 -07:00
2014-06-04 16:53:56 -07:00
2014-11-06 14:57:27 -08:00
2014-09-23 21:40:48 -07:00
2014-11-28 16:08:16 +01:00
2014-09-16 15:02:55 -06:00
2014-12-09 12:05:24 +02:00
2014-04-07 16:35:53 -07:00
2014-06-04 16:53:57 -07:00
2014-12-15 23:49:28 +02:00