Skip to content

Commit 86fe212

Browse files
committed
Add gitneexus KNOWLEDGE_GRAPH_WIKI.md.
1 parent a695757 commit 86fe212

2 files changed

Lines changed: 324 additions & 0 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,5 @@ dpdk/.travis.yml
3232
.code.yml
3333
.orange-ci.yml
3434
SMEDockerfile
35+
.gitnexus
36+
.gitnexusignore

docs/KNOWLEDGE_GRAPH_WIKI.md

Lines changed: 322 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,322 @@
1+
# F-Stack 知识图谱 Wiki
2+
3+
> 本文档由 GitNexus 知识图谱自动提取 + AI 生成。索引时间:2026-04-09,commit: a695757。
4+
5+
---
6+
7+
## 1. 项目概览
8+
9+
| 指标 | 数据 |
10+
|------|------|
11+
| 索引文件数 | 25,723 |
12+
| 符号节点 | 710,596 |
13+
| 关系边 | 1,270,994 |
14+
| 功能聚类 | 11,375 (communities) |
15+
| 执行流 | 300 (processes) |
16+
| 排除目录 | `freebsd/`, `dpdk/`(仅排除索引,引用关系保留) |
17+
18+
### 节点类型分布
19+
20+
| 类型 | 数量 | 说明 |
21+
|------|------|------|
22+
| Macro | 311,802 | C 预处理宏定义 |
23+
| Function | 159,305 | 函数定义 |
24+
| Property | 103,447 | 结构体字段/属性 |
25+
| Struct | 74,359 | 结构体定义 |
26+
| File | 25,723 | 源文件 |
27+
| Community | 11,375 | 功能聚类 |
28+
| Typedef | 10,634 | 类型别名 |
29+
| Enum | 5,759 | 枚举类型 |
30+
| Union | 3,458 | 联合体 |
31+
| Folder | 1,880 | 目录 |
32+
| Method | 1,268 | 方法(C++ / ObjC) |
33+
| Section | 1,010 | 文档分节 |
34+
| Process | 300 | 执行流 |
35+
| Class | 255 | 类(C++ 部分) |
36+
| Namespace | 19 | 命名空间 |
37+
38+
---
39+
40+
## 2. 核心功能聚类(Top Communities)
41+
42+
聚类由 GitNexus 社区检测算法自动识别,`cohesion` 越高表示聚类内部关联越紧密。
43+
44+
### 2.1 网络协议栈核心
45+
46+
| 聚类 | 符号数 | 内聚度 | 说明 |
47+
|------|--------|--------|------|
48+
| **Net** | 823 | 0.921 | 网络子系统核心(TCP/IP 协议栈) |
49+
| **Netinet** | 245 | 0.900 | Internet 协议族(IPv4/IPv6/TCP/UDP) |
50+
| **Tcp_stacks** | 91 | 0.771 | TCP 协议栈实现 |
51+
| **Netstat** | 158 | 0.947 | 网络状态统计工具 |
52+
53+
### 2.2 内核基础设施
54+
55+
| 聚类 | 符号数 | 内聚度 | 说明 |
56+
|------|--------|--------|------|
57+
| **Sys** | 932 | 0.903 | 系统调用和内核基础接口 |
58+
| **Kern** (comm_307) | 212 | 0.926 | 内核核心功能 |
59+
| **Kern** (comm_89) | 213 | 0.256 | 内核扩展(低内聚,跨模块依赖多) |
60+
| **Kern** (comm_294) | 137 | 0.692 | 内核辅助模块 |
61+
| **Vm** | 101 | 0.679 | 虚拟内存管理 |
62+
| **Amd64** | 188 | 0.490 | x86-64 架构相关代码 |
63+
| **Arm** | 149 | 0.973 | ARM 架构支持 |
64+
65+
### 2.3 DPDK 相关
66+
67+
| 聚类 | 符号数 | 内聚度 | 说明 |
68+
|------|--------|--------|------|
69+
| **Ethdev** | 148 | 0.759 | DPDK 以太网设备抽象层 |
70+
| **Kvargs** | 115 | 0.813 | DPDK Key-Value 参数解析 |
71+
| **Cnxk** | 686 | 0.721 | Marvell CNXK 网卡驱动 |
72+
| **Mlx5** (comm_5663) | 146 | 0.689 | Mellanox ConnectX-5 驱动 |
73+
| **Mlx5** (comm_6413) | 110 | 0.443 | Mlx5 扩展功能 |
74+
| **Sfc** | 224 | 0.836 | Solarflare 网卡驱动 |
75+
| **I40e** | 108 | 0.556 | Intel XL710 网卡驱动 |
76+
| **Bnx2x** | 148 | 0.947 | Broadcom NetXtreme II 驱动 |
77+
| **Qede** | 86 | 0.889 | QLogic 网卡驱动 |
78+
| **Nvidia** | 128 | 0.613 | NVIDIA 网卡支持 |
79+
80+
### 2.4 文件系统
81+
82+
| 聚类 | 符号数 | 内聚度 | 说明 |
83+
|------|--------|--------|------|
84+
| **Zfs** (comm_9633) | 1,015 | 0.812 | ZFS 文件系统核心 |
85+
| **Zfs** (comm_9624) | 819 | 0.762 | ZFS 数据管理层 |
86+
| **Libzfs** | 256 | 0.728 | ZFS 用户态库 |
87+
| **Libzfs_input_check** | 142 | 0.673 | ZFS 输入校验 |
88+
89+
### 2.5 应用与工具
90+
91+
| 聚类 | 符号数 | 内聚度 | 说明 |
92+
|------|--------|--------|------|
93+
| **Test** (多个) | 282–84 | 0.38–0.90 | 各模块的测试代码 |
94+
| **Vhost** | 275 | 0.805 | Virtio/Vhost 用户态网络设备 |
95+
| **Hiredis** | 85 | 0.726 | Redis C 客户端库 |
96+
| **Lua** | 125 | 0.787 | Lua 脚本引擎集成 |
97+
| **Debugger** | 194 | 0.686 | 内核调试器 (DDB) |
98+
| **Modules** | 131 | 0.926 | 内核可加载模块框架 |
99+
100+
---
101+
102+
## 3. 高频函数(调用热点)
103+
104+
以下是被调用次数最多的 Top 50 函数,反映了代码库中的核心依赖关系:
105+
106+
### 3.1 内存管理(最高频)
107+
108+
| 函数 | 入度 | 来源 |
109+
|------|------|------|
110+
| `rte_free()` | 1,166 | DPDK 内存释放 |
111+
| `rte_zmalloc()` | 477 | DPDK 零初始化内存分配 |
112+
| `rte_zmalloc_socket()` | 286 | DPDK NUMA-aware 内存分配 |
113+
| `rte_malloc()` | 180 | DPDK 通用内存分配 |
114+
| `mlx5_free()` | 171 | Mlx5 驱动内存释放 |
115+
| `rte_pktmbuf_free()` | 459 | DPDK 数据包 mbuf 释放 |
116+
| `rte_pktmbuf_alloc()` | 152 | DPDK mbuf 分配 |
117+
| `rte_pktmbuf_free_seg()` | 149 | DPDK mbuf 段释放 |
118+
| `rte_mempool_put()` | 152 | DPDK 内存池归还 |
119+
| `m_freem()` | 517 | FreeBSD mbuf 链释放 |
120+
| `m_pullup()` | 157 | FreeBSD mbuf 数据对齐 |
121+
| `m_adj()` | 142 | FreeBSD mbuf 长度调整 |
122+
123+
### 3.2 设备与驱动
124+
125+
| 函数 | 入度 | 来源 |
126+
|------|------|------|
127+
| `device_get_softc()` | 1,809 | FreeBSD 驱动获取私有数据(**全局第一**|
128+
| `device_printf()` | 1,122 | 设备日志打印 |
129+
| `device_set_desc()` | 412 | 设备描述设置 |
130+
| `device_get_nameunit()` | 153 | 获取设备名 |
131+
| `device_get_parent()` | 148 | 获取父设备 |
132+
| `bus_alloc_resource_any()` | 181 | 总线资源分配 |
133+
| `bus_release_resource()` | 179 | 总线资源释放 |
134+
| `bus_setup_intr()` | 145 | 中断注册 |
135+
136+
### 3.3 同步原语
137+
138+
| 函数 | 入度 | 来源 |
139+
|------|------|------|
140+
| `mutex_enter()` / `mutex_exit()` | 585 / 589 | ZFS 互斥锁 |
141+
| `pthread_mutex_lock()` / `unlock()` | 257 / 256 | POSIX 互斥锁 |
142+
| `rte_spinlock_lock()` / `unlock()` | 190 / 198 | DPDK 自旋锁 |
143+
144+
### 3.4 错误处理与日志
145+
146+
| 函数 | 入度 | 来源 |
147+
|------|------|------|
148+
| `panic()` | 1,071 | 内核 panic |
149+
| `rte_exit()` | 236 | DPDK 致命退出 |
150+
| `AcpiOsPrintf()` | 312 | ACPI 日志 |
151+
| `db_printf()` | 271 | 内核调试器输出 |
152+
| `rte_flow_error_set()` | 345 | DPDK 流规则错误设置 |
153+
| `ngx_conf_log_error()` | 201 | Nginx 配置错误日志 |
154+
155+
### 3.5 网络数据操作
156+
157+
| 函数 | 入度 | 来源 |
158+
|------|------|------|
159+
| `rte_ether_addr_copy()` | 167 | MAC 地址复制 |
160+
| `mc_send_command()` | 213 | FSLMC 总线命令发送 |
161+
| `mc_encode_cmd_header()` | 213 | FSLMC 命令头编码 |
162+
| `mbox_get()` / `mbox_put()` | 210 / 210 | CNXK 邮箱通信 |
163+
| `roc_nix_to_nix_priv()` | 228 | CNXK NIX 私有数据转换 |
164+
| `cnxk_eth_pmd_priv()` | 187 | CNXK 以太网 PMD 私有数据 |
165+
166+
---
167+
168+
## 4. 关键执行流(Processes)
169+
170+
执行流由 GitNexus 自动检测的跨函数调用链。`cross_community` 表示跨聚类调用,`intra_community` 表示聚类内部调用。
171+
172+
### 4.1 数据面关键路径
173+
174+
| 执行流 | 步数 | 类型 | 说明 |
175+
|--------|------|------|------|
176+
| Main → Rte_vlog | 5-6 | cross | 应用主循环 → DPDK 日志输出 |
177+
| Cmd_send_parsed → Rte_mempool_get_ops | 9 | cross | **最长执行流**:命令解析 → 内存池操作获取 |
178+
| Cmd_send_parsed → Rte_mempool_default_cache | 6 | cross | 命令解析 → 内存池缓存 |
179+
| T4_eth_xmit → RTE_MBUF_DIRECT | 5 | cross | Chelsio T4 网卡发送 → mbuf 检查 |
180+
| T4_sge_alloc_rxq → RTE_MEMPOOL_HEADER_SIZE | 5 | cross | T4 接收队列分配 → 内存池头大小计算 |
181+
| Run_regex → RTE_MBUF_* | 5-6 | cross | 正则匹配引擎 → mbuf 操作族 |
182+
| Ice_init_hw → Ice_msec_delay | 5 | cross | Intel ICE 网卡初始化 → 延时等待 |
183+
184+
### 4.2 存储路径
185+
186+
| 执行流 | 步数 | 类型 | 说明 |
187+
|--------|------|------|------|
188+
| Dsl_dataset_promote_sync → 多个目标 | 5-6 | mixed | ZFS 数据集提升(快照→克隆) |
189+
| Dsl_scan_sync → Kmem_free | 5 | cross | ZFS 扫描同步 → 内存释放 |
190+
| Zfs_create → KUID_TO_SUID | 5 | cross | ZFS 创建 → UID 转换 |
191+
| Zfs_acl_ids_create → Zfs_acl_valid_ace_type | 5 | cross | ZFS ACL 创建 → ACE 类型验证 |
192+
193+
### 4.3 架构特殊路径
194+
195+
| 执行流 | 步数 | 类型 | 说明 |
196+
|--------|------|------|------|
197+
| Pmap_enter → Pt2tab_index | 7 | cross | ARM 页表映射(第二长执行流) |
198+
| X86emu_exec_one_byte → Longjmp | 6 | cross | x86 模拟器 → 长跳转 |
199+
| Cvmx_helper_shutdown → CVMX_ADD_IO_SEG | 6 | cross | MIPS Cavium 网络关闭 → IO 段操作 |
200+
201+
### 4.4 应用层路径
202+
203+
| 执行流 | 步数 | 类型 | 说明 |
204+
|--------|------|------|------|
205+
| ClientCommand → ClientInstallWriteHandler | 5 | cross | Redis 客户端命令 → 写处理器 |
206+
| ClientCommand → ServerAssert | 5 | cross | Redis 命令 → 服务端断言 |
207+
| ZiplistTest → ZIPLIST_BYTES | 5 | intra | Redis ziplist 测试 → 字节操作 |
208+
209+
---
210+
211+
## 5. 目录结构
212+
213+
```
214+
f-stack/
215+
├── lib/ # F-Stack 核心库(ff_api, ff_dpdk_if, ff_config 等)
216+
├── adapter/ # LD_PRELOAD 适配层(syscall hook, socket ops)
217+
├── app/ # 应用程序(Nginx, Redis 等 F-Stack 改造版)
218+
├── example/ # 示例程序(helloworld, kqueue 用法等)
219+
├── tools/ # 工具(ifconfig, netstat, arp, route 等用户态移植)
220+
├── mk/ # 构建系统(Makefile include 文件)
221+
├── doc/ # 原始文档
222+
├── docs/ # 架构文档和 Specs 文档
223+
├── dpdk/ # DPDK 23.11.5 子模块(已从索引排除)
224+
└── freebsd/ # FreeBSD 13.1 内核源码(已从索引排除)
225+
```
226+
227+
### 5.1 核心库文件 (`lib/`)
228+
229+
| 文件 | 职责 |
230+
|------|------|
231+
| `ff_api.h` / `ff_api.c` | F-Stack 公开 API(Socket, KQueue, 路由, 日志等) |
232+
| `ff_dpdk_if.h` / `ff_dpdk_if.c` | DPDK 接口层(收发包、main_loop、设备初始化) |
233+
| `ff_config.h` / `ff_config.c` | 配置解析(ini 格式) |
234+
| `ff_host_interface.h` / `ff_host_interface.c` | 主机接口抽象 |
235+
| `ff_veth.h` / `ff_veth.c` | 虚拟以太网设备 |
236+
| `ff_msg.h` / `ff_msg.c` | F-Stack 进程间消息 |
237+
| `ff_log.h` | 日志 API(ff_log, ff_vlog, ff_log_reset_stream) |
238+
| `ff_epoll.h` / `ff_epoll.c` | Epoll 兼容层 |
239+
| `ff_errno.h` | 错误码映射 |
240+
241+
### 5.2 适配器层 (`adapter/`)
242+
243+
| 文件 | 职责 |
244+
|------|------|
245+
| `syscall/ff_hook_syscall.c` | LD_PRELOAD 系统调用劫持(3254 行) |
246+
| `syscall/ff_socket_ops.h` / `.c` | Socket 操作上下文和处理 |
247+
| `syscall/ff_so_zone.c` | 共享内存区域管理 |
248+
| `syscall/ff_epoll.c` | Epoll 适配 |
249+
250+
---
251+
252+
## 6. 依赖关系概览
253+
254+
```
255+
┌──────────────┐
256+
│ Applications │
257+
│ (Nginx/Redis) │
258+
└──────┬───────┘
259+
│ ff_* API
260+
┌──────▼───────┐
261+
│ lib/ │
262+
│ F-Stack Core │
263+
└──┬───────┬───┘
264+
│ │
265+
┌────────▼──┐ ┌──▼────────┐
266+
│ FreeBSD │ │ DPDK │
267+
│ TCP/IP │ │ 23.11.5 │
268+
│ Stack │ │ (PMD/EAL) │
269+
└────────────┘ └────────────┘
270+
271+
adapter/ tools/
272+
LD_PRELOAD Hook ──────► ifconfig/netstat
273+
(syscall redirect) (用户态网络工具)
274+
```
275+
276+
### 关系类型
277+
278+
知识图谱中所有关系均为 `CodeRelation` 类型(1,270,994 条),涵盖:
279+
- 函数调用(CALL)
280+
- 类型引用(USES_TYPE)
281+
- 宏展开(EXPANDS)
282+
- 文件包含(INCLUDES)
283+
- 结构体成员访问(HAS_MEMBER)
284+
- 社区归属(BELONGS_TO)
285+
286+
---
287+
288+
## 7. 知识图谱使用指南
289+
290+
### 查询工具
291+
292+
| 工具 | 用途 | 示例 |
293+
|------|------|------|
294+
| `gitnexus_query` | 按概念搜索执行流 | "packet receive" |
295+
| `gitnexus_context` | 查看符号的 360° 关系 | "ff_init" 的所有调用者/被调用者 |
296+
| `gitnexus_impact` | 修改前影响分析 | 改 ff_dpdk_if.c 的影响半径 |
297+
| `gitnexus_detect_changes` | 提交前变更范围检查 | 确认 staged 文件的影响 |
298+
| `gitnexus_rename` | 安全重命名 | 多文件批量重命名 |
299+
| `gitnexus_cypher` | 自定义图查询 | 高级分析 |
300+
301+
### 更新索引
302+
303+
```bash
304+
# 环境变量(TencentOS 4.4 需要)
305+
export LD_LIBRARY_PATH="/opt/OpenCloudOS/gcc-toolset-14/root/usr/lib64:$LD_LIBRARY_PATH"
306+
export PATH="/root/.workbuddy/binaries/node/versions/20.18.0/bin:$PATH"
307+
308+
# 检查状态
309+
cd /data/workspace/f-stack && npx gitnexus@1.5.3 status
310+
311+
# 重新索引
312+
npx gitnexus@1.5.3 analyze
313+
314+
# 强制完全重建
315+
npx gitnexus@1.5.3 analyze --force
316+
```
317+
318+
> **自动更新**:已配置 Git `post-commit` hook,每次 commit 后自动在后台重新索引。
319+
320+
---
321+
322+
*Generated from GitNexus knowledge graph (710,596 nodes, 1,270,994 edges) — 2026-04-09*

0 commit comments

Comments
 (0)