dctcp.py 2.65 KB
Newer Older
Hejing Li's avatar
Hejing Li committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

types_of_host = ['qemu', 'gt']
types_of_nic = ['cv','cb','ib']
types_of_net = ['dumbbell']
types_of_app = ['DCTCPm']

num_pairs = 2
max_k = 199680
Hejing Li's avatar
Hejing Li committed
20
21
#k_step = 8320
k_step = 16640
Hejing Li's avatar
Hejing Li committed
22
23
24
link_rate_opt = '--LinkRate=10Gb/s ' # don't forget space at the end
link_latency_opt = '--LinkLatency=0 '
cpu_freq = '5GHz' #GHz
Hejing Li's avatar
Hejing Li committed
25
mtu = 4000
Hejing Li's avatar
Hejing Li committed
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

ip_start = '192.168.64.1'

experiments = []

# set network sim
net_class = sim.NS3DumbbellNet


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}'

Hejing Li's avatar
Hejing Li committed
42
            e = exp.Experiment( h + '-' + c + '-' + 'dumbbell' + '-' + 'DCTCPm' + f'{k_val}' + f'-{mtu}')
Hejing Li's avatar
Hejing Li committed
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
86
87
88
            e.add_network(net)
            e.checkpoint = True

            # host
            if h == 'qemu':
                host_class = sim.QemuHost
            elif h == 'gt':
                host_class = sim.Gem5Host
            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)

        
            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)