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.md
underVisualizations 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