Skip to content

Commit 9a3f0e5

Browse files
committed
Add CODEBUDDY.md with project guidance, build commands, and SOPs
Include F-Stack project overview, build instructions for DPDK and F-Stack lib, Issue Analysis SOP (5-step process), batch analysis flow, and personal writing style template for documentation.
1 parent 22608e4 commit 9a3f0e5

1 file changed

Lines changed: 231 additions & 0 deletions

File tree

CODEBUDDY.md

Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
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

Comments
 (0)