All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@elte.hu>,
	the arch/x86 maintainers <x86@kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Nick Piggin <npiggin@kernel.dk>, Avi Kivity <avi@redhat.com>,
	Marcelo Tosatti <mtosatti@redhat.com>, KVM <kvm@vger.kernel.org>,
	Andi Kleen <andi@firstfloor.org>,
	Xen Devel <xen-devel@lists.xensource.com>,
	Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Subject: Re: [PATCH 00/13] [PATCH RFC] Paravirtualized ticketlocks
Date: Fri, 02 Sep 2011 13:07:23 -0700	[thread overview]
Message-ID: <4E61377B.4020600@goop.org> (raw)
In-Reply-To: <CA+55aFxpz+1bXVsg7kMeozePa=j_2-OaOuidQ4Y9Bg063=HMfg@mail.gmail.com>

On 09/02/2011 08:38 AM, Linus Torvalds wrote:
> On Thu, Sep 1, 2011 at 5:54 PM, Jeremy Fitzhardinge <jeremy@goop.org> wrote:
>> The inner part of ticket lock code becomes:
>>        inc = xadd(&lock->tickets, inc);
>>        inc.tail &= ~TICKET_SLOWPATH_FLAG;
>>
>>        for (;;) {
>>                unsigned count = SPIN_THRESHOLD;
>>
>>                do {
>>                        if (inc.head == inc.tail)
>>                                goto out;
>>                        cpu_relax();
>>                        inc.head = ACCESS_ONCE(lock->tickets.head);
>>                } while (--count);
>>                __ticket_lock_spinning(lock, inc.tail);
>>        }
> Hmm. It strikes me that I don't think you should touch the
> TICKET_SLOWPATH_FLAG in the fastpath at all.
>
> Can't you just do this:
>
>    inc = xadd(&lock->tickets, inc);
>    if (likely(inc.head == inc.tail))
>      goto out;
>
>    ### SLOWPATH ###
>    inc.tail &= ~TICKET_SLOWPATH_FLAG;
>    for (;;) {
>       .. as before ..
>
> which might alleviate the problem with the fastpath being polluted by
> all those silly slowpath things.  Hmm?
>
> (This assumes that TICKET_SLOWPATH_FLAG is never set in inc.head, so
> if it's set that equality check will fail. I didn't actually check if
> that assumption was correct)

Yes, nice idea.  That ends up making the overall code slightly longer,
but the fastpath becomes identical to the non-pv case:

	mov    $512,%ecx
	lock xadd %cx,(%rdi)
	movzbl %ch,%edx
	cmp    %cl,%dl
	je     2f

	### SLOWPATH START
	and    $-2,%edx
	mov    $8192,%eax
	movzbl %dl,%esi
1:	cmp    %dl,%cl
	je     2f
	pause  
	dec    %eax
	mov    (%rdi),%cl
	jne    1b
	callq  __ticket_lock_spinning
	mov    $8192,%eax
	jmp    1b
	### SLOWPATH ENDS

2:


It's especially nice that it also moves the spin counter and arg setup
into the slowpath code.

And that entire piece of slowpath code can be moved out into its own
function, so the fastpath becomes:

	mov    $512,%eax
	lock xadd %ax,(%rdi)
	movzbl %ah,%esi
	cmp    %al,%sil
	je     1f

	movzbl %sil,%esi
	callq  __ticket_lock_slow
1:

I don't know whether that fastpath code is small enough to consider
inlining everywhere?

    J

  reply	other threads:[~2011-09-02 20:07 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-02  0:54 [PATCH 00/13] [PATCH RFC] Paravirtualized ticketlocks Jeremy Fitzhardinge
2011-09-02  0:54 ` [PATCH 01/13] x86/spinlocks: replace pv spinlocks with pv ticketlocks Jeremy Fitzhardinge
2011-09-02  0:54 ` [PATCH 02/13] x86/ticketlock: collapse a layer of functions Jeremy Fitzhardinge
2011-09-02  0:54   ` Jeremy Fitzhardinge
2011-09-02  0:54 ` [PATCH 03/13] xen/pvticketlock: Xen implementation for PV ticket locks Jeremy Fitzhardinge
2011-09-02  0:54   ` Jeremy Fitzhardinge
2011-09-02  0:54 ` [PATCH 04/13] x86/pvticketlock: use callee-save for lock_spinning Jeremy Fitzhardinge
2011-09-02  0:54 ` [PATCH 05/13] x86/ticketlocks: when paravirtualizing ticket locks, increment by 2 Jeremy Fitzhardinge
2011-09-02  0:54 ` [PATCH 06/13] x86/ticketlock: add slowpath logic Jeremy Fitzhardinge
2011-09-02 18:46   ` Eric Northup
2011-09-02 19:32     ` Jeremy Fitzhardinge
2011-09-02  0:55 ` [PATCH 07/13] x86/ticketlocks: tidy up __ticket_unlock_kick() Jeremy Fitzhardinge
2011-09-02  0:55 ` [PATCH 08/13] xen/pvticketlock: disable interrupts while blocking Jeremy Fitzhardinge
2011-09-02 14:47   ` Peter Zijlstra
2011-09-02 19:29     ` Jeremy Fitzhardinge
2011-09-02 19:29       ` Jeremy Fitzhardinge
2011-09-02 20:47       ` Peter Zijlstra
2011-09-02 20:47         ` Peter Zijlstra
2011-09-02 21:50         ` Jeremy Fitzhardinge
2011-09-02 22:37           ` Peter Zijlstra
2011-09-02 22:37             ` Peter Zijlstra
2011-09-02 23:14           ` Andi Kleen
2011-09-05 11:52           ` Stefano Stabellini
2011-09-05 12:05           ` Avi Kivity
2011-09-06 15:14           ` Don Zickus
2011-09-06 18:07             ` Jeremy Fitzhardinge
2011-09-06 18:27               ` Don Zickus
2011-09-06 18:50                 ` Jeremy Fitzhardinge
2011-09-06 18:50                   ` Jeremy Fitzhardinge
2011-09-07  4:13                 ` Avi Kivity
2011-09-07 13:44                   ` Don Zickus
2011-09-07 13:44                     ` Don Zickus
2011-09-07 15:11                     ` Avi Kivity
2011-09-07 15:11                       ` Avi Kivity
2011-09-07 15:56                       ` Don Zickus
2011-09-07 15:56                         ` Don Zickus
2011-09-07 16:25                         ` Avi Kivity
2011-09-07 16:52                           ` Don Zickus
2011-09-07 17:09                             ` Avi Kivity
2011-09-07 17:17                               ` Jeremy Fitzhardinge
2011-09-07 17:41                                 ` Avi Kivity
2011-09-07 19:09                                   ` Jeremy Fitzhardinge
2011-09-08  7:51                                     ` Avi Kivity
2011-09-08 17:29                                       ` Jeremy Fitzhardinge
2011-09-08 17:29                                         ` Jeremy Fitzhardinge
2011-09-11  9:59                                         ` Avi Kivity
2011-09-11  9:59                                           ` Avi Kivity
2011-09-07 17:21                               ` Don Zickus
2011-09-07 17:21                                 ` Don Zickus
2011-09-07 17:41                                 ` Avi Kivity
2011-09-13 18:40                               ` Don Zickus
2011-09-13 19:03                                 ` Andi Kleen
2011-09-13 19:21                                   ` Don Zickus
2011-09-13 19:21                                     ` Don Zickus
2011-09-13 19:58                                     ` Andi Kleen
2011-09-13 20:53                                       ` Don Zickus
2011-09-13 21:04                                         ` Andi Kleen
2011-09-14  7:00                                     ` Avi Kivity
2011-09-14 12:49                                       ` Don Zickus
2011-09-14 12:49                                         ` Don Zickus
2011-09-14 14:49                                       ` Andi Kleen
2011-09-14 15:01                                         ` Avi Kivity
2011-09-14 17:28                                           ` Andi Kleen
2011-09-14 17:28                                             ` Andi Kleen
2011-09-14 19:26                                             ` Avi Kivity
2011-09-14 19:34                                               ` Andi Kleen
2011-09-14 19:34                                                 ` Andi Kleen
2011-09-14 19:56                                                 ` Avi Kivity
2011-09-13 19:27                                   ` Don Zickus
2011-09-02  0:55 ` [PATCH 09/13] x86/pvticketlocks: we only need to kick if there's waiters Jeremy Fitzhardinge
2011-09-02  0:55 ` [PATCH 10/13] xen/pvticket: allow interrupts to be enabled while blocking Jeremy Fitzhardinge
2011-09-02 14:48   ` Peter Zijlstra
2011-09-02 19:30     ` Jeremy Fitzhardinge
2011-09-02  0:55 ` [PATCH 11/13] x86/ticketlock: only do kick after doing unlock Jeremy Fitzhardinge
2011-09-02 14:49   ` Peter Zijlstra
2011-09-02 19:34     ` Jeremy Fitzhardinge
2011-09-02 19:34       ` Jeremy Fitzhardinge
2011-09-02  0:55 ` [PATCH 12/13] x86/pvticketlock: make sure unlock_kick pvop call is inlined Jeremy Fitzhardinge
2011-09-02  0:55 ` [PATCH 13/13] x86/pvticketlock: use __ticket_t for pvop args Jeremy Fitzhardinge
2011-09-02 11:22 ` [PATCH 00/13] [PATCH RFC] Paravirtualized ticketlocks Stefano Stabellini
2011-09-02 11:22   ` Stefano Stabellini
2011-09-06 19:33   ` Jeremy Fitzhardinge
2011-09-02 15:38 ` Linus Torvalds
2011-09-02 20:07   ` Jeremy Fitzhardinge [this message]
2011-09-02 20:27     ` Linus Torvalds
2011-09-02 21:42       ` Jeremy Fitzhardinge

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=4E61377B.4020600@goop.org \
    --to=jeremy@goop.org \
    --cc=andi@firstfloor.org \
    --cc=avi@redhat.com \
    --cc=hpa@zytor.com \
    --cc=jeremy.fitzhardinge@citrix.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=mtosatti@redhat.com \
    --cc=npiggin@kernel.dk \
    --cc=peterz@infradead.org \
    --cc=torvalds@linux-foundation.org \
    --cc=x86@kernel.org \
    --cc=xen-devel@lists.xensource.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.