aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/networking
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2018-04-26 15:10:06 -0400
committerDavid S. Miller <davem@davemloft.net>2018-04-26 15:10:06 -0400
commitcb586c63e3fc5b227c51fd8c4cb40b34d3750645 (patch)
tree7d837467230112425cf5bb43a92102ef7047545a /Documentation/networking
parentMerge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net (diff)
parentselftests: udp gso benchmark (diff)
downloadlinux-dev-cb586c63e3fc5b227c51fd8c4cb40b34d3750645.tar.xz
linux-dev-cb586c63e3fc5b227c51fd8c4cb40b34d3750645.zip
Merge branch 'udp-gso'
Willem de Bruijn says: ==================== udp gso Segmentation offload reduces cycles/byte for large packets by amortizing the cost of protocol stack traversal. This patchset implements GSO for UDP. A process can concatenate and submit multiple datagrams to the same destination in one send call by setting socket option SOL_UDP/UDP_SEGMENT with the segment size, or passing an analogous cmsg at send time. The stack will send the entire large (up to network layer max size) datagram through the protocol layer. At the GSO layer, it is broken up in individual segments. All receive the same network layer header and UDP src and dst port. All but the last segment have the same UDP header, but the last may differ in length and checksum. Initial results show a significant reduction in UDP cycles/byte. See the main patch for more details and benchmark results. udp 876 MB/s 14873 msg/s 624666 calls/s 11,205,777,429 cycles udp gso 2139 MB/s 36282 msg/s 36282 calls/s 11,204,374,561 cycles The patch set is broken down as follows: - patch 1 is a prerequisite: code rearrangement, noop otherwise - patch 2 implements the gso logic - patch 3 adds protocol stack support for UDP_SEGMENT - patch 4,5,7 are refinements - patch 6 adds the cmsg interface - patch 8..11 are tests This idea was presented previously at netconf 2017-2 http://vger.kernel.org/netconf2017_files/rx_hardening_and_udp_gso.pdf Changes v1 -> v2 - Convert __udp_gso_segment to modify headers after skb_segment - Split main patch into two, one for gso logic, one for UDP_SEGMENT Changes RFC -> v1 - MSG_MORE: fixed, by allowing checksum offload with corking if gso - SKB_GSO_UDP_L4: made independent from SKB_GSO_UDP and removed skb_is_ufo() wrapper - NETIF_F_GSO_UDP_L4: add to netdev_features_string and to netdev-features.txt add BUILD_BUG_ON to match SKB_GSO_UDP_L4 value - UDP_MAX_SEGMENTS: introduce limit on number of segments per gso skb to avoid extreme cases like IP_MAX_MTU/IPV4_MIN_MTU - CHECKSUM_PARTIAL: test against missing feature after ndo_features_check if not supported return error, analogous to udp_send_check - MSG_ZEROCOPY: removed, deferred for now ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'Documentation/networking')
-rw-r--r--Documentation/networking/netdev-features.txt7
1 files changed, 7 insertions, 0 deletions
diff --git a/Documentation/networking/netdev-features.txt b/Documentation/networking/netdev-features.txt
index c77f9d57eb91..c4a54c162547 100644
--- a/Documentation/networking/netdev-features.txt
+++ b/Documentation/networking/netdev-features.txt
@@ -113,6 +113,13 @@ whatever headers there might be.
NETIF_F_TSO_ECN means that hardware can properly split packets with CWR bit
set, be it TCPv4 (when NETIF_F_TSO is enabled) or TCPv6 (NETIF_F_TSO6).
+ * Transmit UDP segmentation offload
+
+NETIF_F_GSO_UDP_GSO_L4 accepts a single UDP header with a payload that exceeds
+gso_size. On segmentation, it segments the payload on gso_size boundaries and
+replicates the network and UDP headers (fixing up the last one if less than
+gso_size).
+
* Transmit DMA from high memory
On platforms where this is relevant, NETIF_F_HIGHDMA signals that