anchor.diff:      infinite_log_operations_direct_access_test/1,
       infinite_log_set_ttl_test/1,
       infinite_log_age_pruning_test/1,
  -    memory_only_stress_performance_test_base/1,
  -    infinite_log_append_test/1,
  -    infinite_log_append_test_base/1,
  -    infinite_log_list_test/1,
  -    infinite_log_list_test_base/1
  +    infinite_log_append_performance_test/1,
  +    infinite_log_append_performance_test_base/1,
  +    infinite_log_list_performance_test/1,
  +    infinite_log_list_performance_test_base/1
   ]).
   
   % for rpc
  
positive.code:         create_get_performance,
          memory_only_stress_performance_test,
          stress_performance_test,
          infinite_log_append_test,
          infinite_log_list_test
      ]).
  
  -define(DOC(Model), ?DOC(?KEY, Model)).
  
negative.code:     ok.
  
  
  %% @private
  -spec perform_infinite_log_appends(node(), atom(), binary(), integer(), integer(), integer()) -> [integer()].
  perform_infinite_log_appends(Worker, Model, LogId, AppendSize, ProcCount, 1) ->
      AppendFun = fun(_) ->
          AppendLog = str_utils:rand_hex(AppendSize div 2),
          Stopwatch = stopwatch:start(),
          Start = stopwatch:read_millis(Stopwatch),
          ?assertEqual(ok, rpc:call(Worker, Model, infinite_log_append, [LogId, AppendLog])),
          Stop = stopwatch:read_millis(Stopwatch),
          Stop - Start
      end,
      lists_utils:pmap(AppendFun, lists:seq(1, ProcCount));
  perform_infinite_log_appends(Worker, Model, LogId, AppendSize, ProcCount, AppendsPerProcess) ->
      lists:foldl(fun(_, TimesListAcc) ->
          Times = perform_infinite_log_appends(Worker, Model, LogId, AppendSize, ProcCount, 1),
          clock_freezer_mock:simulate_seconds_passing(1),
          lists:zipwith(fun(Time, TimeAcc) -> Time + TimeAcc end, Times, TimesListAcc)
      end, [0 || _ <- lists:seq(1, ProcCount)], lists:seq(1, AppendsPerProcess)).
  
  
  %% @private
  -spec perform_infinite_log_listings(node(), atom(), binary(), map(), integer(), integer()) -> [integer()].
  perform_infinite_log_listings(Worker, Model, LogId, ListOpts, ProcCount, ListingsPerProcess) ->
      ListingFun = fun(_) ->
          Stopwatch = stopwatch:start(),
          Start = stopwatch:read_millis(Stopwatch),
          lists:foreach(fun(_) ->
              ?assertMatch({ok, _}, rpc:call(Worker, Model, infinite_log_list, [LogId, ListOpts]))
          end, lists:seq(1, ListingsPerProcess)),
          Stop = stopwatch:read_millis(Stopwatch),
          Stop - Start
      end,
      lists_utils:pmap(ListingFun, lists:seq(1, ProcCount)).
  