Age | Commit message (Collapse) | Author |
|
|
|
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.
|
|
|
|
* maint:
Atomic reference count of binaries also in non-SMP
Conflicts:
erts/emulator/beam/erl_fun.c
|
|
OTP-14202
* rickard/binary-refc:
Atomic reference count of binaries also in non-SMP
Conflicts:
erts/emulator/beam/beam_bp.c
|
|
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()
|
|
|
|
|
|
* maint:
Dirty schedulers should not touch scheduler data pointed to by process struct
|
|
OTP-14122
* rickard/ds-fix:
Dirty schedulers should not touch scheduler data pointed to by process struct
Conflicts:
erts/emulator/beam/erl_process.c
|
|
* maint:
Use a hole-marker that cannot be mistaken for a valid term on the heap
|
|
* rickard/hole-marker:
Use a hole-marker that cannot be mistaken for a valid term on the heap
|
|
OTP-14201
* hm/escript-emulator:
escript: Handle symbolic link to a standalone escript
|
|
* maint:
Store messages for 'rex' and 'error_logger' off heap
file: match enoent and enotdir in path_open
|
|
Store messages for 'rex' and 'error_logger' off heap
OTP-14192
|
|
file: match enoent and enotdir in path_open
OTP-14191
|
|
* 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
|
|
|
|
* 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
|
|
|
|
|
|
|
|
|
|
|
|
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'.
|
|
* maint:
dialyzer: Fix a Dialyzer warning
|
|
* hasse/dialyzer/fix_a_warning:
dialyzer: Fix a Dialyzer warning
|
|
|
|
|
|
This fixes commit f0867aa2ccbbf5677e0577bba08f8b7bc53ec0ed
|
|
Conflicts:
OTP_VERSION
|
|
|
|
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
|
|
|
|
* egil/erts/dont-check-autoconf-version/OTP-14187:
erts: Don't check autoconf version
|
|
Fix a few gen_statem behaviour documentation typos
|
|
The 'deps' field is reset when no longer used, which could possibly
save some memory.
|
|
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.
|
|
At common case, which will otherwise leave a big heap.
|
|
Since SCCs and modules are now topologically sorted (relative the
active graph), we can safely assume that workers have been started.
|
|
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.
|
|
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.
|
|
|
|
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.
|
|
The -T option has not been working for a long time.
|
|
The table used during translation of forms to types used to be a
dictionary of the type info (-type(), -opaque(), and -record()) for
all modules. Now it is reduced to the modules that are needed to
handle references to types in other modules.
The PLT:s type info is still kept on the heap.
|
|
* maint:
dialyzer: Increase time limit for tests
dialyzer: Optimize typesig
dialyzer: Optimize evaluation of complex code
dialyzer: Optimize collection of variables
Conflicts:
lib/dialyzer/src/dialyzer_typesig.erl
|
|
* hasse/dialyzer/memory_opt/OTP-14126:
dialyzer: Increase time limit for tests
dialyzer: Optimize typesig
dialyzer: Optimize evaluation of complex code
dialyzer: Optimize collection of variables
|
|
|
|
|