Documentation: networking: add RSS information
Signed-off-by: Madalin Bucur <madalin.bucur@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
056057e288
commit
0659191630
@ -13,6 +13,7 @@ Contents
|
|||||||
- Configuring DPAA Ethernet in your kernel
|
- Configuring DPAA Ethernet in your kernel
|
||||||
- DPAA Ethernet Frame Processing
|
- DPAA Ethernet Frame Processing
|
||||||
- DPAA Ethernet Features
|
- DPAA Ethernet Features
|
||||||
|
- DPAA IRQ Affinity and Receive Side Scaling
|
||||||
- Debugging
|
- Debugging
|
||||||
|
|
||||||
DPAA Ethernet Overview
|
DPAA Ethernet Overview
|
||||||
@ -147,7 +148,10 @@ gradually.
|
|||||||
|
|
||||||
The driver has Rx and Tx checksum offloading for UDP and TCP. Currently the Rx
|
The driver has Rx and Tx checksum offloading for UDP and TCP. Currently the Rx
|
||||||
checksum offload feature is enabled by default and cannot be controlled through
|
checksum offload feature is enabled by default and cannot be controlled through
|
||||||
ethtool.
|
ethtool. Also, rx-flow-hash and rx-hashing was added. The addition of RSS
|
||||||
|
provides a big performance boost for the forwarding scenarios, allowing
|
||||||
|
different traffic flows received by one interface to be processed by different
|
||||||
|
CPUs in parallel.
|
||||||
|
|
||||||
The driver has support for multiple prioritized Tx traffic classes. Priorities
|
The driver has support for multiple prioritized Tx traffic classes. Priorities
|
||||||
range from 0 (lowest) to 3 (highest). These are mapped to HW workqueues with
|
range from 0 (lowest) to 3 (highest). These are mapped to HW workqueues with
|
||||||
@ -166,6 +170,68 @@ classes as follows:
|
|||||||
tc qdisc add dev <int> root handle 1: \
|
tc qdisc add dev <int> root handle 1: \
|
||||||
mqprio num_tc 4 map 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 hw 1
|
mqprio num_tc 4 map 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 hw 1
|
||||||
|
|
||||||
|
DPAA IRQ Affinity and Receive Side Scaling
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
Traffic coming on the DPAA Rx queues or on the DPAA Tx confirmation
|
||||||
|
queues is seen by the CPU as ingress traffic on a certain portal.
|
||||||
|
The DPAA QMan portal interrupts are affined each to a certain CPU.
|
||||||
|
The same portal interrupt services all the QMan portal consumers.
|
||||||
|
|
||||||
|
By default the DPAA Ethernet driver enables RSS, making use of the
|
||||||
|
DPAA FMan Parser and Keygen blocks to distribute traffic on 128
|
||||||
|
hardware frame queues using a hash on IP v4/v6 source and destination
|
||||||
|
and L4 source and destination ports, in present in the received frame.
|
||||||
|
When RSS is disabled, all traffic received by a certain interface is
|
||||||
|
received on the default Rx frame queue. The default DPAA Rx frame
|
||||||
|
queues are configured to put the received traffic into a pool channel
|
||||||
|
that allows any available CPU portal to dequeue the ingress traffic.
|
||||||
|
The default frame queues have the HOLDACTIVE option set, ensuring that
|
||||||
|
traffic bursts from a certain queue are serviced by the same CPU.
|
||||||
|
This ensures a very low rate of frame reordering. A drawback of this
|
||||||
|
is that only one CPU at a time can service the traffic received by a
|
||||||
|
certain interface when RSS is not enabled.
|
||||||
|
|
||||||
|
To implement RSS, the DPAA Ethernet driver allocates an extra set of
|
||||||
|
128 Rx frame queues that are configured to dedicated channels, in a
|
||||||
|
round-robin manner. The mapping of the frame queues to CPUs is now
|
||||||
|
hardcoded, there is no indirection table to move traffic for a certain
|
||||||
|
FQ (hash result) to another CPU. The ingress traffic arriving on one
|
||||||
|
of these frame queues will arrive at the same portal and will always
|
||||||
|
be processed by the same CPU. This ensures intra-flow order preservation
|
||||||
|
and workload distribution for multiple traffic flows.
|
||||||
|
|
||||||
|
RSS can be turned off for a certain interface using ethtool, i.e.
|
||||||
|
|
||||||
|
# ethtool -N fm1-mac9 rx-flow-hash tcp4 ""
|
||||||
|
|
||||||
|
To turn it back on, one needs to set rx-flow-hash for tcp4/6 or udp4/6:
|
||||||
|
|
||||||
|
# ethtool -N fm1-mac9 rx-flow-hash udp4 sfdn
|
||||||
|
|
||||||
|
There is no independent control for individual protocols, any command
|
||||||
|
run for one of tcp4|udp4|ah4|esp4|sctp4|tcp6|udp6|ah6|esp6|sctp6 is
|
||||||
|
going to control the rx-flow-hashing for all protocols on that interface.
|
||||||
|
|
||||||
|
Besides using the FMan Keygen computed hash for spreading traffic on the
|
||||||
|
128 Rx FQs, the DPAA Ethernet driver also sets the skb hash value when
|
||||||
|
the NETIF_F_RXHASH feature is on (active by default). This can be turned
|
||||||
|
on or off through ethtool, i.e.:
|
||||||
|
|
||||||
|
# ethtool -K fm1-mac9 rx-hashing off
|
||||||
|
# ethtool -k fm1-mac9 | grep hash
|
||||||
|
receive-hashing: off
|
||||||
|
# ethtool -K fm1-mac9 rx-hashing on
|
||||||
|
Actual changes:
|
||||||
|
receive-hashing: on
|
||||||
|
# ethtool -k fm1-mac9 | grep hash
|
||||||
|
receive-hashing: on
|
||||||
|
|
||||||
|
Please note that Rx hashing depends upon the rx-flow-hashing being on
|
||||||
|
for that interface - turning off rx-flow-hashing will also disable the
|
||||||
|
rx-hashing (without ethtool reporting it as off as that depends on the
|
||||||
|
NETIF_F_RXHASH feature flag).
|
||||||
|
|
||||||
Debugging
|
Debugging
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user