Il 05/12/2013 17:12, Marcelo Tosatti ha scritto: >> > - call kvm_set_ticks() from cpu_set_ticks() and cpu_enable_ticks() > env->tsc is just a placeholder for the vcpu TSC. > > A vcpus TSC from QEMU's point of view is a register initialized to zero, > which requires read/write from KVM, and migration.
QEMU already tracks the TSC in cpu_get_ticks(). So far this is used only for TCG, but for example the code is there that preserves the TSC when you stop/resume the VM and when you migrate the VM. Reset is not yet there, which is a bug similar to the one Fernando is trying to solve for KVM. So, from QEMU's point of view the TSC should be a global value across the whole system (timer_state.cpu_ticks_offset) + a per-VCPU TSC offset (env->tsc_adjust). When talking to KVM, the per-VCPU TSC offset in turn has two parts, both set with KVM_SET_MSRS: one is computed from MSR_IA32_TSC, the other comes from MSR_IA32_TSC_ADJUST. The point here would be to treat it as such. With this change, env->tsc need not be migrated. The global value timer_state.cpu_ticks_offset is migrated already. The host-side TSC adjust can be computed from rdtsc()-timer_state.cpu_ticks_offset on the destination machine and/or at reset time. The guest-side TSC adjust is env->tsc_adjust as it is now. Paolo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html