diff mbox series

meson: adjust timeouts for some slower tests

Message ID 20210209174541.150011-1-pbonzini@redhat.com (mailing list archive)
State New, archived
Headers show
Series meson: adjust timeouts for some slower tests | expand

Commit Message

Paolo Bonzini Feb. 9, 2021, 5:45 p.m. UTC
Adjust the timeouts for the longest running tests.  These are the
times that I measured and the corresponding timeouts.  For generic
qtests, the target that reported the longest runtime is included.

unit tests:
    test-crypto-tlscredsx509        13.15s   60s
    test-crypto-tlssession          14.12s   60s

qtests:
    ide-test                        13.65s   60s
    npcm7xx_watchdog_timer-test     15.02s   60s
    qos-test                        21.26s   60s   (i386)
    ahci-test                       22.18s   60s
    pxe-test                        26.51s   90s
    boot-serial-test                28.02s   90s   (sparc)
    prom-env-test                   28.86s   90s
    bios-tables-test                50.17s   90s   (aarch64)
    test-hmp                        57.15s   90s   (aarch64)
    npcm7xx_pwm-test                71.27s   120s
    migration-test                  97.09s   150s  (aarch64)
    qom-test                        139.20s  180s  (aarch64)

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 tests/meson.build       |  6 ++++++
 tests/qtest/meson.build | 15 +++++++++++++++
 2 files changed, 21 insertions(+)

Comments

Richard Henderson Feb. 9, 2021, 5:54 p.m. UTC | #1
On 2/9/21 9:45 AM, Paolo Bonzini wrote:
> Adjust the timeouts for the longest running tests.  These are the
> times that I measured and the corresponding timeouts.  For generic
> qtests, the target that reported the longest runtime is included.
> 
> unit tests:
>     test-crypto-tlscredsx509        13.15s   60s
>     test-crypto-tlssession          14.12s   60s
> 
> qtests:
>     ide-test                        13.65s   60s
>     npcm7xx_watchdog_timer-test     15.02s   60s
>     qos-test                        21.26s   60s   (i386)
>     ahci-test                       22.18s   60s
>     pxe-test                        26.51s   90s
>     boot-serial-test                28.02s   90s   (sparc)
>     prom-env-test                   28.86s   90s
>     bios-tables-test                50.17s   90s   (aarch64)
>     test-hmp                        57.15s   90s   (aarch64)
>     npcm7xx_pwm-test                71.27s   120s
>     migration-test                  97.09s   150s  (aarch64)
>     qom-test                        139.20s  180s  (aarch64)
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  tests/meson.build       |  6 ++++++
>  tests/qtest/meson.build | 15 +++++++++++++++
>  2 files changed, 21 insertions(+)
> 
> diff --git a/tests/meson.build b/tests/meson.build
> index 0c939f89f7..fde21b6c8f 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -237,6 +237,11 @@ test_env = environment()
>  test_env.set('G_TEST_SRCDIR', meson.current_source_dir())
>  test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
>  
> +slow_tests = {
> +  'test-crypto-tlscredsx509': 2,
> +  'test-crypto-tlssession': 2
> +}
> +
>  foreach test_name, extra: tests
>    src = [test_name + '.c']
>    deps = [qemuutil]
> @@ -254,6 +259,7 @@ foreach test_name, extra: tests
>         env: test_env,
>         args: ['--tap', '-k'],
>         protocol: 'tap',
> +       timeout: 30 * slow_tests.get(test_name, 1),
>         suite: ['unit'])
>  endforeach
>  
> diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build
> index 7e082be6fb..b1f8790b75 100644
> --- a/tests/qtest/meson.build
> +++ b/tests/qtest/meson.build
> @@ -4,6 +4,20 @@ if not config_host.has_key('CONFIG_POSIX')
>    subdir_done()
>  endif
>  
> +slow_qtests = {
> +  'ahci-test' : 2,
> +  'bios-tables-test' : 3,
> +  'boot-serial-test' : 3,
> +  'ide-test' : 2,
> +  'migration-test' : 5,
> +  'npcm7xx_pwm-test': 4,
> +  'npcm7xx_watchdog_timer-test': 2,
> +  'prom-env-test' : 3,
> +  'pxe-test' : 3,
> +  'qos-test : 2,
> +  'qom-test' : 6,
> +  'test-hmp' : 3,
> +]

Mismatched brace?

>  qtests_generic = [
>    'cdrom-test',
>    'device-introspect-test',
> @@ -272,6 +286,7 @@ foreach dir : target_dirs
>           env: qtest_env,
>           args: ['--tap', '-k'],
>           protocol: 'tap',
> +         timeout: 30 * slow_qtests.get(test_name, 1),

Why scale here, rather than putting the real time in the dict?  Is there some
other scaling going on that I can't see?


r~

>           suite: ['qtest', 'qtest-' + target_base])
>    endforeach
>  endforeach
>
Daniel P. Berrangé Feb. 9, 2021, 5:58 p.m. UTC | #2
On Tue, Feb 09, 2021 at 06:45:41PM +0100, Paolo Bonzini wrote:
> Adjust the timeouts for the longest running tests.  These are the
> times that I measured and the corresponding timeouts.  For generic
> qtests, the target that reported the longest runtime is included.
> 
> unit tests:
>     test-crypto-tlscredsx509        13.15s   60s
>     test-crypto-tlssession          14.12s   60s

The default meson timeout is 30 seconds which is enough for these
tests. Of course larger timeouts give more headroom.

If running on particularly slow environemnt (eg under TCG)
then it would be expecte dto instead use "meson --timeout-multiplier=10"
to make everything have more headroom.

So I wonder what threshold we need the extra headroom above
30 seconds in the default config ?


> qtests:
>     ide-test                        13.65s   60s
>     npcm7xx_watchdog_timer-test     15.02s   60s
>     qos-test                        21.26s   60s   (i386)
>     ahci-test                       22.18s   60s
>     pxe-test                        26.51s   90s
>     boot-serial-test                28.02s   90s   (sparc)
>     prom-env-test                   28.86s   90s
>     bios-tables-test                50.17s   90s   (aarch64)
>     test-hmp                        57.15s   90s   (aarch64)
>     npcm7xx_pwm-test                71.27s   120s
>     migration-test                  97.09s   150s  (aarch64)
>     qom-test                        139.20s  180s  (aarch64)
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  tests/meson.build       |  6 ++++++
>  tests/qtest/meson.build | 15 +++++++++++++++
>  2 files changed, 21 insertions(+)
> 
> diff --git a/tests/meson.build b/tests/meson.build
> index 0c939f89f7..fde21b6c8f 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -237,6 +237,11 @@ test_env = environment()
>  test_env.set('G_TEST_SRCDIR', meson.current_source_dir())
>  test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
>  
> +slow_tests = {
> +  'test-crypto-tlscredsx509': 2,
> +  'test-crypto-tlssession': 2
> +}
> +
>  foreach test_name, extra: tests
>    src = [test_name + '.c']
>    deps = [qemuutil]
> @@ -254,6 +259,7 @@ foreach test_name, extra: tests
>         env: test_env,
>         args: ['--tap', '-k'],
>         protocol: 'tap',
> +       timeout: 30 * slow_tests.get(test_name, 1),
>         suite: ['unit'])
>  endforeach
>  
> diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build
> index 7e082be6fb..b1f8790b75 100644
> --- a/tests/qtest/meson.build
> +++ b/tests/qtest/meson.build
> @@ -4,6 +4,20 @@ if not config_host.has_key('CONFIG_POSIX')
>    subdir_done()
>  endif
>  
> +slow_qtests = {
> +  'ahci-test' : 2,
> +  'bios-tables-test' : 3,
> +  'boot-serial-test' : 3,
> +  'ide-test' : 2,
> +  'migration-test' : 5,
> +  'npcm7xx_pwm-test': 4,
> +  'npcm7xx_watchdog_timer-test': 2,
> +  'prom-env-test' : 3,
> +  'pxe-test' : 3,
> +  'qos-test : 2,
> +  'qom-test' : 6,
> +  'test-hmp' : 3,
> +]
>  qtests_generic = [
>    'cdrom-test',
>    'device-introspect-test',
> @@ -272,6 +286,7 @@ foreach dir : target_dirs
>           env: qtest_env,
>           args: ['--tap', '-k'],
>           protocol: 'tap',
> +         timeout: 30 * slow_qtests.get(test_name, 1),
>           suite: ['qtest', 'qtest-' + target_base])
>    endforeach
>  endforeach
> -- 
> 2.29.2
> 
> 

Regards,
Daniel
Paolo Bonzini Feb. 9, 2021, 6:45 p.m. UTC | #3
Il mar 9 feb 2021, 18:54 Richard Henderson <richard.henderson@linaro.org>
ha scritto:

> >           env: qtest_env,
> >           args: ['--tap', '-k'],
> >           protocol: 'tap',
> > +         timeout: 30 * slow_qtests.get(test_name, 1),
>
> Why scale here, rather than putting the real time in the dict?


Sure. In retrospect that isn't really useful.

Paolo

  Is there some
> other scaling going on that I can't see?
>
>
> r~
>
> >           suite: ['qtest', 'qtest-' + target_base])
> >    endforeach
> >  endforeach
> >
>
>
Paolo Bonzini Feb. 11, 2021, 11:30 a.m. UTC | #4
On 09/02/21 18:58, Daniel P. Berrangé wrote:
> On Tue, Feb 09, 2021 at 06:45:41PM +0100, Paolo Bonzini wrote:
>> Adjust the timeouts for the longest running tests.  These are the
>> times that I measured and the corresponding timeouts.  For generic
>> qtests, the target that reported the longest runtime is included.
>>
>> unit tests:
>>      test-crypto-tlscredsx509        13.15s   60s
>>      test-crypto-tlssession          14.12s   60s
> 
> The default meson timeout is 30 seconds which is enough for these
> tests. Of course larger timeouts give more headroom.

This was a relatively fast run, I've had them take as little as 7s and 
as much as 25s on the same machine.  I suspect it's because the machine 
has a very slow NFS home directory (yes those things still exist :)). 
In general a 2x-ish headroom makes sense in case someone is doing a 
build at the same time as a test run.

By the way, with Meson 0.57 there's the possibility of specifying 
"infinite timeout", and this could be used for the benchmarks.  Giving 
slower tests a higher priority is also a good idea, and even though this 
is not guaranteed in theory, Make ends up taking into account the 
priority as well.  With these tweaks "meson test" and "make check" 
(minus check-block of course) both clock at 2:20s, which is exactly the 
time it takes to run the longest-running test.

I will also give "meson test" a shot on the GitLab runners before 
posting v2, and see if it needs a timeout multiplier.

Paolo
Daniel P. Berrangé Feb. 11, 2021, 12:52 p.m. UTC | #5
On Thu, Feb 11, 2021 at 12:30:35PM +0100, Paolo Bonzini wrote:
> On 09/02/21 18:58, Daniel P. Berrangé wrote:
> > On Tue, Feb 09, 2021 at 06:45:41PM +0100, Paolo Bonzini wrote:
> > > Adjust the timeouts for the longest running tests.  These are the
> > > times that I measured and the corresponding timeouts.  For generic
> > > qtests, the target that reported the longest runtime is included.
> > > 
> > > unit tests:
> > >      test-crypto-tlscredsx509        13.15s   60s
> > >      test-crypto-tlssession          14.12s   60s
> > 
> > The default meson timeout is 30 seconds which is enough for these
> > tests. Of course larger timeouts give more headroom.
> 
> This was a relatively fast run, I've had them take as little as 7s and as
> much as 25s on the same machine.  I suspect it's because the machine has a
> very slow NFS home directory (yes those things still exist :)). In general a
> 2x-ish headroom makes sense in case someone is doing a build at the same
> time as a test run.
> 
> By the way, with Meson 0.57 there's the possibility of specifying "infinite
> timeout", and this could be used for the benchmarks.  Giving slower tests a
> higher priority is also a good idea, and even though this is not guaranteed
> in theory, Make ends up taking into account the priority as well.  With
> these tweaks "meson test" and "make check" (minus check-block of course)
> both clock at 2:20s, which is exactly the time it takes to run the
> longest-running test.
> 
> I will also give "meson test" a shot on the GitLab runners before posting
> v2, and see if it needs a timeout multiplier.

I'd say we should set the default timeouts so that they are suitable for
our automated GitLab CI, and what we expect typical developer platforms.

Timeout multiplier should only be needed if users are running on outdated
hardware, or under slow emulation.


Regards,
Daniel
diff mbox series

Patch

diff --git a/tests/meson.build b/tests/meson.build
index 0c939f89f7..fde21b6c8f 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -237,6 +237,11 @@  test_env = environment()
 test_env.set('G_TEST_SRCDIR', meson.current_source_dir())
 test_env.set('G_TEST_BUILDDIR', meson.current_build_dir())
 
+slow_tests = {
+  'test-crypto-tlscredsx509': 2,
+  'test-crypto-tlssession': 2
+}
+
 foreach test_name, extra: tests
   src = [test_name + '.c']
   deps = [qemuutil]
@@ -254,6 +259,7 @@  foreach test_name, extra: tests
        env: test_env,
        args: ['--tap', '-k'],
        protocol: 'tap',
+       timeout: 30 * slow_tests.get(test_name, 1),
        suite: ['unit'])
 endforeach
 
diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build
index 7e082be6fb..b1f8790b75 100644
--- a/tests/qtest/meson.build
+++ b/tests/qtest/meson.build
@@ -4,6 +4,20 @@  if not config_host.has_key('CONFIG_POSIX')
   subdir_done()
 endif
 
+slow_qtests = {
+  'ahci-test' : 2,
+  'bios-tables-test' : 3,
+  'boot-serial-test' : 3,
+  'ide-test' : 2,
+  'migration-test' : 5,
+  'npcm7xx_pwm-test': 4,
+  'npcm7xx_watchdog_timer-test': 2,
+  'prom-env-test' : 3,
+  'pxe-test' : 3,
+  'qos-test : 2,
+  'qom-test' : 6,
+  'test-hmp' : 3,
+]
 qtests_generic = [
   'cdrom-test',
   'device-introspect-test',
@@ -272,6 +286,7 @@  foreach dir : target_dirs
          env: qtest_env,
          args: ['--tap', '-k'],
          protocol: 'tap',
+         timeout: 30 * slow_qtests.get(test_name, 1),
          suite: ['qtest', 'qtest-' + target_base])
   endforeach
 endforeach