All of lore.kernel.org
 help / color / mirror / Atom feed
From: Quan Xu <quan.xu03@gmail.com>
To: kvm@vger.kernel.org, linux-doc@vger.kernel.org,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
	virtualization@lists.linux-foundation.org, x86@kernel.org,
	xen-devel@lists.xenproject.org
Cc: "Yang Zhang" <yang.zhang.wz@gmail.com>,
	"Quan Xu" <quan.xu0@gmail.com>,
	"Radim Krčmář" <rkrcmar@redhat.com>,
	"Ingo Molnar" <mingo@redhat.com>,
	"H. Peter Anvin" <hpa@zytor.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Thomas Gleixner" <tglx@linutronix.de>
Subject: [PATCH RFC v3 2/6] KVM guest: register kvm_idle_poll for pv_idle_ops
Date: Mon, 13 Nov 2017 18:06:01 +0800	[thread overview]
Message-ID: <1510567565-5118-3-git-send-email-quan.xu0__38378.5718623132$1511414721$gmane$org@gmail.com> (raw)
In-Reply-To: <1510567565-5118-1-git-send-email-quan.xu0@gmail.com>

From: Quan Xu <quan.xu0@gmail.com>

Although smart idle poll has nothing to do with paravirt, it can
not bring any benifit to native. So we only enable it when Linux
runs as a KVM guest( also it can extend to other hypervisor like
Xen, HyperV and VMware).

Introduce per-CPU variable poll_duration_ns to control the max
poll time.

Signed-off-by: Yang Zhang <yang.zhang.wz@gmail.com>
Signed-off-by: Quan Xu <quan.xu0@gmail.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Radim Krčmář" <rkrcmar@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: x86@kernel.org
Cc: kvm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 arch/x86/kernel/kvm.c |   26 ++++++++++++++++++++++++++
 1 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
index 8bb9594..2a6e402 100644
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -75,6 +75,7 @@ static int parse_no_kvmclock_vsyscall(char *arg)
 
 early_param("no-kvmclock-vsyscall", parse_no_kvmclock_vsyscall);
 
+static DEFINE_PER_CPU(unsigned long, poll_duration_ns);
 static DEFINE_PER_CPU(struct kvm_vcpu_pv_apf_data, apf_reason) __aligned(64);
 static DEFINE_PER_CPU(struct kvm_steal_time, steal_time) __aligned(64);
 static int has_steal_clock = 0;
@@ -364,6 +365,29 @@ static void kvm_guest_cpu_init(void)
 		kvm_register_steal_time();
 }
 
+static void kvm_idle_poll(void)
+{
+	unsigned long poll_duration = this_cpu_read(poll_duration_ns);
+	ktime_t start, cur, stop;
+
+	start = cur = ktime_get();
+	stop = ktime_add_ns(ktime_get(), poll_duration);
+
+	do {
+		if (need_resched())
+			break;
+		cur = ktime_get();
+	} while (ktime_before(cur, stop));
+}
+
+static void kvm_guest_idle_init(void)
+{
+	if (!kvm_para_available())
+		return;
+
+	pv_idle_ops.poll = kvm_idle_poll;
+}
+
 static void kvm_pv_disable_apf(void)
 {
 	if (!__this_cpu_read(apf_reason.enabled))
@@ -499,6 +523,8 @@ void __init kvm_guest_init(void)
 	kvm_guest_cpu_init();
 #endif
 
+	kvm_guest_idle_init();
+
 	/*
 	 * Hard lockup detection is enabled by default. Disable it, as guests
 	 * can get false positives too easily, for example if the host is
-- 
1.7.1

_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

  parent reply	other threads:[~2017-11-13 10:06 UTC|newest]

Thread overview: 99+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-13 10:05 [PATCH RFC v3 0/6] x86/idle: add halt poll support Quan Xu
2017-11-13 10:06 ` [PATCH RFC v3 1/6] x86/paravirt: Add pv_idle_ops to paravirt ops Quan Xu
2017-11-13 10:53   ` Juergen Gross
2017-11-13 11:09     ` Wanpeng Li
2017-11-13 11:09       ` Wanpeng Li
2017-11-13 11:09     ` Wanpeng Li
2017-11-13 11:09     ` Wanpeng Li
2017-11-14  7:02     ` Quan Xu
2017-11-14  7:02     ` Quan Xu
2017-11-14  7:02     ` Quan Xu
2017-11-14  7:12       ` Wanpeng Li
2017-11-14  7:12         ` Wanpeng Li
2017-11-14  8:15         ` Quan Xu
2017-11-14  8:15         ` Quan Xu
2017-11-14  8:15           ` Quan Xu
2017-11-14  8:22           ` Wanpeng Li
2017-11-14  8:22             ` Wanpeng Li
2017-11-14  8:22             ` Wanpeng Li
2017-11-14  8:22             ` Wanpeng Li
2017-11-14 10:23             ` Quan Xu
2017-11-14 10:23               ` Quan Xu
2017-11-14 10:23             ` Quan Xu
2017-11-14 10:23             ` Quan Xu
2017-11-14  8:22           ` Wanpeng Li
2017-11-14  8:15         ` Quan Xu
2017-11-14  7:12       ` Wanpeng Li
2017-11-14  7:12       ` Wanpeng Li
2017-11-14  7:30       ` Juergen Gross
2017-11-14  7:30       ` Juergen Gross
2017-11-14  9:38         ` Quan Xu
2017-11-14 10:27           ` Juergen Gross
2017-11-14 11:43             ` Quan Xu
2017-11-14 11:43             ` Quan Xu
2017-11-14 11:43             ` Quan Xu
2017-11-14 11:58               ` Juergen Gross
2017-11-14 11:58               ` Juergen Gross
2017-11-14 11:58                 ` Juergen Gross
2017-11-14 10:27           ` Juergen Gross
2017-11-14 10:27           ` Juergen Gross
2017-11-14  9:38         ` Quan Xu
2017-11-14  9:38         ` Quan Xu
2017-11-14  7:30       ` Juergen Gross
2017-11-13 10:53   ` Juergen Gross
2017-11-13 10:53   ` Juergen Gross
2017-11-13 10:06 ` Quan Xu
2017-11-13 10:06 ` [PATCH RFC v3 2/6] KVM guest: register kvm_idle_poll for pv_idle_ops Quan Xu
2017-11-13 10:06 ` Quan Xu [this message]
2017-11-13 10:06 ` [PATCH RFC v3 3/6] sched/idle: Add a generic poll before enter real idle path Quan Xu
2017-11-15 12:11   ` Peter Zijlstra
2017-11-15 12:11     ` Peter Zijlstra
2017-11-15 22:03     ` Thomas Gleixner
2017-11-15 22:03     ` Thomas Gleixner
2017-11-15 22:03     ` Thomas Gleixner
2017-11-16  8:45       ` Peter Zijlstra
2017-11-16  8:45         ` Peter Zijlstra
2017-11-16  8:58         ` Thomas Gleixner
2017-11-16  8:58         ` Thomas Gleixner
2017-11-16  8:58         ` Thomas Gleixner
2017-11-16  9:29         ` Quan Xu
2017-11-16  9:29         ` Quan Xu
2017-11-16  9:47           ` Thomas Gleixner
2017-11-16  9:47           ` Thomas Gleixner
2017-11-16  9:47           ` Thomas Gleixner
2017-11-16  9:29         ` Quan Xu
2017-11-16  8:45       ` Peter Zijlstra
2017-11-16  9:12       ` Quan Xu
2017-11-16  9:45         ` Daniel Lezcano
2017-11-20  7:05           ` Quan Xu
2017-11-20  7:05           ` Quan Xu
2017-11-20 18:01             ` Daniel Lezcano
2017-11-20 18:01             ` Daniel Lezcano
2017-11-20 18:01             ` Daniel Lezcano
2017-11-20  7:05           ` Quan Xu
2017-11-16  9:45         ` Daniel Lezcano
2017-11-16  9:45         ` Daniel Lezcano
2017-11-16  9:53         ` Thomas Gleixner
2017-11-16  9:53         ` Thomas Gleixner
2017-11-17 11:23           ` Quan Xu
2017-11-17 11:23           ` Quan Xu
2017-11-17 11:23           ` Quan Xu
2017-11-17 11:36             ` Thomas Gleixner
2017-11-17 11:36             ` Thomas Gleixner
2017-11-17 11:36               ` Thomas Gleixner
2017-11-17 11:36               ` Thomas Gleixner
2017-11-17 12:21               ` Quan Xu
2017-11-17 12:21                 ` Quan Xu
2017-11-17 12:21               ` Quan Xu
2017-11-17 12:21               ` Quan Xu
2017-11-16  9:53         ` Thomas Gleixner
2017-11-16  9:12       ` Quan Xu
2017-11-16  9:12       ` Quan Xu
2017-11-15 12:11   ` Peter Zijlstra
2017-11-13 10:06 ` Quan Xu
2017-11-15 21:31 ` [PATCH RFC v3 0/6] x86/idle: add halt poll support Konrad Rzeszutek Wilk
2017-11-15 21:31 ` [Xen-devel] " Konrad Rzeszutek Wilk
2017-11-15 21:31   ` Konrad Rzeszutek Wilk
2017-11-20  7:18   ` Quan Xu
2017-11-20  7:18   ` Quan Xu
2017-11-20  7:18   ` Quan Xu

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='1510567565-5118-3-git-send-email-quan.xu0__38378.5718623132$1511414721$gmane$org@gmail.com' \
    --to=quan.xu03@gmail.com \
    --cc=hpa@zytor.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=quan.xu0@gmail.com \
    --cc=rkrcmar@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=x86@kernel.org \
    --cc=xen-devel@lists.xenproject.org \
    --cc=yang.zhang.wz@gmail.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.