From: Steven Seeger <steven.seeger@flightsystems.net>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] ppc icount questions
Date: Fri, 12 Jan 2018 11:19:19 -0500 [thread overview]
Message-ID: <2465248.BadtJazF69@wirbelwind> (raw)
Hi guys. I'm the poster on the qemu-discuss list about some technical icount
questions and was told to come over here to qemu-devel.
My scenario: x86-64 host running qemu/ppc-softmmu with an unmodfied ppc750 cpu
and a custom board target with chipset I implemented.
I am trying to use icount to get virtual time to increase based on CPU
instructions executed and not host time. So, if I have a register in a device
model that is implemented with sleep(1); I would expect virtual time to think
only a single instruction (or small group of instructions) passed with the
register access even though real time has stalled a whole second.
When using icount shift=auto, I see behavior where my UART character TX
interrupt (I had to add a character tx timer to serial.c because WindRiver's
UART code stops at 11 characters and waits for an interrupt that never comes
in qemu's impossibly-fast UART) fires every 40ms of virtual time instead of
every 87 microseconds of virtual time. After the bootup characters fly by,
more interrupts are turned on and the behavior changes. (I tend to see a
character come every 120-155 microseconds of virtual time.)
With icount sleep=off, I see the UART interrupts happen must faster on bootup,
but their timing is still imprecise.
My goal is to have QEMU respond deterministically to timer events and also
execute instructions wtih time increasing as a proportion of those executed
instructions.
A good example of this would be that say I have an interrupt that occurs every
second. If I were to print out the virtual time that interrupt occurs in the
device model, I should see a time of:
1.000000
2.000000
3.000000
4.000000
etc
Instead, I see:
1.000000
2.000013
3.000074
4.000022
When the timer function is called in the device model, I arm the timer again
with qemu_get_clock_ns(QEMU_CLOCK_VIRTUAL + 1000000000ULL) and expect this
time to be exaclty 1 second of virtual time later.
Either the virtual time is increasing without instructions executing or the
granularity of when the timer is serviced relative to virtual time is not
exact. I think the latter is happening. Is this because a tcg codeblock must
execute completely and this causes increases in virtual time based on the
number of instructions in that block, and the number of instructions varies?
I looked at Aaron Larson's post at > http://lists.nongnu.org/archive/html/
qemu-discuss/2017-01/msg00022.html and this did not work for me. In fact, I
never see warp_start be anything other than -1 during the length of time I
tested it.
Thanks for your help or any feedback.
Steven
next reply other threads:[~2018-01-12 16:19 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-12 16:19 Steven Seeger [this message]
2018-01-12 16:52 ` [Qemu-devel] ppc icount questions Paolo Bonzini
2018-01-12 17:12 ` Steven Seeger
2018-01-12 17:19 ` Paolo Bonzini
2018-01-12 18:03 ` Steven Seeger
2018-01-12 18:11 ` Paolo Bonzini
2018-01-12 18:35 ` Steven Seeger
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=2465248.BadtJazF69@wirbelwind \
--to=steven.seeger@flightsystems.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).