From: Zhao Liu <zhao1.liu@intel.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: Stefan Hajnoczi <stefanha@gmail.com>,
Mads Ynddal <mads@ynddal.dk>, John Snow <jsnow@redhat.com>,
Cleber Rosa <crosa@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
qemu-devel@nongnu.org, Zhao Liu <zhao1.liu@intel.com>
Subject: Re: [PATCH] scripts/simpletrace: Mark output with unstable timestamp as WARN
Date: Tue, 14 May 2024 16:12:21 +0800 [thread overview]
Message-ID: <ZkMc5Y5DGhDlfB8J@intel.com> (raw)
In-Reply-To: <20240509134712.GA515599@fedora.redhat.com>
Hi Stefan,
> QEMU uses clock_gettime(CLOCK_MONOTONIC) on Linux hosts. The man page
> says:
>
> All CLOCK_MONOTONIC variants guarantee that the time returned by
> consecutive calls will not go backwards, but successive calls
> may—depending on the architecture—return identical (not-in‐
> creased) time values.
>
> trace_record_start() calls clock_gettime(CLOCK_MONOTONIC) so trace events
> should have monotonically increasing timestamps.
>
> I don't see a scenario where trace record A's timestamp is greater than
> trace record B's timestamp unless the clock is non-monotonic.
>
> Which host CPU architecture and operating system are you running?
I tested on these 2 machines:
* CML (intel 10th) with Ubuntu 22.04 + kernel v6.5.0-28
* MTL (intel 14th) with Ubuntu 22.04.2 + kernel v6.9.0
> Please attach to the QEMU process with gdb and print out the value of
> the use_rt_clock variable or add a printf in init_get_clock(). The value
> should be 1.
Thanks, on both above machines, use_rt_clock is 1 and there're both
timestamp reversal issues with the following debug print:
diff --git a/include/qemu/timer.h b/include/qemu/timer.h
index 9a366e551fb3..7657785c27dc 100644
--- a/include/qemu/timer.h
+++ b/include/qemu/timer.h
@@ -831,10 +831,17 @@ extern int use_rt_clock;
static inline int64_t get_clock(void)
{
+ static int64_t clock = 0;
if (use_rt_clock) {
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
- return ts.tv_sec * 1000000000LL + ts.tv_nsec;
+ int64_t tmp = ts.tv_sec * 1000000000LL + ts.tv_nsec;
+ if (tmp <= clock) {
+ printf("get_clock: strange, clock: %ld, tmp: %ld\n", clock, tmp);
+ }
+ assert(tmp > clock);
+ clock = tmp;
+ return clock;
} else {
/* XXX: using gettimeofday leads to problems if the date
changes, so it should be avoided. */
diff --git a/util/qemu-timer-common.c b/util/qemu-timer-common.c
index cc1326f72646..3bf06eb4a4ce 100644
--- a/util/qemu-timer-common.c
+++ b/util/qemu-timer-common.c
@@ -59,5 +59,6 @@ static void __attribute__((constructor)) init_get_clock(void)
use_rt_clock = 1;
}
clock_start = get_clock();
+ printf("init_get_clock: use_rt_clock: %d\n", use_rt_clock);
}
#endif
---
The timestamp interval is very small, for example:
get_clock: strange, clock: 3302130503505, tmp: 3302130503503
or
get_clock: strange, clock: 2761577819846455, tmp: 2761577819846395
I also tried to use CLOCK_MONOTONIC_RAW, but there's still the reversal
issue.
Thanks,
Zhao
next prev parent reply other threads:[~2024-05-14 7:58 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-08 4:32 [PATCH] scripts/simpletrace: Mark output with unstable timestamp as WARN Zhao Liu
2024-05-08 13:09 ` Philippe Mathieu-Daudé
2024-05-08 13:55 ` Zhao Liu
2024-05-08 14:23 ` Philippe Mathieu-Daudé
2024-05-09 4:14 ` Zhao Liu
2024-05-08 18:05 ` Stefan Hajnoczi
2024-05-09 3:59 ` Zhao Liu
2024-05-09 13:47 ` Stefan Hajnoczi
2024-05-14 8:12 ` Zhao Liu [this message]
2024-05-14 12:56 ` Stefan Hajnoczi
2024-05-13 6:54 ` Mads Ynddal
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=ZkMc5Y5DGhDlfB8J@intel.com \
--to=zhao1.liu@intel.com \
--cc=crosa@redhat.com \
--cc=jsnow@redhat.com \
--cc=mads@ynddal.dk \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
--cc=stefanha@redhat.com \
/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.