mirror of
https://github.com/kvcache-ai/Mooncake.git
synced 2026-11-05 01:17:55 +00:00
[GH-ISSUE #4661] [Bug]: TENT RDMA path MTU is one value per engine, clamped to the smallest active MTU of any opened NIC, and not matched with the peer #1187
Labels
No labels
ascend
auto-closed
bug
bug
CI/Build
Common
documentation
enhancement
feature request
good first issue
help wanted
high priority
MetaX
nightly-failure
pull-request
PyTorch Backend
question
RFC
Roadmap
stale
Store
Tests
Transfer Engine
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
kvcache-ai/Mooncake#1187
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @xiaodouzi666 on GitHub (Oct 14, 2026).
Original GitHub issue: https://github.com/kvcache-ai/Mooncake/issues/4661
Bug Report
What happens
RdmaTransportbuilds oneRdmaParamsand shares it with everyRdmaContext(src/transport/rdma/rdma_transport.cpp:343,context.cpp:319). When a context is constructed it clamps the shared value to its own port:params_->endpoint.path_mtu = MIN(params_->endpoint.path_mtu, port_attr.active_mtu)(context.cpp:837). So one NIC with a small active MTU lowers the path MTU of every QP on every NIC of that engine; every endpoint later takesparams_->path_mtuinto RTR (endpoint.cpp:1002,:1197). The value is not exchanged with the peer. (Line numbers as of342c8aee.)Two consequences we hit on hosts with a front-end NIC (
mlx5_0, overlay netdev, MTU 1500 → active MTU 1024) and four rail NICs (MTU 4096):MC_MTU=1024on one side — RDMA READs larger than one MTU fail withIBV_WC_LOC_LEN_ERR("local length error"), the slice is retried, the rail pair gets paused, and the request either completes over TCP after the transport failover (when TCP is loaded) or fails at the transfer timeout. WRITEs and one-packet READs are unaffected, which makes it look like a size-dependent flake.Measured (hosts with five NICs each):
MC_MTU=1024, engine B with the default 4096 (two processes on one host, then again across two hosts): the 1 KiB READ passes, a 64 MiB READ fails on RDMA (local length error, rail paused) and the request completes over TCP after the failover; the check took ~20 s instead of well under a second.mlx5_0) against single-NIC engines (4096 each) on the same host: 24 of 25 NIC pairs failed the same way ("only a READ of one KiB works; path MTU 4096 here, 1024 on the target") until the single-NIC side was pinned to 1024 as well, after which every rail pair passed. Same NICs — only the per-engine clamp differed.mlx5_0is left out of both device lists and at 1024 when it is in.Why it matters
The clamp silently costs throughput on every rail whenever a low-MTU NIC is in the list (common: the front-end NIC is on an overlay), and a path-MTU mismatch between peers is reported as transfer errors far from the cause.
Possible directions
Keep the path MTU per context (per NIC) instead of one shared value, so the rails are not clamped by the front-end NIC; and either carry each device's path MTU in the segment descriptor (
DeviceDesc) so the QP pair takes the minimum of the two, or at least log a WARNING at bootstrap when the peer's published MTU differs. We can prepare a patch if either shape is acceptable.Reproduction
Two engines on hosts with mixed-MTU NICs; whitelist the rails on one side only; READ 64 MiB. Our #2864 diagnostics tool reports this as
rdma.mtu.uniform(RDMA-013) locally and as PEER-004fail.mtuacross hosts.Environment: commit
342c8aee; Linux x86_64 hosts with mlx5 RoCE v2 NICs: a front-end NIC on an overlay netdev (MTU 1500, active MTU 1024) and four rails at MTU 4096.Before submitting...
@github-actions[bot] commented on GitHub (Oct 14, 2026):
Thanks for opening this issue, @xiaodouzi666!
77219630A maintainer will triage this when possible. To help us respond faster, please include:
Useful links: Documentation · Contributing guide