aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2017-02-06Use magic refs for binary compile patternsRickard Green
2017-02-06Use magic refs for list_to_binary/binary_to_list trapsRickard Green
2017-02-06Use magic refs for compiled match specsRickard Green
2017-02-06Use magic refs for re:run() static NIFs trapRickard Green
2017-02-06Use magic refs for code loading stateRickard Green
2017-02-06Use magic refs in trapping processes()/ports() BIFsRickard Green
2017-02-06Use magic refs for NIF resourcesRickard Green
2017-02-06Implement magic referencesRickard Green
Magic references are *intentionally* indistinguishable from ordinary references for the Erlang software. Magic references do not change the language, and are intended as a pure runtime internal optimization. An ordinary reference is typically used as a key in some table. A magic reference has a direct pointer to a reference counted magic binary. This makes it possible to implement various things without having to do lookups in a table, but instead access the data directly. Besides very fast lookups this can also improve scalability by removing a potentially contended table. A couple of examples of planned future usage of magic references are ETS table identifiers, and BIF timer identifiers. Besides future optimizations using magic references it should also be possible to replace the exposed magic binary cludge with magic references. That is, magic binaries that are exposed as empty binaries to the Erlang software.
2017-02-06Implement erts_refc_inc_unless()Rickard Green
2017-02-06Merge branch 'maint'Rickard Green
* maint: Atomic reference count of binaries also in non-SMP Conflicts: erts/emulator/beam/erl_fun.c
2017-02-06Merge branch 'rickard/binary-refc' into maintRickard Green
OTP-14202 * rickard/binary-refc: Atomic reference count of binaries also in non-SMP Conflicts: erts/emulator/beam/beam_bp.c
2017-02-06Atomic reference count of binaries also in non-SMPRickard Green
NIF resources was not handled in a thread-safe manner in the runtime system without SMP support. As a consequence of this fix, the following driver functions are now thread-safe also in the runtime system without SMP support: - driver_free_binary() - driver_realloc_binary() - driver_binary_get_refc() - driver_binary_inc_refc() - driver_binary_dec_refc()
2017-02-06Merge branch 'maint'Hans Nilsson
2017-02-06Merge branch 'hans/ssh/cuddle_tests' into maintHans Nilsson
2017-02-06Merge branch 'maint'Rickard Green
* maint: Dirty schedulers should not touch scheduler data pointed to by process struct
2017-02-06Merge branch 'rickard/ds-fix' into maintRickard Green
OTP-14122 * rickard/ds-fix: Dirty schedulers should not touch scheduler data pointed to by process struct Conflicts: erts/emulator/beam/erl_process.c
2017-02-06Merge branch 'maint'Rickard Green
* maint: Use a hole-marker that cannot be mistaken for a valid term on the heap
2017-02-06Merge branch 'rickard/hole-marker' into maintRickard Green
* rickard/hole-marker: Use a hole-marker that cannot be mistaken for a valid term on the heap
2017-02-06Merge branch 'hm/escript-emulator'Rickard Green
OTP-14201 * hm/escript-emulator: escript: Handle symbolic link to a standalone escript
2017-02-06Merge branch 'maint'Björn Gustavsson
* maint: Store messages for 'rex' and 'error_logger' off heap file: match enoent and enotdir in path_open
2017-02-06Merge pull request #1328 from bjorng/bjorn/kernel/off-heap-message/OTP-14142Björn Gustavsson
Store messages for 'rex' and 'error_logger' off heap OTP-14192
2017-02-06Merge pull request #1283 from pulitta/maintBjörn Gustavsson
file: match enoent and enotdir in path_open OTP-14191
2017-02-06Merge branch 'hasse/dialyzer/memory_opt/OTP-14127'Hans Bolinder
* hasse/dialyzer/memory_opt/OTP-14127: dialyzer: Attempt to reduce memory consumption dialyzer: Do not spawn all workers at once dialyzer: Write PLT in subprocess dialyzer: Remove code for non-started workers dialyzer: Sort graphs topologically dialyzer: Compress some PLT tables dialyzer: Check return value of digrahp:add_edge() dialyzer: Use less memory for the PLT when analyzing typer: Fix a bug regarding the -T option dialyzer: Do not keep the code server's type info on the heap
2017-02-03ssh: use real groups in kex_gex test suiteHans Nilsson
2017-02-03Merge branch 'egil/20/erts/signal-service/OTP-14186'Björn-Egil Dahlberg
* egil/20/erts/signal-service/OTP-14186: kernel: Document signal server erts: Use os module instead of erts_internal for set_signal/2 erts: Do not handle SIGILL erts: Fix thread suspend in crashdump erts: Do not enable SIGINT erts: Use generic signal handler erts: Add OS signal tests erts: Handle SIGUSR1 via signal service instead erts: Handle SIGTERM via signal service instead kernel: Add gen_event signal server and default handler erts: Add SIGHUP signal handler erts: Remove whitespace errors Conflicts: erts/emulator/beam/bif.tab
2017-02-03ssh: logging in test lib for ssh testsHans Nilsson
2017-02-03Use a hole-marker that cannot be mistaken for a valid term on the heapRickard Green
2017-02-03Merge branch 'hans/ssh/default_algo_list/OTP-14110'Hans Nilsson
2017-02-03Merge branch 'maint'Hans Nilsson
2017-02-03Merge branch 'hans/ssh/speed_dh_keygen/OTP-14169' into maintHans Nilsson
2017-02-03Store messages for 'rex' and 'error_logger' off heapBjörn Gustavsson
Performance for processes that receive huge amounts of messages can be increased by storing the incoming messages outside the heap (that avoids copying the message in a garbage collection). Two OTP processes that are known to receive many messages are 'rex' (used by 'rpc') and 'error_logger'.
2017-02-03Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Fix a Dialyzer warning
2017-02-03Merge branch 'hasse/dialyzer/fix_a_warning' into maintHans Bolinder
* hasse/dialyzer/fix_a_warning: dialyzer: Fix a Dialyzer warning
2017-02-03dialyzer: Fix a Dialyzer warningHans Bolinder
2017-02-03Merge branch 'maint'Björn-Egil Dahlberg
2017-02-03Fix merge commitBjörn-Egil Dahlberg
This fixes commit f0867aa2ccbbf5677e0577bba08f8b7bc53ec0ed
2017-02-03erge branch 'maint'Hans Nilsson
Conflicts: OTP_VERSION
2017-02-03Merge branch 'maint' of github.com:erlang/otp into maintHans Nilsson
2017-02-03Merge branch 'maint-18' into maintHans Nilsson
Conflicts: OTP_VERSION erts/doc/src/notes.xml erts/emulator/sys/unix/erl_unix_sys.h erts/emulator/sys/unix/sys.c erts/vsn.mk lib/crypto/c_src/crypto.c lib/crypto/doc/src/notes.xml lib/crypto/vsn.mk lib/inets/doc/src/notes.xml lib/inets/vsn.mk lib/ssh/doc/src/notes.xml lib/ssh/src/ssh.app.src lib/ssh/src/ssh_connection_handler.erl lib/ssh/vsn.mk otp_versions.table
2017-02-03Merge branch 'maint'Björn-Egil Dahlberg
2017-02-03Merge branch 'egil/erts/dont-check-autoconf-version/OTP-14187' into maintBjörn-Egil Dahlberg
* egil/erts/dont-check-autoconf-version/OTP-14187: erts: Don't check autoconf version
2017-02-03Merge pull request #1325 from kimshrier/statem_design_principles_typosRaimo Niskanen
Fix a few gen_statem behaviour documentation typos
2017-02-03dialyzer: Attempt to reduce memory consumptionHans Bolinder
The 'deps' field is reset when no longer used, which could possibly save some memory.
2017-02-03dialyzer: Do not spawn all workers at onceHans Bolinder
Spawning all worker processes at once has the potential to increase peak memory consumption. Therefore the implementation is now slightly modified: `20 * dialyzer_utils:parallelism()' processes are running in parallel. 20 i quite a big factor, but seems necessary to keep all schedulers busy according to the Observer application's Load Charts, with a 100 ms update interval.
2017-02-03dialyzer: Write PLT in subprocessHans Bolinder
At common case, which will otherwise leave a big heap.
2017-02-03dialyzer: Remove code for non-started workersHans Bolinder
Since SCCs and modules are now topologically sorted (relative the active graph), we can safely assume that workers have been started.
2017-02-03dialyzer: Sort graphs topologicallyHans Bolinder
Although some variable names indicate that lists of SCCs and modules are sorted, that was not always the case. The effect on the execution time of sorting them doesn't seem to be significant. dialyzer_coordinator:sccs_to_pids() should now always return an empty second list (not yet started workers). Since the condensation of graphs often needs a lot of heap memory, it is run in a separate process.
2017-02-03dialyzer: Compress some PLT tablesHans Bolinder
Compressing the signatures or the contract records would cost time. The contract records are still held in two places (code server and PLT) in many cases.
2017-02-03dialyzer: Check return value of digrahp:add_edge()Hans Bolinder
2017-02-03dialyzer: Use less memory for the PLT when analyzingHans Bolinder
The two tables for (record) types and exported types are no longer kept in memory (by the PLT) when analyzing, which reduces memory consumption. A first step towards removing (or replacing) the #plt{} record.