6.6 KiB
Raw Blame History

Payload Replay Scripts

本目录提供基于本地 payload archive 的手工 replay 入口。

multi_rir_case_info.py

用于从 multi-RIR bundle 中解析指定 rir 的输入路径、对照 CSV、fixture、以及 Routinator replay timing 基线。

示例:

python3 scripts/payload_replay/multi_rir_case_info.py \
  --bundle-root ../../rpki/target/live/20260316-112341-multi-final3 \
  --rir afrinic

也支持输出 shell 环境变量:

python3 scripts/payload_replay/multi_rir_case_info.py \
  --bundle-root ../../rpki/target/live/20260316-112341-multi-final3 \
  --rir afrinic \
  --format env

run_multi_rir_replay_case.sh

统一的 multi-RIR 入口。给定 rir 和模式后,它会自动选择该 RIR 的:

  • snapshot/base replay 输入
  • delta replay 输入
  • 对照 CSV
  • TAL / TA fixture
  • trust anchor 名称

用法:

./scripts/payload_replay/run_multi_rir_replay_case.sh <rir> [describe|snapshot|delta|both]

示例:

./scripts/payload_replay/run_multi_rir_replay_case.sh afrinic describe
./scripts/payload_replay/run_multi_rir_replay_case.sh lacnic snapshot
./scripts/payload_replay/run_multi_rir_replay_case.sh arin delta
./scripts/payload_replay/run_multi_rir_replay_case.sh ripe both

脚本会自动:

  • 从 multi-RIR bundle 中选择指定 RIR 的 snapshot/base 与 delta 输入
  • 读取该 RIR 的 Routinator base-replay / delta-replay timing 基线
  • 优先使用 base-locks.json.validationTimelocks-delta.json.validationTime 作为 replay --validation-time;若缺失才回退到 timings/base-replay.jsontimings/delta-replay.jsonstartedAt
  • target/live/multi_rir_replay_runs/<rir>/ 下生成:
    • snapshot replay 产物
    • delta replay 产物
    • per-RIR 合并 case report含 correctness + timing compare

默认 bundle 根目录为:

  • ../../rpki/target/live/20260316-112341-multi-final3

也可以通过 BUNDLE_ROOT 覆盖。

run_apnic_snapshot_replay_profile.sh

基于 multi-RIR bundle 中的 APNIC snapshot 输入,使用当前 replay 主流程执行一次带 --analyze--profile-cpu 的离线 profile。

./scripts/payload_replay/run_apnic_snapshot_replay_profile.sh

作用:

  • 使用 APNIC 的 snapshot/base replay 输入
  • 自动开启:
    • --analyze
    • --profile-cpu
  • 自动记录:
    • replay wall-clock 时长
    • Routinator baseline (base-replay)
    • analyze 目录路径
  • 生成:
    • report.json
    • run.log
    • meta.json
    • summary.md
    • 以及 target/live/analyze/<timestamp>/ 下的:
      • timing.json
      • flamegraph.svg
      • pprof.pb.gz

支持:

  • DRY_RUN=1:只打印命令,不真正执行
  • MAX_DEPTH / MAX_INSTANCES:用于限定 replay 范围
  • PROFILE_RUN_ROOT:覆盖 wrapper 产物输出目录

run_apnic_replay.sh

默认使用:

  • tests/fixtures/tal/apnic-rfc7730-https.tal
  • tests/fixtures/ta/apnic-ta.cer
  • target/live/payload_replay/payload-archive
  • target/live/payload_replay/locks.json

运行:

./scripts/payload_replay/run_apnic_replay.sh

产物默认输出到:

  • target/live/payload_replay_runs/

包含:

  • replay DB 目录
  • report.json
  • run.log
  • meta.json
  • summary.md

环境变量

可覆盖:

  • TAL_PATH
  • TA_PATH
  • PAYLOAD_REPLAY_ARCHIVE
  • PAYLOAD_REPLAY_LOCKS
  • VALIDATION_TIME
  • MAX_DEPTH
  • MAX_INSTANCES
  • OUT_DIR
  • RUN_NAME
  • DB_DIR
  • REPORT_JSON
  • RUN_LOG
  • META_JSON
  • SUMMARY_MD

说明

  • 该脚本依赖 rpki CLI 已支持:
    • --payload-replay-archive
    • --payload-replay-locks
  • replay 模式必须搭配离线 TAL/TA 输入,不会去访问真实 RRDP / rsync 网络源。

report_to_routinator_csv.py

rpki 生成的 report.json 转成 Routinator 风格的 VRP CSV

python3 scripts/payload_replay/report_to_routinator_csv.py \
  --report target/live/payload_replay_runs/<run>_report.json \
  --out target/live/payload_replay_runs/<run>_vrps.csv \
  --trust-anchor apnic

输出列为:

  • ASN
  • IP Prefix
  • Max Length
  • Trust Anchor

compare_with_routinator_record.sh

把 ours 生成的 VRP CSV 与 Routinator 的 record.csv 做对比:

./scripts/payload_replay/compare_with_routinator_record.sh \
  target/live/payload_replay_runs/<run>_vrps.csv \
  target/live/payload_replay/record.csv

会产出:

  • compare summary Markdown
  • only_in_ours.csv
  • only_in_record.csv

run_apnic_replay.sh 现有额外产物

脚本现在除了 report/meta/summary,还会额外生成:

  • vrps.csv
  • ROUTINATOR_RECORD_CSV 存在,则生成:
    • compare summary
    • only_in_ours.csv
    • only_in_record.csv

run_apnic_delta_replay.sh

使用 APNIC delta demo 数据集运行 base + delta replay

./scripts/payload_replay/run_apnic_delta_replay.sh

默认输入:

  • target/live/apnic_delta_demo/20260315-170223-autoplay/base-payload-archive
  • target/live/apnic_delta_demo/20260315-170223-autoplay/base-locks.json
  • target/live/apnic_delta_demo/20260315-170223-autoplay/payload-delta-archive
  • target/live/apnic_delta_demo/20260315-170223-autoplay/locks-delta.json
  • tests/fixtures/tal/apnic-rfc7730-https.tal
  • tests/fixtures/ta/apnic-ta.cer

输出目录默认:target/live/payload_delta_replay_runs/

run_apnic_delta_replay.sh compare outputs

脚本现在在 delta replay 结束后还会额外生成:

  • vrps.csv
  • compare summary Markdown
  • only_in_ours.csv
  • only_in_record.csv

默认 compare 输入是:

  • target/live/apnic_delta_demo/20260315-170223-autoplay/record-delta.csv

也可以通过环境变量覆盖:

  • TRUST_ANCHOR
  • ROUTINATOR_RECORD_CSV
  • VRPS_CSV
  • COMPARE_SUMMARY_MD
  • ONLY_IN_OURS_CSV
  • ONLY_IN_RECORD_CSV

write_multi_rir_case_report.py

把某个 RIR 的 snapshot replay 与 delta replay 的 meta.json、compare summary 以及 Routinator timing 基线合并成一个 per-RIR Markdown/JSON 报告。

该脚本通常由 run_multi_rir_replay_case.sh <rir> both 自动调用。

run_multi_rir_replay_suite.sh

顺序执行 5 个 RIR或环境变量 RIRS 指定的子集)的 both 模式,并最终生成 multi-RIR 汇总报告。

./scripts/payload_replay/run_multi_rir_replay_suite.sh

可覆盖环境变量:

  • BUNDLE_ROOT
  • SUITE_OUT_DIR
  • RIRS

最终输出:

  • <suite_out_dir>/<rir>/<rir>_case_report.md
  • <suite_out_dir>/multi_rir_summary.md
  • <suite_out_dir>/multi_rir_summary.json

write_multi_rir_summary.py

汇总 5 个 RIR 的 per-RIR case report生成 correctness + timing 总表与几何平均比值。