[dpdk-dev] [PATCH v3 0/2] Add non-blocking stack mempool handler
Gage Eads
gage.eads at intel.com
Wed Jan 16 16:18:33 CET 2019
For some users, the rte ring's "non-preemptive" constraint is not acceptable;
for example, if the application uses a mixture of pinned high-priority threads
and multiplexed low-priority threads that share a mempool.
This patchset introduces a non-blocking stack mempool handler. Note that the
non-blocking algorithm relies on a 128-bit compare-and-swap, so it is limited
to x86_64 machines.
In mempool_perf_autotest the lock-based stack outperforms the non-blocking
handler*, however:
- For applications with preemptible pthreads, a lock-based stack's
worst-case performance (i.e. one thread being preempted while
holding the spinlock) is much worse than the non-blocking stack's.
- Using per-thread mempool caches will largely mitigate the performance
difference.
*Test setup: x86_64 build with default config, dual-socket Xeon E5-2699 v4,
running on isolcpus cores with a tickless scheduler. The lock-based stack's
rate_persec was 1x-3.5x the non-blocking stack's.
v3:
- Fix two more space-after-typecast issues
- Rework nb_stack's meson.build x86_64 check, borrowing from net/sfc/
v2:
- Merge separate docs commit into patch #2
- Fix two space-after-typecast issues
- Fix alphabetical sorting for build files
- Remove unnecessary include path from nb_stack/Makefile
- Add a comment to nb_lifo_len() justifying its approximate behavior
- Fix comparison with NULL
- Remove unnecessary void * cast
- Fix meson builds and limit them to x86_64
- Fix missing library error for non-x86_64 builds
Gage Eads (2):
eal: add 128-bit cmpset (x86-64 only)
mempool/nb_stack: add non-blocking stack mempool
MAINTAINERS | 4 +
config/common_base | 1 +
doc/guides/prog_guide/env_abstraction_layer.rst | 5 +
drivers/mempool/Makefile | 3 +
drivers/mempool/meson.build | 3 +-
drivers/mempool/nb_stack/Makefile | 23 ++++
drivers/mempool/nb_stack/meson.build | 8 ++
drivers/mempool/nb_stack/nb_lifo.h | 147 +++++++++++++++++++++
drivers/mempool/nb_stack/rte_mempool_nb_stack.c | 125 ++++++++++++++++++
.../nb_stack/rte_mempool_nb_stack_version.map | 4 +
.../common/include/arch/x86/rte_atomic_64.h | 22 +++
mk/rte.app.mk | 7 +-
12 files changed, 349 insertions(+), 3 deletions(-)
create mode 100644 drivers/mempool/nb_stack/Makefile
create mode 100644 drivers/mempool/nb_stack/meson.build
create mode 100644 drivers/mempool/nb_stack/nb_lifo.h
create mode 100644 drivers/mempool/nb_stack/rte_mempool_nb_stack.c
create mode 100644 drivers/mempool/nb_stack/rte_mempool_nb_stack_version.map
--
2.13.6
More information about the dev
mailing list