KVM: LAPIC: Narrow the timer latency between wait_lapic_expire and world switch
Let's treat lapic_timer_advance_ns automatic tuning logic as hypervisor overhead, move it before wait_lapic_expire instead of between wait_lapic_expire and the world switch, the wait duration should be calculated by the up-to-date guest_tsc after the overhead of automatic tuning logic. This patch reduces ~30+ cycles for kvm-unit-tests/tscdeadline-latency when testing busy waits. Signed-off-by: Wanpeng Li <wanpengli@tencent.com> Message-Id: <1621339235-11131-5-git-send-email-wanpengli@tencent.com> Reviewed-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Родитель
fb0f94794b
Коммит
9805cf03fd
|
@ -1598,11 +1598,19 @@ static void __kvm_wait_lapic_expire(struct kvm_vcpu *vcpu)
|
||||||
guest_tsc = kvm_read_l1_tsc(vcpu, rdtsc());
|
guest_tsc = kvm_read_l1_tsc(vcpu, rdtsc());
|
||||||
apic->lapic_timer.advance_expire_delta = guest_tsc - tsc_deadline;
|
apic->lapic_timer.advance_expire_delta = guest_tsc - tsc_deadline;
|
||||||
|
|
||||||
|
if (lapic_timer_advance_dynamic) {
|
||||||
|
adjust_lapic_timer_advance(vcpu, apic->lapic_timer.advance_expire_delta);
|
||||||
|
/*
|
||||||
|
* If the timer fired early, reread the TSC to account for the
|
||||||
|
* overhead of the above adjustment to avoid waiting longer
|
||||||
|
* than is necessary.
|
||||||
|
*/
|
||||||
|
if (guest_tsc < tsc_deadline)
|
||||||
|
guest_tsc = kvm_read_l1_tsc(vcpu, rdtsc());
|
||||||
|
}
|
||||||
|
|
||||||
if (guest_tsc < tsc_deadline)
|
if (guest_tsc < tsc_deadline)
|
||||||
__wait_lapic_expire(vcpu, tsc_deadline - guest_tsc);
|
__wait_lapic_expire(vcpu, tsc_deadline - guest_tsc);
|
||||||
|
|
||||||
if (lapic_timer_advance_dynamic)
|
|
||||||
adjust_lapic_timer_advance(vcpu, apic->lapic_timer.advance_expire_delta);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void kvm_wait_lapic_expire(struct kvm_vcpu *vcpu)
|
void kvm_wait_lapic_expire(struct kvm_vcpu *vcpu)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче