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(+)
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
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.
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
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.