Skip to content

~600 Mbps throughput when AQC113 is behind Thunderbolt 4 dock + Thunderbolt 3 hop; full 10 GbE direct on Windows #76

Description

@rajil

Summary

On Linux 6.18.40, an AQC113-based Thunderbolt 3 NIC adapter
(Ubiquiti UACC-Adapter-RJ45-USBC-10GE) achieves ~600 Mbps when
connected through a Dell WD22TB4 Thunderbolt 4 dock. The same adapter
achieves full 10 GbE when plugged directly into the laptop's Thunderbolt
port. Windows achieves full 10 GbE through the dock. PCIe topology and
link speeds are identical between Linux and Windows in both scenarios,
pointing to a driver-level issue.

Hardware

  • Laptop: Framework 13 AMD (Strix Halo / Ryzen AI)
  • USB4: AMD USB4 Router [1022:151c / 1022:151d]
  • Host TB: Intel Goshen Ridge TB4 [8086:0b26 rev 03]
  • Dock: Dell WD22TB4 Thunderbolt 4 Dock
  • Adapter: Ubiquiti UACC-Adapter-RJ45-USBC-10GE
    (Intel JHL7440 TB3 bridge [8086:15ef rev 06] +
    Aquantia AQC113 [1d6a:04c0 rev 03])
  • Switch: Connected to 10 GbE switch

Kernel and driver

Kernel: 6.18.40
Driver: in-tree atlantic (intree: Y)
Module params: aq_itr, aq_itr_tx, aq_itr_rx (no other params exposed)

dmesg

[ 5.427263] thunderbolt 1-2: Dell WD22TB4 Thunderbolt Dock
[ 6.158888] thunderbolt 1-0:2.1: new retimer found, vendor=0x1da0 device=0x8833
[ 6.994932] thunderbolt 1-2:1.1: new retimer found, vendor=0x1da0 device=0x8833
[ 7.521693] thunderbolt 1-502: Ubiquiti Inc. UACC-Adapter-RJ45-USBC-10GE
[ 244.475274] atlantic 0000:84:00.0: enabling device (0000 -> 0002)
[ 244.559142] atlantic: Detect ATL2FW 1030025
[ 244.738977] atlantic 0000:84:00.0 enp132s0: renamed from eth1
[ 253.006960] atlantic 0000:84:00.0 enp132s0: atlantic: link change old 0 new 10000

The NIC reports a 10 Gbps Ethernet link in both direct and dock
scenarios. The limitation is not at the network layer.

PCIe topology

PCIe path to NIC - direct connection (Linux and Windows identical):

AMD USB4 Bridge 00:01.1 x1 @ 2.5 GT/s
JHL7440 root 01:00.0 x4 @ 2.5 GT/s (TB tunnel)
JHL7440 port 1 02:01.0 x4 @ 8.0 GT/s
AQC113 NIC 03:00.0 x4 @ 8.0 GT/s (downgraded from 16)

PCIe path to NIC - via dock (Linux and Windows identical):

AMD USB4 Bridge 00:01.2 x1 @ 2.5 GT/s
Goshen Ridge root 60:00.0 x4 @ 2.5 GT/s
Goshen Ridge port 2 61:02.0 x4 @ 2.5 GT/s
JHL7440 root 82:00.0 x4 @ 2.5 GT/s (TB tunnel)
JHL7440 port 1 83:01.0 x4 @ 8.0 GT/s
AQC113 NIC 84:00.0 x4 @ 8.0 GT/s (downgraded from 16)

The NIC's own PCIe link (x4 @ 8 GT/s between JHL7440 port 1 and the
AQC113) is identical across all four combinations of OS and connection
method. The extra hop in the dock path is the Goshen Ridge TB4 switch,
but this is also present and identical in the working Windows dock case.

lspci -vvnn for AQC113 (dock scenario)

84:00.0 Ethernet controller [0200]: Aquantia Corp. AQtion AQC113
NBase-T/IEEE 802.3an [1d6a:04c0] (rev 03)
LnkCap: Port #0, Speed 16GT/s, Width x4, ASPM not supported
LnkSta: Speed 8GT/s (downgraded), Width x4
LnkCtl2: Target Link Speed: 16GT/s
MaxPayload 128 bytes, MaxReadReq 512 bytes
Kernel driver in use: atlantic
Kernel modules: atlantic

Comparison across all four scenarios

Scenario OS JHL7440 port 1 AQC113 LnkSta Throughput
Direct Linux x4 @ 8 GT/s x4 @ 8 GT/s 10 GbE
Direct Windows x4 @ 8 GT/s x4 @ 8 GT/s 10 GbE
Via dock Windows x4 @ 8 GT/s x4 @ 8 GT/s 10 GbE
Via dock Linux x4 @ 8 GT/s x4 @ 8 GT/s ~600 Mbps

The hardware PCIe configuration is identical in all four cases. The
only variable that correlates with the degraded throughput is Linux
via the dock.

Things already tried

  • ethtool -C enp132s0 rx-usecs 0 tx-usecs 0 (disable coalescing)
  • ethtool -G enp132s0 rx 4096 tx 4096 (larger ring buffers)
  • modprobe atlantic aq_itr=0 (disable ITR via param)

None of the above recovered throughput.

Questions

  1. Is there a known issue with the atlantic driver when the AQC113 is
    behind multiple PCIe switches, specifically a TB4 + TB3 bridge chain?

  2. Could MaxPayload size negotiation across six bridge hops cause a
    throughput ceiling? The NIC supports 512 bytes but is operating at
    128 bytes. Would it help to force a higher value via setpci?

  3. Is there additional debug output (ring stats, DMA stats, firmware
    counters) that would help isolate whether the bottleneck is in the
    TX path, RX path, or interrupt handling?

Attachments

dock-output.txt - full lspci -tv and lspci -vvnn, dock scenario
direct-output.txt - full lspci -tv and lspci -vvnn, direct scenario
windows-dock.txt - HWiNFO64 PCI report, dock scenario (Windows)
windows-direct.txt - HWiNFO64 PCI report, direct scenario (Windows)

windows-direct.txt
windows-dock.txt

direct-output.txt
dock-output.txt

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions