Age | Commit message (Collapse) | Author |
|
|
|
|
|
This is a fix for a bug introduced in 22cde2bda
|
|
* john/erts/binary-bin_to_list-performance-fix/OTP-14741:
Replace binary:bin_to_list CIF implementation with binary_to_list
|
|
|
|
Conflicts:
erts/emulator/beam/erl_trace.c
|
|
* lukas/erts/dirty_trace_clean_fix/OTP-14938:
erts: Delay cleanup of removed tracer on dirty scheds
|
|
binary:bin_to_list had a poor implementation that resulted in
excessive garbage collection. binary_to_list is almost identical and
has a generally better implementation, so I've replaced
binary:bin_to_list's CIF with a thin wrapper around binary_to_list.
Granted, binary_to_list has a deprecated indexing scheme, but we're
unlikely to ever remote it entirely and it's somewhat easy to move
it to the 'binary' module later on.
|
|
It is not simple to do the correct de-allocation on
a dirty schedulers, so we just delay it until this
process runs on a normal scheduler.
|
|
* john/erts/nif-binary-iovec-fixes/OTP-14845/OTP-14931/OTP-14932:
Suggest using enif_make_new_binary when possible
Make enif_make_binary return heap binaries if possible
Expand ErlNifBinary by another word for future additions
Unconditionally transfer ownership to the created term
Tweak asserts and explain why the copy buf doesn't use the tmp obj list
Free temporary iovecs through the tmp object list
Add a helper function for attaching tmp objects to NIF environments
|
|
This does not avoid allocating a ProcBin since we still need to
release the binary somehow (and using the tmp obj list is slightly
slower since it's an unavoidable off-heap allocation), but it does give
us a hard limit on how long said ProcBin will live, which is a lot
better than before.
OTP-14845
|
|
When fixing OTP-14931/14932 we had to settle for a solution that
decreased performance in a few corner cases like multiple calls to
enif_make_binary, as the other options on the table required extra
fields which would have broken ABI compatibility.
This is ABI-compatible since the fields are unused and at the end.
|
|
This fixes two corner-cases:
1) We will no longer return an invalid term when a binary inspected
on environment A is used in enif_make_binary on environment B
2) A double-free in this sequence of events:
* enif_alloc_binary(size, &bin);
* enif_ioq_enq_binary(ioq, &bin, skip);
* enif_make_binary(env, &bin);
* enif_make_binary(env, &bin);
OTP-14931
OTP-14932
|
|
|
|
Attaching to a ProcBin is the fastest way to delay the release of an
already allocated Binary, but alloc_tmp_obj is a lot faster when
starting from scratch since it usually uses temp_alloc.
|
|
|
|
|
|
|
|
|
|
|
|
Optimize non-strict equality check of binaries differing in size
|
|
|
|
|
|
by testing F_SENSITIVE only once.
|
|
Exclude garbing processes, EXCEPT if run by crash dumping thread
in which case we assume the heap is healthy
without any move markers yet/left.
Switched order between (allocating) setup_rootset()
and (move marking) collect_live_heap_frags().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
When supplied without an enclosing list, bitstrings were returned
as-is instead of badarging.
|
|
|
|
A binary is a binary as long as its size in bits is evenly divisible
by 8, regardless of whether it has a bit offset or not.
|
|
When supplied without an enclosing list, bitstrings were silently
truncated to [] instead of badarging.
|
|
|
|
* maint-20:
Updated OTP version
Update release notes
Update version numbers
erts: Add system_flags(erts_alloc,"+M?sbct *")
erts: Add age order first fit allocator strategies
erts: Refactor erl_ao_firstfit_alloc
erts: Add migration options "acnl" and "acfml"
kernel: Add os:cmd/2 with max_size option
erts: Add more stats for mbcs_pool
erts: Fix alloc_SUITE:migration
stdlib: Make ets_SUITE memory check try again
erts: Improve carrier pool search
erts: Improve alloc_SUITE:migration
erts: Refactor carrier dealloc migration
|
|
into 'sverker/master/alloc-n-migration/ERIERL-88'
|
|
into 'sverker/maint-20/alloc-n-migration/ERIERL-88'
OTP-14915
OTP-14916
OTP-14917
OTP-14918
|
|
into 'sverker/maint-19/alloc-n-migration/ERIERL-88'
|
|
to change sbct limit in runtime for chosen allocator type.
With great power comes great responsibility.
|
|
ageffcaoff: Age First Fit Carrier, Address Order First Fit (within carrier)
ageffcbf : Age First Fit Carrier, Best Fit (within carrier)
ageffcaobf: Age First Fit Carrier, Address Order Best Fit (within carrier)
Prefer old carriers, the older the better.
|
|
|
|
In preparation for carrier age order.
Change 'flavor' to 'blk_order' and 'crr_order'.
|
|
acnl: Abandon Carrier Nr Limit
acfml: Abandon Carrier Free block Min Limit
|
|
This commit brings the perform of a non-strict equality check of
binaries into the same range as strict ones.
Currently, these checks can be significantly slower because they go
through the general comparison code which doesn't have an optimization
to check the size before comparing contents in the case that it's
checking equality.
|
|
Fix the build on targets with small data area
|
|
|
|
Instructions that produce more than one result complicate
optimizations. get_list/3 is one of two instructions that
produce multiple results (get_map_elements/3 is the other).
Introduce the get_hd/2 and get_tl/2 instructions
that return the head and tail of a cons cell, respectively,
and use it internally in all optimization passes.
For efficiency, we still want to use get_list/3 if both
head and tail are used, so we will translate matching pairs
of get_hd and get_tl back to get_list instructions.
|
|
|