ci: the emulated vector and SME legs bring their own emulator #674
Loading…
Reference in a new issue
No description provided.
Delete branch "ci/quantum-emulator-in-job"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What was wrong
The vector unit's sve and rvv legs and the matrix extension's emulated leg set cargo's runner to
env, so the host's binfmt handler ran their aarch64 and riscv64 test binaries. Whether a leg could pass therefore depended on whichlinuxrunner claimed it:…/deps/wai_quantum-…: 1:,: 7:) and the leg fails. A new x86_64linuxrunner (7049b355…) failed 4 of 4 such legs on 6 Nov, main's own SME run among them, while the other runners passed 26 of 26.The change (wai-quantum-vector.yml and wai-quantum-sme.yml only)
qemu-user_10.0.13+ds-0+deb13u1_amd64.deb, SHA-256 pinned; from snapshot.debian.org by SHA-1 if the pool has moved on). It fetches once per host into the workflow's cache, under the lock it already holds, keeping onlyqemu-aarch64andqemu-riscv64. The.debis xz-compressed, so the images' owndpkg-debunpacks it. The images are Ubuntu 16.04 and 18.04, whose apt would give a far older QEMU.CARGO_TARGET_<TRIPLE>_RUNNER="<cache>/qemu-<arch> -L /usr/<arch>-linux-gnu"replacesenvand the image's own runner (QEMU 5.1 and 6.1).QEMU_CPU(the SVE length, the RVVvlen/elen) is passed as before. The test binaries spawn no child processes on Linux, so noexecvefalls back to binfmt.aarch64/riscv64), or the leg fails with "the emulator cannot run a program for : ".qemu-user 10.0.13 (Debian's static build, run by the job).No changelog entry: nothing under
wai/changes. This merges cleanly with #666, which edits other lines of both files.Proof
I took the steps from git (every vector leg with its matrix values, the SME step, and main's sve 128 step as a control) and ran them on the Linux x86_64 build host in the legs' own pinned images. Each container was capped at 6 GiB as in CI. Two environments:
binfmt_miscinstance (register statusonly), where a foreign program executed directly gets "Exec format error". That is the situation of a runner without a handler; the host's own table is untouched.runner = env)…/deps/wai_quantum-…: 1:/: 7:, 0 certificates, as on7049b355bits=128, 4 certificates, 3/3 mutantsbits=128, 4, 3/3bits=512, 4, 3/3bits=512, 4, 3/3bits=2048, 4, 3/3bits=2048, 4, 3/3bits=128, 4, 3/3bits=128, 4, 3/3bits=1024, 4, 3/3bits=1024, 4, 3/3sme devices: as declared (cpu-matrix-sme), 4, 3/3bits=is the length the member reads from the unit itself (cntbon SVE,vlenbon RVV), so the configured lengths take effect under the pinned emulator. The preflight's failure path: with a cached "emulator" that runs nothing, the sve 128 leg stops before any test with::error::the emulator cannot run a … program: <runner>. (The proof ran the commit before a rewording of that message and of the preflight's success line; nothing else differs.)Also checked: both files parse;
check-workflow-concurrency.shandcheck-tests-in-ci.pypass.🤖 Generated with Claude Code