跳转至

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 under Visualizations 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做准备

Note

这一部分是模拟器的核心,重中之重,后期自定义新功能的本质都是来源于此!

basic-sim 教程,传送门

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
cd Folder/
python step_1_generate_runs.py || exit 1
python step_2_run.py || exit 1
python step_3_generate_plots.py || exit 1

出于篇幅,我们在这里以A to B experiments为例分析,另两者以此类推!

1) run_list.py:

提供很多配置运行的参数,比如queue_size_pkt / pingmesh_interval_ns

仔细回想Step 2的basic-sim中,配置文件是config_xxx,这些应该可以关联起来,因此合理推测这些py脚本的本质是:

  1. 先给basic-sim提供指定参数
  2. 基于basic-sim内核运行程序(“本质程序是basic-sim中的main函数”)
  3. 将结果送回到当前

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
for run in get_tcp_run_list():
    logs_ns3_dir = "runs/" + run["name"] + "/logs_ns3"
    local_shell.remove_force_recursive(logs_ns3_dir)
    local_shell.make_full_dir(logs_ns3_dir)
    commands_to_run.append(
        "cd ../../../ns3-sat-sim/simulator; "
        "./waf --run=\"main_satnet --run_dir='../../paper/ns3_experiments/a_b/runs/" + run["name"] + "'\" "
        "2>&1 | tee '../../paper/ns3_experiments/a_b/" + logs_ns3_dir + "/console.txt'"
    )
  1. 实际运行的脚本是main_satnet.cc,此试验的参数来源是a_b/runs/...
  2. 去到basic-sim,使用./waf构建
  3. 所有的结果拷贝到当下

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