[dpdk-dev] [PATCH v2 0/4] eal/common: introduce rte_memset and related test
Zhiyong Yang
zhiyong.yang at intel.com
Tue Dec 27 11:04:54 CET 2016
DPDK code has met performance drop badly in some case when calling glibc
function memset. Reference to discussions about memset in
http://dpdk.org/ml/archives/dev/2016-October/048628.html
It is necessary to introduce more high efficient function to fix it.
One important thing about rte_memset is that we can get clear control
on what instruction flow is used.
This patchset introduces rte_memset to bring more high efficient
implementation, and will bring obvious perf improvement, especially
for small N bytes in the most application scenarios.
Patch 1 implements rte_memset in the file rte_memset.h on IA platform
The file supports three types of instruction sets including sse & avx
(128bits), avx2(256bits) and avx512(512bits). rte_memset makes use of
vectorization and inline function to improve the perf on IA. In addition,
cache line and memory alignment are fully taken into consideration.
Patch 2 implements functional autotest to validates the function whether
to work in a right way.
Patch 3 implements performance autotest separately in cache and memory.
We can see the perf of rte_memset is obviously better than glibc memset
especially for small N bytes.
Patch 4 Using rte_memset instead of copy_virtio_net_hdr can bring 3%~4%
performance improvements on IA platform from virtio/vhost non-mergeable
loopback testing.
Changes in V2:
Patch 1:
Rename rte_memset.h -> rte_memset_64.h and create a file rte_memset.h
for each arch.
Patch 3:
add the perf comparation data between rte_memset and memset on haswell.
Patch 4:
Modify release_17_02.rst description.
Zhiyong Yang (4):
eal/common: introduce rte_memset on IA platform
app/test: add functional autotest for rte_memset
app/test: add performance autotest for rte_memset
lib/librte_vhost: improve vhost perf using rte_memset
app/test/Makefile | 3 +
app/test/test_memset.c | 158 +++++++++
app/test/test_memset_perf.c | 348 +++++++++++++++++++
doc/guides/rel_notes/release_17_02.rst | 7 +
.../common/include/arch/arm/rte_memset.h | 36 ++
.../common/include/arch/ppc_64/rte_memset.h | 36 ++
.../common/include/arch/tile/rte_memset.h | 36 ++
.../common/include/arch/x86/rte_memset.h | 51 +++
.../common/include/arch/x86/rte_memset_64.h | 378 +++++++++++++++++++++
lib/librte_eal/common/include/generic/rte_memset.h | 52 +++
lib/librte_vhost/virtio_net.c | 18 +-
11 files changed, 1116 insertions(+), 7 deletions(-)
create mode 100644 app/test/test_memset.c
create mode 100644 app/test/test_memset_perf.c
create mode 100644 lib/librte_eal/common/include/arch/arm/rte_memset.h
create mode 100644 lib/librte_eal/common/include/arch/ppc_64/rte_memset.h
create mode 100644 lib/librte_eal/common/include/arch/tile/rte_memset.h
create mode 100644 lib/librte_eal/common/include/arch/x86/rte_memset.h
create mode 100644 lib/librte_eal/common/include/arch/x86/rte_memset_64.h
create mode 100644 lib/librte_eal/common/include/generic/rte_memset.h
--
2.7.4
More information about the dev
mailing list