diff mbox series

ci: update freebsd 12 cirrus job

Message ID 20210812202200.82465-1-carenas@gmail.com (mailing list archive)
State Accepted
Commit ad51ae4dc0f3df5d2c85c9a4eb57ffda79a31049
Headers show
Series ci: update freebsd 12 cirrus job | expand

Commit Message

Carlo Marcelo Arenas Belón Aug. 12, 2021, 8:22 p.m. UTC
make sure it uses a supported OS branch and uses all the resources
that can be allocated efficiently.

while only 1GB of memory is needed, 2GB is the minimum for a 2 CPU
machine (the default), but by increasing parallelism wall time has
been reduced by 35%.

Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
---
 .cirrus.yml | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Comments

SZEDER Gábor Aug. 13, 2021, 9:39 a.m. UTC | #1
On Thu, Aug 12, 2021 at 01:22:00PM -0700, Carlo Marcelo Arenas Belón wrote:
> make sure it uses a supported OS branch and uses all the resources
> that can be allocated efficiently.
> 
> while only 1GB of memory is needed, 2GB is the minimum for a 2 CPU
> machine (the default), but by increasing parallelism wall time has
> been reduced by 35%.
> 
> Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
> ---
>  .cirrus.yml | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/.cirrus.yml b/.cirrus.yml
> index c2f5fe385a..e114ffee1a 100644
> --- a/.cirrus.yml
> +++ b/.cirrus.yml
> @@ -2,8 +2,15 @@ env:
>    CIRRUS_CLONE_DEPTH: 1
>  
>  freebsd_12_task:
> +  env:
> +    GIT_PROVE_OPTS: "--timer --jobs 10"

Why these prove options?

On other CI systems we pass 'prove' the option
'--state=failed,slow,save' as well to reduce runtime.  However, this
only works when there is a persistent place for prove's state files,
e.g. the cache feature of Travis CI.  If Cirrus CI lacks a similar
feature, then we can't benefit from this option, but it'd be worth
mentioning in the commit message.

> +    GIT_TEST_OPTS: "--no-chain-lint --no-bin-wrappers"

Why these test options?

chain-linting is done by a mighty sed script; I think it's worth
running it with FreeBSD's 'sed' as well.

Quoting 't/README', '--no-bin-wrappers' "can speed up test runs
especially on platforms where running shell scripts is expensive".  Is
running shell scripts really that expensive on FreeBSD?

OTOH, why are there no options that would show us some information
about test failures, i.e. why no '--verbose-log -x --immediate' like
on other CI systems?

> +    MAKEFLAGS: "-j4"
> +    DEFAULT_TEST_TARGET: prove
> +    DEVELOPER: 1
>    freebsd_instance:
> -    image: freebsd-12-1-release-amd64
> +    image_family: freebsd-12-2
> +    memory: 2G
>    install_script:
>      pkg install -y gettext gmake perl5
>    create_user_script:
> -- 
> 2.33.0.rc1.379.g2890ef5eb6
>
Carlo Marcelo Arenas Belón Aug. 14, 2021, 1:42 a.m. UTC | #2
On Fri, Aug 13, 2021 at 2:39 AM SZEDER Gábor <szeder.dev@gmail.com> wrote:
>
> On Thu, Aug 12, 2021 at 01:22:00PM -0700, Carlo Marcelo Arenas Belón wrote:
> > diff --git a/.cirrus.yml b/.cirrus.yml
> > index c2f5fe385a..e114ffee1a 100644
> > --- a/.cirrus.yml
> > +++ b/.cirrus.yml
> > @@ -2,8 +2,15 @@ env:
> >    CIRRUS_CLONE_DEPTH: 1
> >
> >  freebsd_12_task:
> > +  env:
> > +    GIT_PROVE_OPTS: "--timer --jobs 10"
>
> Why these prove options?

that line came from the Github Actions part of ci/lib.sh.

--jobs is the one I was going after, but kept --timer for consistency.

> On other CI systems we pass 'prove' the option
> '--state=failed,slow,save' as well to reduce runtime.  However, this
> only works when there is a persistent place for prove's state files,
> e.g. the cache feature of Travis CI.

note that when GitHub Actions was added[1], it was explicitly excluded
because it wasn't really that effective

> If Cirrus CI lacks a similar
> feature, then we can't benefit from this option, but it'd be worth
> mentioning in the commit message.

They do have the option and will likely be a small change that I could
send as a follow up, but wasn't included in this change since it was
"controversial" as pointed above.

note also that the other uses of it aren't really being exercised,
since AFAIK neither azure or travis are running now, and indeed last
time I tried to run CI in my own account it didn't end up well, with
no successful run and running out of credit before I could even
attempt to fix them all.

indeed, was even going to suggest (after release) that they are
removed, which will also make the code cleaner for integrating cirrus
(which still has a usable opensource plan).

> > +    GIT_TEST_OPTS: "--no-chain-lint --no-bin-wrappers"
> Why these test options?

again lifted from the "GitHub Actions" code just for consistency and
to avoid breaking if either of those are broken (considering the only
other running CI does test with those unconditionally), but I realize
now that I might have been too conservative since my focus with this
commit was "speed and accuracy".

> chain-linting is done by a mighty sed script; I think it's worth
> running it with FreeBSD's 'sed' as well.

indeed, even if I recall correctly it was Solaris sed the one that
broke, and I would expect anyone breaking this chainlinting will
notice very quickly on their local run.

> Quoting 't/README', '--no-bin-wrappers' "can speed up test runs
> especially on platforms where running shell scripts is expensive".  Is
> running shell scripts really that expensive on FreeBSD?

no, I am assuming they were added with Windows in mind, but note that
as configure they also affect all the linux builds through GitHub
Actions.
Both these flags might be worth adding back for all non Windows
systems, but doing so will be easier when using the "ci" scripts for
all environments and after it has been discussed IMHO.

> OTOH, why are there no options that would show us some information
> about test failures, i.e. why no '--verbose-log -x --immediate' like
> on other CI systems?

I wasn't the original author, so can't answer why it wasn't done; but
I sure think the next step will be to add support for it to the ci/
scripts and with that make it more consistent, which likely will
include that change.

This patch was just the minimal change to make sure that it runs
efficiently and is representative of current users.

Carlo

[1] https://lore.kernel.org/git/40fe4f7e2c34c6997a6824ef0dc6aad7a71a4434.1586538752.git.congdanhqx@gmail.com/
Johannes Schindelin Aug. 14, 2021, 10:29 p.m. UTC | #3
Hi Gábor,

On Fri, 13 Aug 2021, SZEDER Gábor wrote:

> On Thu, Aug 12, 2021 at 01:22:00PM -0700, Carlo Marcelo Arenas Belón wrote:
> > make sure it uses a supported OS branch and uses all the resources
> > that can be allocated efficiently.
> >
> > while only 1GB of memory is needed, 2GB is the minimum for a 2 CPU
> > machine (the default), but by increasing parallelism wall time has
> > been reduced by 35%.
> >
> > Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
> > ---
> >  .cirrus.yml | 9 ++++++++-
> >  1 file changed, 8 insertions(+), 1 deletion(-)
> >
> > diff --git a/.cirrus.yml b/.cirrus.yml
> > index c2f5fe385a..e114ffee1a 100644
> > --- a/.cirrus.yml
> > +++ b/.cirrus.yml
> > @@ -2,8 +2,15 @@ env:
> >    CIRRUS_CLONE_DEPTH: 1
> >
> >  freebsd_12_task:
> > +  env:
> > +    GIT_PROVE_OPTS: "--timer --jobs 10"
>
> Why these prove options?

The only problem I see with it is that its `--jobs 10` disagrees with the
`MAKEFLAGS: -j4` below. Either both should say 10, or both should say 4.

> On other CI systems we pass 'prove' the option
> '--state=failed,slow,save' as well to reduce runtime.  However, this
> only works when there is a persistent place for prove's state files,
> e.g. the cache feature of Travis CI.  If Cirrus CI lacks a similar
> feature, then we can't benefit from this option, but it'd be worth
> mentioning in the commit message.

We also don't benefit from this in the GitHub workflow because there is
likewise no easy way to persist the state.

> > +    GIT_TEST_OPTS: "--no-chain-lint --no-bin-wrappers"
>
> Why these test options?

I guess that's for the same reason we use these options in the Windows
tests: it speeds up things for a historically pretty slow build axis. At
least I seem to see FreeBSD runs lagging behind all the time.

> chain-linting is done by a mighty sed script; I think it's worth
> running it with FreeBSD's 'sed' as well.
>
> Quoting 't/README', '--no-bin-wrappers' "can speed up test runs
> especially on platforms where running shell scripts is expensive".  Is
> running shell scripts really that expensive on FreeBSD?

I don't think it is FreeBSD per se, but the available VMs that make this
speed-up worth our while.

> OTOH, why are there no options that would show us some information
> about test failures, i.e. why no '--verbose-log -x --immediate' like
> on other CI systems?

That's because we don't use the `ci/` scripts at all, and the failures are
not actually shown.

This is a mild annoyance to me, I have to admit: there is very little in
the way of actionable information whenever the FreeBSD jobs fail.

Lucky for me, I've so far only encountered breakages that _also_ affected
the macOS build axes, and therefore I could diagnose the issues in the
GitHub workflow run logs.

But yes, it would be nice if the FreeBSD CI runs were more helpful in case
of problems.

As far as this here patch goes: I am in favor of integrating it as-is.

Ciao,
Dscho

>
> > +    MAKEFLAGS: "-j4"
> > +    DEFAULT_TEST_TARGET: prove
> > +    DEVELOPER: 1
> >    freebsd_instance:
> > -    image: freebsd-12-1-release-amd64
> > +    image_family: freebsd-12-2
> > +    memory: 2G
> >    install_script:
> >      pkg install -y gettext gmake perl5
> >    create_user_script:
> > --
> > 2.33.0.rc1.379.g2890ef5eb6
> >
>
diff mbox series

Patch

diff --git a/.cirrus.yml b/.cirrus.yml
index c2f5fe385a..e114ffee1a 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -2,8 +2,15 @@  env:
   CIRRUS_CLONE_DEPTH: 1
 
 freebsd_12_task:
+  env:
+    GIT_PROVE_OPTS: "--timer --jobs 10"
+    GIT_TEST_OPTS: "--no-chain-lint --no-bin-wrappers"
+    MAKEFLAGS: "-j4"
+    DEFAULT_TEST_TARGET: prove
+    DEVELOPER: 1
   freebsd_instance:
-    image: freebsd-12-1-release-amd64
+    image_family: freebsd-12-2
+    memory: 2G
   install_script:
     pkg install -y gettext gmake perl5
   create_user_script: