# threshold-routing **Repository Path**: veyronc/threshold-routing ## Basic Information - **Project Name**: threshold-routing - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-03-26 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # threshold-routing #### 介绍 根据流量速率来分流,一部分走直连routing,等下的用group table平均分配到其他二跳touring。 为了用dscp_remark功能,在下载的镜像服务器中使用ofsoftswitch13虚拟交换机。 #### 测试demo ```bash 开三个终端做好准备,全部sudo -s进入root用户 终端1 cd topo python create_8pod_topo.py 等待出现 please input custom control cmd: 字样后,去终端2添加交换机配置 终端2 cd switch_rules sh 8pod_threshold_rules.sh 切换回终端1 traffic # 进行代码里写好的根据流量矩阵打流测试 实验结果输出到 topo/log 中(需确保该文件夹存在) 终端3 ----计算丢包率---- cd topo/log # 把所有生成类似s5h1Bs7h1文件移动到指定文件夹方便统计 mkdir threshold_v1 mv s* threshold_v1/ sh get_loss.sh # Which folder do you want to count? threshold_v1 # 即可看到统计结果 对比试验需重复以上步骤: - 退出mininet,执行 mn -c, 清理虚拟网卡 - 在 topo 中 python create_8pod_topo.py - 在 switch_rules 中执行 sh 8pod_direct_rules.sh 即走的是直接路由 - 把得到的log结果 mv s* direct_v1 可进行保存 - sh get_loss.sh 统计 direct_v1 ----other test---- 该实验单测用可做可不做 cli # 进入mininet> 控制台 mininet> s2h1 iperf -u -s -p 5566 -i 1 > iperfserver.log & mininet> s1h1 iperf -u -c 10.0.2.1 -b 900K -p 5566 -t 3 --tos 0x08 > iperfclient.log & ``` #### 软件架构 single_test目录 简单拓扑的单独测试,root权限下,先执行python exper序号.py 再执行 python exper序号.sh 打流demo: ``` bash h2 iperf -u -s -p 5566 -i 1 > iperfserver.log & h1 iperf -u -c 10.0.0.2 -b 20M -p 5566 -t 3 --tos 0x08 > iperfclient.log ``` switch_rules目录 线下用python3提前执行好,生成sh脚本 - create_threshold_rules.py 读取threshold流量工程算出来的threshold矩阵,生成基于该矩阵的交换机配置项 - 8pod_threshold_rules.sh 测试8pod情况下threshold限流+group分流时候的交换机配置项。 - create_direct_rules.py 生成直连交换机配置项。 - 8pod_direct_rules.sh 测试8pod情况下直连交换机配置项 - create_switch_rules.py 生成定值 rate threshold 交换机配置项,改设法前期测试用,后期用真实计算出来的threshold,见 create_threshold_rules.py - 8pod_switch_rules.sh topo目录 - base_net.py 基于Mininet再封装一层,可以引入不同的打流策略。 - create_8pod_topo.py 创建8pod数据中心拓扑,并且提供选择打流和mininet cli端的选择功能,可切换控制。 traffic目录 - read_traffic.py 读取流量矩阵csv文件,并转换成一系列流量矩阵,提供给外部调用。 - 4pod_traffic.csv 8pod数据中心历史流量矩阵,每行代表一个流量矩阵(每个矩阵被压缩成一行),故有16列。 - 仿真环境下,视为 Kbit 单位 - 4pod_topo.csv 用threshold拓扑工程生成的拓扑连线数矩阵,每行代表一个topo bw矩阵(每个矩阵被压缩成一行)。 - 4pod_threshold.csv 用threshold流量工程生成的threshold矩阵,每行代表一个threshold矩阵(每个矩阵被压缩成一行) - ofsoftswitch13配置中meter dscp_remark 的 rate 参数接收 1000,相当于限流 1000Kbits,即1Mbits - python3-deal.py 线下用 python3 读取 4pod_traffic.npy,并生成更方便的 4pod_traffic.csv ryu_rest_api目录 未来动态控制交换机配置项用,不在ryu控制器中实现算法逻辑,而只开放出rest api接口,方便更灵活地使用。 #### 8pod实验说明 线下 python3 执行 config 里的topo配置生成脚本,switch_rules 里的流表生成脚本。 运行 topo 里的 create_8pod_topo.py, 再运行 switch_rules 里的流表 8pod_switch_rules.sh 脚本。然后用自定义的 traffic 参数即可进行打流实验。 生成 n 个 switch 和 n 个 host,switch 之间互连,序号连接对应端口 如: s1 的 7 端口连 s7 的 1 端口 switch 序号本身那个端口连 host,host 命名都是 s序号h1 如: s2 的 2 端口连 s2h1 #### 简化8pod模型测试 python3 create_8pod_topo.py 然后运行switch_rules中内容,用不同的switch_rules即可 - sh 8pod_threshold_rules.sh - sh 8pod_direct_rules.sh 改动: - topo/create_8pod_topo.py 的 74 行统一限制带宽为0.1M - 自装虚拟机上可以用python3运行了,所以注释了 topo/create_8pod_topo.py 的 42 行 - 用python2运行时,最好解开`load_dict = unicode_convert(load_dict)`注释,否则可能出现实体创建命名跟预期不符的问题。 - 调用的流量文件 traffic/8pod_traffic.csv 只用了第一行,大部分位置都给0,少部分位置打流 - 原来所有流量矩阵备份到 traffic/8pod_traffic_bak.csv - switch_rules 文件夹中,用 create_switch_rules.py 生成的 8pod_threshold_rules.sh - switch_rules 文件夹中py离线脚本需要python3.6及以上运行,用到了f字符串 # 4pod测试方案 运行 algorithm 中的 main.py 会在 traffic 文件夹中生成根据算法算出来的配置文件 运行 switch_rules 的 create_xxx.py 会生成相应路由规则 python3 create_pod_topo.py 会自动加载switch rules 运行时环境配置会打印出来,通过 config/run_config.py 设置 在please input custom control cmd:处输入 recv 即可开启scapy流量接收端,打印recv() status:说明没有错误。 在please input custom control cmd:处输入 send 即可发送流量测试。 可用tcpdump监控网卡端口,也可以直接看 log/recv.log 和 log/send.log sender.py 中每个包都拓展到1500字节,其中用户自定义消息拓展到1472字节,message格式: ``` message pattern: ,,,, ``` 接收日志中增加了接收时间打印了 `',,,,,',` ## 统计丢包率和完成时间 4pod_threshold_rules.sh 情况下,生成的 log/recv{i}.log 和 log/send.log 全部移动到新建文件夹 log/threshold_recv中。 同理 4pod_direct_rules.sh 情况下的日志全部移动到西建文件夹 log/direct_recv 中。 在log目录下执行 `python3 count_recv_log.py` 然后输入 threshold_recv 或 direct_recv 即可看统计结果。