[LTP] [PATCH] Increase threshold in timer measurement library
Cyril Hrubis
chrubis@suse.cz
Wed Oct 18 12:58:32 CEST 2017
Hi!
> On my system - arm64 emulated in QEMU, the following tests fail:
> epoll_wait02, nanosleep01, pselect01 and select04 - all due to
> violation the threshold limit for sleeping in do_timer_test().
>
> If my understanding correct, the threshold per syscall is rather
> empirical value. I tested LTP in ILP32 and LP64 modes, and despite
> the random nature of time accounting, failures are reproducible very
> stable.
It's more of an educated guess, we did quite a lot of measurements and
so the final formula is both based on the understanding of the kernel
internals and the empirical data.
> Increasing threshold fixes my failures.
I'm a bit worried here that we would end up increasing the thresholds up
to the point where we do not assert anything reasonable since for any
treshold we can possibly find a slow enough emulated machine where it
fails. I guess that the machine emulates arm64 on x86 right?
I think that it would be much better if we solved this in a way that
wouldn't increase the thresholds for most of the test targets. Simple
way would be adding an interface to multiply the threshold when needed,
we do have LTP_TIMEOUT_MUL already, we may as well use it here. Or we
can try some kind of auto-tuning such as BogoMips but that would be
quite complicated to get right.
> Signed-off-by: Yury Norov <ynorov@caviumnetworks.com>
> ---
> lib/tst_timer_test.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/lib/tst_timer_test.c b/lib/tst_timer_test.c
> index cd4ebcaa8..8e2881e24 100644
> --- a/lib/tst_timer_test.c
> +++ b/lib/tst_timer_test.c
> @@ -176,7 +176,7 @@ static int cmp(const void *a, const void *b)
> /*
> * The threshold per one syscall is computed as a sum of:
> *
> - * 400 us - accomodates for context switches, process
> + * 1500 us - accomodates for context switches, process
> * migrations between CPUs on SMP, etc.
> * 2*monotonic_resolution - accomodates for granurality of the CLOCK_MONOTONIC
> * slack_per_scall - max of 0.1% of the sleep capped on 100ms or
> @@ -198,7 +198,7 @@ static long long compute_threshold(long long requested_us,
>
> slack_per_scall = MAX(slack_per_scall, timerslack);
>
> - return (400 + 2 * monotonic_resolution + slack_per_scall) * nsamples
> + return (1500 + 2 * monotonic_resolution + slack_per_scall) * nsamples
> + 3000/nsamples;
> }
>
> --
> 2.11.0
>
--
Cyril Hrubis
chrubis@suse.cz
More information about the ltp
mailing list