All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Mark Langsdorf <mark.langsdorf@amd.com>,
	joerg.roedel@amd.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH][KVM] Add support for Pause Filtering to AMD SVM
Date: Mon, 11 May 2009 16:51:59 +0200	[thread overview]
Message-ID: <20090511145159.GA737@elte.hu> (raw)
In-Reply-To: <1242052724.11251.274.camel@twins>


* Peter Zijlstra <peterz@infradead.org> wrote:

> On Tue, 2009-05-05 at 09:09 -0500, Mark Langsdorf wrote:
> > commit 6f15c833f56267baf5abdd0fbc90a81489573053
> > Author: Mark Langsdorf <mlangsdo@wshpnow.amd.com>
> > Date:   Mon May 4 15:02:38 2009 -0500
> > 
> >     New AMD processors will support the Pause Filter Feature.
> >     This feature creates a new field in the VMCB called Pause
> >     Filter Count.  If Pause Filter Count is greater than 0 and
> >     ntercepting PAUSEs is enabled, the processor will increment
> >     an internal counter when a PAUSE instruction occurs instead
> >     of intercepting.  When the internal counter reaches the
> >     Pause Filter Count value, a PAUSE intercept will occur.
> >     
> >     This feature can be used to detect contended spinlocks,
> >     especially when the lock holding VCPU is not scheduled.
> >     Rescheduling another VCPU prevents the VCPU seeking the
> >     lock from wasting its quantum by spinning idly.
> >     
> >     Experimental results show that most spinlocks are held
> >     for less than 1000 PAUSE cycles or more than a few
> >     thousand.  Default the Pause Filter Counter to 3000 to
> >     detect the contended spinlocks.
> >     
> >     Processor support for this feature is indicated by a CPUID
> >     bit.
> >     
> >     On a 24 core system running 4 guests each with 16 VCPUs,
> >     this patch improved overall performance of each guest's
> >     32 job kernbench by approximately 1%.  Further performance
> >     improvement may be possible with a more sophisticated
> >     yield algorithm.
> 
> Isn't a much better solution to the spinlock problem a usable 
> monitor-wait implementation?
> 
> If we implement virt spinlocks using monitor-wait they don't spin 
> but simply wait in place, the HV could then decide to run someone 
> else.
> 
> This is the HV equivalent to futexes.
> 
> The only problem with this is that the current hardware has horrid 
> mwait wakeup latencies. If this were (much) improved you don't 
> need such ugly yield hacks like this.

I've considered MWAIT, but its really hard on the hw side:

the hardware would have to generate a 'wakeup', meaning it either 
has to trap out, or has to send an irq.

Trapping out is only possible on the release-the-lock side - which 
is usually on the wrong physical CPU, and it also happens _too late_ 
- such monitor/wait thingies are usually based on MESI cache, and 
the originating CPU does not wait for everything to happen.

An irq (on the target CPU that notices the cacheline flush) is more 
feasible, but it is several thousand cycles to begin with.

Irqs/vectors are a lot harder to add in general as well, and incur a 
cost of several years of CPU-design-cycle latency. Furthermore, the 
bits around MESI updates are _very_ sensitive codepaths of the CPU, 
while REP; NOP is a slowpath to begin with.

But ... especially as SMT techniques spread, something like that 
will have to happen as well - but it will take years. Meanwhile, 
this particular CPU feature is there, it's fairly intuitive (plus a 
VM exit doesnt really change the CPU's behavior materially, so a lot 
easier to validate and get OS support for), so we could use it.

	Ingo

      reply	other threads:[~2009-05-11 14:52 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-05 14:09 [PATCH][KVM] Add support for Pause Filtering to AMD SVM Mark Langsdorf
2009-05-05 16:05 ` Bert Wesarg
2009-05-07 13:55 ` Joerg Roedel
2009-05-07 15:00   ` [PATCH][KVM][retry 1] " Mark Langsdorf
2009-05-07 15:00     ` [PATCH][retry " Mark Langsdorf
2009-05-07 15:31     ` [PATCH][KVM][retry " Avi Kivity
2009-05-11 14:15       ` Ingo Molnar
2009-05-11 14:15         ` [PATCH][retry " Ingo Molnar
2009-05-11 14:24         ` [PATCH][KVM][retry " Avi Kivity
2009-05-11 14:24           ` [PATCH][retry " Avi Kivity
2009-05-11 14:33           ` [PATCH][KVM][retry " Ingo Molnar
2009-05-11 14:33             ` [PATCH][retry " Ingo Molnar
2009-05-11 14:51             ` [PATCH][KVM][retry " Avi Kivity
2009-05-11 14:51               ` [PATCH][retry " Avi Kivity
2009-05-11 14:59               ` [PATCH][KVM][retry " Ingo Molnar
2009-05-11 14:59                 ` [PATCH][retry " Ingo Molnar
2009-05-11 15:12                 ` [PATCH][KVM][retry " Avi Kivity
2009-05-11 15:12                   ` [PATCH][retry " Avi Kivity
2009-05-11 15:18                   ` [PATCH][KVM][retry " Ingo Molnar
2009-05-11 15:18                     ` [PATCH][retry " Ingo Molnar
2009-05-11 15:28                     ` [PATCH][KVM][retry " Avi Kivity
2009-05-11 15:28                       ` [PATCH][retry " Avi Kivity
2009-05-11 15:36                       ` [PATCH][KVM][retry " Langsdorf, Mark
2009-05-11 15:36                         ` [PATCH][retry " Langsdorf, Mark
2009-05-11 15:40                         ` [PATCH][KVM][retry " Avi Kivity
2009-05-11 15:58                 ` [PATCH][KVM][retry 1] Add support for Pause Filtering to AMDSVM Langsdorf, Mark
2009-05-11 15:58                   ` [PATCH][retry " Langsdorf, Mark
2009-05-11 15:01               ` [PATCH][KVM][retry 1] Add support for Pause Filtering to AMD SVM Peter Zijlstra
2009-05-11 15:01                 ` [PATCH][retry " Peter Zijlstra
2009-05-11 15:06                 ` [PATCH][KVM][retry " Avi Kivity
2009-05-11 15:06                   ` [PATCH][retry " Avi Kivity
2009-05-11 14:42           ` [PATCH][KVM][retry " Peter Zijlstra
2009-05-11 15:05             ` Avi Kivity
2009-05-11 15:05               ` [PATCH][retry " Avi Kivity
2009-05-08 17:03     ` [PATCH][KVM][retry 2] " Mark Langsdorf
2009-05-08 17:03       ` [PATCH][retry " Mark Langsdorf
2009-05-08 18:44       ` [PATCH][KVM][retry " Avi Kivity
2009-05-08 18:44         ` [PATCH][retry " Avi Kivity
2009-05-08 18:47         ` [PATCH][KVM][retry " Langsdorf, Mark
2009-05-08 18:47           ` [PATCH][retry " Langsdorf, Mark
2009-05-19 18:56       ` [PATCH][KVM][retry 3] " Mark Langsdorf
2009-05-19 18:56         ` [PATCH][retry " Mark Langsdorf
2009-05-20  7:40         ` [PATCH][KVM][retry " Ingo Molnar
2009-05-20  7:59         ` Peter Zijlstra
2009-05-20  7:59           ` [PATCH][retry " Peter Zijlstra
2009-05-20  8:38           ` [PATCH][KVM][retry " Avi Kivity
2009-05-20  8:38             ` [PATCH][retry " Avi Kivity
2009-05-20  8:42             ` [PATCH][KVM][retry " Peter Zijlstra
2009-05-20  8:42               ` [PATCH][retry " Peter Zijlstra
2009-05-20  8:49               ` [PATCH][KVM][retry " Avi Kivity
2009-05-20  8:49                 ` [PATCH][retry " Avi Kivity
2009-05-20  8:54                 ` [PATCH][KVM][retry " Peter Zijlstra
2009-05-20  8:54                   ` [PATCH][retry " Peter Zijlstra
2009-05-20  9:04                   ` [PATCH][KVM][retry " Avi Kivity
2009-05-20  9:04                     ` [PATCH][retry " Avi Kivity
2009-05-20  9:10                     ` [PATCH][KVM][retry " Peter Zijlstra
2009-05-20  9:10                       ` [PATCH][retry " Peter Zijlstra
2009-05-20  9:17                       ` [PATCH][KVM][retry " Avi Kivity
2009-05-20  9:17                         ` [PATCH][retry " Avi Kivity
2009-05-20 13:52                       ` [PATCH][KVM][retry " Langsdorf, Mark
2009-05-20 13:52                         ` [PATCH][retry " Langsdorf, Mark
2009-05-20 12:00         ` [PATCH][KVM][retry " Avi Kivity
2009-05-20 12:00           ` [PATCH][retry " Avi Kivity
2009-05-20 22:25         ` [PATCH][KVM][retry 4] " Mark Langsdorf
2009-05-20 22:25           ` [PATCH][retry " Mark Langsdorf
2009-05-21  8:47           ` [PATCH][KVM][retry " Avi Kivity
2009-05-21  8:47             ` [PATCH][retry " Avi Kivity
2009-07-08  5:19           ` [PATCH][KVM][retry " Sheng Yang
2009-07-08  5:19             ` [PATCH][retry " Sheng Yang
2009-07-08 14:59             ` [PATCH][KVM][retry " Langsdorf, Mark
2009-07-08 14:59               ` [PATCH][retry " Langsdorf, Mark
2009-07-09  1:50               ` [PATCH][KVM][retry " Sheng Yang
2009-07-09  1:50                 ` [PATCH][retry " Sheng Yang
2009-07-22 22:40                 ` [PATCH][KVM][retry " Langsdorf, Mark
2009-07-22 22:40                   ` [PATCH][retry " Langsdorf, Mark
2009-08-05  9:08                   ` [PATCH][KVM][retry " Zhai, Edwin
2009-08-05  9:08                     ` [PATCH][retry " Zhai, Edwin
2009-05-11 14:38 ` [PATCH][KVM] " Peter Zijlstra
2009-05-11 14:51   ` Ingo Molnar [this message]

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=20090511145159.GA737@elte.hu \
    --to=mingo@elte.hu \
    --cc=joerg.roedel@amd.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.langsdorf@amd.com \
    --cc=peterz@infradead.org \
    /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.