[dpdk-dev] [PATCH 0/3] Add non-blocking stack mempool handler
Gage Eads
gage.eads at intel.com
Thu Jan 10 21:55:35 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.
Gage Eads (3):
eal: add 128-bit cmpset (x86-64 only)
mempool/nb_stack: add non-blocking stack mempool
doc: add NB stack comment to EAL "known issues"
MAINTAINERS | 4 +
config/common_base | 1 +
doc/guides/prog_guide/env_abstraction_layer.rst | 5 +
drivers/mempool/Makefile | 1 +
drivers/mempool/nb_stack/Makefile | 30 +++++
drivers/mempool/nb_stack/meson.build | 4 +
drivers/mempool/nb_stack/nb_lifo.h | 132 +++++++++++++++++++++
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 | 1 +
11 files changed, 329 insertions(+)
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