> From: Stephen Hemminger [mailto:[email protected]] > Sent: Tuesday, 11 August 2026 17.25 > > On Tue, 11 Aug 2026 12:35:41 +0000 > Morten Brørup <[email protected]> wrote: > > > Early submission of: > > - A new "pile" stack-like implementation using the Stack API, and > > - an accompanying "pile" mempool driver. > > > > For CI test and community feedback. > > > > Needless to say, this must be separated into multiple independent > > series of patches. > > And release notes must be added. > > For now, I'm submitting a snapshot of work in progress. > > > > The "pile" somewhat resembles the lock-free stack, but operates on > > bulks (arrays) of objects, to significantly reduce linked list > > traversal. > > With the pile's default bulk size of 32 objects, a mempool cache > > flush/refill traverses a linked list of only 16 elements, whereas > > the lock-free stack would traverse a linked list of 512 elements. > > > > Some performance numbers from mempool_perf_autotest_2cores, all > > with cache=1024 cores=2 n_keep=32768: > > > > start performance test (using ring_mp_mc, with cache) > > n_get_bulk= 64 n_put_bulk= 64 constant_n=0 rate_persec= 753985338 > > n_get_bulk=256 n_put_bulk=256 constant_n=0 rate_persec= 755805913 > > > > start performance test for lf_stack (with cache) > > n_get_bulk= 64 n_put_bulk= 64 constant_n=0 rate_persec= 29132352 > > n_get_bulk=256 n_put_bulk=256 constant_n=0 rate_persec= 29276708 > > > > start performance test for pile (with cache) > > n_get_bulk= 64 n_put_bulk= 64 constant_n=0 rate_persec= 560159479 > > n_get_bulk=256 n_put_bulk=256 constant_n=0 rate_persec= 557910933 > > > > Hat tip to Bruce for bringing attention to the ring not being the > > optimal mempool driver! > > > > Note: The GitHub "mini" tests don't include the "pile" mempool > driver, > > and are expected to fail. > > > > Signed-off-by: Morten Brørup <[email protected]> > > Right but the 32 bit code fails at run time. > > MEMPOOL: Cache size 250 not divisible by 32, rounding down to 224. > STACK: rte_stack_create(): Pile is not supported on your platform
The "pile" and "lf_stack" stack types (and mempool drivers) rely on a 128-bit CAS instruction, which is only available on x86_64 and arm64, so asking for one of those mempool drivers will fail on 32-bit architectures. > > Should be possible to correct this at compile. Like if pile is not > available on this platform, something else should be the default. Yep. The default will remain the "ring" mempool driver. I only temporarily selected the "pile" driver as the default to ensure that it got properly tested by the CI. > > The CI failures indicate places where it is likely to be a problem > for users. Other CI failures are related to "mini" builds. The "mini" builds only include the "ring" mempool driver, so selecting the "pile" mempool driver naturally fails: MEMPOOL: Unknown mempool_ops <pile>, of 6 ops registered I think v11 has brought sufficient CI/AI feedback to split it into individual patch series for the "pile" stack/driver and the mempool optimizations. Will proceed with that now. Thank you for the advanced AI reviews, Stephen; they were helpful. -Morten

