Age | Commit message (Collapse) | Author |
|
Problem #1 Goodfit was crippled by the fact that destroying_mbc()
was called _before_ the carriers was unlinked from mbc_list.
Problem #2 destroying_mbc() was called for carriers that later could be
resurrected from dc_list without a matching call to creating_mbc().
This was mostly a practical problem for the new test case
alloc_SUITE:migration that use the callbacks to create/destroy a mutex.
Solution:
destroying_mbc() is now only called just before a carrier is
destroyed (deallocated or put in mseg cache).
remove_mbc() is called both (like before) when inserted into cpool
but now also when last block is freed and mbc is scheduled for
destruction but may later be resurrected from dc_list.
|
|
|
|
Introduce unconditional ERTS_ASSERT
and use that for both ASSERT and ASSERT_EXPR.
|
|
with better performance than aoffcaobf as we don't have to rearrange
the search tree when there are blocks of equal size.
|
|
That is, include information about carrier pool in result returned from
erlang:system_info({allocator,allocator_sizes, _}).
|
|
|
|
A cleanup after SBMBC was removed.
|
|
|
|
|
|
|
|
and add new callbacks add_mbc(), remove_mbc() and largest_fblk_in_mbc()
for carrier migration.
|
|
by putting blocks from different carrier into separate search trees.
Carriers are currently organized in a naive linked list by address order.
|
|
This is a modified partial revert of 2ab1d972f6fd37c17b05
|
|
|
|
|
|
|
|
No allocator strategy is using customized carrier headers anyway.
|
|
|
|
|
|
A number of memory allocation optimizations have been implemented. Most
optimizations reduce contention caused by synchronization between
threads during allocation and deallocation of memory. Most notably:
* Synchronization of memory management in scheduler specific allocator
instances has been rewritten to use lock-free synchronization.
* Synchronization of memory management in scheduler specific
pre-allocators has been rewritten to use lock-free synchronization.
* The 'mseg_alloc' memory segment allocator now use scheduler specific
instances instead of one instance. Apart from reducing contention
this also ensures that memory allocators always create memory
segments on the local NUMA node on a NUMA system.
|
|
|
|
|