From: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
To: Jiannan Ouyang <ouyang@cs.pitt.edu>
Cc: LKML <linux-kernel@vger.kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Avi Kivity <avi.kivity@gmail.com>, Gleb Natapov <gleb@redhat.com>,
Ingo Molnar <mingo@redhat.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
Rik van Riel <riel@redhat.com>,
Srikar <srikar@linux.vnet.ibm.com>,
"H. Peter Anvin" <hpa@zytor.com>,
"Nikunj A. Dadhania" <nikunj@linux.vnet.ibm.com>,
KVM <kvm@vger.kernel.org>, Thomas Gleixner <tglx@linutronix.de>,
Chegu Vinod <chegu_vinod@hp.com>,
"Andrew M. Theurer" <habanero@linux.vnet.ibm.com>,
Srivatsa Vaddagiri <srivatsa.vaddagiri@gmail.com>,
Andrew Jones <drjones@redhat.com>
Subject: Re: Preemptable Ticket Spinlock
Date: Mon, 22 Apr 2013 11:28:38 +0530 [thread overview]
Message-ID: <5174D18E.4090506@linux.vnet.ibm.com> (raw)
In-Reply-To: <CAJocwccu5QQyuKRvgNyPSFz2K_rzCW419W9-XdSUYOL7+KqQKg@mail.gmail.com>
On 04/21/2013 03:42 AM, Jiannan Ouyang wrote:
> Hello Everyone,
>
> I recently came up with a spinlock algorithm that can adapt to
> preemption, which you may be interested in.
It is overall a great and clever idea as Rik mentioned already.
The intuition is to
> downgrade a fair lock to an unfair lock automatically upon preemption,
> and preserve the fairness otherwise.
I also hope being little unfair, does not affect the original intention
of introducing ticket spinlocks too.
Some discussions were here long back in this thead,
https://lkml.org/lkml/2010/6/3/331
It is a guest side optimization,
> and can be used as a complementary technique to host side optimizations
> like co-scheduling and Pause-Loop Exiting.
>
> In my experiments, it improves VM performance by 5:32X on average, when
> running on a non paravirtual VMM, and by 7:91X when running on a VMM
> that supports a paravirtual locking interface (using a pv preemptable
> ticket spinlock), when executing a set of microbenchmarks as well as a
> realistic e-commerce benchmark.
AFAIU, the experiments are on non PLE machines and it would be worth
experimenting on PLE machines too. and also bigger machines.
(we may get some surprises there otherwise).
'll wait for your next iteration of the patches with "using lower bit"
changes.
>
> A detailed algorithm description can be found in my VEE 2013 paper,
> Preemptable Ticket Spinlocks: Improving Consolidated Performance in the
> Cloud
> Jiannan Ouyang, John R. Lange
> ouyang,jacklange@cs.pitt.edu <mailto:jacklange@cs.pitt.edu>
> University of Pittsburgh
> http://people.cs.pitt.edu/~ouyang/files/publication/preemptable_lock-ouyang-vee13.pdf
>
> The patch is based on stock Linux kernel 3.5.0, and tested on kernel
> 3.4.41 as well.
> http://www.cs.pitt.edu/~ouyang/files/preemptable_lock.tar.gz
>
> Thanks
> --Jiannan
>
> I'm not familiar with patch over email, so I just paste it below, sorry
> for the inconvenience.
> ======================
> diff --git a/arch/x86/include/asm/spinlock.h
> b/arch/x86/include/asm/spinlock.h
> index b315a33..895d3b3 100644
> --- a/arch/x86/include/asm/spinlock.h
> +++ b/arch/x86/include/asm/spinlock.h
> @@ -48,18 +48,35 @@
> * in the high part, because a wide xadd increment of the low part
> would carry
> * up and contaminate the high part.
> */
> +#define TIMEOUT_UNIT (1<<14)
This value seem to be at the higher end. But I hope you have
experimented enough to come up with this. Better again to test all these
tunables?? on PLE machines too.
> static __always_inline void __ticket_spin_lock(arch_spinlock_t *lock)
> {
> register struct __raw_tickets inc = { .tail = 1 };
> + unsigned int timeout = 0;
> + __ticket_t current_head;
>
> inc = xadd(&lock->tickets, inc);
> -
> + if (likely(inc.head == inc.tail))
> + goto spin;
> +
> + timeout = TIMEOUT_UNIT * (inc.tail - inc.head);
> + do {
> + current_head = ACCESS_ONCE(lock->tickets.head);
> + if (inc.tail <= current_head) {
> + goto spin;
> + } else if (inc.head != current_head) {
> + inc.head = current_head;
> + timeout = TIMEOUT_UNIT * (inc.tail - inc.head);
Good idea indeed to base the loop on head and tail difference.. But for
virtualization I believe this "directly proportional notion" is little
tricky too.
next prev parent reply other threads:[~2013-04-22 5:55 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CAJocwccu5QQyuKRvgNyPSFz2K_rzCW419W9-XdSUYOL7+KqQKg@mail.gmail.com>
2013-04-21 21:12 ` Preemptable Ticket Spinlock Rik van Riel
2013-04-21 23:07 ` Jiannan Ouyang
2013-04-22 5:59 ` Raghavendra K T
2013-04-22 11:51 ` Peter Zijlstra
2013-04-22 12:52 ` Rik van Riel
2013-04-22 19:49 ` Peter Zijlstra
2013-04-22 19:56 ` Rik van Riel
2013-04-22 20:05 ` Jiannan Ouyang
2013-04-22 20:08 ` Peter Zijlstra
2013-04-22 20:32 ` Rik van Riel
2013-04-22 20:44 ` Peter Zijlstra
2013-04-22 20:48 ` Peter Zijlstra
2013-04-22 20:50 ` Rik van Riel
2013-04-22 20:50 ` Jiannan Ouyang
2013-04-22 20:54 ` Chegu Vinod
2013-04-22 20:46 ` Jiannan Ouyang
2013-04-22 20:49 ` Rik van Riel
2013-04-22 21:01 ` Peter Zijlstra
2013-04-23 5:03 ` Raghavendra K T
2013-04-22 20:55 ` Peter Zijlstra
2013-04-22 21:31 ` Jiannan Ouyang
2013-04-22 23:08 ` Rik van Riel
2013-04-23 5:57 ` Gleb Natapov
2013-04-23 1:42 ` Raghavendra K T
2013-05-30 11:56 ` Raghavendra K T
2013-05-30 20:14 ` Thomas Gleixner
2013-04-22 21:56 ` Andi Kleen
2013-04-22 23:13 ` Rik van Riel
2013-04-22 5:58 ` Raghavendra K T [this message]
2013-04-22 16:42 ` Jiannan Ouyang
2013-04-23 1:54 ` Raghavendra K T
2013-04-26 20:10 ` Andrew Theurer
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=5174D18E.4090506@linux.vnet.ibm.com \
--to=raghavendra.kt@linux.vnet.ibm.com \
--cc=avi.kivity@gmail.com \
--cc=chegu_vinod@hp.com \
--cc=drjones@redhat.com \
--cc=gleb@redhat.com \
--cc=habanero@linux.vnet.ibm.com \
--cc=hpa@zytor.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=mtosatti@redhat.com \
--cc=nikunj@linux.vnet.ibm.com \
--cc=ouyang@cs.pitt.edu \
--cc=peterz@infradead.org \
--cc=riel@redhat.com \
--cc=srikar@linux.vnet.ibm.com \
--cc=srivatsa.vaddagiri@gmail.com \
--cc=tglx@linutronix.de \
/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