Update README.md
面向 openKylin/Linux 的系统异常观测与根因定位平台,使用 eBPF、Go、C++ 和 Qt,覆盖 CPU、内存、I/O、锁、系统调用五类场景。适用于系统性能排查、异常复现、证据回查和教学演示。数据链路为浅层采集 → 异常窗口判断 → 限时目标化深层采集 → 根因与证据关联 → JSONL/Prometheus → CLI 与 Qt。
master
源码也可通过终端获取(HTTPS 提示认证时,使用具有仓库访问权限的账号):
git clone --depth 1 --branch master \ https://gitlink.org.cn/IlAAAzZZSM/jyedxtycgcygydwgj.git ebpf-diagnose cd ebpf-diagnose
视频下载入口及提取码同时保存在 项目演示视频链接.txt。2026-10-07 已核验网盘分享页面可访问、提取码验证通过;实际播放与下载以网盘页面及账号权限为准。
README.md src/ 源码、配置、机器可读数据契约、构建与运行入口 bpf/ collectors/ cmd/ internal/ pkg/ analyzer/ ebpf-UI/ configs/ scripts/ tools/ schemas/ docs/ Makefile go.mod go.sum docs/ 仅存放要求的四份 PDF文档 tests/ 测试脚本、负载、配置、原始证据、结果与报告 demo/ 可运行、可复现的演示入口 presentation/ 决赛答辩 PPT、配套 PDF 与演示视频链接 作品原创承诺书.pdf
当前分支为 master。四份规定 PDF、原创承诺书及 决赛现场演示 PPT 已整理到规定位置。成员仅使用 A(组长)、B、C。工具使用声明仍需团队在模板空白栏完成手抄;演示视频通过 项目演示视频链接 提供,文本包含网盘地址和提取码。
测试材料只存放于根目录 tests/,运行与实验结果存放于 tests/results/,源码直接引用这两个目录。本机构建产物与工具缓存不属于交付源码,导出时已自动排除。
tests/
tests/results/
CLI 统一提供环境检查、实时观测、状态查询、报告、解释和回放,以及证据索引、质量检查、五层证据链、多源关联、受约束 AI 上下文包。Qt 提供中英文切换、五场景面板、告警、诊断报告、证据回查和项目功能测试。功能状态以 异常矩阵 为准,实测结论见 测试总结。
异常目录包含 CPU 4 类、I/O 4 类、内存 4 类、锁 2 类、系统调用 3 类,共 17 类。其中 16 类默认启用异常均保留了真实闭环 PASS 记录;OOM_RISK 为默认关闭的实验功能,未计入正式通过统计。下表逐类列出一份可复核的用例审核记录,中文名称与 Qt 界面保持一致。
OOM_RISK
CPU_HIGH_USAGE
CPU_SCHED_LATENCY
CONTEXT_SWITCH_STORM
CPU_THREAD_CONTENTION
IO_LATENCY_JITTER
IO_QUEUE_CONGESTION
IO_HOT_FILE
IO_HOT_PROCESS
MEMORY_PRESSURE
MEMORY_RECLAIM_JITTER
MEMORY_OOM
LOCK_CONTENTION
LARGE_CRITICAL_SECTION
SYSCALL_FREQUENCY_HOTSPOT
SYSCALL_LATENCY_HOTSPOT
SYSCALL_ERROR_STORM
PASS 表示对应运行按该用例的适用条件通过审核。已逐项核对上述 16 份记录的预期异常、审核错误数、原始引用解析、CLI 五层证据链与来源核验、必需采集质量和清理状态;对象核验范围以各用例的 case-audit.json 为准。同目录中的 ground-truth.json、data-quality.json、cli-query/verify.json、cleanup-result.json 和 validation-session.json 提供独立真值及完整闭环信息。
case-audit.json
ground-truth.json
data-quality.json
cli-query/verify.json
cleanup-result.json
validation-session.json
这些记录来自保存的不同运行批次,不能据此宣称所有历史运行或当前构建均已通过。五类正常对照 C-06、I-02、M-08、L-02、S-08 也保留了通过示例;整体准确性、失败及无法判定样本的统计口径见 测试总结 和 通过示例索引。
Qt 与 CLI 使用同一套指标、JSONL 诊断及原始事件数据。以下核心截图直接提取自 决赛现场演示 PPT 第 28~30 页,展示保存的实际演示画面;具体测试结果可通过上方矩阵中的审核记录复核。
总览集中展示 CPU、可用内存比例、磁盘最大平均时延、窗口平均锁等待和已观测系统调用速率,以及健康评分、去重异常数和近期事件预览。右侧趋势图将不同单位的指标归一化,便于观察变化;近期事件预览最多展示 200 条。顶部区分系统运行、指标连接、近期诊断记录和数据加载状态,右上角可切换中文与英文。
告警中心汇总五场景诊断,提供模块、严重程度和文本筛选,按高、中、低显示告警级别。每条记录包含时间、PID/TID、异常类型、描述及近期或历史状态;选择记录后可查看对应场景及诊断报告。顶部“近期记录”按最近五分钟统计,表格同时支持查看已加载的历史记录。
证据链依次呈现触发证据 → 目标 → 疑似根因 → 支持证据 → 原始事件。示例将 CPU 异常占用关联到 stress-ng-cpu 的 PID/TID,列出 CPU 持续高占用和线程运行占比等支持条件,再链接到原始事件。结合场景页的规则阈值、观测值、采集质量和根因候选,可以逐项检查结论的依据与缺失信息。
stress-ng-cpu
报告汇总异常类型、严重程度、时间窗口、目标身份、疑似根因、规则判定、关键指标和证据摘要,支持复制及 Markdown/JSON 导出。图中 CPU 观测值约 99.07%,对应阈值为 90%;证据支持度 0.90 为规则评分,不能直接解释为根因正确概率。项目功能测试入口则按用例执行真实负载、独立真值、诊断与证据审核,并展示通过、失败、跳过或无法判定的实际终态。
目标环境为 openKylin 2.0 SP2、Linux 6.6+、x86_64,要求可读 /sys/kernel/btf/vmlinux。ARM64 有构建适配,运行能力须另行验证。依赖 Go 1.24+、Clang/LLVM(BPF 后端)、libelf、CMake 3.24+、C++20 编译器、Cap’n Proto 与 capnpc-go、Python 3。GUI 依赖 Qt 6.4+ 的 Core、Gui、Qml、Quick、Quick Controls 2、Network 开发组件、QML 运行时模块及图形桌面。C++ 单测需要 GoogleTest。
/sys/kernel/btf/vmlinux
capnpc-go
压力验证另需 curl、fio、stress-ng、sudo、cgroup v2 和独立测试盘。Go 版本与依赖由 go.mod、go.sum 锁定,保留第三方代码版权和 SPDX 标识;关键许可证及完整 Go 模块清单见 第三方说明。
构建命令在 src/ 执行:
src/
cd src source scripts/dev-env.sh # 首次联网准备 Go 依赖;后续构建默认离线 make prepare-go-deps-online go install capnproto.org/go/capnp/v3/capnpc-go@v3.1.0-alpha.2 export PATH="$(go env GOPATH)/bin:$PATH" make diagnosis-build JOBS=2 make ui-build JOBS=2
dev-env.sh 在存在本地工具链缓存时使用它,交付环境可使用系统工具链。离线环境须预先提供对应模块缓存、Cap’n Proto 工具和系统依赖。后端产物位于 src/_output/{bin,bpf,conf}/,UI 位于 src/build/ui/。采用仓库内运行方式,无需安装系统服务;部署时保持上述目录关系。见 开发说明 与 配置说明。技术文档中的构建和运行命令在 src/ 执行。
dev-env.sh
src/_output/{bin,bpf,conf}/
src/build/ui/
图形演示在交付根目录执行:
bash demo/run.sh doctor sudo -v bash demo/run.sh start bash demo/run.sh status bash demo/run.sh stop
已运行时可使用 bash demo/run.sh restart。仅后端可用 bash src/scripts/manage_ebpf_stack_openkylin.sh start-backend,随后用 status-backend 查看、stop-backend 停止。统一 CLI 示例:
bash demo/run.sh restart
bash src/scripts/manage_ebpf_stack_openkylin.sh start-backend
status-backend
stop-backend
src/_output/bin/ebpf-diagnose --help src/_output/bin/ebpf-diagnose doctor sudo src/_output/bin/ebpf-diagnose observe --scenarios all --duration 60s src/_output/bin/ebpf-diagnose report --session /absolute/path/to/session src/_output/bin/ebpf-diagnose evidence --help
也可统一通过 bash demo/run.sh cli <命令> <参数> 调用,如 bash demo/run.sh cli doctor、bash demo/run.sh cli evidence --help。此入口保留调用终端的当前目录,相对路径无需改成 src/ 下的路径;bash demo/run.sh status/stop 仍用于管理 Qt 实时栈。
bash demo/run.sh cli <命令> <参数>
bash demo/run.sh cli doctor
bash demo/run.sh cli evidence --help
bash demo/run.sh status/stop
Codex 对话诊断通过项目技能接入。执行 bash demo/run.sh codex-install 后,在 Codex 中输入 $ebpf-diagnose 帮我检查当前系统最近五分钟的异常,或指定场景、PID、历史数据目录。Codex 根据需求调用统一 CLI,核查目标、规则指标、采集质量和来源哈希,再返回带证据的候选结论。技能源文件及调用脚本位于 src/integrations/codex/ebpf-diagnose,安装仅创建本地 .agents/skills/ 发现链接。模型由当前 Codex 会话提供,项目没有新增常驻 AI 服务或 API 密钥配置。
bash demo/run.sh codex-install
$ebpf-diagnose 帮我检查当前系统最近五分钟的异常
.agents/skills/
eBPF 加载需要 root 或等价能力。Qt 托管实时数据写入 tests/results/runtime/;CLI observe 自行创建含 session.json 的会话目录,查询命令 --session 指向该目录,不能直接使用 Qt 的 runtime/live。CLI 观测与 Qt 托管后端应分别运行,避免共用 Agent、socket 和端口。见 演示说明、CLI 说明。
tests/results/runtime/
observe
session.json
--session
runtime/live
cd src source scripts/dev-env.sh make test JOBS=2
包含目录检查、Go 单测、Analyzer CTest、Qt CTest 和 Python 验证器测试。可分别执行 make test-go、make analyzer-test、make ui-test、make evaluation-test、make cli-test。Go/C++/Qt 单测与所属源码模块共同维护,Python 脚本单测位于根目录 tests/scripts/unit/、tests/evaluation/unit/。
make test-go
make analyzer-test
make ui-test
make evaluation-test
make cli-test
tests/scripts/unit/
tests/evaluation/unit/
src/scripts/
tests/scripts/validation/
tests/evaluation/
tests/scripts/
根目录执行演示验证:
bash demo/run.sh validate --dry-run # 目标机满足授权、资源隔离及独立测试盘要求后 bash demo/run.sh validate
复现批量评估的命令见 测试材料说明,隔离与清理要求见 压力测试约束。
诊断是基于规则与证据的候选结论,受内核能力、权限、采样窗口、目标选择和事件丢失影响。准确性材料包含多个开发版本与无法判定样本,不能代表当前冻结版本的完整准确率;根因仅有部分独立验证。保留的 Syscall 正式复测中 AUTO 吞吐下降约 56.31%,仍有显著开销。内存结果受透明大页与基线波动影响。OOM_RISK 属于默认关闭的实验功能;OOM 压力实验仅限可丢弃的隔离 VM。Qt 需要图形桌面,无桌面可使用 CLI。见 完整限制。
评估总汇、测试总结 明确历史报告、当前回归与未验证项。整理不更改原始 JSON/CSV、实验判定或统计口径;不能用筛选通过的展示示例宣称整体准确率。
python3 tests/scripts/check_project_layout.py python3 tests/scripts/verify_evidence.py python3 tests/scripts/check_project_layout.py --submission python3 tests/scripts/check_project_layout.py --submission --video-delivery link python3 tests/scripts/export_delivery.py --output /var/tmp/ebpf-diagnose-final.tar.gz
导出包含源码、说明与保留测试证据,排除本机工具链、生成文件和实时运行目录。--submission 默认按原规范检查 MP4;--video-delivery link 按选择检查视频链接文本存在并含 HTTP(S) 地址。
--submission
--video-delivery link
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
eBPF Diagnose
面向 openKylin/Linux 的系统异常观测与根因定位平台,使用 eBPF、Go、C++ 和 Qt,覆盖 CPU、内存、I/O、锁、系统调用五类场景。适用于系统性能排查、异常复现、证据回查和教学演示。数据链路为浅层采集 → 异常窗口判断 → 限时目标化深层采集 → 根因与证据关联 → JSONL/Prometheus → CLI 与 Qt。
项目获取与演示视频下载
master分支的完整交付目录,随后按照本文的构建、运行与测试方法使用。源码访问需要具有该仓库访问权限的 GitLink 账号。源码也可通过终端获取(HTTPS 提示认证时,使用具有仓库访问权限的账号):
视频下载入口及提取码同时保存在 项目演示视频链接.txt。2026-10-07 已核验网盘分享页面可访问、提取码验证通过;实际播放与下载以网盘页面及账号权限为准。
交付目录
当前分支为
master。四份规定 PDF、原创承诺书及 决赛现场演示 PPT 已整理到规定位置。成员仅使用 A(组长)、B、C。工具使用声明仍需团队在模板空白栏完成手抄;演示视频通过 项目演示视频链接 提供,文本包含网盘地址和提取码。测试材料只存放于根目录
tests/,运行与实验结果存放于tests/results/,源码直接引用这两个目录。本机构建产物与工具缓存不属于交付源码,导出时已自动排除。主要功能与应用场景
CLI 统一提供环境检查、实时观测、状态查询、报告、解释和回放,以及证据索引、质量检查、五层证据链、多源关联、受约束 AI 上下文包。Qt 提供中英文切换、五场景面板、告警、诊断报告、证据回查和项目功能测试。功能状态以 异常矩阵 为准,实测结论见 测试总结。
五场景 17 类异常与测试验证矩阵
异常目录包含 CPU 4 类、I/O 4 类、内存 4 类、锁 2 类、系统调用 3 类,共 17 类。其中 16 类默认启用异常均保留了真实闭环 PASS 记录;
OOM_RISK为默认关闭的实验功能,未计入正式通过统计。下表逐类列出一份可复核的用例审核记录,中文名称与 Qt 界面保持一致。CPU_HIGH_USAGECPU_SCHED_LATENCYCONTEXT_SWITCH_STORMCPU_THREAD_CONTENTIONIO_LATENCY_JITTERIO_QUEUE_CONGESTIONIO_HOT_FILEIO_HOT_PROCESSMEMORY_PRESSUREMEMORY_RECLAIM_JITTERMEMORY_OOMOOM_RISKLOCK_CONTENTIONLARGE_CRITICAL_SECTIONSYSCALL_FREQUENCY_HOTSPOTSYSCALL_LATENCY_HOTSPOTSYSCALL_ERROR_STORMPASS 表示对应运行按该用例的适用条件通过审核。已逐项核对上述 16 份记录的预期异常、审核错误数、原始引用解析、CLI 五层证据链与来源核验、必需采集质量和清理状态;对象核验范围以各用例的
case-audit.json为准。同目录中的ground-truth.json、data-quality.json、cli-query/verify.json、cleanup-result.json和validation-session.json提供独立真值及完整闭环信息。这些记录来自保存的不同运行批次,不能据此宣称所有历史运行或当前构建均已通过。五类正常对照 C-06、I-02、M-08、L-02、S-08 也保留了通过示例;整体准确性、失败及无法判定样本的统计口径见 测试总结 和 通过示例索引。
Qt 界面与证据回查流程
Qt 与 CLI 使用同一套指标、JSONL 诊断及原始事件数据。以下核心截图直接提取自 决赛现场演示 PPT 第 28~30 页,展示保存的实际演示画面;具体测试结果可通过上方矩阵中的审核记录复核。
1. 运行总览:查看资源与数据状态
总览集中展示 CPU、可用内存比例、磁盘最大平均时延、窗口平均锁等待和已观测系统调用速率,以及健康评分、去重异常数和近期事件预览。右侧趋势图将不同单位的指标归一化,便于观察变化;近期事件预览最多展示 200 条。顶部区分系统运行、指标连接、近期诊断记录和数据加载状态,右上角可切换中文与英文。
2. 告警中心:筛选异常并进入诊断
告警中心汇总五场景诊断,提供模块、严重程度和文本筛选,按高、中、低显示告警级别。每条记录包含时间、PID/TID、异常类型、描述及近期或历史状态;选择记录后可查看对应场景及诊断报告。顶部“近期记录”按最近五分钟统计,表格同时支持查看已加载的历史记录。
3. 五层证据链:核对异常依据
证据链依次呈现触发证据 → 目标 → 疑似根因 → 支持证据 → 原始事件。示例将 CPU 异常占用关联到
stress-ng-cpu的 PID/TID,列出 CPU 持续高占用和线程运行占比等支持条件,再链接到原始事件。结合场景页的规则阈值、观测值、采集质量和根因候选,可以逐项检查结论的依据与缺失信息。4. 诊断报告:查看详情并导出
报告汇总异常类型、严重程度、时间窗口、目标身份、疑似根因、规则判定、关键指标和证据摘要,支持复制及 Markdown/JSON 导出。图中 CPU 观测值约 99.07%,对应阈值为 90%;证据支持度 0.90 为规则评分,不能直接解释为根因正确概率。项目功能测试入口则按用例执行真实负载、独立真值、诊断与证据审核,并展示通过、失败、跳过或无法判定的实际终态。
系统环境与依赖要求
目标环境为 openKylin 2.0 SP2、Linux 6.6+、x86_64,要求可读
/sys/kernel/btf/vmlinux。ARM64 有构建适配,运行能力须另行验证。依赖 Go 1.24+、Clang/LLVM(BPF 后端)、libelf、CMake 3.24+、C++20 编译器、Cap’n Proto 与capnpc-go、Python 3。GUI 依赖 Qt 6.4+ 的 Core、Gui、Qml、Quick、Quick Controls 2、Network 开发组件、QML 运行时模块及图形桌面。C++ 单测需要 GoogleTest。压力验证另需 curl、fio、stress-ng、sudo、cgroup v2 和独立测试盘。Go 版本与依赖由 go.mod、go.sum 锁定,保留第三方代码版权和 SPDX 标识;关键许可证及完整 Go 模块清单见 第三方说明。
构建与安装
构建命令在
src/执行:dev-env.sh在存在本地工具链缓存时使用它,交付环境可使用系统工具链。离线环境须预先提供对应模块缓存、Cap’n Proto 工具和系统依赖。后端产物位于src/_output/{bin,bpf,conf}/,UI 位于src/build/ui/。采用仓库内运行方式,无需安装系统服务;部署时保持上述目录关系。见 开发说明 与 配置说明。技术文档中的构建和运行命令在src/执行。运行方法
图形演示在交付根目录执行:
已运行时可使用
bash demo/run.sh restart。仅后端可用bash src/scripts/manage_ebpf_stack_openkylin.sh start-backend,随后用status-backend查看、stop-backend停止。统一 CLI 示例:也可统一通过
bash demo/run.sh cli <命令> <参数>调用,如bash demo/run.sh cli doctor、bash demo/run.sh cli evidence --help。此入口保留调用终端的当前目录,相对路径无需改成src/下的路径;bash demo/run.sh status/stop仍用于管理 Qt 实时栈。Codex 对话诊断通过项目技能接入。执行
bash demo/run.sh codex-install后,在 Codex 中输入$ebpf-diagnose 帮我检查当前系统最近五分钟的异常,或指定场景、PID、历史数据目录。Codex 根据需求调用统一 CLI,核查目标、规则指标、采集质量和来源哈希,再返回带证据的候选结论。技能源文件及调用脚本位于 src/integrations/codex/ebpf-diagnose,安装仅创建本地.agents/skills/发现链接。模型由当前 Codex 会话提供,项目没有新增常驻 AI 服务或 API 密钥配置。eBPF 加载需要 root 或等价能力。Qt 托管实时数据写入
tests/results/runtime/;CLIobserve自行创建含session.json的会话目录,查询命令--session指向该目录,不能直接使用 Qt 的runtime/live。CLI 观测与 Qt 托管后端应分别运行,避免共用 Agent、socket 和端口。见 演示说明、CLI 说明。测试方法与脚本分工
包含目录检查、Go 单测、Analyzer CTest、Qt CTest 和 Python 验证器测试。可分别执行
make test-go、make analyzer-test、make ui-test、make evaluation-test、make cli-test。Go/C++/Qt 单测与所属源码模块共同维护,Python 脚本单测位于根目录tests/scripts/unit/、tests/evaluation/unit/。src/scripts/tests/scripts/validation/tests/evaluation/tests/scripts/的独立入口根目录执行演示验证:
复现批量评估的命令见 测试材料说明,隔离与清理要求见 压力测试约束。
已知限制
诊断是基于规则与证据的候选结论,受内核能力、权限、采样窗口、目标选择和事件丢失影响。准确性材料包含多个开发版本与无法判定样本,不能代表当前冻结版本的完整准确率;根因仅有部分独立验证。保留的 Syscall 正式复测中 AUTO 吞吐下降约 56.31%,仍有显著开销。内存结果受透明大页与基线波动影响。
OOM_RISK属于默认关闭的实验功能;OOM 压力实验仅限可丢弃的隔离 VM。Qt 需要图形桌面,无桌面可使用 CLI。见 完整限制。评估总汇、测试总结 明确历史报告、当前回归与未验证项。整理不更改原始 JSON/CSV、实验判定或统计口径;不能用筛选通过的展示示例宣称整体准确率。
交付检查与导出
导出包含源码、说明与保留测试证据,排除本机工具链、生成文件和实时运行目录。
--submission默认按原规范检查 MP4;--video-delivery link按选择检查视频链接文本存在并含 HTTP(S) 地址。