Age | Commit message (Collapse) | Author |
|
* sverker/doc-fixes/OTP-8880:
Documentation update to ETS and drivers
|
|
* sf/erts_de_busy_limit:
Add flag-based setting for the distribution buffer busy limit
|
|
Id: OTP-8912
This patch creates a new family of flags with the "+z" prefix. It
further creates a new configuration option called "dbbl" (which is the
first letter of the name dist_buf_busy_limit). Example usage of this
flag would be "+zdbbl 1048576".
This patch creates an adjustable buffer limit for the amount of data
that may be buffered by the erlang distribution code (in dist.c
specifically). Before this patch, this hard-coded constant was used:
#define ERTS_DE_BUSY_LIMIT (128*1024)
When large binaries are transmitted between nodes (or simply a lot of
medium-sized binaries), it is very easy to hit the old 128KB limit.
Processes that use the erlang:system_monitor() BIF to monitor system
events can be spammed by {monitor, busy_dist_port, ...} message tuples
at rates of tens to even hundreds of messages/second.
A larger buffer limit will allow processes to buffer more outgoing
messages over the distribution. When the buffer limit has been
reached, sending processes will be suspended until the buffer size has
shrunk. The buffer limit is per distribution channel. A higher limit
will give lower latency and higher throughput at the expense of
higher memory usage.
A variation of this patch has been in commercial production use in at
least two companies that the author is aware of. Larger buffer values
can reduce the number of {monitor, busy_dist_port, ...} system
messages drastically, lower overall messaging latencies, and prevent
false timeouts and 'nodedown' messages in extremely busy Mnesia systems.
Test suite: there are two tests:
a. In erlexec_SUITE.erl to test basic set & get of the value
b. In distribution_SUITE.erl, to verify that setting +zdbbl very
low will actually change behavior.
|
|
|
|
State more clearly that ETS functions will throw badarg if calling
process lacks access right. And that driver stop callback should free
memory allocted by start.
|
|
|
|
|
|
* pan/epmd-vulnerabilities/OTP-8780:
Teach testcases to survive TIME_WAIT overload
Update erl_interface doc and testsuite for epmd changes
Restore null termination of input buffer
Teach testcase epmd_SUITE:too_large to accept econnaborted
Teach epmd_cli.c to not respond 'Killed' when killing denied
Calculate minimal packet size for ALIVE2 requests correctly
Document epmd and it's options properly and fixup help text
Fix anomalies in epmd not yet reported as security issues
Remove two buffer overflow vulnerabilities in EPMD
Remove all support for ancient EPMD protocol
Remove very old protocol from EPMD
Conflicts:
lib/erl_interface/src/epmd/epmd_port.c
|
|
|
|
* cg/docs-fixes:
Linkify applications listed under "See Also"
Fix minor typos in the documentation
|
|
semanticts -> semantics
where -> were
ddl -> dll
NIF's -> NIFs
OS-dependant -> OS-dependent
|
|
|
|
Also made the SEEALSO link at the bottom of erl_nif.xml more "erlangish".
|
|
The scheduler wakeup threshold is now possible to adjust at system boot.
For more information see the `+swt' command line argument of `erl'.
|
|
Added erlang:system_info(build_type) which makes it
easier to chose drivers, NIF libraries, etc based
on build type of the runtime system.
|
|
|
|
ArgumentList -> Args
|
|
* sverker/NIF-64bit-integers/OTP-8746:
Make windows 64bit types be declared more consistently
Teach Windows about the int64 functions
NIF doc official support note
NIF 64-bit integer support
|
|
* rickard/cpu-info/OTP-8765:
Initialize environment functionality after thread lib
Fix faulty assertions
Implement automatic detection of CPU topology on Windows
Make it possible to reread and update detected CPU information
|
|
The CPU topology is now automatically detected on Windows
systems with less than 33 logical processors. The runtime system
will now, also on Windows, by default bind schedulers to logical
processors using the 'default_bind' bind type if the amount of
schedulers is at least equal to the amount of logical processors
configured, binding of schedulers is supported, and a CPU topology
is available at startup.
|
|
* bjorn/remove-elib_malloc/OTP-8764:
erts: Remove broken elib_malloc
erts: Remove the unused mem_drv driver
erts: Remove stray pre-ISO-C compatibility macros
erts: Remove unused decl.h
|
|
* hb/type_reference/OTP-8733:
reference() substituted for ref() in docs
|
|
Calling erlang:system_info/1 with the new argument 'update_cpu_info'
will make the runtime system reread and update the internally stored
CPU information. For more information see the documentation of
erlang:system_info(update_cpu_info).
|
|
elib_malloc is an alternate memory allocator that
is no longer possible to build.
|
|
* rickard/ethread-rewrite/OTP-8544:
Rewrite ethread library
|
|
Large parts of the ethread library have been rewritten. The
ethread library is an Erlang runtime system internal, portable
thread library used by the runtime system itself.
Most notable improvement is a reader optimized rwlock
implementation which dramatically improve the performance of
read-lock/read-unlock operations on multi processor systems by
avoiding ping-ponging of the rwlock cache lines. The reader
optimized rwlock implementation is used by miscellaneous
rwlocks in the runtime system that are known to be read-locked
frequently, and can be enabled on ETS tables by passing the
`{read_concurrency, true}' option upon table creation. See the
documentation of `ets:new/2' for more information.
The ethread library can now also use the libatomic_ops library
for atomic memory accesses. This makes it possible for the
Erlang runtime system to utilize optimized atomic operations
on more platforms than before. Use the
`--with-libatomic_ops=PATH' configure command line argument
when specifying where the libatomic_ops installation is
located. The libatomic_ops library can be downloaded from:
http://www.hpl.hp.com/research/linux/atomic_ops/
The changed API of the ethread library has also caused
modifications in the Erlang runtime system. Preparations for
the to come "delayed deallocation" feature has also been done
since it depends on the ethread library.
Note: When building for x86, the ethread library will now use
instructions that first appeared on the pentium 4 processor. If
you want the runtime system to be compatible with older
processors (back to 486) you need to pass the
`--enable-ethread-pre-pentium4-compatibility' configure command
line argument when configuring the system.
|
|
|
|
|
|
|
|
|
|
Final merge of all unexpected differences from dev to release.
|
|
A user defined CPU topology set via a call to <seealso
marker="erlang#system_flag_cpu_topology">erlang:system_flag(cpu_topology,
CPUTopology)</seealso> was not properly verified, and could in worst case
cause an emulator crash. The emulator crash could only occur when a user
defined CPU topology already existed and was redefined.
|
|
|
|
* pan/otp_8669_doc_autoimported:
Change documentation for erlang:min/2,max/2 and port_command/3 to
OTP-8669 erlang:min, erlang:max and erlang:port_command/3 autoimported
The recently added BIFs erlang:min/2, erlang:max/2 and
erlang:port_command/3 are now auto-imported (as they were originally
intended to be). Due to the recent compiler change (OTP-8579), the only
impact on old code defining it's own min/2, max/2 or port_command/3
functions will be a warning, the local functions will still be used. The
warning can be removed by using
-compile({no_auto_import,[min/2,max/2,port_command/3]}). in the source
file.
|
|
* commit 'bg/nif_error':
crypto: Add type specs for all documented functions
crypto: Use erlang:nif_error/1 to squelch false Dialyzer warnings
Add erlang:nif_error/1,2
|
|
reflect auto-import
|
|
Documented call time breakpoints in
- erlang:trace_pattern/3
- erlang:trace_info/2
|
|
The runtime system will by default bind schedulers to logical processors
using the default_bind bind type if the amount of schedulers are at least
equal to the amount of logical processors configured, binding of schedulers
is supported, and a CPU topology is available at startup.
NOTE: If the Erlang runtime system is the only operating system process
that binds threads to logical processors, this improves the performance of
the runtime system. However, if other operating system processes (as for
example another Erlang runtime system) also bind threads to logical
processors, there might be a performance penalty instead. If this is the
case you, are are advised to unbind the schedulers using the <seealso
marker="erl#+sbt">+sbtu</seealso> command line argument, or by invoking
<seealso
marker="erlang#system_flag_scheduler_bind_type">erlang:system_flag(schedule
r_bind_type, unbound)</seealso>.
|
|
New NIF features:
Send messages from a NIF, or from thread created by NIF, to any local
process (enif_send)
Store terms between NIF calls (enif_alloc_env, enif_make_copy)
Create binary terms with user defined memory management
(enif_make_resource_binary)
|
|
* pan/otp_8086_ms_grammar:
Add match_specification grammar documentation specifically for ets
OTP-8086 Grammar for match specification describes tracing only
The grammar for match specifications in ERTS users guide only described the
tracing dialect of match specifications. An informal grammar for the ETS
dialect is added.
|
|
* jv/autoimport-binary_to_term_2:
Change binary_to_term/2 to be auto-imported
OTP-8671 jv/autoimport-binary_to_term_2
Now, binary_to_term/2 is auto-imported. This will cause a compile warning
if and only if a module has got a local function with that name.
|
|
|
|
A stub function that is supposed to be replaced by a NIF usually
calls erlang:error/1 to cause an exception if the NIF library
is not loaded. For example:
foo() ->
erlang:error(nif_not_loaded).
The problem is that although erlang:error/1 will normally never be
called, Dialyzer will think that any call to the function will fail
and thus generate false warnings. Adding a spec for the function
will not help because Dialyzer will not believe the spec.
Add erlang:nif_error/1,2 that work exactly like erlang:error/1,2.
Define the return types for both BIFs to be t_any().
erlang:nif_error is used like this:
-spec foo() -> binary().
foo() ->
erlang:nif_error(nif_not_loaded).
(The -spec is optional but highly recommended, since Dialyzer
otherwise has no chance to figure out the types.)
|
|
Add new NIF API functions
- enif_make_atom_len
- enif_make_existing_atom_len
- enif_make_string_len
These are basically the same as enif_make_atom,
enif_make_existing_atom and enif_make_string except that the
new functions require a length parameter instead of a
null-terminated C-string.
Signed-off-by: Tuncer Ayaz <[email protected]>
|
|
Add new NIF API functions
- enif_get_atom_length
- enif_get_list_length
Signed-off-by: Tuncer Ayaz <[email protected]>
|
|
Add new NIF API functions
- enif_is_list
- enif_is_tuple
Signed-off-by: Tuncer Ayaz <[email protected]>
|
|
While binary_to_term/2 was added in R13B04, it wasn't auto-imported. This
conformed to longstanding policy of not changing auto-imports between major
versions. This patch contains changes to auto-import binary_to_term/2 to
coincide with the release of R14.
|
|
Signed-off-by: Tuncer Ayaz <[email protected]>
|
|
Correct behaviour of copy/2 witn 0 copies.
|
|
Reported by Uwe Dauernheim.
|