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/