edge-faas-cpp

Edge FaaS — 边缘 Serverless 冷启动缓解

中文 English

CSCI 599: Network Systems for Cloud Computing — Spring 2026
Advisor: Prof. Ramesh Govindan · USC

📄 Paper (PDF)


边缘推理节点跑不动 Firecracker 这类 MicroVM —— 进程池 + Copy-on-Write fork 是更现实的隔离选择。本项目用 C++ + Python 实现一个轻量 FaaS 网关, 在亚微秒级控制面开销下显著降低 cold-start 数。

核心结果

指标 数据(n=5,95% CI)
Cold-start 减少(vs Reactive baseline) −31%(48 ± 19 vs 70 ± 1)
Cold-start 减少(vs ARIMA baseline) −26%(48 ± 19 vs 64 ± 12)
Worker 启动加速(CoW 模板) (~900 ms → ~100 ms)
Predictor 推理延迟 p99 191 μs(比 ARIMA 的 72 ms 低 2 个数量级以上
Inter-burst sweet spot W = 20 - 60 s(fixed/adaptive 都接近 0 cold)

两个核心 idea

1. Copy-on-Write 模板进程

启动时一次性 fork 一个 Python “template” 进程,把 Pillow / OpenCV 这类重型 依赖一次性 import 完。之后每个 worker 通过 os.fork() 从 template 继承 内存页 —— Linux CoW 让 fork 几乎免费,只 copy 真正被写过的页

→ 不用 container runtime、不用 image registry、不用 VM snapshot。

2. EWMA + CUSUM + Little’s Law 预测控制面

整个 predictor 是 O(1) 时间空间,每个 tick 推理代价亚微秒级。

系统架构

实验结果

四张图来自论文实验(n=5 trials,95% CI),完整论文见 Final Report (PDF)


主结果 — Fixed CUSUM 48 ± 19 vs Reactive 70 ± 1 → −31%; Adaptive 在 W=35 sweet spot 0 cold,但短 W 翻车(见右下)

CoW × Predictor 消融 — 关掉 CoW 后 Reactive +69 cold(CoW 救命); Fixed CUSUM 保守扩容,CoW 影响统计不显著

Warmup sweep — Adaptive 在 W ≤ 10s 灾难性失败 (τ_σ cliff,195 cold @ W=5s);W = 20-60s 是 sweet spot

Pareto trade-off — Fixed CUSUM 在 PSS/cold 双轴前沿; 用 PSS(而不是 RSS)避免 CoW 共享页双计(约 2.3×)

构建与运行

依赖:

sudo apt install build-essential
pip install Pillow statsmodels psutil scipy

构建:

make clean && make

启动 server(5 个 mode 任选其一):

./server ewma            # EWMA + Fixed CUSUM —— 主方法(默认)
./server ewma_adaptive   # Standardized CUSUM —— 标准化 z-score 变体
./server reactive        # 反应式 baseline(无预测)
./server static 15       # 固定 15 worker baseline
./server arima           # ARIMA(2,1,2) baseline

# 加 --no-cow 关闭 CoW template(用于消融实验)
./server ewma --no-cow

发负载(默认 4 cycle Bursty-Ramp workload):

python3 load_tester.py

可选参数:

python3 load_tester.py --warmup-c234 60      # 调 inter-burst 间隔
python3 load_tester.py --spike-rps 100       # 调 spike 量级
python3 load_tester.py --no-ramp             # 阶跃流量(无 ramp 信号)

论文实验复现

# (1) 主实验:5 mode × n=5 trial × CoW={ON,OFF} = 50 runs,~3h
./run_multi_trial.sh 5 --ablation

# (2) Warmup-sweep 灵敏度:6 W × 2 mode × n=5 = 60 runs,~3h
./run_sweep.sh --trials 5

# (3) Step workload(无 ramp):5 mode × n=3 = 15 runs,~50 min
./run_multi_trial.sh 3 --no-ramp --tag step

# (4) 聚合 + 95% CI(产出 markdown 表 + summary.csv + per_cycle.csv)
python3 analyze_trials.py logs/<campaign_dir>/

# (5) 画论文 figure(吃 summary.csv)
python3 figures/plot_main_n5.py    logs/<main_campaign>/
python3 figures/plot_ablation.py    logs/<main_campaign>/
python3 figures/plot_pareto_pss.py  logs/<main_campaign>/
python3 figures/plot_sweep_n5.py    logs/<sweep_campaign>/

项目历程

详细的 proposal → Check #1 → Check #2 → Pre 阶段开发记录、设计决策、踩坑过程: