Age | Commit message (Collapse) | Author |
|
after it has built off_heap data
and then done at least one trap call.
The undo mechanism in dec_term does not work
if we build the magic binary after any other off_heap data.
|
|
|
|
|
|
to not expose the trapping BIF in the stacktrace
when it throws badarg.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Being able to disable garbage collection over context
switches vastly simplifies implementation of yielding
native code that builds large or complex data structures
on the heap. This since the heap can be left in an
inconsistent state over the context switch.
|
|
A process requesting a system task to be executed in the context of
another process will be notified by a message when the task has
executed. This message will be on the form:
{RequestType, RequestId, Pid, Result}.
A process requesting a system task to be executed can set priority
on the system task. The requester typically set the same priority
on the task as its own process priority, and by this avoiding
priority inversion. A request for execution of a system task is
made by calling the statically linked in NIF
erts_internal:request_system_task(Pid, Prio, Request). This is an
undocumented ERTS internal function that should remain so. It
should *only* be called from BIF implementations.
Currently defined system tasks are:
* garbage_collect
* check_process_code
Further system tasks can and will be implemented in the future.
The erlang:garbage_collect/[1,2] and erlang:check_process_code/[2,3]
BIFs are now implemented using system tasks. Both the
'garbage_collect' and the 'check_process_code' operations perform
or may perform garbage_collections. By doing these via the
system task functionality all garbage collect operations in the
system will be performed solely in the context of the process
being garbage collected. This makes it possible to later implement
functionality for disabling garbage collection of a process over
context switches.
Newly introduced BIFs:
* erlang:garbage_collect/2 - The new second argument is an option
list. Introduced option:
* {async, RequestId} - making it possible for users to issue
asynchronous garbage collect requests.
* erlang:check_process_code/3 - The new third argument is an
option list. Introduced options:
* {async, RequestId} - making it possible for users to issue
asynchronous check process code requests.
* {allow_gc, boolean()} - making it possible to issue requests
that aren't allowed to garbage collect (operation will abort
if gc should be needed).
These options have been introduced as a preparation for
parallelization of check_process_code operations when the
code_server is about to purge a module.
|
|
Clear the "enabled" flag for scheduling statistics when disable is
specified.
|
|
* egil/erl_driver-thread-info/OTP-11303:
erts: Document erl_driver interface lock names
erts: Extend erl_driver interface with lock names
|
|
* sv-sched-percentage-option:
Silence gcc warnings in non-smp build
|
|
* lukas/erts/clean_port_msg_dispatcher/OTP-11290:
erts: Fix segfault when scheduling release_port later_op
|
|
|
|
For applications where measurements show enhanced performance from the use
of a non-default number of emulator scheduler threads, having to accurately
set the right number of scheduler threads across multiple hosts each with
different numbers of logical processors is difficult because the erl +S
option requires absolute numbers of scheduler threads and scheduler threads
online to be specified.
To address this issue, add a +SP option to erl, similar to the existing +S
option but allowing the number of scheduler threads and scheduler threads
online to be set as percentages of logical processors configured and
logical processors available, respectively. For example, "+SP 50:25" sets
the number of scheduler threads to 50% of the logical processors
configured, and the number of scheduler threads online to 25% of the
logical processors available. The +SP option also interacts with any
settings specified with the +S option, such that the combination of options
"+S 4:4 +SP 50:50" (in either order) results in 2 scheduler threads and 2
scheduler threads online.
Add documentation for the +SP option.
Add tests for the +SP option to scheduler_SUITE.
Add tests and documentation for two existing features of the +S option: +S
0:0 resets the scheduler thread count and scheduler threads online count to
their defaults, and specifying negative numbers for +S results in those
values being subtracted from the default values for the host.
|
|
begin_port_cleanup can be called from a non-scheduler thread, this
means that there is no esdp available and thus erts_schedule_thr_prgr_later_op
segfaults.
|
|
The actual port id is used to create a key from the
pointer value which is the ErlDrvPort. To do this
a new driver api function driver_async_port_key is
added and the driver API minor version is updated.
The documentation is updated and the faulty description of
how to spread ports over async threads is updated to
use the new API.
Testcase also added.
|
|
|
|
* lukas/erts/match_spec_test_silent/OTP-11232:
erts: Do not enable TRACE_SILENT when testing a ms
|
|
* sverk/ptab-race:
erts: Fix race in ptab that can cause PID mix-ups
OTP-11225
|
|
|
|
Since: R16B01
Symptom: A spawned process may get the same PID as an existing
process. The new process will "steal" the PID and make the old process
unreachable through the PID.
The problem also applies to port identities but has only been seen
for processes.
Conditions: SMP emulator with at least two scheduler threads. Rapid
spawning and termination of a large number of processes. A small
number of free slots in the process table will also increase the risk
for this bug.
Workaround: Use command line options "+P legacy" and "+Q legacy"
Cause: The race happens if a process terminates and gets stalled while
releasing its process table slot. The stall has to be so long (due to OS
preemptive scheduling most probably) for other schedluer threads to
consume all other free slots for newly spawn processes.
Fix: Write invalid-markers in the free-pid-table and do atomic exhange
operations in retry-loops to make sure each thread gets a unique PID.
|
|
Bug reported by Jose Valim on the erlang-bugs mailing list:
erlang:halt(0,[]) does not flush as advertised in the documentation.
Should be the same as erlang:halt(0,[{flush,true}]), but is in fact
the same as erlang:halt(0,[{flush,false}]).
|
|
Lock and thread names are already a feature in the driver interface.
This extension will let developers read these names. Eases debugging.
|
|
* egil/erts/aggregate-system-traceability/OTP-11196:
Check for native code without loading module
Fix erlang:system_info(compile_info)
Fix system_information get_beam_name/0
Add beam dynamic libraries to system_information
Add system_information testsuite
Add system information aggregate
Refactor away ?line macro in code_SUITE
Fix tests for erts app-file
Add erts app-file
erts: Add cflags, ldflags and config.h into executable
|
|
Allocation needs to be in correct order.
|
|
* rickard/warning_fixes:
Fix variable ‘rp_had_locks’ set but not used warning
Fix ‘ethr_native_rwlock_destroy’ defined but not used warning
Fix 'no previous prototype' warning for dtrace functions
|
|
|
|
|
|
|
|
* jw/fix-float-middle-endian/OTP-11201:
Fix binary construction on floating point middle-endian machines
Fix binary matching on floating point middle-endian machines
Fix erlang:phash2() on floating point middle-endian machines
Fix external term format BIFs on floating point middle-endian machines
|
|
* rickard/info/OTP-11196:
Add test cases for native atomics and jump table
Refuse to build SMP runtime by default without native atomics
Make information about use of jump table available via system_info BIF
Make ethread library information available via system_info BIF
Make emulator arguments available via the system_info BIF
|
|
erlang:system_info(beam_jump_table)
|
|
erlang:system_info(ethread_info)
|
|
erlang:system_info(emu_args)
|
|
* sverk/aoffcbf:
erts: Make aoffcbf default when migration is enabled
erts: Add new allocator strategy aoffcbf
OTP-11174
|
|
|
|
with better performance than aoffcaobf as we don't have to rearrange
the search tree when there are blocks of equal size.
|
|
|
|
This complements 933e701 (OTP-10209). Without this patch the test cases
"in_guard/1" and "coerce_to_float/1" in bs_construct_SUITE fail.
The added lines in bs_construct_SUITE cover all branches that were not
covered before (small and big numbers if BIT_OFFSET(erts_bin_offset) != 0).
|
|
This complements 933e701 (OTP-10209). Without this patch the test case
"bs_match_misc_SUITE:t_float/1" fails.
Simple error example:
1> <<_,_,_,_,_,_,_,_>> = <<1.25/float>>.
<<63,244,0,0,0,0,0,0>>
2> <<1.25/float>> = <<63,244,0,0,0,0,0,0>>.
** exception error: no match of right hand side value <<63,244,0,0,0,0,0,0>>
The additional test case is added because in a former version of this
patch the ERTS_FP_ERROR_THOROUGH check for NaN/infinity was mistakenly
applied on the still word-switched double.
|
|
This complements 933e701 (OTP-10209). Without this patch the test case
"hash_SUITE:test_phash2/1" fails.
Simple error example:
1> 77147068 = erlang:phash2(1.0).
** exception error: no match of right hand side value 50524433
|
|
This complements 933e701 (OTP-10209).
Simple error example:
1> <<131,70,63,240,0,0,0,0,0,0>> = term_to_binary(1.0, [{minor_version,1}]).
** exception error: no match of right hand side value <<131,70,0,0,0,0,63,240,0,0>>
2> 1.0 = binary_to_term(<<131,70,63,240,0,0,0,0,0,0>>).
** exception error: no match of right hand side value 5.299808824e-315
But roundtrip always works:
3> 1.0 = binary_to_term(term_to_binary(1.0, [{minor_version,1}])).
1.0
|
|
|
|
* rickard/+sfwi/OTP-11164:
erts: Add the +sfwi system flag
|
|
+sfwi Interval
Set scheduler forced wakeup interval. All run queues will be scanned
each Interval milliseconds. While there are sleeping schedulers in
the system, one scheduler will be woken for each non-empty run queue
found. An Interval of zero disables this feature, which also is the
default.
This feature has been introduced as a temporary workaround for lengthy
executing native code, and native code that do not bump reductions
properly in OTP. When these bugs have be fixed the +sfwi flag will
be removed.
|
|
* pan/happi/yield_in_term_to_binary:
Add testcase to stress extra_root
term_to_binary: Remove debug code and set production trap levels
Teach erl_gc:offset_rootset about extra_root
Teach external.c to handle reallocs before compression
Make all steps ofterm_to_binary work in chunks and yield
Make term_to_binary yield (trap).
OTP-11163
|