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
a73072a9
Unverified
Commit
a73072a9
authored
Jan 21, 2025
by
Jakob Görgen
Browse files
experiments/pyexps/simple_demo: added Iperf client + server and run experiment via python api
parent
3bdd6ef3
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
141 additions
and
106 deletions
+141
-106
experiments/pyexps/simple_demo.py
experiments/pyexps/simple_demo.py
+141
-106
No files found.
experiments/pyexps/simple_demo.py
View file @
a73072a9
...
@@ -20,10 +20,15 @@
...
@@ -20,10 +20,15 @@
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
import
re
import
asyncio
from
matplotlib
import
pyplot
as
plt
from
simbricks.orchestration
import
system
from
simbricks.orchestration
import
system
from
simbricks.orchestration
import
simulation
as
sim
from
simbricks.orchestration
import
simulation
as
sim
from
simbricks.orchestration
import
instantiation
as
inst
from
simbricks.orchestration
import
instantiation
as
inst
from
simbricks.utils
import
base
as
utils_base
from
simbricks.utils
import
base
as
utils_base
from
simbricks.client
import
provider
from
simbricks.client.opus
import
base
as
opus_base
"""
"""
Simple Netperf Example:
Simple Netperf Example:
...
@@ -43,16 +48,19 @@ host_sys: The hosts system confiugration. This choice may also depend on the NIC
...
@@ -43,16 +48,19 @@ host_sys: The hosts system confiugration. This choice may also depend on the NIC
nic_sim: The simulator choice for the nic that is specified by the system. Can
nic_sim: The simulator choice for the nic that is specified by the system. Can
be e.g. 'CorundumBMNICSim' or 'CorundumVerilatorNICSim'
be e.g. 'CorundumBMNICSim' or 'CorundumVerilatorNICSim'
host_sim: The simulator choice for the hosts. Can be e.g. 'sim.QemuSim' or 'sim.Gem5Sim'.
host_sim: The simulator choice for the hosts. Can be e.g. 'sim.QemuSim' or 'sim.Gem5Sim'.
pci_latency: The pci latency between the hosts and the nics
pci_latency: The pci latency between the hosts and the nics
iperf_udp_rates: A list of transfer rates used by the 'IperfUDPClient' determining the transfer rate.
run_synchronized: Bool flag to enable or disable synchronization for the actual
run_synchronized: Bool flag to enable or disable synchronization for the actual
simulation of the virtual prototype.
simulation of the virtual prototype.
"""
"""
nic_sys
=
system
.
Corundum
NIC
nic_sys
=
system
.
IntelI40e
NIC
host_sys
=
system
.
Corundum
LinuxHost
host_sys
=
system
.
I40E
LinuxHost
nic_sim
=
sim
.
CorundumBMNIC
Sim
nic_sim
=
sim
.
I40eNic
Sim
host_sim
=
sim
.
G
em
5
Sim
host_sim
=
sim
.
Q
em
u
Sim
pci_latency
=
10
00
# nanoseconds
pci_latency
=
5
00
# nanoseconds
run_synchronized
=
False
run_synchronized
=
False
iperf_udp_rates
=
[
"150m"
,
"300m"
]
client_name
=
"Sending-Client"
"""
"""
...
@@ -60,103 +68,130 @@ The instantiations list that is used by the SimBricks runtime to create a simula
...
@@ -60,103 +68,130 @@ The instantiations list that is used by the SimBricks runtime to create a simula
"""
"""
instantiations
:
list
[
inst
.
Instantiation
]
=
[]
instantiations
:
list
[
inst
.
Instantiation
]
=
[]
for
rate
in
iperf_udp_rates
:
"""
"""
Specify the system you want to simulate
Specify the system you want to simulate
"""
"""
sys
=
system
.
System
()
sys
=
system
.
System
()
"""
"""
Create HOST0, the client host in our topology
Create HOST0, the client host in our topology
"""
"""
host0
=
host_sys
(
sys
)
host0
=
host_sys
(
sys
)
host0
.
add_disk
(
system
.
DistroDiskImage
(
h
=
host0
,
name
=
"base"
))
host0
.
add_disk
(
system
.
DistroDiskImage
(
h
=
host0
,
name
=
"base"
))
host0
.
add_disk
(
system
.
LinuxConfigDiskImage
(
h
=
host0
))
host0
.
add_disk
(
system
.
LinuxConfigDiskImage
(
h
=
host0
))
"""
"""
Create NIC0, and connect it to HOST0
Create NIC0, and connect it to HOST0
"""
"""
nic0
=
nic_sys
(
sys
)
nic0
=
nic_sys
(
sys
)
nic0
.
add_ipv4
(
"10.0.0.1"
)
nic0
.
add_ipv4
(
"10.0.0.1"
)
host0
.
connect_pcie_dev
(
nic0
)
host0
.
connect_pcie_dev
(
nic0
)
"""
Create HOST1, the server host in our topology
"""
"""
Create HOST1, the server host in our topology
host1
=
host_sys
(
sys
)
"""
host1
.
add_disk
(
system
.
DistroDiskImage
(
h
=
host1
,
name
=
"base"
))
host1
=
host_sys
(
sys
)
host1
.
add_disk
(
system
.
LinuxConfigDiskImage
(
h
=
host1
))
host1
.
add_disk
(
system
.
DistroDiskImage
(
h
=
host1
,
name
=
"base"
))
"""
host1
.
add_disk
(
system
.
LinuxConfigDiskImage
(
h
=
host1
))
Create NIC1, and connect it to HOST1
"""
"""
Create NIC1, and connect it to HOST1
nic1
=
nic_sys
(
sys
)
"""
nic1
.
add_ipv4
(
"10.0.0.2"
)
nic1
=
nic_sys
(
sys
)
host1
.
connect_pcie_dev
(
nic1
)
nic1
.
add_ipv4
(
"10.0.0.2"
)
host1
.
connect_pcie_dev
(
nic1
)
"""
Create an ethernet switch and connect the NICs from client and server to the switch
"""
"""
switch
=
system
.
EthSwitch
(
sys
)
Create an ethernet switch and connect the NICs from client and server to the switch
switch
.
connect_eth_peer_if
(
nic0
.
_eth_if
)
"""
switch
.
connect_eth_peer_if
(
nic1
.
_eth_if
)
switch
=
system
.
EthSwitch
(
sys
)
switch
.
connect_eth_peer_if
(
nic0
.
_eth_if
)
"""
switch
.
connect_eth_peer_if
(
nic1
.
_eth_if
)
Specify the software i.e. applciations to run on the hosts, in this case netperf
"""
client_app
=
system
.
IperfUDPClient
(
h
=
host0
,
server_ip
=
nic1
.
_ip
)
"""
client_app
.
wait
=
True
Specify the software i.e. applciations to run on the hosts, in this case netperf
client_app
.
rate
=
rate
"""
host0
.
add_app
(
client_app
)
client_app
=
system
.
NetperfClient
(
h
=
host0
,
server_ip
=
nic1
.
_ip
)
client_app
.
wait
=
True
server_app
=
system
.
IperfUDPServer
(
h
=
host1
)
client_app
.
duration_tp
=
1
host1
.
add_app
(
server_app
)
client_app
.
duration_lat
=
1
host0
.
add_app
(
client_app
)
"""
Adjust pci latencies of channels connecting hosts and nics
server_app
=
system
.
NetperfServer
(
h
=
host1
)
"""
host1
.
add_app
(
server_app
)
sys
.
latencies
(
amount
=
pci_latency
,
ratio
=
utils_base
.
Time
.
Nanoseconds
,
"""
channel_type
=
system
.
PCIeChannel
,
Adjust pci latencies of channels connecting hosts and nics
)
"""
sys
.
latencies
(
"""
amount
=
pci_latency
,
Specify the simulators to use for your system
ratio
=
utils_base
.
Time
.
Nanoseconds
,
"""
channel_type
=
system
.
PCIeChannel
,
simulation
=
sim
.
Simulation
(
name
=
"My-very-first-test-simulation"
,
system
=
sys
)
)
host_inst0
=
host_sim
(
simulation
)
host_inst0
.
name
=
client_name
"""
host_inst0
.
add
(
host0
)
Specify the simulators to use for your system
"""
host_inst1
=
host_sim
(
simulation
)
simulation
=
sim
.
Simulation
(
name
=
"My-very-first-test-simulation"
,
system
=
sys
)
host_inst1
.
add
(
host1
)
host_inst0
=
host_sim
(
simulation
)
nic_inst0
=
nic_sim
(
simulation
=
simulation
)
host_inst0
.
add
(
host0
)
nic_inst0
.
add
(
nic0
)
host_inst1
=
host_sim
(
simulation
)
nic_inst1
=
nic_sim
(
simulation
=
simulation
)
host_inst1
.
add
(
host1
)
nic_inst1
.
add
(
nic1
)
nic_inst0
=
nic_sim
(
simulation
=
simulation
)
net_inst
=
sim
.
SwitchNet
(
simulation
)
nic_inst0
.
add
(
nic0
)
net_inst
.
add
(
switch
)
nic_inst1
=
nic_sim
(
simulation
=
simulation
)
"""
nic_inst1
.
add
(
nic1
)
Enable that the experiment shall be run synchronized, i.e. with accurate timing
"""
net_inst
=
sim
.
SwitchNet
(
simulation
)
if
run_synchronized
:
net_inst
.
add
(
switch
)
simulation
.
enable_synchronization
(
amount
=
500
,
ratio
=
utils_base
.
Time
.
Nanoseconds
)
"""
"""
Create an instatiation of your virtual prototype
Enable that the experiment shall be run synchronized, i.e. with accurate timing
"""
"""
instance
=
inst
.
Instantiation
(
sim
=
simulation
)
if
run_synchronized
:
instantiations
.
append
(
instance
)
simulation
.
enable_synchronization
(
amount
=
500
,
ratio
=
utils_base
.
Time
.
Nanoseconds
)
if
__name__
==
"__main__"
:
"""
"""
Create an instatiation of your virtual prototype
Simple method to submit and run yboves instantiations via a python script.
"""
This is a simple demonsttration of how one could parse immediately parse the
instance
=
inst
.
Instantiation
(
sim
=
simulation
)
experiment output to create e.g. a plot.
instance
.
create_checkpoint
=
True
"""
instantiations
.
append
(
instance
)
provider
.
client_provider
.
namespace
=
"Akhetonics/Customer"
async
def
submit_and_plot
():
averages
=
[]
run_ids
=
[]
for
instance
in
instantiations
:
run_ids
.
append
(
await
opus_base
.
create_run
(
instantiation
=
instance
))
for
run_id
in
run_ids
:
data
=
[]
line_gen
=
opus_base
.
ConsoleLineGenerator
(
run_id
=
run_id
,
follow
=
True
)
async
for
_
,
line
in
line_gen
.
generate_lines
():
pattern
=
r
"(\d+\.?\d*)\s*MBytes"
match
=
re
.
search
(
pattern
,
line
)
if
not
match
:
continue
m_bytes
=
float
(
match
.
group
(
1
))
if
m_bytes
>
float
(
iperf_udp_rates
[
0
].
replace
(
"m"
,
""
)):
continue
data
.
append
(
m_bytes
*
8
)
averages
.
append
(
sum
(
data
)
/
len
(
data
))
plt
.
bar
(
iperf_udp_rates
,
averages
)
plt
.
title
(
"Parameters Comparison Chart"
)
plt
.
xlabel
(
"Configuration Parameters"
)
plt
.
ylabel
(
"MBytes/sec Transferred"
)
plt
.
savefig
(
"demochart.png"
)
asyncio
.
run
(
submit_and_plot
())
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