采用DDPG做sdn的QoS代码解析

目的是为了老鼠流能在理论时延时间内传输完成。DMR越大奖励越多,DMR越小,奖励越少,这时就会促使DRL增加老鼠流的传输带宽,在输出的动作中有一个速率叠加在端口队列上。但这样应该会影响大象流的传输,所以还应该把大象流能传输完成率也加上去(也应该是DMR,也就是大象流的DMR),只有这两个DMR都满足才是保证了QOS。但是根据队列的优先级好像大象流是优先传输的,所以可以不用管大象流的DMR?

采用mininet和ryu实验,

创建fattree(4,8,8),带宽设置为10Gbps,负荷为80%,主机数为8,寻找4条最短路径,产生的流量数为40。

状态为(40,5)

速率维数为2*72

路径为2*28(28表示不同主机的通信)

动作维度为2*(72+28)

评价指标:

Flow Completion Time :FCT流完成时间

Deadline Meet Rate: DMR截止时间完成率也就是数据流在规定的时间是否到达目的地

Size:

Tputi = FCT / Size

        FCTi_ = data.FCT.sum()#所有数据流完成时间总和

        DMRi_ = float(MFmeetratenum)/MFnum   #老鼠流的时限完成率

        Tputi_ = FCTi_ / Sizei_  #数据流完成时间总和除于总的数据流的字节数总和,即每个字节完成的时间,也就是传输速率

Generate.py:

        deadline = 0

        # Type 1 flows

        if flow_type == 1:#注意:这里没有区分大象流和老鼠流,所以理论传输时延需要作为超参调整,另外也可以只考虑老鼠流的流量,不考虑大象流流量

            # Calculate ideal FCT (ms)

            #ideal_fct = 0.2 + float(flow_size) * 8 * 1024 / (capacity * 1024 * 1024) * 1000

            if threshold_size==10:

                ideal_fct = 1 + float(flow_size) * 1024 / (capacity * 1024 * 1024) * 1000

            elif threshold_size==1000:

                ideal_fct = 20 + float(flow_size) * 1024 / (capacity * 1024 * 1024) * 1000

            # Deadline is assigned to

            deadline = int(math.ceil(2 * ideal_fct))

        flow = [times[i], flow_size, flow_type, deadline, host_src, host_dst, dsport]

        trace.append(flow)

Client.py:

FCT = time.time() - flowStartTime#发送完后计算该次数据流发送的实际时延

if flowtype == 1:

    if deadline/1000.0 >= FCT:#若老鼠流能在理论时延内完成传输即理论时延大于实际时延则满足速率

        meetrate = True

    else:

        meetrate = False

Env.py:

MFmeetratenum = len(data[data.meetrate==True])

        FCTi_ = data.FCT.sum()

        DMRi_ = float(MFmeetratenum)/MFnum

        Tputi_ = FCTi_ / Sizei_

    if DMRi_ >= 0.9:

            reward = -Tputi_ * 1000

        elif DMRi_ >= 0.8:

            reward = -Tputi_ * 10 * 1000

        elif DMRi_ >= 0.7:

            reward = -Tputi_ * 20 * 1000

        elif DMRi_ >= 0.6:

            reward = -Tputi_ * 30 * 1000

        elif DMRi_ < 0.6:

            reward = -Tputi_ * 40 * 1000

定义输入的数据流分布:

flowsize数据流字节大小的分布函数,

小于等于6的占0.15

(6,13)大小的占0.2-0.15=0.05

(13,19)大小的占0.3-0.2=0.1

以此类推

Websearch.txt

6 1 0.15

13 1 0.2

19 1 0.3

33 1 0.4

53 1 0.53

133 1 0.6

333 1 0.7

933 1 0.8

1333 1 0.9

3333 1 0.97

8000 1 1

首先通过环境reset初始化网络:

Fattree结构:

https://blog.csdn.net/qq_49588762/article/details/115296838

整个拓扑网络分为三个层次:自上而下分别为边缘层(edge)、汇聚层(aggregate)和核心层(core),其中汇聚层交换机与边缘层交换机构成一个pod,交换设备均采用商用交换设备。下图是pod=4=k density=2,主机数16,density =2表示每个接入层交换机2台主机,交换机20台,核心层4台,汇聚层8台,边缘层8台。

https://img-blog.csdnimg.cn/20210329110740739.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ5NTg4NzYy,size_16,color_FFFFFF,t_70#pic_center

获取到网络数据:主要是主机名,对应IP地址和MAC地址

self.HostList, self.HostIPList, self.HostNameIPMAC------------- [<Host h001: h001-eth0:10.1.0.1 pid=26371> , <Host h002: h002-eth0:10.2.0.1 pid=26373> , <Host h003: h003-eth0:10.3.0.1 pid=26375> , <Host h004: h004-eth0:10.4.0.1 pid=26377> , <Host h005: h005-eth0:10.5.0.1 pid=26379> , <Host h006: h006-eth0:10.6.0.1 pid=26381> , <Host h007: h007-eth0:10.7.0.1 pid=26383> , <Host h008: h008-eth0:10.8.0.1 pid=26385> ] ['10.1.0.1', '10.2.0.1', '10.3.0.1', '10.4.0.1', '10.5.0.1', '10.6.0.1', '10.7.0.1', '10.8.0.1'] {'h001': ('10.1.0.1', '00:00:00:00:00:01'), 'h002': ('10.2.0.1', '00:00:00:00:00:02'), 'h003': ('10.3.0.1', '00:00:00:00:00:03'), 'h004': ('10.4.0.1', '00:00:00:00:00:04'), 'h005': ('10.5.0.1', '00:00:00:00:00:05'), 'h006': ('10.6.0.1', '00:00:00:00:00:06'), 'h007': ('10.7.0.1', '00:00:00:00:00:07'), 'h008': ('10.8.0.1', '00:00:00:00:00:08')}

再得到access-table,即交换机及对应端口与8台主机的连接关系:

Access_table------------- {('3001', '3'): ('10.1.0.1', '00:00:00:00:00:01'), ('3002', '3'): ('10.2.0.1', '00:00:00:00:00:02'), ('3003', '3'): ('10.3.0.1', '00:00:00:00:00:03'), ('3004', '3'): ('10.4.0.1', '00:00:00:00:00:04'), ('3005', '3'): ('10.5.0.1', '00:00:00:00:00:05'), ('3006', '3'): ('10.6.0.1', '00:00:00:00:00:06'), ('3007', '3'): ('10.7.0.1', '00:00:00:00:00:07'), ('3008', '3'): ('10.8.0.1', '00:00:00:00:00:08')}

然后就是安装上面对应主机和交换机出端口的流表:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenos121

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值