All of lore.kernel.org
 help / color / mirror / Atom feed
* [v6 1/2] raid6/altivec: Add vpermxor implementation for raid6 Q syndrome
@ 2017-08-04  3:42 Matt Brown
  2017-08-04  3:42 ` [v6 2/2] lib/raid6: Build proper raid6test files on powerpc Matt Brown
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Matt Brown @ 2017-08-04  3:42 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: dja

This patch uses the vpermxor instruction to optimise the raid6 Q syndrome.
This instruction was made available with POWER8, ISA version 2.07.
It allows for both vperm and vxor instructions to be done in a single
instruction. This has been tested for correctness on a ppc64le vm with a
basic RAID6 setup containing 5 drives.

The performance benchmarks are from the raid6test in the /lib/raid6/test
directory. These results are from an IBM Firestone machine with ppc64le
architecture. The benchmark results show a 35% speed increase over the best
existing algorithm for powerpc (altivec). The raid6test has also been run
on a big-endian ppc64 vm to ensure it also works for big-endian
architectures.

Performance benchmarks:
		raid6: altivecx4 gen() 18773 MB/s
		raid6: altivecx8 gen() 19438 MB/s

		raid6: vpermxor4 gen() 25112 MB/s
		raid6: vpermxor8 gen() 26279 MB/s

Signed-off-by: Matt Brown <matthew.brown.dev@gmail.com>
Reviewed-by: Daniel Axtens <dja@axtens.net>
---
v6:
	- added vpermxor files to .gitignore
	- fixup whitespace
	- added vpermxor objs to test/Makefile
v5:
	- moved altivec.uc fix into other patch in series
---
 include/linux/raid/pq.h |   4 ++
 lib/raid6/.gitignore    |   1 +
 lib/raid6/Makefile      |  27 ++++++++++++-
 lib/raid6/algos.c       |   4 ++
 lib/raid6/test/Makefile |  17 +++++++-
 lib/raid6/vpermxor.uc   | 104 ++++++++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 154 insertions(+), 3 deletions(-)
 create mode 100644 lib/raid6/vpermxor.uc

diff --git a/include/linux/raid/pq.h b/include/linux/raid/pq.h
index 4d57bba..3df9aa6 100644
--- a/include/linux/raid/pq.h
+++ b/include/linux/raid/pq.h
@@ -107,6 +107,10 @@ extern const struct raid6_calls raid6_avx512x2;
 extern const struct raid6_calls raid6_avx512x4;
 extern const struct raid6_calls raid6_tilegx8;
 extern const struct raid6_calls raid6_s390vx8;
+extern const struct raid6_calls raid6_vpermxor1;
+extern const struct raid6_calls raid6_vpermxor2;
+extern const struct raid6_calls raid6_vpermxor4;
+extern const struct raid6_calls raid6_vpermxor8;
 
 struct raid6_recov_calls {
 	void (*data2)(int, size_t, int, int, void **);
diff --git a/lib/raid6/.gitignore b/lib/raid6/.gitignore
index f01b1cb..3de0d89 100644
--- a/lib/raid6/.gitignore
+++ b/lib/raid6/.gitignore
@@ -4,3 +4,4 @@ int*.c
 tables.c
 neon?.c
 s390vx?.c
+vpermxor*.c
diff --git a/lib/raid6/Makefile b/lib/raid6/Makefile
index 3057011..db095a7 100644
--- a/lib/raid6/Makefile
+++ b/lib/raid6/Makefile
@@ -4,7 +4,8 @@ raid6_pq-y	+= algos.o recov.o tables.o int1.o int2.o int4.o \
 		   int8.o int16.o int32.o
 
 raid6_pq-$(CONFIG_X86) += recov_ssse3.o recov_avx2.o mmx.o sse1.o sse2.o avx2.o avx512.o recov_avx512.o
-raid6_pq-$(CONFIG_ALTIVEC) += altivec1.o altivec2.o altivec4.o altivec8.o
+raid6_pq-$(CONFIG_ALTIVEC) += altivec1.o altivec2.o altivec4.o altivec8.o \
+                              vpermxor1.o vpermxor2.o vpermxor4.o vpermxor8.o
 raid6_pq-$(CONFIG_KERNEL_MODE_NEON) += neon.o neon1.o neon2.o neon4.o neon8.o
 raid6_pq-$(CONFIG_TILEGX) += tilegx8.o
 raid6_pq-$(CONFIG_S390) += s390vx8.o recov_s390xc.o
@@ -88,6 +89,30 @@ $(obj)/altivec8.c:   UNROLL := 8
 $(obj)/altivec8.c:   $(src)/altivec.uc $(src)/unroll.awk FORCE
 	$(call if_changed,unroll)
 
+CFLAGS_vpermxor1.o += $(altivec_flags)
+targets += vpermxor1.c
+$(obj)/vpermxor1.c: UNROLL := 1
+$(obj)/vpermxor1.c: $(src)/vpermxor.uc $(src)/unroll.awk FORCE
+	$(call if_changed,unroll)
+
+CFLAGS_vpermxor2.o += $(altivec_flags)
+targets += vpermxor2.c
+$(obj)/vpermxor2.c: UNROLL := 2
+$(obj)/vpermxor2.c: $(src)/vpermxor.uc $(src)/unroll.awk FORCE
+	$(call if_changed,unroll)
+
+CFLAGS_vpermxor4.o += $(altivec_flags)
+targets += vpermxor4.c
+$(obj)/vpermxor4.c: UNROLL := 4
+$(obj)/vpermxor4.c: $(src)/vpermxor.uc $(src)/unroll.awk FORCE
+	$(call if_changed,unroll)
+
+CFLAGS_vpermxor8.o += $(altivec_flags)
+targets += vpermxor8.c
+$(obj)/vpermxor8.c: UNROLL := 8
+$(obj)/vpermxor8.c: $(src)/vpermxor.uc $(src)/unroll.awk FORCE
+	$(call if_changed,unroll)
+
 CFLAGS_neon1.o += $(NEON_FLAGS)
 targets += neon1.c
 $(obj)/neon1.c:   UNROLL := 1
diff --git a/lib/raid6/algos.c b/lib/raid6/algos.c
index 7857049..edd4f69 100644
--- a/lib/raid6/algos.c
+++ b/lib/raid6/algos.c
@@ -74,6 +74,10 @@ const struct raid6_calls * const raid6_algos[] = {
 	&raid6_altivec2,
 	&raid6_altivec4,
 	&raid6_altivec8,
+	&raid6_vpermxor1,
+	&raid6_vpermxor2,
+	&raid6_vpermxor4,
+	&raid6_vpermxor8,
 #endif
 #if defined(CONFIG_TILEGX)
 	&raid6_tilegx8,
diff --git a/lib/raid6/test/Makefile b/lib/raid6/test/Makefile
index 2c7b60e..a14be53 100644
--- a/lib/raid6/test/Makefile
+++ b/lib/raid6/test/Makefile
@@ -47,7 +47,8 @@ else
                          gcc -c -x c - >&/dev/null && \
                          rm ./-.o && echo yes)
         ifeq ($(HAS_ALTIVEC),yes)
-                OBJS += altivec1.o altivec2.o altivec4.o altivec8.o
+                OBJS += altivec1.o altivec2.o altivec4.o altivec8.o \
+                        vpermxor1.o vpermxor2.o vpermxor4.o vpermxor8.o
         endif
 endif
 ifeq ($(ARCH),tilegx)
@@ -97,6 +98,18 @@ altivec4.c: altivec.uc ../unroll.awk
 altivec8.c: altivec.uc ../unroll.awk
 	$(AWK) ../unroll.awk -vN=8 < altivec.uc > $@
 
+vpermxor1.c: vpermxor.uc ../unroll.awk
+	$(AWK) ../unroll.awk -vN=1 < vpermxor.uc > $@
+
+vpermxor2.c: vpermxor.uc ../unroll.awk
+	$(AWK) ../unroll.awk -vN=2 < vpermxor.uc > $@
+
+vpermxor4.c: vpermxor.uc ../unroll.awk
+	$(AWK) ../unroll.awk -vN=4 < vpermxor.uc > $@
+
+vpermxor8.c: vpermxor.uc ../unroll.awk
+	$(AWK) ../unroll.awk -vN=8 < vpermxor.uc > $@
+
 int1.c: int.uc ../unroll.awk
 	$(AWK) ../unroll.awk -vN=1 < int.uc > $@
 
@@ -122,7 +135,7 @@ tables.c: mktables
 	./mktables > tables.c
 
 clean:
-	rm -f *.o *.a mktables mktables.c *.uc int*.c altivec*.c neon*.c tables.c raid6test
+	rm -f *.o *.a mktables mktables.c *.uc int*.c altivec*.c vpermxor*.c neon*.c tables.c raid6test
 	rm -f tilegx*.c
 
 spotless: clean
diff --git a/lib/raid6/vpermxor.uc b/lib/raid6/vpermxor.uc
new file mode 100644
index 0000000..22d743a
--- /dev/null
+++ b/lib/raid6/vpermxor.uc
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2017, Matt Brown, IBM Corp.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ *
+ * vpermxor$#.c
+ *
+ * Based on H. Peter Anvin's paper - The mathematics of RAID-6
+ *
+ * $#-way unrolled portable integer math RAID-6 instruction set
+ * This file is postprocessed using unroll.awk
+ *
+ * vpermxor$#.c makes use of the vpermxor instruction to optimise the RAID6 Q
+ * syndrome calculations.
+ * This can be run on systems which have both Altivec and vpermxor instruction.
+ *
+ * This instruction was introduced in POWER8 - ISA v2.07.
+ */
+
+#include <linux/raid/pq.h>
+#ifdef CONFIG_ALTIVEC
+
+#include <altivec.h>
+#ifdef __KERNEL__
+#include <asm/cputable.h>
+#include <asm/switch_to.h>
+#endif
+
+typedef vector unsigned char unative_t;
+#define NSIZE sizeof(unative_t)
+
+static const vector unsigned char gf_low = {0x1e, 0x1c, 0x1a, 0x18, 0x16, 0x14,
+					    0x12, 0x10, 0x0e, 0x0c, 0x0a, 0x08,
+					    0x06, 0x04, 0x02,0x00};
+static const vector unsigned char gf_high = {0xfd, 0xdd, 0xbd, 0x9d, 0x7d, 0x5d,
+					     0x3d, 0x1d, 0xe0, 0xc0, 0xa0, 0x80,
+					     0x60, 0x40, 0x20, 0x00};
+
+static void noinline raid6_vpermxor$#_gen_syndrome_real(int disks, size_t bytes,
+							void **ptrs)
+{
+	u8 **dptr = (u8 **)ptrs;
+	u8 *p, *q;
+	int d, z, z0;
+	unative_t wp$$, wq$$, wd$$;
+
+	z0 = disks - 3;		/* Highest data disk */
+	p = dptr[z0+1];		/* XOR parity */
+	q = dptr[z0+2];		/* RS syndrome */
+
+	for (d = 0; d < bytes; d += NSIZE*$#) {
+		wp$$ = wq$$ = *(unative_t *)&dptr[z0][d+$$*NSIZE];
+
+		for (z = z0-1; z>=0; z--) {
+			wd$$ = *(unative_t *)&dptr[z][d+$$*NSIZE];
+			/* P syndrome */
+			wp$$ = vec_xor(wp$$, wd$$);
+
+			/* Q syndrome */
+			asm("vpermxor %0,%1,%2,%3":"=v"(wq$$):"v"(gf_high), "v"(gf_low), "v"(wq$$));
+			wq$$ = vec_xor(wq$$, wd$$);
+		}
+		*(unative_t *)&p[d+NSIZE*$$] = wp$$;
+		*(unative_t *)&q[d+NSIZE*$$] = wq$$;
+	}
+}
+
+static void raid6_vpermxor$#_gen_syndrome(int disks, size_t bytes, void **ptrs)
+{
+	preempt_disable();
+	enable_kernel_altivec();
+
+	raid6_vpermxor$#_gen_syndrome_real(disks, bytes, ptrs);
+
+	disable_kernel_altivec();
+	preempt_enable();
+}
+
+int raid6_have_altivec_vpermxor(void);
+#if $# == 1
+int raid6_have_altivec_vpermxor(void)
+{
+	/* Check if arch has both altivec and the vpermxor instructions */
+# ifdef __KERNEL__
+	return (cpu_has_feature(CPU_FTR_ALTIVEC_COMP) &&
+		cpu_has_feature(CPU_FTR_ARCH_207S));
+# else
+	return 1;
+#endif
+
+}
+#endif
+
+const struct raid6_calls raid6_vpermxor$# = {
+	raid6_vpermxor$#_gen_syndrome,
+	NULL,
+	raid6_have_altivec_vpermxor,
+	"vpermxor$#",
+	0
+};
+#endif
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [v6 2/2] lib/raid6: Build proper raid6test files on powerpc
  2017-08-04  3:42 [v6 1/2] raid6/altivec: Add vpermxor implementation for raid6 Q syndrome Matt Brown
@ 2017-08-04  3:42 ` Matt Brown
  2017-08-09 13:26 ` [v6 1/2] raid6/altivec: Add vpermxor implementation for raid6 Q syndrome Michael Ellerman
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Matt Brown @ 2017-08-04  3:42 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: dja

Previously the raid6 test Makefile did not build the POWER specific files
(altivec and vpermxor).
This patch fixes the bug, so that all appropriate files for powerpc are built.

This patch also fixes the missing and mismatched ifdef statements to allow the
altivec.uc file to be built correctly.

Signed-off-by: Matt Brown <matthew.brown.dev@gmail.com>
---
v6:
	- remove vpermxor objs from this patch
v5:
	- moved altivec.uc fix into this patch
---
 lib/raid6/altivec.uc    | 3 +++
 lib/raid6/test/Makefile | 5 +++--
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/lib/raid6/altivec.uc b/lib/raid6/altivec.uc
index 682aae8..d20ed0d 100644
--- a/lib/raid6/altivec.uc
+++ b/lib/raid6/altivec.uc
@@ -24,10 +24,13 @@
 
 #include <linux/raid/pq.h>
 
+#ifdef CONFIG_ALTIVEC
+
 #include <altivec.h>
 #ifdef __KERNEL__
 # include <asm/cputable.h>
 # include <asm/switch_to.h>
+#endif /* __KERNEL__ */
 
 /*
  * This is the C data type to use.  We use a vector of
diff --git a/lib/raid6/test/Makefile b/lib/raid6/test/Makefile
index a14be53..b64a267 100644
--- a/lib/raid6/test/Makefile
+++ b/lib/raid6/test/Makefile
@@ -44,9 +44,10 @@ else ifeq ($(HAS_NEON),yes)
         CFLAGS += -DCONFIG_KERNEL_MODE_NEON=1
 else
         HAS_ALTIVEC := $(shell printf '\#include <altivec.h>\nvector int a;\n' |\
-                         gcc -c -x c - >&/dev/null && \
-                         rm ./-.o && echo yes)
+                         gcc -c -x c - >/dev/null && rm ./-.o && echo yes)
         ifeq ($(HAS_ALTIVEC),yes)
+                CFLAGS += -I../../../arch/powerpc/include
+                CFLAGS += -DCONFIG_ALTIVEC
                 OBJS += altivec1.o altivec2.o altivec4.o altivec8.o \
                         vpermxor1.o vpermxor2.o vpermxor4.o vpermxor8.o
         endif
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [v6 1/2] raid6/altivec: Add vpermxor implementation for raid6 Q syndrome
  2017-08-04  3:42 [v6 1/2] raid6/altivec: Add vpermxor implementation for raid6 Q syndrome Matt Brown
  2017-08-04  3:42 ` [v6 2/2] lib/raid6: Build proper raid6test files on powerpc Matt Brown
@ 2017-08-09 13:26 ` Michael Ellerman
  2017-08-09 23:41     ` Matt Brown
  2018-03-19 22:22 ` [v6, " Michael Ellerman
  2018-03-20 10:15 ` Michael Ellerman
  3 siblings, 1 reply; 7+ messages in thread
From: Michael Ellerman @ 2017-08-09 13:26 UTC (permalink / raw)
  To: Matt Brown, linuxppc-dev; +Cc: dja

Matt Brown <matthew.brown.dev@gmail.com> writes:

> This patch uses the vpermxor instruction to optimise the raid6 Q syndrome.
> This instruction was made available with POWER8, ISA version 2.07.
> It allows for both vperm and vxor instructions to be done in a single
> instruction. This has been tested for correctness on a ppc64le vm with a
> basic RAID6 setup containing 5 drives.
>
> The performance benchmarks are from the raid6test in the /lib/raid6/test
> directory. These results are from an IBM Firestone machine with ppc64le
> architecture. The benchmark results show a 35% speed increase over the best
> existing algorithm for powerpc (altivec). The raid6test has also been run
> on a big-endian ppc64 vm to ensure it also works for big-endian
> architectures.
>
> Performance benchmarks:
> 		raid6: altivecx4 gen() 18773 MB/s
> 		raid6: altivecx8 gen() 19438 MB/s
>
> 		raid6: vpermxor4 gen() 25112 MB/s
> 		raid6: vpermxor8 gen() 26279 MB/s
>
> Signed-off-by: Matt Brown <matthew.brown.dev@gmail.com>
> Reviewed-by: Daniel Axtens <dja@axtens.net>
> ---
> v6:
> 	- added vpermxor files to .gitignore
> 	- fixup whitespace
> 	- added vpermxor objs to test/Makefile
> v5:
> 	- moved altivec.uc fix into other patch in series
> ---
>  include/linux/raid/pq.h |   4 ++
>  lib/raid6/.gitignore    |   1 +
>  lib/raid6/Makefile      |  27 ++++++++++++-
>  lib/raid6/algos.c       |   4 ++
>  lib/raid6/test/Makefile |  17 +++++++-
>  lib/raid6/vpermxor.uc   | 104 ++++++++++++++++++++++++++++++++++++++++++++++++
>  6 files changed, 154 insertions(+), 3 deletions(-)
>  create mode 100644 lib/raid6/vpermxor.uc

This version at least is not Cc'ed to any of the folks that
get_maintainers.pl identifies for these files:

$ ./scripts/get_maintainer.pl -f lib/raid6
shli@fb.com
gayatri.kammela@intel.com
fenghua.yu@intel.com
megha.dey@linux.intel.com
schwidefsky@de.ibm.com
anup.patel@broadcom.com
linux-kernel@vger.kernel.org


This seems like mostly a list of random folks who've touched this code,
but maybe some of them would have comments?

cheers

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [v6 1/2] raid6/altivec: Add vpermxor implementation for raid6 Q syndrome
  2017-08-09 13:26 ` [v6 1/2] raid6/altivec: Add vpermxor implementation for raid6 Q syndrome Michael Ellerman
@ 2017-08-09 23:41     ` Matt Brown
  0 siblings, 0 replies; 7+ messages in thread
From: Matt Brown @ 2017-08-09 23:41 UTC (permalink / raw)
  To: Michael Ellerman
  Cc: open list:LINUX FOR POWERPC (32-BIT AND 64-BIT),
	Daniel Axtens, gayatri.kammela, shli, fenghua.yu, megha.dey,
	schwidefsky, linux-kernel, anup.patel

On Wed, Aug 9, 2017 at 11:26 PM, Michael Ellerman <mpe@ellerman.id.au> wrote:
> Matt Brown <matthew.brown.dev@gmail.com> writes:
>
>> This patch uses the vpermxor instruction to optimise the raid6 Q syndrome.
>> This instruction was made available with POWER8, ISA version 2.07.
>> It allows for both vperm and vxor instructions to be done in a single
>> instruction. This has been tested for correctness on a ppc64le vm with a
>> basic RAID6 setup containing 5 drives.
>>
>> The performance benchmarks are from the raid6test in the /lib/raid6/test
>> directory. These results are from an IBM Firestone machine with ppc64le
>> architecture. The benchmark results show a 35% speed increase over the best
>> existing algorithm for powerpc (altivec). The raid6test has also been run
>> on a big-endian ppc64 vm to ensure it also works for big-endian
>> architectures.
>>
>> Performance benchmarks:
>>               raid6: altivecx4 gen() 18773 MB/s
>>               raid6: altivecx8 gen() 19438 MB/s
>>
>>               raid6: vpermxor4 gen() 25112 MB/s
>>               raid6: vpermxor8 gen() 26279 MB/s
>>
>> Signed-off-by: Matt Brown <matthew.brown.dev@gmail.com>
>> Reviewed-by: Daniel Axtens <dja@axtens.net>
>> ---
>> v6:
>>       - added vpermxor files to .gitignore
>>       - fixup whitespace
>>       - added vpermxor objs to test/Makefile
>> v5:
>>       - moved altivec.uc fix into other patch in series
>> ---
>>  include/linux/raid/pq.h |   4 ++
>>  lib/raid6/.gitignore    |   1 +
>>  lib/raid6/Makefile      |  27 ++++++++++++-
>>  lib/raid6/algos.c       |   4 ++
>>  lib/raid6/test/Makefile |  17 +++++++-
>>  lib/raid6/vpermxor.uc   | 104 ++++++++++++++++++++++++++++++++++++++++++++++++
>>  6 files changed, 154 insertions(+), 3 deletions(-)
>>  create mode 100644 lib/raid6/vpermxor.uc
>
> This version at least is not Cc'ed to any of the folks that
> get_maintainers.pl identifies for these files:
>
> $ ./scripts/get_maintainer.pl -f lib/raid6
> shli@fb.com
> gayatri.kammela@intel.com
> fenghua.yu@intel.com
> megha.dey@linux.intel.com
> schwidefsky@de.ibm.com
> anup.patel@broadcom.com
> linux-kernel@vger.kernel.org
>
>
> This seems like mostly a list of random folks who've touched this code,
> but maybe some of them would have comments?
>

Ah my bad. I've CC'ed them into this email chain.
Apologies for not including you guys in the original email.
Here is a link to the patchworks patch:
http://patchwork.ozlabs.org/patch/797576/

Thanks,
Matt Brown

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [v6 1/2] raid6/altivec: Add vpermxor implementation for raid6 Q syndrome
@ 2017-08-09 23:41     ` Matt Brown
  0 siblings, 0 replies; 7+ messages in thread
From: Matt Brown @ 2017-08-09 23:41 UTC (permalink / raw)
  To: Michael Ellerman
  Cc: open list:LINUX FOR POWERPC (32-BIT AND 64-BIT),
	Daniel Axtens, gayatri.kammela, shli, fenghua.yu, megha.dey,
	schwidefsky, linux-kernel, anup.patel

On Wed, Aug 9, 2017 at 11:26 PM, Michael Ellerman <mpe@ellerman.id.au> wrote:
> Matt Brown <matthew.brown.dev@gmail.com> writes:
>
>> This patch uses the vpermxor instruction to optimise the raid6 Q syndrome.
>> This instruction was made available with POWER8, ISA version 2.07.
>> It allows for both vperm and vxor instructions to be done in a single
>> instruction. This has been tested for correctness on a ppc64le vm with a
>> basic RAID6 setup containing 5 drives.
>>
>> The performance benchmarks are from the raid6test in the /lib/raid6/test
>> directory. These results are from an IBM Firestone machine with ppc64le
>> architecture. The benchmark results show a 35% speed increase over the best
>> existing algorithm for powerpc (altivec). The raid6test has also been run
>> on a big-endian ppc64 vm to ensure it also works for big-endian
>> architectures.
>>
>> Performance benchmarks:
>>               raid6: altivecx4 gen() 18773 MB/s
>>               raid6: altivecx8 gen() 19438 MB/s
>>
>>               raid6: vpermxor4 gen() 25112 MB/s
>>               raid6: vpermxor8 gen() 26279 MB/s
>>
>> Signed-off-by: Matt Brown <matthew.brown.dev@gmail.com>
>> Reviewed-by: Daniel Axtens <dja@axtens.net>
>> ---
>> v6:
>>       - added vpermxor files to .gitignore
>>       - fixup whitespace
>>       - added vpermxor objs to test/Makefile
>> v5:
>>       - moved altivec.uc fix into other patch in series
>> ---
>>  include/linux/raid/pq.h |   4 ++
>>  lib/raid6/.gitignore    |   1 +
>>  lib/raid6/Makefile      |  27 ++++++++++++-
>>  lib/raid6/algos.c       |   4 ++
>>  lib/raid6/test/Makefile |  17 +++++++-
>>  lib/raid6/vpermxor.uc   | 104 ++++++++++++++++++++++++++++++++++++++++++++++++
>>  6 files changed, 154 insertions(+), 3 deletions(-)
>>  create mode 100644 lib/raid6/vpermxor.uc
>
> This version at least is not Cc'ed to any of the folks that
> get_maintainers.pl identifies for these files:
>
> $ ./scripts/get_maintainer.pl -f lib/raid6
> shli@fb.com
> gayatri.kammela@intel.com
> fenghua.yu@intel.com
> megha.dey@linux.intel.com
> schwidefsky@de.ibm.com
> anup.patel@broadcom.com
> linux-kernel@vger.kernel.org
>
>
> This seems like mostly a list of random folks who've touched this code,
> but maybe some of them would have comments?
>

Ah my bad. I've CC'ed them into this email chain.
Apologies for not including you guys in the original email.
Here is a link to the patchworks patch:
http://patchwork.ozlabs.org/patch/797576/

Thanks,
Matt Brown

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [v6, 1/2] raid6/altivec: Add vpermxor implementation for raid6 Q syndrome
  2017-08-04  3:42 [v6 1/2] raid6/altivec: Add vpermxor implementation for raid6 Q syndrome Matt Brown
  2017-08-04  3:42 ` [v6 2/2] lib/raid6: Build proper raid6test files on powerpc Matt Brown
  2017-08-09 13:26 ` [v6 1/2] raid6/altivec: Add vpermxor implementation for raid6 Q syndrome Michael Ellerman
@ 2018-03-19 22:22 ` Michael Ellerman
  2018-03-20 10:15 ` Michael Ellerman
  3 siblings, 0 replies; 7+ messages in thread
From: Michael Ellerman @ 2018-03-19 22:22 UTC (permalink / raw)
  To: Matt Brown, linuxppc-dev; +Cc: dja

On Fri, 2017-08-04 at 03:42:32 UTC, Matt Brown wrote:
> This patch uses the vpermxor instruction to optimise the raid6 Q syndrome.
> This instruction was made available with POWER8, ISA version 2.07.
> It allows for both vperm and vxor instructions to be done in a single
> instruction. This has been tested for correctness on a ppc64le vm with a
> basic RAID6 setup containing 5 drives.
> 
> The performance benchmarks are from the raid6test in the /lib/raid6/test
> directory. These results are from an IBM Firestone machine with ppc64le
> architecture. The benchmark results show a 35% speed increase over the best
> existing algorithm for powerpc (altivec). The raid6test has also been run
> on a big-endian ppc64 vm to ensure it also works for big-endian
> architectures.
> 
> Performance benchmarks:
> 		raid6: altivecx4 gen() 18773 MB/s
> 		raid6: altivecx8 gen() 19438 MB/s
> 
> 		raid6: vpermxor4 gen() 25112 MB/s
> 		raid6: vpermxor8 gen() 26279 MB/s
> 
> Signed-off-by: Matt Brown <matthew.brown.dev@gmail.com>
> Reviewed-by: Daniel Axtens <dja@axtens.net>

Series applied to powerpc next, thanks.

https://git.kernel.org/powerpc/c/2de95953c4e6ad54c9bee5e6a5518d

cheers

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [v6, 1/2] raid6/altivec: Add vpermxor implementation for raid6 Q syndrome
  2017-08-04  3:42 [v6 1/2] raid6/altivec: Add vpermxor implementation for raid6 Q syndrome Matt Brown
                   ` (2 preceding siblings ...)
  2018-03-19 22:22 ` [v6, " Michael Ellerman
@ 2018-03-20 10:15 ` Michael Ellerman
  3 siblings, 0 replies; 7+ messages in thread
From: Michael Ellerman @ 2018-03-20 10:15 UTC (permalink / raw)
  To: Matt Brown, linuxppc-dev; +Cc: dja

On Fri, 2017-08-04 at 03:42:32 UTC, Matt Brown wrote:
> This patch uses the vpermxor instruction to optimise the raid6 Q syndrome.
> This instruction was made available with POWER8, ISA version 2.07.
> It allows for both vperm and vxor instructions to be done in a single
> instruction. This has been tested for correctness on a ppc64le vm with a
> basic RAID6 setup containing 5 drives.
> 
> The performance benchmarks are from the raid6test in the /lib/raid6/test
> directory. These results are from an IBM Firestone machine with ppc64le
> architecture. The benchmark results show a 35% speed increase over the best
> existing algorithm for powerpc (altivec). The raid6test has also been run
> on a big-endian ppc64 vm to ensure it also works for big-endian
> architectures.
> 
> Performance benchmarks:
> 		raid6: altivecx4 gen() 18773 MB/s
> 		raid6: altivecx8 gen() 19438 MB/s
> 
> 		raid6: vpermxor4 gen() 25112 MB/s
> 		raid6: vpermxor8 gen() 26279 MB/s
> 
> Signed-off-by: Matt Brown <matthew.brown.dev@gmail.com>
> Reviewed-by: Daniel Axtens <dja@axtens.net>

Series applied to powerpc next, thanks.

https://git.kernel.org/powerpc/c/751ba79cc552c146595cd439b21c4f

cheers

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2018-03-20 10:15 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-04  3:42 [v6 1/2] raid6/altivec: Add vpermxor implementation for raid6 Q syndrome Matt Brown
2017-08-04  3:42 ` [v6 2/2] lib/raid6: Build proper raid6test files on powerpc Matt Brown
2017-08-09 13:26 ` [v6 1/2] raid6/altivec: Add vpermxor implementation for raid6 Q syndrome Michael Ellerman
2017-08-09 23:41   ` Matt Brown
2017-08-09 23:41     ` Matt Brown
2018-03-19 22:22 ` [v6, " Michael Ellerman
2018-03-20 10:15 ` Michael Ellerman

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.