On Tue, 10 Nov 2020 19:05:31 GMT, Aleksey Shipilev <sh...@openjdk.org> wrote:

> It is 
> [possible](https://github.com/openjdk/jdk/blob/master/doc/building.md#creating-and-using-sysroots-with-qemu-deboostrap)
>  to efficiently cross-compile to foreign architectures on current GH actions 
> that are driven by Ubuntu. I have been using this method for years to produce 
> binaries at [builds.shipilev.net](https://builds.shipilev.net). 
> 
> These cross-compilation targets frequently find arch-specific build bugs. 
> Hotspot is rather well insulated from the fundamental problems in 
> arch-support, so the overwhelming majority of those arch-specific bugs are 
> simple omissions of `#include`-s, inconsistent `#ifdef`-ing, missed method 
> renames / signature changes, or incorrect removals of methods that are used 
> by arch-specific code. Those are straightforward to fix, if the contributor 
> knows about them. My experience says the common attitude to these fixes is: 
> "Oh, I would have fixed it in the original change if I knew about this." 
> 
> This improvement adds several foreign architectures to GH actions workflow to 
> provide the automatic safety net to give early warning for these cases. In 
> fact, many Hotspot contributors already build AArch64, ARM, PPC64 targets as 
> pre-integration sanity checks, and this does the important checks 
> automatically for them.
> 
> To optimize workflow costs, the change does the following:
>   - The build is only done for hotspot-debug-no-pch, as the most frequent 
> place where arch-specific build bugs show up. 
>   - There are no tests, and in fact the arch-specific binary does not even 
> run. The build is purely about the build.
>   - Foreign architectures reuse the Linux x86_64 release build as build JDK. 
> This avoids building "host" build JDK as it would otherwise happen with 
> cross-compiling.
>   - The created sysroot is cached and keyed on `submit.yml` hash. So it would 
> regenerate only if the workflow itself changes.  This saves about 10 minutes 
> per arch.
> 
> Space-wise, sysroots in GH cache take about 580M uncompressed, and 270M 
> zstd-compressed bundle. In the end, this adds 4x270 = 1080M into local cache.
> 
> Time-wise, ball-parking the current workflow budget [looks like 
> this](https://github.com/shipilev/jdk/runs/1389151071):
>  - Linux x86_64:
>    - builds: 120m
>    - tests: 200m
>  - Linux x86_32:
>    - builds: 75m
>    - tests: 235m
>  - Windows x86_64
>    - builds: 120m
>    - tests: 290m
>  - MacOS x86_64
>    - builds: 75m
>    - tests: 165m
>  - Linux aarch64:
>    - builds: 25m (+10m to create uncached sysroot)
>  - Linux arm:
>    - builds: 20m (+10m to create uncached sysroot)
>  - Linux ppc64le:
>    - builds: 20m (+15m to create uncached sysroot)
>  - Linux s390x:
>    - builds: 20m (+10m to create uncached sysroot)
> 
> In other words, new workflow takes about 715 Linux-host-minutes, 410 
> Windows-host-minutes, 240 Mac-host-minutes. Out of which new jobs take about 
> 85 Linux-host-minutes. So the cost of new jobs is roughly:
>   - 11.9% of Linux-host-minutes
>   - 6.2% of all-host-minutes
>   - 2.2% of runner-minutes, if you [weigh in the proportional cost of 
> non-Linux 
> runners](https://docs.github.com/en/free-pro-team@latest/github/setting-up-and-managing-billing-and-payments-on-github/about-billing-for-github-actions)
> 
> In other words, the additional runner costs are pale in comparison with what 
> is already done in build and test jobs.

This pull request has now been integrated.

Changeset: e9956fec
Author:    Aleksey Shipilev <sh...@openjdk.org>
URL:       https://git.openjdk.java.net/jdk/commit/e9956fec
Stats:     557 lines in 1 file changed: 556 ins; 0 del; 1 mod

8256127: Add cross-compiled foreign architectures builds to submit workflow

Reviewed-by: ihse, rwestberg

-------------

PR: https://git.openjdk.java.net/jdk/pull/1147

Reply via email to