aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/include
diff options
context:
space:
mode:
authorGlauber Costa <glommer@redhat.com>2011-07-11 15:28:14 -0400
committerAvi Kivity <avi@redhat.com>2011-07-14 05:59:14 -0400
commitc9aaa8957f203bd6df83b002fb40b98390bed078 (patch)
tree96930ff2cbf73f6b0a3f4973e3933d036af13544 /arch/x86/include
parent9ddabbe72e41ca6794cb4947c70929c9410e6752 (diff)
KVM: Steal time implementation
To implement steal time, we need the hypervisor to pass the guest information about how much time was spent running other processes outside the VM, while the vcpu had meaningful work to do - halt time does not count. This information is acquired through the run_delay field of delayacct/schedstats infrastructure, that counts time spent in a runqueue but not running. Steal time is a per-cpu information, so the traditional MSR-based infrastructure is used. A new msr, KVM_MSR_STEAL_TIME, holds the memory area address containing information about steal time This patch contains the hypervisor part of the steal time infrasructure, and can be backported independently of the guest portion. [avi, yongjie: export delayacct_on, to avoid build failures in some configs] Signed-off-by: Glauber Costa <glommer@redhat.com> Tested-by: Eric B Munson <emunson@mgebm.net> CC: Rik van Riel <riel@redhat.com> CC: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> CC: Peter Zijlstra <peterz@infradead.org> CC: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Yongjie Ren <yongjie.ren@intel.com> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/x86/include')
-rw-r--r--arch/x86/include/asm/kvm_host.h9
-rw-r--r--arch/x86/include/asm/kvm_para.h4
2 files changed, 13 insertions, 0 deletions
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index da6bbee878ca..59086a77ff13 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -389,6 +389,15 @@ struct kvm_vcpu_arch {
389 unsigned int hw_tsc_khz; 389 unsigned int hw_tsc_khz;
390 unsigned int time_offset; 390 unsigned int time_offset;
391 struct page *time_page; 391 struct page *time_page;
392
393 struct {
394 u64 msr_val;
395 u64 last_steal;
396 u64 accum_steal;
397 struct gfn_to_hva_cache stime;
398 struct kvm_steal_time steal;
399 } st;
400
392 u64 last_guest_tsc; 401 u64 last_guest_tsc;
393 u64 last_kernel_ns; 402 u64 last_kernel_ns;
394 u64 last_tsc_nsec; 403 u64 last_tsc_nsec;
diff --git a/arch/x86/include/asm/kvm_para.h b/arch/x86/include/asm/kvm_para.h
index 65f8bb9279e0..c484ba8e05ea 100644
--- a/arch/x86/include/asm/kvm_para.h
+++ b/arch/x86/include/asm/kvm_para.h
@@ -45,6 +45,10 @@ struct kvm_steal_time {
45 __u32 pad[12]; 45 __u32 pad[12];
46}; 46};
47 47
48#define KVM_STEAL_ALIGNMENT_BITS 5
49#define KVM_STEAL_VALID_BITS ((-1ULL << (KVM_STEAL_ALIGNMENT_BITS + 1)))
50#define KVM_STEAL_RESERVED_MASK (((1 << KVM_STEAL_ALIGNMENT_BITS) - 1 ) << 1)
51
48#define KVM_MAX_MMU_OP_BATCH 32 52#define KVM_MAX_MMU_OP_BATCH 32
49 53
50#define KVM_ASYNC_PF_ENABLED (1 << 0) 54#define KVM_ASYNC_PF_ENABLED (1 << 0)