All of lore.kernel.org
 help / color / mirror / Atom feed
From: Glauber Costa <glommer@redhat.com>
To: kvm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, Rik van Riel <riel@redhat.com>,
	Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Avi Kivity <avi@redhat.com>,
	Anthony Liguori <aliguori@us.ibm.com>,
	Eric B Munson <emunson@mgebm.net>
Subject: [PATCH v5 3/9] KVM-HDR: KVM Steal time implementation
Date: Mon,  4 Jul 2011 11:32:22 -0400	[thread overview]
Message-ID: <1309793548-16714-4-git-send-email-glommer@redhat.com> (raw)
In-Reply-To: <1309793548-16714-1-git-send-email-glommer@redhat.com>

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 |   35 +++++++++++++++++++++++++++++++++++
 arch/x86/include/asm/kvm_para.h   |    9 +++++++++
 2 files changed, 44 insertions(+), 0 deletions(-)

diff --git a/Documentation/virtual/kvm/msr.txt b/Documentation/virtual/kvm/msr.txt
index d079aed..38db3f8 100644
--- a/Documentation/virtual/kvm/msr.txt
+++ b/Documentation/virtual/kvm/msr.txt
@@ -185,3 +185,38 @@ 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[12];
+	}
+
+	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: a sequence counter. In other words, guest has to check
+		this field before and after grabbing time information and make 
+		sure 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. Time during which the vcpu is idle, will not be
+		reported as steal time.
+
diff --git a/arch/x86/include/asm/kvm_para.h b/arch/x86/include/asm/kvm_para.h
index d6cd79b..65f8bb9 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[12];
+};
 
 #define KVM_MAX_MMU_OP_BATCH           32
 
-- 
1.7.3.4


  parent reply	other threads:[~2011-07-04 15:40 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-04 15:32 [PATCH v5 0/9] Steal time for KVM Glauber Costa
2011-07-04 15:32 ` [PATCH v5 1/9] introduce kvm_read_guest_cached Glauber Costa
2011-07-05 19:35   ` Eric B Munson
2011-07-06  3:45   ` Rik van Riel
2011-07-04 15:32 ` [PATCH v5 2/9] KVM-HDR Add constant to represent KVM MSRs enabled bit Glauber Costa
2011-07-05 19:36   ` Eric B Munson
2011-07-06  3:45   ` Rik van Riel
2011-07-04 15:32 ` Glauber Costa [this message]
2011-07-05 19:36   ` [PATCH v5 3/9] KVM-HDR: KVM Steal time implementation Eric B Munson
2011-07-06  3:46   ` Rik van Riel
2011-07-04 15:32 ` [PATCH v5 4/9] KVM-HV: " Glauber Costa
2011-07-05 19:36   ` Eric B Munson
2011-07-06 16:08   ` Rik van Riel
2011-07-07 10:51   ` Marcelo Tosatti
2011-07-07 17:07     ` Glauber Costa
2011-07-11 12:58       ` Avi Kivity
2011-07-11 14:05         ` Glauber Costa
2011-07-11 13:10   ` Avi Kivity
2011-07-11 13:11     ` Avi Kivity
2011-07-11 13:19       ` Glauber Costa
2011-07-04 15:32 ` [PATCH v5 5/9] KVM-GST: Add a pv_ops stub for steal time Glauber Costa
2011-07-05 19:36   ` Eric B Munson
2011-07-06 16:12   ` Rik van Riel
2011-07-04 15:32 ` [PATCH v5 6/9] add jump labels for ia64 paravirt Glauber Costa
2011-07-05 19:36   ` Eric B Munson
2011-07-06 16:35   ` Rik van Riel
2011-07-11 13:09   ` Avi Kivity
2011-07-11 13:24     ` Glauber Costa
2011-07-11 14:15       ` Isaku Yamahata
2011-07-13 18:01       ` Luck, Tony
2011-07-04 15:32 ` [PATCH v5 7/9] KVM-GST: KVM Steal time accounting Glauber Costa
2011-07-05  9:11   ` Peter Zijlstra
2011-07-05 19:37   ` Eric B Munson
2011-07-06 16:37   ` Rik van Riel
2011-07-04 15:32 ` [PATCH v5 8/9] KVM-GST: adjust scheduler cpu power Glauber Costa
2011-07-05  9:12   ` Peter Zijlstra
2011-07-05 19:37   ` Eric B Munson
2011-07-06 17:40   ` Rik van Riel
2011-07-04 15:32 ` [PATCH v5 9/9] KVM-GST: KVM Steal time registration Glauber Costa
2011-07-05 19:37   ` Eric B Munson
2011-07-06 17:42   ` Rik van Riel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1309793548-16714-4-git-send-email-glommer@redhat.com \
    --to=glommer@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=avi@redhat.com \
    --cc=emunson@mgebm.net \
    --cc=jeremy.fitzhardinge@citrix.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=riel@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.