Skip to content

Latest commit

 

History

History
33 lines (28 loc) · 2.92 KB

README.md

File metadata and controls

33 lines (28 loc) · 2.92 KB

如何(尝试)运行并确认环境已经搭建好

$ # 进入项目目录下以后
$ # 1. 激活项目内的Python环境,注意提示符的变化
$ source env/bin/activate
(env) $ # 2. 对Cython模块进行编译,注意:每次修改.pyx和.pyd代码文件后都要执行这条命令
(env) $ #    才能产生效果!
(env) $ python3 setup.py build_ext --inplace
(env) $ # 3. 任意挑选一个拓扑,以它和某个特定的路由配置作为输入,进行求解
(env) $ PYTONPATH=. python3 examples/09-firewall-dns.py dataset/synth/100

如果最后一条命令没有报错运行结束,并且最后一行输出类似于problem solved: 7.823100805282593,则说明环境无误,可以开始开发工作。

在每一次运行中,求值器接受一个配置(对于每一条流经网络的数据流,路径上一定要/不要经过哪里?带宽资源如何?需要更新和检查哪些状态量?),和一个拓扑网络描述(交换机之间如何相连?主机分别连接在哪一台交换机上?交换机之间的带宽资源情况(主机与交换机之间没有带宽约束)?哪些主机向着哪些主机发送多大的数据流?)。 在上面这条命令中,09-firewall-dns.py包含了一个典型的配置,而dataset/synth/100为一个标准化拓扑模型。配置和拓扑可以任意排列组合执行,只需要注意少量约束。

项目结构

  • sidfam求值器模块,项目核心
    • automaton/auto_group/path_graph.pyx/pydCODER三大核心抽象的实现和接口定义。具体参考CODER论文。
    • model.pyx/pyd将CODER模型转化为MILP的核心代码。在create_model函数中为LP添加了约束(目前有distinguish和require两种约束)。对其进行修改需要了解:
      1. Cython基本语法
      2. lp文件格式
      3. Path graph数据结构,在path_graph.pyd中定义
    • __init__.pyxlanguage.py以及gallery.py力图为上层Python用户提供一个不涉及底层操作又足够灵活的平台。__init__.pyx允许用户以简练的语法创建Automaton group,language.py则提供了Automaton group中必不可少的组成元素,而gallery.py中包含了人类的好朋友——风筝拓扑,以及从拓扑数据集中创建拓扑的帮助函数。
  • dataset常用拓扑数据集
    • Berkeley MIT Purdue Stanford以及rfXXXX为SNAP论文中使用的拓扑数据(rfXXXX对应论文中的ASXXXX)。
    • synth为标准化拓扑,子文件夹名字的数字对应拓扑中的交换机数目,主机数目为交换机数目的0.7倍,且交换机之间的连接非常均匀。
    • fattree为标准的Fattree拓扑,子文件夹名字的数字为Fattree拓扑的参数N。可以通过使用scripts/gen_fat_tree.py生成其他的Fattree。
  • examples各种使用求值器的示例程序,其中的集大成者为09-firewall-dns.py,为CODER论文中使用的配置。
  • scripts辅助脚本,基本退役。