-
Notifications
You must be signed in to change notification settings - Fork 3k
Open
Labels
bugIssue is reported as a bugIssue is reported as a bugteam:VMAssigned to OTP team VMAssigned to OTP team VM
Description
Describe the bug
It seems that binary_to_term got slower.
To Reproduce
I used the following simple way to generate a rather large term and then N copies of that term as a binary in a list.
On each of the copies we run binary_to_term. Expectation is that it is equally fast as for OTP-26.1.2... but it isn't.
On OTP26, roughly:
Erlang/OTP 26 [erts-14.2.1] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit]
Eshell V14.2.1 (press Ctrl+G to abort, type help(). for help)
3> [ppp:test(100) || _ <- lists:seq(1, 10)], ok.
Took 108.98 ms
Took 80.54 ms
Took 80.28 ms
Took 80.18 ms
...
ok
4> [ppp:test(1000) || _ <- lists:seq(1, 10)], ok.
Took 921.97 ms
Took 908.09 ms
Took 907.46 ms
...
ok
5> [ppp:test(10000) || _ <- lists:seq(1, 10)], ok.
Took 12371.10 ms
Took 12916.74 ms
Took 12741.55 ms
...
But on the latest master: source-8504d0e0b8 the 10k test gets much slower!
Erlang/OTP 27 [RELEASE CANDIDATE 2] [erts-14.2.3] [source-8504d0e0b8] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit]
Eshell V14.2.3 (press Ctrl+G to abort, type help(). for help)
1> [ppp:test(100) || _ <- lists:seq(1, 10)], ok.
Took 104.34 ms
Took 96.72 ms
Took 97.04 ms
...
ok
2> [ppp:test(1000) || _ <- lists:seq(1, 10)], ok.
Took 1083.05 ms
Took 1079.13 ms
Took 1075.11 ms
...
ok
3> [ppp:test(10000) || _ <- lists:seq(1, 10)], ok.
Took 14786.23 ms
Took 14768.29 ms
Took 15070.95 ms
...
Test program
-module(ppp).
-compile([export_all, nowarn_export_all]).
test(N) ->
erlang:garbage_collect(),
Terms = terms(10, 3),
%% N copies of the same binary
Bins = lists:duplicate(N, term_to_binary(Terms)),
{T, _} = timer:tc(fun() -> b2t(Bins) end),
io:format("Took ~.2f ms\n", [T / 1000]).
terms(L, 0) ->
[ {I, crypto:strong_rand_bytes(8)} || I <- lists:seq(1, L)];
terms(L, Depth) ->
[ terms(L, Depth-1) || _ <- lists:seq(1, L) ].
b2t([]) ->
ok;
b2t([B | Bs]) ->
T = binary_to_term(B),
[T | b2t(Bs)].
Expected behavior
Equal speeds are expected
Affected versions
This seems introduced in commit: 24ef4cb for OTP27.
The last commit with faster times is: 49024e8
Additional context
This is observed when testing riak and may be related to issue: #8229
lin72h
Metadata
Metadata
Assignees
Labels
bugIssue is reported as a bugIssue is reported as a bugteam:VMAssigned to OTP team VMAssigned to OTP team VM