From 6e51c6d19612d03abc81b86bb70b8d7da678ce5d Mon Sep 17 00:00:00 2001 From: Erlang/OTP Date: Tue, 21 Jun 2016 15:12:41 +0200 Subject: Prepare release --- erts/doc/src/notes.xml | 736 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 736 insertions(+) (limited to 'erts') diff --git a/erts/doc/src/notes.xml b/erts/doc/src/notes.xml index 7501ccd9ce..3c3129d543 100644 --- a/erts/doc/src/notes.xml +++ b/erts/doc/src/notes.xml @@ -32,6 +32,742 @@

This document describes the changes made to the ERTS application.

+
Erts 8.0 + +
Fixed Bugs and Malfunctions + + +

The handling of on_load functions has been + improved. The major improvement is that if a code upgrade + fails because the on_load function fails, the + previous version of the module will now be retained.

+

+ Own Id: OTP-12593

+
+ +

is_builtin(erlang, apply, 3) will now return + true.

+

+ Own Id: OTP-13034

+
+ +

+ Fix enif_get_list_length to return false if list + is improper or have length larger than UINT_MAX + (did return true and an incorrect length value).

+

+ Own Id: OTP-13288 Aux Id: PR913

+
+ +

+ Cleanup hipe signal handling code for x86 and make it + more portable.

+

+ Own Id: OTP-13341 Aux Id: PR951

+
+ +

+ Make file:datasync use fsync instead of fdatasync on Mac + OSX.

+

+ Own Id: OTP-13411

+
+ +

+ Make sure to create a crash dump when running out of + memory. This was accidentally removed in the erts-7.3 + release.

+

+ Own Id: OTP-13419

+
+ +

+ A bug has been fixed where if erlang was started +B on a + unix platform it would be killed by a SIGUSR2 signal when + creating a crash dump.

+

+ Own Id: OTP-13425

+
+ +

+ Fix race between process_flag(trap_exit,true) and + a received exit signal.

+

+ A process could terminate due to exit signal even though + process_flag(trap_exit,true) had returned. A very + specific timing between call to process_flag/2 and + exit signal from another scheduler was required for this + to happen.

+

+ Own Id: OTP-13452

+
+ +

Don't search for non-existing Map keys twice

+

For maps:get/2,3 and maps:find/2, + searching for an immediate key, e.g. an atom, in a small + map, the search was performed twice if the key did not + exist.

+

+ Own Id: OTP-13459

+
+ +

+ When an abnormally large distribution message is about to + be sent, the VM has been changed to create a crash dump + instead of a core dump.

+

+ Own Id: OTP-13474

+
+ +

+ Fix erlang:process_info/2 type specification

+

+ Own Id: OTP-13485 Aux Id: ERL-123

+
+ +

+ Fix bug in open_port/2 with option {args, + List}. A vm crash could be caused by an improper + List.

+

+ Own Id: OTP-13489 Aux Id: ERL-127

+
+ +

+ Fixed a race-condition bug where the emulator could crash + when erlang:system_profile/1,2 was enabled and a + process had to be re-scheduled during termination.

+

+ Own Id: OTP-13494 Aux Id: ERL-126

+
+ +

+ Fixed bugs where the reduction counter was not handled + correct.

+

+ Own Id: OTP-13512

+
+ +

+ Fixed typo in description of the EPMD_DUMP_REQ + response.

+

+ Own Id: OTP-13517

+
+ +

+ Fixed a bug where a process flagged as sensitive would + sometimes record its save_calls when it shouldn't.

+

+ Own Id: OTP-13540

+
+ +

+ Update configure scripts to not use hard-coded path for + /bin/pwd and /bin/rm.

+

+ Own Id: OTP-13562

+
+ +

+ When passing a larger binary than the outputv callback of + a linked-in driver can handle in one io vector slot, the + binary is now split into multiple slots in the io vector. + This change only effects system where the max size of an + io vector slot is smaller then the word size of the + system (e.g. Windows).

+

+ This change means that it is now possible on Windows to + send binaries that are larger than 4GB to port_command, + which is what is used for file:write, gen_tcp:send etc.

+

+ Own Id: OTP-13628

+
+ +

+ Workaround of Maps output in crashdumps. Currently the + atom 'undefined' is generated instead of Map data if a + Map type is encountered during crash.

+

+ Own Id: OTP-13657

+
+
+
+ + +
Improvements and New Features + + +

+ The tracing support has been extended to allow a tracer module to be the + trace event handler instead of a process or port. The + tracer module + makes it possible for trace tools to filter or manipulate + trace event data without the trace event first having to + be copied from the traced process or port.

+

+ With the introduction of this feature, + erlang:trace(all|existing, _, _) now also returns + the tracer process as part of the number of processes on + which tracing is enabled. The is incompatible with the + previous releases.

+

+ *** POTENTIAL INCOMPATIBILITY ***

+

+ Own Id: OTP-10267

+
+ +

+ Introduce LTTng tracing of Erlang Runtime System

+

+ For LTTng to be enabled OTP needs to be built with + configure option --with-dynamic-trace=lttng.

+

+ This feature introduces tracepoints for schedulers, + drivers, memory carriers, memory and async thread pool.

+

For a list of all tracepoints, see Runtime Tools User's + Guide .

+

+ Own Id: OTP-10282

+
+ +

+ Make it possible to monitor/demonitor ports using the + erlang:monitor/2 API. + The process and port information functions have also been + updated to include information about monitors from + processes to ports.

+

+ Own Id: OTP-11384

+
+ +

+ Add microstate accounting

+

+ Microstate accounting is a way to track which state the + different threads within ERTS are in. The main usage area + is to pin point performance bottlenecks by checking which + states the threads are in and then from there figuring + out why and where to optimize.

+

+ Since checking whether microstate accounting is on or off + is relatively expensive only a few of the states are + enabled by default and more states can be enabled through + configure.

+

+ There is a convenience module called msacc that has been + added to runtime_tools that can assist in gathering and + interpreting the data from Microstate accounting.

+

+ For more information see erlang:statistics(microstate_accounting, + _) and the msacc module in + runtime_tools.

+

+ Own Id: OTP-12345

+
+ +

+ The port of Erlang/OTP to the real-time operating system + OSE has been removed.

+

+ Own Id: OTP-12573

+
+ +

+ Sharing preserved copy for messages and exit signals

+

+ Enable sharing preserved copy with configure option + --enable-sharing-preserving. This will preserve + sharing, within the process, when communication with + other processes in the Erlang node. There is a trade-off, + the copy is more costly but this cost can be reclaimed if + there is a lot of sharing in the message. In addition + literals will not be copied in a send except during a + purge phase of the module where the literals are located. + This feature is considered experimental in 19.0.

+

+ Own Id: OTP-12590 Aux Id: OTP-10251

+
+ +

+ Halfword BEAM has been removed.

+

+ Own Id: OTP-12883

+
+ +

+ Added os:perf_counter/1.

+

+ The perf_counter is a very very cheap and high resolution + timer that can be used to timestamp system events. It + does not have monoticity guarantees, but should on most + OS's expose a monotonous time.

+

+ Own Id: OTP-12908

+
+ +

+ Support for a fragmented young heap generation. That is, + the young heap generation can consist of multiple non + continuous memory areas. The main reason for this change + is to avoid extra copying of messages that could not be + allocated directly on the receivers heap.

+

+ Own Id: OTP-13047

+
+ +

+ Erlang linked-in driver can now force the call to + open_port to block until a call to erl_drv_init_ack is + made inside the driver. This is useful when you want to + do some asynchronous initialization, for example getting + configuration from a pipe, and you want the initial + open_port call to fail if the configuration is incomplete + or wrong. See the erl_driver documentation for more + details on the API.

+

+ Own Id: OTP-13086

+
+ +

+ Erlang linked-in drivers can now set their own pids as + seen in erlang:port_info/1 by using the + erl_drv_set_pid function. For more details see the + erl_driver documentation.

+

+ Own Id: OTP-13087

+
+ +

+ The functionality behind erlang:open_port/2 when + called with spawn or spawn_executable has been redone so + that the forking of the new program is done in a separate + process called erl_child_setup. This allows for a much + more robust implementation that uses less memory and does + not block the entire emulator if the program to be + started is on an un-accessible NFS. Benchmarks have shown + this approach to be about 3-5 times as fast as the old + approach where the fork/vfork was done by erts. This is a + pure stability and performance fix, however some error + messages may have changed, which is why it is marked as a + backwards incompatible change.

+

+ *** POTENTIAL INCOMPATIBILITY ***

+

+ Own Id: OTP-13088

+
+ +

Improved yielding strategy in the implementation of + the following native functions:

+ erlang:binary_to_list/1 + erlang:binary_to_list/3 + erlang:bitstring_to_list/1 + erlang:list_to_binary/1 + erlang:iolist_to_binary/1 + erlang:list_to_bitstring/1 + binary:list_to_bin/1

This + in order to improve performance of these functions.

+

+ Own Id: OTP-13096

+
+ +

+ All garbage collections of processes now bump reductions. + Also the amount of reductions bumped when garbage + collecting has been adjusted. It now better corresponds + to the amount of work performed. This in order to improve + the real time characteristics of the system.

+

+ Own Id: OTP-13097

+
+ +

New functions that can load multiple modules at once + have been added to the 'code' module. The + functions are code:atomic_load/1, + code:prepare_loading/1, + code:finish_loading/1, and + code:ensure_modules_loaded/1.

+

+ Own Id: OTP-13111

+
+ +

The -boot_var option for erl now only + supports a single key and single value (as documented). + The option used to allow multiple key/value pairs, but + that behavior was undocumented.

+

The function erl_prim_loader:start/3 has been + removed. Its documentation has also been removed.

+

The undocumented and unsupported function + erl_prim_loader:get_files/2 has been removed.

+

+ Own Id: OTP-13112

+
+ +

+ Low level BIF erlang:purge_module/1 is made more + robust against incorrect use. Lingering processes that + still refer the old code are now killed before the module + is purged to prevent fatal VM behavior.

+

+ Own Id: OTP-13122

+
+ +

Improved dirty scheduler implementation. For more + information see the NIF + documentation.

The + dirty scheduler support is still + experimental.

The support + for determining whether dirty NIF support exist or not at + compile time using the C preprocessor macro + ERL_NIF_DIRTY_SCHEDULER_SUPPORT has been + removed.

The + enif_is_on_dirty_scheduler() function has been + removed. Use enif_thread_type() + instead.

+

+ Own Id: OTP-13123

+
+ +

+ Various optimizations done to process dictionary access.

+

+ Own Id: OTP-13167

+
+ +

+ Added max_heap_size process flag. max_heap_size allows + the user to limit the maximum heap used by a process. See + erlang:process_flag + for more details.

+

+ Own Id: OTP-13174

+
+ +

+ Allow dynamic drivers and NIF libraries to be built with + gcc option -fvisibility=hidden for faster loading + and more optimized code.

+

+ Own Id: OTP-13227

+
+ +

+ Add erlang:process_info(Pid, + garbage_collection_info) which returns extended + garbage_collection information. For more details see the + documentation.

+

+ Own Id: OTP-13265

+
+ +

+ The functions erlang:list_to_integer/1 and + string:to_integer/1 have been optimized for large + inputs.

+

+ Own Id: OTP-13293

+
+ +

+ Improved memory allocation strategy for hipe native code + on x86_64 (amd64) architectures by reserving enough low + virtual address space needed for the HiPE/AMD64 small + code model. The default virtual address area for hipe + code is set to 512Mb, but can be changed with emulator + flag +MXscs.

+

+ Own Id: OTP-13359

+
+ +

+ Introduction of configurable management of data referred + to by the message queue of a process. Each process can be + configured individually.

+

+ It is now possible to configure the message queue of a + process, so that all data referred by it will be kept + outside of the heap, and by this prevent this data from + being part of garbage collections.

+

+ For more information see the documentation of process_flag(message_queue_data, + MQD).

+

+ Own Id: OTP-13366 Aux Id: OTP-13047

+
+ +

+ Processes now yield when scanning large message queues + and not finding a matching message. This in order to + improve real time characteristics.

+

+ Own Id: OTP-13401

+
+ +

+ Optimized an erts internal function that is used to + traverse erlang terms. The internal function was mainly + used by term_to_binary and comparison of terms. + Benchmarks have shown up to a 10% performance increase in + those functions after the optimization.

+

+ Own Id: OTP-13440

+
+ +

+ Add the following NIF API functions:

+

+ enif_cpu_time + enif_now_time + enif_make_unique_integer + enif_is_process_alive + enif_is_port_alive + enif_term_to_binary + enif_binary_to_term + enif_port_command +

+

+ for details of what each function does, see the erl_nif + documentation.

+

+ Own Id: OTP-13442

+
+ +

+ Optimize '++' operator and lists:append/2 + by using a single pass to build a new list while checking + for properness.

+

+ Own Id: OTP-13487

+
+ +

+ Handle terms (pids,ports and refs) from nodes with a + 'creation' value larger than 3. This is a preparation of + the distribution protocol to allow OTP 19 nodes to + correctly communicate with future nodes (20 or higher). + The 'creation' value differentiates different + incarnations of the same node (name).

+

+ Own Id: OTP-13488

+
+ +

+ Don't send unasked for systemd notifications in epmd

+

+ Own Id: OTP-13493 Aux Id: PR-999

+
+ +

+ The enif_send API has been extended to allow NULL to be + used as the message environment. When used this way, a + message environment is implicitly created and the given + term is copied into that environment before sending. This + can be an optimization if many small messages are being + sent by the nif.

+

+ Own Id: OTP-13495

+
+ +

+ The tracing support has been extended to allow tracing on + ports. Ports can be traced on using the 'ports', 'send' + and 'receive' trace flags.

+

+ The first argument of erlang:trace/3 has + been extended so that 'all', 'existing' and + 'new' now include both processes and ports. New + Tracee variants, 'all_processes', + 'all_ports', 'existing_processes' etc have + been added to specify only processes or ports.

+

+ *** POTENTIAL INCOMPATIBILITY ***

+

+ Own Id: OTP-13496

+
+ +

+ When the 'procs' trace flag is enabled, a + 'spawned' trace event is now also generated by a + newly created process. The previous event 'spawn' + remains, but as it is generated by the process that did + the spawn, it is not guaranteed that it is ordered with + other trace events from the newly spawned process. So + when tracking the lifetime of a process this new event + should be used as the creation event.

+

+ This new trace event is marked as an incompatibility + because tools that expect certain trace events when + enabling 'procs' will have to updated.

+

+ *** POTENTIAL INCOMPATIBILITY ***

+

+ Own Id: OTP-13497

+
+ +

+ Add the erlang:match_spec_test/3 + function. The functions allows the testing of match + specifications for both tracing and ets tables. It can be + used to test that a match specification does the expected + filtering on specific data. It also returns more verbose + error reasons for incorrectly constructed match + specifications.

+

+ Own Id: OTP-13501

+
+ +

+ The erts internal tracing support has been changed to + have much less overhead and be more scalable.

+

+ This rewrite does not break any backwards + incompatibilities, but it does change the ordering of + some trace messages when compared to previous releases. + It should be noted that this only applies to trace + messages sent to processes or ports, it does not apply to + the new tracer module. However in future releases they + may also be effected by this.

+

+ Trace messages are only guaranteed to be ordered from one + traced process or port. In previous releases this was not + visible as a 'send' trace message would always + arrive before the corresponding 'receive' trace + message that is no longer always the case. This also + means that timestamped trace messages may seem to arrive + out of order as the timestamp is taken when the event is + triggered and not when it is put in the queue of the + tracer.

+

+ Own Id: OTP-13503

+
+ +

+ Add possibility to filter send and receive + trace with match specifications.

+

+ Own Id: OTP-13507

+
+ +

+ Add maps:update_with/3,4 and maps:take/2

+

+ Own Id: OTP-13522 Aux Id: PR-1025

+
+ +

+ Introduce LTTng tracing via Erlang tracing.

+

+ For LTTng to be enabled OTP needs to be built with + configure option --with-dynamic-trace=lttng.

+

The dynamic trace module dyntrace is now + capable to be used as a LTTng sink for Erlang tracing. + For a list of all tracepoints, see Runtime Tools User's + Guide .

+

This feature also introduces an incompatible change in + trace tags. The trace tags gc_start and + gc_end has been split into gc_minor_start, + gc_minor_end and gc_major_start, + gc_major_end.

+

+ *** POTENTIAL INCOMPATIBILITY ***

+

+ Own Id: OTP-13532

+
+ +

+ Print heap pointers for garbing processes during + crashdump

+

+ Own Id: OTP-13541 Aux Id: PR-1026

+
+ +

+ Changed and improved low level memory statistics returned + by erlang:system_info/1. The info for + erts_mmap has been moved from mseg_alloc to + its own section returned by {allocator, + erts_mmap}.

+

+ Own Id: OTP-13560

+
+ +

+ Add enif_snprintf to the NIF API

+

+ The function enif_snprintf is similar to + snprintf call but can handle formatting of Erlang + terms via %T format specifier.

+

+ Own Id: OTP-13580

+
+ +

The warning in the documentation for + erlang:raise/3 has been removed. It is now + officially perfectly fine to use raise/3 in production + code.

+

+ Own Id: OTP-13599

+
+ +

+ Fix bugs caused by the VM sometimes truncating object + sizes or offsets to 32 bits on 64-bit hosts. These bugs + were mainly found when working with large unicode strings + and nifs environments.

+

+ Own Id: OTP-13606

+
+ +

+ Add -start_epmd command line option, this lets you + disable automatic starting of epmd when starting a + distributed node.

+

+ Add -epmd_module command line option, this lets + you specify a module to register and look-up node names + in. The default module is erl_epmd.

+

+ Own Id: OTP-13627

+
+ +

+ erlang:halt now truncates strings longer than 200 + characters instead of failing with badarg.

+

+ Own Id: OTP-13630

+
+ +

+ Fix possible race in poller wake up on windows

+

+ Own Id: OTP-13634

+
+
+
+ +
+
Erts 7.3.1
Fixed Bugs and Malfunctions -- cgit v1.2.3