Hi Tao, On 1/1/24 14:06, Tao Lyu wrote: > Hello Arnabjyoti, Sean, and everyone, > > I'm having a similiar but slightly differnt issue about the rdtsc in KVM. > > I want to obtain the timestamp counter of physical/host machine inside the VMs. > > Acccording to the previous threads, I know I need to disable the offsetting, VM exit, and scaling. > I specify the correspoding parameters in the qemu arguments. > The booting command is listed below: > > qemu-system-x86_64 -m 10240 -smp 4 -chardev socket,id=SOCKSYZ,server=on,nowait,host=localhost,port=3258 -mon chardev=SOCKSYZ,mode=control -display none -serial stdio -device virtio-rng-pci -enable-kvm -cpu host,migratable=off,tsc=on,rdtscp=on,vmx-tsc-offset=off,vmx-rdtsc-exit=off,tsc-scale=off,tsc-adjust=off,vmx-rdtscp-exit=off -netdev bridge,id=hn40 -device virtio-net,netdev=hn40,mac=e6:c8:ff:09:76:38 -hda XXX -kernel XXX -append "root=/dev/sda console=ttyS0" > > > But the rdtsc still returns the adjusted tsc. > The vmxcap script shows the TSC settings as below: > > Use TSC offsetting no > RDTSC exiting no > Enable RDTSCP no > TSC scaling yes > > > I would really appreciate it if anyone can tell me whether and how I can get the tsc of physical machine insdie the VM. If the objective is to obtain the same tsc at both VM and host side (that is, to avoid any offset or scaling), I can obtain quite close tsc at both VM and host side with the below linux-6.6 change. My env does not use tsc scaling. diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 41cce50..b102dcd 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -2723,7 +2723,7 @@ static void kvm_synchronize_tsc(struct kvm_vcpu *vcpu, u64 data) bool synchronizing = false; raw_spin_lock_irqsave(&kvm->arch.tsc_write_lock, flags); - offset = kvm_compute_l1_tsc_offset(vcpu, data); + offset = 0; ns = get_kvmclock_base_ns(); elapsed = ns - kvm->arch.last_tsc_nsec; Dongli Zhang > > Thanks a lot. >