s8 tsc_shift; u8 flags; u8 pad[2]; } 由于内核中把tsc值除以TSC时钟频率得出时间的这个操作太过频繁,为了提升效率,内核把相对复杂的除法转化为较为高效的整数位移和整数乘法。因此,可以看到这个结构体并没有直接存放TSC时钟频率,而是存放一个位移值tsc_shift和一个缩放乘数值tsc_to_system_mul,具体的运算细节...
在kvmclock驱动初始化时,kvmclock_init()中的kvm_register_clock触发wrmsr进而调用kvm_set_msr_common写MSR_KVM_SYSTEM_TIME/MSR_KVM_SYSTEM_TIME_NEW, 发出KVM_REQ_GLOBAL_CLOCK_UPDATE请求 在做从vcpu到pcpu(物理cpu)的迁移时,如果guest的tsc不一致,则需要发KVM_REQ_GLOBAL_CLOCK_UPDATE请求....
- mention that system time needs to be added to wallclock time - positive tsc_shift means left shift, not right - mention additional 32bit right shift Signed-off-by: Stefan Fritsch <sf@sfritsch.de> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>master...
当虚拟机使用kvm-clock作为时钟源时,kvm-clock从host的KVM内核模块获取时间信息,与当前vCPU的TSC时间戳一起处理后算出一个时钟cycle值。虚拟机根据该cycle值来得到当前的时间。kvm-clock计算cycle值依赖于host设置时间信息时的TSC值,以及vCPU读取该信息时的TSC两者的差值。但host给虚拟机多个vCPU设置时间相近的时间信息...
代码版本:linux-git v4.10.0-rc3 1.kvm clock时钟 struct pvclock_vcpu_time_info { u32 version; u32 pad0; //guest的TSC时间戳,在kvm_guest_time_update中会被更新 u64 tsc_timestamp; //guest的墙上时间(1970年距今的绝对日期),和上者在一起更新 //system_time = ke