目录

openKylin 启动性能分析与优化

OS 大赛赛题:基于 openKylin 操作系统的启动过程分析与优化

快速开始

0. 恢复并确认未优化 baseline(VM 内)

bash env-setup/restore-vendor-baseline.sh --check
sudo bash env-setup/restore-vendor-baseline.sh --apply
sudo reboot

1. 环境初始化(VM 内,root)

# 安装目录、用户权限、LightDM 钩子与 systemd 服务;默认测桌面终点
sudo bash measure/install-measurement-services.sh --desktop-user "$USER" --profile desktop

# 重启生效
sudo reboot

2. 运行基线测量(宿主机)

# 在宿主机上执行批量回归
bash measure/run-suite.sh \
    --vm openkylin-vm \
    --snapshot baseline \
    --runs 10 \
    --mode virsh \
    --profile desktop \
    --exchange shared-dir \
    --shared-dir /mnt/vm-share

shared-dir 必须是宿主机可见、且来宾挂载为 /var/log/boot-perf 的同一目录;否则使用 --exchange ssh --ssh user@host。

Stage A 与 Stage B 必须分开采集,防止登录探针阻塞自动登录并污染桌面时长。Stage A 快照先执行 sudo measure/configure-measurement-profile.sh login 并停留在 greeter;Stage B 自动登录快照执行 sudo measure/configure-measurement-profile.sh desktop。两类结果应写入独立目录。

3. 分析结果

# 聚合统计
python3 analyze/aggregate.py results/baseline/

# 对比(默认拒绝无 boot_id 来源或与原始 time.txt 不一致的轮次)
python3 analyze/aggregate.py results/baseline/ --compare results/optimized/

# 分析 blame
python3 analyze/blame_parse.py results/baseline/run-01/systemd/blame.txt --top 20

# 分析关键路径
python3 analyze/critical_chain.py results/baseline/run-01/systemd/critical-chain.txt

# 依赖图分析(需 networkx)
python3 analyze/dep_graph.py --dot results/baseline/run-01/systemd/dependencies.dot \
    --blame results/baseline/run-01/systemd/blame.txt

# AI/Agent 辅助
python3 analyze/agent_advisor.py --blame results/baseline/run-01/systemd/blame.txt --mode rule-based

4. 应用优化

# 预览(不实际执行)
sudo bash optimize/apply-optimizations.sh --dry-run

# 应用优化
sudo bash optimize/apply-optimizations.sh

# 回退优化
sudo bash optimize/revert-optimizations.sh

5. 功能验证

# 检查所有功能(对照赛题验收清单)
bash tests/functional-check.sh

# 首用卡顿测试
bash tests/first-use-latency.sh

目录结构

├── README.md                          # 本文件
├── require.md                         # 赛题要求
├── plan.md                            # 优化方案(详细设计)
├── env-setup/                         # 环境初始化
│   ├── init-measurement-dirs.sh       # 创建 /var/log/boot-perf/
│   └── vm-snapshot-guide.md           # VM 快照操作指南
├── measure/                           # 计时与采集
│   ├── mark.sh                        # 统一计时标记器
│   ├── boot-session-init.service      # 清理易失状态并绑定本轮 boot_id
│   ├── early-boot-collect.service     # dmesg 采集
│   ├── login-ready.service            # Stage A 终点检测
│   ├── collect-login.path/timer/service # Stage A 终点后、开机事务外汇总
│   ├── configure-measurement-profile.sh # login/desktop 单终点切换
│   ├── greeter-setup-script           # LightDM greeter 起点钩子
│   ├── session-setup-script           # LightDM 用户登录完成钩子
│   ├── desktop-ready.desktop          # Stage B autostart
│   ├── readiness_probe.sh             # 桌面就绪探针
│   ├── collect-final.path/timer/service # desktop_ready 后、开机事务外采集并发布 READY
│   ├── finalize_run.py                # schema-v2 汇总与一致性校验
│   ├── collect-on-guest.sh            # 单次采集归档
│   ├── install-measurement-services.sh # 安装所有服务
│   └── run-suite.sh                   # 宿主机批量回归
├── analyze/                           # 分析工具
│   ├── aggregate.py                   # 统计聚合 + 对比
│   ├── blame_parse.py                 # blame 解析分类
│   ├── critical_chain.py             # 关键路径分析
│   ├── dep_graph.py                   # 依赖图建模
│   └── agent_advisor.py              # AI/Agent 辅助
├── optimize/                          # 优化实施
│   ├── manifest.csv                   # 优化清单
│   ├── apply-optimizations.sh         # 幂等应用
│   └── revert-optimizations.sh        # 幂等回退
├── tests/                             # 功能验证
│   ├── functional-check.sh            # 16 项功能检查
│   ├── first-use-latency.sh           # 首用卡顿探针
│   └── test_measurement.py             # 测量链路自动测试
├── results/
│   ├── baseline/                      # 基线数据
│   └── optimized/                     # 优化后数据
└── docs/                              # 文档
    ├── analysis-report.md
    ├── optimization-report.md
    ├── timing-method.md
    ├── validation-status.md
    └── cross-distro.md

计时方法

  • T0 = 内核启动瞬间(/proc/uptime=0),天然排除 BIOS/UEFI/Grub
  • Stage A(内核启动→图形登录就绪):T0 → login_ready
  • Stage B(用户登录→可用桌面):login_done → desktop_ready
  • 启动总时长:T0 → desktop_ready
  • 每个标记包含 uptime + wall-clock + boot_id;每轮启动先清理易失数据,避免快照中的旧标记污染结果
  • summary.json 与 READY 原子写入,宿主机仅在二者 boot_id 与当前内核一致时取数
  • systemd-analyze 的重采集发生在 desktop_ready 落点之后,不影响被测终点
  • 高频 CPU/IO 探针默认禁用,只在独立诊断轮次启用,不混入正式 before/after 数据
  • 每轮 summary 记录 measurement_profile;login/desktop profile 分别只启动本终点所需探针和汇总器
关于
145.5 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号