dragonos-gvisor-test-analysis

star 1.2k

通过对比 Linux/gvisor 参考实现来分析 DragonOS gVisor 测试失败。输出结构化的修复文档,包含对于所有失败用例的表格格式分析文档,针对每个具体的失败用例的详细格式修复文档,并提供代码片段。当用户提及 gVisor 测试失败、特定测试用例或询问 bug 分析/修复方案时使用。

DragonOS-Community By DragonOS-Community schedule Updated 2/11/2026

name: dragonos-gvisor-test-analysis description: 通过对比 Linux/gvisor 参考实现来分析 DragonOS gVisor 测试失败。输出结构化的修复文档,包含对于所有失败用例的表格格式分析文档,针对每个具体的失败用例的详细格式修复文档,并提供代码片段。当用户提及 gVisor 测试失败、特定测试用例或询问 bug 分析/修复方案时使用。 version: 0.2.0 allowed-tools: Read, Grep, Glob, Bash

DragonOS gVisor 测试失败分析器

目的

通过参考 Linux 内核和 gVisor 实现来分析 DragonOS 在 gVisor 测试套件中的失败。输出识别根本原因并提供可执行修复计划的文档。

参考路径

gVisor 测试:  ../gvisor/test/syscalls/linux/
Linux 内核:   ../linux/kernel/
DragonOS:     kernel/src/

工作流程

步骤 1: 解析测试失败

从用户输入中提取:

  • 所有失败的测试名称(格式:TestSuite.TestCase
  • GTEST 输出消息,例如:
    [  RUN     ] WaitTest.Wait4Rusage
    [  FAILED  ] WaitTest.Wait4Rusage (0 ms)
    
  • 错误模式或 panic 消息
  • 堆栈跟踪(如果存在)

步骤 2: 定位测试代码

查找 gVisor 测试实现:

使用 Glob 查找: ../gvisor/test/syscalls/linux/*<syscall>*.cc
使用 Grep 查找: TEST.*<test_name>

步骤 3: 追踪系统调用路径

映射调用链:

测试 → 系统调用 → DragonOS 实现 → Bug

查找 DragonOS 实现:

使用 Grep 查找: fn sys_<syscall_name> 或 syscall!(<syscall_name>)

步骤 4: 对比 Linux 参考

查找 Linux 参考实现:

在 ../linux 中使用 Grep: SYSCALL_DEFINE.*<syscall_name>

步骤 5: 生成概览修复文档的“测试范围理解”和“内核子系统现状”部分

遵循 references/FORMAT.md 中的"概览格式"部分,生成其前两部分:

  • 测试范围理解
  • 内核子系统现状

步骤六: 循环生成详细单个测试修复文档

对于每个失败的测试,遵循 references/FORMAT.md 中的"单个测试格式"部分,生成详细的修复文档,知道没有更多失败测试需要处理为止。

步骤七:生成概览文档的"根因分析"和"修复建议"部分

结合 Overview 和 Detailed 文档,生成概览文档的最后两部分:

7.1 生成第三部分:根因分析表格

汇总所有详细文档中的根因,提炼共性偏差:

## 三、根因分析

| 测试点 | Linux 期望 | DragonOS 实际 | 差距 |
|-------|-----------|---------------|------|
| `[接口/字段]` | [Linux 行为] | [DragonOS 行为] | [偏差说明] |
| `[接口/字段]` | [Linux 行为] | [DragonOS 行为] | [偏差说明] |

提炼规则

  • 每行对应一个"接口/字段"级别的偏差
  • 如果多个测试共享同一根因,在"差距"列注明 (N 个测试)
  • 优先描述数据结构/状态层面的差异,而非行为表现
  • 引用具体文件和行号作为证据

7.2 生成第四部分:修复方案

7.2.1 生成关键改动表格
## 四、修复方案

### 4.1 关键改动
| 文件 | 改动 | 原因 |
|-----|------|------|
| `kernel/src/xxx.rs` | [具体修改] | [修改原因] |
| `kernel/src/yyy.rs` | [具体修改] | [修改原因] |

生成规则

  • 从所有 Detailed 文档的"修复方案"部分汇总
  • 去重合并:同一文件的多个修改合并为一条
  • 按依赖关系排序(基础改动在前)
  • 原因列引用对应的根因("差距"列)
7.2.2 生成实现细节
### 4.2 实现细节
[补充关键实现注意事项、依赖关系、风险点等]

内容规则

  • 说明跨文件修改的依赖顺序
  • 标注可能影响的其他子系统(向后兼容性检查,防止回归)
  • 列出需要同步修改的测试/文档
  • 注明未完全实现的边缘情况(如果存在)

示例

完整的输入输出示例和详细使用场景,请参见 EXAMPLES.md

该文件包含:

  • 单个测试失败分析示例
  • 多个测试失败批量分析示例
  • 测试失败输出模式识别
  • 系统调用路径追踪示例
  • 根本原因分组示例

注意事项

  • 始终引用 file:line 作为代码参考
  • 代码片段应最小化(最多 5-10 行)
  • 级联失败:注明哪个测试是根本原因
  • 提出修复方案时考虑 DragonOS 架构约束
Install via CLI
npx skills add https://github.com/DragonOS-Community/DragonOS --skill dragonos-gvisor-test-analysis
Repository Details
star Stars 1,174
call_split Forks 194
navigation Branch main
article Path SKILL.md
More from Creator
DragonOS-Community
DragonOS-Community Explore all skills →