> 2016-04-05 15:07+0000, Avi Cohen: > > What do you think about this simple solution: > > Currently the KVM updates the system-time in the structure > > pvclock_vcpu_time_info in the guest memory with the MONOTONIC time > struct pvclock_vcpu_time_info { > > u32 version; > > u32 pad0; > > u64 tsc_timestamp; > > u64 system_time; > > u32 tsc_to_system_mul; > > s8 tsc_shift; > > u8 flags; > > u8 pad[2]; > > } __attribute__((__packed__)); > > > > This is the default kvm-clcok. > > I think to add another clock source named - kvm-clock-realtime, and to update > system_time with host's REAL_TIME clock. > > What is your opinion ? > > Would you be ok with a wall_time entry in pvclock_vcpu_time_info that would > tell the host real time at system_time? > struct pvclock_wall_clock should say the host real time when system_time was > 0, so it's the same. wallclock = CLOCK_REALTIME, most likely. > > Creating a new clock would allow us to get rid of many other problems, but your > goal might be achievable with existing interfaces. > Yes - it will be ok to update the pvclock_wall_clock with the host CLOCK_REALTIME. But I think I also need the guest's TSC at that time of update, struct pvclock_wall_clock { 37 u32 version; 38 u32 sec; 39 u32 nsec; New field tsc_timestamp; New field tsc_to_system_mul; 40 } __attribute__((__packed__)); Now the guest - when need to read the current time - can do something like this : Current_time = sec * sec_to_nano + nsec + (rdtdc () - tsc_timestamp) * tsc_to_system_mul > > I want to enter the KVM code and try to make a REAL_TIME and accurate > synchronization between the host and guest clocks . > > Currently I don’t see that KVM updates the guest’s clock when I manually set > the host’s clock. I don’t see any impact on the guest’s clock Also after booting > the guest I see a diff-time of ~1ms between the 2 clocks. > > Questions: > > - What can you tell about the feasibility of this task ? > > Doable. > > > - Can you give me a reference/guides for this task’s design ? where to start ? > potential problems ? pvclock ? when to update , when reentering the VM ? etc.. > > Start by using kvm_get_wallclock to pass the host CLOCK_REALTIME into the > guest and turn wallclock into guest CLOCK_REALTIME. > > A reasonable solution would be to create a thread that periodically synchronizes > CLOCK_REALTIME with wallclock. The wallclock thread would behave like > PTP/NTP, so it should be easy to do. > (A notification from the host that the wallclock has changed would be better, > but needs new interface.) > > I think that using wallclock directly as CLOCK_REALTIME would cause more > complications: > - many guest interfaces expect that they can touch CLOCK_REALTIME, but > that shouldn't be allowed > - changes in wallclock should trigger guest notifiers as if the change > was done by the guest > - wallclock is updated only when the guest writes to the MSR, which > would be wasteful for frequent reads and not possible in userspace > > We'll have enough experience to decide on followup if no solution using the > existing framework is acceptable. I will do some design work with existing framework and send it soon ��.n��������+%������w��{.n�����o�^n�r������&��z�ޗ�zf���h���~����������_��+v���)ߣ�