Skip to content

Latest commit

 

History

History
123 lines (105 loc) · 6.09 KB

README_zh.md

File metadata and controls

123 lines (105 loc) · 6.09 KB

OMNeT_TSNkit

介绍

针对时间敏感网络(Time Sensitive Network, TSN)调度与仿真问题,本项目利用TSNkit生成网络调度方案,并利用NeSTiNg框架搭建仿真网络,对调度方案进行仿真与验证。项目视频链接

本项目旨在推广TSNkit工具与OMNeT++仿真软件,帮助大家快速入门TSN,并轻松复现TSN经典论文中的算法。

OMNeT++支持多种不同仿真框架,建议根据仿真目标不同选择合适的仿真框架,本项目以NeSTiNg框架进行示例

TSNkit支持多种算法,本项目仅选用SMT-NW(No-wait Packet Scheduling for IEEE Time-sensitive Networks (TSN))算法进行演示。更多算法,请参照此链接

项目所需要环境

代码说明

  1. 网络拓扑:
graph LR
    Client1[Client1]
    Client2[Client2]
    Client3[Client3]
    TSNSwitch1[TSNSwitch1]
    TSNSwitch2[TSNSwitch2]
    Server1[Server1]
    Server2[Server2]
    Server3[Server3]
    Client1 --- TSNSwitch1
    Client2 --- TSNSwitch1
    Client3 --- TSNSwitch1
    TSNSwitch1 --- TSNSwitch2
    TSNSwitch2 --- Server1
    TSNSwitch2 --- Server2
    TSNSwitch2 --- Server3
  1. 流信息
FlowID Src Dst Size Period Deadline Jitter
0 1 5 500B 500000ns 408400ns 408400ns
1 2 6 1200B 1000000ns 408400ns 408400ns
2 3 7 200B 200000ns 408400ns 408400ns
  1. 文件目录
.
├── omnet
│   └── workspace
│       └── nesting
│           └── teach
│               ├── xml
│               │   ├── teach_gcl.xml (Simulated GCL Information)
│               │   └── teach_routing.xml (Simulated Routing Information)
│               ├── example_teach.ini (Simulated Network Configuration)
│               └── teach.ned (Simulated Network Topology)
└── TSNkit
    └── data
        │  
        ├── input
        │    └── example
        │       ├──  example_net.csv  (Network Topology)
        │       └──  example_task.csv (FLOW Information)
        │        
        │          
        └─ output
            └── example
                 ├── example-DELAY.csv     (Flow Delay Information)
                 ├── example-GCL.csv       (GCL Information)
                 ├── example-OFFSET.csv    (Flow Send Offset)
                 ├── example-QUEUE.csv     (Flow Priority Information)
                 └──  example-ROUTE.csv     (Flow Priority Information)

使用方式

安装

  1. 下载安装Ubuntu 18.04,并安装OMNeT++ 5.6.1
  2. cd [path to your OMNeT++]
  3. git clone https://gitee.com/deepsea52418/omnet_tsnkit.git
  4. cd OMNET_TSNKIT
  5. 安装编译INET Framework,具体参考此链接
  6. 安装编译NeSTiNg,具体参考此链接
  7. 安装TSNkit,具体参考此链接

使用调度算法进行求解

  1. cd TSNkit/src
  2. 使用python -m tsnkit.models.smt_nw ../data/input/example/example_task.csv ../data/input/example/example_net.csv ../data/output/example进行求解,该命令加载data/input/example中的网络信息(net.csv)和流信息(task.csv)进行求解
  3. 求解完成后,可以在指定的输出目录"../data/output/example/"下看到生成的调度结果文件(GCL.csv,OFFSET.csv等)

运行仿真

  1. 打开OMNeT++
  2. 选择OMNET_TSNKIT\omnet\workspace作为OMNeT++ 的workspace
  3. 选择nesting\teach\example_teach.ini,右键选择Run As运行

Tips

SMT-NW算法通过指定流发送的偏移时间,实现流的无等待传输。在此过程中,并未涉及到流优先级相关问题,因此将所有流优先级置为0;

根据nesting\src\nesting\ieee8021q\queue\QueuingFrames.h代码中的定义,在8个可用队列情况下,优先级为0的流映射至Queueing模块的1号队列进行传输;

在NeSTiNg仿真框架中,默认情况下,仿真节点模块所采用的oscillator子模块频率为1Mhz,仿真时间精度为1μs。为了提高仿真精度,在本项目中,将oscillator模块频率指定为1Ghz,即仿真时间精度为1n;

在NeSTiNg仿真框架中,默认采用802.3协议指定的数据帧格式,即完整数据帧大小 = 应用层数据 + 前导码(8B) + 目的地址(6B) + 源地址(6B) + vlanTag(4B) + 长度(2B) + CRC(4B) ;

目前在TSNkit中未考虑帧间间隔问题,需要将\inet\src\inet\linklayer\ethernet\Ethernet.h文件中的INTERFRAME_GAP_BITS参数由96修改至0;

TSNKit中对于延迟的计算减去了源端的发送时延,并且没有减去offset,而omnet中时延的计算是从源端设备开始发送第一个bit开始的,也就是说tsnkit中时延的输出减去offset,再加上源端的传输时延才是omnet中应该出现的时延

参与贡献

如果您对该项目有任何意见或建议,欢迎在项目页面提交Issue。感谢您的参与与反馈!

感谢

  • Chuang Li
  • Callin
  • OMNeT++ , INET Framework , NeSTiNg , TSNkit项目贡献者