Age | Commit message (Collapse) | Author |
|
* kjell/stdlib/ets_ordered_set_slow_react/OTP-15906:
ETS ordered_set: Improvements to the CA tree implementation
|
|
This commit only affects the implementation of ETS `ordered_set`
tables with the `write_concurrency` option enabled. Such tables are
implemented with a data structure that is called the contention
adapting search tree (CA tree). This commit introduces the following
changes:
* This commit causes a join to be triggered in one randomly selected
base node in about one of 1000 read unlock calls for base node
locks. No such joins happened before this commit. Before this
commit, operations that only acquired looks in read-mode never
triggered any contention adaptation. Therefore, the CA tree could
get stuck in a sub-optimal state in certain scenarios. This could
happen, for example, when a CA tree is first populated with parallel
inserts (which will cause splits of base nodes) and then only
read-only operations are applied to the data structure. Benchmark
results from the
`ets_SUITE:lookup_catree_par_vs_seq_init_benchmark/0` benchmark
function (which is included in this commit) shows that this change
can improve the throughput of the CA tree in the scenario described
above.
* Read-only operations will now also increase values of statistics
counters when they detect that they need to wait for other
operations. Only write operation changed statistics counters before
this commit. This improves the statistics that the adaptation
heuristics is based on.
* Additionally, this commit adds an upper and lower limit to the
contention statistics variables in the base nodes. Such limits did
not exist before this commit. This should, for example, make the CA
tree more responsive to contention after long periods of low
contention.
|
|
* maint-21:
Updated OTP version
Prepare release
# Conflicts:
# OTP_VERSION
# erts/doc/src/notes.xml
# erts/vsn.mk
# lib/common_test/doc/src/notes.xml
# lib/common_test/vsn.mk
# lib/kernel/doc/src/notes.xml
# lib/kernel/vsn.mk
# lib/public_key/doc/src/notes.xml
# lib/public_key/vsn.mk
# lib/ssl/doc/src/notes.xml
# lib/ssl/vsn.mk
# lib/stdlib/doc/src/notes.xml
# lib/stdlib/vsn.mk
# make/otp_version_tickets
# otp_versions.table
|
|
|
|
* hasse/stdlib/chars_limit_bug/OTP-15875/ERL-967:
stdlib: Fix a bug concerning io_lib option 'chars_limit'
# Conflicts:
# lib/stdlib/test/io_SUITE.erl
|
|
* maint-22:
Updated OTP version
Prepare release
# Conflicts:
# make/otp_version_tickets
|
|
|
|
* hasse/stdlib/chars_limit_bug/OTP-15875/ERL-967:
stdlib: Fix a bug concerning io_lib option 'chars_limit'
# Conflicts:
# lib/stdlib/test/io_SUITE.erl
|
|
* hasse/stdlib/chars_limit_bug/OTP-15875/ERL-967:
stdlib: Fix a bug concerning io_lib option 'chars_limit'
|
|
See also https://bugs.erlang.org/browse/ERL-967.
|
|
* maint-21:
Updated OTP version
Prepare release
# Conflicts:
# OTP_VERSION
# erts/doc/src/notes.xml
# erts/vsn.mk
# lib/kernel/doc/src/notes.xml
# lib/kernel/src/kernel.appup.src
# lib/kernel/vsn.mk
# lib/ssl/doc/src/notes.xml
# lib/ssl/vsn.mk
# lib/stdlib/doc/src/notes.xml
# lib/stdlib/src/stdlib.appup.src
# lib/stdlib/vsn.mk
# make/otp_version_tickets
# otp_versions.table
|
|
* maint-22:
Updated OTP version
Prepare release
# Conflicts:
# make/otp_version_tickets
|
|
|
|
* hasse/stdlib/chars_limit_bug/OTP-15847/ERL-957:
stdlib: Fix a bug concerning io_lib option 'chars_limit'
|
|
|
|
* hasse/stdlib/chars_limit_bug/OTP-15847/ERL-957:
stdlib: Fix a bug concerning io_lib option 'chars_limit'
# Conflicts:
# lib/stdlib/test/io_SUITE.erl
|
|
See also https://bugs.erlang.org/browse/ERL-957.
|
|
PR-2245
ERL-914
* sverker/stdlib/binary-referenced_byte_size-doc:
stdlib: Improve example for binary:referenced_byte_size/1
|
|
|
|
fix typo in gen_statem.xml
|
|
|
|
|
|
* maint:
Fix bad merge from maint-21
Fix bad merge from maint-21
Updated OTP version
Prepare release
# Conflicts:
# OTP_VERSION
# make/otp_version_tickets_in_merge
|
|
* hasse/stdlib/optimize_io_format/OTP-15705:
stdlib: Optimize pretty printing of strings with chars_limit
stdlib: Optimize printing of maps a bit
stdlib: Optimize pretty printing of lists slightly
|
|
* hasse/stdlib/check_spec_module/OTP-15563/ERL-845:
stdlib: Do not allow specs for functions in other modules
|
|
|
|
* raimo/stdlib/gen_statem-sync-timer-cancel/OTP-15295:
Rewrite to use synchronous timer cancel
|
|
* dgud/stdlib/string-error-cases:
unicode_util gc/1
Fix bug string:slice/3 on bad input
|
|
See also https://bugs.erlang.org/browse/ERL-845.
[Kostis:]
My suggestion is that the compiler refuses to compile modules that
contain specs for functions that are not from this module. I do not
remember when / why this `feature' was introduced, but thinking about
it I see a lot of (ugly) semantics issues with it. For example, should
one be allowed to declare in the foo module that lists:flatten/1 takes
an integer() as an argument and returns a binary()? Should one be
allowed to declare a spec in some module m1 for a function of m2 that
is not defined in m2?
There are all kinds of checks that will need to be added to dialyzer
to protect itself from these semantics issues. The compiler already
refuses to compile modules that contain specs for non-existing
functions of the module. Similarly, it should refuse to compile
modules that contain specs for functions of other modules - unless it
can somehow check that these functions are indeed defined, but it is
not how the compiler currently works.
|
|
Avoid traversing all of string arguments when limiting the output with
the 'chars_limit' option.
|
|
|
|
|
|
Since it's an opaque type, its internal structure shouldn't be
part of the docs. Otherwise it leads misguided devs to the
assumption that they can pattern-match on it, when they shouldn't.
|
|
Could expand binary to list for to many elements.
Fix and add tests.
|
|
Fixed bug in slice which wrongly could return <<>> for non-utf8 binary input.
Also give a better error reason when non-utf8 binaries are given as
input to some functions.
|
|
Fix typo
|
|
|
|
This reverts commit 425889ba69b69a9b6fb14bfbef121d51b78e853a.
|
|
|
|
This commit fixes an ETS test case that tests the decentralized memory
counter in tables of type ordered_set with the write_concurrency
option turned on. The test case assumed that the memory consumption of
the table would only grow monotonically when terms are
inserted. However, this was not the case when the emulator was
compiled in debug mode as random splits and joins of CA tree nodes
could happen. This commit fixes the test case by disabling random
splits and joins in the tested table.
|
|
|
|
|
|
Atomic elements such as atoms, '{}', '[]', and '<<>>' are output on
the same line in types, structs, lists, &c.
In particular types can be more compact, and easier to read.
A space is output after comma in tuples, to be more consistent.
|
|
* hasse/stdlib/erl_pp_quoted_atom_types/OTP-15756:
stdlib: Add option 'quote_singleton_atom_types' to erl_pp
|
|
The new option can be used by Dialyzer, which has traditionally quoted
singleton atom types.
The OTP team has decided not to use the convention in OTP
documentation, at least not for now. That is why the option is needed.
EDoc does not use the new option.
Syntax Tools does not have a similar option.
|
|
* sverker/test-cuddle:
stdlib: Remove ets_SUITE:time_lookup
|
|
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
|
|
Issue an error for improper use of record_info/2 in a fun
OTP-15760
|
|
Fix various spelling mistakes
|
|
* hasse/stdlib/erl_pp_throw/OTP-15751:
stdlib: Fix a bug concerning exception class 'throw'
|