Commit d09874f3 authored by Jim Harris's avatar Jim Harris
Browse files

nvme: remove avx optimizations when copying command



Using AVX512 or AVX2 ends up being a small pessimization.
I think AVX works better for copies when there are
multiple cachelines to copy.  I see a 2-3% improvement
in high IOPs benchmarks when reverting to SSE.

Signed-off-by: default avatarJim Harris <james.r.harris@intel.com>
Change-Id: I3d70a1e359e98cec2a9da41ccf9af2de9baa5868

Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/456247


Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarPaul Luse <paul.e.luse@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent c85164bd
Loading
Loading
Loading
Loading
+1 −12
Original line number Diff line number Diff line
@@ -1095,18 +1095,7 @@ static inline void
nvme_pcie_copy_command(struct spdk_nvme_cmd *dst, const struct spdk_nvme_cmd *src)
{
	/* dst and src are known to be non-overlapping and 64-byte aligned. */
#if defined(__AVX512F__)
	__m512i *d512 = (__m512i *)dst;
	const __m512i *s512 = (const __m512i *)src;

	_mm512_stream_si512(d512, _mm512_load_si512(s512));
#elif defined(__AVX__)
	__m256i *d256 = (__m256i *)dst;
	const __m256i *s256 = (const __m256i *)src;

	_mm256_stream_si256(&d256[0], _mm256_load_si256(&s256[0]));
	_mm256_stream_si256(&d256[1], _mm256_load_si256(&s256[1]));
#elif defined(__SSE2__)
#if defined(__SSE2__)
	__m128i *d128 = (__m128i *)dst;
	const __m128i *s128 = (const __m128i *)src;