Hello,
Short Summary: I have added in 35d269c29 [1] cross architectural testing
using virtualized qemu machines. There are problems - we need to fix those.
Long Story:
For months now, I have been wishing I could get cross-arch testing done
on a regular basis on Racket. Initially I had something setup privately
for RISC-V but I quickly noticed that the framework could be extended to
other architectures.
Thanks to Sam I got permission to get
gitlab.com/racket/racket setup and
get things moving. It took a couple of months to get everything right.
Not necessarily due to inherent CI problems but I had to report a couple
of Gitlab issues first, debug qemu as well and setup a few of my
machines for this.
The important things are:
- with testing running on gitlab, people who would like to contribute
CPU time to Racket can do so by setting up a gitlab runner on said
machine (contact me for help). Because Gitlab CI free machines have a
maximum timeout that's enough for normal testing but not enough for
virtualization I needed to add some extra machines to do these specific
jobs. Besides the Gitlab CI machines, we have a 4 CPU x86_64, a 16 CPU
x86_64 and a rpi3 running in my server room. Of course, with more
machines, more tests can run simultaneously and therefore provide
quicker feedback.
- Matthew pointed to me a few archs Racket should support so I added those:
Testing added for Racket:
Native: armv7l (running on rpi3), x86_64
Emulated: arm64, armel, armhf, i386, mips, mips64el, mipsel, ppc64el, s390x
Testing added for Racket CS:
Native: x86_64
Emulation: i386
- There are problems and initially because so many of the architectures
fail either to compile or to test I assumed that this was a qemu bug.
Since I am not a virtualization expert it took me a few days and some
help from the qemu people to setup an environment to debug qemu inside a
chroot inside a docker container running racket in a different arch.
Afer some analysis, it turned out the segfault during compilation was
definitely coming from Racket [5]. In a discussion with Matthew he
proposed I could disable generational GC to ease debugging of the
problem. Turns out disabling it, caused the sigsegv not to occur any
more. So, at this point I think we are in the realm of a problem in
Racket. I haven't gotten to the bottom of this yet, but hopefully when I
do we can get all the lights green in the cross-arch testing.
There are a few things I would like to do in the future like running
benchmarks on a regular basis on Racket and RacketCS and have these
displayed on a dashboard but these will come later. First I would like
look into these failures which might be related to #2018 [2] and #1749 [3].
Lastly, this is another opportunity to help fix some Racket issues and
get involved. If you are into different archs, debugging and
contributing take a look at the logs coming out of the pipelines [4].
If you need some help or clarification on any of this, let me know.
[1]
https://github.com/racket/racket/commit/35d269c29eee6f6f7f3f83ea6f01b92ae1db180a
[2]
https://github.com/racket/racket/issues/2018
[3]
https://github.com/racket/racket/issues/1749
[4]
https://gitlab.com/racket/racket/pipelines/
[5]
https://gitlab.com/racket/racket/-/jobs/188658454
--
Paulo Matos