-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexample_experiment_scratch.py
120 lines (100 loc) · 2.96 KB
/
example_experiment_scratch.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
import csv
import sys
from pathlib import Path
from numpy.random import RandomState
from argparse import ArgumentParser
from declace.model import Image, Problem
from declace_simulation_framework.generator.topology import (
BarabasiAlbert,
ErdosRenyi,
TruncatedBarabasiAlbert,
RandomInternet,
WattsStrogatz,
)
from declace_simulation_framework.generator.attribute import (
UniformDiscrete,
MultiModal,
UniformContinuous,
)
from declace_simulation_framework.generator import (
LinkGenerator,
NodeGenerator,
NetworkGenerator,
)
from declace_simulation_framework.simulator import (
Simulator,
InstanceSaboteur,
NodeStorageWobble,
LinkTiedLatencyBandwidthWobble,
ImageSizeWobble, PaperBenchmarkSimulatorScratch
)
from declace_simulation_framework.simulator.saboteurs import NullSaboteur
from declace.utils import enable_logging_channels
from loguru import logger
import loguru
def show_level(record):
print("MESSAGE_LEVEL: ", record["level"].name)
print(record)
return True
if __name__ == "__main__":
import sys
#enable_logging_channels(["DISABLE_LOGGING"])
if len(sys.argv) != 3:
print("Usage: {} [log file] [seed]".format(__file__))
sys.exit(1)
outputfile, seed = sys.argv[1:]
seed = int(seed)
r = RandomState(seed)
g = NetworkGenerator(
TruncatedBarabasiAlbert(n=103, m=3, k=3),
NodeGenerator(
storage=MultiModal(
(UniformDiscrete(8000, 16000), 0.4),
(UniformDiscrete(4000), 0.5),
(UniformDiscrete(2000), 0.1)
),
cost=UniformDiscrete(1, 2, 3, 4, 5),
),
LinkGenerator(
latency=UniformDiscrete(*list(range(1, 11))),
bandwidth=UniformDiscrete(*list(range(25, 1001)))
),
)
images = [
Image("busybox", 4, 15),
Image("memcached", 126, 30),
Image("nginx", 192, 60),
Image("mariadb", 387, 120),
Image("alpine", 8, 15),
Image("traefik", 148, 30),
Image("httpd", 195, 60),
Image("postgres", 438, 120),
Image("ubuntu", 69, 15),
Image("redis", 149, 30),
Image("rabbitmq", 201, 60),
Image("mysql", 621, 120),
]
NUM_EXPERIMENTS = 1000
LOG_FILE = Path(outputfile).open(mode='w')
writer = csv.DictWriter(
LOG_FILE,
delimiter=',',
quoting=csv.QUOTE_MINIMAL,
quotechar="\"",
fieldnames=(
'asp_time',
'heu_time',
'asp_cost',
'heu_cost',
'asp_placement',
'heu_placement',
)
)
writer.writeheader()
for step in range(NUM_EXPERIMENTS):
original_problem = Problem(images, g.generate(r), max_replicas=15)
simulator = PaperBenchmarkSimulatorScratch(original_problem, timeout=45)
dict_row = simulator.simulate()
writer.writerow(dict_row)
LOG_FILE.flush()
LOG_FILE.close()