KVM: LAPIC: Loosen filter for adaptive tuning of lapic_timer_advance_ns
5000 guest cycles delta is easy to encounter on desktop, per-vCPU lapic_timer_advance_ns always keeps at 1000ns initial value, let's loosen the filter a bit to let adaptive tuning make progress. Signed-off-by: Wanpeng Li <wanpengli@tencent.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
committed by
Paolo Bonzini
parent
fd3edd4a90
commit
a0f0037e90
@@ -66,9 +66,10 @@
|
|||||||
#define X2APIC_BROADCAST 0xFFFFFFFFul
|
#define X2APIC_BROADCAST 0xFFFFFFFFul
|
||||||
|
|
||||||
static bool lapic_timer_advance_dynamic __read_mostly;
|
static bool lapic_timer_advance_dynamic __read_mostly;
|
||||||
#define LAPIC_TIMER_ADVANCE_ADJUST_MIN 100
|
#define LAPIC_TIMER_ADVANCE_ADJUST_MIN 100 /* clock cycles */
|
||||||
#define LAPIC_TIMER_ADVANCE_ADJUST_MAX 5000
|
#define LAPIC_TIMER_ADVANCE_ADJUST_MAX 10000 /* clock cycles */
|
||||||
#define LAPIC_TIMER_ADVANCE_ADJUST_INIT 1000
|
#define LAPIC_TIMER_ADVANCE_NS_INIT 1000
|
||||||
|
#define LAPIC_TIMER_ADVANCE_NS_MAX 5000
|
||||||
/* step-by-step approximation to mitigate fluctuation */
|
/* step-by-step approximation to mitigate fluctuation */
|
||||||
#define LAPIC_TIMER_ADVANCE_ADJUST_STEP 8
|
#define LAPIC_TIMER_ADVANCE_ADJUST_STEP 8
|
||||||
|
|
||||||
@@ -1504,8 +1505,8 @@ static inline void adjust_lapic_timer_advance(struct kvm_vcpu *vcpu,
|
|||||||
timer_advance_ns += ns/LAPIC_TIMER_ADVANCE_ADJUST_STEP;
|
timer_advance_ns += ns/LAPIC_TIMER_ADVANCE_ADJUST_STEP;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(timer_advance_ns > LAPIC_TIMER_ADVANCE_ADJUST_MAX))
|
if (unlikely(timer_advance_ns > LAPIC_TIMER_ADVANCE_NS_MAX))
|
||||||
timer_advance_ns = LAPIC_TIMER_ADVANCE_ADJUST_INIT;
|
timer_advance_ns = LAPIC_TIMER_ADVANCE_NS_INIT;
|
||||||
apic->lapic_timer.timer_advance_ns = timer_advance_ns;
|
apic->lapic_timer.timer_advance_ns = timer_advance_ns;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2302,7 +2303,7 @@ int kvm_create_lapic(struct kvm_vcpu *vcpu, int timer_advance_ns)
|
|||||||
HRTIMER_MODE_ABS_HARD);
|
HRTIMER_MODE_ABS_HARD);
|
||||||
apic->lapic_timer.timer.function = apic_timer_fn;
|
apic->lapic_timer.timer.function = apic_timer_fn;
|
||||||
if (timer_advance_ns == -1) {
|
if (timer_advance_ns == -1) {
|
||||||
apic->lapic_timer.timer_advance_ns = LAPIC_TIMER_ADVANCE_ADJUST_INIT;
|
apic->lapic_timer.timer_advance_ns = LAPIC_TIMER_ADVANCE_NS_INIT;
|
||||||
lapic_timer_advance_dynamic = true;
|
lapic_timer_advance_dynamic = true;
|
||||||
} else {
|
} else {
|
||||||
apic->lapic_timer.timer_advance_ns = timer_advance_ns;
|
apic->lapic_timer.timer_advance_ns = timer_advance_ns;
|
||||||
|
|||||||
Reference in New Issue
Block a user