Skip to content

Instantly share code, notes, and snippets.

@lpgauth
Last active July 15, 2016 14:45
Show Gist options
  • Save lpgauth/b54cb113700fc1dfa29fb4111b94827b to your computer and use it in GitHub Desktop.
Save lpgauth/b54cb113700fc1dfa29fb4111b94827b to your computer and use it in GitHub Desktop.
-module(flare_timing).
-export([
bench/0
]).
%% public
bench() ->
bench("random_1", fun () -> random_1(1000000) end, 1000000, 50),
bench("random_2", fun () -> random_2(1000000) end, 1000000, 50),
bench("random_3", fun () -> random_3(1000000) end, 1000000, 50),
bench("server_name_1", fun () -> server_name_1(<<"test">>, 1) end, 1000000, 50),
bench("server_name_2", fun () -> server_name_2(<<"test">>, 1) end, 1000000, 50).
%% private
bench(Name, Fun, N, P) ->
R = timing:function(Fun, N, P),
{_, Value} = lists:keyfind(arithmetic_mean, 1, R),
{_, Value2} = lists:keyfind(percentile, 1, R),
io:format("~s: mean ~p~n", [Name, Value]),
io:format("~s percentile ~p~n", [Name, Value2]).
random_1(N) ->
rand:uniform(N).
random_2(N) ->
erlang:phash2({self(), os:timestamp()}, N) + 1.
random_3(N) ->
granderl:uniform(N).
server_name_1(Topic, Index) ->
list_to_atom("flare_topic_" ++ binary_to_list(Topic) ++
"_" ++ integer_to_list(Index)).
server_name_2(<<"test">>, 1) ->
flare_topic_test_1.
@lpgauth
Copy link
Author

lpgauth commented Jul 15, 2016

1> flare_timing:bench().
random_1: mean 4.209262
random_1 percentile [{50,0},{75,1},{90,1},{95,1},{99,2},{999,1323}]
random_2: mean 2.329883
random_2 percentile [{50,0},{75,0},{90,1},{95,1},{99,1},{999,20}]
server_name_1: mean 6.475042
server_name_1 percentile [{50,1},{75,1},{90,1},{95,1},{99,2},{999,500}]
server_name_2: mean 1.208335
server_name_2 percentile [{50,0},{75,0},{90,1},{95,1},{99,1},{999,9}]
ok

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment