Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1406739 > unrolled thread

[PATCH v3 0/6] powerpc use pv-qpsinlock as the default spinlock implemention

Started byPan Xinhui <xinhui.pan@linux.vnet.ibm.com>
First post2016-05-25 10:30 +0200
Last post2016-05-27 13:00 +0200
Articles 4 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH v3 0/6]  powerpc use pv-qpsinlock as the default spinlock implemention Pan Xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-05-25 10:30 +0200
    Re: [PATCH v3 0/6]  powerpc use pv-qpsinlock as the default spinlock  implemention Peter Zijlstra <peterz@infradead.org> - 2016-05-26 19:00 +0200
    Re: [PATCH v3 0/6]  powerpc use pv-qpsinlock as the default spinlock  implemention Peter Zijlstra <peterz@infradead.org> - 2016-05-26 19:00 +0200
      Re: [PATCH v3 0/6]  powerpc use pv-qpsinlock as the default spinlock  implemention xinhui <xinhui.pan@linux.vnet.ibm.com> - 2016-05-27 13:00 +0200

#1406739 — [PATCH v3 0/6] powerpc use pv-qpsinlock as the default spinlock implemention

FromPan Xinhui <xinhui.pan@linux.vnet.ibm.com>
Date2016-05-25 10:30 +0200
Subject[PATCH v3 0/6] powerpc use pv-qpsinlock as the default spinlock implemention
Message-ID<rCCmt-79l-5@gated-at.bofh.it>
change from v2:
	__spin_yeild_cpu() will yield slices to lpar if target cpu is running.
	remove unnecessary rmb() in __spin_yield/wake_cpu.
	__pv_wait() will check the *ptr == val.
	some commit message change

change fome v1:
	separate into 6 pathes from one patch
	some minor code changes.

I do several tests on pseries IBM,8408-E8E with 32cpus, 64GB memory.
benchmark test results are below.

2 perf tests:
perf bench futex hash
perf bench futex lock-pi

_____test________________spinlcok______________pv-qspinlcok_____
|futex hash	|	556370 ops	|	629634 ops	|
|futex lock-pi	|	362 ops		|	367 ops		|

scheduler test:
Test how many loops of schedule() can finish within 10 seconds on all cpus.

_____test________________spinlcok______________pv-qspinlcok_____
|schedule() loops|	322811921 	|	311449290	|

kernel compiling test:
build a linux kernel image to see how long it took

_____test________________spinlcok______________pv-qspinlcok_____
| compiling takes|	22m 		|	22m		|

Pan Xinhui (6):
  qspinlock: powerpc support qspinlock
  powerpc: pseries/Kconfig: Add qspinlock build config
  powerpc: lib/locks.c: Add cpu yield/wake helper function
  pv-qspinlock: powerpc support pv-qspinlock
  pv-qspinlock: use cmpxchg_release in __pv_queued_spin_unlock
  powerpc: pseries: Add pv-qspinlock build config/make

 arch/powerpc/include/asm/qspinlock.h               | 39 +++++++++++++++++++
 arch/powerpc/include/asm/qspinlock_paravirt.h      | 38 ++++++++++++++++++
 .../powerpc/include/asm/qspinlock_paravirt_types.h | 13 +++++++
 arch/powerpc/include/asm/spinlock.h                | 31 +++++++++------
 arch/powerpc/include/asm/spinlock_types.h          |  4 ++
 arch/powerpc/kernel/Makefile                       |  1 +
 arch/powerpc/kernel/paravirt.c                     | 45 ++++++++++++++++++++++
 arch/powerpc/lib/locks.c                           | 37 ++++++++++++++++++
 arch/powerpc/platforms/pseries/Kconfig             |  9 +++++
 arch/powerpc/platforms/pseries/setup.c             |  5 +++
 kernel/locking/qspinlock_paravirt.h                |  2 +-
 11 files changed, 211 insertions(+), 13 deletions(-)
 create mode 100644 arch/powerpc/include/asm/qspinlock.h
 create mode 100644 arch/powerpc/include/asm/qspinlock_paravirt.h
 create mode 100644 arch/powerpc/include/asm/qspinlock_paravirt_types.h
 create mode 100644 arch/powerpc/kernel/paravirt.c

-- 
1.9.1

[toc] | [next] | [standalone]


#1407637 — Re: [PATCH v3 0/6] powerpc use pv-qpsinlock as the default spinlock implemention

FromPeter Zijlstra <peterz@infradead.org>
Date2016-05-26 19:00 +0200
SubjectRe: [PATCH v3 0/6] powerpc use pv-qpsinlock as the default spinlock implemention
Message-ID<rD6Nz-p8-17@gated-at.bofh.it>
In reply to#1406739
On Wed, May 25, 2016 at 04:18:03PM +0800, Pan Xinhui wrote:
> I do several tests on pseries IBM,8408-E8E with 32cpus, 64GB memory.
> benchmark test results are below.

> _____test________________spinlcok______________pv-qspinlcok_____
> | compiling takes|	22m 		|	22m		|

How can a kernel build take 22 minutes with 32 CPUs? That's far too
long. My 40 CPU IVB-EP takes all of 50 seconds to build an
x86_64-defconfig from scratch.

[toc] | [prev] | [next] | [standalone]


#1407640 — Re: [PATCH v3 0/6] powerpc use pv-qpsinlock as the default spinlock implemention

FromPeter Zijlstra <peterz@infradead.org>
Date2016-05-26 19:00 +0200
SubjectRe: [PATCH v3 0/6] powerpc use pv-qpsinlock as the default spinlock implemention
Message-ID<rD6NA-p8-25@gated-at.bofh.it>
In reply to#1406739
On Wed, May 25, 2016 at 04:18:03PM +0800, Pan Xinhui wrote:

> _____test________________spinlcok______________pv-qspinlcok_____
> |futex hash	|	556370 ops	|	629634 ops	|
> |futex lock-pi	|	362 ops		|	367 ops		|
> 
> scheduler test:
> Test how many loops of schedule() can finish within 10 seconds on all cpus.
> 
> _____test________________spinlcok______________pv-qspinlcok_____
> |schedule() loops|	322811921 	|	311449290	|
> 
> kernel compiling test:
> build a linux kernel image to see how long it took
> 
> _____test________________spinlcok______________pv-qspinlcok_____
> | compiling takes|	22m 		|	22m		|


s/spinlcok/spinlock/

Is 'spinlcok' the current test-and-set lock?

And what about regular qspinlock, in case of !SHARED_PROCESSOR?

[toc] | [prev] | [next] | [standalone]


#1407997 — Re: [PATCH v3 0/6] powerpc use pv-qpsinlock as the default spinlock implemention

Fromxinhui <xinhui.pan@linux.vnet.ibm.com>
Date2016-05-27 13:00 +0200
SubjectRe: [PATCH v3 0/6] powerpc use pv-qpsinlock as the default spinlock implemention
Message-ID<rDnEJ-2mG-1@gated-at.bofh.it>
In reply to#1407640
On 2016年05月27日 00:50, Peter Zijlstra wrote:
> On Wed, May 25, 2016 at 04:18:03PM +0800, Pan Xinhui wrote:
>
>> _____test________________spinlcok______________pv-qspinlcok_____
>> |futex hash	|	556370 ops	|	629634 ops	|
>> |futex lock-pi	|	362 ops		|	367 ops		|
>>
>> scheduler test:
>> Test how many loops of schedule() can finish within 10 seconds on all cpus.
>>
>> _____test________________spinlcok______________pv-qspinlcok_____
>> |schedule() loops|	322811921 	|	311449290	|
>>
>> kernel compiling test:
>> build a linux kernel image to see how long it took
>>
>> _____test________________spinlcok______________pv-qspinlcok_____
>> | compiling takes|	22m 		|	22m		|
>
>
> s/spinlcok/spinlock/
>
Oh, foolish mistake...sorry

> Is 'spinlcok' the current test-and-set lock?
>
Yes. I will describe it in a clear way in the next patchset.
  
> And what about regular qspinlock, in case of !SHARED_PROCESSOR?
>

You mean the test results on powerNV?

yes, I make a kernel build with !SHARED_PROCESSOR.
and do perf tests and scheduler tests on same machine(32 cpus). performance is better than current spinlock

  _____test________________spinlock________________qspinlock_____
  |futex hash	|	533060 ops	|	541513 ops	|
  |futex lock-pi	|	357 ops		|	356 ops		|


  _____test________________spinlock________________qspinlock_____
  |schedule() loops|	337691713 	|	361935207	|


NOTE: I have updated the scheduler test tools, and the new performance test results show that both pv-spinlock and qspinlock is better than current spinlock.
I will also update the test result in my next patchset.

thanks
xinhui

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web