From: Li Wang <liwang@redhat.com>
To: ltp@lists.linux.it
Cc: Viresh Kumar <viresh.kumar@linaro.org>,
Eirik Fuller <efuller@redhat.com>, Waiman Long <llong@redhat.com>
Subject: [LTP] [PATCH v2] clock_gettime04: set threshold based on the clock resolution
Date: Tue, 29 Mar 2022 13:03:51 +0800 [thread overview]
Message-ID: <20220329050351.688432-1-liwang@redhat.com> (raw)
This is to get rid of the intermittent failures in clock_gettime04,
which are likely caused by different clock tick rates on platforms.
Here give two thresholds (in milliseconds) for comparison, one for
COARSE clock and one for the rest.
Error log:
clock_gettime04.c:163: TFAIL: CLOCK_REALTIME_COARSE(syscall with old kernel spec):
Difference between successive readings greater than 5 ms (1): 10
clock_gettime04.c:163: TFAIL: CLOCK_MONOTONIC_COARSE(vDSO with old kernel spec):
Difference between successive readings greater than 5 ms (2): 10
From Waiman Long:
That failure happens for CLOCK_REALTIME_COARSE which is a faster but less
precise version of CLOCK_REALTIME. The time resolution is actually a clock
tick. Since arm64 has a HZ rate of 100. That means each tick is 10ms. So a
CLOCK_REALTIME_COARSE threshold of 5ms is probably not enough. I would say
in the case of CLOCK_REALTIME_COARSE, we have to increase the threshold based
on the clock tick rate of the system. This is more a test failure than is
an inherent problem in the kernel.
Fixes #898
Reported-by: Eirik Fuller <efuller@redhat.com>
Signed-off-by: Li Wang <liwang@redhat.com>
Cc: Waiman Long <llong@redhat.com>
Cc: Viresh Kumar <viresh.kumar@linaro.org>
---
Notes:
v1 --> v2
* make use of clock_getres to get clock resolution
* involve separate coarse_delta for COARSE clock
* count delta as 'clock resolution + elapse (5ms)'
.../syscalls/clock_gettime/clock_gettime04.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/testcases/kernel/syscalls/clock_gettime/clock_gettime04.c b/testcases/kernel/syscalls/clock_gettime/clock_gettime04.c
index a8d2c5b38..c279da79e 100644
--- a/testcases/kernel/syscalls/clock_gettime/clock_gettime04.c
+++ b/testcases/kernel/syscalls/clock_gettime/clock_gettime04.c
@@ -35,7 +35,7 @@ clockid_t clks[] = {
};
static gettime_t ptr_vdso_gettime, ptr_vdso_gettime64;
-static long long delta = 5;
+static long long delta, precise_delta, coarse_delta;
static inline int do_vdso_gettime(gettime_t vdso, clockid_t clk_id, void *ts)
{
@@ -92,9 +92,18 @@ static struct time64_variants variants[] = {
static void setup(void)
{
+ struct timespec res;
+
+ clock_getres(CLOCK_REALTIME, &res);
+ precise_delta = 5 + res.tv_nsec / 1000000;
+
+ clock_getres(CLOCK_REALTIME_COARSE, &res);
+ coarse_delta = 5 + res.tv_nsec / 1000000;
+
if (tst_is_virt(VIRT_ANY)) {
tst_res(TINFO, "Running in a virtual machine, multiply the delta by 10.");
- delta *= 10;
+ precise_delta *= 10;
+ coarse_delta *= 10;
}
find_clock_gettime_vdso(&ptr_vdso_gettime, &ptr_vdso_gettime64);
@@ -108,6 +117,11 @@ static void run(unsigned int i)
int count = 10000, ret;
unsigned int j;
+ if (clks[i] == CLOCK_REALTIME_COARSE || clks[i] == CLOCK_MONOTONIC_COARSE)
+ delta = coarse_delta;
+ else
+ delta = precise_delta;
+
do {
for (j = 0; j < ARRAY_SIZE(variants); j++) {
/* Refresh time in start */
--
2.31.1
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next reply other threads:[~2022-03-29 5:04 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-29 5:03 Li Wang [this message]
2022-03-29 10:30 ` [LTP] [PATCH v2] clock_gettime04: set threshold based on the clock resolution Cyril Hrubis
2022-03-29 21:04 ` Waiman Long
2022-03-30 3:16 ` Li Wang
2022-03-30 9:49 ` Cyril Hrubis
2022-03-30 16:13 ` Waiman Long
2022-03-31 3:01 ` Li Wang
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=20220329050351.688432-1-liwang@redhat.com \
--to=liwang@redhat.com \
--cc=efuller@redhat.com \
--cc=llong@redhat.com \
--cc=ltp@lists.linux.it \
--cc=viresh.kumar@linaro.org \
/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.