目录

openKylin 启动性能分析与优化工具

一、作品简介

本项目是一套面向 openKylin/UKUI 桌面系统的启动性能分析与优化工具,围绕“测量—分析—优化—验证”构建完整工作流程,覆盖从 Linux 内核完成启动、图形登录界面出现,到用户桌面真正可用的全过程。

项目将启动过程划分为两个阶段:

阶段 范围 主要对象
Phase 1 内核完成后至图形登录界面就绪 systemd 系统服务、启动依赖和关键链
Phase 2 用户登录后至桌面环境可用 用户服务和桌面自启动项

启动优化器通过 systemd-analyze timeblamecritical-chain 采集启动数据,结合风险分级规则识别耗时服务,并提供以下优化能力:

  • 服务裁剪:关闭不需要的系统服务、用户服务和桌面自启动项;
  • 无效等待消除:处理网络就绪、时间同步、开机动画等非必要阻塞;
  • 启动顺序调整:弱化非必要依赖,将部分后台任务延迟到桌面就绪后执行;
  • 安全保护:保护登录、网络、文件系统、D-Bus 等关键服务;
  • 自动回滚:根据实际执行项目生成对应的恢复脚本。

启动就绪探针分别测量两个用户可感知指标:

  • login:从 systemd 启动到图形登录界面就绪;
  • desktop:从图形用户会话建立到桌面环境可用。

项目默认采用预览模式。只有显式添加 --apply 后,优化器才会修改系统配置。

项目结构

.
├── scripts/
│   ├── README.md                      # 探针日志管理工具说明
│   └── probe-log-mgr.sh               # 探针日志管理工具
├── src/
│   ├── boot_optimizer/
│   │   ├── README.md                 # 启动优化器详细说明
│   │   ├── optimize.py               # 两阶段统一优化入口
│   │   ├── optimize_boot.py          # Phase 1 系统级优化
│   │   ├── optimize_phase2.py        # Phase 2 用户会话优化
│   │   └── optimize_rules.py         # 系统级优化规则
│   └── startup_ready_probe/
│       ├── README.md                 # 启动就绪探针详细说明
│       ├── startup_ready_probe.py    # login/desktop 探针
│       ├── deploy.sh                 # 探针部署脚本
│       ├── uninstall.sh              # 探针卸载脚本
│       └── login-ready-probe.service # systemd 服务模板
├── manage.sh                         # 根目录统一调用脚本
├── README.md                         # 作品简介与运行说明
├── 项目说明书.docx
├── 演示视频.mp4
├── 作品介绍PPT.pptx
└── 作品原创承诺书.docx

二、运行说明

2.1 运行环境

  • openKylin 或其他使用 systemd 的 Linux 桌面发行版;
  • Python 3.8 及以上版本;
  • Bash;
  • systemctlsystemd-analyzeloginctl
  • 可正常登录的图形桌面环境。

核心 Python 程序仅使用标准库,无需安装第三方 Python 依赖。完整功能必须在 Linux 目标机运行,Windows 环境不能提供 systemd 启动数据。

2.2 环境检查与统一入口

以下命令均在项目根目录执行。首次运行先添加执行权限并检查环境:

chmod +x manage.sh
./manage.sh check

查看统一调用脚本帮助:

./manage.sh help

2.3 部署探针

默认同时部署登录界面探针和桌面就绪探针:

sudo ./manage.sh probe deploy

常用部署方式:

# 指定实际登录桌面的用户
sudo ./manage.sh probe deploy --user alice

# 只部署 login 阶段探针
sudo ./manage.sh probe deploy --no-desktop

# 部署后立即运行一次 login 探针
sudo ./manage.sh probe deploy --start-now

# 严格要求识别到显示服务
sudo ./manage.sh probe deploy --require-display-server

# 实际启动文件管理器、终端和设置中心进行应用启动测试
sudo ./manage.sh probe deploy --launch-apps

# 严格检测输入法服务
sudo ./manage.sh probe deploy --strict-ime

# 同时启用应用启动测试和输入法严格检测
sudo ./manage.sh probe deploy --launch-apps --strict-ime

# 指定用户,并同时启用显示服务、应用启动和输入法严格检测
sudo ./manage.sh probe deploy --user alice --require-display-server --launch-apps --strict-ime

# 指定探针安装目录
sudo ./manage.sh probe deploy --install-dir /var/lib/startup-ready-probe/bin

部署完成后重启系统,采集完整启动数据:

sudo reboot

探针默认安装和输出位置:

路径 内容
/opt/startup-ready-probe/startup_ready_probe.py 探针程序
/etc/systemd/system/login-ready-probe.service login 探针服务
~/.config/autostart/desktop-ready-probe.desktop desktop 探针自启动项
/var/log/startup-ready-probe/ login 和 desktop 测量结果

更完整的探针参数和检测项说明参见 启动就绪探针说明

2.4 查看探针结果

./manage.sh logs              # 查看最新结果
./manage.sh logs --list       # 列出全部日志
./manage.sh logs --stats      # 统计最小、最大和平均耗时
./manage.sh logs --slow 15    # 查看耗时超过 15 秒的记录
./manage.sh logs --view 2     # 查看编号为 2 的日志

也可以直接查看服务状态和日志:

systemctl status login-ready-probe.service
journalctl -b -u login-ready-probe.service
sudo ls -lh /var/log/startup-ready-probe/

完整参数、统计方式和日志清理说明参见 探针日志管理工具说明

2.5 预览启动优化方案

优化器默认只分析并生成建议,不修改系统:

# 预览两个阶段;普通用户运行时会跳过需要 root 的 Phase 1
./manage.sh optimize

# 预览系统级 Phase 1
sudo ./manage.sh optimize --phase 1

# 预览当前用户的 Phase 2
./manage.sh optimize --phase 2

# 预览指定用户的 Phase 2
./manage.sh optimize --phase 2 --user=alice

预览后会在项目根目录生成:

  • boot_optimize_plan.txt:Phase 1 系统级优化方案;
  • phase2_optimize_plan.txt:Phase 2 用户会话优化方案。

2.6 执行启动优化

阅读预览方案后,添加 --apply 执行变更:

# 执行 Phase 1 低风险优化并逐项确认
sudo ./manage.sh optimize --phase 1 --apply

# 执行指定用户的 Phase 2
./manage.sh optimize --phase 2 --apply --user=alice

# 连续执行两个阶段
sudo ./manage.sh optimize --apply

其他执行方式:

# Phase 1 同时包含中风险建议
sudo ./manage.sh optimize --phase 1 --apply --risk=medium

# 跳过逐项确认
sudo ./manage.sh optimize --phase 1 --apply --yes

优化器参数:

参数 说明
--phase 1 只分析或执行系统级优化,需要 root
--phase 2 只分析或执行用户会话优化
--apply 执行变更;省略时为预览模式
--yes 跳过逐项确认
--risk=medium Phase 1 同时包含低风险和中风险项
--user=NAME 指定 Phase 2 用户

优化器的规则、输出和实现说明参见 启动优化器说明

2.7 回滚优化

执行优化后,根目录会生成对应的回滚脚本:

# 回滚 Phase 1
sudo ./manage.sh rollback 1

# 回滚 Phase 2
./manage.sh rollback 2

回滚完成后需要重启系统或重新登录,使服务和用户会话配置重新生效。

2.8 卸载探针

# 卸载探针并清理日志
sudo ./manage.sh probe uninstall

# 指定需要清理桌面自启动项的用户
sudo ./manage.sh probe uninstall --user alice

# 卸载探针但保留测量日志
sudo ./manage.sh probe uninstall --keep-logs

2.9 推荐测试流程

  1. 部署探针并连续重启至少 5 次,记录优化前基线;
  2. 预览 Phase 1 和 Phase 2 优化方案;
  3. 审核命中服务及操作原因,优先执行低风险项;
  4. 重启系统或重新登录,使优化配置生效;
  5. 再次进行多轮测量;
  6. 对比启动总时长、关键服务耗时、登录界面就绪时间和桌面可用时间;
  7. 验证登录、网络、声音、输入法、文件管理器、终端和设置中心等功能。

建议使用多轮测量的中位数作为主要对比结果,避免磁盘缓存、网络状态和后台任务造成的单次波动。

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

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