Lines Matching +full:packet +full:- +full:processor

1 .. SPDX-License-Identifier: GPL-2.0
13 multi-processor systems.
17 - RSS: Receive Side Scaling
18 - RPS: Receive Packet Steering
19 - RFS: Receive Flow Steering
20 - Accelerated Receive Flow Steering
21 - XPS: Transmit Packet Steering
28 (multi-queue). On reception, a NIC can send different packets to different
30 applying a filter to each packet that assigns it to one of a small number
33 generally known as “Receive-side Scaling” (RSS). The goal of RSS and
35 Multi-queue distribution can also be used for traffic prioritization, but
39 and/or transport layer headers-- for example, a 4-tuple hash over
40 IP addresses and TCP ports of a packet. The most common hardware
41 implementation of RSS uses a 128-entry indirection table where each entry
42 stores a queue number. The receive queue for a packet is determined
44 packet (usually a Toeplitz hash), taking this number as a key into the
52 "Symmetric-XOR" is a type of RSS algorithms that achieves this hash
64 can be directed to their own receive queue. Such “n-tuple” filters can
65 be configured from ethtool (--config-ntuple).
69 -----------------
71 The driver for a multi-queue capable NIC typically provides a kernel
83 commands (--show-rxfh-indir and --set-rxfh-indir). Modifying the
93 signaling path for PCIe devices uses message signaled interrupts (MSI-X),
96 an IRQ may be handled on any CPU. Because a non-negligible part of packet
99 affinity of each interrupt see Documentation/core-api/irq/irq-affinity.rst. Some systems
111 NIC maximum, if lower). The most efficient high-rate configuration
117 Per-cpu load can be observed using the mpstat utility, but note that on
126 Modern NICs support creating multiple co-existing RSS configurations
135 # ethtool -X eth0 hfunc toeplitz context new
142 # ethtool -x eth0 context 1
147 # ethtool -X eth0 equal 2 context 1
148 # ethtool -x eth0 context 1
154 To make use of the new context direct traffic to it using an n-tuple
157 # ethtool -N eth0 flow-type tcp6 dst-port 22 context 1
162 # ethtool -N eth0 delete 1023
163 # ethtool -X eth0 context 1 delete
166 RPS: Receive Packet Steering
169 Receive Packet Steering (RPS) is logically a software implementation of
173 above the interrupt handler. This is accomplished by placing the packet
180 introduce inter-processor interrupts (IPIs))
183 a driver sends a packet up the network stack with netif_rx() or
185 selects the queue that should process a packet.
188 flow hash over the packet’s addresses or ports (2-tuple or 4-tuple hash
190 associated flow of the packet. The hash is either provided by hardware
192 the receive descriptor for the packet; this would usually be the same
194 skb->hash and can be used elsewhere in the stack as a hash of the
195 packet’s flow.
198 RPS may enqueue packets for processing. For each received packet,
200 of the list. The indexed CPU is the target for processing the packet,
201 and the packet is queued to the tail of that CPU’s backlog queue. At
209 -----------------
216 /sys/class/net/<dev>/queues/rx-<n>/rps_cpus
220 CPU. Documentation/core-api/irq/irq-affinity.rst explains how CPUs are assigned to
233 For a multi-queue system, if RSS is configured so that a hardware
241 --------------
244 reordering. The trade-off to sending all packets from the same flow
245 to the same CPU is CPU load imbalance if flows vary in packet rate.
254 destination CPU approaches saturation. Once a CPU's input packet
256 net.core.netdev_max_backlog), the kernel starts a per-flow packet
258 default, half) of these packets when a new packet arrives, then the
259 new packet is dropped. Packets from other flows are still only
260 dropped once the input packet queue reaches netdev_max_backlog.
261 No packets are dropped when the input packet queue length is below
277 Per-flow rate is calculated by hashing each packet into a hashtable
278 bucket and incrementing a per-bucket counter. The hash function is
280 be much larger than the number of CPUs, flow limit has finer-grained
298 The feature depends on the input packet queue length to exceed
312 consuming the packet is running. RFS relies on the same RPS mechanisms
345 CPU's backlog when a packet in this flow was last enqueued. Each backlog
354 CPU for packet processing (from get_rps_cpu()) the rps_sock_flow table
355 and the rps_dev_flow table of the queue that the packet was received on
358 table), the packet is enqueued onto that CPU’s backlog. If they differ,
362 - The current CPU's queue head counter >= the recorded tail counter
364 - The current CPU is unset (>= nr_cpu_ids)
365 - The current CPU is offline
367 After this check, the packet is sent to the (possibly updated) current
375 -----------------
383 The number of entries in the per-queue flow table are set through::
385 /sys/class/net/<dev>/queues/rx-<n>/rps_flow_cnt
400 For a multi-queue device, the rps_flow_cnt for each queue might be
410 Accelerated RFS is to RFS what RSS is to RPS: a hardware-accelerated load
427 is maintained by the NIC driver. This is an auto-generated reverse map of
435 -----------------------------
452 XPS: Transmit Packet Steering
455 Transmit Packet Steering is a mechanism for intelligently selecting
456 which transmit queue to use when transmitting a packet on a multi-queue
480 busy polling multi-threaded workloads where there are challenges in
487 the same queue-association that a given application is polling on. This
494 CPUs/receive-queues that may use that queue to transmit. The reverse
495 mapping, from CPUs to transmit queues or from receive-queues to transmit
497 transmitting the first packet in a flow, the function get_xps_queue() is
499 for the socket connection for a match in the receive queue-to-transmit queue
501 running CPU as a key into the CPU-to-queue lookup table. If the
514 skb->ooo_okay is set for a packet in the flow. This flag indicates that
522 -----------------
526 how, XPS is configured at device init. The mapping of CPUs/receive-queues
531 /sys/class/net/<dev>/queues/tx-<n>/xps_cpus
533 For selection based on receive-queues map::
535 /sys/class/net/<dev>/queues/tx-<n>/xps_rxqs
542 has no effect, since there is no choice in this case. In a multi-queue
552 explicitly configured mapping receive-queue(s) to transmit queue(s). If the
553 user configuration for receive-queue map does not apply, then the transmit
560 These are rate-limitation mechanisms implemented by HW, where currently
561 a max-rate attribute is supported, by setting a Mbps value to::
563 /sys/class/net/<dev>/queues/tx-<n>/tx_maxrate
579 - Tom Herbert (therbert@google.com)
580 - Willem de Bruijn (willemb@google.com)