This page contains results from an ETS benchmark showcasing the performance and scalability of a new ETS ordered_set
implementation. The new ETS ordered_set
implementation is only enabled when the option {write_concurrency, true}
is passed to the ets:new
function. The write_concurrency
option had no effect on the created table when used in combination with ordered_set
before the new implementation was added. The following papers describe the data structure that the new ETS ordered_set
implementation is based on (the contention adapting search tree):
A Contention Adapting Approach to Concurrent Ordered Sets.
Journal of Parallel and Distributed Computing, 2018.
Kjell Winblad and Konstantinos Sagonas.
(publisher, preprint)
More Scalable Ordered Set for ETS Using Adaptation.
In Thirteenth ACM SIGPLAN workshop on Erlang (2014).
Kjell Winblad and Konstantinos Sagonas.
(publisher, preprint)
ets_SUITE:throughput_benchmark/0
(see "$ERL_TOP/lib/stdlib/test/ets_SUITE.erl
").
Below is a list with brief descriptions of the operations:
ets:insert/2
call with a random item within the key range as the second parameter valueets:remove/2
call with a random item within the key range as the second parameter valueets:lookup/2
call with a random item within the key range as the second parameter valueets:lookup/2
call with a random item within the key range as the second parameter valueets:next/2
calls. The first next
call is given a random item within the key range as the second parameter value, and the other next
calls are given the result of the previous next
call as the second parameter value.ets:select_count
call that counts all the items in the tableets:select_count
call that counts all the items within a random range of size X
Machine:
Microsoft Azure VM instance: Standard D64s v3 (64 vcpus, 256 GB memory):
Operating System:
Description: Ubuntu 18.04.2 LTS Linux version: 4.18.0-1014-azure
Erlang Parameters
erl +sbt tnnps
This page generates graphs from data produced by the ETS benchmark which is defined in the function ets_SUITE:throughput_benchmark/0
(see "$ERL_TOP/lib/stdlib/test/ets_SUITE.erl
").
Note that one can paste results from several benchmark runs into the field below. Results from the same scenario but from different benchmark runs will be relabeled and ploted in the same graph automatically. This makes comparisons of different ETS versions easy.
Note also that that lines can be hidden by clicking on the corresponding label.
Paste the generated data in the field below and press the Render button:[ordered_set,public,{write_concurrency,true},{read_concurrency,true}]
[set,public,{write_concurrency,true},{read_concurrency,true}]