Commit f35a29

2026-07-21 07:09:48 Ralf Lici: add arm64 coverage info and references to the latest virtme-ng fixes
DataChannelOffload/CI for DCO Linux.md ..
@@ 33,10 33,10 @@
## High-level flow
- Each matrix job starts on a standard `ubuntu-24.04` GitHub runner. The runner
- installs the host-side tools needed to build root filesystems and boot virtual
- machines: `mmdebstrap`, `dnf`, `qemu`, `virtme-ng`, `virtiofsd`, and related
- utilities.
+ Each matrix job starts on a standard `ubuntu-24.04` or `ubuntu-24.04-arm64`
+ GitHub runner. The runner installs the host-side tools needed to build root
+ filesystems and boot virtual machines: `mmdebstrap`, `dnf`, `qemu`,
+ `virtme-ng`, `virtiofsd`, and related utilities.
The job then checks out two repositories:
@@ 58,10 58,10 @@
them from an Ubuntu GitHub runner.
Once the rootfs exists, the workflow boots it with virtme-ng. Inside the guest,
- the caller-provided script runs as root. For `ovpn-backports`, that script
- builds the module and runs the ovpn kselftests. For `ovpn-dco`, the current
- useful signal is primarily whether the module still builds across the supported
- kernel matrix.
+ the caller-provided script runs as root. For `ovpn-backports` on x86_64, that
+ script builds the module and runs the ovpn kselftests. For `ovpn-dco` and
+ `ovpn-backports` on arm64, the current useful signal is primarily whether the
+ module still builds across the supported kernel matrix.
## Why boot the distro kernel?
@@ 152,14 152,17 @@
target is noticeably slower, but still useful because it covers the oldest
kernel generation the module is expected to support.
- The other important performance detail is KVM. GitHub's Linux runners currently
+ The other important performance detail is KVM. GitHub's x86_64 Linux runners currently
expose `/dev/kvm`, so nested virtualization works and the guest boots are quick.
The guest runner script still probes for `/dev/kvm` before booting. If it is
missing, it adds `--disable-kvm` and continues with software emulation rather
than failing outright. That fallback is a safety net: GitHub documents nested
virtualization on hosted runners as
["experimental and done at your own risk," with no guarantees on stability or performance](https://docs.github.com/en/actions/concepts/runners/github-hosted-runners#runner-images).
- Today it works; the CI probes anyway.
+ In fact, on arm64, KVM is not exposed so we resort to software emulation which
+ is not only way slower but also instable (for example it occasionally segfaults
+ while building or installing the module). For this reason arm64 targets are
+ kept minimal and manual-dispatched only.
RHEL kernels also forced work in this area because they do not provide 9p at
all, and virtme-ng historically mounted some helper exports over 9p. That
@@ 168,15 171,22 @@
removes the remaining hardcoded 9p helper exports and uses virtiofs instead
when virtiofs is available.
- One related issue is still open at the time of writing:
- [`virtme-ng` issue #475](https://github.com/arighi/virtme-ng/issues/475).
- Some older kernels fail external-rootfs virtiofs boots when `virtiofsd` is
- started with `--posix-acl`. The CI still carries the corresponding workaround
- until that behavior is handled upstream.
+ Addidionatlly, some older kernels failed external-rootfs virtiofs boots when
+ `virtiofsd` was started with `--posix-acl`. [`virtme-ng` PR
+ #482](https://github.com/arighi/virtme-ng/pull/482) added `--no-root-posix-acl`
+ to explicitly control this behavior.
+
+ Finally, newer arm64 distro kernels are no longer plain Image files from QEMU's
+ point of view. Fedora 44 and recent Ubuntu development releases ship EFI zboot
+ images, and some Ubuntu kernels add another signed PE wrapper around the
+ bootable payload. [`virtme-ng` PR
+ #483](https://github.com/arighi/virtme-ng/pull/483) added support for arm64
+ kernel images normalization before passing them to QEMU.
## Scheduled runs
- The workflow can be triggered manually, but it is also designed to run nightly.
+ The workflow can be triggered manually, but the x86_64 matrix is also designed
+ to run nightly.
That is useful because the module repository may not change every day, while
distro kernels do. A RHEL or openSUSE kernel update can break the module even
@@ 201,10 211,13 @@
older 9p path, it takes about fifteen minutes, and therefore determines the
total runtime of the full parallel matrix.
- The compile-only `ovpn-dco` workload is shorter because it does not run the
+ The x86_64 `ovpn-dco` workload is shorter because it does not run the
kselftests. The Ubuntu and Debian jobs complete in about two minutes, and the
RHEL jobs complete in roughly three to five minutes.
+ The arm64 matrix, on the other hand, can take up to twenty minutes despite
+ being compile-only, because of the limitations of software emulation.
+
## Shared workflow model
The useful boundary is that the shared CI owns the infrastructure, while each
@@ 244,19 257,10 @@
## Current status
- The system now runs nightly across the default matrix and gives the OpenVPN
- kernel modules a real distro-kernel compatibility signal on ordinary
+ The system now runs nightly across the default x86_64 matrix and gives the
+ OpenVPN kernel modules a real distro-kernel compatibility signal on ordinary
GitHub-hosted runners.
Tested modules:
- - ovpn: https://github.com/OpenVPN/ovpn-backports/actions/workflows/vng-selftests.yml
- - ovpn-dco-v2: https://github.com/OpenVPN/ovpn-dco/actions/workflows/vng-build.yml
-
- ## Roadmap
-
- The next useful additions are arm64 coverage and upstreaming the remaining
- virtme-ng fix so the CI can stop depending on a fork. Deliberately not on the
- roadmap is an ever-longer distro list. This CI is testing kernel code rather
- than userspace integration, so the important coverage is the range of kernels
- people actually run. That set changes naturally as distributions move to new
- kernel versions.
+ - ovpn: https://github.com/OpenVPN/ovpn-backports/actions
+ - ovpn-dco-v2: https://github.com/OpenVPN/ovpn-dco/actions
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9