-
Notifications
You must be signed in to change notification settings - Fork 594
Description
Describe the bug
When using the Linux datapath datapath_epoll.c
on a system that supports both UDP GSO and GRO, the feature test in CxPlatDataPathCalculateFeatureSupport
only activates send segmentation and falls back to "normal" recvmmsg
for the receive side.
Hardcoding the support for receive coalescing in Datapath->Features
shows that GRO does indeed work on the system and significantly improves achievable goodput (5.2 GBit/s vs. 8.3 GBit/s during an 8 GiB file transfer on the test system described below).
The problem seems to be that no UDP_GRO
control message is received after sending a message with GSO to the loopback interface. This is possibly related to #3865, where the test using the loopback interface also lead to problems.
Affected OS
- Windows
- Linux
- macOS
- Other (specify below)
Additional OS information
Debian 11 with Linux kernel 5.10.0-23-amd64
MsQuic version
v2.2
Steps taken to reproduce bug
- Use MsQuic's default choice for GSO/GRO support and evaluate performance during a file transfer
- Hardcode support for receive coalescing, e.g., add the following line here
Datapath->Features |= CXPLAT_DATAPATH_FEATURE_RECV_COALESCING;
- Repeat the measurement and compare performance
Expected behavior
MsQuic should activate receive coalescing in both cases, leading to no performance differences.
Actual outcome
Performance increases significantly when receive coalescing is enforced.
Additional details
Test system:
- Two machines running Debian 11 with Linux kernel 5.10.0-23-amd64
- NICs are Intel E810-C running on ICE driver v1.12.6
- GSO and GRO are activated for through
ethtool
for both the link to the other node andlo