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