Age | Commit message (Collapse) | Author |
|
will now return
[{instance,0,[{segments_size,9961472,9961472,11010048}]},
{instance,1,[{segments_size,6291456,6291456,6815744}]},
{instance,2,[{segments_size,524288,524288,786432}]},
{instance,3,[{segments_size,1048576,1048576,1835008}]},
{instance,4,[{segments_size,0,0,262144}]}]
and not just empty lists.
|
|
from {allocator,mseg_alloc} to {allocator,erts_mmap}
|
|
|
|
that uses its own super carrier (erts_exec_mmapper)
to guarantee low addressed and executable memory (PROT_EXEC).
Currently only used on x86_64 that needs low memory
for HiPE/AMD64's small code model.
By initializing erts_exec_mapper early we secure
its low memory area before erts_literal_mmapper might
steal it.
|
|
to prepare for hipe native code allocation.
|
|
|
|
* sverk/literal-alloc-polish:
erts: Add emulator flag +MIscs for literal super carrier size
erts: Refactor init of erts_literal_mmapper
erts: Make literal_alloc documented and configurable
|
|
|
|
This is mostly a pure refactoring.
Except for the buggy cases when calling erlang:halt() with a positive
integer in the range -(INT_MIN+2) to -INT_MIN that got confused with
ERTS_ABORT_EXIT, ERTS_DUMP_EXIT and ERTS_INTR_EXIT.
Outcome OLD erl_exit(n, ) NEW erts_exit(n, )
------- ------------------- -------------------------------------------
exit(Status) n = -Status <= 0 n = Status >= 0
crashdump+abort n > 0, ignore n n = ERTS_ERROR_EXIT < 0
The outcome of the old ERTS_ABORT_EXIT, ERTS_INTR_EXIT and
ERTS_DUMP_EXIT are the same as before (even though their values have
changed).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
by not holding the mseg lock while reading version and option info
which is unnecessary anyway.
|
|
As part of erlang:system_info({allocator,mseg_alloc})
and erl_crash.dump
|
|
|
|
|
|
|
|
|
|
* Coalescing and trimming of free segments in supercarrier
* Management of super aligned and super unaligned areas in
supercarrier
* Management of reservation of physical memory
* erts_mseg usage of erts_mmap
|
|
|
|
|
|
spells __NetBSD__ correctly.
|
|
* egil/fix-mseg_dealloc-arguments/OTP-10912:
erts: Fix refactor error in mseg
|
|
Faulty number of arguments to mseg_dealloc.
Problem arises if we try to compile halfword on operating system
which do not have mremap. Not a supported case.
|
|
|
|
|
|
|
|
|
|
|
|
Use double ended cache queues to evict oldest cache first
|
|
|
|
|
|
* SBC may realloc carriers to misaligned addresses which
is perfectly fine. However, those segments may not be cached
because MBC allocations might find them and MBC's *needs*
correct alignment.
|
|
* Not a power of two (unpowered) segements
|
|
Used with new sbc cache
|
|
|
|
|
|
|
|
* Don't redfine ALIGN_BITS or ALIGNED_SIZE, the global defined MSEG_*
constants are just as good.
|
|
|
|
* utilize the power of two
|
|
|
|
|
|
* Not used except in valgrind but there mseg is disabled completely
via Meamin.
|
|
|
|
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.
|