Re: [PATCH 2/5] kvmtrace: make cycle calculation architecture aware

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hollis Blanchard wrote:
On Mon, 2008-07-07 at 15:56 +0200, ehrhardt@xxxxxxxxxxxxxxxxxx wrote:
From: Christian Ehrhardt <ehrhardt@xxxxxxxxxxxxxxxxxx>

The current implementation of kvmtrace uses always a 64 bit cycle variable,
but get_cycles() which is used to fill it is "unsigned long" which might be 32
bit.
This reduces the accuracy e.g. on embedded powerpc since we would have a 64bit
value but get_cycle() only returns the low 32 bit.
To solve that this patch introduces kvm_arch_trace_cycles() which allows us
to make this calculation architecture aware. That way every architecture can
insert whatever fits best for their "kvmtrace cycle counter".

Signed-off-by: Christian Ehrhardt <ehrhardt@xxxxxxxxxxxxxxxxxx>

"cycles" is a very poor name, because that's not really what we're
talking about at all. (Also, that function name made me wonder what a
"trace cycle" is. :)

I would strongly prefer using "timestamp" instead. It would be nice if
we could rename the data structure too, but I'd settle for only properly
naming the new architecture function hook.
In fact, if we want to be rigorous about it, it should really be
something like "nanoseconds" instead, so that userspace wouldn't need to
perform awkward conversions of "cycles" or "timebase ticks" to real
time. It looks like getnstimeofday() would do the trick, and that way we
wouldn't need an arch-specific hook at all
I agree that the naming is poor. I also wondered about it and just continued it to the kvm_arch function. I'll change the naming - timestamp would be fine, but only if it is really time and not a cycle counter. I experimented with the tv_nsec portion and the classic current_time and accuracy there was just far to low compared to the time base register data (5 to 20 instructions until tv.nssec portion changed).

I checked the getnstimeofday function you mentioned and compared accuracy again and yes that is exactly what I would like to use:
here a ittle example
263527418457 (+   36696)    ns=0x1c43286a
263527740677 (+  322220)   ns=0x1c4a880c (+ 75FA2 = 483234)
263527779757 (+   39080)    ns=0x1c4b6cae (+ E4A2   =  58530)
While the unit is not the same (explains the difference in the same line e.g. 39080 vs. 58530) the accuracy is the same. this can be seen due to the fact that it changes by the same ratio all over the file.
For the example I had above
cycle = 322220/39080 = 8.25
nsec = 483234/58530 = 8.25

That leads me to the point where I completely agree with Hollis that the naming should be timestamp as well as that the function should rely on getnstimeofday() instead of get_cycles() and that way would remove the need kvm_arch_ function.

So the question that is left before changing that is, if the original author had something special in mind chosing cycles here.
I added Eric on CC for that.

I wait with my resubmission of the patch series until all architectures agree *hope* on using getnstimeofday() - after an ack from all sides I would revise my patch series and submit that changes alltogether.

--

Grüsse / regards, Christian Ehrhardt
IBM Linux Technology Center, Open Virtualization

--
To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM Development]     [KVM ARM]     [KVM ia64]     [Linux Virtualization]     [Linux USB Devel]     [Linux Video]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux