From: Quan Xu <quan.xu0@gmail.com>
To: Thomas Gleixner <tglx@linutronix.de>,
Peter Zijlstra <peterz@infradead.org>
Cc: Quan Xu <quan.xu03@gmail.com>,
kvm@vger.kernel.org, linux-doc@vger.kernel.org,
linux-fsdevel@vger.kernel.org,
LKML <linux-kernel@vger.kernel.org>,
virtualization@lists.linux-foundation.org, x86@kernel.org,
xen-devel@lists.xenproject.org,
Yang Zhang <yang.zhang.wz@gmail.com>,
Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
Borislav Petkov <bp@alien8.de>, Kyle Huey <me@kylehuey.com>,
Len Brown <len.brown@intel.com>,
Andy Lutomirski <luto@kernel.org>,
Tom Lendacky <thomas.lendacky@amd.com>,
Tobias Klauser <tklauser@distanz.ch>,
Daniel Lezcano <daniel.lezcano@linaro.org>
Subject: Re: [PATCH RFC v3 3/6] sched/idle: Add a generic poll before enter real idle path
Date: Thu, 16 Nov 2017 17:12:28 +0800 [thread overview]
Message-ID: <46086489-5a01-16e1-9314-70ae53c01952@gmail.com> (raw)
In-Reply-To: <alpine.DEB.2.20.1711152240010.2146@nanos>
On 2017-11-16 06:03, Thomas Gleixner wrote:
> On Wed, 15 Nov 2017, Peter Zijlstra wrote:
>
>> On Mon, Nov 13, 2017 at 06:06:02PM +0800, Quan Xu wrote:
>>> From: Yang Zhang <yang.zhang.wz@gmail.com>
>>>
>>> Implement a generic idle poll which resembles the functionality
>>> found in arch/. Provide weak arch_cpu_idle_poll function which
>>> can be overridden by the architecture code if needed.
>> No, we want less of those magic hooks, not more.
>>
>>> Interrupts arrive which may not cause a reschedule in idle loops.
>>> In KVM guest, this costs several VM-exit/VM-entry cycles, VM-entry
>>> for interrupts and VM-exit immediately. Also this becomes more
>>> expensive than bare metal. Add a generic idle poll before enter
>>> real idle path. When a reschedule event is pending, we can bypass
>>> the real idle path.
>> Why not do a HV specific idle driver?
> If I understand the problem correctly then he wants to avoid the heavy
> lifting in tick_nohz_idle_enter() in the first place, but there is already
> an interesting quirk there which makes it exit early. See commit
> 3c5d92a0cfb5 ("nohz: Introduce arch_needs_cpu"). The reason for this commit
> looks similar. But lets not proliferate that. I'd rather see that go away.
agreed.
Even we can get more benifit than commit 3c5d92a0cfb5 ("nohz: Introduce
arch_needs_cpu")
in kvm guest. I won't proliferate that..
> But the irq_timings stuff is heading into the same direction, with a more
> complex prediction logic which should tell you pretty good how long that
> idle period is going to be and in case of an interrupt heavy workload this
> would skip the extra work of stopping and restarting the tick and provide a
> very good input into a polling decision.
interesting. I have tested with IRQ_TIMINGS related code, which seems
not working so far.
Also I'd like to help as much as I can.
> This can be handled either in a HV specific idle driver or even in the
> generic core code. If the interrupt does not arrive then you can assume
> within the predicted time then you can assume that the flood stopped and
> invoke halt or whatever.
>
> That avoids all of that 'tunable and tweakable' x86 specific hackery and
> utilizes common functionality which is mostly there already.
here is some sample code. Poll for a while before enter halt in
cpuidle_enter_state()
If I get a reschedule event, then don't try to enter halt. (I hope this
is the right direction as Peter mentioned in another email)
--- a/drivers/cpuidle/cpuidle.c
+++ b/drivers/cpuidle/cpuidle.c
@@ -210,6 +210,13 @@ int cpuidle_enter_state(struct cpuidle_device *dev,
struct cpuidle_driver *drv,
target_state = &drv->states[index];
}
+#ifdef CONFIG_PARAVIRT
+ paravirt_idle_poll();
+
+ if (need_resched())
+ return -EBUSY;
+#endif
+
/* Take note of the planned idle state. */
sched_idle_set_state(target_state);
thanks,
Quan
Alibaba Cloud
next prev parent reply other threads:[~2017-11-16 9:12 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1510567565-5118-1-git-send-email-quan.xu0@gmail.com>
[not found] ` <1510567565-5118-2-git-send-email-quan.xu0@gmail.com>
2017-11-13 10:53 ` [PATCH RFC v3 1/6] x86/paravirt: Add pv_idle_ops to paravirt ops Juergen Gross
2017-11-13 11:09 ` Wanpeng Li
2017-11-14 7:02 ` Quan Xu
2017-11-14 7:12 ` Wanpeng Li
2017-11-14 8:15 ` Quan Xu
2017-11-14 8:22 ` Wanpeng Li
2017-11-14 10:23 ` Quan Xu
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:58 ` Juergen Gross
[not found] ` <1510567565-5118-4-git-send-email-quan.xu0@gmail.com>
2017-11-15 12:11 ` [PATCH RFC v3 3/6] sched/idle: Add a generic poll before enter real idle path Peter Zijlstra
2017-11-15 22:03 ` Thomas Gleixner
2017-11-16 8:45 ` Peter Zijlstra
2017-11-16 8:58 ` Thomas Gleixner
2017-11-16 9:29 ` Quan Xu
2017-11-16 9:47 ` Thomas Gleixner
2017-11-16 9:12 ` Quan Xu [this message]
2017-11-16 9:45 ` Daniel Lezcano
2017-11-20 7:05 ` Quan Xu
2017-11-20 18:01 ` Daniel Lezcano
2017-11-16 9:53 ` Thomas Gleixner
2017-11-17 11:23 ` Quan Xu
2017-11-17 11:36 ` Thomas Gleixner
2017-11-17 12:21 ` Quan Xu
2017-11-15 21:31 ` [Xen-devel] [PATCH RFC v3 0/6] x86/idle: add halt poll support Konrad Rzeszutek Wilk
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=46086489-5a01-16e1-9314-70ae53c01952@gmail.com \
--to=quan.xu0@gmail.com \
--cc=bp@alien8.de \
--cc=daniel.lezcano@linaro.org \
--cc=hpa@zytor.com \
--cc=kvm@vger.kernel.org \
--cc=len.brown@intel.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=me@kylehuey.com \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=quan.xu03@gmail.com \
--cc=tglx@linutronix.de \
--cc=thomas.lendacky@amd.com \
--cc=tklauser@distanz.ch \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®