Revisiting checksum offloads in OVS#
OVS + OVN 2025 Fall Conference (Prague) digest Program Core pick Prague · 19–20 November 2025
David Marchand (Red Hat)
- Why: The userspace (DPDK) datapath's checksum/TSO API had grown buggy and tightly coupled to DPDK; this is a full revamp with per-NIC performance numbers — directly relevant to high-throughput OVS on real hardware.
- What: The OVS 3.6 redesign: a new
dp_packet::offloadsfield with four-state (unknown/bad/good/partial) Rx statuses for IP and L4, tunnel encapsulation expressed as status metadata, and TSO reduced to atso_segszvalue. Massively expanded unit tests caught real bugs (simple-match checksums, IPv6 UDP, conntrack ICMP-embedded checksums, IP fragmentation handling). OVS 3.7 adds an outer-UDP-checksum optimization: for valid inner IPv4/TCP, the outer UDP checksum equals the inner checksum sum, so it can be derived rather than computed — plus "partial segmentation" so HW TSO packets can use it. - How: Inner/outer statuses split via a 16-bit shift; netdev drivers (netdev-dpdk) translate OVS statuses into mbuf Tx flags, isolating OVS core from DPDK/kernel APIs. Measured on mlx5 CX-6 Dx: Geneve TCP 6.08 → 7.31 Gbit/s from the outer-UDP optimization, and 7.3 → 10.4 Gbit/s at 37% CPU once HW TSO works; comparative numbers across CX-6 Dx, X710 and E810, including which NICs lack outer UDP checksum offload entirely.
- Where applicable: OVS userspace/DPDK datapath; behavior is NIC-specific and the feature is still marked experimental (the talk asks whether to change that). The CX-6 Dx gap found here directly feeds the VDUSE talk's benchmark findings.
