Re: [PATCH RFC v3 1/6] x86/paravirt: Add pv_idle_ops to paravirt ops
From: Juergen Gross <jgross@suse.com>
Date: 2017-11-13 10:53:52
On 13/11/17 11:06, Quan Xu wrote:
From: Quan Xu <redacted> So far, pv_idle_ops.poll is the only ops for pv_idle. .poll is called in idle path which will poll for a while before we enter the real idle state. In virtualization, idle path includes several heavy operations includes timer access(LAPIC timer or TSC deadline timer) which will hurt performance especially for latency intensive workload like message passing task. The cost is mainly from the vmexit which is a hardware context switch between virtual machine and hypervisor. Our solution is to poll for a while and do not enter real idle path if we can get the schedule event during polling. Poll may cause the CPU waste so we adopt a smart polling mechanism to reduce the useless poll. Signed-off-by: Yang Zhang <redacted> Signed-off-by: Quan Xu <redacted> Cc: Juergen Gross <jgross@suse.com> Cc: Alok Kataria <redacted> Cc: Rusty Russell <redacted> Cc: Thomas Gleixner <redacted> Cc: Ingo Molnar <mingo@redhat.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: x86@kernel.org Cc: virtualization@lists.linux-foundation.org Cc: linux-kernel@vger.kernel.org Cc: xen-devel@lists.xenproject.org
Hmm, is the idle entry path really so critical to performance that a new pvops function is necessary? Wouldn't a function pointer, maybe guarded by a static key, be enough? A further advantage would be that this would work on other architectures, too. Juergen