On Tue, Jun 11, 2024 at 3:00 PM Paul Szczepanek <paul.szczepa...@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

Reply via email to