All of lore.kernel.org
 help / color / mirror / Atom feed
From: Quan Xu <quan.xu0@gmail.com>
To: Juergen Gross <jgross@suse.com>, Quan Xu <quan.xu03@gmail.com>,
	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>,
	Alok Kataria <akataria@vmware.com>,
	Rusty Russell <rusty@rustcorp.com.au>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>
Subject: Re: [PATCH RFC v3 1/6] x86/paravirt: Add pv_idle_ops to paravirt ops
Date: Tue, 14 Nov 2017 15:02:41 +0800	[thread overview]
Message-ID: <902da704-1e4f-583b-91c3-1a62ccd6e73d@gmail.com> (raw)
In-Reply-To: <07fac696-e3d4-8f35-8f3d-764d7ab41204@suse.com>



On 2017/11/13 18:53, Juergen Gross wrote:
> On 13/11/17 11:06, Quan Xu wrote:
>> From: Quan Xu <quan.xu0@gmail.com>
>>
>> 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 <yang.zhang.wz@gmail.com>
>> Signed-off-by: Quan Xu <quan.xu0@gmail.com>
>> Cc: Juergen Gross <jgross@suse.com>
>> Cc: Alok Kataria <akataria@vmware.com>
>> Cc: Rusty Russell <rusty@rustcorp.com.au>
>> Cc: Thomas Gleixner <tglx@linutronix.de>
>> 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?
Juergen, Here is the data we get when running benchmark netperf:
  1. w/o patch and disable kvm dynamic poll (halt_poll_ns=0):
     29031.6 bit/s -- 76.1 %CPU

  2. w/ patch and disable kvm dynamic poll (halt_poll_ns=0):
     35787.7 bit/s -- 129.4 %CPU

  3. w/ kvm dynamic poll:
     35735.6 bit/s -- 200.0 %CPU

  4. w/patch and w/ kvm dynamic poll:
     42225.3 bit/s -- 198.7 %CPU

  5. idle=poll
     37081.7 bit/s -- 998.1 %CPU



  w/ this patch, we will improve performance by 23%.. even we could improve
  performance by 45.4%, if we use w/patch and w/ kvm dynamic poll. also the
  cost of CPU is much lower than 'idle=poll' case..

> 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.

I assume this feature will be ported to other archs.. a new pvops makes code
clean and easy to maintain. also I tried to add it into existed pvops, 
but it
doesn't match.



Quan
Alibaba Cloud
>
> Juergen
>

  parent reply	other threads:[~2017-11-14  7:02 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 [this message]
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
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=902da704-1e4f-583b-91c3-1a62ccd6e73d@gmail.com \
    --to=quan.xu0@gmail.com \
    --cc=akataria@vmware.com \
    --cc=hpa@zytor.com \
    --cc=jgross@suse.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=quan.xu03@gmail.com \
    --cc=rusty@rustcorp.com.au \
    --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.