Age | Commit message (Collapse) | Author |
|
Add initial support for dirty schedulers.
There are two types of dirty schedulers: CPU schedulers and I/O
schedulers. By default, there are as many dirty CPU schedulers as there are
normal schedulers and as many dirty CPU schedulers online as normal
schedulers online. There are 10 dirty I/O schedulers (similar to the choice
of 10 as the default for async threads).
By default, dirty schedulers are disabled and conditionally compiled
out. To enable them, you must pass --enable-dirty-schedulers to the
top-level configure script when building Erlang/OTP.
Current dirty scheduler support requires the emulator to be built with SMP
support. This restriction will be lifted in the future.
You can specify the number of dirty schedulers with the command-line
options +SDcpu (for dirty CPU schedulers) and +SDio (for dirty I/O
schedulers). The +SDcpu option is similar to the +S option in that it takes
two numbers separated by a colon: C1:C2, where C1 specifies the number of
dirty schedulers available and C2 specifies the number of dirty schedulers
online. The +SDPcpu option allows numbers of dirty CPU schedulers available
and dirty CPU schedulers online to be specified as percentages, similar to
the existing +SP option for normal schedulers. The number of dirty CPU
schedulers created and dirty CPU schedulers online may not exceed the
number of normal schedulers created and normal schedulers online,
respectively. The +SDio option takes only a single number specifying the
number of dirty I/O schedulers available and online. There is no support
yet for programmatically changing at run time the number of dirty CPU
schedulers online via erlang:system_flag/2. Also, changing the number of
normal schedulers online via erlang:system_flag(schedulers_online,
NewSchedulersOnline) should ensure that there are no more dirty CPU
schedulers than normal schedulers, but this is not yet implemented. You can
retrieve the number of dirty schedulers by passing dirty_cpu_schedulers,
dirty_cpu_schedulers_online, or dirty_io_schedulers to
erlang:system_info/1.
Currently only NIFs are able to access dirty scheduler
functionality. Neither drivers nor BIFs currently support dirty
schedulers. This restriction will be addressed in the future.
If dirty scheduler support is present in the runtime, the initial status
line Erlang prints before presenting its interactive prompt will include
the indicator "[ds:C1:C2:I]" where "ds" indicates "dirty schedulers", "C1"
indicates the number of dirty CPU schedulers available, "C2" indicates the
number of dirty CPU schedulers online, and "I" indicates the number of
dirty I/O schedulers.
Document The dirty NIF API in the erl_nif man page. The API closely follows
Rickard Green's presentation slides from his talk "Future Extensions to the
Native Interface", presented at the 2011 Erlang Factory held in the San
Francisco Bay Area. Rickard's slides are available online at
http://bit.ly/1m34UHB .
Document the new erl command-line options, the additions to
erlang:system_info/1, and also add the erlang:system_flag/2 dirty scheduler
documentation even though it's not yet implemented.
To determine whether the dirty NIF API is available, native code can check
to see whether the C preprocessor macro ERL_NIF_DIRTY_SCHEDULER_SUPPORT is
defined. To check if dirty schedulers are available at run time, native
code can call the boolean enif_have_dirty_schedulers() function, and Erlang
code can call erlang:system_info(dirty_cpu_schedulers), which raises
badarg if no dirty scheduler support is available.
Add a simple dirty NIF test to the emulator NIF suite.
|
|
* lukas/17/docfixes/OTP-11613:
17.0 anchor and broken links fixes
|
|
* rickard/load_balance/OTP-11385:
Fix usage of non-empty run-queue flag
|
|
|
|
|
|
* lukas/erts/sendfile_passive_mode_fix/OTP-11614:
erts: fix bug when using passive mode and sendfile
|
|
The bug incorrectly issued driver_select when un-ignoring an fd
for a socket in passive mode, which caused an incorrect error
tuple to be returned when the remote end closed the connection.
|
|
* lukas/17/docfixes/OTP-11613:
system: Fix documentation typoes
|
|
|
|
* dgud/wx/refactor-and-bugfixes/OTP-11586:
wx: Delay all deletes if recursed in event loop
wx: wx could hang if wxe_server died (or had died) when inside a callback
wx: Delay memory cleanup until safe
wx: Refactor C++ code
wx: Add init_dialog event
Update icons
wx: Update icons to plain old white ones
|
|
* anders/diameter/sctp_streams/OTP-11593:
Change interface for communicating outbound stream id to diameter_sctp
|
|
* anders/diameter/undefined_group/OTP-11561:
Ensure that Grouped AVP's are fully defined in dictionaries
Don't format diameter_make:codec/2 errors
Compiler suite fix
|
|
* bjorn/compiler/fix-crash/OTP-11610:
beam_except: Eliminate compiler crash
|
|
Code such as:
bar(X) ->
case {X+1} of
1 -> ok
end.
would crash the beam_except pass of the compiler.
The reason for the crash is that the '+' operator would add a line/1
instruction that the beam_except pass was not prepared to handle.
Reported-by: Erik Søe Sørensen
|
|
The module uses the transport_data field of record diameter_packet to
communicate the stream on which the an incoming message is received and
on which an outgoing message should be sent, the previous interface
being that both are communicated as a tuple of the form {stream, Id}.
However, since diameter retains the value of an incoming request's
transport_data unless the corresponding answer message specifies
otherwise, the behaviour in this case is to send an answer on the
outbound stream with the same identifier as the that of the inbound
stream on which the request was received. If the inbound stream id is
greater than or equal to the number of outbound streams then this is
guaranteed to fail, causing the transport process in question to
terminate. There is no relationship between inbound and outbound stream
identifiers so diameter_sctp's imposition of one is simply wrong.
Outbound stream ids are now communicated with a different tuple:
{outstream, Id}, interpreted modulo the number of outbound streams.
Thus, retention of an inbound request's transport_data has no effect on
the selection of an outbound stream.
The change in interface is not strictly backwards compatible because of
the new atom for the outbound stream. However, as there is currently no
documented way of obtaining the available number of outbound streams for
a peer connection, there is no way for a client to have known the range
of ids from which it could reliably have chosen with the previous
interface, so any setting of the outbound stream has probably been
unintentional. Not explicitly specifying an outbound stream now results
in a round-robin selection.
|
|
* andrewtj/atj-crypto-chiphertext-typo:
crypto: Fix 'ChipherText' typo in doc
OTP-11609
|
|
* oliv3/fix_valgrind_warning_in_gen_challenge:
(memcheck) Uninitialized structure in gen_challenge
OTP-11608
|
|
* blt/doc_language_improvement:
Clean up some awkward wording around the +spp flag.
OTP-11607
|
|
* zaa/docfix:
Typo fix
OTP-11606
|
|
The R16B03-1 release
|
|
* rickard/load_balance/OTP-11385:
Disable scheduler utilization balancing if +scl true is passed
|
|
|
|
|
|
Conflicts:
otp_build
|
|
* ia/ssl/secure-renegotiate/OTP-11595:
ssl: Incorrect inputed cipherlist lead server to think that the client did not support secure renegotiation
|
|
* rickard/load_balance/OTP-11385:
Add support for scheduler utilization balancing
|
|
Avoids crashes.
|
|
* rickard/default_acul/OTP-11604:
erts: Use "+Muacul de" as default
|
|
For more information see documentation of the new command line argument +sub
|
|
* lucafavatella/fix-doc-of-dbg-stop:
Correct doc of return value of dbg:{stop,stop_clear} functions
OTP-11603
|
|
* vinoski/system-flag-warn-msg:
fix system_flag deprecation warnings
OTP-11602
|
|
* vinoski/emacs-fixes:
fix emacs erlang skeleton indentation
fix indentation error from scan-sexp in erlang.el
prevent errors from erlang.el
fix erlang-mode erlang-get-function-arity
OTP-11601
|
|
The pid is not available via driver_caller(..) (see wxeCommand constr)
inside driver_monitor callback.
|
|
Previously we could do a cleanup while we where recursed down
and thus delete the objects we where invoking.
|
|
* bjorn/erts/zlib-1.2.8:
configure: Prefer the system's zlib over own our zlib source
Update preloaded modules
Add the 'rle' zstrategy
Don't make gzio.c dependent on the zutil.h header file
Update zlib to 1.2.8
erts/zlib: Remove unused file example.c
|
|
* bjorn/asn1/optimizations/OTP-11573:
Optimize code surrounding calls to complete/1
asn1ct_imm: Add the intermediate instruction {list,List,Dst}
Generate intermediate code that is easier to optimize
asn1ct_imm: Add the {set,{var,Src},{var,Dst}} instruction
Keep type information in the apply intermediate instruction
asn1ct_imm: Add a field for intermediate code for call_gen
Introduce asn1ct_gen:open_output_file/1
Factor out printing of verbose messages
Improve optimization of alignment for encoding
Improve construction of {cons,H,T} instructions
Teach asn1ct_func:call_gen/4 to quote the generated function name
Test open types that may need more than 128 bytes
|
|
did not support secure renegotiation
|
|
vinoski/emacs-fixes
|
|
vinoski/emacs-fixes
|
|
vinoski/emacs-fixes
|
|
vinoski/emacs-fixes
|
|
* dgud/test_unicode/OTP-10877:
sasl test: Quote executable paths (can contain spaces)
rt_tools: Handle unicode chars in printouts
kernel: code_SUITE fix unicode option
Fix (unicode) debug info in test cases
stdlib: Fix format if module resides in a unicode directory
Fix testing with unicode paths
test_server: Fix ts write unicode in config files
|
|
|
|
|
|
|
|
|
|
|
|
* nox/fix-OTP-11506:
Smoke test erl_syntax:revert/1
Fix reverting of local implicit funs in erl_syntax
|
|
This tries to make bugs like 87156887b7d82a2db53f60441a4af87034cb8789 not
happen again.
The new test takes each file in the stdlib app, passes their forms through the
erl_syntax representation, reverts them and compiles them.
|
|
This partially reverts 290dc2b08a2f92157ac5358fba815f4dbb32f8f2 in which
implicit funs were mistakenly thought to be using abstract terms for their name
and arity.
|