flowchart LR
A["Before 冷启动采集"] --> B["Analyzer 时序、关键链、依赖"]
B --> C["AI Agent 自主提出优化与风险"]
C --> D["模块 B 独立准入与风险上调"]
D --> E["人工审核 普通 / 增强审核"]
E --> F["Plan 实时检查与哈希绑定"]
F --> G["Apply 事务化执行"]
G --> H["After 冷启动采集"]
H --> I["Benchmark + 功能审计"]
I --> J["回滚并验证"]
四、核心创新点(与传统方案区别)
本项目的创新设计紧贴赛题鼓励的四个方向,同时重点解决传统 Linux 启动优化中的三个痛点:定位不准确、优化不安全、效果不可证明。依赖图建模、启动时序分析、自动化测试框架和 AI/Agent 辅助分析。我们不是把一次性的调参脚本包装成工具,而是针对传统 Linux 启动优化中“只看耗时排名、依赖人工经验、测试难复现、修改风险高”等问题,设计了一套可分析、可执行、可验证、可回滚的工程闭环。
BootInsight:面向 openKylin 的启动性能分析与安全优化闭环
README 导航
项目定位(
BootInsight 是一套面向 openKylin 的智能启动性能分析与安全优化闭环平台,通过启动拓扑分析、AI 辅助诊断、独立安全审核、事务化执行和自动化 Benchmark,实现“发现瓶颈 → 安全优化 → 数据证明 → 可恢复”的完整工程流程。
项目核心价值
BootInsight 的核心贡献不是单纯减少某几个 systemd 服务耗时,而是建立了一套可信启动优化方法:
与传统“关闭慢服务”的优化脚本相比,BootInsight 更接近一个面向国产桌面 Linux 的启动性能工程平台。
项目总体架构
BootInsight 采用“采集 → 分析 → 决策 → 执行 → 验证”的闭环架构,将启动性能优化从经验调参转变为可验证工程流程。
该架构的核心思想:AI 负责发现可能性,安全模块负责可信性,Benchmark 负责证明结果。
与传统启动优化方案对比
因此,BootInsight 的核心区别不是“优化更多服务”,而是建立了一套可信启动优化闭环。
项目完成度概览
当前版本已完成从分析到验证的完整工程链路:
完成度总结:BootInsight 已形成“分析、决策、执行、验证、恢复”的完整启动优化工程闭环,而非单点优化工具。
三个关键点
指标达成与核心创新
1. 赛题目标与实际效果
BootInsight 围绕“降低启动耗时、保证系统可用、提供可验证证据”的赛题目标完成正式实机验证。
在 openKylin 2.0 SP2 实机上完成
10 Before + 10 After冷启动 Benchmark,共 20 轮独立 Boot ID 样本:最终结论: BootInsight 在不关闭图形登录、不破坏桌面体验的情况下,将用户真正感知的图形登录就绪时间中位数缩短 1.145 秒(14.9%)。20 轮测试全部通过功能检查和证据门禁,证明优化收益具有可复现性。
2. 核心创新点
与传统“根据 blame 排名关闭慢服务”的启动优化方式不同,BootInsight 的创新集中在以下五个方面:
graphical.target简单等同于启动完成,而是通过自动探针测量图形登录和桌面真正可用状态。BootInsight 解决的不是“找出几个慢服务并手工关闭”,而是把 启动采集、关键路径分析、AI 优化提案、独立安全审核、事务化执行、桌面可用性测量、Before/After 统计和一键回滚 串成一套可复现工具链。
项目覆盖赛题要求的两个用户可感知阶段:
系统只在图形登录、网络、声音、输入法、桌面核心组件等功能合同通过后记录就绪时间。优化建议不能绕过模块 B 的独立检查和人工审核,执行后还要通过功能验收与证据门禁。因此,BootInsight 的目标是:
一、正式实机 Benchmark:10+10 已通过最终门禁
正式多轮结果
下表以中位数为主指标;完整报告同时给出 Mean、Std、P95、Min 和 Max。
graphical.target代理graphical.target只是 systemd 代理里程碑,正式结论还同时报告自动探针测得的图形登录和桌面状态合同。图形登录端点中位数缩短 1.145s,且 Before/After 标准差分别为 0.128s 和 0.162s;桌面端点中位数基本不变,After 标准差升至 0.913s,因此本项目不把桌面阶段表述为稳定改善。Firmware 和 Boot loader 不计入赛题成绩,二者在两组样本中基本保持不变。Agent、安全审核与实际执行
本次正式实验重新基于 Before 10 证据运行 Agent。Agent 提出的 5 个新规则中,4 个因
no_critical_dependency与当前图形依赖证据矛盾被模块 B 拒绝,samba-ad-dc.service的永久关闭提案被降为report_only;不存在admissible或review_required项,人工审核结论为none,没有把任何新模型提案写入规则库。随后,完整规则 Plan 只对现有已审核规则库执行实时检查,并事务化应用 3 项操作:
biometric-authentication.servicecups.service蓝牙适配器和 5 个 hwmon 传感器在实时检查中存在,因此
bluetooth.service与lm-sensors.service被自动保留。事务状态为succeeded,成功 3 项、错误 0 项。After 的 10 轮私有审计均确认 Docker/containerd 已退出graphical.target关键链;服务 blame 仅用于定位候选来源,端到端收益仍以上述多轮状态合同为准。数据质量、功能与证据门禁
本次可公开的 20 份脱敏记录、代表轮次报告、统计图表和审计结论见:
完整原始证据仍只保存在本地:
原始归档包含 Before/After 私有记录、自动探针、smoke test、完整 journal、Agent 审计轨迹、执行计划、事务结果和回滚脚本,因此已通过
.gitignore排除。公开证据包只使用脱敏runs_public重新生成报告与图表,并仅保留无敏感路径的门禁摘要,不包含真实主机名、用户路径、IP、MAC、原始 Boot ID 或 raw journal。二、跨发行版 One Round 泛化与异常闭环
两个发行版的最新单轮观测
graphical.targetopenKylin 使用 LightDM 自动登录,桌面探针将 UKUI 会话、桌面、面板、通知区、 session D-Bus、网络、音频和输入法绑定到同一 UID,因此桌面端点可比较。Ubuntu 云主机未配置可重复自动登录;人工登录时间会引入操作者延迟,所以系统仍采集 systemd 与图形登录状态合同,但把完整桌面端点明确标记为
manual_login_uncontrolled,不生成虚假的 Before/After 差值。Ubuntu 云主机异常基线与回归检测案例
在第一次 Ubuntu 24.04 云主机泛化实验中,Before 整机启动时间为 131.204s,应用优化后增至 250.031s,回归 118.827s;Kernel→
graphical.target则由 130.516s 增至 249.506s,回归 118.990s。 虽然 Before/After 各只有一轮,不能形成统计性能结论,但这一变化远超正常启动 波动,足以判定本轮必须回滚。项目没有因异常数据或负收益崩溃。采集产物仍被完整保留,Benchmark 明确输出 回归,Agent 复盘继续读取启动记录和关键链证据,将核心异常定位到
systemd-networkd-wait-online.service的约 120 秒等待,并提出 Docker defer 可能改变network-online.target激活时序的假设。由于 Agent 坚持只读、非提权运行,无法读取完整系统日志时,它把具体依赖来源记录为证据缺口, 没有擅自修改网络或 systemd 配置。随后状态机仍可进入人工回滚、重启验证、私有 归档和公开脱敏步骤,形成完整失败闭环。人工排查进一步确认,云主机的
eth0实际由 NetworkManager 管理,异常启动中 却同时出现了NetworkManager-wait-online与systemd-networkd-wait-online两套等待路径;后者约等待 120 秒后失败。 现有证据支持“冗余 wait-online 是直接阻塞点”,但受当时 journal 权限限制, Docker defer 如何使这段等待进入更晚阶段仍保留为待验证因果,不能写成确定副作用。 管理员屏蔽冗余的systemd-networkd-wait-online后,整机启动恢复至 10.893s,graphical.target在 8.040s 到达;随后重新执行的成功 One Round 也回到约 10 秒基线并完成全部阶段。该失败包生成于手动登录可比性修复之前,其中的桌面端点可能混入 SSH 登录时刻, 因此不参与任何性能或泛化结论;它仅作为“显著回归能够被发现、解释、回滚并保留” 的异常诊断样例。该案例同时暴露出 Docker defer 面对混合网络管理配置时需要 更严格的 wait-online 安全门禁。由此,Ubuntu 证据支持的是方法、Agent 诊断 和安全闭环的跨发行版泛化,而不是宣称
1+1样本已经证明 Ubuntu 存在稳定 固定收益。公开证据:
三、我们做了什么
systemd-analyze、blame、critical-chain、依赖关系和 journal,生成 Markdown、HTML 与图表报告graphical.target不等于“用户可用”整个闭环如下:
flowchart LR A["Before 冷启动采集"] --> B["Analyzer时序、关键链、依赖"] B --> C["AI Agent
自主提出优化与风险"] C --> D["模块 B
独立准入与风险上调"] D --> E["人工审核
普通 / 增强审核"] E --> F["Plan
实时检查与哈希绑定"] F --> G["Apply
事务化执行"] G --> H["After 冷启动采集"] H --> I["Benchmark + 功能审计"] I --> J["回滚并验证"]
四、核心创新点(与传统方案区别)
本项目的创新设计紧贴赛题鼓励的四个方向,同时重点解决传统 Linux 启动优化中的三个痛点:定位不准确、优化不安全、效果不可证明。依赖图建模、启动时序分析、自动化测试框架和 AI/Agent 辅助分析。我们不是把一次性的调参脚本包装成工具,而是针对传统 Linux 启动优化中“只看耗时排名、依赖人工经验、测试难复现、修改风险高”等问题,设计了一套可分析、可执行、可验证、可回滚的工程闭环。
1. 依赖图建模:从“耗时排名”转向“启动拓扑”
传统优化通常根据
systemd-analyze blame排序,优先处理耗时最长的服务。但一个服务耗时长,不代表它位于启动关键路径;盲目关闭还可能破坏图形登录或被其他依赖重新拉起。BootInsight 同时采集 critical-chain、
graphical.target依赖集合、单元前后序关系和反向依赖,把服务放回启动拓扑中分析:因此,优化对象的选择不再只依赖单一耗时数字,而是结合“耗时、路径位置、依赖关系和实际用途”综合判断。
2. 启动时序分析:测量“用户真正可用”的时刻
传统测试常把
graphical.target到达时间或人工看到桌面的时刻当作启动完成:前者不能证明界面和基础功能已经可用,后者又容易受到观察和操作误差影响。BootInsight 设计了系统级自动状态探针,以 0.1 秒间隔检查条件,并在合同首次全部成立时读取
/proc/uptime:探针还会先检测键盘、鼠标等硬件是否存在。机器没有某类设备时,该条件记为
SKIP,不会把“硬件不存在”误判为“桌面未就绪”。这使两个赛题阶段都有自动、统一、可复现的计时终点。3. 自动化测试框架:把一次实验变成可复现状态机
传统启动优化往往由多条零散命令组成,测试者需要手工记住当前处于优化前、应用后还是回滚后,容易出现重复采集、同一次启动充当多轮样本或忘记回滚等问题。
BootInsight 围绕
scripts/real_machine_one_round.sh设计了完整自动化测试状态机:框架自动完成或约束以下工作:
在正式实验中,同一套采集与门禁已完成 10 轮 Before 和 10 轮 After,统一统计均值、中位数、标准差和 P95,降低偶然波动对结论的影响。
4. AI/Agent 辅助分析:从静态规则匹配转向动态诊断
传统优化代码通常维护一张固定服务名单:开发者预先规定哪些服务可以关闭、延迟或保留。这种方式易解释,但难以覆盖不同机器、不同桌面环境和用户安装的新服务,也无法主动调查异常日志和实际依赖。
BootInsight 引入只读 AI Agent,让模型基于当前机器的真实启动证据动态分析:
Agent 的价值是扩大分析范围并提供解释,而不是代替安全策略。模型不能直接执行系统命令;离线规则生成器仍可在无模型环境中作为确定性分析工具。
5. 工程安全创新:Agent 提议、独立审核、人工确认、事务回滚
AI 分析具有探索性,而操作系统优化要求确定性和可恢复性。为协调两者,BootInsight 设计了 Agent 与安全执行模块相互独立的 Human-in-the-loop 架构:
模块 B 不直接采信模型风险,而是计算:
系统会保护显示管理器、D-Bus、NetworkManager 等关键能力;高风险动作需要增强审核和二次确认;Plan 与 BootRecord、规则哈希绑定;每次 Apply 都生成独立执行记录和
rollback.sh。最终结果还要经过端点合同、功能回归、多轮统计和证据门禁,避免以牺牲桌面体验换取表面启动时间。五、评审要点与赛题对应
analyzer/、benchmark/、两个 readiness 端点及 Before/After 报告probes/、validation/smoke_test.py、证据审计和完整回滚验证六、三分钟快速检查
1. 安装依赖并运行测试
要求 Python 3.8 或更高版本:
当前版本包含 Analyzer、Agent、安全准入、Optimizer、探针、Benchmark、Web API 和回滚流程的自动化回归测试。
2. 使用脱敏预实验数据离线生成报告
这一步不修改系统,也不需要 API Key:
七、openKylin 实机单轮闭环
单轮流程用于演示工程闭环是否完整,包含
1 Before + 1 After。它不能代替正式多轮比赛数据。运行前提
sudo权限;主脚本始终以普通用户运行,不要执行
sudo bash scripts/real_machine_one_round.sh ...。需要提权时,脚本会在明确步骤中请求。1. 安装依赖
2. Prepare:预检并安装自动探针
重启并等待 SSH 恢复后继续。
3. Before:采集优化前证据
只有出现
[PASS]且没有[INVALID RUN]才能进入下一阶段。4. Analyze:Agent 提案,模块 B 独立准入
Agent 只能调用白名单内的只读工具。模型输出后,模块 B 自动生成独立的 RuleAdmissionSet。
5. Review Rules:人工选择提案
all:批准全部普通项;none:不新增规则,仍可继续检查现有规则库;APPROVE-HIGH-RISK。6. Plan:生成只读执行计划
Plan 会对完整
rules.yaml做实时条件检查,并绑定当前记录和规则哈希,不修改 systemd。7. Apply:事务化应用优化
Apply 会再次检查实时状态并要求人工确认。执行成功后必须重启,不能直接采集 After。
8. After:采集优化后证据
Before 和 After 必须使用相同机器、用户、内核、网络条件和冷启动方式。
9. Evaluate:构建结果并审计
重启后重新注入 API Key,再执行:
该阶段生成 Benchmark、功能审计、门禁结果和 Agent 复盘。服务的 blame 耗时仅用于定位收益来源,正式收益以端点时间为准。
10. Rollback / Verify:恢复并验证
看到阶段
completed表示回滚验证已经完成,但还需要归档收尾。11. Finalize:归档、公开并清空工作目录
完整私有数据首先移动到
validation/archives/one-round-final-<UTC>/,公开包随后只从该归档中的私有 BootRecord 重新脱敏生成到evidence/public/$PUBLIC_ID/。完成后,本轮规则基线恢复, 采集目录、单轮状态和事务工作目录被清空,状态重新成为uninitialized。若私有归档已经移动,但公开包生成临时失败,可在修复环境后恢复同一收尾:
八、正式比赛数据采集
正式结果默认要求至少 10 轮独立 Before 和 10 轮独立 After。每轮必须对应一次独立冷启动和唯一 Boot ID,不能在同一次启动中重复执行采集脚本充当多轮样本。
正式流程不是“固定规则直接 Apply”。10 轮 Before 后仍需依次完成只读 Agent 分析、模块 B 独立准入、人工判断、完整规则库 Plan 和事务化 Apply。候选和执行项 以本机证据为准,不预设服务名单。完整命令见 正式 Benchmark 操作手册。
探针安装后,每次重启只采集一轮:
应用经审核的同一份优化方案后,以相同条件采集:
全部样本完成后构建最终结果:
只有样本数、数据质量、公开/私有文件配对和全部私有证据审计通过时,构建才以 返回码 0 结束。
evidence/final/是回滚和归档前的工作结果;回滚验证通过后运行:脚本先把本轮完整数据移动到
validation/archives/,再只从归档私有记录重新脱敏并 生成evidence/public/<PUBLIC_ID>/,最后清空正式工作目录。公开发布不读取工作目录 中的runs_public或evidence/final。九、计时口径
machine_totalcontest_systemd_completekernel_to_graphical_targetgraphical.targetkernel_to_session_readykernel_to_desktop_readyBIOS/UEFI、Firmware、Boot loader 和 GRUB 菜单等待不计入正式成绩。报告不会将多个服务的 blame 耗时直接相加为端到端收益。
十、结果和审计文件在哪里
benchmark/runs_{private,public}/{before,after}/benchmark/evidence/{before,after}/run_*/validation/outputs/real-machine-one-round/ai/runs/optimizer/transactions/<transaction_id>/validation/archives/formal-benchmark-final-<UTC>/evidence/public/<PUBLIC_ID>/正式归档状态:
单轮演示中断或完成回滚验证后,可使用可恢复归档工具:
脚本把旧数据移动到
validation/archives/,不会直接删除证据,也不会绕过未完成的事务回滚。十一、SSH Web 可视化控制端
web/是运行在操作者 Windows 电脑上的本地控制界面。它通过 OpenSSH 调用实机中的固定阶段命令,提供:evidence/current_run/,前端实时展示本轮脱敏报告和 PNG 图表。真实 SSH 地址、用户名和私钥路径只保存在未提交的
web/config.json:浏览器访问
http://127.0.0.1:8765。Web 端不接受浏览器提交任意 shell,只能执行阶段白名单中的正式脚本。详细说明见 Web 控制端文档。十一、项目能力边界与工程价值
BootInsight 不简单追求“关闭更多服务”或制造短期启动收益,而强调真实用户体验和系统可靠性的平衡:
systemd-analyze blame排名直接等同于优化目标;graphical.target简单认为是用户已经可用;这种设计使 BootInsight 更接近实际操作系统工程场景,可用于发行版优化、企业 Linux 运维和桌面系统性能分析。
十二、项目结构
十三、进一步阅读
BootInsight 坚持三个原则:不以关闭关键功能换时间,不以单次数据当结论,不让模型直接修改系统。
提交版总结
BootInsight 的核心价值可以概括为:
项目形成了从数据采集、智能分析、安全决策、事务执行到 Benchmark 验证的完整闭环:
这使 BootInsight 区别于一次性优化脚本,成为一个面向 openKylin 的可信启动性能工程平台。