]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
KVM: x86: optimize steal time calculation
authorLiang Chen <liangchen.linux@gmail.com>
Wed, 16 Mar 2016 11:33:16 +0000 (19:33 +0800)
committerRadim Krčmář <rkrcmar@redhat.com>
Wed, 20 Apr 2016 13:29:17 +0000 (15:29 +0200)
Since accumulate_steal_time is now only called in record_steal_time, it
doesn't quite make sense to put the delta calculation in a separate
function. The function could be called thousands of times before guest
enables the steal time MSR (though the compiler may optimize out this
function call). And after it's enabled, the MSR enable bit is tested twice
every time. Removing the accumulate_steal_time function also avoids the
necessity of having the accum_steal field.

Signed-off-by: Liang Chen <liangchen.linux@gmail.com>
Signed-off-by: Gavin Guo <gavin.guo@canonical.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/x86.c

index b7e394485a5f2a641bc466eef1bc210c348a936c..c66e26280707a9c5d24914a41a6cd22b62d461c3 100644 (file)
@@ -562,7 +562,6 @@ struct kvm_vcpu_arch {
        struct {
                u64 msr_val;
                u64 last_steal;
-               u64 accum_steal;
                struct gfn_to_hva_cache stime;
                struct kvm_steal_time steal;
        } st;
index 9b7798c7b210e75499644ed1ca35b643fe743208..96e81d284deb36d58d62410f7bf940f4b7f6583c 100644 (file)
@@ -2002,22 +2002,8 @@ static void kvmclock_reset(struct kvm_vcpu *vcpu)
        vcpu->arch.pv_time_enabled = false;
 }
 
-static void accumulate_steal_time(struct kvm_vcpu *vcpu)
-{
-       u64 delta;
-
-       if (!(vcpu->arch.st.msr_val & KVM_MSR_ENABLED))
-               return;
-
-       delta = current->sched_info.run_delay - vcpu->arch.st.last_steal;
-       vcpu->arch.st.last_steal = current->sched_info.run_delay;
-       vcpu->arch.st.accum_steal = delta;
-}
-
 static void record_steal_time(struct kvm_vcpu *vcpu)
 {
-       accumulate_steal_time(vcpu);
-
        if (!(vcpu->arch.st.msr_val & KVM_MSR_ENABLED))
                return;
 
@@ -2025,9 +2011,10 @@ static void record_steal_time(struct kvm_vcpu *vcpu)
                &vcpu->arch.st.steal, sizeof(struct kvm_steal_time))))
                return;
 
-       vcpu->arch.st.steal.steal += vcpu->arch.st.accum_steal;
+       vcpu->arch.st.steal.steal += current->sched_info.run_delay -
+               vcpu->arch.st.last_steal;
+       vcpu->arch.st.last_steal = current->sched_info.run_delay;
        vcpu->arch.st.steal.version += 2;
-       vcpu->arch.st.accum_steal = 0;
 
        kvm_write_guest_cached(vcpu->kvm, &vcpu->arch.st.stime,
                &vcpu->arch.st.steal, sizeof(struct kvm_steal_time));