diff options
-rw-r--r-- | lib/crypto/test/crypto_bench_SUITE.erl | 63 |
1 files changed, 38 insertions, 25 deletions
diff --git a/lib/crypto/test/crypto_bench_SUITE.erl b/lib/crypto/test/crypto_bench_SUITE.erl index e1fd0a63e5..c66a27f0c8 100644 --- a/lib/crypto/test/crypto_bench_SUITE.erl +++ b/lib/crypto/test/crypto_bench_SUITE.erl @@ -33,29 +33,39 @@ suite() -> [%%{ct_hooks,[{ts_install_cth,[{nodenames,2}]}]}, all() -> [ - {group, ciphers_128} + {group, textblock_256} ]. groups() -> [ - {ciphers_128, [{repeat, 3}], [{group,textblock_256} + {textblock_256, [], [ + {group, ciphers_128}, + {group, ciphers_256} + ]}, + + {ciphers_128, [{repeat, 5}], [ + block, + stream ]}, - {textblock_256, [{repeat,2}], [ - block, - stream - ]} + {ciphers_256, [{repeat, 5}], [ + block, + stream, + chacha + ]} ]. %%%---------------------------------------------------------------- %%% -init_per_suite(Config) -> +init_per_suite(Config0) -> try crypto:start() of _ -> [{_,_,Info}] = crypto:info_lib(), ct:comment("~s",[Info]), ct:pal("Crypto version: ~p~n~n~p",[Info,crypto:supports()]), - [{sec_goal,5} | Config] + Config1 = measure_openssl_aes_cbc([128,256], Config0), + calibrate([{sec_goal,10} | Config1]) + catch _:_ -> {fail, "Crypto did not start"} end. @@ -65,15 +75,11 @@ end_per_suite(_Config) -> %%%---------------------------------------------------------------- %%% -init_per_group(Group, Config0) -> - ct:pal("~p(~p,..)",[?FUNCTION_NAME,Group]), - - Config = calibrate(Config0), +init_per_group(Group, Config) -> case atom_to_list(Group) of "ciphers_"++KeySizeStr -> KeySize = list_to_integer(KeySizeStr), - [{key_size,KeySize} - | measure_openssl_aes_cbc(KeySize, Config)]; + [{key_size,KeySize} | Config]; "textblock_"++BlockSizeStr -> BlockSize = list_to_integer(BlockSizeStr), @@ -87,45 +93,51 @@ end_per_group(_Group, Config) -> Config. -measure_openssl_aes_cbc(KeySize, Config) -> - BLno_acc = [baseline(aes_cbc, KeySize, false)], +measure_openssl_aes_cbc(KeySizes, Config) -> + BLno_acc = [baseline(aes_cbc, KeySize, false) || KeySize <- KeySizes], ct:pal("Non-accelerated baseline encryption time [µs/block]:~n~p", [BLno_acc]), - BLacc = [baseline(aes_cbc, KeySize, true)], + BLacc = [baseline(aes_cbc, KeySize, true) || KeySize <- KeySizes], ct:pal("Possibly accelerated baseline encryption time [µs/block]:~n~p", [BLacc]), [{acc,BLacc}, {no_acc,BLno_acc} | Config]. calibrate(Config) -> - Secs = proplists:get_value(sec_goal, Config, 5), + Secs = proplists:get_value(sec_goal, Config, 10), {_,Empty} = data(empty, 0, 0), - {Ne,Te} = run1(Secs*2000, Empty), + {Ne,Te} = run1(Secs*3000, Empty), + report(["Overhead"], Te/Ne), [{overhead,Te/Ne} | Config]. %%%================================================================ %%% %%% block(Config) -> - run_cryptos([aes_cbc, aes_gcm, aes_ccm, chacha20_poly1305], + run_cryptos([aes_cbc, aes_gcm, aes_ccm], Config). stream(Config) -> - run_cryptos([aes_ctr, chacha20], + run_cryptos([aes_ctr], + Config). + +chacha(Config) -> + run_cryptos([chacha20, chacha20_poly1305], Config). + %%%================================================================ %%% %%% run_cryptos(Cryptos, Config) -> - run_cryptos(Cryptos, 1, Config). - -run_cryptos(Cryptos, Factor, Config) -> KeySize = proplists:get_value(key_size, Config), BlockSize = proplists:get_value(block_size, Config), MilliSecGoal = 1000*proplists:get_value(sec_goal,Config), OverHead = proplists:get_value(overhead, Config, 0), [try - Factor*run(Crypto,KeySize,BlockSize,MilliSecGoal) - OverHead + TimePerOpBrutto = run(Crypto,KeySize,BlockSize,MilliSecGoal), + %% ct:pal("Brutto: ~p Overhead: ~p (~.2f %) Netto: ~p", + %% [TimePerOpBrutto, OverHead, 100*OverHead/TimePerOpBrutto,TimePerOpBrutto - OverHead]), + TimePerOpBrutto - OverHead of TimePerOp -> % µs %% First, Report speed of encrypting blocks of 1000. [blocks/sec] @@ -263,6 +275,7 @@ run1(MilliSecGoal, Funs) -> Pid = spawn(fun() -> {Fi,Fu,Ff} = Funs, Ctx0 = Fi(), + erlang:garbage_collect(), T0 = start_time(), {N,Ctx} = loop(Fu, Ctx0, 0), T = elapsed_time(T0), |