Skip to content

Linux datapath does not activate GRO although available #3914

@jospaeth-tum

Description

@jospaeth-tum

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

  1. Use MsQuic's default choice for GSO/GRO support and evaluate performance during a file transfer
  2. Hardcode support for receive coalescing, e.g., add the following line here
    Datapath->Features |= CXPLAT_DATAPATH_FEATURE_RECV_COALESCING;
  3. 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 and lo

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions