目录

BootPilot:openKylin 启动路径分析与可回滚优化

BootPilot 面向 openKylin 桌面启动诊断与优化,围绕“启动时间花在哪里、面板何时完成通知、补丁如何验证与恢复”三个问题,提供事件采集、等待定位、面板通知优化和可回滚试用工具。

系统启动耗时降低 17.6%;应用初始化提前约 4.148 秒。

✅ 参赛材料

本项目沿用初赛仓库的 master 分支,按本届决赛要求组织材料。

材料 查看入口
项目说明书 项目说明书.pdf
项目创新说明 项目创新说明.pdf
成员分工及主要贡献 成员分工及主要贡献说明.pdf
答辩 PPT 决赛现场演示PPT.pptx
原创承诺书 作品原创承诺书.pdf
工具使用说明 人工智能及第三方工具使用说明.pdf
源代码与补丁 src/ · patches/ · tools/
测试与实验记录 tests/ · 五组配对实验
可验证交付物 demo/,含候选二进制、源码归档及校验清单
演示视频 决赛演示视频.mp4,时长 73.3 秒,约 1.97 MB

🚀 优化效果

系统服务优化

通过按需停用未使用的系统服务,减少系统启动开销。优化前后各测试五轮,统计中位数:

指标 原版 优化版 耗时下降
系统启动总时长(内核 + 用户空间) 6.712 s 5.532 s 17.6%

系统启动总时长减少 1.180 秒。测试数据见 系统服务测试结果,原始记录与复算方法见 系统服务实验记录。

桌面会话优化

通过改进面板完成通知机制,消除会话中的通知等待。2026-10-05,在同一实验环境下开展五组 A/B 配对测试,原版与补丁版各五轮。

指标 原版 补丁版
进入应用初始化阶段的时间(组内中位数) 6.189 s 2.188 s
出现面板通知超时的轮数 5/5 0/5
桌面人工功能检查正常的轮数 5/5 5/5

五组实验中,补丁版均更早进入应用初始化阶段,逐对提前量中位数为 4.148 s,范围为 3.930–4.232 s。

桌面会话计时说明

  • 计时起点: ukui-session main 入口,使用 CLOCK_MONOTONIC 时钟。
  • 计时终点: 会话进入应用初始化阶段的事件。
  • 逐对提前量: 每组原版时间减去补丁版时间,再对五组差值取中位数。
  • 功能检查: 菜单与任务栏、文件管理器、终端、设置、中文输入、网页和声音。

原始记录见 实验数据,可通过 python3 tests/verify_finals_evidence.py 核验采集回执并重新计算结果。

💡 项目方案

UKUI 登录启动包含界面加载、组件完成通知和应用初始化等环节。BootPilot 将这些事件关联起来,定位“界面已就绪但会话仍在等待通知”的问题,并对面板完成通知进行条件化改进。

核心功能 实现内容
系统服务优化 根据服务使用情况减少启动开销,提供配置检查、应用与恢复工具。
启动路径分析 采集 systemd 时间、关键链与会话事件,关联界面就绪、通知和应用初始化记录,定位等待环节。
面板通知优化 检查关键组件加载、可见性和有效尺寸,在后续新帧后复核界面状态,异步尝试一次完成通知,并保留原有超时兜底。
可回滚试用 独立存放候选工件,默认选择原版;通过单次申请启用候选,核验实际运行身份,并支持显式恢复配置。

项目适用于 openKylin 桌面启动问题定位、UKUI 面板补丁验证及原版与候选版本的对照实验。整体设计与实现详见 项目说明书,三项主要改进详见 项目创新说明。

🎬 演示与复现

查看 决赛演示视频。也可通过 答辩 PPT 查看项目方案与测试结果,通过 可验证交付物 和 部署说明 了解候选版本的安装、运行及恢复流程。

🛠️ 环境与依赖

  • 运行环境:openKylin 2.0 SP2、UKUI / Wayland、Python 3、systemd。
  • 构建依赖:CMake、C++ 编译器、Qt 5 和 UKUI 开发库。

构建方法

Python 模块不需要编译。在固定提交的独立 ukui-panel 源码副本中检查和应用 patches/ukui-panel-4.22.0.0-ok0.5/0001-experimental-ready-notification.patch,再运行:

cmake -S bootpilot-tests -B build-notifier-tests -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build-notifier-tests -j2
QT_QPA_PLATFORM=offscreen QT_QUICK_BACKEND=software dbus-run-session -- ./build-notifier-tests/test-notifier
cmake -S . -B build-panel -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build-panel --target ukui-panel -j2

也可使用 demo 中已应用补丁的源码归档,直接进入构建步骤。构建产物通过独立目录部署,保留系统原版面板。详细步骤见 补丁来源、构建与许可证。

安装与运行

先执行只读检查:

python3 -B tools/bootpilot.py panel-plan
python3 -B tools/bootpilot.py system-timing --output /tmp/bootpilot-system-new.json
python3 -B tools/bootpilot.py panel-bundle verify --manifest demo/artifacts/manifest.json --manifest-sha256 598bc7553a97ca54944efa31a1b46f319d94b9d0b72edc3cef44d0ac39b16b91

安装流程为:检查适用性 → 部署独立工件 → 接入原版并核验 → 申请单次候选 → 重启登录并验收 → 恢复原版配置。恢复后的原版在下一次登录时核验。完整命令见 干净环境部署和恢复,工件清单见 交付物说明。

测试与验证

python3 -B -m unittest discover -s tests -v
python3 tests/verify_finals_evidence.py

Python 测试覆盖候选选择、请求消费、身份校验和配置恢复;Linux 专属测试在 Linux 环境执行,Qt 模块测试使用独立 D-Bus。对照实验证据 包含十轮原始事件、采集回执和功能反馈,验证脚本可核验哈希并离线复算实验结果。

📁 仓库目录

BootPilot/
├── README.md
├── src/                         # 项目源代码
├── docs/                        # 项目说明、创新与贡献说明、技术文档
├── tests/                       # 测试脚本与五组配对实验记录
├── demo/                        # 候选二进制、源码归档与校验材料
├── presentation/                # 答辩 PPT 与演示视频
├── 作品原创承诺书.pdf
├── patches/                     # UKUI 补丁及上游许可证
├── tools/                       # 命令行入口
├── scripts/                     # 构建与辅助脚本
├── profiles/                    # 服务策略配置
├── systemd/                     # systemd 配置
└── results/                     # 历史实验记录

当前材料状态见 提交材料清单。

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

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