dctcp.py 3.44 KB
Newer Older
Hejing Li's avatar
Hejing Li committed
1
2
3
4
5
6
7
8
9
10
11
12
import modes.experiments as exp
import modes.simulators as sim
import modes.nodeconfig as node


# iperf TCP_multi_client test
# naming convention following host-nic-net-app
# host: qemu/gem5-timing
# nic:  cv/cb/ib
# net:  switch/dumbbell/bridge
# app: DCTCPm

Hejing Li's avatar
Hejing Li committed
13
types_of_host = ['qemu', 'qt','gt', 'gO3']
Hejing Li's avatar
Hejing Li committed
14
15
16
types_of_nic = ['cv','cb','ib']
types_of_net = ['dumbbell']
types_of_app = ['DCTCPm']
Hejing Li's avatar
Hejing Li committed
17
types_of_mtu = [1500, 4000, 9000]
Hejing Li's avatar
Hejing Li committed
18
19
20

num_pairs = 2
max_k = 199680
Hejing Li's avatar
Hejing Li committed
21
22
k_step = 8320
#k_step = 16640
Hejing Li's avatar
Hejing Li committed
23
link_rate_opt = '--LinkRate=10Gb/s ' # don't forget space at the end
Hejing Li's avatar
Hejing Li committed
24
link_latency_opt = '--LinkLatency=500ns '
Hejing Li's avatar
Hejing Li committed
25
cpu_freq = '5GHz' #GHz
Hejing Li's avatar
Hejing Li committed
26
27
#mtu = 4000
sys_clock = '2GHz' # if not set, default 1GHz
Hejing Li's avatar
Hejing Li committed
28
29
30
31
32
33
34
35

ip_start = '192.168.64.1'

experiments = []

# set network sim
net_class = sim.NS3DumbbellNet

Hejing Li's avatar
Hejing Li committed
36
37
38
39
40
41
42
43
44
45
46
47
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
75
76
77
78
79
80
81
82
83
84
85
for mtu in types_of_mtu:
    for h in types_of_host:
        for c in types_of_nic:
            for k_val in range(0, max_k + 1, k_step):

                net = net_class()
                net.opt = link_rate_opt + link_latency_opt + f'--EcnTh={k_val}'

                e = exp.Experiment( h + '-' + c + '-' + 'dumbbell' + '-' + 'DCTCPm' + f'{k_val}' + f'-{mtu}')
                e.add_network(net)

                # host
                if h == 'qemu':
                    host_class = sim.QemuHost
                elif h == 'qt':
                    def qemu_timing():
                        h = sim.QemuHost()
                        h.sync = True
                        return h
                    host_class = qemu_timing
                elif h == 'gt':
                    host_class = sim.Gem5Host
                    host_class.sys_clock = sys_clock
                    e.checkpoint = True
                elif h == 'gO3':
                    host_class = sim.Gem5Host
                    host_class.cpu_type = 'DerivO3CPU' 
                    host_class.sys_clock = sys_clock
                    e.checkpoint = True
                else:
                    raise NameError(h)

                # nic
                if c == 'ib':
                    nic_class = sim.I40eNIC
                    nc_class = node.I40eDCTCPNode
                elif c == 'cb':
                    nic_class = sim.CorundumBMNIC
                    nc_class = node.CorundumDCTCPNode
                elif c == 'cv':
                    nic_class = sim.CorundumVerilatorNIC
                    nc_class = node.CorundumDCTCPNode
                else:
                    raise NameError(c)


                servers = sim.create_dctcp_hosts(e, num_pairs, 'server', net, nic_class, host_class, 
                                                nc_class, node.DctcpServer, cpu_freq, mtu)
                clients = sim.create_dctcp_hosts(e, num_pairs, 'client', net, nic_class, host_class, 
                                                nc_class, node.DctcpClient, cpu_freq, mtu, ip_start=num_pairs+1)
Hejing Li's avatar
Hejing Li committed
86
87

            
Hejing Li's avatar
Hejing Li committed
88
89
90
91
92
93
94
95
96
97
98
99
100
101
                i = 0
                for cl in clients:
                    cl.node_config.app.server_ip = servers[i].node_config.ip
                    i += 1
                
                # All the clients will not poweroff after finishing iperf test except the last one
                # This is to prevent the simulation gets stuck when one of host exits.

                # The last client waits for the output printed in other hosts, then cleanup
                clients[num_pairs-1].node_config.app.is_last = True
                clients[num_pairs-1].wait = True

                print(e.name)
                experiments.append(e)
Hejing Li's avatar
Hejing Li committed
102