This repository has been archived by the owner on Jul 2, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 15
/
launch_spec2017_experiments.py
156 lines (138 loc) · 5.71 KB
/
launch_spec2017_experiments.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
import os
import sys
from uuid import UUID
from gem5art.artifact import Artifact
from gem5art.run import gem5Run
from gem5art.tasks.tasks import run_gem5_instance
experiments_repo = Artifact.registerArtifact(
command = '',
typ = 'git repo',
name = 'experiment',
path = './',
cwd = './',
documentation = 'local repo to run spec 2017 experiments with gem5'
)
gem5_repo = Artifact.registerArtifact(
command = '''
git clone -b v19.0.0.0 https://gem5.googlesource.com/public/gem5
cd gem5
scons build/X86/gem5.opt -j8
''',
typ = 'git repo',
name = 'gem5',
path = 'gem5/',
cwd = './',
documentation = 'cloned gem5 v19'
)
gem5_binary = Artifact.registerArtifact(
command = 'scons build/X86/gem5.opt -j8',
typ = 'gem5 binary',
name = 'gem5-19',
cwd = 'gem5/',
path = 'gem5/build/X86/gem5.opt',
inputs = [gem5_repo,],
m5_binary = Artifact.registerArtifact(
command = 'make -f Makefile.x86',
typ = 'binary',
name = 'm5',
path = 'gem5/util/m5/m5',
cwd = 'gem5/util/m5',
inputs = [gem5_repo,],
documentation = 'm5 utility'
)
packer = Artifact.registerArtifact(
command = '''
wget https://releases.hashicorp.com/packer/1.4.5/packer_1.4.5_linux_amd64.zip;
unzip packer_1.4.5_linux_amd64.zip;
''',
typ = 'binary',
name = 'packer',
path = 'disk-image/packer',
cwd = 'disk-image',
documentation = 'Program to build disk images. Downloaded sometime in November from hashicorp.'
)
disk_image = Artifact.registerArtifact(
command = './packer build spec2017/spec2017.json',
typ = 'disk image',
name = 'spec2017',
cwd = 'disk-image/',
path = 'disk-image/spec2017/spec2017-image/spec2017',
inputs = [packer, experiments_repo, m5_binary,],
documentation = 'Ubuntu Server with SPEC 2017 installed, m5 binary installed and root auto login'
)
linux_repo = Artifact.registerArtifact(
command = '''
git clone git clone --branch v4.19.83 --depth 1 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/;
mv linux linux-4.19.83
''',
typ = 'git repo',
name = 'linux-4.19.83',
path = 'linux-4.19.83',
cwd = './',
documentation = 'Linux kernel 4.19 source code repo obtained in November'
)
linux_binary = Artifact.registerArtifact(
name = 'vmlinux-4.19.83',
typ = 'kernel',
path = 'linux-4.19.83/vmlinux-4.19.83',
cwd = './',
command = '''
cp linux-configs/config.4.19.83 linux-4.19.83/.config
cd linux-4.19.83
make -j8
cp vmlinux vmlinux-4.19.83
''',
inputs = [experiments_repo, linux_repo,],
documentation = "kernel binary for v4.19.83",
)
run_script_repo = Artifact.registerArtifact(
command = '''
wget https://raw.githubusercontent.com/darchr/gem5art/master/docs/configs-spec-tests/run_spec.py
mkdir -p system
cd system
wget https://raw.githubusercontent.com/darchr/gem5art/master/docs/gem5-configs/configs-spec-tests/system/__init__.py
wget https://raw.githubusercontent.com/darchr/gem5art/master/docs/gem5-configs/configs-spec-tests/system/caches.py
wget https://raw.githubusercontent.com/darchr/gem5art/master/docs/gem5-configs/configs-spec-tests/system/fs_tools.py
wget https://raw.githubusercontent.com/darchr/gem5art/master/docs/gem5-configs/configs-spec-tests/system/system.py
''',
typ = 'git repo',
name = 'gem5-configs',
path = 'gem5-configs',
cwd = './',
documentation = 'gem5 run scripts made specifically for SPEC benchmarks'
)
if __name__ == "__main__":
cpus = ['kvm', 'atomic', 'o3', 'timing']
benchmark_sizes = {'kvm': ['test', 'ref'],
'atomic': ['test'],
'o3': ['test'],
'timing': ['test']
}
benchmarks = ["503.bwaves_r", "507.cactuBSSN_r", "508.namd_r", "510.parest_r", "511.povray_r", "519.lbm_r",
"521.wrf_r", "526.blender_r", "527.cam4_r", "538.imagick_r", "544.nab_r", "549.fotonik3d_r",
"554.roms_r", "997.specrand_fr", "603.bwaves_s", "607.cactuBSSN_s", "619.lbm_s", "621.wrf_s",
"627.cam4_s", "628.pop2_s", "638.imagick_s", "644.nab_s", "649.fotonik3d_s", "654.roms_s",
"996.specrand_fs", "500.perlbench_r", "502.gcc_r", "505.mcf_r", "520.omnetpp_r", "523.xalancbmk_r",
"525.x264_r", "531.deepsjeng_r", "541.leela_r", "548.exchange2_r", "557.xz_r", "999.specrand_ir",
"600.perlbench_s", "602.gcc_s", "605.mcf_s", "620.omnetpp_s", "623.xalancbmk_s", "625.x264_s",
"631.deepsjeng_s", "641.leela_s", "648.exchange2_s", "657.xz_s", "998.specrand_is"]
for cpu in cpus:
for size in benchmark_sizes[cpu]:
for benchmark in benchmarks:
run = gem5Run.createFSRun(
'gem5 19 spec 2017 experiments', # name
'gem5/build/X86/gem5.opt', # gem5_binary
'gem5-configs/run_spec.py', # run_script
'results/{}/{}/{}'.format(cpu, size, benchmark), # relative_outdir
gem5_binary, # gem5_artifact
gem5_repo, # gem5_git_artifact
run_script_repo, # run_script_git_artifact
'linux-4.19.83/vmlinux-4.19.83', # linux_binary
'disk-image/spec2017/spec2017-image/spec2017', # disk_image
linux_binary, # linux_binary_artifact
disk_image, # disk_image_artifact
cpu, benchmark, size, # params
"-z",
timeout = 5 * 24 * 60 * 60 # 5 days
)
run_gem5_instance.apply_async((run,))