Conversation
Signed-off-by: foraxe <foraxe@users.noreply.github.com> (cherry picked from commit 8a61ec6)
Signed-off-by: foraxe <foraxe@users.noreply.github.com> (cherry picked from commit c68db92)
Signed-off-by: foraxe <foraxe@users.noreply.github.com> (cherry picked from commit d2f1557)
Signed-off-by: foraxe <foraxe@users.noreply.github.com> (cherry picked from commit 8b0883b)
Signed-off-by: foraxe <foraxe@users.noreply.github.com> (cherry picked from commit dd8d094)
Signed-off-by: foraxe <foraxe@users.noreply.github.com> (cherry picked from commit 4e6d61c)
Signed-off-by: foraxe <foraxe@users.noreply.github.com> (cherry picked from commit 6846c18)
Signed-off-by: foraxe <foraxe@users.noreply.github.com> (cherry picked from commit 57dfc94)
…ocking Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
Signed-off-by: Yunxiao Ning <ningyunxiao.nyx@antgroup.com>
|
👋 Hi foraxe! Thank you for contributing to ai-dynamo/nixl. Your PR reviewers will review your contribution then trigger the CI to test your changes. 🚀 |
|
🤖 CI Triage Agent — TL;DR: This isn't a build or test breakage — the Full analysisSummary: Job Root cause: The workflow's single step computes added lines with Implicated commit: [REDACTED:Hex High Entropy String] (PR #2222 head; merge commit [REDACTED:Hex High Entropy String]). The workflow itself is unchanged and not at fault. File: .github/workflows/pr-size-check.yml:21-26 (check logic); the oversized change is in PR #2222's diff against base Suggested fix: Split PR #2222 into several PRs each under 500 added lines in modified files — for the GPUNetIO independent-QP-progress work, natural splits are (a) plumbing/struct and header changes, (b) the QP progress engine itself, (c) tests and examples. Run Related: PR #2222 (this PR); PR #2215 "[GPUNetIO] Add optional multi-QP WRITE striping" appears to be adjacent GPUNetIO multi-QP work and may be a candidate to stack this change onto or to split against.
|
|
🤖 CI Triage Agent — TL;DR: The Blossom-CI Full analysisSummary: Root cause: The run was started by the automatic
So this is an authorization/policy gate outcome on commit Implicated commit: File: Suggested fix:
Related: PR #2222 (this PR); workflow history: #1133 (
|
|
🤖 CI Triage Agent — TL;DR: The pre-commit Full analysisSummary: GitHub Actions job "Run Pre-Commit Hooks" (run 34223682974, PR #2222) failed at the Root cause: codespell's dictionary contains the entry Implicated commit: [REDACTED:Hex High Entropy String] (PR #2222, branch File: test/gtest/plugins/gpunetio/qp_progress_gtest.cu:82 (and 618, 628, 738, 743, 749, 750, 757, 763, 780); config at .pre-commit-config.yaml:42-47 and pyproject.toml (missing Suggested fix: Preferred — rename the identifier in the new test so codespell no longer sees the [tool.codespell]
ignore-words-list = "nowns"(this also makes the existing Related: none found — no existing issue/PR in ai-dynamo/nixl tracks a codespell
|
What?
Allow independent GPUNETIO QPs to make completion progress without waiting for
the oldest entry in a global completion list. Preserve FIFO retirement within
each QP and aggregate every chunk of a logical NIXL request before completion.
Why?
An unfinished bulk transfer can delay reporting a completed small transfer on
another QP. Removing that cross-QP dependency improves completion isolation.
On the matched H20 component workload below, small-transfer p99 decreases from
113.439 to 29.251 µs. The tradeoff is not hidden: single-active-QP 4 KiB WRITE
p50/p99 remain approximately 4.1%/4.0% above the original baseline.
How?
records into GPU-accessible pinned host memory, so CPU status checks do not
repeatedly read GPU-mapped fields over PCIe.
CPU consumers acquire it and verify the generation.
work drains, and reject pending cancellation with a negative status so the
frontend retains its handle.
This does not add QP striping, peer-MR, a priority API, or a new congestion-control
protocol. No artificial delay or completion observer is used in performance runs.
Dependencies and review scope
Depends on #2175, whose request-ring ownership changes are included in this
branch. The core-agent and existing agent-test changes belong to that
prerequisite. The progress-specific diff starts at
1ca6efcc.The tested runtime additionally composes #2052 and #2174 for DOCA 3.1 and the
paired OOB setup. Both benchmark arms include those same prerequisites and the
QP-allocation device-selection correction. These runtime overlays are separate
from the proposed feature diff.
This is a substantial backend change with a paired integration harness, intended
for design review rather than immediate merge. Upstream design discussion and
dependency review remain prerequisites under CONTRIBUTING.md.
Component results
H20, CUDA 12.8, DOCA 3.1; one source GPU and two target GPUs across two nodes;
one data QP per peer. The mixed workload pairs a 2 MiB bulk transfer with an
independent 4 KiB transfer. Each transfer also includes an 8-byte epoch marker.
Three independent process pairs per arm/shape, 20 warmup + 100 measured iterations,
with rotating arm order. Both arms use the same harness and NIXL-core binaries;
only the GPUNETIO plugin differs. Values are medians of per-run metrics.
Latency is source post-to-NIXL-API-completion, not a receiver-kernel or NIC-CQ
timestamp. Transfer-window rate includes software completion overhead; it is
not a raw NIC-bandwidth measurement. READ tails vary across runs. No serving,
DeepEP, or end-to-end wall-throughput improvement is claimed.
Independent run values (runs 1 / 2 / 3)
Validation
31 paired runs passed: 27 performance runs across the original baseline,
pre-fix implementation, and final implementation; plus four final correctness
cases. Both endpoints exited cleanly. The correctness cases cover:
129 subsequent reuse requests, and data-coupled/standalone notifications;
retained, queued work subsequently aborts, and receiver sentinels stay unchanged.
The final payload oracle mixes the full source/epoch seed and byte offset.
Every arm was measured using that oracle. Expected injected errors are confined
to fault cases. Arbitrary fatal CUDA device faults are not claimed as tested.
Reproduction
The committed
test/gtest/plugins/gpunetio/README.mdcontains the build commands,required environment variables, role setup, and output definitions. Configure
both endpoints with matching settings and a fresh metadata directory for every
process pair. An environment-related
SKIPPEDresult is not a pass.Pinned references:
gpunetio-independent-qp-progress,292249b8.gpunetio-progress-runtime-foundation,1901c6d0.gpunetio-progress-runtime-candidate,4db224b5.The runtime refs reproduce the common platform prerequisites. Build the candidate
harness once and use that same executable/core installation for both arms,
selecting the baseline or candidate plugin with
NIXL_PLUGIN_DIR. Use identicalcompiler options for both plugin builds. The final reference updates after
measured
b260dd16/f6db60a7are README-only.ARM_PLUGIN_DIRselects the plugin build under test; keep the common core-librarysearch path unchanged. Repeat each performance shape with three fresh process
pairs per arm. The harness writes
qp_progress_performance.jsonorqp_progress_single_qp_control.jsoninto the configured metadata directory.Run the four candidate correctness cases as separate fresh pairs:
Use
target-faultfor the remote-MR case only; the CPU pre-error cases use normalsource/targetroles. Keep the candidate plugin selected for correctness tests.