ci(phoenix): run the post-build syscheck under mpirun - #1728
Merged
Conversation
The post-build smoke test launched the syscheck binary directly. Since the August 11-13 PACE maintenance, which upgraded Phoenix to Slurm 26.05.2 with PMIx 4.2.6, an OpenMPI 4.1.5 binary started bare inside an allocation reads the PMIx environment as an srun launch and aborts in MPI_Init: OPAL ERROR: Unreachable in file ext3x_client.c at line 112 The application appears to have been direct launched using "srun", but OMPI was not built with SLURM's PMI support and therefore cannot execute. Every Phoenix job then failed validation twice and exited 1 before the test step ran, blocking all pull requests. mpirun is unaffected, and it is how MFC launches every other binary, so the smoke test now goes through it. The guard still catches what it was added for: a binary compiled for the wrong microarchitecture still dies on SIGILL and mpirun propagates the failure. Output is no longer sent to /dev/null, so the next failure is readable in the CI log instead of appearing as a bare "Post-build validation failed".
Contributor
There was a problem hiding this comment.
Pull request overview
This PR updates the Phoenix CI post-build smoke validation to run the syscheck MPI binary via mpirun instead of launching it directly, addressing failures caused by the recent Phoenix Slurm/PMIx upgrade and improving diagnosability by keeping output in the CI logs.
Changes:
- Run the post-build
syschecksmoke test undermpirun -np 1on Phoenix to avoid bare-launchMPI_Initfailures. - Stop redirecting
syscheckoutput to/dev/nullso failures are visible in CI logs. - Document the Slurm/PMIx/OpenMPI interaction that motivated the change.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+41
to
+43
| # aborts in MPI_Init ("OPAL ERROR: Unreachable in file ext3x_client.c"). mpirun | ||
| # is unaffected, and it is how MFC launches every binary anyway. Output is left | ||
| # on stdout so a future failure is diagnosable from the CI log. |
mrvandenboom
pushed a commit
to mrvandenboom/mfc-vdb
that referenced
this pull request
Aug 16, 2026
The post-build smoke test launched the syscheck binary directly. Since the August 11-13 PACE maintenance, which upgraded Phoenix to Slurm 26.05.2 with PMIx 4.2.6, an OpenMPI 4.1.5 binary started bare inside an allocation reads the PMIx environment as an srun launch and aborts in MPI_Init: OPAL ERROR: Unreachable in file ext3x_client.c at line 112 The application appears to have been direct launched using "srun", but OMPI was not built with SLURM's PMI support and therefore cannot execute. Every Phoenix job then failed validation twice and exited 1 before the test step ran, blocking all pull requests. mpirun is unaffected, and it is how MFC launches every other binary, so the smoke test now goes through it. The guard still catches what it was added for: a binary compiled for the wrong microarchitecture still dies on SIGILL and mpirun propagates the failure. Output is no longer sent to /dev/null, so the next failure is readable in the CI log instead of appearing as a bare "Post-build validation failed".
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Every Phoenix job has failed on every PR since the cluster came back from the August 11-13 PACE maintenance, blocking the queue. The failure is in CI, not in MFC.
The post-build smoke test in
.github/workflows/common/build.shlaunches thesyscheckbinary directly:The maintenance upgraded Phoenix to Slurm 26.05.2 with PMIx 4.2.6. Phoenix's
openmpi/4.1.5predates that, so an MPI binary started bare inside an allocation now reads the PMIx environment as an srun launch and aborts inMPI_Init:retry_buildthen nukes the build directory, rebuilds, fails validation a second time, and exits 1 before the test step ever runs.This changes the smoke test to launch through
mpirun, which is unaffected and is how MFC launches every other binary. The guard still does what it was added for in #1304: a binary compiled for the wrong microarchitecture still dies on SIGILL, andmpirunpropagates the non-zero exit.Output is no longer redirected to
/dev/null. That redirection is why this presented as a barePost-build validation failed on attempt 1.with no cause in the log.Type of change
Testing
Reproduced and verified on a Phoenix compute node with the CPU CI modules (
. ./mfc.sh load -c p -m c, gcc/12.3.0 + openmpi/4.1.5), on a clean build ofsyscheck:Corroborating evidence that only the bare launch is broken: the Case Opt Phoenix jobs pass on the same runs that fail here, and they run
mpirun -np 2 .../bin/syschecktoSyscheck: PASSED.followed by five full pre_process/simulation/post_process cases../mfc.shprecheck passes (all seven lint-gate checks).Checklist
Notes for follow-up (not in this PR)
Two unrelated things surfaced while tracking this down:
cmake/MFCTargets.cmake:294linksCUDA::nvToolsExton theCUDA <= 12.8branch. CUDA 12.9 removed that shared library (NVTX v3 is header-only), and an NVHPC-built tree here carries a directNEEDED libnvToolsExt.so.1. Worth checking against the upgraded CUDA on Phoenix.Target.get_slug()intoolchain/mfc/build.py:301hashes the target name, config slug, and fpp, but not the compiler. A gcc build and an nvfortran build of the same config both land inbuild/install/cpu-<hash>. CI hides this by wipingbuild/each Phoenix job; it does bite locally.