目录

BootSem:面向 openKylin 的可解释、可回滚启动性能分析与优化系统

BootSem 将启动证据采集、关键路径分析、桌面语义保护、候选资格解析、受控执行、重启复测和事务恢复连接为可追溯的系统实验流程。Windows 可作为 Go TUI/Chatbox 控制端,Linux/openKylin 作为被测端;这不表示 BootSem 已支持优化 Windows 启动。

首次使用建议先查看离线界面,再配置只读远程采集。真实 Apply、回滚和重启需要匹配的管理员部署、目标身份绑定、独立预检及人工确认。

1. 应用场景

  • 分析 openKylin 启动耗时、systemd 依赖与关键等待路径
  • 检查服务调整是否涉及 UKUI、网络、D-Bus、输入、音频等保护能力
  • 从 Windows 查看 Linux 虚拟机的真实启动数据、分析报告和执行回执
  • 在受控实验环境中评价单服务方案或冻结组合方案,复测后保留或恢复变更
  • 展示历史冻结结果,审阅实验来源、验证范围和证据缺口

2. 主要功能

功能 说明
启动采集与报告 保存启动时间、服务状态、依赖链和日志,输出 JSON、HTML、Markdown 等结果
关键路径与候选解释 结合时序、依赖图、SCC、反事实诊断及风险知识图谱解释候选;模型预测不等于实测收益
桌面语义保护 对桌面、网络、输入等能力设置保护约束,区分阶段计时与功能复核
FORMAL/LIVE 分离 FORMAL 为历史冻结展示;LIVE 为已加载的现场结果文件,并非持续自动采集
Windows TUI/Chatbox 提供连接、分析、方案审阅、实验请求、结果查看及恢复入口
普通多选与 Final Extreme 普通 selector 可审阅组合;Final Extreme 的执行集合由冻结 root resolution 和 committed catalog 确定,不能强行加入排除项
事务执行与恢复 保存原始状态、事务和回执;未知执行结果不自动重试,按原事务授权恢复
Agent 证据审计 校验来源、守护规则和结果完整性,生成报告;不获得任意 shell 执行权限

Extreme 的 41 项是候选目录,不是每轮实际执行数量。Selected 只表示当前满足执行资格,不表示独立性能收益已经证明。组合实验评价方案整体差异,不能据此识别各服务独立因果贡献。

3. 版本与源码结构

本文以已提供源码包的核对基线 1a1c23123ebbfd93595f68608589c046fbcdd6b6、开发分支 feat/issue-8-experimental-composite-loop 编写,不声明该提交是远端最新版本或正式初赛基线。

实际 checkout 可用以下命令确认:

git branch --show-current
git rev-parse HEAD
git status --short

主要源码位置:

路径 用途
detection/ 启动证据采集
analyzer/ 分析、诊断、风险与报告
optimizations/ 配方、执行及恢复相关实现
scripts/ 远程采集、结果导出及辅助脚本
go-tui/ Go 控制台、Chatbox 和实验状态管理
tests/ Python 测试、夹具及选定验证数据
docs/ 技术说明与使用边界
run.sh Linux 本地命令入口

以下命令按当前源码布局编写。若交付时将源码迁入 src/,需相应更新工作目录并验证,不能只移动文件后沿用旧命令。

4. 系统环境与依赖

环境/依赖 要求与用途
Windows 控制端需可交互终端、OpenSSH 客户端;重新构建需 Go 与 Git
Linux/openKylin 真实采集需要 systemd、systemd-analyze、systemctl、Bash、可读取的日志及相关 D-Bus/logind 接口
Python pyproject.toml 声明 Python ≥3.8;实际固定 Gateway/runtime 使用部署核验的 Python,不保证任意版本等价
Go go-tui/go.mod 声明 1.25.6;使用可满足锁定依赖的工具链,不沿用旧 README 的 Go 1.21 要求
Python依赖 核心以标准库为主,按 requirements.txt 安装;可选 AI SDK 不是离线界面和核心分析的必需条件
Go依赖 tview、tcell、Cobra 等版本由 go.mod 与 go.sum 锁定,通过 go mod download 获取
jq、bc、awk 部分 Linux 基准或辅助脚本使用,按所选入口准备
SSH 首次连接需人工核验并登记主机公钥;配置私钥路径或 ssh-agent,不保存密码
管理员部署 Final 执行需固定 root Gateway、runtime manifest、受限 sudo 与恢复通道;克隆源码不会自动完成部署

UKUI 是主要桌面验证对象。其他发行版的采集、机制分析、桌面协议和性能资格应分别评价;历史兼容记录不表示固定 Gateway 可直接部署到任意机器。

5. 安装与构建

5.1 获取指定源码

git clone --branch feat/issue-8-experimental-composite-loop https://github.com/Phoenix0531-sudo/BootSem.git
cd BootSem
git checkout 1a1c23123ebbfd93595f68608589c046fbcdd6b6

上述 checkout 用于复核本文基线。使用其他提交时,应重新核对产物、runtime 和部署绑定。ZIP 可用于阅读、测试及普通界面构建;Final 生产入口依赖真实 Git 提交信息与匹配构建,不能通过 git init 伪造来源。

5.2 Linux Python 环境

在项目根目录执行:

python3 -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements.txt
./run.sh help

如果缺少 Python venv、systemd 工具或 OpenSSH,先按目标发行版安装对应系统软件包。不要在 Windows PowerShell 直接运行 Linux Bash 命令。

5.3 Windows 构建 TUI

在项目根目录的 PowerShell 中执行:

go version
git rev-parse HEAD
Push-Location .\go-tui
try {
    go mod download
    New-Item -ItemType Directory -Force .\dist | Out-Null
    go build -buildvcs=false -o .\dist\bootsem.exe .\cmd\bootsem
    if ($LASTEXITCODE -ne 0) { throw 'Go build failed' }
} finally {
    Pop-Location
}

这是普通 TUI 构建方法,不等于 Final 执行产物已通过 readiness。Final 对源码提交、EXE 和 runtime 有额外绑定;完整仓库、构建匹配与部署条件缺一不可。

5.4 Linux 构建 TUI

cd go-tui
go mod download
make build
# 可选:构建 Linux amd64 产物
make build-linux
cd ..

产物位于 go-tui/dist/。也可查看 go-tui/Makefile 和 go-tui/README.md。

6. 运行方法

6.1 离线查看历史界面(不连接 VM)

Windows,在项目根目录:

.\go-tui\dist\bootsem.exe --role controller --project-root . --results-dir .\tests\data\results

Linux,在项目根目录:

./go-tui/dist/bootsem --role local --project-root . --results-dir ./tests/data/results

默认 FORMAL 为内嵌历史快照,只读查看,不生成新的实验数据。可按 ? 查看当前版本快捷键。0 为 Chatbox,1–4 切换页面,S 切换 FORMAL/LIVE;输入框获得焦点时数字是输入内容。

合成夹具可用于界面检查,不能作为真实实验:

.\go-tui\dist\bootsem.exe --role controller --project-root . --results-dir .\tests\fixtures\tui-live-native

6.2 Linux 本地采集与分析

. .venv/bin/activate
./run.sh analyze
./run.sh report

结果通常写入 tests/data/results/,包括 analysis_result.json、报告和原始证据。采集成功不等于正式实验资格通过。该流程不执行优化;读取哪些日志取决于当前用户权限。

6.3 Windows 配置 SSH

复制根目录 .env.example 为 .env,填写目标连接:

SSH_HOST=目标Linux地址
SSH_PORT=22
SSH_USER=目标用户名
SSH_KEY=C:/Users/你的用户名/.ssh/你的私钥文件

端口及路径按实际部署填写;不填写密码或私钥内容。环境变量优先于 .env,文件中的路径不会做 shell 展开。首次连接先通过 OpenSSH 核对目标公钥,程序不会自动信任未知主机密钥。

6.4 远程 LIVE 读取与采集

两端需匹配源码及 Python 环境。以下为参数模板,三个远端路径必须替换;--remote-results 是具体批次目录,不是结果父目录:

.\go-tui\dist\bootsem.exe `
    --role controller `
    --project-root . `
    --results-dir .\tests\data\results `
    --remote-project '/home/USER/BootSem' `
    --remote-python '/home/USER/BootSem/.venv/bin/python' `
    --remote-results '/home/USER/BootSem-results/本次批次' `
    --remote-env openkylin `
    --check-connection
  • C:只读连接检查;连接成功不代表数据已经采集
  • G:确认后获取已有远端批次并核验传输哈希
  • K:确认后采集当前启动并获取结果,使用不存在的新批次,不会自动重启
  • 成功加载后查看顶部 LIVE RESULTS,再进入总览、分析或证据页面

LIVE 是导入的现场结果,可能来自先前启动。需要新一轮启动数据时必须真正重启并核验 boot ID,不能重复导入旧结果冒充新样本。

6.5 Final Chatbox/Extreme 受控实验

仅适用于已完成匹配管理员部署的目标。启动需显式启用 --enable-final-gateway,并提供可信的 --final-gateway-manifest-sha256、现有绝对 --campaign-workspace、预期 --campaign-machine 和远端路径。普通启动不会自动安装或配置这些条件。

部署与协议阅读入口:

Final UI典型流程:

  1. Chatbox输入“开始分析”,选择“采集并分析”,等待LIVE采集和Extreme解析完成
  2. 查看Extreme分类,点击“确认Extreme”和“准备执行”;确认受控重启,采集A1并完成独立dry-run
  3. 核对Apply确认框,明确确认,等待 apply receipt verified
  4. 输入“重启复测”,按提示登录并等待B1完成;输入“继续实验”生成对比
  5. 输入“查看优化前后结果”,审阅同批次A/B结果
  6. 输入“回滚”,完成独立确认并等待回执核验;再输入“继续实验”进行恢复后的验证
  7. 实际确认campaign完成、恢复核验与事务清空,才结束本批次

不按固定秒数盲目推进,以实际完成状态为准。断连、超时或窗口崩溃后保留workspace,查询原事务状态;不要新建批次绕过未恢复事务,不重复Apply,也不手工enable代替原事务精确恢复。

UI quick A1/B1为单次重启诊断,不构成统计性能资格。命令行多轮campaign与普通 B 重启入口具有不同用途,不能混为自动正式5+5测试。

7. 测试方法

以下是复核命令,不表示当前交付环境已经重新执行并全部通过。

Python离线回归

Windows,在项目根目录:

$env:PYTHONUTF8 = '1'
$env:PYTHONIOENCODING = 'utf-8'
python -m unittest discover -s tests -p 'test_*.py'

Linux,在项目根目录:

PYTHONUTF8=1 PYTHONIOENCODING=utf-8 PYTHONPATH=. python -m unittest discover -s tests -p 'test_*.py'

Go回归

go -C go-tui test ./...

Go模块位于 go-tui/,不要在项目根目录直接使用不带模块定位的 go test ./...。平台专用测试可能跳过,跳过项不应写成已验证。

真实采集、Apply、重启、恢复及桌面功能检查属于独立实机实验,需要目标部署与人工授权,不由单元测试通过自动证明。

8. 测量与证据口径

  • systemd Total包含其报告的启动阶段,不等于墙钟从点击重启到桌面可用的完整时间;固件、BIOS/UEFI及GRUB等待单独说明
  • GT Milestone是userspace起点至graphical.target的阶段代理,不等于真实图形登录就绪
  • Desktop Ready以新图形会话和桌面判据为边界;不能与其他不同原点指标直接相加
  • 代表性功能9/9通过不直接证明首用时延没有增加
  • 历史FORMAL、当前LIVE、A/B及恢复后的数据分别保存,不拼接为同一次实验
  • A1/B1仅用于诊断观察,性能改善或回退均如实保留;不外推为稳定或统计显著收益
  • agent_gate=fail可能表示正式证据缺失;采集完成、执行资格、回执核验、桌面功能和正式性能资格是不同状态

本文不将历史汇总数字作为当前Extreme组合的效果承诺。结果应关联对应campaign、代码/配方版本、原始样本及验证记录,截图和哈希摘要不能替代原始证据。

9. 已知限制

  1. Final执行绑定目标、源码提交、运行时与配方,暂不提供任意机器免部署执行
  2. Windows是控制端;真实Linux启动采集需要目标工具、日志权限及SSH环境
  3. 普通自由多选与Final Extreme具有不同执行边界,合成可选项不代表真实目标可执行
  4. 历史跨发行版分析或KARE记录不能替代当前目标的部署与功能验证
  5. 实际收益受环境和方案影响,多选服务不保证提速;单次结果不足以建立因果或统计结论
  6. 部分桌面阶段、首用时延和历史原始数据的可复核范围取决于实际随交付提供的证据
  7. Windows终端曾出现输入、焦点、刷新及窗口调整问题;录制时保持固定尺寸,崩溃后先核对事务,不自动重试
  8. 平面远程结果导出不是完整多轮实验归档,归档还需对应campaign、子目录及事务回执
  9. 资料提交改变HEAD也可能影响Final readiness,最终EXE与runtime需按实际绑定机制重新核验,不能通过放宽校验解决

10. 材料、隐私与许可证

正式材料按提交要求放入 docs/,演示PPT与真实MP4放入 presentation/,实际可运行交付物及说明放入 demo/。目录或链接只有在文件实际存在时才代表完成交付;本文不生成空占位物。

不提交 .env、SSH私钥、密码、token、虚拟环境、开发缓存或未经筛选的现场目录。公开截图与证据副本按匿名要求处理;原始实验文件及协议绑定保持不变。

BootSem源码使用 MIT许可证,第三方依赖遵循各自许可证。Go依赖见 go-tui/go.mod 与 go-tui/go.sum,Python依赖及可选项见 requirements.txt 和 pyproject.toml。

关于

BootSem 面向 openKylin 桌面系统启动性能分析场景,通过桌面语义建模、systemd/D-Bus 环境适配和不可变证据链,定位影响桌面可用性的关键启动路径。项目提供 analyze → diagnose → review → optimize → verify 完整工作流,支持正式采集、统计分析、优化审查、安全门禁和回滚验证,并以 TUI 界面和结构化结果输出可复核的分析结论。

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

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