Age | Commit message (Collapse) | Author |
|
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.
|
|
* rickard/psflgs/OTP-14948:
Replace usage of ERTS_PSFLG_BOUND
Remove ERTS_PSFLG_ON_HEAP_MSGQ
|
|
* raimo/stop-encouraging-v4-mapped/ERL-503/OTP-13716:
Stop translating V4MAPPED addresses
Stop returning V4MAPPED addresses
Implement function for IPv4-mapped IPv6 addresses
|
|
|
|
|
|
|
|
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
|
|
acnl: Abandon Carrier Nr Limit
acfml: Abandon Carrier Free block Min Limit
|
|
|
|
erlexec adds $ROOT/erts-<vsn>/bin and $ROOT/bin first in $PATH on
startup, but didn't do so if they were in the $PATH already, which
meant that the bindir didn't point to the current release after a
downgrade.
|
|
|
|
The retry loop wasn't working anyway as it tested fd<0
instead of res.
So, there is no real semantic change here.
|
|
|
|
* lukas/erts/win_user_home_dir/OTP-14691:
erts: Use PROFILE dir as home on windows
|
|
* dgud/dot_erlang/OTP-14439:
fixup! Do not load .erlang from current dir
erlc: Do not load .erlang
escript: Do not load .erlang
dialyzer: Do not load .erlang
reltool: Add no_dot_erlang bootfiles
Enable usage of no_dot_erlang in bootstrap
Do not load .erlang from current dir
|
|
|
|
Instead of using C:\Windows we use the profile path as the
home path on windows. The profile path normally resolves
to C:\Users\%USERNAME%. This fixes an issue where the default
path to the .erlang.cookie was not the same for jinterface as
for erl.
|
|
to run beam with "rr record".
|
|
|
|
Use 'no_dot_erlang' start script for tools. Options and
paths should be stated on the command line, via a
Makefile, rebar.config etc.
|
|
Previously you could not opt out on loading .erlang, change the
default to not load the resource file. The escript author
can invoke c:erlangrc(PathList) to find and load .erlang if needed.
|
|
Use 'no_dot_erlang' start script for tools.
Options and paths should be stated on the command line.
|
|
* lukas/erts/non-smp-removal-cleanup/OTP-14518:
Make estone work with older releases
erts: Allow read in ttsl driver to return EAGAIN
syntax_tools: Fix makefile dep
erts: non-smp removal cleanup in erlexec
|
|
|
|
|
|
|
|
This refactor was done using the unifdef tool like this:
for file in $(find erts/ -name *.[ch]); do unifdef -t -f defile -o $file $file; done
where defile contained:
#define ERTS_SMP 1
#define USE_THREADS 1
#define DDLL_SMP 1
#define ERTS_HAVE_SMP_EMU 1
#define SMP 1
#define ERL_BITS_REENTRANT 1
#define ERTS_USE_ASYNC_READY_Q 1
#define FDBLOCK 1
#undef ERTS_POLL_NEED_ASYNC_INTERRUPT_SUPPORT
#define ERTS_POLL_ASYNC_INTERRUPT_SUPPORT 0
#define ERTS_POLL_USE_WAKEUP_PIPE 1
#define ERTS_POLL_USE_UPDATE_REQUESTS_QUEUE 1
#undef ERTS_HAVE_PLAIN_EMU
#undef ERTS_SIGNAL_STATE
|
|
|
|
CFLAGS weren't updated to include the sys/common directory for this build
target.
|
|
* john/erts/runtime-lcnt:
Document rt_mask and add warnings about copy_save
Add an emulator test suite for lock counting
Break erts_debug:lock_counters/1 into separate BIFs
Allow toggling lock counting at runtime
Move lock flags to a common header
Enable register_SUITE for lcnt builds
Enable lcnt smoke test on all builds that have lcnt enabled
Make lock counter info independent of the locks being counted
OTP-14412
OTP-13170
OTP-14413
|
|
The implementation is still hidden behind ERTS_ENABLE_LOCK_COUNT, and
all categories are still enabled by default, but the actual counting can be
toggled at will.
OTP-13170
|
|
|
|
|
|
* rickard/escript-space-path-fix/OTP-14433:
escript: Do not split path to Erlang system into multiple words
|
|
Fix erlang system lookup from escript bug introduced in PR #1293
OTP-14201
|
|
* dgud/erts/revert-default-process-name:
Revert setting default argv0 name
|
|
escript failed to start Erlang systems with spaces in the
absolute path (when absolute path was used).
|
|
Erlang system found in PATH was used even when explicitly pointing out
the escript binary in another Erlang system.
|
|
Changing argv[0] from emu name to progname if ESCRIPT_NAME was not set
caused to many failing scripts, revert that part of the change.
See 86f6a9856
|
|
* lukas/erts/etp-processes-ports-optimization:
erts: Optimize etp-processes and etp-ports
|
|
Not calculating the max, table and invalid addresses
each loop speeds up iterating through the processes list
by about 5x.
|
|
OTP-14152
* rickard/ds-runqs:
Make statistics/1 aware of dirty run-queues and tasks
|
|
|
|
Add the option -emu_type to start an emulator of a certain
type. For exampe, "-emu_type lcnt" will start beam.lcnt.smp.
Any string will be accepted after -emu_type. If there is no
corresponding emulator, there will be an error similar to:
erlexec: The emulator '.../bin/x86_64-unknown-linux-gnu/beam.foo.smp' does not exist.
On Windows, there is an undocumented option "-debug". Remove
that option, because -emu_type can be used instead.
|
|
"./configure --enable-lock-counter" would modify the behavior
of the default emulator (usually SMP).
To make lock counting more accessible, change --enable-lock-counter
to build an additional emulator in the same way as:
(cd erts/emulator && make lcnt)
(The next commit will make it easier to start the built lock-counter
emulator.)
|
|
|
|
* dgud/erts/erlscript_name:
Rename argv[0] from beam to invoking program name
OTP-14381
|
|
OTP-14380
* rickard/ds-stack-size:
Suggested stack size options for dirty schedulers
|
|
* lukas/erts/deprecate-non-smp/OTP-14272:
erts: Fix testcases for smp +S 1:1
erts: Deprecate the non-smp emulators
|