目录

openKylin 桌面系统启动性能分析与优化

Linux 操作系统启动性能分析与优化(社区赛题)参赛作品

本项目面向 openKylin 2.0 SP2 AMD64 桌面系统,对“内核启动完成至图形登录界面就绪”和“用户登录至桌面可用”两个阶段进行拆解、测量与优化。在保留图形登录、UKUI 核心桌面、网络、声音、输入法、文件管理器等基础能力的前提下,项目依次完成了非核心自启动项裁剪、网络在线等待链优化和低风险系统服务裁剪。

所有优化均采用可回滚方式实施,并使用三次独立重启测试验证结果。最终三次测试中,系统状态均为 running,失败服务数均为 0。

1. 核心成果

下表中的数据均为三次独立冷启动测试的平均值。

指标 优化前基线 最终优化后 缩短时间 改善幅度
systemd 总启动时间 11.94 s 10.70 s 1.24 s 10.4%
graphical.target 达成时间 7.15 s 5.48 s 1.67 s 23.4%
图形登录界面就绪时间 9.88 s 8.46 s 1.42 s 14.4%
桌面可用时间 23.53 s 20.73 s 2.80 s 11.9%

原始数据:

2. 评测边界与方法

本项目默认不计入 BIOS/UEFI 自检、固件初始化及 GRUB 菜单等待时间,重点测量操作系统接管启动流程后的两个阶段:

  1. 图形登录界面就绪阶段:显示管理器成功展示登录界面,键盘和鼠标可以响应,用户能够发起登录,且 display-manager、D-Bus、NetworkManager 等基础服务工作正常。
  2. 桌面可用阶段:用户成功进入 UKUI,桌面核心组件加载完成,文件管理器、终端、设置中心等常用应用可以启动,网络、声音和输入法等基础功能可用。

主要采集手段包括:

  • systemd-analyze time:统计内核、用户空间及总启动时间;
  • systemd-analyze blame:识别耗时服务;
  • systemd-analyze critical-chain:定位关键依赖路径;
  • 自定义登录与桌面就绪探针:记录 LOGIN_READY_TIMEDESKTOP_READY_TIME
  • systemctljournalctl、进程与资源状态:验证服务状态、故障情况和桌面功能;
  • 每个阶段执行三次独立重启测试,使用平均值比较,避免采用单次最优结果。

3. 优化方案

Round 1:非核心自启动项裁剪

分析 UKUI 用户会话及系统级 autostart 项,减少天气、日历、侧边栏、用户引导、后台升级提醒等非首屏必要组件在登录阶段造成的资源竞争。

Round 2:网络在线等待链优化

结合 critical-chain 和依赖关系检查,处理 NetworkManager-wait-online.service 以及当前环境未实际使用的 strongswan-starter.service,同时保留 NetworkManager、DNS 解析、Wi-Fi 和 UKUI 网络管理能力。

Round 3:低风险系统服务裁剪

诊断并处理后台自动更新任务、未使用的 VPN/域控相关服务、定时任务及异常服务状态,避免启动期资源竞争。高风险或功能边界不明确的服务不做裁剪。

4. 安全边界

本项目不通过关闭必要功能换取表面性能提升。优化过程中持续保留并验证:

  • LightDM 图形登录与 UKUI 核心桌面组件;
  • NetworkManager、DNS 解析和无线网络能力;
  • D-Bus、权限认证、账户管理和磁盘挂载;
  • 输入法、声音、文件管理器和设置中心;
  • Avahi 局域网发现能力。

所有修改均使用 disablestop、用户级覆盖或备份迁移等可逆方式;不删除服务文件,不卸载软件包。优化脚本会在 /data/bootopt_work/ 下保存诊断报告、备份和回滚脚本。

重要提示: 部分裁剪项与当前 VMware 测试环境有关。若目标机器实际使用蓝牙、打印、OpenVPN、IPsec VPN 或 Samba AD 域控,应先运行诊断脚本并重新评估,不能直接照搬服务清单。

5. 目录结构

.
├── README.md
├── manuscript/                         # 完整参赛报告
├── standards/                          # 赛题要求与评分标准
├── code/
│   ├── pre_optimization_test_files/    # 基线采集与就绪探针
│   ├── autostart_optimization/         # Round 1 脚本
│   ├── network_wait_chain/              # Round 2 脚本
│   └── low_risk_system_service_pruning/ # Round 3 脚本
├── basetime/                            # 优化前原始测试数据
├── autostart_project/                   # Round 1 测试数据
├── network_wait_chain_optimization/     # Round 2 测试数据
└── low_risk_system_service_pruning/     # Round 3 与最终测试数据

每轮测试目录均保存 systemd_time.txtsystemd_blame.txtsystemd_critical_chain.txt、服务状态、系统日志、就绪时间和 summary.txt 等材料;ZIP 文件是对应轮次的原始归档。

6. 建议评审顺序

  1. 阅读本 README 的核心成果、优化方案和安全边界;
  2. 查看完整分析报告,了解实验环境、指标定义、瓶颈证据和各轮分析;
  3. 对照优化前与最终优化后的 summary.txt,核验四项核心指标;
  4. 查看 systemd_critical_chain.txtsystemd_blame.txt 和服务状态文件,核验收益来源;
  5. 阅读 code 中的诊断、优化、验证及自动生成回滚逻辑,评估工程可复现性。

7. 复现说明

7.1 环境

  • 操作系统:openKylin 2.0 SP2(nile)
  • 架构:x86_64
  • 内核:6.6.0-19-generic
  • 桌面环境:UKUI
  • 显示管理器:LightDM(通过 display-manager 别名访问)
  • 原实验平台:VMware 虚拟机

7.2 准备脚本

find code -type f -name '*.sh' -exec chmod +x {} +

7.3 推荐流程

每一轮都应遵循“诊断 → 确认目标 → 优化 → 重启 → 验证 → 三次采集”的顺序:

# 基线或阶段测试数据采集示例
bash code/pre_optimization_test_files/collect_baseline.sh run1

# Round 2:先诊断,再按当前机器的实际网络配置决定是否优化
bash code/network_wait_chain/trace_network_wait_chain_round2A.sh
bash code/network_wait_chain/optimize_network_wait_round2A_safe.sh
sudo reboot
bash code/network_wait_chain/verify_network_wait_round2A_safe.sh

# Round 3:先诊断,再执行低风险裁剪和验证
bash code/low_risk_system_service_pruning/trace_system_service_round3A.sh
bash code/low_risk_system_service_pruning/optimize_system_services_round3A_safe.sh
sudo reboot
bash code/low_risk_system_service_pruning/verify_system_services_round3A_safe.sh

Round 1 涉及用户级和系统级两种处理方式,请结合完整报告及脚本内目标清单选择,避免重复执行不同实现。执行任何优化前,应阅读脚本中的保护清单和回滚说明。

7.4 验收条件

每次优化后至少确认:

systemctl is-system-running
systemctl --failed
systemctl status display-manager dbus NetworkManager
systemd-analyze time
systemd-analyze critical-chain graphical.target

同时人工验证图形登录、键盘鼠标、网络、声音、输入法、文件管理器、终端和设置中心。只有系统状态为 running、失败服务没有增加且桌面功能正常,测试数据才可计入对比。

8. 局限性与迁移说明

  • 当前结果来自固定 VMware 环境,物理机上的磁盘、显卡、无线网卡及外设初始化时间可能不同;
  • 自启动项和后台服务会随 openKylin 版本、安装软件及用户配置变化,复现时应重新诊断;
  • 桌面可用时间仍受 D-Bus 激活、索引、软件中心插件和后台任务影响,波动大于 systemd 阶段;
  • 向其他 x86 Linux 桌面发行版迁移时,可复用阶段划分、关键链分析、自动采集、多轮验证和回滚机制,但不能直接复用 openKylin/UKUI 专属服务清单。

9. 评分项对应材料

评分方向 对应材料
启动性能收益 第 1 节、各轮 summary.txtsystemd_time.txt
功能正确性与稳定性 最终三轮 system_running_state.txtfailed_services.txt、验证报告
分析深度与方法 完整报告、critical-chainblame、就绪探针及诊断脚本
适配与泛化能力 安全边界、环境适配说明、分阶段方法与回滚机制
工程质量与可复现性 code/、各轮原始数据、ZIP 归档和复现步骤

本项目追求的不是通过牺牲功能获得单一时间数字,而是在性能收益、桌面完整性、结果可解释性和工程可复现性之间取得平衡。

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

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