Skip to content

[Bugfix] Log CRIU failure details before snapshot cleanup - #59661

Merged
simon-mo merged 2 commits into
vllm-project:mainfrom
matteso1:fix/snapshot-criu-diagnostics-20261001
Oct 3, 2026
Merged

simon-mo merged 2 commits into
vllm-project:mainfrom
matteso1:fix/snapshot-criu-diagnostics-20261001

Conversation

@matteso1

@matteso1 matteso1 commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Overview

Report CRIU failure details before snapshot cleanup removes the logs. This addresses the missing diagnostics in nightly build 92230, which reached criu dump after #59487 corrected the image labels.

Claims

  • Failed dump/restore commands and subprocess timeouts report bounded captured output and the end of the corresponding CRIU log.
  • The original exception still propagates. Creation still deletes the unfinished artifact, and successful capture/restore follows the existing path.

Validation

python -m pytest tests/entrypoints/launchers/test_launch_cli.py -q -k 'criu_failure or preserves_bounded_criu_diagnostics or rolls_back_failed_dump': six passed on Mac and Linux CPU. The five new regression cases fail against the unchanged runtime; the existing cleanup test passes in both arms.

A separate Linux check used a real failing subprocess in place of CRIU and called create_snapshot. Its stdout, stderr and dump-log marker appeared in the console. The original exit-23 exception propagated and the incomplete artifact was removed. This checks the diagnostic path without requiring a GPU.

All applicable pre-commit hooks passed, including Python 3.10 mypy and the Buildkite test-wiring check.

The full Mac test file has 99 passes and one environment-contract failure: CLI imports add AITER_SITUV2_A4W4=1. The same failure reproduces on unchanged base 083060d046a8. A broader Linux CPU run could not exercise CLI configuration cases that require a detected device; the focused diagnostics tests pass without one.

Details

_run captures subprocess output, but the old CRIU path did not report that output or the CRIU log when the command failed. Creation then deleted the unpublished artifact. Collecting the file later in the CI exit trap would be too late.

The error handler reads the last 8,192 bytes of dump.log or restore.log through the existing privilege helper, with a five-second timeout. Missing or unreadable logs are reported without replacing the original failure. Captured output is also bounded, and byte-valued timeout output is decoded with replacement.

The cause of the nightly CRIU failure remains unknown. This patch makes the next attempt diagnosable; it does not claim to fix checkpoint compatibility. The regular snapshot job in build 92059 passed creation and both restores with identical snapshot source and E2E-driver bytes, on a different host and image.

Open-PR searches for snapshot, CRIU and #59487 found no duplicate diagnostic fix. #59487 changes image labels; this change reports runtime failures. AI assistance was used to prepare the change and its tests.


Pull Request Checklist
  • I used vLLM's /pr-checklist skill. (Mandatory for agents, optional for humans).

  • AI assistance was used during the creation of this PR.

  • Design Fit: Minimizes impact on core components, reuses existing functionality, and justifies added complexity.

  • Testing and Validation: Validates the change and ensures any added tests are meaningful and reliable, with CI coverage or documented CI resource constraints and validation performed outside CI.

  • Code Quality and Style: Keeps code and comments clear and concise, and updates relevant documentation and examples.

  • Pull Request Contents: Includes a brief summary and relevant links, supports claims with evidence, explains root causes and implementation trade-offs, and follows the contributing guide.

Signed-off-by: Nils Matteson <nilsmatteson@icloud.com>

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This pull request is from a fork — automated review is disabled. A repository maintainer can comment @claude review to run a one-time review.

@simon-mo
simon-mo enabled auto-merge (squash) October 3, 2026 01:21
@github-actions github-actions Bot added the ready ONLY add when PR is ready to merge/full CI is needed label Oct 3, 2026
@matteso1

matteso1 commented Oct 3, 2026

Copy link
Copy Markdown
Contributor Author

/ci run --allow-stale

@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown

✅ Triggered Buildkite CI #92732 for commit f8001354d933.

⚠️ This PR is 89 commits behind upstream main. Running CI at your own risk because --allow-stale was requested; outdated CI configuration may cause failures. Before merging, merge or rebase onto the latest main, then rerun /ci run on the latest PR commit.

Signed-off-by: Nils Matteson <nilsmatteson@icloud.com>
@matteso1

matteso1 commented Oct 3, 2026

Copy link
Copy Markdown
Contributor Author

/ci run

@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown

✅ Triggered Buildkite CI #92734 for commit 97c5592b9f68.

@vllm-agent

Copy link
Copy Markdown
Collaborator

CI selector (shadow): 6 test steps (13 jobs) instead of 33 (46 jobs)

Shadow mode: this changes nothing about what CI runs. It shows what the evidence-based selector would pick for this PR, next to today's rules. How it works.

Feedback welcome: reply here if it would skip a step this change needs, or runs something unrelated.

steps (jobs) Today's rules Selector Would skip Would add
NVIDIA, CPU and others 33 (46) 6 (13) 31 (42) 4 (9)
AMD mirrors 31 (39) 1 (1) 30 (38) 0 (0)
Selector would run (6)
  • arm-cpu-test ×3
  • cpu-distributed-tests-dp-tp
  • cpu-distributed-tests-pp-tp
  • cpu-language-generation-and-pooling-model-tests ×3
  • cpu-multi-modal-model-tests-n ×4
  • entrypoints-unit-tests
Would skip (today's rules run them) (31)
  • ascend-npu-test
  • basic-correctness ×2
  • basic-correctness-cpu-offload
  • basic-correctness-cumem
  • basic-correctness-prefetch-offload
  • basic-correctness-sleep-mode
  • basic-models-test-other-cpu
  • basic-models-tests-initialization
  • basic-models-tests-other
  • benchmarks-cli-test
  • entrypoints-integration-api-server ×4
  • entrypoints-integration-api-server-generate
  • entrypoints-integration-api-server-openai-chat_completion
  • entrypoints-integration-api-server-openai-completion
  • entrypoints-integration-llm
  • entrypoints-integration-multimodal
  • entrypoints-integration-pooling
  • entrypoints-integration-responses-api
  • entrypoints-integration-speech_to_text
  • kernels-fla-ops-test-b200
  • kernels-mhc-test-b200
  • kernels-root-misc-test-b200
  • language-models-tests-granite-l4-compatibility
  • language-models-tests-hybrid ×2
  • language-models-tests-standard
  • multi-modal-models-standard-1-qwen2
  • multi-modal-models-standard-2-qwen3-gemma
  • multi-modal-models-standard-3-llava-qwen2-vl
  • multi-modal-models-standard-4-other-whisper
  • multi-modal-processor ×4
  • multi-modal-processor-cpu ×4
Would add (today's rules do not run them) (4)
  • arm-cpu-test ×3 (code map)
  • cpu-distributed-tests-dp-tp (code map)
  • cpu-distributed-tests-pp-tp (code map)
  • cpu-multi-modal-model-tests-n ×4 (code map)
AMD mirrors: would skip (30)
  • basic-correctness ×2
  • basic-correctness-cpu-offload
  • basic-correctness-cumem
  • basic-correctness-prefetch-offload
  • basic-correctness-sleep-mode
  • basic-models-tests-initialization
  • basic-models-tests-other
  • benchmarks-cli-test
  • entrypoints-integration-api-server ×4
  • entrypoints-integration-api-server-generate
  • entrypoints-integration-api-server-openai-chat_completion
  • entrypoints-integration-api-server-openai-completion
  • entrypoints-integration-llm
  • entrypoints-integration-multimodal
  • entrypoints-integration-pooling
  • entrypoints-integration-responses-api
  • entrypoints-integration-speech_to_text
  • kernels-fla-ops-test-b200
  • kernels-mhc-test-b200
  • kernels-root-misc-test-b200
  • language-models-tests-granite-l4-compatibility
  • language-models-tests-hybrid ×2
  • language-models-tests-standard
  • multi-modal-models-standard-1-qwen2
  • multi-modal-models-standard-2-qwen3-gemma
  • multi-modal-models-standard-3-llava-qwen2-vl
  • multi-modal-models-standard-4-other-whisper
  • multi-modal-processor ×4
  • platform-tests
  • pytorch-compilation-passes-unit-tests
AMD mirrors: would add (0)

none

2 changed files · base faa9860dbd · head 97c5592b9f · Python record: build 92706 at 6e517b15c1 · kernel record: table 6e517b1 (build 92706), map 6e517b1 · not counted: 10 build steps, 5 A100 steps the generator no longer emits, 9 optional steps the selector would also run

@simon-mo
simon-mo merged commit 28556f8 into vllm-project:main Oct 3, 2026
86 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working ready ONLY add when PR is ready to merge/full CI is needed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants