netperf_sysconf.py 5.57 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
instantiations: list[inst.Instantiation] = []
18

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
125
            host_inst0 = sim.Gem5Sim(simulation)
            # host_inst0 = sim.QemuSim(simulation)
126
            host_inst0.add(host0)
127
            host_inst0.name = "Client-Host"
128
129
            # host_inst0.wait_terminate = True
            # host_inst0.cpu_type = 'X86KvmCPU'
130

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

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

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

145
146
147
148
149
150
            # 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)
151

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

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

162
163
164
165
            instance = inst.Instantiation(sim=simulation)
            instance.preserve_tmp_folder = False
            instance.create_checkpoint = True
            instantiations.append(instance)