Commit c6865cb3 authored by Tom Herbert's avatar Tom Herbert Committed by David S. Miller

rps: Inspect GRE encapsulated packets to get flow hash

Crack open GRE packets in __skb_get_rxhash to compute 4-tuple hash on
in encapsulated packet.  Note that this is used only when the
__skb_get_rxhash is taken, in particular only when the device does
not compute provide the rxhash (ie. feature is disabled).

This was tested by creating a single GRE tunnel between two 16 core
AMD machines.  200 netperf TCP_RR streams were ran with 1 byte
request and response size.

Without patch: 157497 tps, 50/90/99% latencies 1250/1292/1364 usecs
With patch: 325896 tps, 50/90/99% latencies 603/848/1169
Signed-off-by: default avatarTom Herbert <therbert@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e971b722
...@@ -2570,6 +2570,28 @@ void __skb_get_rxhash(struct sk_buff *skb) ...@@ -2570,6 +2570,28 @@ void __skb_get_rxhash(struct sk_buff *skb)
} }
switch (ip_proto) { switch (ip_proto) {
case IPPROTO_GRE:
if (pskb_may_pull(skb, nhoff + 16)) {
u8 *h = skb->data + nhoff;
__be16 flags = *(__be16 *)h;
/*
* Only look inside GRE if version zero and no
* routing
*/
if (!(flags & (GRE_VERSION|GRE_ROUTING))) {
proto = *(__be16 *)(h + 2);
nhoff += 4;
if (flags & GRE_CSUM)
nhoff += 4;
if (flags & GRE_KEY)
nhoff += 4;
if (flags & GRE_SEQ)
nhoff += 4;
goto again;
}
}
break;
default: default:
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment