aboutsummaryrefslogtreecommitdiffstats
path: root/erts/doc/src/notes.xml
diff options
context:
space:
mode:
Diffstat (limited to 'erts/doc/src/notes.xml')
-rw-r--r--erts/doc/src/notes.xml1288
1 files changed, 1278 insertions, 10 deletions
diff --git a/erts/doc/src/notes.xml b/erts/doc/src/notes.xml
index 1099d76545..f94d71ee3d 100644
--- a/erts/doc/src/notes.xml
+++ b/erts/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2012</year>
+ <year>2004</year><year>2013</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -30,21 +30,1289 @@
</header>
<p>This document describes the changes made to the ERTS application.</p>
-<section><title>Erts 5.9.3.2</title>
+<section><title>Erts 5.10.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ A bug in prim_inet has been corrected. If the port owner
+ was killed at a bad time while closing the socket port
+ the port could become orphaned hence causing port and
+ socket leaking. Reported by Fred Herbert, Dmitry Belyaev
+ and others.</p>
+ <p>
+ Own Id: OTP-10497 Aux Id: OTP-10562 </p>
+ </item>
+ <item>
+ <p>
+ Compilation fixes for NetBSD. Thanks to YAMAMOTO Takashi.</p>
+ <p>
+ Own Id: OTP-10941</p>
+ </item>
+ <item>
+ <p>
+ Fixed a race condition when using delayed_write when
+ writing to a file which would cause the same data to be
+ written multiple times.</p>
+ <p>
+ Own Id: OTP-10984</p>
+ </item>
+ <item>
+ <p>
+ Fix small memory leak from tracing with option
+ <c>meta</c>.</p>
+ <p>
+ Own Id: OTP-10997</p>
+ </item>
+ <item>
+ <p>
+ Correct typo in erlsrv usage. Thanks to Bryan Hunter</p>
+ <p>
+ Own Id: OTP-11002</p>
+ </item>
+ <item>
+ <p>
+ ct_run: delete unused function. Thanks to Tuncer Ayaz.</p>
+ <p>
+ Own Id: OTP-11003</p>
+ </item>
+ <item>
+ <p>
+ Corrections to run_erl/to_erl handshake behaviour.</p>
+ <p>
+ Own Id: OTP-11012</p>
+ </item>
+ <item>
+ <p>
+ Fix typo in type: erlang:process_info_item(). Thanks to
+ Andrew Tunnell-Jones.</p>
+ <p>
+ Own Id: OTP-11024</p>
+ </item>
+ <item>
+ <p>
+ Fix src/dest overlap issue in ttsl driver. Thanks to
+ Steve Vinoski.</p>
+ <p>
+ Own Id: OTP-11064</p>
+ </item>
+ <item>
+ <p>
+ When sending to a port using <c>erlang:send(Port, Msg,
+ [nosuspend])</c>, the send operation was performed
+ synchronously. This bug has now been fixed.</p>
+ <p>
+ Own Id: OTP-11076 Aux Id: OTP-10336 </p>
+ </item>
+ <item>
+ <p>
+ When converting a faulty binary to a list with
+ unicode:characters_to_list, the error return value could
+ contain a faulty "rest", i.e. the io_list of characters
+ that could not be converted was wrong. This happened only
+ if input was a sub binary and conversion was from utf8.
+ This is now corrected.</p>
+ <p>
+ Own Id: OTP-11080</p>
+ </item>
+ <item>
+ <p>
+ Runtime system could crash when reporting stale
+ <c>driver_select()</c>.</p>
+ <p>
+ Own Id: OTP-11084</p>
+ </item>
+ <item>
+ <p>
+ Fix lock order violation for memory instrumentation
+ (+Mim, +Mis, +Mit).</p>
+ <p>
+ Own Id: OTP-11085</p>
+ </item>
+ <item>
+ <p>
+ Fixed some compilation warnings on miscellaneous
+ platforms. Thanks to Anthony Ramine.</p>
+ <p>
+ Own Id: OTP-11086</p>
+ </item>
+ <item>
+ <p>
+ Fixed issue when flushing i/o during shutdown on windows
+ where the Erlang VM would sometime hang due to a race
+ condition.</p>
+ <p>
+ Own Id: OTP-11096</p>
+ </item>
+ <item>
+ <p>
+ Fixed issue where repeated calls to erlang:nodes() could
+ cause unnecessary contention in the dist_table lock.</p>
+ <p>
+ Own Id: OTP-11097</p>
+ </item>
+ <item>
+ <p>
+ Properly guard WIDE_TAG use with HAVE_WCWIDTH in
+ ttsl_drv. Thanks to Anthony Ramine</p>
+ <p>
+ Own Id: OTP-11106</p>
+ </item>
+ <item>
+ <p>
+ Fix some Makefile rules that didn't support silent rules.
+ Thanks to Anthony Ramine.</p>
+ <p>
+ Own Id: OTP-11111</p>
+ </item>
+ <item>
+ <p>
+ Fix receive support in erl_eval with a BEAM module.
+ Thanks to Anthony Ramine.</p>
+ <p>
+ Own Id: OTP-11137</p>
+ </item>
+ <item>
+ <p>
+ erlang:now() could suddenly jump ~24 days into the future
+ on Windows. This is now corrected. Thanks to Garret Smith
+ for reporting and testing fixes.</p>
+ <p>
+ Own Id: OTP-11146</p>
+ </item>
+ <item>
+ <p>
+ erlang:term_to_binary will now cost an appropriate amount
+ of reductions and will interrupt (yield) for reschedule
+ if the term is big. This avoids too long schedules when
+ term_to_binary is used. </p>
+ <p>
+ Impact: Programs running term_to_binary on large terms
+ will run more smothly, but rescheduling will impact the
+ single process performance of the BIF. Single threaded
+ benchmarks will show degraded performance of the BIF when
+ called with very large terms, while general system
+ behaviour will be improved. The overhead for allowing
+ restart and reduction counting also degrades local
+ performance of the BIF with between 5% and 10% even for
+ small terms.</p>
+ <p>
+ Own Id: OTP-11163</p>
+ </item>
+ </list>
+ </section>
+
<section><title>Improvements and New Features</title>
<list>
<item>
<p>
- A new option to erlang:system_monitor,
- {long_schedule,Millis} allows you to monitor if your
- system performs any lengthy NIF, BIF or driver operations
- that might result in bad resource utilization and
- therefore bad performance. To better test this
- functionality, the test_server has been updated to
- include configure tests for usleep.</p>
+ Replaced the lock protecting gathering of garbage
+ collection statistics with a lock-free solution.</p>
+ <p>
+ Own Id: OTP-10271 Aux Id: kunagi-108
+ [04c5410f-9cc4-4696-8639-36bf98686c7a-7] </p>
+ </item>
+ <item>
+ <p>Support for migration of memory carriers between
+ memory allocator instances has been introduced.</p>
+ <p>By default this feature is not enabled and do not
+ effect the characteristics of the system. When enabled it
+ has the following impact on the characteristics of the
+ system:</p> <list> <item>Reduced memory footprint when
+ the memory load is unevenly distributed between scheduler
+ specific allocator instances.</item> <item>Depending on
+ the default allocaton strategy used on a specific
+ allocator there might or might not be a slight
+ performance loss.</item> <item>When enabled on the
+ <c>fix_alloc</c> allocator, a different strategy for
+ management of fix blocks will be used.</item> <item>The
+ information returned from <seealso
+ marker="erlang:system_info_allocator_tuple"><c>erlang:system_info({allocator,
+ A})</c></seealso>, and <seealso
+ marker="erlang:system_info_allocator_sizes"><c>erlang:system_info({allocator_sizes,
+ A})</c></seealso> will be slightly different when this
+ feature has been enabled. An <c>mbcs_pool</c> tuple will
+ be present giving information about abandoned carriers,
+ and in the <c>fix_alloc</c> case no <c>fix_types</c>
+ tuple will be present. </item></list>
+ <p>For more information, see the documentation of the
+ <seealso
+ marker="erts_alloc#M_acul"><c>+M&lt;S&gt;acul</c></seealso>
+ command line argument.</p>
+ <p>
+ Own Id: OTP-10279</p>
+ </item>
+ <item>
+ <p>
+ Change specs for spawn_opt to use the process_level()
+ type declaration instead of re-defining it in various
+ places. Thanks to Kostis Sagonas.</p>
+ <p>
+ Own Id: OTP-11008</p>
+ </item>
+ <item>
+ <p> Postscript files no longer needed for the generation
+ of PDF files have been removed. </p>
+ <p>
+ Own Id: OTP-11016</p>
+ </item>
+ <item>
+ <p>Erlang source files with non-ASCII characters are now
+ encoded in UTF-8 (instead of latin1).</p>
+ <p>
+ Own Id: OTP-11041 Aux Id: OTP-10907 </p>
+ </item>
+ <item>
+ <p>
+ Optimization of simultaneous <c>inet_db</c> operations on
+ the same socket by using a lock free implementation.</p>
+ <p>
+ Impact on the characteristics of the system: Improved
+ performance.</p>
+ <p>
+ Own Id: OTP-11074</p>
+ </item>
+ <item>
+ <p>
+ The <c>high_msgq_watermark</c> and
+ <c>low_msgq_watermark</c> <c>inet</c> socket options
+ introduced in OTP-R16A could only be set on TCP sockets.
+ These options are now generic and can be set on all types
+ of sockets.</p>
+ <p>
+ Own Id: OTP-11075 Aux Id: OTP-10336 </p>
+ </item>
+ <item>
+ <p>A new better algorithm for management of the process,
+ and port tables has been introduced.</p>
+ <p>Impact on the characteristics of the system:</p>
+ <list> <item>The new algorithm ensures that both insert
+ and delete operations can be made in O(1) time
+ complexity. Previously used algorithm either caused
+ insert or delete to be O(N).</item> <item>The new
+ algorithm will also ensure that reuse of identifiers will
+ be less frequent than when the old algorithm was
+ used.</item> <item>Previously used algorithm ensured that
+ the latest created identifier compared as the largest
+ when comparing two identifiers of the same type that had
+ been created on the same node as long as no identifiers
+ had been reused. Since identifiers can be reused quite
+ fast, one has never been able to rely on this property.
+ Due to the introduction of this new algorithm this
+ property will not hold even if no identifiers has been
+ reused yet. This could be considered as an
+ incompatibility.</item> </list>
+ <p>Due to the above mensioned potential incompatibility,
+ it will still be possible to enable the old algorithm for
+ some time. The command line argument <seealso
+ marker="erl#+P"><c>+P legacy</c></seealso> will enable
+ the old algorithm on the process table, and <seealso
+ marker="erl#+Q"><c>+Q legacy</c></seealso> will do the
+ same for the port table. These command line arguments are
+ however deprecated as of their introduction and have been
+ scheduled for removal in OTP-R18.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-11077</p>
+ </item>
+ <item>
+ <p>
+ Support wide characters in the shell through wcwidth().
+ Thanks to Anthony Ramine. Reported by Lo�c Hoguin.</p>
+ <p>
+ Own Id: OTP-11088</p>
+ </item>
+ <item>
+ <p>
+ Added total used memory for each process in erlang crash
+ dumps.</p>
+ <p>
+ Own Id: OTP-11098</p>
+ </item>
+ <item>
+ <p>
+ Added support for hipe on Raspberry Pi (armv6l). Thanks
+ to Klaus Alfert.</p>
+ <p>
+ Own Id: OTP-11125</p>
+ </item>
+ <item>
+ <p>
+ Remove 'query' from the list of reserved words in docs.
+ Thanks to Matthias Endler and Lo�c Hoguin.</p>
+ <p>
+ Own Id: OTP-11158</p>
+ </item>
+ <item>
+ <p>
+ Lift static limitation (FD_SETSIZE) for file descriptors
+ on Mac OS X. (Thanks to Anthony Ramine)</p>
+ <p>
+ Own Id: OTP-11159</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Known Bugs and Problems</title>
+ <list>
+ <item>
+ <p>Miscellaneous native code in OTP misbehave either due
+ to lengthy execution, or due to not bumping reductions
+ properly. Problems typically occur when passing huge sets
+ of data to a misbehaving BIF. Fixing this has high
+ priority and is being worked on, but there will remain
+ issues like this for some time.</p>
+ <p>In order to alleviate problems with scheduling which
+ might occur when executing misbehaving native code, the
+ command line argument <seealso
+ marker="erl#+sfwi">+sfwi</seealso> has been
+ introduced.</p>
+ <p>By default this feature is disabled and you are
+ advised not to enable it if you do not encounter problems
+ with misbehaving native code.</p>
+ <p>When enabled it has the following impact on the
+ characteristics of the system:</p> <list> <item>Work will
+ always be distributed between schedulers even when
+ executing misbehaving native code.</item> <item>It may
+ cause an increased amount of processes and/or ports
+ bouncing between schedulers which in turn will cause a
+ performance loss.</item> <item>It may cause reduced
+ performance due to reduced or lost work compaction when
+ all schedulers do not execute under full load.</item>
+ <item>An increased contention on run queue locks.</item>
+ </list>
+ <p>
+ Own Id: OTP-11164</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.10.1.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ A bug in the implementation of offline schedulers has
+ been fixed. The bug was introduced in OTP-R16A/ERTS-5.10,
+ and caused work-stealing between schedulers to fail. This
+ in turn, caused work to accumulate in some run-queues.
+ The bug was only triggered when there were offline
+ schedulers in the system, i.e., when the amount of online
+ schedulers was less than the total amount of schedulers.
+ The effect of the bug got more severe the larger amount
+ of offline schedulers the system had.</p>
+ <p>
+ Own Id: OTP-11022 Aux Id: OTP-9892 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.10.1.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The BIF <seealso
+ marker="erlang#is_process_alive/1"><c>is_process_alive/1</c></seealso>
+ could prematurely return <c>false</c> while the process
+ being inspected was terminating. This bug was introduced
+ in ERTS-5.10.</p>
+ <p>
+ Own Id: OTP-10926</p>
+ </item>
+ <item>
+ <p>Fix a problem in <c>erlang:delete_element/2</c> where
+ the call could corrupt one word of stack if the heap and
+ stack met during call.</p>
+ <p>
+ Own Id: OTP-10932</p>
+ </item>
+ <item>
+ <p>
+ The <seealso
+ marker="erl#+sws"><c>+sws&lt;value&gt;</c></seealso> and
+ <seealso
+ marker="erl#+swt"><c>+swt&lt;value&gt;</c></seealso>
+ system flags failed if no white space were passed between
+ the parameter and value parts of the flags. Upon failure,
+ the runtime system refused to start.</p>
+ <p>
+ Own Id: OTP-11000</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Scheduler threads will now by default be less eager
+ requesting wakeup due to certain cleanup operations. This
+ can also be controlled using the <seealso
+ marker="erl#+swct"><c>+swct</c></seealso> command line
+ argument of <seealso
+ marker="erl"><c>erl(1)</c></seealso>.</p>
+ <p>
+ Own Id: OTP-10994</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.10.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Threads created internally in the runtime system by
+ vanilla, fd, and spawn drivers on Windows systems could
+ make thread unsafe calls to <c>driver_select()</c>.</p>
+ <p>
+ Own Id: OTP-10802</p>
+ </item>
+ <item>
+ <p>
+ Threads created internally in the runtime system by the
+ vanilla, fd, and spawn drivers on Windows systems could
+ make unsafe memory accesses to driver data after port had
+ terminated.</p>
+ <p>
+ Own Id: OTP-10803</p>
+ </item>
+ <item>
+ <p>
+ The runtime system could crash when flushing data to
+ standard out or standard error on Windows.</p>
+ <p>
+ Own Id: OTP-10807</p>
+ </item>
+ <item>
+ <p>Bugs due to the port optimizations introduced in
+ erts-5.10/OTP-R16A have been fixed:</p> <list>
+ <item>Memory leak when terminating ports</item>
+ <item>Memory leak when reaching the system limit of
+ maximum amount of concurrently existing ports</item>
+ <item>Crashs due to missing, or late test of bad port
+ handle</item> <item>The newly introduced driver API
+ function <c>erl_drv_busy_msgq_limits()</c> could not be
+ used by dynamically linked in drivers on Windows</item>
+ </list>
+ <p>
+ Own Id: OTP-10809 Aux Id: OTP-10336 </p>
+ </item>
+ <item>
+ <p>
+ Fix <c>{packet,httph}</c> header capitalization for
+ unrecognized header fields longer than 20 charachters
+ such as <c>Sec-Websocket-Version</c>. The limit is simply
+ raised from 20 to 50 characters with the hope that valid
+ headers longer than 50 are not used.</p>
+ <p>
+ Own Id: OTP-10824</p>
+ </item>
+ <item>
+ <p>
+ Fix rounding issues in float_to_list/1,2. Thanks to Serge
+ Aleynikov</p>
+ <p>
+ Own Id: OTP-10837</p>
+ </item>
+ <item>
+ <p>
+ Fix memory leak in file driver introduced in R16A.</p>
+ <p>
+ Own Id: OTP-10841</p>
+ </item>
+ <item>
+ <p>A bug in an ERTS internal queue implementation could
+ cause the loss of a wake up signal to a consumer thread.
+ This has now been fixed.</p>
+ <p>The effect of this bug, when triggered, was often only
+ a small or even no delay of certain operations. This
+ since, threads often are woken due to other unrelated
+ reasons. However, if the consumer thread was not woken
+ due to other reasons when the bug was triggered, these
+ operations could be left hanging, potentially for ever.
+ Such effects seems to have been very rare, but we have on
+ at least one occasion gotten a report about such an
+ issue.</p>
+ <p>Operations potentially effected by this bug:</p>
+ <taglist> <tag>Inspection of memory allocation
+ status</tag> <item>The Erlang process calling
+ <c>erlang:memory/[0,1]</c>, or
+ <c>erlang:system_info({allocator|allocator_sizes, _})</c>
+ could potentially hang waiting for responses from
+ involved threads.</item> <tag>Async thread pool
+ jobs</tag> <item>An async thread pool job request and/or
+ reply could potentially be left hanging. In OTP this only
+ effected file operations, but user implemented drivers
+ using the async thread pool were also effected. In the
+ file operation case, this would typically translate into
+ an Erlang process potentially hanging on the file
+ operation.</item> <tag>Shutting down the runtime
+ system</tag> <item>Due to the issue with the async thread
+ pool mentioned above, flushing of I/O while terminating
+ the runtime system could also potentially hang.</item>
+ <tag>ETS memory deallocation</tag> <item>Scheduled jobs
+ handling deallocation of the main structure of an ETS
+ table could potentially hang. This more or less only
+ translates into minor memory leaks.</item> <tag>Shutting
+ down distribution</tag> <item>The distribution shutdown
+ phase used when manually shutting down the distribution,
+ i.e., when calling <c>net_kernel:stop()</c>, could
+ potentially hang.</item> </taglist>
+ <p>
+ Own Id: OTP-10854</p>
+ </item>
+ <item>
+ <p>
+ OS X Snow Leopard now only uses write, as writev does not
+ work properly on very large files.</p>
+ <p>
+ Own Id: OTP-10858</p>
+ </item>
+ <item>
+ <p>
+ Fixed a bug where line oriented file I/O using read_ahead
+ was very slow for files with very large difference in
+ line length.</p>
+ <p>
+ Own Id: OTP-10859</p>
+ </item>
+ <item>
+ <p>
+ In erts-5.10 (R16A) faulty hashvalues were produced for
+ non-ASCII atoms (characters in byte-range 128..255). This
+ has now been fixed and hashvalues conforms to previous
+ OTP releases.</p>
+ <p>
+ Own Id: OTP-10860</p>
+ </item>
+ <item>
+ <p>
+ Fixes of memory accesses that might be thread unsafe when
+ the runtime system has been linked against third-party
+ libraries for atomic memory operations during the build.
+ Most builds are uneffected by this bug. If triggered, the
+ runtime system will most likely crash more or less
+ immediately.</p>
+ <p>
+ Own Id: OTP-10875 Aux Id: OTP-10854 </p>
+ </item>
+ <item>
+ <p>
+ Fixed a bug where it was longer possible to give the +sws
+ proposal flag to non-smp emulators.</p>
+ <p>
+ Own Id: OTP-10881 Aux Id: seq12258 </p>
+ </item>
+ <item>
+ <p>
+ Faulty type to bytes read for ReadFile on Windows. This
+ could cause windows systems to misbehave. The correct
+ type is now used.</p>
+ <p>
+ Own Id: OTP-10890</p>
+ </item>
+ <item>
+ <p>
+ Change default max ports for Windows to 8192. Having a
+ too large value caused Windows to not be able to recover
+ properly. If you want to use another value, pass <c>+Q
+ Value</c> to erl or werl.</p>
+ <p>
+ Own Id: OTP-10892</p>
+ </item>
+ <item>
+ <p>
+ Fix rare crash on halfword vm during code loading.</p>
+ <p>
+ Own Id: OTP-10896</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Tuple funs (deprecated in R15B) are no longer supported.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-10170</p>
+ </item>
+ <item>
+ <p>
+ Added four new bifs, <c>erlang:binary_to_integer/1,2</c>,
+ <c>erlang:integer_to_binary/1</c>,
+ <c>erlang:binary_to_float/1</c> and
+ <c>erlang:float_to_binary/1,2</c>. These bifs work
+ similarly to how their list counterparts work, except
+ they operate on binaries. In most cases converting from
+ and to binaries is faster than converting from and to
+ lists. </p>
+ <p>
+ These bifs are auto-imported into erlang source files and
+ can therefore be used without the <c>erlang</c> prefix.</p>
+ <p>
+ Own Id: OTP-10300 Aux Id: kunagi-74 [74] </p>
+ </item>
+ <item>
+ <p>
+ The experimental support for packages has been removed.</p>
+ <p>
+ Own Id: OTP-10348 Aux Id: kunagi-316 [227] </p>
+ </item>
+ <item>
+ <p>The driver API function <seealso
+ marker="erl_driver#erl_drv_consume_timeslice"><c>erl_drv_consume_timeslice()</c></seealso>,
+ and the NIF API function <seealso
+ marker="erl_nif#enif_consume_timeslice"><c>enif_consume_timeslice()</c></seealso>
+ have been introduced.</p>
+ <p>These functions are provided in order to better
+ support co-operative scheduling, improve system
+ responsiveness, and to make it easier to prevent
+ misbehaviors of the VM due to a process or port
+ monopolizing a scheduler thread. They can be used when
+ dividing lengthy work into a number of repeated calls
+ without the need to use threads.</p>
+ <p>
+ Own Id: OTP-10810</p>
+ </item>
+ <item>
+ <p>
+ The list_to_integer/2 bif has been optimized when used
+ with bases other than 10.</p>
+ <p>
+ Own Id: OTP-10834 Aux Id: kunagi-74 [74] </p>
+ </item>
+ <item>
+ <p>
+ The git commit sha of the HEAD commit is now added to the
+ Erlang shell when compiling a non-released Erlang
+ version.</p>
+ <p>
+ Own Id: OTP-10838</p>
+ </item>
+ <item>
+ <p>Change caching policy for memory segment allocator.
+ For instance, prefer sbc segments over mbc segments,
+ caching policy is time-arrow aware, evicting older cached
+ segments to store newer segments. </p> <p>The default
+ number of cachable segment has been increased from five
+ to ten segments. This can be modified, same as before,
+ with the command line option <c>+MMmcs 5</c></p>
+ <p>Impact: Increased speed for processing on larger
+ objects, e.g. binaries. Slight increase of mapped and
+ resident memory. Tune your system with memory options to
+ <c>erl</c> for best performance.</p>
+ <p>
+ Own Id: OTP-10840</p>
+ </item>
+ <item>
+ <p>
+ Updated config.sub and config.guess to latest version
+ from gnu.org</p>
+ <p>
+ Own Id: OTP-10848</p>
+ </item>
+ <item>
+ <p>
+ Add an xcomp file for Blue Gene/Q. Thanks to Kostis
+ Sagonas.</p>
+ <p>
+ Own Id: OTP-10849</p>
+ </item>
+ <item>
+ <p>
+ Cleanup of documentation of the type language. Thanks to
+ Kostis Sagonas.</p>
+ <p>
+ Own Id: OTP-10850</p>
+ </item>
+ <item>
+ <p>
+ Change the return value of hipe_bifs:remove_refs_from/1.
+ Thanks to Kostis Sagonas.</p>
+ <p>
+ Own Id: OTP-10851</p>
+ </item>
+ <item>
+ <p>
+ As of ERTS-5.10/OTP-R16A node names passed in the EPMD
+ protocol are required to be encoded in UTF-8. Since EPMD
+ previously accepted latin1 encoded node names this is an
+ incompatibility. However, since Erlang nodes always have
+ required characters in node names to be 7-bit ASCII
+ characters (and still do require this), this
+ incompatibility should not effect anyone using EPMD as an
+ Erlang Port Mapper Daemon.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-10872 Aux Id: OTP-10753 </p>
+ </item>
+ <item>
+ <p>
+ The +pc flag to erl can be used to set the range of
+ characters considered printable. This affects how the
+ shell and io:format("~tp",...) functionality does
+ heuristic string detection. More can be read in STDLIB
+ users guide.</p>
+ <p>
+ Own Id: OTP-10884</p>
+ </item>
+ <item>
+ <p>
+ Fix a number of type cast errors related to formatted
+ printing on Win64 that can potentially cause problem when
+ the Erlang VM exceeds 4 GB of ram. (Thanks to Blaine
+ Whittle for the original patch)</p>
+ <p>
+ Own Id: OTP-10887</p>
+ </item>
+ <item>
+ <p>
+ The effect of the deprecated environment variable
+ ERL_MAX_PORTS had been removed premeturely. It has now
+ been readded. Note that this is still scheduled to be
+ released in R17B.</p>
+ <p>
+ Own Id: OTP-10895</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.10</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Set new peeled off SCTP socket to nonblocking socket
+ (Thanks to Jonas Falkevik)</p>
+ <p>
+ Own Id: OTP-10491</p>
+ </item>
+ <item>
+ <p>
+ Fix various typos (thanks to Tuncer Ayaz)</p>
+ <p>
+ Own Id: OTP-10611</p>
+ </item>
+ <item>
+ <p>
+ Fix fd leak when using async thread pool</p>
+ <p> When using the async thread pool, if an erlang
+ process asks to open a file and it gets shutdown/killed
+ while the file:open/2 call hasn't returned, it's possible
+ to leak a file descriptor against the target file. This
+ has now been fixed. (Thanks to Filipe David Manana)</p>
+ <p>
+ Own Id: OTP-10677</p>
+ </item>
+ <item>
+ <p>
+ Use sys/types.h instead of string.h to pull ssize_t
+ definition to erl_driver.h. This fixes build issue on
+ NetBSD. (Thanks to Yamamoto Takashi).</p>
+ <p>
+ Own Id: OTP-10699</p>
+ </item>
+ <item>
+ <p>
+ Arguments given with the -run or -s flags to erl are now
+ translated according to the file name encoding mode of
+ the runtime system.</p>
+ <p>
+ Own Id: OTP-10702</p>
+ </item>
+ <item>
+ <p>
+ The octet counters in the gen_tcp/inet interface could
+ behave in unexpected ways on 64bit platforms. The
+ behaviour is now as expected.</p>
+ <p>
+ Own Id: OTP-10746</p>
+ </item>
+ <item>
+ <p>
+ Certain linux kernels, most notably in redhat and CentOS
+ distribution, had a bug in writev which generated an
+ infinite loop in the tcp code of the VM. The bug is now
+ worked around.</p>
+ <p>
+ Own Id: OTP-10747</p>
+ </item>
+ <item>
+ <p>
+ A process that got killed (got an exit signal) while
+ operating on a compresseed file, could cause a
+ segmentation fault in the VM. This is now corrected.
+ Thanks to Filipe David Manana for identifying the problem
+ and submitting a solution.</p>
+ <p>
+ Own Id: OTP-10748</p>
+ </item>
+ <item>
+ <p>
+ Windows previously used three digit exponent in
+ formatting which caused difference between platforms, as
+ can be seen by float_to_list/1. This has now been fixed.</p>
+ <p>
+ Own Id: OTP-10751</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ A boolean socket option 'ipv6_v6only' for IPv6 sockets
+ has been added. The default value of the option is OS
+ dependent, so applications aiming to be portable should
+ consider using <c>{ipv6_v6only,true}</c> when creating an
+ <c>inet6</c> listening/destination socket, and if
+ neccesary also create an <c>inet</c> socket on the same
+ port for IPv4 traffic. See the documentation.</p>
+ <p>
+ Own Id: OTP-8928 Aux Id: kunagi-193 [104] </p>
+ </item>
+ <item>
+ <p>It is now allowed to define stubs for BIFs, to allow
+ type specs to be written for BIFs. For example, if there
+ is BIF called <c>lists:member/2</c>, a dummy definition
+ of <c>lists:member/2</c> is now allowed.</p>
+ <p>
+ Own Id: OTP-9861</p>
+ </item>
+ <item>
+ <p>Process optimizations. The most notable:</p> <list>
+ <item>New internal process table implementation allowing
+ for both parallel reads as well as writes. Especially
+ read operations have become really cheap. This reduce
+ contention in various situations. For example when,
+ spawning processes, terminating processes, sending
+ messages, etc.</item> <item>Optimizations of run queue
+ management reducing contention.</item>
+ <item>Optimizations of process internal state changes reducing
+ contention.</item> </list> <p>These changes imply changes
+ of the characteristics the system. Most notable: changed
+ timing in the system.</p>
+ <p>
+ Own Id: OTP-9892 Aux Id: OTP-10167 </p>
+ </item>
+ <item>
+ <p>
+ Non-blocking code loading. Earlier when an Erlang module
+ was loaded, all other execution in the VM were halted
+ while the load operation was carried out in single
+ threaded mode. Now modules are loaded without blocking
+ the VM. Processes may continue executing undisturbed in
+ parallel during the entire load operation. The load
+ operation is completed by making the loaded code visible
+ to all processes in a consistent way with one single
+ atomic instruction. Non-blocking code loading will
+ improve realtime characteristics when modules are
+ loaded/upgraded on a running SMP system.</p>
+ <p>
+ Own Id: OTP-9974</p>
+ </item>
+ <item>
+ <p>In the SMP emulator, turning on and off tracing will
+ no longer take down the system to single-scheduling. </p>
+ <p>
+ Own Id: OTP-10122</p>
+ </item>
+ <item>
+ <p>Remove VxWorks support</p>
+ <p>
+ Own Id: OTP-10146</p>
+ </item>
+ <item>
+ <p>
+ Added a general framework for executing benchmarks of
+ Erlang/OTP. Benchmarks for the Erlang VM and mnesia have
+ been incorporated in the framework. </p>
+ <p>
+ For details about how to add more benchmarks see
+ $ERL_TOP/HOWTO/BENCHMARKS.md in the source distribution.</p>
+ <p>
+ Own Id: OTP-10156</p>
+ </item>
+ <item>
+ <p>
+ Optimized deletion of ETS-tables which significantly
+ improves performance when large amounts of temporary
+ tables are used.</p>
+ <p>
+ This change imply changes of the characteristics the
+ system. Most notable: changed timing in the system.</p>
+ <p>
+ Own Id: OTP-10167 Aux Id: OTP-9892 </p>
+ </item>
+ <item>
+ <p>
+ Tuple funs (deprecated in R15B) are no longer supported.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-10170</p>
+ </item>
+ <item>
+ <p>
+ New internal header scheme for allocators</p>
+ <p>
+ Impact: Reduces size on object allocated in multiblock
+ carriers by one word</p>
+ <p>
+ Own Id: OTP-10273 Aux Id: kunagi-20 [20] </p>
+ </item>
+ <item>
+ <p>Major port improvements. The most notable:</p> <list>
+ <item>New internal port table implementation allowing for
+ both parallel reads as well as writes. Especially read
+ operations have become really cheap.This reduce
+ contention in various situations. For example when,
+ creating ports, terminating ports, etc. </item>
+ <item>Dynamic allocation of port structures. This allow
+ for a much larger maximum amount of ports allowed as a
+ default. The previous default of 1024 has been raised to
+ 65536. Maximum amount of ports can be set using the
+ <seealso marker="erts:erl#+Q">+Q</seealso> command line
+ flag of <seealso marker="erts:erl">erl(1)</seealso>. The
+ previously used environment variable <c>ERL_MAX_PORTS</c>
+ has been deprecated and scheduled for removal in
+ OTP-R17.</item> <item>Major rewrite of scheduling of port
+ tasks. Major benefits of the rewrite are reduced
+ contention on run queue locks, and reduced amount of
+ memory allocation operations needed. The rewrite was also
+ necessary in order to make it possible to schedule
+ signals from processes to ports.</item> <item>Improved
+ internal thread progress functionality for easy
+ management of unmanaged threads. This improvement was
+ necessary for the rewrite of the port task
+ scheduling.</item> <item>Rewrite of all process to port
+ signal implementations in order to make it possible to
+ schedule those operations. All port operations can now be
+ scheduled which allows for reduced lock contention on the
+ port lock as well as truly asynchronous communication
+ with ports.</item> <item>Optimized lookup of port handles
+ from drivers.</item> <item>Optimized driver lookup when
+ creating ports.</item> <item>Preemptable <seealso
+ marker="erts:erlang#ports-0">erlang:ports/0</seealso>
+ BIF.</item> <item>Improving responsiveness by bumping
+ reductions for a process calling a driver callback
+ directly.</item> </list>
+ <p>These changes imply changes of the characteristics of
+ the system. The most notable:</p> <taglist> <tag>Order of
+ signal delivery</tag> <item>The previous implementation
+ of the VM has delivered signals from processes to ports
+ in a synchronous stricter fashion than required by the
+ language. As of ERTS version 5.10, signals are truly
+ asynchronously delivered. The order of signal delivery
+ still adheres to the requirements of the language, but
+ only to the requirements. That is, some signal sequences
+ that previously always were delivered in one specific
+ order may now from time to time be delivered in different
+ orders. This may cause Erlang programs that have made
+ <em>false assumptions</em> about signal delivery order to
+ fail even though they previously succeeded. For more
+ information about signal ordering guarantees, see the
+ chapter on <seealso
+ marker="erts:communication">communication</seealso> in
+ the ERTS user's guide. The <seealso
+ marker="erts:erl#+n">+n</seealso> command line flag of
+ <seealso marker="erts:erl">erl(1)</seealso> can be
+ helpful when trying to find signaling order bugs in
+ Erlang code that have been exposed by these
+ changes.</item> <tag>Latency of signals sent from
+ processes to ports</tag> <item>Signals from processes to
+ ports where previously always delivered immediately. This
+ kept latency for such communication to a minimum, but it
+ could cause lock contention which was very expensive for
+ the system as a whole. In order to keep this latency low
+ also in the future, most signals from processes to ports
+ are by default still delivered immediately as long as no
+ conflicts occur. Such conflicts include not being able to
+ acquire the port lock, but also include other conflicts.
+ When a conflict occur, the signal will be scheduled for
+ delivery at a later time. A scheduled signal delivery may
+ cause a higher latency for this specific communication,
+ but improves the overall performance of the system since
+ it reduce lock contention between schedulers. The default
+ behavior of only scheduling delivery of these signals on
+ conflict can be changed by passing the <seealso
+ marker="erts:erl#+spp">+spp</seealso> command line flag
+ to <seealso marker="erts:erl">erl(1)</seealso>. The
+ behavior can also be changed on port basis using the
+ <seealso
+ marker="erts:erlang#open_port_parallelism">parallelism</seealso>
+ option of the <seealso
+ marker="erts:erlang#open_port-2">open_port/2</seealso>
+ BIF.</item> <tag>Execution time of the
+ <c>erlang:ports/0</c> BIF</tag> <item>Since <seealso
+ marker="erts:erlang#ports-0">erlang:ports/0</seealso> now
+ can be preempted, the responsiveness of the system as a
+ whole has been improved. A call to <c>erlang:ports/0</c>
+ may, however, take a much longer time to complete than
+ before. How much longer time heavily depends on the
+ system load.</item> <tag>Reduction cost of calling driver
+ callbacks</tag> <item>Calling a driver callback is quite
+ costly. This was previously not reflected in reduction
+ cost at all. Since the reduction cost now has increased,
+ a process performing lots of direct driver calls will be
+ scheduled out more frequently than before.</item>
+ </taglist>
+ <p><em>Potential incompatibilities</em>:</p> <list>
+ <item><c>driver_send_term()</c> has been deprecated and
+ has been scheduled for removal in OTP-R17. Replace usage
+ of <c>driver_send_term()</c> with usage of <seealso
+ marker="erts:erl_driver#erl_drv_send_term">erl_drv_send_term()</seealso>.</item>
+ <item><c>driver_output_term()</c> has been deprecated and
+ has been scheduled for removal in OTP-R17. Replace usage
+ of <c>driver_output_term()</c> with usage of <seealso
+ marker="erts:erl_driver#erl_drv_output_term">erl_drv_output_term()</seealso>.</item>
+ <item>The new function <seealso
+ marker="erts:erl_driver#erl_drv_busy_msgq_limits">erl_drv_busy_msgq_limits()</seealso>
+ has been added in order to able to control management of
+ port queues.</item> </list>
+ <p>The <seealso
+ marker="erts:erl_driver#version_management">driver API
+ version</seealso> has been bumped to 2.1 from 2.0 due to
+ the above changes in the driver API.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-10336 Aux Id: OTP-9892 </p>
+ </item>
+ <item>
+ <p>
+ The experimental support for packages has been removed.</p>
+ <p>
+ Own Id: OTP-10348 Aux Id: kunagi-316 [227] </p>
+ </item>
+ <item>
+ <p>
+ Wrong parameters when setting seq_trace-tokens from
+ within a trace-pattern could crash the VM. This is now
+ corrected.</p>
+ <p>
+ Own Id: OTP-10522</p>
+ </item>
+ <item>
+ <p>
+ Erlang specification 4.7.3 defines max tuple size to
+ 65535 elements It is now enforced to no more than
+ 16777215 elements (arity 24 bits)</p>
+ <p>
+ Previous edge cases (28 bits) were not validated and
+ could cause undefined behaviour.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-10633</p>
+ </item>
+ <item>
+ <p>
+ Add insert_element/3 and delete_element/2</p>
+ <p>
+ Own Id: OTP-10643</p>
+ </item>
+ <item>
+ <p>
+ The previous default of a maximum of 32768 simultaneous
+ processes has been raised to 262144. This value can be
+ changed using the the <seealso
+ marker="erl#+P">+P</seealso> command line flag of
+ <seealso marker="erl">erl(1)</seealso>. Note that the
+ value passed now is considered as a hint, and that actual
+ value chosen in most cases will be a power of two.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-10647 Aux Id: OTP-9892, OTP-10336 </p>
+ </item>
+ <item>
+ <p>
+ The previously (in R15) proposed scheduler wakeup
+ strategy is now used by default. This strategy is not as
+ quick to forget about previous overload as the previous
+ strategy.</p>
+ <p>
+ This change imply changes of the characteristics the
+ system. Most notable: When a small overload comes and
+ then disappears repeatedly, the system will for a bit
+ longer time be willing to wake up schedulers than before.
+ Timing in the system will due to this also change.</p>
+ <p>
+ The previous strategy can still be enabled by passing the
+ <seealso marker="erl#+sws">+sws legacy</seealso> command
+ line flag to <c>erl</c>.</p>
+ <p>
+ Own Id: OTP-10661 Aux Id: OTP-10033 </p>
+ </item>
+ <item>
+ <p>
+ The <seealso marker="erl#+stbt">+stbt</seealso> command line
+ argument of <c>erl</c> was added. This argument can be
+ used for trying to set scheduler bind type. Upon failure
+ unbound schedulers will be used.</p>
+ <p>
+ Own Id: OTP-10668</p>
+ </item>
+ <item>
+ <p>
+ Support ANSI in console</p>
+ <p>
+ Unix platforms will no longer filter control sequences to
+ the ttsl driver thus enabling ANSI and colors in console.
+ (Thanks to Pedram Nimreezi)</p>
+ <p>
+ Own Id: OTP-10678</p>
+ </item>
+ <item>
+ <p>Add file:allocate/3 operation</p>
+ <p>This operation allows pre-allocation of space for
+ files. It succeeds only on systems that support such
+ operation. (Thanks to Filipe David Manana)</p>
+ <p>
+ Own Id: OTP-10680</p>
+ </item>
+ <item>
+ <p>Treat <c>-Wreturn-type</c> warnings as error when
+ using GCC (Thanks to Tuncer Ayaz)</p>
+ <p>
+ Own Id: OTP-10683</p>
+ </item>
+ <item>
+ <p>
+ Implement ./otp_build configure --enable-silent-rules</p>
+ <p>
+ With silent rules, the output of make is less verbose and
+ compilation warnings are easier to spot. Silent rules are
+ disabled by default and can be disabled or enabled at
+ will by make V=0 and make V=1. (Thanks to Anthony Ramine)</p>
+ <p>
+ Own Id: OTP-10726</p>
+ </item>
+ <item>
+ <p>
+ Use share flags for all file operations on Windows.
+ Thanks to Filipe David Borba Manana.</p>
+ <p>
+ Own Id: OTP-10727</p>
+ </item>
+ <item>
+ <p>
+ Make/fakefop adjustments. Thanks to Tuncer Ayaz and
+ Sebastian Rasmussen.</p>
+ <p>
+ Own Id: OTP-10733</p>
+ </item>
+ <item>
+ <p>
+ The runtime system will now by default use 10 async
+ threads if thread support has been enabled when building
+ the runtime system.</p>
+ <p>
+ This will prevent long blocking file-operations from
+ blocking scheduler threads for long periods of time,
+ which can be harmful. Apart from file-operations, it also
+ effects other operations scheduled on the async thread
+ pool by user implemented drivers.</p>
+ <p>
+ The amount of async threads can be controlled by using
+ the <seealso
+ marker="erl#async_thread_pool_size"><c>+A</c></seealso>
+ command line argument of <c>erl(1)</c>. When running some
+ offline tools you <em>might</em> want to disable async
+ threads, but you are advised <em>not</em> to in the
+ general case. Instead, you might want to increase the
+ amount of async threads used.</p>
+ <p>
+ This change imply changes of the characteristics the
+ system compared to the previous default. The
+ responsiveness of the system as a whole will be improved.
+ Operations scheduled on the async thread pool will get an
+ increased latency. The throughput of these operations may
+ increase, or decrease depending on the type of the
+ operations and how they get scheduled. In the case of
+ file operations, the throughput very much depends on how
+ the Erlang application access files. Multiple concurrent
+ accesses to different files have the potential of an
+ increased throughput.</p>
+ <p>
+ Own Id: OTP-10736</p>
+ </item>
+ <item>
+ <p>
+ The default reader group limit has been increased to 64
+ from 8. This limit can be set using the <c>+rg</c>
+ command line argument of <c>erl(1)</c>.</p>
+ <p>
+ This change of default value will reduce lock contention
+ on ETS tables using the <c>read_concurrency</c> option at
+ the expense of memory consumption when the amount of
+ schedulers and logical processors are beween 8 and 64.
+ For more information, see documentation of the <c>+rg</c>
+ command line argument of <c>erl(1)</c>.</p>
+ <p>
+ Own Id: OTP-10737</p>
+ </item>
+ <item>
+ <p>
+ New BIF float_to_list/2 which solves a problem of
+ float_to_list/1 that doesn't allow specifying the number
+ of digits after the decimal point when formatting floats
+ (Thanks to Serge Aleynikov).</p>
+ <p>
+ Own Id: OTP-10752</p>
+ </item>
+ <item>
+ <p>
+ Limited support for unicode atoms in the external format
+ and in the internal representation of the vm. This is a
+ preparative feature in order to support communication
+ with future releases of Erlang/OTP that may create
+ unicode atoms.</p>
+ <p>
+ Own Id: OTP-10753</p>
+ </item>
+ <item>
+ <p>
+ Increased potential concurrency in ETS for
+ <c>write_concurrency</c> option. The number of internal
+ table locks has increased from 16 to 64. This makes it
+ four times less likely that two concurrent processes
+ writing to the same table would collide and thereby
+ serialized. The cost is an increased constant memory
+ footprint for tables using write_concurrency. The memory
+ consumption per inserted record is not affected. The
+ increased footprint can be particularly large if
+ <c>write_concurrency</c> is combined with
+ <c>read_concurrency</c>.</p>
<p>
- Own Id: OTP-11067</p>
+ Own Id: OTP-10787</p>
</item>
</list>
</section>