All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zachary Amsden <zamsden@redhat.com>
To: Glauber Costa <glommer@redhat.com>
Cc: kvm@vger.kernel.org, avi@redhat.com, mtosatti@redhat.com,
	riel@redhat.com
Subject: Re: [RFC 3/7] measure time out of guest
Date: Thu, 26 Aug 2010 10:54:53 -1000	[thread overview]
Message-ID: <4C76D49D.8000301@redhat.com> (raw)
In-Reply-To: <1282772597-4183-4-git-send-email-glommer@redhat.com>

On 08/25/2010 11:43 AM, Glauber Costa wrote:
> By measuring time between a vcpu_put and a vcpu_load, we can
> estimate how much time did the guest stay out of the cpu.
> This is exported to the guest at every clock update.
>
> Signed-off-by: Glauber Costa<glommer@redhat.com>
> ---
>   arch/x86/include/asm/kvm_host.h |    2 ++
>   arch/x86/kvm/x86.c              |   12 +++++++++++-
>   2 files changed, 13 insertions(+), 1 deletions(-)
>
> diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
> index 502e53f..bc28aff 100644
> --- a/arch/x86/include/asm/kvm_host.h
> +++ b/arch/x86/include/asm/kvm_host.h
> @@ -364,6 +364,8 @@ struct kvm_vcpu_arch {
>   	u64 hv_vapic;
>
>   	cpumask_var_t wbinvd_dirty_mask;
> +	u64 time_out;
> +	u64 last_time_out;
>   };
>
>   struct kvm_arch {
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index e7e3b50..680feaa 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -925,8 +925,9 @@ static void kvm_write_guest_time(struct kvm_vcpu *v)
>   	vcpu->hv_clock.system_time = ts.tv_nsec +
>   				     (NSEC_PER_SEC * (u64)ts.tv_sec) + v->kvm->arch.kvmclock_offset;
>
> -	vcpu->hv_clock.flags = 0;
> +	vcpu->hv_clock.flags = PVCLOCK_STEAL_BIT;
>
> +	vcpu->hv_clock.steal_time = vcpu->time_out / 1000000;
>   	/*
>   	 * The interface expects us to write an even number signaling that the
>   	 * update is finished. Since the guest won't see the intermediate
> @@ -1798,6 +1799,8 @@ static bool need_emulate_wbinvd(struct kvm_vcpu *vcpu)
>
>   void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
>   {
> +	s64 now;
> +
>   	/* Address WBINVD may be executed by guest */
>   	if (need_emulate_wbinvd(vcpu)) {
>   		if (kvm_x86_ops->has_wbinvd_exit())
> @@ -1815,12 +1818,19 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
>   		per_cpu(cpu_tsc_khz, cpu) = khz;
>   	}
>   	kvm_request_guest_time_update(vcpu);
> +
> +	now = getnsboottime();
> +
> +	if (vcpu->arch.last_time_out != 0)
> +		vcpu->arch.time_out += now - vcpu->arch.last_time_out;
>    


>   }
>
>   void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
>   {
>   	kvm_x86_ops->vcpu_put(vcpu);
>   	kvm_put_guest_fpu(vcpu);
> +
> +	vcpu->arch.last_time_out = getnsboottime();
>   }
>
>   static int is_efer_nx(void)
>    

I think I've added some of the same instrumentation in my series.

  parent reply	other threads:[~2010-08-26 20:54 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-25 21:43 [RFC 0/7] KVM steal time implementation Glauber Costa
2010-08-25 21:43 ` [RFC 1/7] Implement getnsboottime kernel API Glauber Costa
2010-08-25 21:43   ` [RFC 2/7] change headers preparing for steal time Glauber Costa
2010-08-25 21:43     ` [RFC 3/7] measure time out of guest Glauber Costa
2010-08-25 21:43       ` [RFC 4/7] change kernel accounting to include steal time Glauber Costa
2010-08-25 21:43         ` [RFC 5/7] kvm steal time implementation Glauber Costa
2010-08-25 21:43           ` [RFC 6/7] touch softlockup watchdog Glauber Costa
2010-08-25 21:43             ` [RFC 7/7] tell guest about steal time feature Glauber Costa
2010-08-26 22:13           ` [RFC 5/7] kvm steal time implementation Rik van Riel
2010-08-26 22:35             ` Glauber Costa
2010-08-26 17:23         ` [RFC 4/7] change kernel accounting to include steal time Marcelo Tosatti
2010-08-26 20:28           ` Glauber Costa
2010-08-26 20:47             ` Marcelo Tosatti
2010-08-26 21:05               ` Rik van Riel
2010-08-26 21:13               ` Glauber Costa
2010-08-26 21:14             ` Anthony Liguori
2010-08-26 21:40               ` Glauber Costa
2010-08-26 23:12                 ` Marcelo Tosatti
2010-08-27  0:33                   ` Glauber Costa
2010-08-27 15:25                     ` Marcelo Tosatti
2010-08-26 21:19         ` Rik van Riel
2010-08-26 21:39           ` Glauber Costa
2010-08-29  9:59         ` Avi Kivity
2010-08-29 15:13           ` Rik van Riel
2010-08-29 15:25             ` Avi Kivity
2010-08-29 15:42               ` Rik van Riel
2010-08-29 15:47                 ` Avi Kivity
2010-08-30 12:42           ` Glauber Costa
2010-08-30 13:15             ` Avi Kivity
2010-08-26 20:54       ` Zachary Amsden [this message]
2010-08-26 21:14         ` [RFC 3/7] measure time out of guest Glauber Costa
2010-08-29  9:53       ` Avi Kivity
2010-08-26 20:44     ` [RFC 2/7] change headers preparing for steal time Zachary Amsden
2010-08-26 21:04       ` Rik van Riel
2010-08-26 21:17         ` Glauber Costa
2010-08-26 22:11           ` Rik van Riel
2010-08-29  9:51     ` Avi Kivity
2010-08-30 12:44       ` Glauber Costa
2010-08-30 13:10         ` Avi Kivity
2010-08-26 19:46   ` [RFC 1/7] Implement getnsboottime kernel API 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=4C76D49D.8000301@redhat.com \
    --to=zamsden@redhat.com \
    --cc=avi@redhat.com \
    --cc=glommer@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --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.