module Netmcore_mempool:Memory poolssig..end
A memory pool is a block of shared memory that is set aside for storing shared data structures. The pool needs to be created before the worker processes are forked off that are going to use the pool. The worker processes do not map the pool to some random address, but rather the processes inherit the pool from the common master process which ensures that all processes will see the pool at the same address.
In order to allow inheritance, the function Netmcore.start
for starting workers needs to get an additional argument
~inherit_resources. The resource ID of the pool must be put
into this list - otherwise the worker does not get access to
the pool.
It is not possible to enlarge the pool later (because of the
inheritance method for making the pool accessible). It is advised
to make the pool large enough for all possible data cases, and
to let the user configure this size.
exception Out_of_pool_memory
val create_mempool : int -> Netmcore.res_id
Note that the process calling this function cannot use the pool,
but only worker processes that are forked later. It is possible
to call create_mempool before running Netmcore.startup.
val alloc_mem : Netmcore.res_id -> int -> Netsys_mem.memorymemory object. The size is rounded up to the next
multiple of pages.
Blocks are actually allocated in units of pages.
Raises Out_of_pool_memory if there is not enough contiguous
space in the pool.
val size_mem : Netmcore.res_id -> Netsys_mem.memory -> intNot_foundval size_mem_at_addr : Netmcore.res_id -> nativeint -> intNot_foundval free_mem : Netmcore.res_id -> Netsys_mem.memory -> unitval stats : Netmcore.res_id -> int * int * int(total, free, contiguous) wheretotal is the total size of the poolfree is the number of free bytescontiguous is the size of the largest contiguous free blockval debug_info : Netmcore.res_id -> stringval shm_name : Netmcore.res_id -> stringmodule Debug:sig..end