1: %% 2: %% %CopyrightBegin% 3: %% 4: %% Copyright Ericsson AB 1996-2013. All Rights Reserved. 5: %% 6: %% The contents of this file are subject to the Erlang Public License, 7: %% Version 1.1, (the "License"); you may not use this file except in 8: %% compliance with the License. You should have received a copy of the 9: %% Erlang Public License along with this software. If not, it can be 10: %% retrieved online at http://www.erlang.org/. 11: %% 12: %% Software distributed under the License is distributed on an "AS IS" 13: %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 14: %% the License for the specific language governing rights and limitations 15: %% under the License. 16: %% 17: %% %CopyrightEnd% 18: %% 19: 20: %% 21: -module(mnesia_measure_test). 22: -author('hakan@erix.ericsson.se'). 23: -compile([export_all]). 24: 25: -include("mnesia_test_lib.hrl"). 26: 27: init_per_testcase(Func, Conf) -> 28: mnesia_test_lib:init_per_testcase(Func, Conf). 29: 30: end_per_testcase(Func, Conf) -> 31: mnesia_test_lib:end_per_testcase(Func, Conf). 32: 33: -define(init(N, Config), 34: mnesia_test_lib:prepare_test_case([{init_test_case, [mnesia]}, 35: delete_schema], 36: N, Config, ?FILE, ?LINE)). 37: 38: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 39: 40: all() -> 41: [{group, prediction}, {group, consumption}, 42: {group, scalability}, {group, benchmarks}]. 43: 44: groups() -> 45: [{prediction, [], 46: [reader_disturbed_by_node_down, 47: writer_disturbed_by_node_down, 48: reader_disturbed_by_node_up, 49: writer_disturbed_by_node_up, 50: reader_disturbed_by_schema_ops, 51: writer_disturbed_by_schema_ops, 52: reader_disturbed_by_checkpoint, 53: writer_disturbed_by_checkpoint, 54: reader_disturbed_by_dump_log, 55: writer_disturbed_by_dump_log, 56: reader_disturbed_by_backup, writer_disturbed_by_backup, 57: reader_disturbed_by_restore, 58: writer_disturbed_by_restore, {group, fairness}]}, 59: {fairness, [], 60: [reader_competing_with_reader, 61: reader_competing_with_writer, 62: writer_competing_with_reader, 63: writer_competing_with_writer]}, 64: {consumption, [], 65: [measure_resource_consumption, 66: determine_resource_leakage]}, 67: {scalability, [], 68: [determine_system_limits, performance_at_min_config, 69: performance_at_max_config, performance_at_full_load, 70: resource_consumption_at_min_config, 71: resource_consumption_at_max_config, 72: resource_consumption_at_full_load]}, 73: {benchmarks, [], 74: [{group, meter}, cost, dbn_meters, 75: measure_all_api_functions, {group, tpcb}]}, 76: {tpcb, [], [ram_tpcb, disc_tpcb, disc_only_tpcb]}, 77: {meter, [], [ram_meter, disc_meter, disc_only_meter]}]. 78: 79: init_per_group(_GroupName, Config) -> 80: Config. 81: 82: end_per_group(_GroupName, Config) -> 83: Config. 84: 85: 86: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 87: 88: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 89: 90: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 91: 92: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 93: 94: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 95: 96: dbn_meters(suite) -> []; 97: dbn_meters(Config) when is_list(Config) -> 98: _Nodes = ?init(3, Config), 99: ?match(ok, mnesia_dbn_meters:start()), 100: ok. 101: 102: 103: tpcb(ReplicaType, Config) -> 104: HarakiriDelay = {tc_timeout, timer:minutes(20)}, 105: Nodes = ?acquire_nodes(2, Config ++ [HarakiriDelay]), 106: Args = [{n_branches, 2}, 107: {n_drivers_per_node, 1}, 108: {replica_nodes, Nodes}, 109: {driver_nodes, [hd(Nodes)]}, 110: {use_running_mnesia, true}, 111: {use_sticky_locks, true}, 112: {replica_type, ReplicaType}], 113: ?match({ok, _}, mnesia_tpcb:start(Args)), 114: ?verify_mnesia(Nodes, []). 115: 116: ram_tpcb(suite) -> []; 117: ram_tpcb(Config) when is_list(Config) -> 118: tpcb(ram_copies, Config). 119: 120: disc_tpcb(suite) -> []; 121: disc_tpcb(Config) when is_list(Config) -> 122: tpcb(disc_copies, Config). 123: 124: disc_only_tpcb(suite) -> []; 125: disc_only_tpcb(Config) when is_list(Config) -> 126: tpcb(disc_only_copies, Config). 127: 128: 129: ram_meter(suite) -> []; 130: ram_meter(Config) when is_list(Config) -> 131: HarakiriDelay = [{tc_timeout, timer:minutes(20)}], 132: Nodes = ?init(3, Config ++ HarakiriDelay), 133: ?match(ok, mnesia_meter:go(ram_copies, Nodes)). 134: 135: disc_meter(suite) -> []; 136: disc_meter(Config) when is_list(Config) -> 137: HarakiriDelay = [{tc_timeout, timer:minutes(20)}], 138: Nodes = ?init(3, Config ++ HarakiriDelay), 139: ?match(ok, mnesia_meter:go(disc_copies, Nodes)). 140: 141: disc_only_meter(suite) -> []; 142: disc_only_meter(Config) when is_list(Config) -> 143: HarakiriDelay = [{tc_timeout, timer:minutes(20)}], 144: Nodes = ?init(3, Config ++ HarakiriDelay), 145: ?match(ok, mnesia_meter:go(disc_only_copies, Nodes)). 146: 147: cost(suite) -> []; 148: cost(Config) when is_list(Config) -> 149: Nodes = ?init(3, Config), 150: ?match(ok, mnesia_cost:go(Nodes)), 151: file:delete("MNESIA_COST").