On Thu, Apr 30, 2015 at 9:24 PM, Peter Crosthwaite <peter.crosthwa...@xilinx.com> wrote: > On Thu, Apr 30, 2015 at 11:14 AM, Christopher Covington > <christopher.coving...@linaro.org> wrote: >> Present a system with an instructions per cycle of exactly one. >> This makes it less likely a user will mistake the cycle counter >> values as meaningful and makes calculations involving cycles >> trivial while preserving the necessary property of the cycle >> counter register as monotonically increasing. >> >> Signed-off-by: Christopher Covington <christopher.coving...@linaro.org> >> --- >> target-arm/helper.c | 9 +++------ >> 1 file changed, 3 insertions(+), 6 deletions(-) >> >> diff --git a/target-arm/helper.c b/target-arm/helper.c >> index 3e6fb0b..a027a19 100644 >> --- a/target-arm/helper.c >> +++ b/target-arm/helper.c >> @@ -648,8 +648,7 @@ void pmccntr_sync(CPUARMState *env) >> { >> uint64_t temp_ticks; >> >> - temp_ticks = muldiv64(qemu_clock_get_us(QEMU_CLOCK_VIRTUAL), >> - get_ticks_per_sec(), 1000000); >> + temp_ticks = cpu_get_icount_raw(); > > So I have guests (for better or worse) that make assumptions about the > rate of the PMCCNTR WRT real time. But isn't the PMCCNTR really a > clock cycle counter rather than an instruction counter? That clock > rate is well defined even if it is just the trivial > get_ticks_per_sec() at the moment. Ideally we should have a > configurable clock rate in there instead of get_ticks_per_sec(). This > is a major change in definition.
Is this with KVM, user emulation, or system emulation mode? I'm mainly looking at things from the TCG (and mostly system mode) perspective. If not using KVM, would the assumptions of your guests hold if you ran them on a hardware device instead of QEMU TCG? I'm still trying to understand all the code involved, but I don't see get_ticks_per_sec() or any other constants as problematic. > I can see your use case though, where you actually want this to mean > something WRT program performance. Should we add a switch between the > two behaviours? This switch already exists, in the form of -icount, and I really should have already been using it. What initially scared me away was qemu_icount_bias and icount_adjust(). Accounting for halting seems like a good thing but the accounting for "speed" by referencing a host clock doesn't make sense to me. If I have an ARM development board hooked up to an x86 desktop, it's not querying the desktop for time. So why does it make sense for QEMU system emulation mode behave like that? The -icount help text makes it sound like adjustment for speed reasons should only take place when "auto" is specified, but I have yet to understand the code well enough to verify that. Chris