Skip to content

conformance: add the all-or-nothing negative case to gang-scheduling (CNCF bar) #3603

Description

@yuanchen8911

Part of #3601. Scope set by #3619 (CNCF bar).

Summary

Add the all-or-nothing negative case to the gang-scheduling conformance check, matching upstream TestGangScheduling. No new catalog entry and no GPU barrier: the upstream test is CPU-only.

Upstream bar

A gang Job that cannot fully fit must keep zero pods bound (no running or bound pod, spec.nodeName empty) for a verification window; a gang Job that fits must complete. Contention is made with CPU and memory requests, not accelerators.

Today

gang-scheduling creates a PodGroup with two CPU-only pods and verifies they co-schedule. That proves the positive case only.

Change

  • Extend the check in place: after the positive case, submit a PodGroup whose members cannot all fit (requests sized against the node's allocatable CPU and memory), hold for the verification window, and fail if any member binds. Credit requires the scheduler's affirmative gang refusal in the PodGroup status, as the script's barrier did, so an unbound pod from a stalled scheduler is not credited.
  • Record both phases as artifacts (PodGroup status, pod binding state) so the evidence page and e2e.log show the negative case.
  • Delete collect_gang from the collector script; its GPU barrier is not ported.

Acceptance

  • On a KAI cluster the check passes both phases; with gang scheduling disabled the negative case fails with the pod that bound.
  • Runtime stays under three minutes; no GPU is requested.

Activity

  1. changed the title [-]conformance: add gang-scheduling-gpu-barrier (port the script's two-phase all-or-nothing test)[/-] [+]conformance: add the all-or-nothing negative case to gang-scheduling (CNCF bar)[/+] on Nov 4, 2026
  2. yuanchen8911 commented on Nov 4, 2026

    @yuanchen8911
    ContributorAuthor

    Scope update from the CNCF bar audit (#3619, 2026-11-04). Verified against the kubernetes-sigs/ai-conformance tests at fd9ba2d and the upstream validator at c64e5bc; the full table is on #3619.

    Add:

    • A negative phase after the positive case: a PodGroup with minMember = N and N CPU-only members whose combined CPU and memory requests cannot fit the cluster (size against the sum of allocatable minus allocated across schedulable nodes, or use upstream's shape of many small members; either is at the bar). Hold for a verification window (upstream default 30s) and fail if any member has status.phase=Running or spec.nodeName set.
    • Resource requests on the positive-case pods. Today they request nothing; upstream uses 100m CPU and 128Mi so the scheduler has something to co-schedule against.
    • A positive-case completion bound (upstream: Complete within 2 min) in place of only the co-schedule window.

    Keep, above the bar but the vacuity control: credit the negative phase only when the PodGroup status.schedulingConditions carries KAI's affirmative gang refusal, so an unbound pod from a stalled or absent scheduler does not pass.

    Drop: the GPU barrier, idle-node selection, capacity blocker and nodeName pinning from collect_gang. Delete the section without a port. No nvidia.com/gpu request anywhere in the check.

    Acceptance:

    • Positive: both members Succeeded, each with spec.nodeName, within the completion bound.
    • Negative: zero members bound or Running for the full window, and the PodGroup refusal present. The refusal condition is the primary oracle on every cluster. Where a member can fit an eligible node (heterogeneous clusters), a bound member additionally fails fast with its name in the message; on homogeneous clusters no member fits any node, so that signal cannot fire and the refusal condition alone decides.
    • With gang scheduling disabled (default scheduler on the same pods), the negative phase fails: no refusal condition is written, so the phase is not credited; where a member fits a node it also fails by the bound member's name.
    • No GPU requested; runtime under three minutes; the evidence page and e2e.log show both phases.
  3. self-assigned this
    on Nov 4, 2026
  4. added a commit that references this issue on Nov 4, 2026
    d351d89
  5. yuanchen8911 commented on Nov 4, 2026

    @yuanchen8911
    ContributorAuthor

    Scope note: deleting the collect_gang section and manifests/gang-scheduling-test.yaml from the bash collector moves to #3602, which retires the collector as a whole. While --cncf-submission still runs the script as the only submission path, removing the section alone would drop the gang_scheduling MUST page from a submission. PR #3637 covers the Go check.

  6. added 6 commits that reference this issue on Nov 4, 2026
    755f968
    9cc544e
    80e3355
    f694eab
    d6d5d74
    a4575d7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area/validatortheme/validationConstraint evaluation, health checks, and conformance evidence

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions