目录

openKylin 操作系统启动性能分析与优化

第三届中国研究生操作系统开源创新大赛 — 系统创新赛道 — openKylin 启动性能分析与优化


作品简介

本项目针对 openKylin 2.0 SP2 客户端操作系统冷启动过程进行系统性分析、瓶颈定位与多层次优化。通过服务裁剪、关键路径重构、内核参数调优、NetworkManager 配置优化等手段,在完整保留桌面功能的前提下,将:

优化前 优化后 改善
系统总启动 18.593s 6.668s -64.1%
用户空间初始化 10.998s 3.641s -66.9%
图形登录就绪 8.402s 3.581s -57.4%
桌面可用 8.754s 4.123s -52.9%

方案提供完整的 analyze → optimize → verify → compare 一键式自动化工具链,支持分阶段调试、全量回滚,并具备向其他 Linux 发行版迁移的泛化能力。


目录结构

data/ 目录下的 baseline/optimized/ 为脚本运行时生成的分析输出,初始仓库中为空。

okczxtqdxnfxyyh/
├── README.md                   # 本文件 — 作品简介与运行说明
├── design_and_report.md        # 设计文档与技术报告
├── scripts/
│   ├── analyze.sh              # 11 步系统化启动分析(基线/优化后数据采集)
│   ├── optimize.sh             # 6 阶段自动化优化(支持单阶段调试)
│   ├── restore.sh              # 一键回滚(恢复所有优化操作)
│   ├── verify.sh               # 9 类 40+ 项功能验证
│   └── compare.sh              # 量化对比报告生成
└── data/
    ├── baseline/                # 基线数据分析输出
    │   ├── analysis_report_*.txt      # 完整分析报告
    │   ├── blame_*.txt                # 服务耗时排行
    │   ├── critical_chain_*.txt       # 关键依赖链
    │   ├── dependency_graph_*.txt     # 依赖关系图
    │   ├── bootchart_*.svg            # 启动时序 SVG
    │   └── services_status_*.txt      # 服务状态统计
    └── optimized/               # 优化后数据分析输出(结构同上)

运行环境

项目 配置
发行版 openKylin 2.0 SP2 (x86_64)
文件系统 OSTree(只读系统分区)
桌面环境 UKUI
内核 Linux 6.6.0-19-generic
硬件 VMware 虚拟机, 2 vCPU, 8 GB RAM, 29 GB 虚拟磁盘
依赖 无额外软件包(全部使用 systemd 内置工具)

其他发行版适配:脚本内置发行版自动检测(detect_distro()),openKylin 特有优化通过 IS_OPENKYLIN 条件分支隔离,阶段 B/D/E/F 的通用逻辑可直接在 Ubuntu/Debian 等 systemd 系统上运行。


快速开始

前置条件

  • 系统安装 openKylin 2.0 SP2,已登录图形桌面
  • 将仓库 scripts/ 目录下的文件复制到用户目录(~/scripts/
  • 建议创建 VM 快照(优化后可快速回滚,也可用 restore.sh 回滚)

完整流程(5 步,约 15 分钟)

# 步骤 1 ─ 采集基线数据(普通用户)
~/scripts/analyze.sh ./data/baseline

# 步骤 2 ─ 执行优化(需要 sudo)
sudo bash ~/scripts/optimize.sh

# 步骤 3 ─ 重启生效
sudo reboot

# 步骤 4 ─ 采集优化后数据 + 功能验证
~/scripts/analyze.sh ./data/optimized
~/scripts/verify.sh

# 步骤 5 ─ 生成量化对比报告
~/scripts/compare.sh ./data/baseline ./data/optimized

分阶段调试

如需单独调试某一优化阶段(定位问题或测试效果),支持传入阶段标识:

sudo bash ~/scripts/optimize.sh A    # 仅执行阶段 A(服务裁剪)
sudo bash ~/scripts/optimize.sh C    # 仅执行阶段 C(关键路径优化)
sudo bash ~/scripts/optimize.sh E    # 仅执行阶段 E(内核参数)
# 支持: A | B | C | D | E | F

一键回滚

sudo bash ~/scripts/restore.sh
sudo reboot

回滚项包括:52 个服务状态、8 个定时器状态、GRUB 内核参数、systemd 配置文件、NetworkManager 配置文件、旧延迟启动基础设施、override 配置。所有原始状态在优化时自动备份至 /opt/boot-optimize-backup/


方法论

分析流程(analyze.sh — 11 步)

[1]  系统基本信息(发行版/内核/CPU/磁盘/OSTree/桌面环境)
[2]  启动总耗时(systemd-analyze)
[3]  服务耗时排行(systemd-analyze blame)
[4]  关键依赖链(systemd-analyze critical-chain,含 multi-user/graphical 双链)
[5]  依赖图建模(systemd-analyze dot → graphviz)
[6]  启动时序可视化(systemd-analyze plot → SVG)
[7]  阶段耗时分解(内核启动 / 用户空间 / graphical.target)
[8]  图形界面关键时间点(lightdm / X Server / Plymouth)
[9]  桌面会话就绪时间(UKUI 面板/会话/窗口管理器/文件管理器/输入法/声音)
[10] 服务状态统计(enabled/disabled/static/masked/running/failed)
[11] 自动优化建议生成(AI 辅助识别高耗时服务 + 关键路径瓶颈)

关键路径分析

优化前(串行阻塞,@8.402s):

graphical.target
└─multi-user.target
  └─strongswan-starter.service       ← IPsec VPN,非 VPN 场景不需要
    └─network-online.target            ← 强制等待网络完全就绪
      └─NetworkManager-wait-online.service  ← 无效等待 +914ms
        └─NetworkManager.service

优化后(并行无阻塞,@3.581s):

graphical.target
└─accounts-daemon.service
  └─basic.target

(multi-user.target ──→ NetworkManager.service ──→ dbus.service  并行路径,不阻塞 graphical)

优化策略

6 阶段自动化优化(optimize.sh)

阶段 分类 赛题对应手段 具体操作 收益
A 服务裁剪 服务裁剪 禁用 52 个非核心服务(麒麟 SDK、蓝牙、打印、VPN、磁盘擦除等) 服务耗时从 ~45s 降至 ~5s
B 定时器禁用 服务裁剪 禁止 8 个周期性后台任务(apt/dnf 更新、SSD TRIM、新闻通知) 消除启动期间包管理器并发阻塞
C 关键路径 + 并行化 + 无效等待 启动顺序 / 并行初始化 / 无效等待消除 断开 strongswan→NM-wait-online→kylin-nm-sysdbus 串行阻塞链;消除 NM 连通性检查等待 multi-user 提前 ~5s,两条链并行
D systemd 配置 无效等待消除 DefaultTimeoutStartSec=15s(原 90s),日志限制 100M 加速服务超时失败检测
E 内核参数 无效等待消除 mitigations=off + nowatchdog + libahci.ignore_sss + rcu_nocbs + loglevel=3;移除 resume= 内核从 7.595s 降至 3.027s
F 资源清理 长期稳定 清理 apt 缓存、旧日志、boot-delayed 旧基础设施、override 配置 维持长期稳定运行

赛题要求 4 种优化手段映射

赛题要求 本方案实现
服务裁剪 阶段 A(52 个服务) + 阶段 B(8 个定时器)
启动顺序优化 阶段 C — 断开 strongswan→network-online 串行链,multi-user 不再等待网络完全就绪
并行初始化优化 阶段 C — graphical 链与 multi-user 链解除耦合,accounts-daemon 和 NM 并行启动
无效等待消除 阶段 C(NM 连通性检查 + NM-wait-online + kylin-nm-sysdbus)+ 阶段 E(resume= 移除 + mitigations)

优化成果

核心指标

指标 优化前 优化后 改善幅度
系统总启动时间 18.593s 6.668s -64.1%
内核启动(kernel) 7.595s 3.027s -60.1%
用户空间初始化(userspace) 10.998s 3.641s -66.9%
graphical.target 就绪(第 1 阶段) 8.402s 3.581s -57.4%
桌面可用时间(第 2 阶段) 8.754s 4.123s -52.9%

服务数量变化

状态 优化前 优化后
已启用 70 32
被屏蔽 8 62
运行时 48 22
失败 1 0

Top 服务耗时变化

服务 优化前 优化后
e2scrub_reap 5.159s 已移除
kysdk-conf2 3.107s 已移除
biometric 3.099s 已移除
org.kylin.kaiming 2.588s 已移除
plymouth-quit-wait 2.341s 已移除
NetworkManager 2.794s 993ms
lightdm 2.395s 695ms
accounts-daemon 2.038s 1.620s

功能验证结果

verify.sh 覆盖 9 类 40+ 检查点,对标赛题”到达登录界面”和”进入可用桌面”全部要求:

验证维度 赛题要求 结果
核心系统服务 dbus/NetworkManager 等处于正常工作状态 ✓ 7/7 通过
显示管理器 图形登录界面 + X Server + greeter ✓ 4/4(1 项非致命警告)
网络服务 网络连接 + DNS ✓ 4/4 通过
桌面环境 UKUI 面板/会话/窗口管理器/文件管理器/终端/设置/通知/菜单 ✓ 8/8(1 项非致命警告)
输入设备 /dev/input/event* + fcitx5 输入法 ✓ 3/3 通过
声音服务 PipeWire/PulseAudio/ALSA ✓ 3/4 通过(1 项 VM 无虚拟声卡)
D-Bus 服务 Accounts/NM/UDisks2/UPower ✓ 2/4 通过(UDisks2/UPower 预期禁用)
系统稳定性 无失败服务/无内核 oops/磁盘充足 ✓ 3/3(1 项日志警告)
总计 32 通过 / 0 失败 / 8 警告

8 条警告均为预期行为:UDisks2/UPower 被有意禁用、PipeWire 未使用(使用 PulseAudio)、VM 无虚拟声卡、greeter 进程名未匹配、通知守护进程已禁用、systemd 服务状态变更日志。无任何功能受损。


创新点

方法论创新

  • 11 步分层分析:从宏观系统信息到微观关键路径,形成可复用的分析标准
  • 双链关键路径:同时提取 graphical.targetmulti-user.target 两条链,避免单一视角遗漏隐藏瓶颈
  • 二级瓶颈自发现:移除一级瓶颈后自动暴露下一级瓶颈(strongswan → kylin-nm-sysdbus)

工程创新

  • AI 辅助决策:通过对比基线数据自动生成优化策略和优先级排序
  • 完整安全机制:所有操作自动备份 → 支持一键全量回滚 → 阶段独立可执行
  • ostree 适配:只读文件系统下安全操作 /etc 可写路径
  • 发行版感知:运行时自动识别发行版和桌面环境,专属优化与通用优化隔离

泛化能力

  • 阶段 B/D/E/F 的通用逻辑无需修改即可运行于所有 systemd Linux 发行版
  • IS_OPENKYLIN 条件分支隔离发行版特定服务,其他发行版自动跳过
  • 仅依赖 systemd 内置工具,零额外依赖

赛题评分覆盖

评分维度 分值 本方案覆盖
启动性能收益 25分 总启动 -64.1%、用户空间 -66.9%、graphical -57.4%、桌面可用 -52.9%
功能正确性与稳定性 20分 verify.sh 32 通过 / 0 失败,全维度覆盖
分析深度与方法创新 25分 11 步分析 + 双链关键路径 + AI 辅助 + 依赖图建模 + 启动时序可视化
适配质量与泛化能力 20分 openKylin OSTree 专属 + 发行版自动检测 + 通用 systemd 优化
工程质量与可复现性 10分 一键闭环工具链 + 完整备份回滚 + 操作日志 + 零额外依赖

注意事项

  1. VM 快照:首次运行优化前建议创建 VM 快照,作为额外安全保障(restore.sh 已提供软件回滚)
  2. 首次启动波动:VM 快照恢复后首次启动因磁盘缓存会异常快(14s),后续启动恢复正常(19s)。基线数据应以第二次正常启动为准
  3. 内核时间波动resume= 内核参数残留会导致内核阶段时间翻倍,阶段 E 已自动移除
  4. 核心服务保护accounts-daemonpolkitdbuslightdmNetworkManagersystemd-resolved 等 7 个核心服务已设为绝不优化,保障系统基础功能
  5. 匿名化:提交评审前请确保 data/ 中的主机名、用户名等已脱敏处理
关于
4.0 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

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