[PATCH v15 0/6] add pointer compression API
David Marchand
david.marchand at redhat.com
Fri Jun 14 12:28:34 CEST 2024
On Tue, Jun 11, 2024 at 3:00 PM Paul Szczepanek <paul.szczepanek at arm.com> wrote:
>
> This patchset is proposing adding a new header only library
> with utility functions that allow compression of arrays of pointers.
>
> Since this is a header only library a patch needed to be added to amend
> the build system to allow adding libraries without source files.
>
> When passing caches full of pointers between threads, memory containing
> the pointers is copied multiple times which is especially costly between
> cores. A compression method will allow us to shrink the memory size
> copied.
>
> The compression takes advantage of the fact that pointers are usually
> located in a limited memory region. We can compress them by converting them
> to offsets from a base memory address.
>
> Offsets can be stored in fewer bytes (dictated by the memory region size
> and alignment of the pointer). For example: an 8 byte aligned pointer
> which is part of a 32GB memory pool can be stored in 4 bytes. The API is
> very generic and does not assume mempool pointers, any pointer can be
> passed in.
>
> Compression is based on few and fast operations and especially with vector
> instructions leveraged creates minimal overhead.
>
> The API accepts and returns arrays because the overhead means it only is
> worth it when done in bulk.
>
> Test is added that shows potential performance gain from compression. In
> this test an array of pointers is passed through a ring between two cores.
> It shows the gain which is dependent on the bulk operation size. In this
> synthetic test run on ampere altra a substantial (up to 25%) performance
> gain is seen if done in bulk size larger than 32. At 32 it breaks even and
> lower sizes create a small (less than 5%) slowdown due to overhead.
>
> In a more realistic mock application running the l3 forwarding dpdk
> example that works in pipeline mode on two cores this translated into a
> ~5% throughput increase on an ampere altra.
>
> Paul Szczepanek (6):
> lib: allow libraries with no sources
> mempool: add functions to get extra mempool info
> ptr_compress: add pointer compression library
> test: add pointer compress tests to ring perf test
> docs: add pointer compression guide
> test: add unit test for ptr compression
>
> MAINTAINERS | 6 +
> app/test/meson.build | 21 +-
> app/test/test_mempool.c | 70 ++++
> app/test/test_ptr_compress.c | 193 +++++++++++
> app/test/test_ring.h | 94 ++++++
> app/test/test_ring_perf.c | 352 ++++++++++++++-------
> doc/api/doxy-api-index.md | 1 +
> doc/api/doxy-api.conf.in | 1 +
> doc/guides/prog_guide/index.rst | 1 +
> doc/guides/prog_guide/ptr_compress_lib.rst | 160 ++++++++++
> doc/guides/rel_notes/release_24_07.rst | 7 +
> lib/mempool/rte_mempool.c | 45 +++
> lib/mempool/rte_mempool.h | 49 +++
> lib/mempool/version.map | 3 +
> lib/meson.build | 17 +
> lib/ptr_compress/meson.build | 4 +
> lib/ptr_compress/rte_ptr_compress.h | 325 +++++++++++++++++++
> 17 files changed, 1217 insertions(+), 132 deletions(-)
> create mode 100644 app/test/test_ptr_compress.c
> create mode 100644 doc/guides/prog_guide/ptr_compress_lib.rst
> create mode 100644 lib/ptr_compress/meson.build
> create mode 100644 lib/ptr_compress/rte_ptr_compress.h
I reorganised the series, adjusted the documentation and added some
release notes for mempool, as agreed offlist.
Even if this library only contains a header, with no tie to other
public DPDK API, this library should be optional.
If no objection, please work on this change for -rc2,
Series applied, thanks Paul.
--
David Marchand
More information about the dev
mailing list