目录

BootTracer

BootTracer 是面向 openKylin 2.0 SP2 桌面系统的启动性能分析与安全优化工具。它对内核完成后的系统启动、图形登录以及用户登录后的桌面可用阶段进行多轮采集,构建依赖关系和服务时间线,生成可解释的实验候选,并通过单变量实验、功能验证和回滚机制验证优化收益。

项目不会根据候选分数直接修改系统。任何正式优化都必须先证明性能收益,同时保证图形桌面、基础网络、声音、输入法、键盘和鼠标等能力正常工作。

项目亮点

  • 自动采集 T0 至 T3 阶段时间、systemd、journal、用户服务、XDG 自启动和 D-Bus 激活证据。
  • 对启动依赖、激活关系、阶段重叠和关键路径进行结构化分析。
  • 使用多轮统计识别稳定候选、环境变化和异常轮次。
  • 对候选进行只读身份解析、拓扑补证和风险审查。
  • 执行可回滚的单变量实验,并自动完成多轮复测。
  • 在正式应用中保存对象级快照,验证失败时立即恢复。
  • 对桌面、网络、声音、输入法和输入设备执行完整性检查。

支持环境

当前仅支持以下环境:

  • openKylin 2.0 SP2 x86_64 功能完整且干净的系统;
  • VM虚拟机环境;
  • 需要额外安装的依赖:Graphviz

其他发行版、物理机和经过深度定制的系统尚未纳入验证范围。

系统架构

系统总体架构图加载失败

启动采集
  -> 单轮结构化分析
  -> 多轮统计
  -> 候选过滤
  -> 只读身份、激活拓扑与安全补证
  -> 最终实验候选收敛
  -> 单变量实验
  -> 正式应用与完整性验证
  -> 多轮对照复测或回滚

目录结构

详细项目目录结构见目录结构

模块职责和数据流见 架构说明。

快速开始

1. 获取代码

git clone https://gitlink.org.cn/LongyueCheng/okczxtqdxnfxyyh.git BootTracer
cd BootTracer

2. 部署和检查运行环境

进入维护模式:

sudo mm-cli -o
sudo reboot
sudo apt update
sudo apt install -y gcc graphviz python3

检查是否安装成功:

dot -V

开始部署 T3 探针,需要使用 root 权限:

cd BootTracer
chmod +x ./boot_environment/deploy_boot_analyzer.sh
sudo ./boot_environment/deploy_boot_analyzer.sh

然后固化并退出维护模式:

sudo mm-cli -c -a
sudo reboot

使用普通桌面用户执行:

cd BootTracer
chmod +x ./install.sh ./boottracer.sh
./install.sh

该命令检查目录、关键文件、运行依赖、Shell 语法和 Python 语法,不应用任何系统优化。它还会补充脚本执行权限,并创建分析和实验输出目录。

建议在正式运行前设置系统自动登录,方便后续自动重启和桌面自启动继续采集。如果没有设置,流程会停在用户登录界面;每轮手动输入密码登录后仍可继续。

可选:执行当前仓库的纯 Python 测试。

python3 -m unittest discover -s boot_analysis/05_multi_round/tests -p 'test_*.py'
python3 -m unittest discover -s boot_analysis/06_candidate_filter/tests -p 'test_*.py'
python3 boot_analysis/07_causal_review/test_generate_assessment.py
python3 -m unittest discover -s boot_experiment/tests -p 'test_*.py'
python3 -m unittest discover -s boot_apply/tests -p 'test_*.py'

3. 一键部署优化包

3.1. 生成正式计划

根据多机器实验结果筛选的基础优化规则已写入boot_apply/base_plan.config,可通过下述命令查看:

cat boot_apply/base_plan.config

3.2 采集优化前基线数据

推荐采集 11 轮,避免首轮因虚拟机未预热导致数据异常:

./boottracer.sh optimize baseline 11 2-11

自动轻量重启结束后,可查看当前进度:

cd BootTracer
./boottracer.sh optimize benchmark-status

# 显示如下信息,表示已结束
model=baseline status=completed completed=11/11 selection=2-11

3.3 生成最终计划

结合环境画像,生成当前机器适配的最终优化计划:

./boottracer.sh optimize plan

可检查环境画像及最终优化计划:

cat boot_apply/output/final_plan.config
cat boot_apply/output/final_plan.config.meta.json

如需指定基础计划、输出或目标桌面用户:

./boottracer.sh optimize plan \
  --base-plan boot_apply/base_plan.config \
  --output boot_apply/output/final_plan.config \
  --target-user <桌面用户名>

3.4 正式应用优化

# 应用最终计划
./boottracer.sh optimize apply

# 检查系统完整性
./boottracer.sh optimize verify

# 如果应用或完整性检查失败,立即执行
./boottracer.sh optimize rollback
./boottracer.sh optimize verify

3.5 采集优化后对比数据

设置同上:

./boottracer.sh optimize measure 11 2-11

自动轻量重启结束后,可查看当前进度:

cd BootTracer
./boottracer.sh optimize benchmark-status

# 等待显示如下信息,表示已结束
model=optimized status=completed completed=11/11 selection=2-11

查看优化对比数据:

cat boot_apply/output/benchmark_report.md

3.6 其他命令

可查看、停止或恢复当前复测任务:

./boottracer.sh optimize benchmark-status
./boottracer.sh optimize benchmark-stop
./boottracer.sh optimize benchmark-resume

任何完整性检查失败都应立即停止复测并执行:

# 回滚最近一次正式部署
./boottracer.sh optimize rollback

# 或显式指定 /var/lib/boottracer/apply 下的某次部署目录
./boottracer.sh optimize rollback /var/lib/boottracer/apply/<apply_批次>

正式应用会把对象级快照和完整部署状态保存在 /var/lib/boottracer/apply/,摘要复制到:

boot_apply/output/deployment_manifest.json
boot_apply/output/success_apply.log

4. 验证实验模块

4.1 运行基线分析

统一入口必须由普通桌面用户运行,不要在命令前添加 sudo。

# 默认采集 10 轮
./boottracer.sh analyze

# 显式指定采集轮数
./boottracer.sh analyze 10

./boottracer.sh analyze 轮数

流程会创建临时的免密重启规则、自动重启虚拟机,并在用户重新登录后继续执行。最后一轮结束后会显示每轮 T0~T3、P1、P2 和 P1+P2,并要求选择参与统计的连续双闭区间。

all     # 使用当前全部采集轮次
2-10    # 仅将第 2 至第 10 轮纳入统计

直接回车等同于 all。无人值守模式也默认使用 all。如需在首次启动时预设区间,可执行:

BOOTTRACER_STATISTICS_ROUNDS=2-10 ./boottracer.sh analyze 10

所有原始轮次都会保留;手动排除只影响统计口径。缺失阶段标记、规则配置不一致或分析不完整的轮次还会被单独标记为无效。

轮次分析结果保存在:

boot_analysis/output/runs/analysis_<YYYYMMDD_HHMMSS>_r<轮数>/

boot_analysis/output/latest 指向最近一次分析批次。原始 benchmark 账本和辅助日志保存在:

$HOME/BootTracer/benchmark_data/

推荐阅读顺序:

01_rounds/round_NN/report/boot_analysis_dashboard.html
02_multi_round/multi_round_boot_analysis_report.md
03_candidates/experiment_candidate_review_report.md
03_candidates/experiment_candidates.csv
04_causal_review/assessments/assessment_summary.md
  • experiment_candidates.csv 只表示证据足以进入人工实验设计,不代表允许直接执行系统修改;
  • 当没有满足条件的候选或只读补证未完成时,最终候选表或 04_causal_review/ 可能为空或缺失;
  • 单轮图表中的分数、依赖和重叠均不能替代多轮单变量实验。

如果需要安全终止正在进行的普通分析:

bash ./boot_environment/stop_benchmark.sh

该命令会移除采集自启动项、停止当前批量脚本并收回免密重启规则,但保留已经采集的历史数据。

4.2 分阶段单变量实验

三个实验阶段都遵循“一次只改变一个变量”的原则:

  • 阶段一用于候选初筛,识别明显正收益、明显负收益和需要复测的对象。
  • 阶段二用于专项复测和稳定性确认,是正式优化规则的主要证据来源。
  • 阶段三是补充实验入口,用于候选外对象或需要人工设计的后续方案,不自动进入正式计划。

先从最新的 03_candidates/experiment_candidates.csv 和对应证据包中选择低风险对象,写入阶段一配置:

boot_experiment/experiment_stage1_type.config

三个配置文件都使用六个 TAB 分隔字段。

字段 说明
baseline 基线分析批次名或完整路径,例如 analysis_20260724_090000_r10
target 严格的 .service 或 .timer 对象名
action disable、mask、delay_timer、timer_persistent_false 或 user_mask
reason 实验理由;候选表外的人工对象必须填写
round 实验测量轮数,当前代码要求不少于 3,建议 4~5 轮
action_parameter 仅 delay_timer 填写,例如 70s;其他动作留空

示例(字段之间必须是实际 TAB,不是空格):

baseline    target    action    reason    round    action_parameter
analysis_20260724_090000_r10    example-delay.service    delay_timer    验证移出 T0-T3 后的收益    4    70s

disable、mask、timer_persistent_false 和 user_mask 行的最后一个字段必须留空。

然后执行:

./boottracer.sh batch boot_experiment/experiment_stage1_type.config

可以添加 --limit 进行分段实验:

./boottracer.sh batch boot_experiment/experiment_stage1_type.config --limit 3-5

3-5 是从 1 开始计数的双闭区间,表示仅对配置中的第 3、第 4、第 5 个对象分别执行单变量实验;结束序号不能超过配置中的对象总数。

需要复测的对象写入 experiment_stage2_retest.config。补充实验写入 experiment_stage3_other.config。实验2和3同样支持 –limit 选项。

./boottracer.sh batch boot_experiment/experiment_stage2_retest.config
./boottracer.sh batch boot_experiment/experiment_stage3_other.config

如需单独调试一个实验,可使用:

./boottracer.sh experiment start \
  --baseline <baseline_name> \
  --target <example.service> \
  --action <method> \
  --reason "验证该服务是否影响启动关键阶段" \
  --rounds 4

./boottracer.sh experiment status
./boottracer.sh experiment keep
./boottracer.sh experiment rollback

keep 只接受最终判定为 keep 的活动实验。环境或数据无效时可先恢复配置,再丢弃本实验专属测量:

./boottracer.sh experiment abort --reason vm_not_warmed
./boottracer.sh experiment drop --reason environment_changed

三个阶段的完整执行方法和判定规则见 实验说明。

完整复现步骤见 复现指南。

实验结果

主机器实验环境

环境项目 采集结果
操作系统 openKylin 2.0 SP2
内核版本 Linux 6.6.0-19-generic
系统架构 x86-64
虚拟化类型 VMware
运行平台 虚拟机
硬件厂商 VMware, Inc.
硬件型号 VMware Virtual Platform
固件版本 6.00
系统维护模式 Normal Mode
环境一致性 各轮次操作系统、内核、架构及虚拟化平台一致

主机器应用基线与结果分析

指标 P1 P2 P1_P2
基线中位数(s) 2.246881 7.458144 9.658113
优化后中位数(s) 1.955926 6.859925 8.806871
中位数改善(s) 0.290955 0.598219 0.851242
中位数提升率 12.95% 8.02% 8.81%
基线平均数(s) 2.241133 7.517879 9.759011
优化后平均数(s) 1.970305 6.871461 8.841766
平均数改善(s) 0.270828 0.646418 0.917245
平均数提升率 12.08% 8.60% 9.40%
基线标准差(s) 0.052938 0.285440 0.277361
优化后标准差(s) 0.045788 0.131162 0.132741
标准差变化(s) 0.007151 0.154277 0.144621
标准差变化率 13.51% 54.05% 52.14%

多机器应用基线与结果分析 —— 只包含P1_P2总耗时数据

P1_P2 指标 机器1 机器2 机器3
基线中位数(s) 9.658113 22.182239 9.594997
优化后中位数(s) 8.806871 18.227441 8.713665
中位数改善(s) 0.851242 3.954798 0.881332
中位数提升率 8.81% 17.83% 9.19%
基线平均数(s) 9.759011 22.080721 9.432098
优化后平均数(s) 8.841766 18.397044 8.526621
平均数改善(s) 0.917245 3.683678 0.905477
平均数提升率 9.40% 16.68% 9.60%
基线标准差(s) 0.277361 0.577552 0.370422
优化后标准差(s) 0.132741 0.737805 0.081868
标准差变化(s) 0.144621 -0.160253 0.288555
标准差变化率 52.14% -27.75% 77.90%

安全边界

详细约束见 安全设计。

已知限制

  • 当前只验证 openKylin 2.0 SP2 x86_64 虚拟机环境。
  • D-Bus 和仅持续时间事件可能缺少完整起止区间,需要人工补证。
  • 系统完整性脚本可以验证服务和设备状态,但不能替代人工桌面交互测试。
  • T3 是 XDG 自启动探针执行时间,不是对所有桌面组件完成渲染和交互就绪的逐项证明。
  • 普通多轮分析的 benchmark 状态目录固定为 $HOME/BootTracer/benchmark_data。
  • 同一时间只允许存在一个活动实验;批量实验也必须逐对象执行和恢复。

文档索引

视频展示链接

受视频存储大小限制,这里只提供百度网盘链接,视频清晰度有限,建议辅以README.md文件。网盘提取码:5efa

项目信息

如有任何问题,欢迎联系。

关于
12.6 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

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