On Wed, 29 Oct 2025 at 12:02, David Marchand via dev
<[email protected]> wrote:
>
> Outer UDP checksum for TSO packets can be computed in software
> regardless of how segmentation is done (SW or HW).
> This property comes from nested checksums that cancels impact of the
> inner L4 payload to the outer checksum.
>
> Performance was evaluated using iperf between two virtual machines
> hosted by two RHEL 9 hypervisors running OVS-DPDK.
>
> The main limiting factor is on the receiving endpoint as the receiving
> virtual machine seems too slow to dequeue packets coming from the
> hypervisor (tx retries/tx drops seen on the vhost-user port).
>
> A little warning on those numbers that should be taken simply as an
> indication of the improvement and not as absolute numbers:
> - the VMs and OVS-DPDKs were running from numa 0 while the E810 nic
>   is placed in numa 1,
> - the random drops on the receiving side means that there is some
>   variance on the numbers between runs,
>
> Main branch:
>
> Switching to 0000:3b:00.0 (mlx5_core)
> IPv4/IPv4 [  5]   0.00-1.00   sec   767 MBytes  6.43 Gbits/sec   39   2.10 
> MBytes
> IPv4/IPv6 [  5]   0.00-1.00   sec   768 MBytes  6.44 Gbits/sec    0   2.86 
> MBytes
> IPv6/IPv4 [  5]   0.00-1.00   sec   771 MBytes  6.46 Gbits/sec    0   2.56 
> MBytes
> IPv6/IPv6 [  5]   0.00-1.00   sec   639 MBytes  5.36 Gbits/sec  416   1.77 
> MBytes
> Switching to 0000:5e:00.0 (i40e)
> IPv4/IPv4 [  5]   0.00-1.00   sec   583 MBytes  4.89 Gbits/sec  990    228 
> KBytes
> IPv4/IPv6 [  5]   0.00-1.00   sec   646 MBytes  5.42 Gbits/sec    0   2.12 
> MBytes
> IPv6/IPv4 [  5]   0.00-1.00   sec   633 MBytes  5.31 Gbits/sec  465    538 
> KBytes
> IPv6/IPv6 [  5]   0.00-1.00   sec   657 MBytes  5.51 Gbits/sec    0   2.14 
> MBytes
> Switching to 0000:d8:00.0 (ice)
> IPv4/IPv4 [  5]   0.00-1.00   sec  1.27 GBytes  10.9 Gbits/sec   64   1.52 
> MBytes
> IPv4/IPv6 [  5]   0.00-1.00   sec  1.16 GBytes  9.93 Gbits/sec  110   2.30 
> MBytes
> IPv6/IPv4 [  5]   0.00-1.00   sec  1.17 GBytes  10.1 Gbits/sec  112   2.35 
> MBytes
> IPv6/IPv6 [  5]   0.00-1.00   sec  1.14 GBytes  9.79 Gbits/sec   94   1.75 
> MBytes
>
> After series:
>
> Switching to 0000:3b:00.0 (mlx5_core)
> IPv4/IPv4 [  5]   0.00-1.00   sec  1.10 GBytes  9.49 Gbits/sec  493   1.14 
> MBytes
> IPv4/IPv6 [  5]   0.00-1.00   sec  1.08 GBytes  9.30 Gbits/sec  162   1.77 
> MBytes
> IPv6/IPv4 [  5]   0.00-1.00   sec  1.10 GBytes  9.43 Gbits/sec  1354    642 
> KBytes
> IPv6/IPv6 [  5]   0.00-1.00   sec  1.10 GBytes  9.44 Gbits/sec  103   1.36 
> MBytes
> Switching to 0000:5e:00.0 (i40e)
> IPv4/IPv4 [  5]   0.00-1.00   sec  1.13 GBytes  9.71 Gbits/sec  516   1.49 
> MBytes
> IPv4/IPv6 [  5]   0.00-1.00   sec  1.29 GBytes  11.0 Gbits/sec    7   2.54 
> MBytes
> IPv6/IPv4 [  5]   0.00-1.00   sec  1.28 GBytes  11.0 Gbits/sec  1220    920 
> KBytes
> IPv6/IPv6 [  5]   0.00-1.00   sec  1.32 GBytes  11.3 Gbits/sec  116   1.89 
> MBytes
> Switching to 0000:d8:00.0 (ice)
> IPv4/IPv4 [  5]   0.00-1.00   sec  1.23 GBytes  10.6 Gbits/sec  1867    400 
> KBytes
> IPv4/IPv6 [  5]   0.00-1.00   sec  1.17 GBytes  10.0 Gbits/sec  113   2.28 
> MBytes
> IPv6/IPv4 [  5]   0.00-1.00   sec  1.22 GBytes  10.5 Gbits/sec  102   2.33 
> MBytes
> IPv6/IPv6 [  5]   0.00-1.00   sec  1.15 GBytes  9.86 Gbits/sec  109   2.29 
> MBytes
>
>
> --
> David Marchand
>
> David Marchand (8):
>   netdev-dpdk: Dump checksum offloads flags for debug.
>   netdev-dpdk: Fix rx queue fill level with QoS.
>   netdev-dpdk: Enforce mono-segment mbufs.
>   netdev-dpdk: Fix TSO packet length check for tunnels.
>   dp-packet-gso: Request UDP checksum when needed.
>   dp-packet: Optimize outer checksum for nested checksums.
>   dp-packet-gso: Refactor software segmentation code.
>   netdev: Use HW segmentation without outer UDP checksum.
>
>  lib/dp-packet-gso.c | 296 ++++++++++++++++++++++++++------------------
>  lib/dp-packet-gso.h |   4 +-
>  lib/dp-packet.c     |  20 +--
>  lib/dp-packet.h     |  12 ++
>  lib/netdev-dpdk.c   | 129 +++++++++----------
>  lib/netdev.c        |  36 +++---
>  lib/packets.c       | 117 +++++++++++++++--
>  lib/packets.h       |   1 +
>  8 files changed, 392 insertions(+), 223 deletions(-)

Maxime reported a regression on UDP (with 0 checksum) encapsulated in Geneve.
I have a (really simple) fix.

I think it is worth writing down all the checksums combinations OVS
support, in the documentation.

And, in any case, this series deserves more unit tests.

I'll send a v2 during this week hopefully.


-- 
David Marchand

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to