diff options
author | Jinshan Xiong <[email protected]> | 2015-12-09 15:34:16 -0800 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2016-06-02 14:30:51 -0700 |
commit | 1eeb4562a72ab29345572609e1e4315ecd26c5a1 (patch) | |
tree | 457bee35c73a92c056b5000671b18875b507c1e4 /lib | |
parent | 8fbbc6b4cf13f73d517ec4e826a7069a958fa5ba (diff) |
Implementation of AVX2 optimized Fletcher-4
New functionality:
- Preserves existing scalar implementation.
- Adds AVX2 optimized Fletcher-4 computation.
- Fastest routines selected on module load (benchmark).
- Test case for Fletcher-4 added to ztest.
New zcommon module parameters:
- zfs_fletcher_4_impl (str): selects the implementation to use.
"fastest" - use the fastest version available
"cycle" - cycle trough all available impl for ztest
"scalar" - use the original version
"avx2" - new AVX2 implementation if available
Performance comparison (Intel i7 CPU, 1MB data buffers):
- Scalar: 4216 MB/s
- AVX2: 14499 MB/s
See contents of `/sys/module/zcommon/parameters/zfs_fletcher_4_impl`
to get list of supported values. If an implementation is not supported
on the system, it will not be shown. Currently selected option is
enclosed in `[]`.
Signed-off-by: Jinshan Xiong <[email protected]>
Signed-off-by: Andreas Dilger <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #4330
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libzpool/Makefile.am | 1 | ||||
-rw-r--r-- | lib/libzpool/kernel.c | 4 |
2 files changed, 5 insertions, 0 deletions
diff --git a/lib/libzpool/Makefile.am b/lib/libzpool/Makefile.am index 9bb1a8eea..f2bd580b8 100644 --- a/lib/libzpool/Makefile.am +++ b/lib/libzpool/Makefile.am @@ -22,6 +22,7 @@ KERNEL_C = \ zfs_comutil.c \ zfs_deleg.c \ zfs_fletcher.c \ + zfs_fletcher_intel.c \ zfs_namecheck.c \ zfs_prop.c \ zfs_uio.c \ diff --git a/lib/libzpool/kernel.c b/lib/libzpool/kernel.c index 89e474c65..5d6bdf251 100644 --- a/lib/libzpool/kernel.c +++ b/lib/libzpool/kernel.c @@ -40,6 +40,7 @@ #include <sys/utsname.h> #include <sys/time.h> #include <sys/systeminfo.h> +#include <zfs_fletcher.h> /* * Emulation of kernel services in userland. @@ -1236,12 +1237,15 @@ kernel_init(int mode) spa_init(mode); + fletcher_4_init(); + tsd_create(&rrw_tsd_key, rrw_tsd_destroy); } void kernel_fini(void) { + fletcher_4_fini(); spa_fini(); system_taskq_fini(); |