[PATCH net-next] openvswitch: raise internal port TSO limit

Subsystems: networking [general], openvswitch, the rest

COLD28d

3 messages, 2 authors, 28d ago · open the first message on its own page

[PATCH net-next] openvswitch: raise internal port TSO limit

From: Wang Zhan <hidden>
Date: 2026-09-10 13:16:46

Set the internal port TSO limit to GSO_MAX_SIZE (512 KB), as for
loopback and veth. This allows the admin/user to set a GSO limit up to
this value, to use BIG TCP for traffic routed through the internal port.

Only the capability limit changes: the IPv4 and IPv6 GSO and GRO limits
remain at 64 KiB until changed by the administrator.

Validation used a same-host test with a temporary OVS bridge, a veth pair,
and a network namespace:

  TCP client -> OVS internal -> OVS bridge -> veth -> TCP server

The veth endpoints were BIG TCP capable throughout the test, and only the
OVS internal port limits changed between 64 KiB and 524280 bytes. A single
iperf3 3.19 TCP flow, run separately over IPv4 and IPv6 with six
alternating runs per state (`-t 15 -O 5`, fixed CPU affinity and port
tuple), increased throughput by 18.1% for IPv4 and 34.7% for IPv6:

  protocol  BIG TCP off  BIG TCP on   CV off / on
  TCP/IPv4  65.567 Gbps  77.420 Gbps  1.12% / 0.37%
  TCP/IPv6  55.355 Gbps  74.568 Gbps  1.20% / 0.68%

Assisted-by: LLM
Signed-off-by: Wang Zhan <redacted>
---
 net/openvswitch/vport-internal_dev.c | 1 +
 1 file changed, 1 insertion(+)
diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c
index 125d310871e93..73f5184afba42 100644
--- a/net/openvswitch/vport-internal_dev.c
+++ b/net/openvswitch/vport-internal_dev.c
@@ -116,6 +116,7 @@ static void do_setup(struct net_device *netdev)
 	netdev->hw_enc_features = netdev->features;
 	netdev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX;
 	netdev->hw_features = netdev->features;
+	netif_set_tso_max_size(netdev, GSO_MAX_SIZE);
 
 	eth_hw_addr_random(netdev);
 }
base-commit: 211f2a875f6f447745d80d5762d6d614503ac84a
-- 
2.47.3

Re: [PATCH net-next] openvswitch: raise internal port TSO limit

From: Ilya Maximets <i.maximets@ovn.org>
Date: 2026-09-14 21:16:12

On 9/10/26 3:16 PM, Wang Zhan wrote:
Set the internal port TSO limit to GSO_MAX_SIZE (512 KB), as for
loopback and veth. This allows the admin/user to set a GSO limit up to
this value, to use BIG TCP for traffic routed through the internal port.

Only the capability limit changes: the IPv4 and IPv6 GSO and GRO limits
remain at 64 KiB until changed by the administrator.

Validation used a same-host test with a temporary OVS bridge, a veth pair,
and a network namespace:

  TCP client -> OVS internal -> OVS bridge -> veth -> TCP server

The veth endpoints were BIG TCP capable throughout the test, and only the
OVS internal port limits changed between 64 KiB and 524280 bytes. A single
iperf3 3.19 TCP flow, run separately over IPv4 and IPv6 with six
alternating runs per state (`-t 15 -O 5`, fixed CPU affinity and port
tuple), increased throughput by 18.1% for IPv4 and 34.7% for IPv6:

  protocol  BIG TCP off  BIG TCP on   CV off / on
  TCP/IPv4  65.567 Gbps  77.420 Gbps  1.12% / 0.37%
  TCP/IPv6  55.355 Gbps  74.568 Gbps  1.20% / 0.68%

Assisted-by: LLM
This looks a bit strange.
quoted hunk
Signed-off-by: Wang Zhan <redacted>
---
 net/openvswitch/vport-internal_dev.c | 1 +
 1 file changed, 1 insertion(+)
diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c
index 125d310871e93..73f5184afba42 100644
--- a/net/openvswitch/vport-internal_dev.c
+++ b/net/openvswitch/vport-internal_dev.c
@@ -116,6 +116,7 @@ static void do_setup(struct net_device *netdev)
 	netdev->hw_enc_features = netdev->features;
 	netdev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX;
 	netdev->hw_features = netdev->features;
Please, add an empty line here, it looks awkward to glue the call
to the feature flags block.
quoted hunk
+	netif_set_tso_max_size(netdev, GSO_MAX_SIZE);
 
 	eth_hw_addr_random(netdev);
 }
Otherwise, looks fine to me.  There is no reason to block BIG TCP
packets on the internal port when they can enter the datapath from
a veth.  And I don't see why BIG TCP wouldn't work in OVS at the
moment.  The packets will be segmented before sending to userspace
or ports that do not support BIG TCP and all the functions that
check the packet length supposed to use gso_size and not the raw
length.

But, please, CC all the maintainers while sending patches.

Best regards, Ilya Maximets.

Re: [PATCH net-next] openvswitch: raise internal port TSO limit

From: Wang Zhan <hidden>
Date: 2026-09-15 07:39:06

On 9/14/26 11:16 PM, Ilya Maximets wrote:
On 9/10/26 3:16 PM, Wang Zhan wrote:
quoted
Set the internal port TSO limit to GSO_MAX_SIZE (512 KB), as for
loopback and veth. This allows the admin/user to set a GSO limit up to
this value, to use BIG TCP for traffic routed through the internal port.

Only the capability limit changes: the IPv4 and IPv6 GSO and GRO limits
remain at 64 KiB until changed by the administrator.

Validation used a same-host test with a temporary OVS bridge, a veth pair,
and a network namespace:

  TCP client -> OVS internal -> OVS bridge -> veth -> TCP server

The veth endpoints were BIG TCP capable throughout the test, and only the
OVS internal port limits changed between 64 KiB and 524280 bytes. A single
iperf3 3.19 TCP flow, run separately over IPv4 and IPv6 with six
alternating runs per state (`-t 15 -O 5`, fixed CPU affinity and port
tuple), increased throughput by 18.1% for IPv4 and 34.7% for IPv6:

  protocol  BIG TCP off  BIG TCP on   CV off / on
  TCP/IPv4  65.567 Gbps  77.420 Gbps  1.12% / 0.37%
  TCP/IPv6  55.355 Gbps  74.568 Gbps  1.20% / 0.68%

Assisted-by: LLM
This looks a bit strange.
Do you mean the "Assisted-by: LLM" tag? I used AI assistance for
building, testing, and patch preparation, so I added the tag following:
https://docs.kernel.org/process/coding-assistants.html#attribution
Please, add an empty line here, it looks awkward to glue the call
to the feature flags block.
quoted
+	netif_set_tso_max_size(netdev, GSO_MAX_SIZE);
Okay, will fix in v2.
The packets will be segmented before sending to userspace or ports that
do not support BIG TCP and all the functions that check the packet length
supposed to use gso_size and not the raw length.
Right, and that's mostly fine. There is one catch though: when a BIG TCP
packet goes to a port without BIG TCP support, it currently gets segmented
to MTU and the GSO flag is dropped, which can regress performance pretty
badly. I'm preparing a follow-up patch to segment to the target GSO size
instead. Not a blocker for this patch.
But, please, CC all the maintainers while sending patches.
Okay, will do.

Thanks for the review.

Best regards, Wang Zhan.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help