net: core: rework basic flow dissection helper
authorPaolo Abeni <pabeni@redhat.com>
Fri, 4 May 2018 09:32:59 +0000 (11:32 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 8 May 2018 04:02:36 +0000 (00:02 -0400)
commit72a338bcc6ae51e01c95d687e5d775e3fe52eff1
tree54022a6c35c31447e65387975b6b7d28c393bfda
parent62515f95b45818ddd925569504fe52f4afd3eb7a
net: core: rework basic flow dissection helper

When the core networking needs to detect the transport offset in a given
packet and parse it explicitly, a full-blown flow_keys struct is used for
storage.
This patch introduces a smaller keys store, rework the basic flow dissect
helper to use it, and apply this new helper where possible - namely in
skb_probe_transport_header(). The used flow dissector data structures
are renamed to match more closely the new role.

The above gives ~50% performance improvement in micro benchmarking around
skb_probe_transport_header() and ~30% around eth_get_headlen(), mostly due
to the smaller memset. Small, but measurable improvement is measured also
in macro benchmarking.

v1 -> v2: use the new helper in eth_get_headlen() and skb_get_poff(),
  as per DaveM suggestion

Suggested-by: David Miller <davem@davemloft.net>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/skbuff.h
include/net/flow_dissector.h
net/core/flow_dissector.c
net/ethernet/eth.c