Message ID | 1308262856-5779-3-git-send-email-glommer@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, 16 Jun 2011, Glauber Costa wrote: > 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. > This is per-vcpu, and using the kvmclock structure for that is an abuse > we decided not to make. > > In this patchset, I am introducing a new msr, KVM_MSR_STEAL_TIME, that > holds the memory area address containing information about steal time > > This patch contains the headers for it. I am keeping it separate to facilitate > backports to people who wants to backport the kernel part but not the > hypervisor, or the other way around. > > Signed-off-by: Glauber Costa <glommer@redhat.com> > CC: Rik van Riel <riel@redhat.com> > CC: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> > CC: Peter Zijlstra <peterz@infradead.org> > CC: Avi Kivity <avi@redhat.com> > CC: Anthony Liguori <aliguori@us.ibm.com> > CC: Eric B Munson <emunson@mgebm.net> Tested-by: Eric B Munson <emunson@mgebm.net>
On 06/17/2011 01:20 AM, Glauber Costa wrote: > 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. > This is per-vcpu, and using the kvmclock structure for that is an abuse > we decided not to make. > > In this patchset, I am introducing a new msr, KVM_MSR_STEAL_TIME, that > holds the memory area address containing information about steal time > > This patch contains the headers for it. I am keeping it separate to facilitate > backports to people who wants to backport the kernel part but not the > hypervisor, or the other way around. > > > index d079aed..79c12a7 100644 > --- a/Documentation/virtual/kvm/msr.txt > +++ b/Documentation/virtual/kvm/msr.txt > @@ -185,3 +185,36 @@ MSR_KVM_ASYNC_PF_EN: 0x4b564d02 > > Currently type 2 APF will be always delivered on the same vcpu as > type 1 was, but guest should not rely on that. > + > +MSR_KVM_STEAL_TIME: 0x4b564d03 > + > + data: 64-byte alignment physical address of a memory area which must be > + in guest RAM, plus an enable bit in bit 0. This memory is expected to > + hold a copy of the following structure: > + > + struct kvm_steal_time { > + __u64 steal; > + __u32 version; > + __u32 flags; > + __u32 pad[6]; Should be 12 to be a 64-byte structure, no?
On 06/19/2011 06:49 AM, Avi Kivity wrote: > On 06/17/2011 01:20 AM, Glauber Costa wrote: >> 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. >> This is per-vcpu, and using the kvmclock structure for that is an abuse >> we decided not to make. >> >> In this patchset, I am introducing a new msr, KVM_MSR_STEAL_TIME, that >> holds the memory area address containing information about steal time >> >> This patch contains the headers for it. I am keeping it separate to >> facilitate >> backports to people who wants to backport the kernel part but not the >> hypervisor, or the other way around. >> >> >> index d079aed..79c12a7 100644 >> --- a/Documentation/virtual/kvm/msr.txt >> +++ b/Documentation/virtual/kvm/msr.txt >> @@ -185,3 +185,36 @@ MSR_KVM_ASYNC_PF_EN: 0x4b564d02 >> >> Currently type 2 APF will be always delivered on the same vcpu as >> type 1 was, but guest should not rely on that. >> + >> +MSR_KVM_STEAL_TIME: 0x4b564d03 >> + >> + data: 64-byte alignment physical address of a memory area which must be >> + in guest RAM, plus an enable bit in bit 0. This memory is expected to >> + hold a copy of the following structure: >> + >> + struct kvm_steal_time { >> + __u64 steal; >> + __u32 version; >> + __u32 flags; >> + __u32 pad[6]; > > Should be 12 to be a 64-byte structure, no? Avi, you should understand this is a discussion between 3 people: One of them can do math, the other can't. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/Documentation/virtual/kvm/msr.txt b/Documentation/virtual/kvm/msr.txt index d079aed..79c12a7 100644 --- a/Documentation/virtual/kvm/msr.txt +++ b/Documentation/virtual/kvm/msr.txt @@ -185,3 +185,36 @@ MSR_KVM_ASYNC_PF_EN: 0x4b564d02 Currently type 2 APF will be always delivered on the same vcpu as type 1 was, but guest should not rely on that. + +MSR_KVM_STEAL_TIME: 0x4b564d03 + + data: 64-byte alignment physical address of a memory area which must be + in guest RAM, plus an enable bit in bit 0. This memory is expected to + hold a copy of the following structure: + + struct kvm_steal_time { + __u64 steal; + __u32 version; + __u32 flags; + __u32 pad[6]; + } + + whose data will be filled in by the hypervisor periodically. Only one + write, or registration, is needed for each VCPU. The interval between + updates of this structure is arbitrary and implementation-dependent. + The hypervisor may update this structure at any time it sees fit until + anything with bit0 == 0 is written to it. Guest is required to make sure + this structure is initialized to zero. + + Fields have the following meanings: + + version: guest has to check version before and after grabbing + time information and check that they are both equal and even. + An odd version indicates an in-progress update. + + flags: At this point, always zero. May be used to indicate + changes in this structure in the future. + + steal: the amount of time in which this vCPU did not run, in + nanoseconds. + diff --git a/arch/x86/include/asm/kvm_para.h b/arch/x86/include/asm/kvm_para.h index d6cd79b..ac306c4 100644 --- a/arch/x86/include/asm/kvm_para.h +++ b/arch/x86/include/asm/kvm_para.h @@ -21,6 +21,7 @@ */ #define KVM_FEATURE_CLOCKSOURCE2 3 #define KVM_FEATURE_ASYNC_PF 4 +#define KVM_FEATURE_STEAL_TIME 5 /* The last 8 bits are used to indicate how to interpret the flags field * in pvclock structure. If no bits are set, all flags are ignored. @@ -35,6 +36,14 @@ #define MSR_KVM_WALL_CLOCK_NEW 0x4b564d00 #define MSR_KVM_SYSTEM_TIME_NEW 0x4b564d01 #define MSR_KVM_ASYNC_PF_EN 0x4b564d02 +#define MSR_KVM_STEAL_TIME 0x4b564d03 + +struct kvm_steal_time { + __u64 steal; + __u32 version; + __u32 flags; + __u32 pad[6]; +}; #define KVM_MAX_MMU_OP_BATCH 32
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. This is per-vcpu, and using the kvmclock structure for that is an abuse we decided not to make. In this patchset, I am introducing a new msr, KVM_MSR_STEAL_TIME, that holds the memory area address containing information about steal time This patch contains the headers for it. I am keeping it separate to facilitate backports to people who wants to backport the kernel part but not the hypervisor, or the other way around. Signed-off-by: Glauber Costa <glommer@redhat.com> CC: Rik van Riel <riel@redhat.com> CC: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> CC: Peter Zijlstra <peterz@infradead.org> CC: Avi Kivity <avi@redhat.com> CC: Anthony Liguori <aliguori@us.ibm.com> CC: Eric B Munson <emunson@mgebm.net> --- Documentation/virtual/kvm/msr.txt | 33 +++++++++++++++++++++++++++++++++ arch/x86/include/asm/kvm_para.h | 9 +++++++++ 2 files changed, 42 insertions(+), 0 deletions(-)