From: Fabiano Rosas <1860053@bugs.launchpad.net>
To: qemu-devel@nongnu.org
Subject: [Bug 1860053] Re: Possible lack of precision when calling clock_gettime via vDSO on user mode ppc64le
Date: Fri, 17 Jan 2020 21:51:12 -0000 [thread overview]
Message-ID: <157929787215.24304.12137288741573270391.malone@chaenomeles.canonical.com> (raw)
In-Reply-To: 157921754479.22473.5594149461755090250.malonedeb@gac.canonical.com
Since there is no vdso, the Go code goes into the syscall fallback:
MOVD runtime·vdsoClockgettimeSym(SB), R12 // Check for VDSO availability
CMP R12, R0
BEQ fallback
(...)
fallback:
ADD $32, R1, R4
SYSCALL $SYS_clock_gettime
MOVD 32(R1), R3
MOVD 48(R1), R5
JMP finish
But upon inspection, it seems the offset while loading R5 is not
correct:
in QEMU's clock_gettime implementation:
(gdb) p/x *host_ts
$8 = {tv_sec = 0x9225f, tv_nsec = 0x375f74ee}
in the Go runtime:
(gdb) p/x *($r1 + 48)
$6 = 0x388c8
(gdb) p/x *($r1 + 40)
$7 = 0x375f74ee
--
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1860053
Title:
Possible lack of precision when calling clock_gettime via vDSO on user
mode ppc64le
Status in QEMU:
New
Bug description:
Occurs on QEMU v4.2.0 run on docker (via the qemu-user-static:v4.2.0-2
image) on an AMD64 Ubuntu 18.04.3 LTS machine provided by travis-
ci.org.
From golang's https://github.com/golang/go/issues/36592:
It was discovered that golang's time.NewTicker() and time.Sleep()
malfunction when a compiled application was run via QEMU's ppc64le
emulator in user mode.
The methods did not malfunction on actual PowerPC hardware or when the
same golang application was compiled for golang's arm, arm64 or 386
targets and was run via user mode QEMU on the same system.
Curiously, the methods also worked when the program was compiled under
go 1.11, but do malfunction in go 1.12 and 1.13.
It was identified the change in behaviour was most likely attributable to golang switching to using vSDO for calling clock_gettime() on PowerPC 64 architectures in 1.12. I.E:
https://github.com/golang/go/commit/dbd8af74723d2c98cbdcc70f7e2801f69b57ac5b
We therefore suspect there may be a bug in QEMU's user-mode emulation
of ppc64le as relates to vDSO calls to clock_gettime().
The nature of the malfunction of time.NewTicker() and time.Sleep() is
such that sleeps or ticks with a granularity of less than one second
do not appear to be possible (they all revert to 1 second
sleeps/ticks). Could it be that the nanoseconds field of
clock_gettime() is getting lost in the vDSO version but not in the
syscall? Or some other issue calling these methods via vDSO?
Thanks in advance.
To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1860053/+subscriptions
next prev parent reply other threads:[~2020-01-17 22:08 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-16 23:32 [Bug 1860053] [NEW] Possible lack of precision when calling clock_gettime via vDSO on user mode ppc64le Patrick Meiring
2020-01-17 6:46 ` [Bug 1860053] " Philippe Mathieu-Daudé
2020-01-17 18:19 ` Richard Henderson
2020-01-17 21:51 ` Fabiano Rosas [this message]
2020-01-19 22:28 ` Patrick Meiring
2020-01-19 22:38 ` Patrick Meiring
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=157929787215.24304.12137288741573270391.malone@chaenomeles.canonical.com \
--to=1860053@bugs.launchpad.net \
--cc=qemu-devel@nongnu.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.