Core of Pipeline¶
这里我们将拆解每个步骤的含义,以及 不同步骤之间的联系
“联系”如何分析?笔者是从数据的输入与输出角度进行考虑的
我们通过追踪数据的输入输出,可以得到它们之间的依赖关系,进而分析清楚所有步骤之间的逻辑顺序 🐛
因此在每个步骤中,笔者都会从“自己实现的步骤” + “这个模块在全局中的位置”来考虑 🔥
实验复现全步骤¶
大纲体现于paper/README.md:
- Step 1: generating LEO satellite network dynamic state over time: 
<hypatia>/paper/satellite_networks_state/README.md
 - Step 2: build ns-3 simulator
<hypatia>/ns3-sat-sim/README.md
 - Step 3: performing analysis using satgenpy
<hypatia>/paper/satgenpy_analysis/README.md
 - Step 4: running ns-3 experiments
<hypatia>/paper/ns3_experiments/README.md
 - Step 5: generating satviz figures
<hypatia>/satviz/README.mdunderVisualizations in the paper.
 - Step 6: plotting figures of the paper
<hypatia>/paper/figures/README.md
 
步骤分析¶
这里我们只会根据逻辑关系简要梳理 不同模块之间的联系 以及 运行的核心模块是什么
完整版见Hypatia-Impl的README,那里记录了全部流程
这里我们给出的是TL;DR版本 😍
Step 1 生成最基础表述文件¶
generating LEO satellite network dynamic state over time
自己的角度
输入数据: paper/satellite_networks_state/input_data (真实世界的数据,来自于人工输入)
运行脚本: main_xxx(instance).py -> main_helper.py
输出数据: paper/satellite_networks_state/gen_data
全局的位置
根据现实世界的数据投入,生成hypatia系统特有的表述文件 (卫星运行轨迹 + 站位置 + ...)
这些表述文件是最基础的数据,将会在Step 3的analysis过程中作为输入数据
Step 2 构建模拟器¶
build ns-3 simulator
实际上这个模拟器真正的内核是basic-sim
文件夹里大多数python脚本是表面封装,真正运行的核心脚本是basic-sim Kernel
这里并没有输入/输出,此处仅仅是先“预热”(因为基于ns-3,运行的顺序是configuren -> build -> run)
全局的位置
先configure并build,为后面step4的run做准备
Step 3 数据分析与新数据生成¶
将Step1生成的所有关于LEO的“最基础数据”进行分析,包含:
- 星座覆盖范围
 - 卫星间距离变化
 - 链路可用性
 - 网络连通性
 - 地面站覆盖情况
 
自己的角度
数据来源: paper/satellite_networks_state/gen_data/,这些最基础数据txt/csv在Step1中生成
运行顺序: python perform_full_analysis.py
生成数据: paper/satgenpy_analysis/data
全局的位置
这里生成的数据,对于 Step4运行 和 Step5生成卫星模拟图像 来说,是基础数据
此处生成的数据(paper/satgenpy_analysis/data)将会在:
- For Step-5: 
hypatia-impl/satviz/scripts中被脚本调用,作为输入数据 - For Step-4: 
hypatia-impl/paper/ns3_experiments中被脚本调用,作为输入数据 
Step 4 真正运行起来¶
LEO卫星网络模拟器的具体使用!
这里分成A to B experiments / Traffic matrix / Traffic matrix load (scalability)三个模块
三者的运行逻辑完全一样,都是:
| Bash | |
|---|---|
1 2 3 4  |  | 
出于篇幅,我们在这里以A to B experiments为例分析,另两者以此类推!
1) run_list.py: 
提供很多配置运行的参数,比如queue_size_pkt / pingmesh_interval_ns
仔细回想Step 2的basic-sim中,配置文件是config_xxx,这些应该可以关联起来,因此合理推测这些py脚本的本质是:
- 先给basic-sim提供指定参数
 - 基于basic-sim内核运行程序(“本质程序是basic-sim中的main函数”)
 - 将结果送回到当前
 
2) step_1_generate_runs.py:
参数配置,为run做准备 (数据来源: Step 3生成的分析数据)
3) step_2_run.py:
真相大白了!确实就是上面分析的那样!
本质上,生成所有数据的源脚本是ns3-sat-sim/simulator/scratch/main_satnet/main_satnet.cc
我们可以从这里的python脚本分析出运行模式:
| Python | |
|---|---|
1 2 3 4 5 6 7 8 9  |  | 
- 实际运行的脚本是
main_satnet.cc,此试验的参数来源是a_b/runs/... - 去到basic-sim,使用
./waf构建 - 所有的结果拷贝到当下
 
4) step_3_generate_plots.py
画图和生成PDF的脚本,不用看了
Step 5 星链可视化¶
这一部分是星链的可视化,在 satviz 跟着README做就可以了
这一部分对应于原论文 Fig 11 - Fig 17,所有原仓库的错误在这里都已经修复完毕了
网页一旦生成好,直接跟原论文图像对比即可
对应关系是:
| Figure | Script | 
|---|---|
| 11 | visualize_constellation.py | 
| 12 | visualize_horizon_over_time.py | 
| 13 | visualize_path.py | 
| 14 | visualize_path_wise_utilization.py | 
| 15 | visualize_utilization.py | 
| 16(b) & 17(b) | visualize_path_no_isl.py | 
Step 6 全局绘图并整理¶
画图而已,不重要
想看的话直接去 笔者实验仓库的README