From 29c453fc0e671700bfc378efc395d34fde4af3d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Plewa?= Date: Mon, 18 Jul 2022 16:17:24 +0200 Subject: [PATCH] pmem2: enable movdir64b compilation but disable it in the runtime --- src/libpmem2/x86_64/init.c | 4 +-- src/libpmem2/x86_64/memset/memset_movdir64b.h | 4 +-- src/libpmem2/x86_64/sources.inc | 1 - src/test/pmem2_memcpy/TESTS.py | 28 ++++++------------- src/test/pmem2_memset/TESTS.py | 28 ++++++------------- src/test/pmem2_movnt/TESTS.py | 26 ++++++----------- src/test/pmem2_movnt_align/TESTS.py | 12 +------- src/test/pmem_memcpy/TESTS.py | 24 +++++----------- src/test/pmem_memmove/TEST0 | 2 +- src/test/pmem_memmove/TEST0.PS1 | 2 +- src/test/pmem_memset/TEST0 | 2 +- src/test/pmem_memset/TEST0.PS1 | 2 +- src/test/pmem_movnt/TEST0 | 2 +- src/test/pmem_movnt/TEST0.PS1 | 2 +- src/test/pmem_movnt_align/TEST0 | 2 +- src/test/pmem_movnt_align/TEST0.PS1 | 2 +- src/test/pmem_movnt_align/TEST1 | 2 +- src/test/pmemset_memcpy/TESTS.py | 28 ++++++------------- src/test/pmemset_memmove/TESTS.py | 24 +++++----------- src/test/pmemset_memset/TESTS.py | 28 ++++++------------- 20 files changed, 68 insertions(+), 157 deletions(-) diff --git a/src/libpmem2/x86_64/init.c b/src/libpmem2/x86_64/init.c index 0e4cc09d137..bc21183301c 100644 --- a/src/libpmem2/x86_64/init.c +++ b/src/libpmem2/x86_64/init.c @@ -419,7 +419,7 @@ use_avx512f_memcpy_memset(struct pmem2_arch_info *info, /* * use_movdir64b_memcpy_memset -- (internal) movdir64b detected, use it if - * possible + * enabled by environment variable */ static void use_movdir64b_memcpy_memset(struct pmem2_arch_info *info, @@ -429,7 +429,7 @@ use_movdir64b_memcpy_memset(struct pmem2_arch_info *info, LOG(3, "movdir64b supported"); char *e = os_getenv("PMEM_MOVDIR64B"); - if (e != NULL && strcmp(e, "0") == 0) { + if (e == NULL || strcmp(e, "0") == 0) { LOG(3, "PMEM_MOVDIR64B set to 0"); return; } diff --git a/src/libpmem2/x86_64/memset/memset_movdir64b.h b/src/libpmem2/x86_64/memset/memset_movdir64b.h index d7c844c5d0c..7d239eb61c4 100644 --- a/src/libpmem2/x86_64/memset/memset_movdir64b.h +++ b/src/libpmem2/x86_64/memset/memset_movdir64b.h @@ -1,8 +1,8 @@ /* SPDX-License-Identifier: BSD-3-Clause */ /* Copyright 2022, Intel Corporation */ -#ifndef PMEM2_MEMSET_AVX512F_H -#define PMEM2_MEMSET_AVX512F_H +#ifndef PMEM2_MEMSET_MOVDIR64B_H +#define PMEM2_MEMSET_MOVDIR64B_H #include diff --git a/src/libpmem2/x86_64/sources.inc b/src/libpmem2/x86_64/sources.inc index 3f053a44105..41140d3fcb0 100644 --- a/src/libpmem2/x86_64/sources.inc +++ b/src/libpmem2/x86_64/sources.inc @@ -31,7 +31,6 @@ endif MOVDIR64B_PROG="\#include \n\#include \nint main(){ uint64_t v, w; _movdir64b(&v, &w); return 0;}" MOVDIR64B_AVAILABLE := $(shell printf $(MOVDIR64B_PROG) |\ $(CC) $(CFLAGS) -x c -mmovdir64b -o /dev/null - 2>/dev/null && echo y || echo n) -MOVDIR64B_AVAILABLE=n # XXX delete this when movdir64b is ready to be upstreamed ifeq ($(MOVDIR64B_AVAILABLE), y) LIBPMEM2_ARCH_SOURCE += \ diff --git a/src/test/pmem2_memcpy/TESTS.py b/src/test/pmem2_memcpy/TESTS.py index c61fbb513dd..38d59668d44 100755 --- a/src/test/pmem2_memcpy/TESTS.py +++ b/src/test/pmem2_memcpy/TESTS.py @@ -52,41 +52,29 @@ class TEST0(Pmem2Memcpy): pass -@t.require_architectures('x86_64') -@t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST1(Pmem2Memcpy): - envs0 = ("PMEM_AVX512F",) - - -@t.require_architectures('x86_64') -@t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST2(Pmem2Memcpy): - envs0 = ("PMEM_AVX512F", "PMEM_AVX",) - - @t.add_params('wc_workaround', ['default']) -class TEST3(Pmem2Memcpy): +class TEST1(Pmem2Memcpy): envs1 = ("PMEM_NO_MOVNT",) @t.add_params('wc_workaround', ['default']) -class TEST4(Pmem2Memcpy): +class TEST2(Pmem2Memcpy): envs1 = ("PMEM_NO_MOVNT", "PMEM_NO_GENERIC_MEMCPY") @t.require_architectures('x86_64') @t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST5(Pmem2Memcpy): - envs0 = ("PMEM_MOVDIR64B",) +class TEST3(Pmem2Memcpy): + envs0 = ("PMEM_AVX512F",) @t.require_architectures('x86_64') @t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST6(Pmem2Memcpy): - envs0 = ("PMEM_MOVDIR64B", "PMEM_AVX512F",) +class TEST4(Pmem2Memcpy): + envs0 = ("PMEM_AVX512F", "PMEM_AVX",) @t.require_architectures('x86_64') @t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST7(Pmem2Memcpy): - envs0 = ("PMEM_MOVDIR64B", "PMEM_AVX512F", "PMEM_AVX",) +class TEST5(Pmem2Memcpy): + envs1 = ("PMEM_MOVDIR64B",) diff --git a/src/test/pmem2_memset/TESTS.py b/src/test/pmem2_memset/TESTS.py index dde9adadc2c..3031630c47e 100755 --- a/src/test/pmem2_memset/TESTS.py +++ b/src/test/pmem2_memset/TESTS.py @@ -42,41 +42,29 @@ class TEST0(Pmem2Memset): pass -@t.require_architectures('x86_64') -@t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST1(Pmem2Memset): - envs0 = ("PMEM_AVX512F",) - - -@t.require_architectures('x86_64') -@t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST2(Pmem2Memset): - envs0 = ("PMEM_AVX512F", "PMEM_AVX",) - - @t.add_params('wc_workaround', ['default']) -class TEST3(Pmem2Memset): +class TEST1(Pmem2Memset): envs1 = ("PMEM_NO_MOVNT",) @t.add_params('wc_workaround', ['default']) -class TEST4(Pmem2Memset): +class TEST2(Pmem2Memset): envs1 = ("PMEM_NO_MOVNT", "PMEM_NO_GENERIC_MEMCPY") @t.require_architectures('x86_64') @t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST5(Pmem2Memset): - envs0 = ("PMEM_MOVDIR64B",) +class TEST3(Pmem2Memset): + envs0 = ("PMEM_AVX512F",) @t.require_architectures('x86_64') @t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST6(Pmem2Memset): - envs0 = ("PMEM_MOVDIR64B", "PMEM_AVX512F",) +class TEST4(Pmem2Memset): + envs0 = ("PMEM_AVX512F", "PMEM_AVX",) @t.require_architectures('x86_64') @t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST7(Pmem2Memset): - envs0 = ("PMEM_MOVDIR64B", "PMEM_AVX512F", "PMEM_AVX",) +class TEST5(Pmem2Memset): + envs1 = ("PMEM_MOVDIR64B",) diff --git a/src/test/pmem2_movnt/TESTS.py b/src/test/pmem2_movnt/TESTS.py index 7ac41a58f1e..7e9bc8f70ff 100755 --- a/src/test/pmem2_movnt/TESTS.py +++ b/src/test/pmem2_movnt/TESTS.py @@ -36,24 +36,14 @@ class TEST0(Pmem2Movnt): pass -@t.require_architectures('x86_64') -class TEST1(Pmem2Movnt): - envs0 = ("PMEM_AVX512F",) - - -@t.require_architectures('x86_64') -class TEST2(Pmem2Movnt): - envs0 = ("PMEM_AVX512F", "PMEM_AVX",) - - -class TEST3(Pmem2MovntCommon): +class TEST1(Pmem2MovntCommon): def run(self, ctx): super().create_file(ctx) ctx.env['PMEM_NO_MOVNT'] = '1' ctx.exec('pmem2_movnt', self.filepath) -class TEST4(Pmem2MovntCommon): +class TEST2(Pmem2MovntCommon): def run(self, ctx): super().create_file(ctx) ctx.env['PMEM_NO_MOVNT'] = '1' @@ -62,15 +52,15 @@ def run(self, ctx): @t.require_architectures('x86_64') -class TEST5(Pmem2Movnt): - envs0 = ("PMEM_MOVDIR64B",) +class TEST3(Pmem2Movnt): + envs0 = ("PMEM_AVX512F",) @t.require_architectures('x86_64') -class TEST6(Pmem2Movnt): - envs0 = ("PMEM_MOVDIR64B", "PMEM_AVX512F",) +class TEST4(Pmem2Movnt): + envs0 = ("PMEM_AVX512F", "PMEM_AVX",) @t.require_architectures('x86_64') -class TEST7(Pmem2Movnt): - envs0 = ("PMEM_MOVDIR64B", "PMEM_AVX512F", "PMEM_AVX",) +class TEST5(Pmem2Movnt): + envs1 = ("PMEM_MOVDIR64B",) diff --git a/src/test/pmem2_movnt_align/TESTS.py b/src/test/pmem2_movnt_align/TESTS.py index ae2638c5aaf..8d5eda1f88c 100755 --- a/src/test/pmem2_movnt_align/TESTS.py +++ b/src/test/pmem2_movnt_align/TESTS.py @@ -101,14 +101,4 @@ def run(self, ctx): @t.require_architectures('x86_64') class TEST10(Pmem2MovntAlign): - envs0 = ("PMEM_MOVDIR64B",) - - -@t.require_architectures('x86_64') -class TEST11(Pmem2MovntAlign): - envs0 = ("PMEM_MOVDIR64B", "PMEM_AVX512F",) - - -@t.require_architectures('x86_64') -class TEST12(Pmem2MovntAlign): - envs0 = ("PMEM_MOVDIR64B", "PMEM_AVX512F", "PMEM_AVX",) + envs1 = ("PMEM_MOVDIR64B",) diff --git a/src/test/pmem_memcpy/TESTS.py b/src/test/pmem_memcpy/TESTS.py index 9226e9f3e1e..c0ab443833d 100644 --- a/src/test/pmem_memcpy/TESTS.py +++ b/src/test/pmem_memcpy/TESTS.py @@ -42,34 +42,24 @@ class TEST0(PmemMemcpy): pass -@t.require_architectures('x86_64') class TEST1(PmemMemcpy): - envs0 = ("PMEM_AVX512F",) - - -@t.require_architectures('x86_64') -class TEST2(PmemMemcpy): - envs0 = ("PMEM_AVX512F", "PMEM_AVX",) - - -class TEST3(PmemMemcpy): envs1 = ("PMEM_NO_MOVNT",) -class TEST4(PmemMemcpy): +class TEST2(PmemMemcpy): envs1 = ("PMEM_NO_MOVNT", "PMEM_NO_GENERIC_MEMCPY") @t.require_architectures('x86_64') -class TEST5(PmemMemcpy): - envs0 = ("PMEM_MOVDIR64B",) +class TEST3(PmemMemcpy): + envs0 = ("PMEM_AVX512F",) @t.require_architectures('x86_64') -class TEST6(PmemMemcpy): - envs0 = ("PMEM_MOVDIR64B", "PMEM_AVX512F",) +class TEST4(PmemMemcpy): + envs0 = ("PMEM_AVX512F", "PMEM_AVX",) @t.require_architectures('x86_64') -class TEST7(PmemMemcpy): - envs0 = ("PMEM_MOVDIR64B", "PMEM_AVX512F", "PMEM_AVX",) +class TEST5(PmemMemcpy): + envs1 = ("PMEM_MOVDIR64B",) diff --git a/src/test/pmem_memmove/TEST0 b/src/test/pmem_memmove/TEST0 index f15f3a03c3e..c952ea2fa4f 100755 --- a/src/test/pmem_memmove/TEST0 +++ b/src/test/pmem_memmove/TEST0 @@ -80,7 +80,7 @@ export PMEM_NO_GENERIC_MEMCPY=1 test_all -export PMEM_MOVDIR64B=0 +export PMEM_MOVDIR64B=1 test_all diff --git a/src/test/pmem_memmove/TEST0.PS1 b/src/test/pmem_memmove/TEST0.PS1 index 544706e65a2..d87821c77af 100644 --- a/src/test/pmem_memmove/TEST0.PS1 +++ b/src/test/pmem_memmove/TEST0.PS1 @@ -80,7 +80,7 @@ $Env:PMEM_NO_GENERIC_MEMCPY = 1 test_all -$Env:PMEM_MOVDIR64B = 0 +$Env:PMEM_MOVDIR64B = 1 test_all diff --git a/src/test/pmem_memset/TEST0 b/src/test/pmem_memset/TEST0 index 309cf8f3fe2..7bf26a42b4f 100755 --- a/src/test/pmem_memset/TEST0 +++ b/src/test/pmem_memset/TEST0 @@ -43,7 +43,7 @@ export PMEM_NO_GENERIC_MEMCPY=1 test_all -export PMEM_MOVDIR64B=0 +export PMEM_MOVDIR64B=1 test_all diff --git a/src/test/pmem_memset/TEST0.PS1 b/src/test/pmem_memset/TEST0.PS1 index b551f278afd..bd57da0c10f 100644 --- a/src/test/pmem_memset/TEST0.PS1 +++ b/src/test/pmem_memset/TEST0.PS1 @@ -42,7 +42,7 @@ $Env:PMEM_NO_GENERIC_MEMCPY = 1 test_all -$Env:PMEM_MOVDIR64B = 0 +$Env:PMEM_MOVDIR64B = 1 test_all diff --git a/src/test/pmem_movnt/TEST0 b/src/test/pmem_movnt/TEST0 index 1c8188a41e6..a80c46ce798 100755 --- a/src/test/pmem_movnt/TEST0 +++ b/src/test/pmem_movnt/TEST0 @@ -51,7 +51,7 @@ export PMEM_NO_GENERIC_MEMCPY=1 test -export PMEM_MOVDIR64B=0 +export PMEM_MOVDIR64B=1 test_all diff --git a/src/test/pmem_movnt/TEST0.PS1 b/src/test/pmem_movnt/TEST0.PS1 index 7cb19b8572e..2bcc31874f7 100644 --- a/src/test/pmem_movnt/TEST0.PS1 +++ b/src/test/pmem_movnt/TEST0.PS1 @@ -77,7 +77,7 @@ $Env:PMEM_NO_GENERIC_MEMCPY = 1 test -$Env:PMEM_MOVDIR64B = 0 +$Env:PMEM_MOVDIR64B = 1 test_all diff --git a/src/test/pmem_movnt_align/TEST0 b/src/test/pmem_movnt_align/TEST0 index 408c1684120..c7bc60d52ed 100755 --- a/src/test/pmem_movnt_align/TEST0 +++ b/src/test/pmem_movnt_align/TEST0 @@ -51,7 +51,7 @@ export PMEM_NO_GENERIC_MEMCPY=1 test -export PMEM_MOVDIR64B=0 +export PMEM_MOVDIR64B=1 test_all diff --git a/src/test/pmem_movnt_align/TEST0.PS1 b/src/test/pmem_movnt_align/TEST0.PS1 index 93e82d67bed..6806d98ca1d 100644 --- a/src/test/pmem_movnt_align/TEST0.PS1 +++ b/src/test/pmem_movnt_align/TEST0.PS1 @@ -81,7 +81,7 @@ $Env:PMEM_NO_GENERIC_MEMCPY = 1 test -$Env:PMEM_MOVDIR64B = 0 +$Env:PMEM_MOVDIR64B = 1 test_all diff --git a/src/test/pmem_movnt_align/TEST1 b/src/test/pmem_movnt_align/TEST1 index 45c72c476d8..e87a05be803 100755 --- a/src/test/pmem_movnt_align/TEST1 +++ b/src/test/pmem_movnt_align/TEST1 @@ -53,7 +53,7 @@ export PMEM_NO_GENERIC_MEMCPY=1 test -export PMEM_MOVDIR64B=0 +export PMEM_MOVDIR64B=1 test_all diff --git a/src/test/pmemset_memcpy/TESTS.py b/src/test/pmemset_memcpy/TESTS.py index 83b53347849..7e1f9882df3 100755 --- a/src/test/pmemset_memcpy/TESTS.py +++ b/src/test/pmemset_memcpy/TESTS.py @@ -52,41 +52,29 @@ class TEST0(PmemsetMemcpy): pass -@t.require_architectures('x86_64') -@t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST1(PmemsetMemcpy): - envs0 = ("PMEM_AVX512F",) - - -@t.require_architectures('x86_64') -@t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST2(PmemsetMemcpy): - envs0 = ("PMEM_AVX512F", "PMEM_AVX",) - - @t.add_params('wc_workaround', ['default']) -class TEST3(PmemsetMemcpy): +class TEST1(PmemsetMemcpy): envs1 = ("PMEM_NO_MOVNT",) @t.add_params('wc_workaround', ['default']) -class TEST4(PmemsetMemcpy): +class TEST2(PmemsetMemcpy): envs1 = ("PMEM_NO_MOVNT", "PMEM_NO_GENERIC_MEMCPY") @t.require_architectures('x86_64') @t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST5(PmemsetMemcpy): - envs0 = ("PMEM_MOVDIR64B",) +class TEST3(PmemsetMemcpy): + envs0 = ("PMEM_AVX512F",) @t.require_architectures('x86_64') @t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST6(PmemsetMemcpy): - envs0 = ("PMEM_MOVDIR64B", "PMEM_AVX512F",) +class TEST4(PmemsetMemcpy): + envs0 = ("PMEM_AVX512F", "PMEM_AVX",) @t.require_architectures('x86_64') @t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST7(PmemsetMemcpy): - envs0 = ("PMEM_MOVDIR64B", "PMEM_AVX512F", "PMEM_AVX",) +class TEST5(PmemsetMemcpy): + envs1 = ("PMEM_MOVDIR64B",) diff --git a/src/test/pmemset_memmove/TESTS.py b/src/test/pmemset_memmove/TESTS.py index 4bdd5d309b9..5fa761ceb5c 100755 --- a/src/test/pmemset_memmove/TESTS.py +++ b/src/test/pmemset_memmove/TESTS.py @@ -67,34 +67,24 @@ class TEST0(PmemsetMemmove): pass -@t.require_architectures('x86_64') class TEST1(PmemsetMemmove): - envs0 = ("PMEM_AVX512F",) - - -@t.require_architectures('x86_64') -class TEST2(PmemsetMemmove): - envs0 = ("PMEM_AVX512F", "PMEM_AVX",) - - -class TEST3(PmemsetMemmove): envs1 = ("PMEM_NO_MOVNT",) -class TEST4(PmemsetMemmove): +class TEST2(PmemsetMemmove): envs1 = ("PMEM_NO_MOVNT", "PMEM_NO_GENERIC_MEMCPY") @t.require_architectures('x86_64') -class TEST5(PmemsetMemmove): - envs0 = ("PMEM_MOVDIR64B",) +class TEST3(PmemsetMemmove): + envs0 = ("PMEM_AVX512F",) @t.require_architectures('x86_64') -class TEST6(PmemsetMemmove): - envs0 = ("PMEM_MOVDIR64B", "PMEM_AVX512F",) +class TEST4(PmemsetMemmove): + envs0 = ("PMEM_AVX512F", "PMEM_AVX",) @t.require_architectures('x86_64') -class TEST7(PmemsetMemmove): - envs0 = ("PMEM_MOVDIR64B", "PMEM_AVX512F", "PMEM_AVX",) +class TEST5(PmemsetMemmove): + envs1 = ("PMEM_MOVDIR64B",) diff --git a/src/test/pmemset_memset/TESTS.py b/src/test/pmemset_memset/TESTS.py index 13aed2441fe..4fcbc9bd359 100755 --- a/src/test/pmemset_memset/TESTS.py +++ b/src/test/pmemset_memset/TESTS.py @@ -42,41 +42,29 @@ class TEST0(PmemsetMemset): pass -@t.require_architectures('x86_64') -@t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST1(PmemsetMemset): - envs0 = ("PMEM_AVX512F",) - - -@t.require_architectures('x86_64') -@t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST2(PmemsetMemset): - envs0 = ("PMEM_AVX512F", "PMEM_AVX",) - - @t.add_params('wc_workaround', ['default']) -class TEST3(PmemsetMemset): +class TEST1(PmemsetMemset): envs1 = ("PMEM_NO_MOVNT",) @t.add_params('wc_workaround', ['default']) -class TEST4(PmemsetMemset): +class TEST2(PmemsetMemset): envs1 = ("PMEM_NO_MOVNT", "PMEM_NO_GENERIC_MEMCPY") @t.require_architectures('x86_64') @t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST5(PmemsetMemset): - envs0 = ("PMEM_MOVDIR64B",) +class TEST3(PmemsetMemset): + envs0 = ("PMEM_AVX512F",) @t.require_architectures('x86_64') @t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST6(PmemsetMemset): - envs0 = ("PMEM_MOVDIR64B", "PMEM_AVX512F",) +class TEST4(PmemsetMemset): + envs0 = ("PMEM_AVX512F", "PMEM_AVX",) @t.require_architectures('x86_64') @t.add_params('wc_workaround', ['on', 'off', 'default']) -class TEST7(PmemsetMemset): - envs0 = ("PMEM_MOVDIR64B", "PMEM_AVX512F", "PMEM_AVX",) +class TEST5(PmemsetMemset): + envs1 = ("PMEM_MOVDIR64B",)