Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ycai
simbricks
Commits
4c3733a8
Commit
4c3733a8
authored
Jan 21, 2022
by
Antoine Kaufmann
Browse files
experiments: add support for non-NIC pci device simulators
parent
e9c1dcbc
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
60 additions
and
38 deletions
+60
-38
experiments/simbricks/experiments.py
experiments/simbricks/experiments.py
+13
-10
experiments/simbricks/simulators.py
experiments/simbricks/simulators.py
+47
-28
No files found.
experiments/simbricks/experiments.py
View file @
4c3733a8
...
@@ -41,7 +41,7 @@ class Experiment(object):
...
@@ -41,7 +41,7 @@ class Experiment(object):
def
__init__
(
self
,
name
):
def
__init__
(
self
,
name
):
self
.
name
=
name
self
.
name
=
name
self
.
hosts
=
[]
self
.
hosts
=
[]
self
.
nic
s
=
[]
self
.
pcidev
s
=
[]
self
.
networks
=
[]
self
.
networks
=
[]
self
.
metadata
=
{}
self
.
metadata
=
{}
...
@@ -52,10 +52,13 @@ class Experiment(object):
...
@@ -52,10 +52,13 @@ class Experiment(object):
self
.
hosts
.
append
(
sim
)
self
.
hosts
.
append
(
sim
)
def
add_nic
(
self
,
sim
):
def
add_nic
(
self
,
sim
):
for
n
in
self
.
nics
:
self
.
add_pcidev
(
sim
)
if
n
.
name
==
sim
.
name
:
raise
Exception
(
'Duplicate nic name'
)
def
add_pcidev
(
self
,
sim
):
self
.
nics
.
append
(
sim
)
for
d
in
self
.
pcidevs
:
if
d
.
name
==
sim
.
name
:
raise
Exception
(
'Duplicate pcidev name'
)
self
.
pcidevs
.
append
(
sim
)
def
add_network
(
self
,
sim
):
def
add_network
(
self
,
sim
):
for
n
in
self
.
networks
:
for
n
in
self
.
networks
:
...
@@ -65,7 +68,7 @@ class Experiment(object):
...
@@ -65,7 +68,7 @@ class Experiment(object):
def
all_simulators
(
self
):
def
all_simulators
(
self
):
""" All simulators used in experiment. """
""" All simulators used in experiment. """
return
itertools
.
chain
(
self
.
hosts
,
self
.
nic
s
,
self
.
networks
)
return
itertools
.
chain
(
self
.
hosts
,
self
.
pcidev
s
,
self
.
networks
)
def
resreq_mem
(
self
):
def
resreq_mem
(
self
):
mem
=
0
mem
=
0
...
@@ -339,14 +342,14 @@ class ExpEnv(object):
...
@@ -339,14 +342,14 @@ class ExpEnv(object):
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
)
def
nic
_pci_path
(
self
,
sim
):
def
dev
_pci_path
(
self
,
sim
):
return
'%s/
nic
.pci.%s'
%
(
self
.
workdir
,
sim
.
name
)
return
'%s/
dev
.pci.%s'
%
(
self
.
workdir
,
sim
.
name
)
def
nic_eth_path
(
self
,
sim
):
def
nic_eth_path
(
self
,
sim
):
return
'%s/nic.eth.%s'
%
(
self
.
workdir
,
sim
.
name
)
return
'%s/nic.eth.%s'
%
(
self
.
workdir
,
sim
.
name
)
def
nic
_shm_path
(
self
,
sim
):
def
dev
_shm_path
(
self
,
sim
):
return
'%s/
nic
.shm.%s'
%
(
self
.
shm_base
,
sim
.
name
)
return
'%s/
dev
.shm.%s'
%
(
self
.
shm_base
,
sim
.
name
)
def
n2n_eth_path
(
self
,
sim_l
,
sim_c
):
def
n2n_eth_path
(
self
,
sim_l
,
sim_c
):
return
'%s/n2n.eth.%s.%s'
%
(
self
.
workdir
,
sim_l
.
name
,
sim_c
.
name
)
return
'%s/n2n.eth.%s.%s'
%
(
self
.
workdir
,
sim_l
.
name
,
sim_c
.
name
)
...
...
experiments/simbricks/simulators.py
View file @
4c3733a8
...
@@ -70,37 +70,56 @@ class HostSim(Simulator):
...
@@ -70,37 +70,56 @@ class HostSim(Simulator):
pci_latency
=
500
pci_latency
=
500
def
__init__
(
self
):
def
__init__
(
self
):
self
.
nic
s
=
[]
self
.
pcidev
s
=
[]
super
().
__init__
()
super
().
__init__
()
def
full_name
(
self
):
def
full_name
(
self
):
return
'host.'
+
self
.
name
return
'host.'
+
self
.
name
def
add_nic
(
self
,
nic
):
def
add_nic
(
self
,
dev
):
nic
.
name
=
self
.
name
+
'.'
+
nic
.
name
self
.
add_pcidev
(
dev
)
self
.
nics
.
append
(
nic
)
def
add_pcidev
(
self
,
dev
):
dev
.
name
=
self
.
name
+
'.'
+
dev
.
name
self
.
pcidevs
.
append
(
dev
)
def
set_config
(
self
,
nc
):
def
set_config
(
self
,
nc
):
self
.
node_config
=
nc
self
.
node_config
=
nc
def
dependencies
(
self
):
def
dependencies
(
self
):
deps
=
[]
deps
=
[]
for
nic
in
self
.
nics
:
for
dev
in
self
.
pcidevs
:
deps
.
append
(
nic
)
deps
.
append
(
dev
)
deps
.
append
(
nic
.
network
)
if
isinstance
(
dev
,
NICSim
):
deps
.
append
(
dev
.
network
)
return
deps
return
deps
def
wait_terminate
(
self
):
def
wait_terminate
(
self
):
return
self
.
wait
return
self
.
wait
class
NICSim
(
Simulator
):
network
=
None
name
=
''
class
PCIDevSim
(
Simulator
):
name
=
''
sync_mode
=
0
sync_mode
=
0
start_tick
=
0
start_tick
=
0
sync_period
=
500
sync_period
=
500
pci_latency
=
500
pci_latency
=
500
def
__init__
(
self
):
super
().
__init__
()
def
full_name
(
self
):
return
'dev.'
+
self
.
name
def
sockets_cleanup
(
self
,
env
):
return
[
env
.
dev_pci_path
(
self
),
env
.
dev_shm_path
(
self
)]
def
sockets_wait
(
self
,
env
):
return
[
env
.
dev_pci_path
(
self
)]
class
NICSim
(
PCIDevSim
):
network
=
None
eth_latency
=
500
eth_latency
=
500
def
__init__
(
self
):
def
__init__
(
self
):
...
@@ -112,8 +131,8 @@ class NICSim(Simulator):
...
@@ -112,8 +131,8 @@ class NICSim(Simulator):
def
basic_args
(
self
,
env
,
extra
=
None
):
def
basic_args
(
self
,
env
,
extra
=
None
):
cmd
=
'%s %s %s %d %d %d %d %d'
%
\
cmd
=
'%s %s %s %d %d %d %d %d'
%
\
(
env
.
nic
_pci_path
(
self
),
env
.
nic_eth_path
(
self
),
(
env
.
dev
_pci_path
(
self
),
env
.
nic_eth_path
(
self
),
env
.
nic
_shm_path
(
self
),
self
.
sync_mode
,
self
.
start_tick
,
env
.
dev
_shm_path
(
self
),
self
.
sync_mode
,
self
.
start_tick
,
self
.
sync_period
,
self
.
pci_latency
,
self
.
eth_latency
)
self
.
sync_period
,
self
.
pci_latency
,
self
.
eth_latency
)
if
extra
is
not
None
:
if
extra
is
not
None
:
...
@@ -130,11 +149,10 @@ class NICSim(Simulator):
...
@@ -130,11 +149,10 @@ class NICSim(Simulator):
return
'nic.'
+
self
.
name
return
'nic.'
+
self
.
name
def
sockets_cleanup
(
self
,
env
):
def
sockets_cleanup
(
self
,
env
):
return
[
env
.
nic_pci_path
(
self
),
env
.
nic_eth_path
(
self
),
return
super
().
sockets_cleanup
(
env
)
+
[
env
.
nic_eth_path
(
self
)]
env
.
nic_shm_path
(
self
)]
def
sockets_wait
(
self
,
env
):
def
sockets_wait
(
self
,
env
):
return
[
env
.
nic_pci_path
(
self
),
env
.
nic_eth_path
(
self
)]
return
super
().
sockets_wait
(
env
)
+
[
env
.
nic_eth_path
(
self
)]
class
NetSim
(
Simulator
):
class
NetSim
(
Simulator
):
name
=
''
name
=
''
...
@@ -229,11 +247,11 @@ class QemuHost(HostSim):
...
@@ -229,11 +247,11 @@ class QemuHost(HostSim):
else
:
else
:
cmd
+=
' -cpu host -enable-kvm '
cmd
+=
' -cpu host -enable-kvm '
if
len
(
self
.
nics
)
>
0
:
di
=
0
assert
len
(
self
.
nics
)
==
1
for
dev
in
self
.
pcidevs
:
cmd
+=
f
'-chardev socket,path=
{
env
.
nic
_pci_path
(
self
.
nics
[
0
]
)
}
,'
cmd
+=
f
'-chardev socket,path=
{
env
.
dev
_pci_path
(
dev
)
}
,'
cmd
+=
'id=simbrickscd '
cmd
+=
f
'id=simbrickscd
{
di
}
'
cmd
+=
f
'-device simbricks-pci,chardev=simbrickscd'
cmd
+=
f
'-device simbricks-pci,chardev=simbrickscd
{
di
}
'
if
self
.
sync
:
if
self
.
sync
:
cmd
+=
',sync=on'
cmd
+=
',sync=on'
cmd
+=
f
',sync-mode=
{
self
.
sync_mode
}
'
cmd
+=
f
',sync-mode=
{
self
.
sync_mode
}
'
...
@@ -242,6 +260,7 @@ class QemuHost(HostSim):
...
@@ -242,6 +260,7 @@ class QemuHost(HostSim):
else
:
else
:
cmd
+=
',sync=off'
cmd
+=
',sync=off'
cmd
+=
' '
cmd
+=
' '
di
+=
1
return
cmd
return
cmd
...
@@ -293,19 +312,19 @@ class Gem5Host(HostSim):
...
@@ -293,19 +312,19 @@ class Gem5Host(HostSim):
if
env
.
restore_cp
:
if
env
.
restore_cp
:
cmd
+=
'-r 1 '
cmd
+=
'-r 1 '
if
len
(
self
.
nic
s
)
>
0
:
if
len
(
self
.
pcidev
s
)
>
0
:
assert
len
(
self
.
nic
s
)
==
1
assert
len
(
self
.
pcidev
s
)
==
1
# our gem5 python script supports only 1
nic
=
self
.
nic
s
[
0
]
dev
=
self
.
pcidev
s
[
0
]
cmd
+=
f
'--simbricks-pci=
{
env
.
nic
_pci_path
(
nic
)
}
'
cmd
+=
f
'--simbricks-pci=
{
env
.
dev
_pci_path
(
dev
)
}
'
cmd
+=
f
'--simbricks-shm=
{
env
.
nic
_shm_path
(
nic
)
}
'
cmd
+=
f
'--simbricks-shm=
{
env
.
dev
_shm_path
(
dev
)
}
'
if
cpu_type
==
'TimingSimpleCPU'
:
if
cpu_type
==
'TimingSimpleCPU'
:
cmd
+=
'--simbricks-sync '
cmd
+=
'--simbricks-sync '
cmd
+=
f
'--simbricks-sync_mode=
{
self
.
sync_mode
}
'
cmd
+=
f
'--simbricks-sync_mode=
{
self
.
sync_mode
}
'
cmd
+=
f
'--simbricks-pci-lat=
{
self
.
pci_latency
}
'
cmd
+=
f
'--simbricks-pci-lat=
{
self
.
pci_latency
}
'
cmd
+=
f
'--simbricks-sync-int=
{
self
.
sync_period
}
'
cmd
+=
f
'--simbricks-sync-int=
{
self
.
sync_period
}
'
if
isinstance
(
nic
,
I40eNIC
)
or
\
if
isinstance
(
dev
,
I40eNIC
)
or
\
(
isinstance
(
nic
,
MultiSubNIC
)
and
\
(
isinstance
(
dev
,
MultiSubNIC
)
and
\
isinstance
(
nic
.
multinic
,
I40eMultiNIC
)):
isinstance
(
dev
.
multinic
,
I40eMultiNIC
)):
cmd
+=
'--simbricks-type=i40e '
cmd
+=
'--simbricks-type=i40e '
return
cmd
return
cmd
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment