Hi,
I have a Rust program that uses the pmdk library (1.6 and 1.8).
the program is ran on ubuntu with intel cpus and nvme flash disk (not persistent memory).
After creating a pmem pool with capacity of 128 objs (pool size is 128 * (obj _size + 64) * 3), when I'm calling pmemobj_alloc from more then 11 threads (from rust cpupool - a thread pool intended to run CPU intensive work), and the obj size is between 24021bytes - 184317bytes get this error consistently on the 12'th allocation: "extending the pool by appending parts with headers is not supported!"
(I tried obj_size of 184341 and more, and 8000 and less, and it passed)
With other thread pool (tokio_threadpool) is less consistent:
It fails after about 100 allocations if I create the file in /tmp : /tmp/tal/__dirname/filename.pmemobj (probably ext4 file system),
and succeeds if I create the file in the local dir: ./__dirname/filename.pmemobj.
the call stack is probably this:
util_pool_extend
heap_extend
heap_ensure_huge_bucket_filled
heap_get_bestfit_block
palloc_reservation_create
palloc_operation/
obj_alloc_construct
pmemobj_alloc
I didn't see in the code where I could set this OPTION_SINLGLEHRD flag.
What does this flag stand for? And how can I set it if I want to?
Do you have any idea why I got this error anyway?
why does the pool need to be expended after just 11 parallel obj allocations even though it is much bigger than that?
more information:
when there is less than 12 cpus in the machine the error didn't occur.
I tried to reproduce the issue in c code: created 100 threads that ran 100 allocation in loop each. it didn't reproduce.
thanks!