Hi,
I have a question about the function of pvclock_get_nsec_offset().
static u64 pvclock_get_nsec_offset(struct pvclock_shadow_time *shadow)
{
u64 delta = native_read_tsc() - shadow->tsc_timestamp;
return pvclock_scale_delta(delta, shadow->tsc_to_nsec_mul,
shadow->tsc_shift);
}
Basically I understand the purpose of this function, that is, to compute a nsec
delta based on the difference between the "now" timestamp and the last_update
timestamp visible by the guest OS. But what I am confused of is, why do we use
the "native_read_tsc" function to obtain the timestamp for the host OS since
host boot. In my intuition, we may need to use "guest_read_tsc()" to obtain the
timestamp for the guest OS, which takes tsc_offset into account. My equation is:
shadow->tsc_timestamp = TSC of last update + tsc_offset
the return value of guest_read_tsc() = TSC of now + tsc_offset
then, delta = guest_read_tsc() - shadow->tsc_timestamp = TSC of now - TSC of
last update
I think it is highly possible that I miss somethings important or have some
misunderstandings. Would you please point out my mistakes?
Thanks,
Lei
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html