|
| 1 | +# CODEBUDDY.md |
| 2 | + |
| 3 | +This file provides guidance to CodeBuddy Code when working with the F-Stack open source project. |
| 4 | + |
| 5 | +## Project Overview |
| 6 | + |
| 7 | +F-Stack is an open source high-performance network framework based on DPDK, porting the FreeBSD TCP/IP stack to user space. It achieves 10 million concurrent connections, 5 million RPS, 1 million CPS. |
| 8 | + |
| 9 | +- **Primary Language:** C |
| 10 | +- **F-Stack Version:** 1.25 |
| 11 | +- **DPDK Version:** 23.11.5 |
| 12 | +- **Repository:** https://github.com/F-Stack/f-stack |
| 13 | +- **Local Clone:** `/data/workspace/f-stack` |
| 14 | + |
| 15 | +## Build Commands |
| 16 | + |
| 17 | +```bash |
| 18 | +# 1. 编译 DPDK |
| 19 | +cd /data/workspace/f-stack/dpdk |
| 20 | +meson -Denable_kmods=true build |
| 21 | +ninja -C build |
| 22 | +ninja -C build install |
| 23 | + |
| 24 | +# 2. 编译 F-Stack |
| 25 | +export FF_PATH=/data/workspace/f-stack |
| 26 | +export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/local/lib64/pkgconfig:/usr/lib/pkgconfig |
| 27 | +cd /data/workspace/f-stack/lib |
| 28 | +make # 编译 |
| 29 | +make install # 安装(libfstack.a → /usr/local/lib,ff_*.h → /usr/local/include) |
| 30 | + |
| 31 | +# 3. 清理重编 |
| 32 | +cd /data/workspace/f-stack/lib && make clean && make |
| 33 | +``` |
| 34 | + |
| 35 | +## F-Stack Issue 分析处理标准操作流程 (SOP) |
| 36 | + |
| 37 | +**适用范围:** 分析 F-Stack GitHub 仓库 (`F-Stack/f-stack`) 的 issue,判断状态并给出处理建议。 |
| 38 | + |
| 39 | +**环境准备:** |
| 40 | +- GitHub Token 已配置(`GH_TOKEN` 环境变量) |
| 41 | +- F-Stack 官方仓库已 clone 至 `/data/workspace/f-stack` |
| 42 | +- `gh` CLI 已安装 |
| 43 | + |
| 44 | +### 第一步:读 Issue 全文 |
| 45 | + |
| 46 | +**必须完整获取 issue 原文及全部讨论,不可仅看标题。** |
| 47 | + |
| 48 | +```bash |
| 49 | +export GH_TOKEN='<token>' |
| 50 | + |
| 51 | +# 获取 issue 正文 |
| 52 | +gh issue view <NUMBER> -R F-Stack/f-stack |
| 53 | + |
| 54 | +# 获取全部评论(API 方式,无截断) |
| 55 | +gh api repos/F-Stack/f-stack/issues/<NUMBER>/comments --jq '.[] | {user: .user.login, created_at: .created_at, body: .body}' |
| 56 | +``` |
| 57 | + |
| 58 | +**记录以下信息:** |
| 59 | +- 报告者(author) |
| 60 | +- F-Stack / DPDK 版本 |
| 61 | +- 错误现象(crash、性能、编译失败、功能异常等) |
| 62 | +- 复现步骤或环境描述 |
| 63 | +- 已有讨论结论(维护者是否回复、是否有解决方案) |
| 64 | + |
| 65 | +### 第二步:查代码提交记录 |
| 66 | + |
| 67 | +**在本地 F-Stack 仓库中搜索相关修复。** |
| 68 | + |
| 69 | +```bash |
| 70 | +cd /data/workspace/f-stack |
| 71 | + |
| 72 | +# 按关键词搜索 commit message |
| 73 | +git log --all --oneline --grep='<关键词>' |
| 74 | + |
| 75 | +# 按文件路径搜索变更历史 |
| 76 | +git log --all --oneline -- <文件路径> |
| 77 | + |
| 78 | +# 搜索修复性提交 |
| 79 | +git log --all --oneline --grep='fix' --grep='<关键词>' --all-match |
| 80 | + |
| 81 | +# 查看某个 commit 的详细变更 |
| 82 | +git show <commit-hash> |
| 83 | +``` |
| 84 | + |
| 85 | +**同时检查 DPDK 上游:** |
| 86 | +```bash |
| 87 | +cd /data/workspace/f-stack/dpdk |
| 88 | + |
| 89 | +# 搜索 DPDK 中的相关修复 |
| 90 | +git log --all --oneline --grep='<关键词>' |
| 91 | +``` |
| 92 | + |
| 93 | +**关注点:** |
| 94 | +- issue 提及版本之后是否有修复性提交(Fixes/fix/patch) |
| 95 | +- 修复是否已 backport 到当前使用的分支 |
| 96 | + |
| 97 | +### 第三步:查关联 Issue 和 PR |
| 98 | + |
| 99 | +```bash |
| 100 | +export GH_TOKEN='<token>' |
| 101 | + |
| 102 | +# 搜索相关 issue(open + closed) |
| 103 | +gh search issues '<关键词>' -R F-Stack/f-stack --limit 20 |
| 104 | + |
| 105 | +# 搜索相关 PR(尤其是已合并的) |
| 106 | +gh search prs '<关键词>' -R F-Stack/f-stack --limit 20 |
| 107 | + |
| 108 | +# 查看特定 PR 详情 |
| 109 | +gh pr view <NUMBER> -R F-Stack/f-stack |
| 110 | + |
| 111 | +# 查看 PR 的 diff |
| 112 | +gh pr diff <NUMBER> -R F-Stack/f-stack |
| 113 | +``` |
| 114 | + |
| 115 | +**DPDK 上游 Patchwork(如需追踪上游 patch):** |
| 116 | +- API: `https://patches.dpdk.org/api/patches/?q=<关键词>` |
| 117 | +- 使用 `WebFetch` 工具获取 |
| 118 | + |
| 119 | +### 第四步:查公开资料 |
| 120 | + |
| 121 | +**按优先级搜索以下来源:** |
| 122 | + |
| 123 | +1. **DPDK Bugzilla**: `https://bugs.dpdk.org` |
| 124 | +2. **DPDK Patchwork**: `https://patches.dpdk.org` |
| 125 | +3. **DPDK 邮件列表归档**: `https://inbox.dpdk.org`(优先用 API,避免 Anubis bot 拦截) |
| 126 | +4. **外网搜索**: Stack Overflow、CSDN、GitHub 全局搜索 |
| 127 | + |
| 128 | +```bash |
| 129 | +# 使用 WebSearch 搜索 |
| 130 | +# 示例:搜索 F-Stack + 具体错误信息 |
| 131 | +``` |
| 132 | + |
| 133 | +**注意:** `lore.kernel.org` 等站点可能被 Anubis bot 拦截,优先使用 API 接口或 `inbox.dpdk.org`。 |
| 134 | + |
| 135 | +### 第五步:综合判断 |
| 136 | + |
| 137 | +**使用中文给出明确结论,格式如下:** |
| 138 | + |
| 139 | +#### 结论模板 |
| 140 | + |
| 141 | +``` |
| 142 | +## Issue #<NUMBER> 分析结论 |
| 143 | +
|
| 144 | +**标题:** <issue 标题> |
| 145 | +**状态判断:** <以下之一> |
| 146 | +
|
| 147 | +### 情况一:已修复 |
| 148 | +- 结论: 已修复 |
| 149 | +- 修复 commit: <hash> (<commit message>) |
| 150 | +- 修复版本: F-Stack v<x.y> / DPDK <版本> |
| 151 | +- 是否已 backport: 是/否 |
| 152 | +- 建议操作: 可关闭,回复告知用户升级到 v<x.y> 即可 |
| 153 | +
|
| 154 | +### 情况二:有上游 patch 未合入 |
| 155 | +- 结论: 有上游 patch 未合入 |
| 156 | +- Patch 链接: <URL> |
| 157 | +- Patch 状态: Accepted / Under Review / Superseded |
| 158 | +- 影响版本: DPDK 22.11 / 23.11 / 24.11 各 LTS 修复状态 |
| 159 | +- 建议操作: 等待合入 / 手动 cherry-pick |
| 160 | +
|
| 161 | +### 情况三:未修复 |
| 162 | +- 结论: 未修复 |
| 163 | +- 根因分析: <详细描述> |
| 164 | +- 影响范围: <哪些版本/场景受影响> |
| 165 | +- 修复方案: <建议的修复思路> |
| 166 | +- 建议操作: 需要开发修复 |
| 167 | +
|
| 168 | +### 情况四:有 Workaround |
| 169 | +- 结论: 有 workaround |
| 170 | +- Workaround 步骤: <具体操作> |
| 171 | +- 是否需要根本修复: 是/否 |
| 172 | +- 建议操作: 回复告知 workaround,保持 issue open 等待根本修复 |
| 173 | +
|
| 174 | +### 情况五:非 Bug(使用咨询/已过时/无法复现) |
| 175 | +- 结论: 非 Bug / 已过时 / 无法复现 |
| 176 | +- 理由: <详细说明> |
| 177 | +- 建议操作: 可关闭,回复说明原因 |
| 178 | +``` |
| 179 | + |
| 180 | +### 关键注意事项 |
| 181 | + |
| 182 | +1. **不可自动操作 Issue** |
| 183 | + - 分析完成后,**必须人工确认无误后才可以评论或关闭 issue** |
| 184 | + - 给出建议操作,但不直接执行 |
| 185 | + - 等待用户明确指令后再操作(评论、关闭、打标签等) |
| 186 | + - 回复issue的评论都使用英文 |
| 187 | + |
| 188 | +2. **区分问题归属** |
| 189 | + - **F-Stack 自身问题**: lib/ 目录下的代码、FreeBSD 移植层、ff_* API |
| 190 | + - **DPDK 上游问题**: dpdk/ 目录下的代码、驱动、EAL 层 |
| 191 | + - **用户配置问题**: config.ini、hugepage、NIC offload、ASLR 等 |
| 192 | + - **应用集成问题**: Nginx/Redis 集成、多进程架构 |
| 193 | + |
| 194 | +3. **DPDK 版本追踪** |
| 195 | + - F-Stack v1.25 → DPDK 23.11.5 |
| 196 | + - F-Stack v1.24 → DPDK 22.11.6 |
| 197 | + - F-Stack v1.22.1 → DPDK 20.11.9 |
| 198 | + - F-Stack v1.21.x → DPDK 19.11.14 |
| 199 | + - 涉及 DPDK 版本时,**明确 22.11 / 23.11 / 24.11 各 LTS 的修复状态** |
| 200 | + |
| 201 | +4. **编译修复规则** |
| 202 | + - 修复文件后,**必须确保所有依赖该文件的其他文件也能正常编译** |
| 203 | + - 修改公共头文件后,需逐一验证所有 include 它的文件 |
| 204 | + - PR 前必须执行完整 `make` 确认无 error |
| 205 | + - 编译验证命令: |
| 206 | + ```bash |
| 207 | + # F-Stack lib 编译验证 |
| 208 | + cd /data/workspace/f-stack/lib && make clean && make |
| 209 | + |
| 210 | + # ftdns-dev src 编译验证 |
| 211 | + cd /data/workspace/ftdns-dev/src && make clean && make |
| 212 | + ``` |
| 213 | + |
| 214 | +### 批量分析流程 |
| 215 | + |
| 216 | +当需要批量分析多个 issue 时: |
| 217 | + |
| 218 | +```bash |
| 219 | +# 1. 获取指定范围内所有 open issue |
| 220 | +gh issue list -R F-Stack/f-stack --state open --limit 500 \ |
| 221 | + --json number,title,labels,createdAt,author \ |
| 222 | + --jq '[.[] | select(.number >= <START> and .number <= <END>)] | sort_by(.number)' |
| 223 | +
|
| 224 | +# 2. 逐个执行上述五步分析流程 |
| 225 | +
|
| 226 | +# 3. 汇总分类报告,包含: |
| 227 | +# - 总数统计 |
| 228 | +# - 按类型分类(Bug / 功能请求 / 使用咨询 / 编译问题) |
| 229 | +# - 按状态分类(已修复 / 未修复 / 有 workaround / 过时) |
| 230 | +# - 建议操作清单(哪些可关闭、哪些需修复、哪些需回复) |
| 231 | +``` |
0 commit comments