Age | Commit message (Collapse) | Author |
|
|
|
That is, include information about carrier pool in result returned from
erlang:system_info({allocator,allocator_sizes, _}).
|
|
|
|
|
|
|
|
|
|
|
|
A cleanup after SBMBC was removed.
|
|
|
|
|
|
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
|
|
|
|
* sverk/win64-fixes:
erts: Change some more 'long' to pointer sized int (ErlDrvUInt)
erts: Fix crash in nif_SUITE for win64
erts: Fix assert in isdigit for negative characters
|
|
|
|
Some query functions in erl_alloc_util.c lock the allocator mutex
and then use erts_printf that in turn may call the sys allocator
through the wrappers. To avoid breaking locking order these
query functions first "pre-locks" all allocator wrappers.
|
|
Make sure each fix allocator type always allocate the right fixed size.
|
|
to replace macro constant ERTS_ALCU_DD_FIX_TYPE_OFFS.
|
|
|
|
|
|
* sverk/r16/utf8-atoms:
erl_interface: Fix bug when transcoding atoms from and to UTF8
erl_interface: Changed erlang_char_encoding interface
erts: Testcase doing unicode atom printout with ~w
erl_interface: even more utf8 atom stuff
erts: Fix bug in analyze_utf8 causing faulty latin1 detection
Add UTF-8 node name support for epmd
workaround...
Fix merge conflict with hasse
UTF-8 atom documentation
test case
erl_interface: utf8 atoms continued
Add utf8 atom distribution test cases
atom fixes for NIFs and atom_to_binary
UTF-8 support for distribution
Implement UTF-8 atom support for jinterface
erl_interface: Enable decode of unicode atoms
stdlib: Fix printing of unicode atoms
erts: Change internal representation of atoms to utf8
erts: Refactor rename DFLAG(S)_INTERNAL_TAGS for conformity
Conflicts:
erts/emulator/beam/io.c
OTP-10753
|
|
|
|
with either MBC_ABLK_SZ or MBC_FBLK_SZ in all cases when we already know
what kind of block it is.
|
|
A block larger than sbc_threshold can be allocated in MBC if the subsequent
"residue block" is smaller than min_block_size.
Solved by lowering sbc_threshold to ("hard limit" - min_block_size).
|
|
No allocator strategy is using customized carrier headers anyway.
|
|
|
|
|
|
|
|
|
|
|
|
To get a consistent naming scheme where
FBLK = Free block
ABLK = Allocated block
|
|
|
|
by making use of the new block header scheme to find the carrier header
and thereby the allocator.
|
|
Make use of type FreeBlkFtr_t
Rename GET_MB_CARRIER into BLK2MBC (like BLK2SBC)
Remove some unused macros
|
|
to allow realloc to determine block size (in MBC or SBC)
without having to read the footer of the previous block
that might be written to by concurrent thread.
|
|
|
|
|
|
|
|
* utilize the power of two
|
|
The enqueue operation have been re-written to behave better
during heavy contention by spreading writes over multiple
locations. This enqueue operation also take advantage of the
delayed aux work wake up functionality and can by this omit
one memory barrier.
|
|
As an optimization old thread progress data was kept and used in
handle_aux_work() in erl_process.c. This could cause memory to be
deallocated at a later time than intended, which is quite harmless.
This has, however, now been fixed.
|
|
* rickard/barriers/OTP-9922:
Reduce thread progress read operations in handle_aux_work()
Misc memory barrier fixes
|
|
- Document barrier semantics
- Introduce ddrb suffix on atomic ops
- Barrier macros for both non-SMP and SMP case
- Make the thread progress API a bit more intuitive
|
|
The incorrect assertion would fire when '+Muramv true' has been
given, i.e. when a reallocation always forces a move.
Change the assertion to not call the lock checker if the mutex is
not used (because the allocator will only be accessed from a
specific scheduler and thus no lock is needed).
|
|
OTP-7775
|
|
The ERTS internal system block functionality has been replaced by
new functionality for blocking the system. The old system block
functionality had contention issues and complexity issues. The
new functionality piggy-backs on thread progress tracking functionality
needed by newly introduced lock-free synchronization in the runtime
system. When the functionality for blocking the system isn't used
there is more or less no overhead at all. This since the functionality
for tracking thread progress is there and needed 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.
|
|
alloc_no of sbmbc_low_alloc was set to ERTS_ALC_A_STANDARD_LOW
|
|
|
|
Also add 'low' field in system_info(allocator)
SHORT_LIVED is still in low memory
|