elixir基准测试记录

jifangege 2019-09-07

elixir基准测试

代码见elixir_basic_benchmark

测试变量

Operating System: Linux"
CPU Information: Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz
Number of Available Cores: 8
Available memory: 11.70 GB
Elixir 1.7.3
Erlang 21.0

总表

操作耗时
10 members lists ++ 100 members lists0.02μs
100w process dict get/put/delete0.03μs
map get0.03μs
map put/delete0.05μs
100w ets set/bag/duplicate_bag read0.1μs
100 members lists ++ 10 members lists0.02μs
100w ets ordered_set read0.3μs
keyfind 1000 pos at 5001.5μs
spawn 进程2μs

ets

100w条数据的ets表. 100次读取耗时如下.

Name                                                 ips        average  deviation         median         99th %
ets_bag_without_read_concurrency                 75.57 K       13.23 μs   ±106.18%          12 μs          47 μs
ets_set_without_read_concurrency                 75.45 K       13.25 μs   ±125.17%          11 μs          55 μs
ets_duplicate_bag_without_read_concurrency       68.65 K       14.57 μs   ±134.46%          12 μs          66 μs
ets_duplicate_bag_with_read_concurrency          61.99 K       16.13 μs    ±93.12%          14 μs          54 μs
ets_bag_with_read_concurrency                    61.13 K       16.36 μs    ±96.35%          15 μs          54 μs
ets_set_with_read_concurrency                    58.37 K       17.13 μs   ±114.66%          14 μs          65 μs
ets_ordered_set_without_read_concurrency         24.44 K       40.92 μs    ±83.32%          32 μs         162 μs
ets_ordered_set_with_read_concurrency            23.70 K       42.20 μs    ±59.90%          35 μs         129 μs

100w条数据的ets表. 4进程100次并发读取耗时如下.

Name                                                 ips        average  deviation         median         99th %
ets_set_with_read_concurrency                    50.08 K       19.97 μs   ±218.08%          19 μs          58 μs
ets_duplicate_bag_with_read_concurrency          48.09 K       20.79 μs    ±88.09%          20 μs          64 μs
ets_bag_with_read_concurrency                    46.98 K       21.29 μs    ±68.07%          20 μs          63 μs
ets_set_without_read_concurrency                 32.66 K       30.61 μs    ±41.88%          28 μs          68 μs
ets_bag_without_read_concurrency                 31.29 K       31.96 μs    ±45.26%          28 μs          72 μs
ets_duplicate_bag_without_read_concurrency       31.27 K       31.98 μs    ±44.26%          29 μs          72 μs
ets_ordered_set_without_read_concurrency         16.90 K       59.18 μs    ±35.78%          53 μs         120 μs
ets_ordered_set_with_read_concurrency            16.73 K       59.77 μs    ±39.17%          61 μs         124 μs

spawn process

创建100个进程耗时如下.

Name            ips        average  deviation         median         99th %
spawn        5.40 K      185.15 μs    ±43.21%         205 μs         350 μs

process dict get/put/delete

100w条数据的process dict, 1000次get/delete/put/put and delete耗时如下.

Name                          ips        average  deviation         median         99th %
test get                  33.02 K       30.28 μs    ±42.62%          28 μs          70 μs
test delete               30.16 K       33.15 μs    ±40.02%          31 μs          77 μs
test put                  25.07 K       39.89 μs    ±24.66%          37 μs          86 μs
test put and delete       17.45 K       57.32 μs    ±21.14%          54 μs         108 μs

map get/put

看erlang源码发现, 若size小于MAP_SMALL_MAP_LIMIT(32), 则为flat_map. 故对map size为31, 10000分别测试.

Name                        ips        average  deviation         median         99th %
test small get         278.62 K        3.59 μs    ±45.60%        3.30 μs        8.10 μs
test large get         195.21 K        5.12 μs   ±320.97%           5 μs          19 μs
test small put         159.15 K        6.28 μs   ±334.82%           5 μs          30 μs
test small delete      146.99 K        6.80 μs   ±299.38%           5 μs          56 μs
test large delete       99.32 K       10.07 μs   ±333.88%           7 μs          67 μs
test large put          79.47 K       12.58 μs   ±144.02%          10 μs          83 μs
test large merge        35.25 K       28.37 μs    ±62.48%          25 μs         105 μs
test small merge        23.99 K       41.68 μs    ±23.69%          38 μs          84 μs

list

++

应将较小的list放左边.

Name                                 ips        average  deviation         median         99th %
10 members ++ 100 members       31.52 M      0.0317 μs  ±1658.39%      0.0200 μs       0.180 μs
100 members ++ 10 members        6.20 M       0.161 μs   ±127.63%       0.130 μs        0.72 μs

keyfind

list 搜索是线性时间复杂度.

Name                                 ips        average  deviation         median         99th %
keyfind 1000 pos at 1       29623.30 K      0.0338 μs    ±33.88%      0.0300 μs      0.0800 μs
keyfind 1000 pos at 500       615.29 K        1.63 μs    ±22.16%        1.55 μs        2.93 μs
keyfind 1000 pos at 1000      288.02 K        3.47 μs    ±38.52%        3.20 μs        7.70 μs
keydelete 1000 pos at 1       35960.25 K      0.0278 μs    ±27.15%      0.0260 μs      0.0650 μs
keydelete 1000 pos at 500       181.93 K        5.50 μs    ±49.39%        5.10 μs       11.30 μs
keydelete 1000 pos at 1000       89.13 K       11.22 μs   ±127.23%          10 μs          35 μs

flatten

Name                                 ips        average  deviation         median         99th %
10 100 member list flatten      113.45 K        8.81 μs   ±394.86%           7 μs          31 μs
100 10 member list flatten      104.56 K        9.56 μs   ±287.26%           8 μs          32 μs

相关推荐

LustrousElixir / 0评论 2013-02-25

探手摘星辰 / 0评论 2015-08-02