netperf_sysconf.py 5.34 KB
Newer Older
1
2
3
from simbricks.orchestration import system
from simbricks.orchestration import simulation as sim
from simbricks.orchestration import instantiation as inst
4
from simbricks.orchestration.helpers import simulation as sim_helpers
5

6
7
8
9
10
11
12
13
"""
Netperf Example:
One Client: Host_0, One Server: Host1 connected through a switch
HOST0 -- NIC0 ------ SWITCH ------ NIC1 -- HOST1

This scripts generates the experiments with all the combinations of different execution modes
"""

14
15
16
host_types = ["gem5"]
nic_types = ["i40e"]
net_types = ["switch"]
17
18
experiments = []

Hejing Li's avatar
Hejing Li committed
19
sys = system.System()
20
21

# create a host instance and a NIC instance then install the NIC on the host
22
23
# host0 = system.CorundumLinuxHost(sys)
host0 = system.I40ELinuxHost(sys)
Hejing Li's avatar
Hejing Li committed
24
pcie0 = system.PCIeHostInterface(host0)
25
cfg_disk0 = system.DistroDiskImage(h=host0, name="base")
26
host0.add_disk(cfg_disk0)
27
28
tar_disk0 = system.LinuxConfigDiskImage(h=host0)
host0.add_disk(tar_disk0)
29

Hejing Li's avatar
Hejing Li committed
30
host0.add_if(pcie0)
31
32
# nic0 = system.CorundumNIC(sys)
nic0 = system.IntelI40eNIC(sys)
33
nic0.add_ipv4("10.0.0.1")
Hejing Li's avatar
Hejing Li committed
34
pcichannel0 = system.PCIeChannel(pcie0, nic0._pci_if)
35

Hejing Li's avatar
Hejing Li committed
36
37
38
# create a host instance and a NIC instance then install the NIC on the host
host1 = system.I40ELinuxHost(sys)
pcie1 = system.PCIeHostInterface(host1)
39
cfg_disk1 = system.DistroDiskImage(h=host1, name="base")
40
host1.add_disk(cfg_disk1)
41
42
tar_disk1 = system.LinuxConfigDiskImage(h=host1)
host1.add_disk(tar_disk1)
43

44
host1.add_if(pcie1)
Hejing Li's avatar
Hejing Li committed
45
nic1 = system.IntelI40eNIC(sys)
46
nic1.add_ipv4("10.0.0.2")
Hejing Li's avatar
Hejing Li committed
47
pcichannel1 = system.PCIeChannel(pcie1, nic1._pci_if)
Hejing Li's avatar
Hejing Li committed
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
# # create switch and its ports
# switch = system.EthSwitch(sys)
# netif0 = system.EthInterface(switch)
# switch.add_if(netif0)
# netif1 = system.EthInterface(switch)
# switch.add_if(netif1)
# # create channels and connect the switch to the host nics
# ethchannel0 = system.EthChannel(switch.eth_ifs[0], nic0._eth_if)
# ethchannel1 = system.EthChannel(switch.eth_ifs[1], nic1._eth_if)

switch0 = system.EthSwitch(sys)
switch1 = system.EthSwitch(sys)
# connect first switch to client nic
switch0_for_nic = system.EthInterface(switch0)
switch0.add_if(switch0_for_nic)
nic0_switch0_chan = system.EthChannel(nic0._eth_if, switch0_for_nic)
# connect second switch to server nic
switch1_for_nic = system.EthInterface(switch1)
switch1.add_if(switch1_for_nic)
nic1_switch1_chan = system.EthChannel(nic1._eth_if, switch1_for_nic)
# connect first switch to second switch
switch0_for_net = system.EthInterface(switch0)
switch0.add_if(switch0_for_net)
switch1_for_net = system.EthInterface(switch1)
switch1.add_if(switch1_for_net)
switch0_switch1_chan = system.EthChannel(switch0_for_net, switch1_for_net)
75
76

# configure the software to run on the host
77
78
# host0.add_app(system.NetperfClient(host0, nic1._ip))
# host1.add_app(system.NetperfServer(host1))
79
80
81
ping_client_app = system.PingClient(host0, nic1._ip)
ping_client_app.wait = True
host0.add_app(ping_client_app)
82
host1.add_app(system.Sleep(host1, infinite=True))
83
84
85
86
87
88
89

"""
Execution Config
"""
for host_type in host_types:
    for nic_type in nic_types:
        for net_type in net_types:
90
91
            simulation = sim.Simulation(
                "n-" + host_type + "-" + nic_type + "-" + net_type
92
93
            )
            # Host
94
            if host_type == "gem5":
95
                host_sim = sim.Gem5Sim
96
            elif host_type == "qemu":
97
98

                def qemu_sim(e):
99
                    h = sim.QemuSim(e)
100
101
                    h.sync = False
                    return h
102

103
104
                host_sim = qemu_sim

105
            elif host_type == "qt":
106
                host_sim = sim.QemuSim
107
108
            else:
                raise NameError(host_type)
109

110
            # NIC
111
            if nic_type == "i40e":
112
                nic_sim = sim.I40eNicSim
113
            elif nic_type == "vr":
114
                nic_sim = sim.CorundumVerilatorNICSim
115
116
117
118
            else:
                raise NameError(nic_type)

            # Net
119
            if net_type == "switch":
120
                net_sim = sim.SwitchNet
121
122
123
            else:
                raise NameError(net_type)

124
            host_inst0 = sim.QemuSim(simulation)
125
            host_inst0.add(host0)
126
            host_inst0.name = "Client-Host"
127
128
            # host_inst0.wait_terminate = True
            # host_inst0.cpu_type = 'X86KvmCPU'
129

130
131
            # host_inst1 = sim.Gem5Sim(simulation)
            host_inst1 = sim.QemuSim(simulation)
132
            host_inst1.name = "Server-Simulator"
133
            host_inst1.add(host1)
134
            # host_inst1.cpu_type = 'X86KvmCPU'
135

136
            nic_inst0 = sim.I40eNicSim(simulation=simulation)
137
            # nic_inst0 = sim.CorundumBMNICSim(simulation)
138
            # nic_inst0 = sim.CorundumVerilatorNICSim(simulation)
139
140
            nic_inst0.add(nic0)

141
            nic_inst1 = sim.I40eNicSim(simulation=simulation)
142
143
            nic_inst1.add(nic1)

144
145
146
147
148
149
            # net_inst = sim.SwitchNet(simulation)
            # net_inst = sim.NS3BridgeNet(simulation=simulation)
            # net_inst.add(switch)

            net_inst = sim.NS3DumbbellNet(simulation=simulation)
            net_inst.add(left=switch0, right=switch1)
150

151
152
153
            sim_helpers.enable_sync_simulation(
                simulation=simulation, amount=500, ratio=sim.Time.Nanoseconds
            )
154
            # sim_helpers.disalbe_sync_simulation(simulation=simulation)
155
156
157

            print(simulation.name + "   all simulators:")
            sims = simulation.all_simulators()
158
159
            for s in sims:
                print(s)
160

161
            experiments.append(simulation)