Skip to content

feat(nvsnap): enable UV_USE_IO_URING after CRIU SQ-array restore fix#225

Open
balajinvda wants to merge 1 commit into
mainfrom
nvsnap-iouring-sqarray-prod
Open

feat(nvsnap): enable UV_USE_IO_URING after CRIU SQ-array restore fix#225
balajinvda wants to merge 1 commit into
mainfrom
nvsnap-iouring-sqarray-prod

Conversation

@balajinvda

@balajinvda balajinvda commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Why

libuv/uvloop servers (vLLM, e5-mistral) had to pin UV_USE_IO_URING=0 under criu-v2 restore: the restored libuv SQPOLL io_uring ring aborted the event loop on the first epoll_ctl_flush (SIGABRT). Root cause was in CRIU's io_uring restore — it recreated a fresh ring but never rebuilt the SQ-array identity map (sq_array[i] = i) that liburing/libuv write once at setup, so restored submissions all resolved to SQE 0 and completions never returned.

What changed

  • CRIU fork (io-uring-cr) now rebuilds the SQ-array identity map on restore (commit 0a9963ed0).
  • versions.sh: NVSNAP_CRIU_REF -> 0a9963ed0; base v0.0.9; app v0.2.19.
  • vllm-small, vllm-8b, vllm-qwen32b, e5-mistral: UV_USE_IO_URING 0 -> 1.

Testing

Validated e2e on aws-dev1 (kernel 6.8) — all four checkpoint, restore, and serve inference with io_uring on, zero event-loop aborts:

Workload Checkpoint Restore -> serving Aborts
vllm-small 3.2G OK 0
vllm-8b 18G OK 0
e5-mistral 15G OK 0
vllm-qwen32b 64G OK 0

Notes

Fix is general io_uring-restore correctness (not nvsnap-specific) and is upstreamable to checkpoint-restore/criu. Ref nvsnap#107.

Relates to #71

libuv/uvloop servers (vLLM, e5-mistral) previously had to pin
UV_USE_IO_URING=0 under criu-v2: the restored libuv SQPOLL io_uring ring
aborted the event loop on the first epoll_ctl_flush (SIGABRT, nvsnap#107).
Root cause was in CRIU's io_uring restore, which recreated a fresh ring
but never rebuilt the SQ-array identity map (sq_array[i] = i) that
liburing/libuv write once at setup; every restored submission then
resolved to SQE 0 and completions never returned.

The CRIU fork now rebuilds that identity map on restore
(io-uring-cr commit 0a9963ed0). Pin the base build to it and re-enable
UV_USE_IO_URING=1 on the single-GPU criu-v2 workloads.

- versions.sh: NVSNAP_CRIU_REF -> 0a9963ed0; base v0.0.9; app v0.2.19.
- vllm-small, vllm-8b, vllm-qwen32b, e5-mistral: UV_USE_IO_URING 0 -> 1.

Validated e2e on aws-dev1 (kernel 6.8): all four checkpoint, restore, and
serve inference with io_uring on, zero event-loop aborts.

Co-Authored-By: Balaji Ganesan <bganesan@nvidia.com>
@balajinvda
balajinvda requested a review from a team as a code owner July 17, 2026 04:31
@github-actions

Copy link
Copy Markdown

🛡️ CodeQL Analysis

🚨 Found 2 issue(s)

Severity Breakdown:

  • 🔴 Errors: 0
  • 🟡 Warnings: 0
  • 🔵 Notes: 0
📋 Top Issues

🔗 View full details in Security tab

🕐 Last updated: 2026-07-17 04:33:48 UTC | Commit: a9701c1

@balajinvda balajinvda self-assigned this Jul 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants