On Sat, Feb 22, 2025 at 07:54:16PM -0800, Suren Baghdasaryan wrote: > On Fri, Feb 14, 2025 at 8:27 AM Vlastimil Babka <vbabka@xxxxxxx> wrote: > > > > Add functions for efficient guaranteed allocations e.g. in a critical > > section that cannot sleep, when the exact number of allocations is not > > known beforehand, but an upper limit can be calculated. > > > > kmem_cache_prefill_sheaf() returns a sheaf containing at least given > > number of objects. > > > > kmem_cache_alloc_from_sheaf() will allocate an object from the sheaf > > and is guaranteed not to fail until depleted. > > > > kmem_cache_return_sheaf() is for giving the sheaf back to the slab > > allocator after the critical section. This will also attempt to refill > > it to cache's sheaf capacity for better efficiency of sheaves handling, > > but it's not stricly necessary to succeed. > > > > kmem_cache_refill_sheaf() can be used to refill a previously obtained > > sheaf to requested size. If the current size is sufficient, it does > > nothing. If the requested size exceeds cache's sheaf_capacity and the > > sheaf's current capacity, the sheaf will be replaced with a new one, > > hence the indirect pointer parameter. > > > > kmem_cache_sheaf_size() can be used to query the current size. > > > > The implementation supports requesting sizes that exceed cache's > > sheaf_capacity, but it is not efficient - such sheaves are allocated > > fresh in kmem_cache_prefill_sheaf() and flushed and freed immediately by > > kmem_cache_return_sheaf(). kmem_cache_refill_sheaf() might be expecially > > s/expecially/especially > > > ineffective when replacing a sheaf with a new one of a larger capacity. > > It is therefore better to size cache's sheaf_capacity accordingly. > > If support for sizes exceeding sheaf_capacity adds much complexity > with no performance benefits, I think it would be ok not to support > them at all. Users know the capacity of a particular kmem_cache, so > they can use this API only when their needs are within sheaf_capacity, > otherwise either size the sheaf appropriately or use slab bulk > allocation. At least for maple tree, I think the reason why it support varying size (that may exceed sheaf_capacity) of sheaves is because the upper limit depends on the store operation maple tree is going to perform, and height of a maple tree? Or can we set a single maximum sheaf capacity that works for any store operation and any height of maple trees? Liam may have an opinion on it... > > Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx> > > Reviewed-by: Suren Baghdasaryan <surenb@xxxxxxxxxx> -- Cheers, Harry