Re: [PATCH V2 2/2] LoongArch: Add qspinlock support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi, Ren,

On Thu, Jun 23, 2022 at 1:45 PM Guo Ren <guoren@xxxxxxxxxx> wrote:
>
> On Thu, Jun 23, 2022 at 12:46 PM Huacai Chen <chenhuacai@xxxxxxxxxxx> wrote:
> >
> > On NUMA system, the performance of qspinlock is better than generic
> > spinlock. Below is the UnixBench test results on a 8 nodes (4 cores
> > per node, 32 cores in total) machine.
> >
> > A. With generic spinlock:
> >
> > System Benchmarks Index Values               BASELINE       RESULT    INDEX
> > Dhrystone 2 using register variables         116700.0  449574022.5  38523.9
> > Double-Precision Whetstone                       55.0      85190.4  15489.2
> > Execl Throughput                                 43.0      14696.2   3417.7
> > File Copy 1024 bufsize 2000 maxblocks          3960.0     143157.8    361.5
> > File Copy 256 bufsize 500 maxblocks            1655.0      37631.8    227.4
> > File Copy 4096 bufsize 8000 maxblocks          5800.0     444814.2    766.9
> > Pipe Throughput                               12440.0    5047490.7   4057.5
> > Pipe-based Context Switching                   4000.0    2021545.7   5053.9
> > Process Creation                                126.0      23829.8   1891.3
> > Shell Scripts (1 concurrent)                     42.4      33756.7   7961.5
> > Shell Scripts (8 concurrent)                      6.0       4062.9   6771.5
> > System Call Overhead                          15000.0    2479748.6   1653.2
> >                                                                    ========
> > System Benchmarks Index Score                                        2955.6
> >
> > B. With qspinlock:
> >
> > System Benchmarks Index Values               BASELINE       RESULT    INDEX
> > Dhrystone 2 using register variables         116700.0  449467876.9  38514.8
> > Double-Precision Whetstone                       55.0      85174.6  15486.3
> > Execl Throughput                                 43.0      14769.1   3434.7
> > File Copy 1024 bufsize 2000 maxblocks          3960.0     146150.5    369.1
> > File Copy 256 bufsize 500 maxblocks            1655.0      37496.8    226.6
> > File Copy 4096 bufsize 8000 maxblocks          5800.0     447527.0    771.6
> > Pipe Throughput                               12440.0    5175989.2   4160.8
> > Pipe-based Context Switching                   4000.0    2207747.8   5519.4
> > Process Creation                                126.0      25125.5   1994.1
> > Shell Scripts (1 concurrent)                     42.4      33461.2   7891.8
> > Shell Scripts (8 concurrent)                      6.0       4024.7   6707.8
> > System Call Overhead                          15000.0    2917278.6   1944.9
> >                                                                    ========
> > System Benchmarks Index Score                                        3040.1
> >
> > Signed-off-by: Rui Wang <wangrui@xxxxxxxxxxx>
> > Signed-off-by: Huacai Chen <chenhuacai@xxxxxxxxxxx>
> > ---
> >  arch/loongarch/Kconfig                      |  1 +
> >  arch/loongarch/include/asm/Kbuild           |  5 ++---
> >  arch/loongarch/include/asm/spinlock.h       | 12 ++++++++++++
> >  arch/loongarch/include/asm/spinlock_types.h | 11 +++++++++++
> >  4 files changed, 26 insertions(+), 3 deletions(-)
> >  create mode 100644 arch/loongarch/include/asm/spinlock.h
> >  create mode 100644 arch/loongarch/include/asm/spinlock_types.h
> >
> > diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig
> > index 1920d52653b4..1ec220df751d 100644
> > --- a/arch/loongarch/Kconfig
> > +++ b/arch/loongarch/Kconfig
> > @@ -46,6 +46,7 @@ config LOONGARCH
> >         select ARCH_USE_BUILTIN_BSWAP
> >         select ARCH_USE_CMPXCHG_LOCKREF
> >         select ARCH_USE_QUEUED_RWLOCKS
> > +       select ARCH_USE_QUEUED_SPINLOCKS
> >         select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT
> >         select ARCH_WANTS_NO_INSTR
> >         select BUILDTIME_TABLE_SORT
> > diff --git a/arch/loongarch/include/asm/Kbuild b/arch/loongarch/include/asm/Kbuild
> > index 83bc0681e72b..a0eed6076c79 100644
> > --- a/arch/loongarch/include/asm/Kbuild
> > +++ b/arch/loongarch/include/asm/Kbuild
> > @@ -1,12 +1,11 @@
> >  # SPDX-License-Identifier: GPL-2.0
> >  generic-y += dma-contiguous.h
> >  generic-y += export.h
> > +generic-y += mcs_spinlock.h
> >  generic-y += parport.h
> >  generic-y += early_ioremap.h
> >  generic-y += qrwlock.h
> > -generic-y += qrwlock_types.h
> > -generic-y += spinlock.h
> > -generic-y += spinlock_types.h
> Could you base the patch on [1]?
>
> [1] https://lore.kernel.org/linux-riscv/20220621144920.2945595-2-guoren@xxxxxxxxxx/raw
I found that whether we use qspinlock or tspinlock, we always use
qrwlock, so maybe it is better like this?

#ifdef CONFIG_ARCH_USE_QUEUED_SPINLOCKS
#include <asm/qspinlock.h>
#else
#include <asm-generic/tspinlock.h>
#endif

#include <asm/qrwlock.h>

Huacai

>
> And keep the spinlock.h & spinlock_types.h in your Kconfig.
>
> > +generic-y += qspinlock.h
> >  generic-y += rwsem.h
> >  generic-y += segment.h
> >  generic-y += user.h
>
>
> > diff --git a/arch/loongarch/include/asm/spinlock.h b/arch/loongarch/include/asm/spinlock.h
> > new file mode 100644
> > index 000000000000..7cb3476999be
> > --- /dev/null
> > +++ b/arch/loongarch/include/asm/spinlock.h
> > @@ -0,0 +1,12 @@
> > +/* SPDX-License-Identifier: GPL-2.0 */
> > +/*
> > + * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
> > + */
> > +#ifndef _ASM_SPINLOCK_H
> > +#define _ASM_SPINLOCK_H
> > +
> > +#include <asm/processor.h>
> > +#include <asm/qspinlock.h>
> > +#include <asm/qrwlock.h>
> > +
> > +#endif /* _ASM_SPINLOCK_H */
> > diff --git a/arch/loongarch/include/asm/spinlock_types.h b/arch/loongarch/include/asm/spinlock_types.h
> > new file mode 100644
> > index 000000000000..7458d036c161
> > --- /dev/null
> > +++ b/arch/loongarch/include/asm/spinlock_types.h
> > @@ -0,0 +1,11 @@
> > +/* SPDX-License-Identifier: GPL-2.0 */
> > +/*
> > + * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
> > + */
> > +#ifndef _ASM_SPINLOCK_TYPES_H
> > +#define _ASM_SPINLOCK_TYPES_H
> > +
> > +#include <asm-generic/qspinlock_types.h>
> > +#include <asm-generic/qrwlock_types.h>
> > +
> > +#endif
> > --
> > 2.27.0
> >
>
>
> --
> Best Regards
>  Guo Ren
>
> ML: https://lore.kernel.org/linux-csky/



[Index of Archives]     [Linux Kernel]     [Kernel Newbies]     [x86 Platform Driver]     [Netdev]     [Linux Wireless]     [Netfilter]     [Bugtraq]     [Linux Filesystems]     [Yosemite Discussion]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]

  Powered by Linux