-
Notifications
You must be signed in to change notification settings - Fork 7
/
tpcc_parameters.py
168 lines (156 loc) · 8.46 KB
/
tpcc_parameters.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
import argparse
import benchmark
import os
import getpass
import shutil
import commands
import copy
def clear_dir(path):
print "Clearing directory:", path
if not os.path.exists(path):
return
for root, dirs, files in os.walk(path):
for f in files:
os.unlink(os.path.join(root, f))
for d in dirs:
shutil.rmtree(os.path.join(root, d))
def clear_file(filename):
if os.path.isfile(filename):
os.remove(filename)
print "Deleted file:", filename
def reset_persistency_directory():
if not args["manual"]:
if "hyriseDBPath" in kwargs:
clear_dir(os.path.join(kwargs["hyriseDBPath"], "persistency"))
def reset_nvram_directory():
if not args["manual"]:
pmfs_data = os.path.expandvars("/mnt/pmfs/$USER/hyrisedata/")
clear_dir(pmfs_data)
hyrise_tpcc = os.path.expandvars("/mnt/pmfs/$USER/hyrise_tpcc")
txmgr = os.path.expandvars("/mnt/pmfs/$USER/txmgr.bin")
hyrise = os.path.expandvars("/mnt/pmfs/$USER/hyrise")
clear_file(hyrise)
clear_file(hyrise_tpcc)
clear_file(txmgr)
aparser = argparse.ArgumentParser(description='Python implementation of the TPC-C Benchmark for HYRISE')
aparser.add_argument('--scalefactor', default=1, type=float, metavar='SF',
help='Benchmark scale factor')
aparser.add_argument('--warehouses', default=1, type=int, metavar='W',
help='Number of Warehouses')
aparser.add_argument('--duration', default=20, type=int, metavar='D',
help='How long to run the benchmark in seconds')
aparser.add_argument('--clients', default=-1, type=int, metavar='N',
help='The number of blocking clients to fork (note: this overrides --clients-min/--clients-max')
aparser.add_argument('--clients-min', default=1, type=int, metavar='N',
help='The minimum number of blocking clients to fork')
aparser.add_argument('--clients-max', default=1, type=int, metavar='N',
help='The maximum number of blocking clients to fork')
aparser.add_argument('--clients-step', default=1, type=int, metavar='N',
help='The step-width for the number of clients to fork')
aparser.add_argument('--no-load', action='store_true',
help='Disable loading the data')
aparser.add_argument('--no-execute', action='store_true',
help='Disable executing the workload')
aparser.add_argument('--host', default="localhost", type=str, metavar="H",
help='IP on which HYRISE should be run remotely')
aparser.add_argument('--remoteUser', default=getpass.getuser(), type=str, metavar="R",
help='remote User for remote host on which HYRISE should be run remotely')
aparser.add_argument('--remotePath', default="/home/" + getpass.getuser() +"/benchmark", type=str,
help='path of benchmark folder on remote host')
aparser.add_argument('--port', default=5001, type=int, metavar="P",
help='Port on which HYRISE should be run')
aparser.add_argument('--threads', default=0, type=int, metavar="T",
help='Number of server threadsto use')
aparser.add_argument('--warmup', default=5, type=int,
help='Warmuptime before logging is activated')
aparser.add_argument('--manual', action='store_true',
help='Do not build and start a HYRISE instance (note: a HYRISE server must be running on the specified port)')
aparser.add_argument('--stdout', action='store_true',
help='Print HYRISE server\'s stdout to console')
aparser.add_argument('--stderr', action='store_true',
help='Print HYRISE server\'s stderr to console')
aparser.add_argument('--rebuild', action='store_true',
help='Force `make clean` before each build')
aparser.add_argument('--regenerate', action='store_true',
help='Force regeneration of TPC-C table files')
aparser.add_argument('--perfdata', default=False, action='store_true',
help='Collect additional performance data. Slows down benchmark.')
aparser.add_argument('--json', default=False, action='store_true',
help='Use JSON queries instead of stored procedures.')
aparser.add_argument('--ab', default=None,
help='Queryfile with prepared requests. If specified ab tool is used to fire queries.')
aparser.add_argument('--verbose', default=1,
help='Verbose output level. Default is 1. Set to 0 if nothing should be printed.')
aparser.add_argument('--abCore', default=2,
help='Core to bind ab to.')
aparser.add_argument('--tabledir', default=None, type=str, metavar="T",
help='Directory for TPCC tables to use.')
aparser.add_argument('--genCount', default=None, type=str,
help='Number of queries to generate')
aparser.add_argument('--genFile', default=None, type=str, metavar="T",
help='File to store generated queries')
aparser.add_argument('--onlyNeworders', default=False, action='store_true',
help='Only do new-order transactions. Otherwise full mix of tpcc transactions is executed/generated.')
aparser.add_argument('--csv', default=False, action='store_true',
help='Load data from csv files and do not user binary import.')
aparser.add_argument('--vtune', default=None, type=str,
help='Automatically resume running vTune session once load is complete and stop when benchmark is done (implies --manual) - give vTune project folder (e.g. ~/intel/amplxe/projects/hyrise/) - assumes vTune environment is set (i.e., amplxe-cl exists)')
aparser.add_argument('--nodes', default=None, type=str,
help='NUMA nodes for Hyrise Worker threads.')
args = vars(aparser.parse_args())
if args["tabledir"] == None:
print "Please specify a table directory."
exit(0)
else:
args["tabledir"] = os.path.abspath(args["tabledir"])
print "Using table directory:", args["tabledir"]
def create_benchmark(name, settings_kwargs, groupId, parameters, benchmark_kwargs):
runId = str(parameters).replace(",", "@")
s = benchmark.Settings(name, **settings_kwargs)
benchmark_kwargs = copy.copy(benchmark_kwargs)
benchmark_kwargs["nodes"] = 1
benchmark_kwargs["memNode"] = 1
return benchmark.TPCCBenchmark(groupId, runId, s, **benchmark_kwargs)
def create_benchmark_none(name, groupId, parameters, benchmark_kwargs):
settings_kwargs = {"PERSISTENCY":"NONE"}
return create_benchmark(name, settings_kwargs, groupId, parameters, benchmark_kwargs)
def create_benchmark_logger(name, groupId, parameters, benchmark_kwargs, windowsize_ms, checkpoint_interval_ms):
reset_persistency_directory()
settings_kwargs = {"PERSISTENCY":"BUFFEREDLOGGER"}
benchmark_kwargs = copy.copy(benchmark_kwargs)
benchmark_kwargs["commitWindow"] = windowsize_ms
benchmark_kwargs["checkpointInterval"] = checkpoint_interval_ms
return create_benchmark(name, settings_kwargs, groupId, parameters, benchmark_kwargs)
def create_benchmark_nvram(name, groupId, parameters, benchmark_kwargs):
reset_nvram_directory()
settings_kwargs = {"PERSISTENCY":"NVRAM", "NVRAM_FILENAME":"hyrise_tpcc"}
return create_benchmark(name, settings_kwargs, groupId, parameters, benchmark_kwargs)
kwargs = {
"remoteUser" : args["remoteUser"],
"remotePath" : args["remotePath"],
"remote" : args["host"] is not "localhost",
"host" : args["host"],
"port" : args["port"],
"manual" : args["manual"],
"warmuptime" : args["warmup"],
"runtime" : args["duration"],
"warehouses" : args["warehouses"],
"benchmarkQueries" : [],
"prepareQueries" : [],
"showStdout" : args["stdout"],
"showStderr" : args["stderr"],
"rebuild" : args["rebuild"],
"regenerate" : args["regenerate"],
"noLoad" : args["no_load"],
"serverThreads" : args["threads"],
"collectPerfData" : args["perfdata"],
"useJson" : args["json"],
"abQueryFile" : args["ab"],
"abCore" : args["abCore"],
"verbose" : args["verbose"],
"tabledir" : args["tabledir"],
"onlyNeworders" : args["onlyNeworders"],
"csv" : args["csv"],
"vtune" : args["vtune"],
"nodes" : args["nodes"]
}