提交原创承诺书
OS 大赛赛题:基于 openKylin 操作系统的启动过程分析与优化
bash env-setup/restore-vendor-baseline.sh --check sudo bash env-setup/restore-vendor-baseline.sh --apply sudo reboot
# 安装目录、用户权限、LightDM 钩子与 systemd 服务;默认测桌面终点 sudo bash measure/install-measurement-services.sh --desktop-user "$USER" --profile desktop # 重启生效 sudo reboot
# 在宿主机上执行批量回归 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。
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。两类结果应写入独立目录。
sudo measure/configure-measurement-profile.sh login
sudo measure/configure-measurement-profile.sh desktop
# 聚合统计 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
# 预览(不实际执行) sudo bash optimize/apply-optimizations.sh --dry-run # 应用优化 sudo bash optimize/apply-optimizations.sh # 回退优化 sudo bash optimize/revert-optimizations.sh
# 检查所有功能(对照赛题验收清单) 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
/proc/uptime
uptime + wall-clock + boot_id
summary.json
READY
systemd-analyze
desktop_ready
measurement_profile
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
openKylin 启动性能分析与优化
快速开始
0. 恢复并确认未优化 baseline(VM 内)
1. 环境初始化(VM 内,root)
2. 运行基线测量(宿主机)
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. 分析结果
4. 应用优化
5. 功能验证
目录结构
计时方法
/proc/uptime=0),天然排除 BIOS/UEFI/Grubuptime + wall-clock + boot_id;每轮启动先清理易失数据,避免快照中的旧标记污染结果summary.json与READY原子写入,宿主机仅在二者 boot_id 与当前内核一致时取数systemd-analyze的重采集发生在desktop_ready落点之后,不影响被测终点measurement_profile;login/desktop profile 分别只启动本终点所需探针和汇总器