Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
2723-Make-ETS-hash-use-decentralized-ctrs-when-...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 2723-Make-ETS-hash-use-decentralized-ctrs-when-w.c.-is-no.patch of Package erlang
From f6e1cb0385a8cbbc7138a1f299cf992376a793b5 Mon Sep 17 00:00:00 2001 From: Kjell Winblad <kjellwinblad@gmail.com> Date: Wed, 15 Sep 2021 13:33:59 +0200 Subject: [PATCH 3/8] Make ETS hash use decentralized ctrs when w.c. is not true or false This commit makes sure that the decentralized_counters ETS option is turned on by default for all tables that has the write_concurrency option set to something else than true or false. As before the decentralized_counters option is still turned on by default when the table type is set to ordered_set and the write concurrency option is set to true. --- erts/emulator/beam/erl_db.c | 5 +++++ lib/stdlib/doc/src/ets.xml | 26 ++++++++++++-------------- lib/stdlib/test/ets_SUITE.erl | 13 ++++++++++--- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/erts/emulator/beam/erl_db.c b/erts/emulator/beam/erl_db.c index 3826e2189c..a047c6ecb5 100644 --- a/erts/emulator/beam/erl_db.c +++ b/erts/emulator/beam/erl_db.c @@ -2313,16 +2313,21 @@ BIF_RETTYPE ets_new_2(BIF_ALIST_2) term_to_Sint(tp[2], &no_locks_param) && no_locks_param >= 1 && no_locks_param <= 32768) { + is_decentralized_counters = 1; is_fine_locked = 1; is_explicit_lock_granularity = 1; is_write_concurrency_auto = 0; no_locks = no_locks_param; } else if (tp[2] == am_auto) { + is_decentralized_counters = 1; is_write_concurrency_auto = 1; is_fine_locked = 1; is_explicit_lock_granularity = 0; no_locks = -1; } else if (tp[2] == am_true) { + if (!(status & DB_ORDERED_SET)) { + is_decentralized_counters = 0; + } is_fine_locked = 1; is_explicit_lock_granularity = 0; is_write_concurrency_auto = 0; diff --git a/lib/stdlib/doc/src/ets.xml b/lib/stdlib/doc/src/ets.xml index e68cf23517..16b8739780 100644 --- a/lib/stdlib/doc/src/ets.xml +++ b/lib/stdlib/doc/src/ets.xml @@ -1306,14 +1306,9 @@ ets:select(Table, MatchSpec),</code> concurrent read bursts and large concurrent write bursts are common; for more information, see option <seeerl marker="#new_2_read_concurrency"> - <c>read_concurrency</c></seeerl>. The - <c>decentralized_counters</c> option is turned on by - default for tables of type <c>ordered_set</c> with any - of the <c>write_concurrency</c> options expcept - <c>false</c> enabled, and the - <c>decentralized_counters</c> option is turned - <em>off</em> by default for all other table types. For - more information, see the documentation for the + <c>read_concurrency</c></seeerl>. It is almost always a + good idea to combine the <c>write_concurrency</c> option + with the <seeerl marker="#new_2_decentralized_counters"> <c>decentralized_counters</c></seeerl> option.</p> <p>Notice that this option does not change any guarantees about @@ -1366,12 +1361,15 @@ ets:select(Table, MatchSpec),</code> <tag><c>{decentralized_counters,boolean()}</c></tag> <item> <p> - Performance tuning. Defaults to <c>true</c> for tables - of type <c>ordered_set</c> with the - <seeerl marker="#new_2_write_concurrency"> - <c>write_concurrency</c></seeerl> option enabled, and defaults to - false for all other table types. This option has no effect if - the <c>write_concurrency</c> option is set to <c>false</c>.</p> + Performance tuning. Defaults to <c>true</c> for all + tables with the <c>write_concurrency</c> option set + to something else than <c>true</c> or <c>false</c>. For + tables of type <c>ordered_set</c> the option also + defaults to true when the <c>write_concurrency</c> option + is set to <c>true</c>. The option defaults to + <c>false</c> for all other configurations. This option + has no effect if the <c>write_concurrency</c> option is + set to <c>false</c>.</p> <p> When this option is set to <c>true</c>, the table is optimized for frequent concurrent calls to operations that modify the tables diff --git a/lib/stdlib/test/ets_SUITE.erl b/lib/stdlib/test/ets_SUITE.erl index 86f1dff196..b44d67aec4 100644 --- a/lib/stdlib/test/ets_SUITE.erl +++ b/lib/stdlib/test/ets_SUITE.erl @@ -5238,8 +5238,13 @@ do_test_decentralized_counters_setting(TableType) -> check_decentralized_counters(T1, false, FlxCtrMemUsage), ets:delete(T1) end, - [[{write_concurrency, false}], - [{write_concurrency, true}, {decentralized_counters, false}]]), + [[{write_concurrency, false}]] ++ + case TableType of + set -> + [[{write_concurrency, true}, {decentralized_counters, false}], + [{write_concurrency, 1024}, {write_concurrency, true}]]; + ordered_set -> [] + end), lists:foreach( fun(OptList) -> T1 = ets:new(t1, [public, @@ -5250,7 +5255,9 @@ do_test_decentralized_counters_setting(TableType) -> wait_for_memory_deallocations(), FlxCtrMemUsage = erts_debug:get_internal_state(flxctr_memory_usage) end, - [[{decentralized_counters, true}]]), + [[{decentralized_counters, true}], + [{write_concurrency, 1024}], + [{write_concurrency, auto}]]), ok. do_test_decentralized_counters_default_setting() -> -- 2.31.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor