From: Cyril Hrubis <chrubis@suse.cz>
To: ltp@lists.linux.it
Subject: [LTP] [Automated-testing] [PATCH 3/4] lib: Introduce concept of max_test_runtime
Date: Wed, 9 Jun 2021 15:32:46 +0200 [thread overview]
Message-ID: <YMDC/mjGTXxoq9uH@yuki> (raw)
In-Reply-To: <YMDBFfCZwYDYwWDg@pevik>
Hi!
> > - the scaled value is then divided, if needed, so that we end up a
> > correct maximal runtime for an instance of a test, i.e. we have
> > max runtime for an instance fork_testrun() that is inside of
> > .test_variants and .all_filesystems loops
> Now "Max runtime per iteration" can vary, right? I.e. on .all_filesystems
> runtime for each filesystems depends on number of filesystems? E.g. writev03.c
> with setup .timeout = 600 on 2 filesystems is 5 min (300s), but with all 9
> filesystems is about 1 min. We should document that author should expect max
> number of filesystems. What happen with these values in the (long) future, when
> LTP support new filesystem (or drop some)? This was a reason for me to define in
> the test value for "Max runtime per iteration", not whole run.
That's one of the downsides of this approach.
The reason why I choose this approach is that you can set upper cap for
the whole test run and not only for a single filesystem/variant.
Also this way the test timeout corresponds to the maximal test runtime.
Another option would be to redefine the timeout to be timeout per a
fork_testrun() instance, which would make the approach slightly easier
in some places, however that would mean either changing default test
timeout to much smaller value and annotating all long running tests.
Hmm, I guess that annotating all long running tests and changing default
timeout may be a good idea regardless this approach.
> > - this also allows us to controll the test max runtime by setting a
> > test timeout
>
> > * The maximal runtime, per whole test, can be passed down to the test
>
> > - If LTP_MAX_TEST_RUNTIME is set in test environment it's used as a
> > base for max_runtime instead of the scaled down timeout, it's still
> > divided into pieces so that we have correct runtime cap for an
> > fork_testrun() instance
> LTP_MAX_TEST_RUNTIME should go to doc/user-guide.txt. I suppose you waiting for
> a feedback before writing docs.
Yes I do not consider this to be finished patchset and I do expect that
it would need some changes.
> > - We also make sure that test timeout is adjusted, if needed, to
> > accomodate for the new test runtime cap, i.e. if upscaled runtime is
> > greater than timeout, the test timeout is adjusted
>
> > Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
> > ---
> > include/tst_fuzzy_sync.h | 4 +-
> > include/tst_test.h | 7 +-
> > lib/newlib_tests/.gitignore | 3 +-
> > .../{test18.c => test_runtime01.c} | 7 +-
> > lib/newlib_tests/test_runtime02.c | 31 +++++++++
> > lib/tst_test.c | 64 ++++++++++++++++++-
> > testcases/kernel/crypto/af_alg02.c | 2 +-
> > testcases/kernel/crypto/pcrypt_aead01.c | 2 +-
> > testcases/kernel/mem/mtest01/mtest01.c | 6 +-
> > testcases/kernel/mem/mtest06/mmap1.c | 13 ++--
> > .../kernel/syscalls/move_pages/move_pages12.c | 4 +-
> > 11 files changed, 117 insertions(+), 26 deletions(-)
> > rename lib/newlib_tests/{test18.c => test_runtime01.c} (59%)
> +1 for test description instead of plain number.
>
> ...
> > +++ b/lib/newlib_tests/test_runtime01.c
> ...
> > static void run(void)
> > {
> > - do {
> > + while (tst_remaining_runtime())
> > sleep(1);
> > - } while (tst_timeout_remaining() >= 4);
>
> > - tst_res(TPASS, "Timeout remaining: %d", tst_timeout_remaining());
> > + tst_res(TPASS, "Timeout remaining: %d", tst_remaining_runtime());
>
> There is a warning:
> tst_test.c:1369: TINFO: Timeout per run is 0h 00m 05s
> tst_test.c:1265: TWARN: Timeout too short for runtime offset 5!
> tst_test.c:1309: TINFO: runtime > timeout, adjusting test timeout to 6
> tst_test.c:1318: TINFO: Max runtime per iteration 1s
> test_runtime01.c:15: TPASS: Timeout remaining: 0
This is expected.
> Maybe test should use value without warning (i.e. 7).
> Or is the warning intended to be the test output?
>
> .timeout = 6 fails:
>
> tst_test.c:1369: TINFO: Timeout per run is 0h 00m 06s
> tst_test.c:1304: TBROK: Test runtime too small!
This is one of the corner cases that probably needs to be handled
differently.
> .timeout >= 7 is ok:
> tst_test.c:1369: TINFO: Timeout per run is 0h 00m 07s
> tst_test.c:1318: TINFO: Max runtime per iteration 1s
> test_runtime01.c:15: TPASS: Timeout remaining: 0
>
> ...
> > diff --git a/lib/tst_test.c b/lib/tst_test.c
> > index 7c9061d6d..23b52583a 100644
> > --- a/lib/tst_test.c
> > +++ b/lib/tst_test.c
>
> > -unsigned int tst_timeout_remaining(void)
> > +#define RUNTIME_TIMEOUT_OFFSET 5
> => maybe define it to 6 to allow running with .timeout = 6?
>
> > +#define RUNTIME_TIMEOUT_SCALE 0.9
> > +
> > +static unsigned int timeout_to_runtime(void)
> > +{
> > + if (results->timeout <= RUNTIME_TIMEOUT_OFFSET) {
> > + tst_res(TWARN, "Timeout too short for runtime offset %i!",
> > + RUNTIME_TIMEOUT_OFFSET);
> > + return 1;
> > + }
> > +
> > + return (results->timeout - RUNTIME_TIMEOUT_OFFSET) * RUNTIME_TIMEOUT_SCALE;
> > +}
> > +
> > +static unsigned int runtime_to_timeout(unsigned int runtime)
> > +{
> > + return runtime / RUNTIME_TIMEOUT_SCALE + RUNTIME_TIMEOUT_OFFSET;
> > +}
> ...
>
> Also test_runtime02.c fails, is that intended?
> tst_test.c:1374: TINFO: Timeout per run is 0h 00m 05s
> tst_test.c:1265 timeout_to_runtime(): results->timeout: 5
> tst_test.c:1266 timeout_to_runtime(): RUNTIME_TIMEOUT_OFFSET: 5
> tst_test.c:1268: TWARN: Timeout too short for runtime offset 5!
> tst_test.c:1314: TINFO: runtime > timeout, adjusting test timeout to 6
> tst_test.c:1321: TBROK: Test runtime too small!
Yes, this is also supposed to fail, it's written in the test comment as
well...
--
Cyril Hrubis
chrubis@suse.cz
next prev parent reply other threads:[~2021-06-09 13:32 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-09 11:46 [LTP] [PATCH 0/4] Introduce a concept of test runtime cap Cyril Hrubis
2021-06-09 11:46 ` [LTP] [PATCH 1/4] lib: tst_supported_fs_types: Add tst_fs_max_types() Cyril Hrubis
2021-06-09 11:46 ` [LTP] [PATCH 2/4] lib: tst_test: Move timeout scaling out of fork_testrun() Cyril Hrubis
2021-06-09 11:46 ` [LTP] [PATCH 3/4] lib: Introduce concept of max_test_runtime Cyril Hrubis
2021-06-09 13:24 ` [LTP] [Automated-testing] " Petr Vorel
2021-06-09 13:32 ` Cyril Hrubis [this message]
2021-06-09 14:05 ` Petr Vorel
2021-06-09 13:43 ` Cyril Hrubis
2021-06-11 15:07 ` Martin Doucha
2021-06-13 19:44 ` Petr Vorel
2021-06-14 8:02 ` Richard Palethorpe
2021-06-09 14:44 ` [LTP] " Richard Palethorpe
2021-06-09 11:46 ` [LTP] [PATCH 4/4] syscalls/writev03: Adjust test runtime Cyril Hrubis
2021-06-09 14:54 ` [LTP] [PATCH 0/4] Introduce a concept of test runtime cap Richard Palethorpe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YMDC/mjGTXxoq9uH@yuki \
--to=chrubis@suse.cz \
--cc=ltp@lists.linux.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.