aboutsummaryrefslogtreecommitdiffstats
path: root/erts
AgeCommit message (Collapse)Author
2018-03-21Implementation of true asynchronous signaling between processesRickard Green
Communication between Erlang processes has conceptually always been performed through asynchronous signaling. The runtime system implementation has however previously preformed most operation synchronously. In a system with only one true thread of execution, this is not problematic (often the opposite). In a system with multiple threads of execution (as current runtime system implementation with SMP support) it becomes problematic. This since it often involves locking of structures when updating them which in turn cause resource contention. Utilizing true asynchronous communication often avoids these resource contention issues. The case that triggered this change was contention on the link lock due to frequent updates of the monitor trees during communication with a frequently used server. The signal order delivery guarantees of the language makes it hard to change the implementation of only some signals to use true asynchronous signaling. Therefore the implementations of (almost) all signals have been changed. Currently the following signals have been implemented as true asynchronous signals: - Message signals - Exit signals - Monitor signals - Demonitor signals - Monitor triggered signals (DOWN, CHANGE, etc) - Link signals - Unlink signals - Group leader signals All of the above already defined as asynchronous signals in the language. The implementation of messages signals was quite asynchronous to begin with, but had quite strict delivery constraints due to the ordering guarantees of signals between a pair of processes. The previously used message queue partitioned into two halves has been replaced by a more general signal queue partitioned into three parts that service all kinds of signals. More details regarding the signal queue can be found in comments in the erl_proc_sig_queue.h file. The monitor and link implementations have also been completely replaced in order to fit the new asynchronous signaling implementation as good as possible. More details regarding the new monitor and link implementations can be found in the erl_monitor_link.h file.
2018-03-13Merge branch 'rickard/dirty-work-gone/OTP-14978'Rickard Green
* rickard/dirty-work-gone/OTP-14978: Reschedule on ordinary scheduler if dirty work is gone
2018-03-13Reschedule on ordinary scheduler if dirty work is goneRickard Green
2018-03-13Merge branch 'rickard/pre-alloc-alignment/OTP-14977'Rickard Green
* rickard/pre-alloc-alignment/OTP-14977: Force 64-bit alignment for pre-allocators unless x86
2018-03-13Force 64-bit alignment for pre-allocators unless x86Rickard Green
2018-03-13Merge branch 'rickard/remove-approx-started/OTP-14975'Rickard Green
* rickard/remove-approx-started/OTP-14975: Remove process start time for crash dumps
2018-03-13Merge branch 'sverker/dict-put-immed-opt/OTP-14976'Sverker Eriksson
* sverker/dict-put-immed-opt: erts: Optimize erlang:put/2 for hash collision lists erts: Optimize erlang:put/2 for immed values erts: Refactor erlang:put/2
2018-03-13Merge branch 'sverker/enif_fprintf-doc'Sverker Eriksson
2018-03-13Merge branch 'sverker/dist-flags-consolidate'Sverker Eriksson
2018-03-13Merge branch 'sverker/unused-atoms'Sverker Eriksson
2018-03-13erts: Remove unused atomsSverker Eriksson
2018-03-12Merge branch 'john/erts/tuple-arityval-fixes/OTP-14963/ERL-577'John Högberg
* john/erts/tuple-arityval-fixes/OTP-14963/ERL-577: Make doc entry for maximum tuple size reflect reality Assert that sz <= MAX_ARITYVAL in make_arityval(sz)
2018-03-12Merge branch 'john/erts/assert-on-memcpy-memset-etc'John Högberg
* john/erts/assert-on-memcpy-memset-etc: Always use sys_memcpy/cmp/etc instead of plain memcpy/cmp/etc Check the arguments to sys_memcpy and friends
2018-03-09Always use sys_memcpy/cmp/etc instead of plain memcpy/cmp/etcJohn Högberg
2018-03-09Check the arguments to sys_memcpy and friendsJohn Högberg
Passing NULL is undefined behavior and unconditionally executing these may result in the compiler optimizing away a later NULL check. It can often work since the pointer isn't touched when the length is 0, but it's a major footgun. See ERL-573.
2018-03-07erts: Add enif_fprintf docsSverker Eriksson
2018-03-07Fix for bug introduced when replacing ERTS_PSFLG_BOUNDRickard Green
Bug introduced in commit fbb10ebc4a37555c7ea7f99e14286d862993976a
2018-03-07Merge branch 'lukas/erts/erl_child_setup_ignore_SIGTERM/OTP-14943'Lukas Larsson
* lukas/erts/erl_child_setup_ignore_SIGTERM/OTP-14943: erts: Ignore SIGTERM in erl_child_setup
2018-03-07Merge pull request #1733 from garazdawi/lukas/erts/cleanup_system_info_docsLukas Larsson
Cleanup erlang:system_info docs
2018-03-07Merge branch 'rickard/psflgs/OTP-14948'Rickard Green
* rickard/psflgs/OTP-14948: Replace usage of ERTS_PSFLG_BOUND Remove ERTS_PSFLG_ON_HEAP_MSGQ
2018-03-06Merge branch 'raimo/stop-encouraging-v4-mapped/ERL-503/OTP-13716'Raimo Niskanen
* raimo/stop-encouraging-v4-mapped/ERL-503/OTP-13716: Stop translating V4MAPPED addresses Stop returning V4MAPPED addresses Implement function for IPv4-mapped IPv6 addresses
2018-03-05erts: Optimize erlang:put/2 for hash collision listsSverker Eriksson
Instead of rebuilding all cons cells before key, just unlink key cell from list with a destructive heap write op. This is safe as these lists never leak out and any new-to-old-heap-refs are preserved.
2018-03-05Assert that sz <= MAX_ARITYVAL in make_arityval(sz)John Högberg
2018-03-05Replace usage of ERTS_PSFLG_BOUNDRickard Green
2018-03-05Remove ERTS_PSFLG_ON_HEAP_MSGQRickard Green
2018-03-05Merge branch 'john/erts/efile_SUITE-iter-max-files-stability'John Högberg
* john/erts/efile_SUITE-iter-max-files-stability: Make efile_SUITE:iter_max_files more stable
2018-03-02erts: Improve send/2 docsSverker Eriksson
with link to ! operator and clarify ugly badarg for unregistered atom argument.
2018-03-02erts: Postpone idle DistEntry until abort is completedSverker Eriksson
2018-03-02erts: Refactor DistEntry.status flags into a stateSverker Eriksson
Just to simplify and get 4 distinctive states IDLE, PENDING, CONNECTED and EXITING. The old possible flag combos were: 0 PENDING CONNECTED CONNECTED|EXITING EXITING The two EXITING states did not serve any purpose other then as a slight optimization in monitor_node(_,false,_) to shortcut EXITING when there can be no monitors.
2018-03-02erts: Optimize dist transcoding toward erl_/jinterfaceSverker Eriksson
to only transcode if output buffer actually contains unsupported BIT_BINARY_EXT or EXPORT_EXT.
2018-03-02erts,kernel: Add dist_util:strict_order_flags/0Sverker Eriksson
to replace DFLAGS_STRICT_ORDER_DELIVERY and remove that compile time dependency.
2018-03-02erts,kernel: Add erts_internal:get_dflags/0Sverker Eriksson
for kernel to ask erts about distribution flags and keep this info in one place.
2018-03-02erts: Cleanup erlang:system_info docsLukas Larsson
Attempt to make the system_info docs easier to navigate by grouping items of similar themes together in the documentation.
2018-03-02erts: Correctly ignore +secio trueLukas Larsson
This is a fix for a bug introduced in 22cde2bda
2018-03-01Make efile_SUITE:iter_max_files more stableJohn Högberg
2018-02-28Merge branch 'john/erts/allow-opening-device-files/OTP-11462'John Högberg
* john/erts/allow-opening-device-files/OTP-11462: Allow opening device files and FIFOs with file:open/2
2018-02-28Merge branch 'john/erts/binary-bin_to_list-performance-fix/OTP-14741'John Högberg
* john/erts/binary-bin_to_list-performance-fix/OTP-14741: Replace binary:bin_to_list CIF implementation with binary_to_list
2018-02-27Merge branch 'sverker/master/erts/more-crash-dump-info/OTP-14820'Sverker Eriksson
2018-02-27Merge branch 'sverker/erts/more-crash-dump-info/OTP-14820' into maintSverker Eriksson
* sverker/erts/more-crash-dump-info/OTP-14820: erts,observer: Add port-suspended pids to crash dump erts,observer: Add port states and flags to crash dump erts,observer: Add dirty schedulers to crash dump observer: Refactor get_schedulerinfo1 erts,observer: Add more port info to crash dump erts: Cleanup dump_process_info() erts: Include failing garbing process in crash dump erts: Remove unused args to collect_live_heap_frags erts: Add binary vheap sizes to crash dump
2018-02-26Merge branch 'maint'Sverker Eriksson
2018-02-26Merge branch 'sverker/enif_self-doc' into maintSverker Eriksson
* sverker/enif_self-doc: erts: Clarify enif_self docs
2018-02-26Merge branch 'maint'Lukas Larsson
2018-02-26Merge branch 'lukas/kernel/dist_SUITE_corefile_ignore' into maintLukas Larsson
* lukas/kernel/dist_SUITE_corefile_ignore: kernel: Ignore cores in erl_distribution_SUITE
2018-02-26Merge branch 'maint'Lukas Larsson
Conflicts: erts/emulator/beam/erl_trace.c
2018-02-26Merge branch 'lukas/erts/dirty_trace_clean_fix/OTP-14938' into maintLukas Larsson
* lukas/erts/dirty_trace_clean_fix/OTP-14938: erts: Delay cleanup of removed tracer on dirty scheds
2018-02-26Replace binary:bin_to_list CIF implementation with binary_to_listJohn Högberg
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.
2018-02-26erts: Delay cleanup of removed tracer on dirty schedsLukas Larsson
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.
2018-02-26Allow opening device files and FIFOs with file:open/2John Högberg
To the best of our knowledge this was introduced since file operations on device files/FIFO:s could hang the emulator forever back when the emulator was single-threaded and lacked IO threads; a read operation could block all progress preventing the write operation it waited for from occurring. Granted, this could still happen through starving all dirty IO schedulers, but the same issue can arise with NFS files which we've always allowed. Removing this restriction also lets us remove a stat(2) call that was added to specifically allow `/dev/null`.
2018-02-26Merge branch 'john/erts/nif-binary-iovec-fixes/OTP-14845/OTP-14931/OTP-14932'John Högberg
* 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
2018-02-26Suggest using enif_make_new_binary when possibleJohn Högberg
While enif_make_binary will create heap-binaries from ErlNifBinaries when possible now, enif_alloc_binary still allocates a Binary* off-heap which is avoided entirely with enif_make_new_binary.