Skip to content

clonevm_exec_test hangs after 'second stage': post-exec rendezvous never completes (1 boot in 30, aarch64 cortex-a72) #690

Description

@ryanbreen

Summary

One boot in 30 on the aarch64 cortex-a72 service-sequence profile stalls
inside clonevm_exec_test: it prints CLONEVM_EXEC_TEST: second stage and
never reaches CLONEVM_EXEC_TEST: post-exec rendezvous complete. init is
blocked in waitpid on it, so the whole service sequence stops there — bsshd,
bwm, telnetd and bounce are never spawned and the gate times out at 45s
with UNATTRIBUTED.

The guest is not dead: heartbeats continue, [net-rx-counters] samples keep
advancing, and the strand census keeps sampling to the wall clock. It is one
process wedged in a rendezvous, not a hang.

Serial

Preserved in-repo:
docs/planning/green-program/sockets/serials/aarch64-clonevm-second-stage-stall-20260829.txt

Green boots on the same run reach:

CLONEVM_EXEC_TEST: second stage
CLONEVM_EXEC_TEST: post-exec rendezvous complete
CLONEVM_EXEC_TEST: post-exec futex keys derived
CLONEVM_EXEC_TEST: PASS

The failing boot stops after second stage. Its cloned thread exits normally
([syscall] exit(0) pid=99 name=thread-99); the process itself never exits.

The strand census on the stalled boot reports live scheduling irregularity that
may or may not be related, recorded here rather than interpreted:

[SCHED_STRAND_ORACLE:aarch64:...:stranded=0:...:nonprogress=1:
 queued_on_nondispatching_cpu=1:worst_queued_nondispatch_ms=1599:
 worst_cpu_scheduler_silence_ms=1642:worst_silence_cpu=0]

Rate, and what it is not

tree profile boots occurrences
fix/568-poll-wedge cortex-a72 30 1
fix/568-poll-wedge max 10 0
main @ 6d0d2ac5 cortex-a72 30 0

1/30 against 0/30 does not discriminate, so this is not attributed to the
branch and not attributed to main. It is filed rather than absorbed
because R52 makes an unexplained boot failure gate-failing, and it now has a
name and a serial instead of a shrug.

It is not the branch's poll work: the #568 oracle PASSED on this very boot
([POLL_TCP_ORACLE:PASS:stages=3:idle_ms=128:late_ms=82:park_ms=81:attempts=1],
[init] poll_tcp_oracle exited pid=95 code=0) several service steps earlier, and
kernel/src/task/scheduler.rs on that branch is byte-identical to main.

Where to start

The marker that never arrives is the post-exec rendezvous, which is futex-based.
The adjacent history is #602/#584 (clonevm rendezvous and FUTEX_WAIT lost
wake, closed by #604) and #586 (starved wake-loss misreport). This may be a
surviving instance of that family at a much lower rate, or a distinct
exec-side ordering problem. Reproducing it will need a soak: at 1/30 a 200-boot
cortex-a72 battery is the smallest sample that says anything.

Found while re-doing #568's evidence (green program, sockets).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions