目录

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

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


作品简介

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

优化前 优化后 改善
系统总启动 18.777s 9.193s -51.0%
用户空间初始化 11.197s 5.612s -49.9%
图形登录就绪 8.906s 5.377s -39.6%
桌面可用 9.099s 5.951s -34.6%

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


目录结构

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

okczxtqdxnfxyyh/
├── data/
│   ├── baseline/                    # 基线数据分析输出(脚本运行时生成)
│   │   ├── analysis_report_*.txt          # 完整分析报告
│   │   ├── analysis_data_*.json           # 结构化数据(JSON)
│   │   ├── blame_*.txt                    # 服务耗时排行
│   │   ├── critical_chain_*.txt           # 关键依赖链
│   │   ├── dependency_graph_*.txt         # 依赖关系图
│   │   ├── bootchart_*.svg                # 启动时序 SVG
│   │   └── services_status_*.txt          # 服务状态统计
│   └── optimized/                   # 优化后数据分析输出(结构同上)
├── scripts/
│   ├── analyze.sh                   # 11 步系统化启动分析(基线/优化后数据采集)
│   ├── optimize.sh                  # 6 阶段自动化优化(支持单阶段调试)
│   ├── restore.sh                   # 一键回滚(恢复所有优化操作)
│   ├── verify.sh                    # 9 类 40+ 项功能验证
│   └── compare.sh                   # 量化对比报告生成
├── README.md                        # 本文件,作品简介与运行说明
├── 操作系统开源创新大赛项目说明书.pdf     # 项目说明书(提交材料)
├── 参赛承诺书.pdf                    # 参赛承诺书(提交材料)
├── 演示PPT.pptx                      # 演示PPT(提交材料)
└── 演示视频.mp4                      # 演示视频(提交材料)

提交材料清单

根据大赛初赛作品提交要求,本仓库根目录包含以下提交材料:

材料 文件 说明
作品简介与运行说明 README.md 本文件
项目说明书 操作系统开源创新大赛项目说明书.pdf 设计方案、实现方案、测试结果、创新点等
演示 PPT 演示PPT.pptx 答辩演示文稿
参赛承诺书 参赛承诺书.pdf 签名扫描件
演示视频 演示视频.mp4 <=5分钟,不超过 100MB,MP4 格式

演示视频百度网盘链接:<链接: https://pan.baidu.com/s/1EWQeW4-1G0kKd4S-GvsNeg?pwd=0000 提取码: 0000>


运行环境

项目 配置
发行版 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 ─ 采集基线数据
sudo bash scripts/analyze.sh ./data/baseline --json

# 步骤 2 ─ 执行优化
sudo bash scripts/optimize.sh

# 步骤 3 ─ 重启生效
sudo reboot

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

# 步骤 5 ─ 生成量化对比报告
sudo bash 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

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


计时方法

赛题要求:”参赛者需明确说明自身计时起点与计时方法”,”默认不计 BIOS/UEFI 自检时间、固件阶段时间及 Grub 菜单等待时间”

计时定义

┌──────────────────────────────────────────────────────────────────────┐
│  BIOS/UEFI  │  固件    │  Grub   │◀──── 内核启动 ────▶│  用户空间    │
│   POST      │(firmware)│(loader) │   kernel           │  userspace   │
│  (不计入)   │ (不计入)  │ (不计入) │  ◀ 计时起点        │              │
└──────────────────────────────────────────────────────────────────────┘
                                           │                      │
                                           │◀─── 第 1 阶段 ───▶│
                                           │  graphical.target  │
                                           │  图形登录界面就绪    │
                                           │                      │
                                           │◀───── 第 2 阶段 ──────▶│
                                           │      桌面可用时间        │
                                           │  (graphical.target      │
                                           │   + user@1000.service)  │
计时项目 定义 优化前 优化后
计时起点 内核启动时刻,即 systemd-analyze 输出中 kernel 段 7.579s 3.580s
第 1 阶段终点 graphical.target 就绪 — 图形登录界面可用 8.906s 5.377s
第 2 阶段终点 桌面可用时间 ≈ graphical.target + user@1000.service 9.099s 5.951s
系统总启动时间 systemd-analyze 输出 Startup finished in ... = Xs 18.777s 9.193s
排除项 BIOS/UEFI POST、固件(firmware)、Grub 菜单等待(loader) — —

计时原理

  • 数据来源:全部通过 systemd-analyze 系列命令采集,不依赖专有硬件或外部计时工具,确保评测公平
  • 第 1 阶段:systemd-analyze 中 graphical.target reached after Xs,即内核启动完成到显示管理器就绪的实际耗时
  • 第 2 阶段:graphical.target 就绪时间 + user@1000.service 耗时(用户 systemd 实例初始化),用户登录后桌面核心组件在此阶段完成加载
  • 公平性:排除所有硬件/固件相关时间,确保不同机器之间评测结果可直接比较

赛题合规声明

本优化方案严格遵守赛题全部约束:

赛题禁止行为 本方案保证
不得关闭图形登录 lightdm.service 列入 CORE_PROTECTED,永不禁用
不得移除必要系统能力 8 个核心服务底线保护(dbus/NetworkManager/polkit/logind/udevd 等)
不得牺牲桌面基本功能 verify.sh 38 通过 / 0 失败,桌面/面板/WM/文件管理器/终端/设置中心全正常
不得将关键初始化简单延后造成首用卡顿 所有优化为真正移除/禁用冗余服务,非简单的延迟启动

方法论

分析流程(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

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

graphical.target
└─multi-user.target
  └─NetworkManager.service
    └─dbus.service
      └─basic.target

(multi-user.target ──→ NetworkManager.service ──→ dbus.service  无串行阻塞)

优化策略

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

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

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

赛题要求 本方案实现
服务裁剪 阶段 A(55 个服务) + 阶段 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.777s 9.193s -51.0%
内核启动(kernel) 7.579s 3.580s -52.8%
用户空间初始化(userspace) 11.197s 5.612s -49.9%
graphical.target 就绪(第 1 阶段) 8.906s 5.377s -39.6%
桌面可用时间(第 2 阶段) 9.099s 5.951s -34.6%

服务数量变化

状态 优化前 优化后
已启用 70 36
被屏蔽 8 53
运行时 48 26
失败 1 0

Top 服务耗时变化

服务 优化前 优化后
e2scrub_reap 3.533s 已移除
kysdk-conf2 3.222s 已移除
biometric 3.140s 已移除
NetworkManager 2.549s 2.011s
lightdm 2.321s 636ms
plymouth-quit-wait 2.253s 已移除
org.kylin.kaiming 2.277s 已移除
accounts-daemon 2.016s 1.690s

功能验证结果

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

验证维度 赛题要求 结果
核心系统服务 dbus/NetworkManager 等处于正常工作状态 ✓ 9/9 通过
显示管理器 图形登录界面 + X Server + greeter ✓ 4/4 通过(已登录场景 greeter 自动识别)
网络服务 网络连接 + DNS ✓ 4/4 通过
桌面环境 UKUI 面板/会话/窗口管理器/文件管理器/终端/设置/通知/菜单 ✓ 7/8 通过(1 项通知守护进程警告)
输入设备 /dev/input/event* + fcitx5 输入法 ✓ 5/5 通过
声音服务 PipeWire/PulseAudio/ALSA ✓ 2/4 通过(PulseAudio 由 PipeWire 替代,VM 无物理声卡)
D-Bus 服务 Accounts/NM/UDisks2/UPower ✓ 4/4 通过
系统稳定性 无失败服务/无内核 oops/磁盘充足 ✓ 2/3 通过(1 项 VM 环境 crit 日志噪声警告)
总计 38 通过 / 0 失败 / 4 警告

4 条警告均为预期行为:通知守护进程未运行(VM 精简配置)、PulseAudio 由 PipeWire 替代(现代音频架构)、VM 无物理 ALSA 声卡、日志含 VM 环境 ACPI 噪声。无任何功能受损。


创新点

方法论创新

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

工程创新

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

泛化能力

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

赛题评分覆盖

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

注意事项

  1. VM 快照:首次运行优化前建议创建 VM 快照,作为额外安全保障(restore.sh 已提供软件回滚)
  2. 首次启动波动:VM 快照恢复后首次启动因磁盘缓存会异常快(约14s),后续启动恢复正常(约19s)。基线数据应以第二次正常启动为准
  3. 内核时间波动:resume= 内核参数残留会导致内核阶段时间翻倍,阶段 E 已自动移除
  4. 核心服务保护:accounts-daemon、polkit、dbus、lightdm、NetworkManager、systemd-resolved、systemd-logind、systemd-udevd 共 8 个核心服务已设为绝不优化,保障系统基础功能
  5. 匿名化:提交评审前确保 data/ 中的主机名、用户名等已脱敏。git 提交记录中的作者邮箱不得使用单位邮箱,建议使用个人匿名邮箱或 GitLink 系统邮箱

参考资料

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

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