interprocess icon indicating copy to clipboard operation
interprocess copied to clipboard

How do i madvise the mapped_region for managed_shared_memory?

Open rahuldutta90 opened this issue 7 months ago • 4 comments

For performance reasons we want to preallocate memory in the shared memory by calling madvise(MADV_POPULATE_WRITE). This generally has significant benefit in performance during the bootstrap phase as compared to allocate memory when the memory is accessed. However there are 2 reasons why we cannot do this today:

  1. First the managed_shared_memory does not expose the public apis of managed_open_or_create_impl so we are unable to access to api get_mapped_region
  2. Even we would have access to the mapped_region, the advise api supports only selected options (enum advice_types) and MADV_POPULATE_WRITE is not part of it.

Do you plan to support this?

I guess the only viable alternative is I separately create the shared_memory and madvise it before initializing using boost's shared_memory something like this:

fd= shm_open("BoostShmem", O_CREATE) ptr = mmap64( NULL, fileSize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); madvise(ptr, fileSize, MADV_POPULATE_WRITE); boost::interprocess::managed_shared_memory shared_memory(boost::interprocess::create_only, "BoostShmem", fileSize);

rahuldutta90 avatar Aug 05 '25 01:08 rahuldutta90