"git@developer.sourcefind.cn:gaoqiong/composable_kernel.git" did not exist on "96ee9571e2c96ba6eb6972da1be75453d6c6e9fa"
Commit 7ebf2dd4 authored by Antoine Kaufmann's avatar Antoine Kaufmann
Browse files

experiemnts: support for gem5 checkpoints

parent c73496c5
...@@ -155,12 +155,16 @@ class Experiment(object): ...@@ -155,12 +155,16 @@ class Experiment(object):
return cores return cores
class ExpEnv(object): class ExpEnv(object):
def __init__(self, repo_path, workdir): def __init__(self, repo_path, workdir, cpdir):
self.repodir = os.path.abspath(repo_path) self.repodir = os.path.abspath(repo_path)
self.workdir = os.path.abspath(workdir) self.workdir = os.path.abspath(workdir)
self.cpdir = os.path.abspath(cpdir)
self.qemu_img_path = self.repodir + '/qemu/qemu-img' self.qemu_img_path = self.repodir + '/qemu/qemu-img'
self.qemu_path = self.repodir + '/qemu/x86_64-softmmu/qemu-system-x86_64' self.qemu_path = self.repodir + '/qemu/x86_64-softmmu/qemu-system-x86_64'
self.qemu_kernel_path = self.repodir + '/images/bzImage' self.qemu_kernel_path = self.repodir + '/images/bzImage'
self.gem5_path = self.repodir + '/gem5/build/X86/gem5.opt'
self.gem5_py_path = self.repodir + '/gem5/configs/cosim/cosim.py'
self.gem5_kernel_path = self.repodir + '/images/vmlinux'
def hdcopy_path(self, sim): def hdcopy_path(self, sim):
return '%s/hdcopy.%s' % (self.workdir, sim.name) return '%s/hdcopy.%s' % (self.workdir, sim.name)
...@@ -168,6 +172,9 @@ class ExpEnv(object): ...@@ -168,6 +172,9 @@ class ExpEnv(object):
def hd_path(self, hd_name): def hd_path(self, hd_name):
return '%s/images/output-%s/%s' % (self.repodir, hd_name, hd_name) return '%s/images/output-%s/%s' % (self.repodir, hd_name, hd_name)
def hd_raw_path(self, hd_name):
return '%s/images/output-%s/%s.raw' % (self.repodir, hd_name, hd_name)
def cfgtar_path(self, sim): def cfgtar_path(self, sim):
return '%s/cfg.%s.tar' % (self.workdir, sim.name) return '%s/cfg.%s.tar' % (self.workdir, sim.name)
...@@ -180,6 +187,12 @@ class ExpEnv(object): ...@@ -180,6 +187,12 @@ class ExpEnv(object):
def nic_shm_path(self, sim): def nic_shm_path(self, sim):
return '%s/nic.shm.%s' % (self.workdir, sim.name) return '%s/nic.shm.%s' % (self.workdir, sim.name)
def gem5_outdir(self, sim):
return '%s/gem5-out.%s' % (self.workdir, sim.name)
def gem5_cpdir(self, sim):
return '%s/gem5-cp.%s' % (self.cpdir, sim.name)
class ExpOutput(object): class ExpOutput(object):
def __init__(self, exp): def __init__(self, exp):
self.exp_name = exp.name self.exp_name = exp.name
......
...@@ -98,13 +98,14 @@ class Gem5Host(HostSim): ...@@ -98,13 +98,14 @@ class Gem5Host(HostSim):
def resreq_mem(self): def resreq_mem(self):
return 4096 return 4096
def prep_cmds(self, env):
return [f'mkdir -p {env.gem5_cpdir(self)}']
def run_cmd(self, env): def run_cmd(self, env):
cpu_type = self.cpu_type cpu_type = self.cpu_type
if env.create_cp: if env.create_cp:
cpu_type = self.cpu_type_cp cpu_type = self.cpu_type_cp
self.cp_cpu_type
cmd = (f'{env.gem5_path} --outdir={env.gem5_outdir(self)} ' cmd = (f'{env.gem5_path} --outdir={env.gem5_outdir(self)} '
f'{env.gem5_py_path} --caches --l2cache --l3cache ' f'{env.gem5_py_path} --caches --l2cache --l3cache '
'--l1d_size=32kB --l1i_size=32kB --l2_size=2MB --l3_size=32MB ' '--l1d_size=32kB --l1i_size=32kB --l2_size=2MB --l3_size=32MB '
......
import modes.experiments as exp
import modes.simulators as sim
import modes.nodeconfig as node
e = exp.Experiment('gem5-i40e-pair')
e.timeout = 5 * 60
e.checkpoint = True
net = sim.SwitchNet()
e.add_network(net)
nic_a = sim.I40eNIC()
nic_a.set_network(net)
e.add_nic(nic_a)
host_a = sim.Gem5Host()
host_a.cpu_type = 'X86KvmCPU'
host_a.name = 'server'
host_a.node_config = node.I40eLinuxNode()
host_a.node_config.sim = 'gem5' # FIXME
host_a.node_config.ip = '10.0.0.1'
host_a.node_config.app = node.IperfTCPServer()
host_a.add_nic(nic_a)
e.add_host(host_a)
for i in range (0, 1):
nic_b = sim.I40eNIC()
nic_b.set_network(net)
e.add_nic(nic_b)
host_b = sim.Gem5Host()
host_b.cpu_type = 'X86KvmCPU'
host_b.name = 'client.%d' % i
host_b.wait = True
host_b.node_config = node.I40eLinuxNode()
host_b.node_config.sim = 'gem5' # FIXME
host_b.node_config.ip = '10.0.0.%d' % (2 + i)
host_b.node_config.app = node.IperfTCPClient()
host_b.add_nic(nic_b)
e.add_host(host_b)
experiments = [e]
...@@ -32,6 +32,8 @@ g_env.add_argument('--workdir', metavar='DIR', type=str, ...@@ -32,6 +32,8 @@ g_env.add_argument('--workdir', metavar='DIR', type=str,
default='./out/', help='Work directory base') default='./out/', help='Work directory base')
g_env.add_argument('--outdir', metavar='DIR', type=str, g_env.add_argument('--outdir', metavar='DIR', type=str,
default='./out/', help='Output directory base') default='./out/', help='Output directory base')
g_env.add_argument('--cpdir', metavar='DIR', type=str,
default='./out/', help='Checkpoint directory base')
g_par = parser.add_argument_group('Parallel Runtime') g_par = parser.add_argument_group('Parallel Runtime')
g_par.add_argument('--parallel', dest='runtime', action='store_const', g_par.add_argument('--parallel', dest='runtime', action='store_const',
...@@ -69,8 +71,9 @@ def add_exp(e, run, prereq, create_cp, restore_cp): ...@@ -69,8 +71,9 @@ def add_exp(e, run, prereq, create_cp, restore_cp):
return None return None
workdir = '%s/%s/%d' % (args.workdir, e.name, run) workdir = '%s/%s/%d' % (args.workdir, e.name, run)
cpdir = '%s/%s/%d' % (args.cpdir, e.name, 0)
env = exp.ExpEnv(args.repo, workdir) env = exp.ExpEnv(args.repo, workdir, cpdir)
env.create_cp = create_cp env.create_cp = create_cp
env.restore_cp = restore_cp env.restore_cp = restore_cp
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment