Conversation
|
👋 Hi lluki! 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: The AWS Batch pod failed at Full analysisSummary: The AWS EFA validation job's in-pod Root cause: Implicated commit: File: Suggested fix: Make the pod able to fetch the PR code: (1) inject a token so the clone authenticates, e.g. clone Related: none (PR #1912 surfaced by search is unrelated).
|
3bbc5a6 to
d7dd558
Compare
|
🤖 CI Triage Agent — TL;DR: The "PR Size Check" workflow failed because PR #2200 modifies 851 lines in existing (non-subproject) files, exceeding the 500-line limit; either split the PR or the check needs an exemption/higher limit for this change. Full analysisSummary: The Root cause: This is an intentional CI policy gate, not a bug. The workflow computes lines added to modified files (excluding Implicated commit: No faulty commit — the PR head is File: Suggested fix: This is a code-review/process issue, not a CI infrastructure fix. Options for the PR author:
Related: none
|
|
🤖 CI Triage Agent — TL;DR: The "Clang Format Check" job failed because several modified POSIX-plugin files in PR #2200 are not formatted per the repo's clang-format-19 style; run Full analysisSummary: The Root cause: Code style violations, not a build/test defect. The workflow computes changed C/C++ files and pipes their diff through
Implicated commit: [REDACTED:Hex High Entropy String] (PR #2200 head, branch File: Suggested fix: Locally run clang-format-19 over the changed files and commit, e.g.: Then push the reformatted code. (Ensure the local clang-format is version 19 to match CI, since formatting differs across versions.) Related: none found.
|
|
🤖 CI Triage Agent — TL;DR: The AWS Batch pod's Full analysisSummary: The "Run AWS Tests" GHA job submitted an AWS Batch job that failed inside the pod at the Root cause: Inside the AWS Batch pod the command is Implicated commit: unknown for the failure trigger (the clone logic in File: Suggested fix: Make the in-pod clone authenticated and target the actual PR ref rather than a branch name. Concretely: (a) plumb a GitHub token into the AWS Batch pod env and use it in the clone URL / Related: PR #2200 (the PR under test); no prior issue reporting this exact clone failure. |
d7dd558 to
997dbe6
Compare
|
🤖 CI Triage Agent — TL;DR: The "PR Size Check" failed because PR #2200 modifies 879 lines in existing files (excluding Full analysisSummary: The Root cause: This is a working-as-intended policy gate, not a code defect. The workflow step computes lines added to modified existing files via Implicated commit: [REDACTED:Hex High Entropy String] (PR #2200 head, branch File: Suggested fix: This is a size-policy failure, so the actionable fix is on the PR, not the CI:
Related: none
|
Signed-off-by: Lukas Humbel <lhumbel@nvidia.com>
997dbe6 to
8effce4
Compare
|
🤖 CI Triage Agent — TL;DR: The "PR Size Check" workflow failed because PR #2200 modifies 897 lines in existing files (excluding subprojects), exceeding the repo's 500-line limit; fix by splitting the PR into smaller pieces or getting a maintainer waiver. Full analysisSummary: The Root cause: The workflow computes lines added to existing (modified) files via Implicated commit: [REDACTED:Hex High Entropy String] (PR #2200, branch File: Suggested fix: This is not a code bug — the author needs to reduce the PR's footprint. Options:
Related: none
|
Signed-off-by: Lukas Humbel <lhumbel@nvidia.com>
Signed-off-by: Lukas Humbel <lhumbel@nvidia.com>
8effce4 to
ccf96cf
Compare
|
🤖 CI Triage Agent — TL;DR: The "PR Size Check" gate failed because PR #2200 modifies 860 lines in existing files (excluding subprojects), exceeding the workflow's hard limit of 500. Split the PR into smaller pieces (or adjust/exempt the limit) to pass. Full analysisSummary: The Root cause: The workflow computes lines added to modified files with Implicated commit: unknown (this is the PR's own content — the merge commit is File: Suggested fix: This is a size-policy failure, not a defect. Resolve it by reducing the PR's footprint:
Related: none
|
|
🤖 CI Triage Agent — TL;DR: The AWS NIXL Validation job failed while building the Full analysisSummary: Dependency build step failed cloning the Root cause: During Implicated commit: unknown (not a repo code change; the trigger is the external File: the CI script that runs Suggested fix: Make the s2n submodule resolve to its new home instead of the dead
Related: none (no matching issue/PR found in this repo). |
Signed-off-by: Raul Akhmetshin <rakhmetshin@nvidia.com>
What?
Post open asynchronously to uring.
Why?
+50% perf when used the SgLang HiCache NIXL backend on NFS-over-RDMA
How?
1st commit: Refactor the posix_backend.cpp such that the io_engine always gets a devId. It's now the io engines job to do the devid -> fd/state mapping. Why? If not we need an awkward dance in posix_backend.cpp to find the right fd/devid to be passed in enqueue (note in the lazy open, the FD might not exist yet, so
fdmakes no sense anymore at that point)2nd commit: implement the asynchronous mode in uring engine. The current implementation still bounces to userspace after open, but each open->read/write dependency is handled individually. It gets the same performance (at the slight cost of added CPU utilization) but it is compatible with kernel 5.15. If we drop support for 5.15, we can implement the linked SQEs.
State Machine Diagrams
Code is somewhat complex. There are two state machines: One for the file open/closed state, and one per transfer.
File State Diagram
pendingClose without deregistered)registerFile()called by nixlPosixEngine::registerMem(). It creates the FileState in PendingOpen and calls post().deregisterFile()called by nixlPosixEngine::deregisterMem(). It invokes retireFile() and waits for closing to complete.post()called by the common transfer path and internally. For file states, it submits pending opens/closes and erases closed entries.poll()called by checkXfer(). It processes CQEs through doCheckCompleted() and then calls post().Transfer State Diagram
enqueue()from nixlPosixBackendReqH::postXfer(). It delegates to the internal enqueueIO(), which acquires and initializes the slot as Queued.post()from postXfer(). It submits queued READ/WRITE operations. It is also called internally during cancellation and polling.poll()from checkXfer(). It dispatches data/cancel completions and subsequently calls post().cancel()from requestCancellation() after a transfer failure.