Browse Source

Refactor benchmark.

Roberto Ostinelli 3 years ago
parent
commit
36d14d1412
1 changed files with 18 additions and 37 deletions
  1. 18 37
      test/syn_benchmark.erl

+ 18 - 37
test/syn_benchmark.erl

@@ -32,8 +32,7 @@
     process_loop/0,
     register_on_node/4,
     unregister_on_node/4,
-    wait_registration_propagation/1,
-    wait_unregistration_propagation/0
+    wait_registry_propagation/1
 ]).
 -export([
     start_profiling/0,
@@ -54,7 +53,7 @@ start() ->
     ProcessesPerNode = round(ProcessCount / SlavesCount),
 
     io:format("-----> Starting benchmark~n"),
-    io:format("       --> Nodes: ~w (~w slaves)~n", [SlavesCount + 1, SlavesCount]),
+    io:format("       --> Nodes: ~w / ~w slave(s)~n", [SlavesCount + 1, SlavesCount]),
     io:format("       --> Total processes: ~w (~w / slave node)~n", [ProcessCount, ProcessesPerNode]),
     io:format("       --> Workers per node: ~w~n~n", [WorkersPerNode]),
 
@@ -104,7 +103,7 @@ start() ->
     io:format("      --> MIN: ~p secs.~n", [lists:min(RegRemoteNodesTimes)]),
     io:format("      --> MAX: ~p secs.~n", [lists:max(RegRemoteNodesTimes)]),
 
-    {RegPropagationTimeMs, _} = timer:tc(?MODULE, wait_registration_propagation, [ProcessCount]),
+    {RegPropagationTimeMs, _} = timer:tc(?MODULE, wait_registry_propagation, [ProcessCount]),
     RegPropagationTime = RegPropagationTimeMs / 1000000,
     io:format("----> Eventual additional time to propagate all to master: ~p secs.~n", [RegPropagationTime]),
 
@@ -127,7 +126,7 @@ start() ->
     io:format("      --> MIN: ~p secs.~n", [lists:min(UnregRemoteNodesTimes)]),
     io:format("      --> MAX: ~p secs.~n", [lists:max(UnregRemoteNodesTimes)]),
 
-    {UnregPropagationTimeMs, _} = timer:tc(?MODULE, wait_unregistration_propagation, []),
+    {UnregPropagationTimeMs, _} = timer:tc(?MODULE, wait_registry_propagation, [0]),
     UnregPropagationTime = UnregPropagationTimeMs / 1000000,
     io:format("----> Eventual additional time to propagate all to master: ~p secs.~n", [UnregPropagationTime]),
 
@@ -149,7 +148,7 @@ start() ->
     io:format("      --> MIN: ~p secs.~n", [lists:min(ReRegRemoteNodesTimes)]),
     io:format("      --> MAX: ~p secs.~n", [lists:max(ReRegRemoteNodesTimes)]),
 
-    {ReRegPropagationTimeMs, _} = timer:tc(?MODULE, wait_registration_propagation, [ProcessCount]),
+    {ReRegPropagationTimeMs, _} = timer:tc(?MODULE, wait_registry_propagation, [ProcessCount]),
     ReRegPropagationTime = ReRegPropagationTimeMs / 1000000,
     io:format("----> Eventual additional time to propagate all to master: ~p secs.~n", [ReRegPropagationTime]),
 
@@ -164,7 +163,7 @@ start() ->
     end, PidsMap),
 
     %% wait all unregistered
-    {KillPropagationTimeMs, _} = timer:tc(?MODULE, wait_unregistration_propagation, []),
+    {KillPropagationTimeMs, _} = timer:tc(?MODULE, wait_registry_propagation, [0]),
     KillPropagationTime = KillPropagationTimeMs / 1000000,
     io:format("----> Time to propagate killed process to to master: ~p secs.~n", [KillPropagationTime]),
 
@@ -200,23 +199,14 @@ register_on_node(CollectorPid, WorkersPerNode, FromName, Pids) ->
         end)
     end, WorkerInfo),
     %% wait
-    wait_register_on_node(CollectorPid, 0, WorkersPerNode).
+    Time = wait_done_on_node(CollectorPid, 0, WorkersPerNode),
+    io:format("----> Registered on node ~p on ~p secs.~n", [node(), Time]).
 
 worker_register_on_node(_Name, []) -> ok;
 worker_register_on_node(Name, [Pid | PidsTail]) ->
     ok = syn:register(Name, Pid),
     worker_register_on_node(Name + 1, PidsTail).
 
-wait_register_on_node(CollectorPid, Time, 0) ->
-    io:format("----> Registered on node ~p on ~p secs.~n", [node(), Time]),
-    CollectorPid ! {done, node(), Time};
-wait_register_on_node(CollectorPid, Time, WorkersRemainingCount) ->
-    receive
-        {done, WorkerTime} ->
-            Time1 = lists:max([WorkerTime, Time]),
-            wait_register_on_node(CollectorPid, Time1, WorkersRemainingCount - 1)
-    end.
-
 unregister_on_node(CollectorPid, WorkersPerNode, FromName, ToName) ->
     %% split pids in workers
     ProcessesPerNode = ToName - FromName + 1,
@@ -243,21 +233,22 @@ unregister_on_node(CollectorPid, WorkersPerNode, FromName, ToName) ->
         end)
     end, WorkerInfo),
     %% wait
-    wait_unregister_on_node(CollectorPid, 0, WorkersPerNode).
+    Time = wait_done_on_node(CollectorPid, 0, WorkersPerNode),
+    io:format("----> Unregistered on node ~p on ~p secs.~n", [node(), Time]).
 
 worker_unregister_on_node(FromName, ToName) when FromName > ToName -> ok;
 worker_unregister_on_node(Name, ToName) ->
     ok = syn:unregister(Name),
     worker_unregister_on_node(Name + 1, ToName).
 
-wait_unregister_on_node(CollectorPid, Time, 0) ->
-    io:format("----> Unregistered on node ~p on ~p secs.~n", [node(), Time]),
-    CollectorPid ! {done, node(), Time};
-wait_unregister_on_node(CollectorPid, Time, WorkersRemainingCount) ->
+wait_done_on_node(CollectorPid, Time, 0) ->
+    CollectorPid ! {done, node(), Time},
+    Time;
+wait_done_on_node(CollectorPid, Time, WorkersRemainingCount) ->
     receive
         {done, WorkerTime} ->
             Time1 = lists:max([WorkerTime, Time]),
-            wait_unregister_on_node(CollectorPid, Time1, WorkersRemainingCount - 1)
+            wait_done_on_node(CollectorPid, Time1, WorkersRemainingCount - 1)
     end.
 
 start_processes(Count) ->
@@ -280,24 +271,14 @@ wait_from_all_remote_nodes([RemoteNode | Tail], Times) ->
             wait_from_all_remote_nodes(Tail, [Time | Times])
     end.
 
-wait_registration_propagation(ProcessCount) ->
-    case syn:registry_count(default) of
-        ProcessCount ->
-            ok;
-
-        _ ->
-            timer:sleep(50),
-            wait_registration_propagation(ProcessCount)
-    end.
-
-wait_unregistration_propagation() ->
+wait_registry_propagation(DesiredCount) ->
     case syn:registry_count(default) of
-        0 ->
+        DesiredCount ->
             ok;
 
         _ ->
             timer:sleep(50),
-            wait_unregistration_propagation()
+            wait_registry_propagation(DesiredCount)
     end.
 
 start_profiling() ->