aboutsummaryrefslogtreecommitdiffstats
path: root/erts
AgeCommit message (Collapse)Author
2019-04-10Decentralized counters for ETS ordered_set with write_concurrencyKjell Winblad
Previously, all ETS tables used centralized counter variables to keep track of the number of items stored and the amount of memory consumed. These counters can cause scalability problems (especially on big NUMA systems). This commit adds an implementation of a decentralized counter and modifies the implementation of ETS so that ETS tables of type ordered_set with write_concurrency enabled use the decentralized counter. [Experiments][1] indicate that this change substantially improves the scalability of ETS ordered_set tables with write_concurrency enabled in scenarios with frequent `ets:insert/2` and `ets:delete/2` calls. The new counter is implemented in the module erts_flxctr (`erts_flxctr.h` and `erts_flxctr.c`). The module has the suffix flxctr as it contains the implementation of a flexible counter (i.e., counter instances can be configured to be either centralized or decentralized). Counters that are configured to be centralized are implemented with a single counter variable which is modified with atomic operations. Decentralized counters are spread over several cache lines (how many can be configured with the parameter `+dcg`). The scheduler threads are mapped to cache lines so that there is no single point of contention when decentralized counters are updated. The thread progress functionality of the Erlang VM is utilized to implement support for linearizable snapshots of decentralized counters. The snapshot functionality is used by the `ets:info/1` and `ets:info/2` functions. [1]: http://winsh.me/ets_catree_benchmark/flxctr_res.html
2019-04-10erts: Fix z_SUITE to always look for cerl in ERL_TOPLukas Larsson
If it cannot be found in the daily build dir, we try ERL_TOP incase it is there.
2019-04-10vxworks: Make vxworks configure use environment CFLAGSLukas Larsson
2019-04-10erts: Make erts_free debug failure easier to diagnoseLukas Larsson
2019-04-10erts: Fix gcc warning in to_erlLukas Larsson
2019-04-10Merge pull request #2204 from jhogberg/john/erts/optimize-arith-ops/OTP-15740John Högberg
erts: Optimize arithmetic ops using overflow intrinsics
2019-04-10Merge branch 'john/merge-re-replace-fix'John Högberg
* john/merge-re-replace-fix: erts: Skip ERTS_NOINLINE on non-GCC-compatible compilers cleanup: beam_emu.c: use ERTS_NOINLINE instead of NOINLINE stdlib: fix re:replace on LTO builds
2019-04-09Revert "erts: Make DFLAG_BIG_CREATION mandatory"Sverker Eriksson
This reverts commit 321dc6ee0241f802c940def174c0a77262e11f21.
2019-04-09Revert "erts: Remove old encoding of pids, ports and refs"Sverker Eriksson
This reverts commit 0b74eec2a1fd5716ba6e21d8c6715433d8d34510.
2019-04-09Revert "epmd: Support 32-bit creation values in local node"Sverker Eriksson
This reverts commit bd8f6106d44a58c261920eef72842bb3bc5a4968. PLUS a little change in epmd_srv.c:750 ("4" -> "replylen") that was part of e2cf4a8a4b03b9f430ba228276c3b2629159e832 by mistake.
2019-04-09Revert "erts: Document new EPMD response ALIVE2_X_RESP"Sverker Eriksson
This reverts commit aef76b8e8bdce86e46e2267331b1b957f796653f.
2019-04-09erts: Fix dist sequence yield state allocator typeLukas Larsson
The wrong allocator type was given to erts_free.
2019-04-09erts: Fix driver_SUITE:use_fallback_pollsetLukas Larsson
We don't check for io errors as the pollset will be unstable.
2019-04-09erts: Yield when exiting/free process is suspended by deLukas Larsson
Complementory fix to 922fd355831575965
2019-04-09erts: Fix alignment of ErtsDistExternal on sparcLukas Larsson
The edep->data values need to be 64-bit aligned as it contains 64-bit values.
2019-04-09erts: Fix incorrect gcc may be used init warningLukas Larsson
2019-04-09erts: Skip large dist testcases on machines with little memoryLukas Larsson
2019-04-09erts: Fix lock order violation in system_info(procs)Lukas Larsson
2019-04-09erts: Fix buffer alignment bug in alloc_dist_obufLukas Larsson
Cannot do unaligned word writes on sparc!
2019-04-09erts: Fix build of dist_ctrl_get_data return termLukas Larsson
2019-04-09Merge branch 'maint'Lukas Larsson
2019-04-09erts: Fix sys_driver to correctly deselect fdsLukas Larsson
Incorrect precidence rules made the driver never deselect the given fds.
2019-04-08Merge branch 'bjorn/erts/cuddle-with-tests'Björn Gustavsson
* bjorn/erts/cuddle-with-tests: statistics_SUITE: Make wall_clock_update/1 more tolerant
2019-04-08Add erts_debug:interpreter_size/0Björn Gustavsson
Add erts_debug:interpreter_size/0 for retrieving the approximate size of the BEAM interpreter (process_main()).
2019-04-08erts: Optimize arithmetic ops using overflow intrinsicsJohn Högberg
2019-04-08erts: Skip ERTS_NOINLINE on non-GCC-compatible compilersJohn Högberg
__declspec(noinline) works fine on MSVC but requires us to place the macro before a function rather than after, which in turn causes early versions of GCC to puke since they only accept __attribute__ at the end of a function declaration. Since this is a new macro that previously only saw use in beam_emu, I figured it's easiest to leave it disabled on MSVC.
2019-04-05Fail when we cannot encode term in binaryRickard Green
Fail when we cannot encode term in binary instead of producing a faulty result.
2019-04-05Optimize the i_minus instructionBjörn Gustavsson
Measurements show that i_minus instructions (subtraction) are frequent enough to warrant creating specialized i_minus instructions. Thanks to José Valim for doing instruction counting on Elixir code.
2019-04-05Merge branch 'lukas/erl_docgen/add-internal-docs'Björn Gustavsson
OTP-15715 * lukas/erl_docgen/add-internal-docs: cerl_clauses: Fix broken link Fix minor typos Add CountingInstructions to the internal documentation GarbageCollection.md: Fix links to references emd2exml: Remove paragraphs around image tags emd2exml: Clean emphasis markers in link texts emd2exml: Allow short names of anchors for internal links Include figures erts: Fix more internal docs xmllint compiler: Add internal docs section erl_docgen: Add new internal docs chapter to docs
2019-04-05Merge branch 'bjorn/doc/fix-broken-links'Björn Gustavsson
* bjorn/doc/fix-broken-links: Fix broken links
2019-04-05Merge remote-tracking branch 'trofi/master' into john/merge-re-replace-fixJohn Högberg
PR 2194, stdlib: fix re:replace on LTO builds * trofi/master: cleanup: beam_emu.c: use ERTS_NOINLINE instead of NOINLINE stdlib: fix re:replace on LTO builds
2019-04-04Fix broken linksBjörn Gustavsson
A multitude of broken links were found when a bug was fixed in the link checker.
2019-04-04Fix minor typosBjörn Gustavsson
2019-04-04Add CountingInstructions to the internal documentationBjörn Gustavsson
2019-04-04GarbageCollection.md: Fix links to referencesBjörn Gustavsson
2019-04-04Include figuresBjörn Gustavsson
2019-04-04erts: Fix more internal docs xmllintLukas Larsson
2019-04-04erl_docgen: Add new internal docs chapter to docsLukas Larsson
2019-04-03lcnt_SUITE: Ignore socket-NIF locks in toggle testsJohn Högberg
2019-04-02Merge branch 'sverker/enable-big-creation/OTP-15603'Sverker Eriksson
AGAIN * sverker/enable-big-creation/OTP-15603: erts: Document new EPMD response ALIVE2_X_RESP erl_interface: Support 32-bit creation local cnode jinterface: Remove old encoding of pid,port,refs
2019-04-02Merge branch 'john/erts/cuddle-efile-suite'John Högberg
* john/erts/cuddle-efile-suite: efile_SUITE: Fix proc_zero_sized_files on systems with empty /proc
2019-04-01Merge branch 'maint'Sverker Eriksson
* maint: Updated OTP version Prepare release # Conflicts: # OTP_VERSION # make/otp_version_tickets_in_merge
2019-04-01efile_SUITE: Fix proc_zero_sized_files on systems with empty /procJohn Högberg
This test would fail on some versions of FreeBSD because /proc was present but empty. This commit makes the test fail if and only if a known zero-sized file is found and turns out to be empty empty.
2019-04-01Merge branch 'john/kernel/cuddle-file-suite'John Högberg
* john/kernel/cuddle-file-suite: file_name_SUITE: Darwin 18 broke support for 'icky' names file_SUITE: Ignore EILSEQ on Darwin in +fnu/latin1 test
2019-03-29cleanup: beam_emu.c: use ERTS_NOINLINE instead of NOINLINESergei Trofimovich
Signed-off-by: Sergei Trofimovich <[email protected]>
2019-03-29stdlib: fix re:replace on LTO buildsSergei Trofimovich
Fabio Coatti reported elixir build failure in https://bugs.gentoo.org/681778. The minimal reproducer looks like that (from otp git tree): $ ./configure CFLAGS='-O2 -flto' LDFLAGS='-O2 -flto=8' $ make $ ERL_TOP=$PWD \ PATH=$ERL_TOP/bin:$PATH \ \ bin/erl \ \ -noshell -eval 're:replace("a","b","c",[{return,list}]).' \ -s erlang halt {"init terminating in do_boot",{badarg,[{re,replace,["a","b","c",[{return,list}]], [{file,"re.erl"},{line,362}]}, {erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,680}]}, {init,start_it,1,[]}, {init,start_em,1,[]}, {init,do_boot,3,[]}]}} init terminating in do_boot ({badarg,[{re,replace,[[_],[_],[_],[_]],[{_},{_}]}, {erl_eval,do_apply,6,[{_},{_}]},{init,start_it,1,[]},{init,start_em,1,[]},{init,do_boot,3,[]}]}) Crash dump is being written to: erl_crash.dump...done The failure happens in libpcre2 where stack overflow is mis-identified at function entry of erts_pcre_compile2() compile_regex() if (PUBL(stack_guard) != NULL && PUBL(stack_guard)()) { *errorcodeptr= ERR85; return FALSE; } The stack "overflow" detection happens in thr_wrapper() ethr_set_stacklimit__() because the stack usage code relies on the fact that ethr_set_stacklimit__() and similar functions don't get inlined into callers for stack growth measurement. Before the change inlining avoidance was achieved by putting functions into standalone translation units. LTO makes this technique inefficient. The change marks functions explicitly as __attribute__((__noinline__)) on gcc. Reported-by: Fabio Coatti Bug: https://bugs.gentoo.org/681778 Signed-off-by: Sergei Trofimovich <[email protected]>
2019-03-29Prepare releaseErlang/OTP
2019-03-29Merge branch 'sverker/process_info-reductions-fix/OTP-15709' into maint-21Erlang/OTP
* sverker/process_info-reductions-fix/OTP-15709: erts: Fix bug in process_info(reductions) erts: Use ptr_val for pointer in gc msg copy
2019-03-29Merge branch 'maint'Sverker Eriksson
2019-03-29Merge branch 'sverker/process_info-reductions-fix/OTP-15709' into maintSverker Eriksson
* sverker/process_info-reductions-fix/OTP-15709: erts: Fix bug in process_info(reductions) erts: Use ptr_val for pointer in gc msg copy