- VitePress static site for rendering all markdown documents - Auto-discovers .md files from dpdk-roadmap-v3 and dpdk-study-kb - Features: full-text search, dark mode, responsive design - Pages: roadmap, notes (Phase 0-3), product docs, knowledge base Co-Authored-By: Claude <noreply@anthropic.com>
3164 lines
121 KiB
Markdown
Executable File
3164 lines
121 KiB
Markdown
Executable File
# DPDK 全景路线 v3 — 18 个月日级学习与发展规划
|
||
|
||
> **版本**: v3 (升级自 `~/myshare/DPDK_DPU_GROWTH_PLAN.md` v2)
|
||
> **起算日**: 2026-06-29 (周一) = Day 1
|
||
> **截止日**: 2027-12-27 (周一) = Day 546
|
||
> **目标定位**: 18 个月内同时具备「大厂网络/DPU 厂商/晋升专家/开源品牌」四个出口能力
|
||
> **投入强度**: 工作日 2-3h + 周末 6-8h,约 25-30h/周,总投入 ~2000h
|
||
> **作者**: SONiC / SAI / DPDK 开发者
|
||
> **最后更新**: 2026-06-29
|
||
|
||
---
|
||
|
||
## 📜 目录
|
||
|
||
- [一、规划总览](#一规划总览)
|
||
- [二、当前能力盘点](#二当前能力盘点)
|
||
- [三、六阶段主线](#三六阶段主线)
|
||
- [四、日任务格式约定](#四日任务格式约定)
|
||
- [四点五、Linux 内核对照学习策略(横切式)](#四点五linux-内核对照学习策略横切式)
|
||
- [五、留白与节假日策略](#五留白与节假日策略)
|
||
- [六、出口与简历卖点映射](#六出口与简历卖点映射)
|
||
- [七、推荐资料总表](#七推荐资料总表)
|
||
- [P1 · M1-M3 · DPDK 内功 + 用户态协议栈](#p1--dpdk-内功--用户态协议栈-m1-m3)
|
||
- [P2 · M4-M6 · SONiC×DPDK 融合](#p2--sonicdpdk-融合-m4-m6)
|
||
- [P3 · M7-M9 · vSwitch / 云网关数据面](#p3--vswitch--云网关数据面-m7-m9)
|
||
- [P4 · M10-M12 · 网络安全数据面](#p4--网络安全数据面-m10-m12)
|
||
- [P5 · M13-M15 · DPU 数据面架构](#p5--dpu-数据面架构-m13-m15)
|
||
- [P6 · M16-M18 · 作品收口 + 出口](#p6--作品收口--出口-m16-m18)
|
||
- [附录 A · 项目仓库结构建议](#附录-a--项目仓库结构建议)
|
||
- [附录 B · 性能基线参考](#附录-b--性能基线参考)
|
||
- [附录 C · 周/月复盘模板](#附录-c--周月复盘模板)
|
||
|
||
---
|
||
|
||
## 一、规划总览
|
||
|
||
### 1.1 一句话目标
|
||
|
||
> **18 个月后**,我能够同时回答这三个问题:
|
||
> 1. 给我一张 100Gbps 网卡,我能写出**单核线速**的用户态数据面
|
||
> 2. 给我一颗 DPU/SmartNIC,我能设计它的**数据面架构**
|
||
> 3. 给我一套 SONiC,我能让它跑在**纯 DPDK 软件转发**上
|
||
|
||
### 1.2 路径设计逻辑
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ P1 内功 (M1-3) │
|
||
│ └─ mempool/ring/PMD/NUMA + 用户态协议栈 │
|
||
│ ↓ │
|
||
│ P2 SONiC×DPDK (M4-6) │
|
||
│ └─ sonic-vs → SAI-DPDK 最小适配器 │
|
||
│ ↓ │
|
||
│ P3 vSwitch (M7-9) │
|
||
│ └─ OVS-DPDK + VPP + 自研 LB │
|
||
│ ↓ │
|
||
│ P4 安全数据面 (M10-12) │
|
||
│ └─ Suricata-DPDK + DDoS 清洗 │
|
||
│ ↓ │
|
||
│ P5 DPU 架构 (M13-15) │
|
||
│ └─ PCIe + vDPA + rte_flow offload │
|
||
│ ↓ │
|
||
│ P6 收口 (M16-18) │
|
||
│ └─ 开源 + 简历 + 答辩 + 面试 │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
### 1.3 核心约束
|
||
|
||
- **不超纲**:每天任务不超过 3.5h(工作日)/ 8h(周末),超出即拆分到次日
|
||
- **可观测**:每天必须有一个产出物(代码 / 笔记 / 数据 / 图)
|
||
- **可中断**:每周第 7 天为复盘缓冲日,允许欠债结清
|
||
- **可演进**:每月最后一天为月度复盘日,可调整下月节奏
|
||
|
||
---
|
||
|
||
## 二、当前能力盘点
|
||
|
||
| 维度 | 现状 | 备注 |
|
||
|---|---|---|
|
||
| DPDK API | 中级,能写应用 | `dpdk-ws-client`、`dperf` 改造 |
|
||
| 用户态协议栈 | 中级 | `libmtcp` 多版本迭代中 |
|
||
| SONiC 架构 | 入门-中级 | 看过 OrchAgent / syncd / APPL_DB |
|
||
| SAI | 入门-中级 | 读过头文件,未写过适配器 |
|
||
| Linux 内核网络 | 入门 | 有书在读 |
|
||
| PCIe | 入门 | 概念知道,未亲手解码 BAR |
|
||
| ASIC / SDK | 入门 | T140 / X540 用过 |
|
||
| Go / 工程化 | 中级 | go1.21 + 服务端经验 |
|
||
| 学历 | 专升本在读 | 不构成阻塞 |
|
||
|
||
**核心资产(已有项目)**:
|
||
- `~/projects/dpdk-ws-client` — WebSocket over DPDK 客户端
|
||
- `~/myshare/libmtcp-*` — mTCP 改造分支
|
||
- `~/myshare/dperf-main` — 性能压测工具
|
||
- `~/myshare/dpu_dev` — PCIe / DPU 学习目录
|
||
- `~/myshare/dpdk-stable-24.11.6` — 主 DPDK 源码树
|
||
|
||
---
|
||
|
||
## 三、六阶段主线
|
||
|
||
| # | 阶段 | 月份 | Day 区间 | 主题 | 核心交付 |
|
||
|---|---|---|---|---|---|
|
||
| P1 | DPDK 内功 + 协议栈 | M1-M3 | Day 1-91 | mempool/ring/PMD 源码 + libmtcp 升级 | 单核 100Gbps echo + 性能报告 |
|
||
| P2 | SONiC×DPDK | M4-M6 | Day 92-182 | sonic-vs + SAI-DPDK 适配器 | 15 个 SAI API 跑通 L2/L3/ACL |
|
||
| P3 | vSwitch / 云网关 | M7-M9 | Day 183-273 | OVS-DPDK + VPP + 自研 LB | VPP plugin + LB 4-tuple hash |
|
||
| P4 | 安全数据面 | M10-M12 | Day 274-364 | Suricata-DPDK + DDoS 清洗 | 抗 5Mpps SYN flood |
|
||
| P5 | DPU 数据面 | M13-M15 | Day 365-455 | PCIe + vDPA + rte_flow offload | DPU 架构设计文档 |
|
||
| P6 | 收口 + 出口 | M16-M18 | Day 456-546 | 开源 + 简历 + 面试 | 简历 + 1 个高质量开源项目 |
|
||
|
||
---
|
||
|
||
## 四、日任务格式约定
|
||
|
||
每天的任务条目格式**严格统一**,方便 grep / 勾选 / 复盘:
|
||
|
||
```markdown
|
||
- [ ] **Day NNN (YYYY-MM-DD, 周X)** · 主题: <主题短句>
|
||
- 📖 学习: <读什么> (Xmin)
|
||
- 🔧 动手: <做什么> (Xmin)
|
||
- 📤 产出: <文件路径或结论>
|
||
```
|
||
|
||
**符号约定**:
|
||
- 📖 = 读源码 / 读书 / 看视频
|
||
- 🔧 = 写代码 / 跑实验 / 抓数据
|
||
- 📤 = 产出物(代码 commit / 笔记 / 图表 / 数据)
|
||
- 🎯 = 周/月里程碑
|
||
- ☕ = 复盘 / 缓冲 / 休息
|
||
- 🐧 = Linux 内核对照学习(与当周 DPDK 主题相互印证)
|
||
|
||
---
|
||
|
||
## 四点五、Linux 内核对照学习策略(横切式)
|
||
|
||
> **原则**: DPDK 工程师不懂 Linux 内核网络栈 = 只会调 API 的人。
|
||
> v3 把内核学习**横切**进每个阶段,与 DPDK 主题成对照关系——学 DPDK PMD 时对照内核 ixgbe 驱动,学 SAI host_if 时对照内核 netlink,学 PCIe 时对照内核 `drivers/pci/`。
|
||
|
||
### 4.5.1 时间分配
|
||
|
||
| 时段 | 内核学习方式 | 时长/周 |
|
||
|---|---|---|
|
||
| 工作日(周二/周三 注入子任务)| 🐧 子任务,30min × ~2 天 | ~1h |
|
||
| 周日复盘日下半场 | 集中读源码 + 写对照笔记 | 1-2h |
|
||
| **合计** | | **~2-3h / 周** |
|
||
| 18 个月总投入 | 78 周 × 2.5h | **~195h** |
|
||
|
||
### 4.5.2 学习地图(7 大模块,覆盖 P1-P5)
|
||
|
||
| 模块 | 子主题 | 主要文件 | 对应阶段 |
|
||
|---|---|---|---|
|
||
| K1. packet path | skb / 软中断 / napi / rcu | `net/core/dev.c`, `net/ipv4/` | P1 |
|
||
| K2. NIC 驱动 | net_device, ndo_*, XDP, AF_XDP | `drivers/net/ethernet/intel/ixgbe/` | P1 |
|
||
| K3. TCP/IP 栈 | tcp_v4_rcv, 状态机, cubic/bbr | `net/ipv4/tcp_*.c` | P1 |
|
||
| K4. netlink | rtnetlink, genetlink | `net/netlink/`, `net/core/rtnetlink.c` | P2 |
|
||
| K5. tc / nftables / flow_offload | qdisc, flower, hw offload | `net/sched/`, `net/netfilter/` | P3-P4 |
|
||
| K6. 虚拟网络设备 | tun/tap, veth, bridge, macvlan | `drivers/net/{tun,veth}.c`, `net/bridge/` | P3 |
|
||
| K7. PCI / IOMMU / VFIO | pci_driver, msi, vfio | `drivers/pci/`, `drivers/vfio/` | P5 |
|
||
|
||
### 4.5.3 推荐资料
|
||
|
||
- 📚 《Linux 内核网络协议栈从入门到精通》(你已有)
|
||
- 📚 《深入理解 Linux 网络》—— 张彦飞
|
||
- 📚 《Understanding Linux Network Internals》(O'Reilly)
|
||
- 📂 内核源码:`linux-stable` (建议 v6.6 LTS)
|
||
- 🎥 LWN.net 网络栈专栏
|
||
- 📝 论文:The Design and Implementation of Open vSwitch (NSDI'15) 对照内核 datapath
|
||
|
||
### 4.5.4 阶段对应表
|
||
|
||
| 阶段 | 内核重点 |
|
||
|---|---|
|
||
| P1 (M1-3) | K1 packet path + K2 NIC 驱动 + K3 TCP/IP 栈(核心,对照 DPDK PMD/libmtcp) |
|
||
| P2 (M4-6) | K4 netlink(对照 SONiC host_if / sairedis 通知)|
|
||
| P3 (M7-9) | K5 tc/flow_offload + K6 虚拟设备(对照 OVS-DPDK / VPP)|
|
||
| P4 (M10-12) | K5 nftables + conntrack(对照 DDoS 清洗)|
|
||
| P5 (M13-15) | K7 PCI/VFIO + virtio-net 驱动(对照 vDPA / DPU 数据面)|
|
||
| P6 (M16-18) | 综合复盘 + 简历面试中讲对照 |
|
||
|
||
### 4.5.5 注入位置
|
||
|
||
P1-P5 详细日计划中,每周选 1-2 天在原任务下注入一行 🐧 子任务(30min),格式:
|
||
|
||
```markdown
|
||
- 🐧 内核对照: <内核侧主题> 读 `<内核源码路径>` (30min)
|
||
```
|
||
|
||
阶段开头也会列出"本阶段内核对照清单"。
|
||
|
||
---
|
||
|
||
## 五、留白与节假日策略
|
||
|
||
### 5.1 每周节奏(7 天循环)
|
||
|
||
| 周几 | 类型 | 时长 |
|
||
|---|---|---|
|
||
| 周一 | 新主题启动 | 2-3h |
|
||
| 周二 | 主题深入 | 2-3h |
|
||
| 周三 | 主题深入 | 2-3h |
|
||
| 周四 | 整合实验 | 2-3h |
|
||
| 周五 | 整合实验 | 2-3h |
|
||
| 周六 | 大块动手 / 项目推进 | 6-8h |
|
||
| 周日 | ☕ 复盘 + 笔记整理 + 欠债补做 | 2-4h |
|
||
|
||
### 5.2 月度节奏
|
||
|
||
- 每月最后一天 = ☕ 月度复盘日(不安排新内容)
|
||
- 每月第一个周日 = 调整下月节奏
|
||
|
||
### 5.3 法定假期空窗(不安排任务)
|
||
|
||
| 假期 | 日期范围 | Day 区间 |
|
||
|---|---|---|
|
||
| 国庆 2026 | 10.01-10.07 | Day 95-101 |
|
||
| 元旦 2027 | 01.01-01.03 | Day 187-189 |
|
||
| 春节 2027 | 02.06-02.12 | Day 223-229 |
|
||
| 清明 2027 | 04.03-04.05 | Day 279-281 |
|
||
| 五一 2027 | 05.01-05.05 | Day 307-311 |
|
||
| 端午 2027 | 06.09-06.11 | Day 346-348 |
|
||
| 国庆 2027 | 10.01-10.07 | Day 460-466 |
|
||
|
||
假期空窗用途:补做欠债 / 长项目冲刺 / 休息。文档中这些 Day 留空 + 标注 ☕ 。
|
||
|
||
---
|
||
|
||
## 六、出口与简历卖点映射
|
||
|
||
| 出口 | 关键阶段 | 简历卖点 | 推荐时机 |
|
||
|---|---|---|---|
|
||
| 一线大厂网络团队(阿里云/腾讯云/字节/华为 2012) | P1+P3+P5 | "单核 100Gbps 用户态协议栈"、"自研 vSwitch plugin"、"DPU 架构设计" | M15 末投递 |
|
||
| DPU 厂商(云豹/中科驭数/Pensando) | P5 主 + P2 副 | "SAI-DPDK 适配器"、"rte_flow offload 验证"、"BlueField vDPA 调研" | M15 末投递 |
|
||
| 现公司晋升技术专家 | P2+P4 | "SONiC×DPDK 融合落地"、"DDoS 清洗 5Mpps" | M12 末申报 |
|
||
| 开源 / 个人品牌 | 全程 | GitHub libmtcp-v3 + sai-dpdk-mini + 技术博客 | M18 |
|
||
|
||
---
|
||
|
||
## 七、推荐资料总表
|
||
|
||
### 7.1 书籍
|
||
|
||
| 书 | 阶段 | 用途 |
|
||
|---|---|---|
|
||
| 《DPDK 应用开发实战》 | P1 | API 速通 |
|
||
| 《深入浅出 DPDK》 | P1-P3 | 原理理解 |
|
||
| 《Linux 内核网络协议栈从入门到精通》 | P1 | 内核对照 |
|
||
| 《计算机系统结构量化研究方法》 | P5 | DPU 架构 |
|
||
| 《PCI Express 体系结构导读》 | P5 | PCIe 必读 |
|
||
| 《SONiC 架构与实现》 | P2 | SONiC 入门 |
|
||
|
||
### 7.2 源码
|
||
|
||
| 仓库 | 阶段 |
|
||
|---|---|
|
||
| dpdk-stable-24.11.6 | 全程 |
|
||
| sonic-buildimage / sonic-swss / sonic-sairedis | P2 |
|
||
| openvswitch-3.x | P3 |
|
||
| vpp-master | P3 |
|
||
| suricata-master | P4 |
|
||
| f-stack / mtcp | P1 |
|
||
|
||
### 7.3 论文
|
||
|
||
- mTCP (NSDI'14)
|
||
- IX (OSDI'14)
|
||
- Snap (SOSP'19) — Google DPDK-like 框架
|
||
- AccelNet (NSDI'18) — Azure SmartNIC
|
||
- BlueField DPU Architecture Guide (NVIDIA)
|
||
|
||
---
|
||
|
||
# P1 · DPDK 内功 + 用户态协议栈 (M1-M3)
|
||
|
||
> **Day 1-91**, 2026-06-29 ~ 2026-09-27
|
||
> **核心目标**: 把 DPDK 的 mempool / ring / mbuf / PMD / NUMA / lcore 调度吃到骨头里,并把你的 `libmtcp` 升级为 v3(单核 100Gbps echo 线速)
|
||
|
||
## P1.0 阶段目标
|
||
|
||
1. 读完 DPDK 五大子系统源码并产出笔记:mempool / ring / mbuf / ethdev / eal
|
||
2. `libmtcp` 升级到 v3:支持多 RSS 队列 + 零拷贝 + 单核线速 echo
|
||
3. 性能 profile 报告:火焰图 + perf top + IPC 数据
|
||
4. 产出 5 篇深度笔记(每篇 3000 字+)
|
||
|
||
## P1.1 关键交付物
|
||
|
||
- [ ] `notes/P1/` 下 13 周笔记(每周 1 篇 + 总结 1 篇)
|
||
- [ ] `libmtcp-v3` 仓库可运行 + benchmark 数据
|
||
- [ ] `flamegraph/P1-final.svg` 性能火焰图
|
||
- [ ] `perf-data/P1-100G-echo.md` 性能数据表
|
||
|
||
## P1.2 推荐资料
|
||
|
||
- 📚 《深入浅出 DPDK》Ch.3-7
|
||
- 📂 `dpdk-stable-24.11.6/lib/{mempool,ring,mbuf,ethdev,eal}/`
|
||
- 🎥 DPDK Summit 历年 Talk(YouTube)
|
||
- 📝 mTCP NSDI'14 论文
|
||
|
||
## P1.2.5 🐧 本阶段内核对照清单(K1+K2+K3)
|
||
|
||
| 周 | 对照主题 | 内核源码路径 |
|
||
|---|---|---|
|
||
| W1 | 内核启动 + 模块加载 | `init/main.c`, `kernel/module.c` |
|
||
| W2 | slab / kmem_cache (对照 DPDK mempool) | `mm/slab.c`, `mm/slub.c` |
|
||
| W3 | 内核无锁 — RCU + atomic (对照 DPDK ring) | `kernel/rcu/`, `include/linux/rculist.h` |
|
||
| W4 | skb_buff 结构 (对照 DPDK mbuf) | `include/linux/skbuff.h`, `net/core/skbuff.c` |
|
||
| W5 | 内核 ixgbe 驱动 (对照 DPDK ixgbe PMD) | `drivers/net/ethernet/intel/ixgbe/ixgbe_main.c` |
|
||
| W6 | NUMA + 进程调度 | `mm/mempolicy.c`, `kernel/sched/` |
|
||
| W7 | RPS/RFS + napi (对照 DPDK RSS) | `net/core/dev.c::netif_receive_skb` |
|
||
| W8 | 内核 TCP 协议栈总览 (对照 mTCP) | `net/ipv4/tcp.c`, `tcp_input.c` |
|
||
| W9 | 内核 socket 层 | `net/socket.c`, `net/ipv4/af_inet.c` |
|
||
| W10 | 内核 RX 路径全链路 | `napi_poll → netif_receive_skb → tcp_v4_rcv` |
|
||
| W11 | 内核 TX 路径 + qdisc | `__dev_queue_xmit → qdisc → ndo_start_xmit` |
|
||
| W12 | XDP / AF_XDP (DPDK 替代品对照) | `net/core/filter.c`, `net/xdp/` |
|
||
| W13 | 总结:DPDK vs Kernel 全景对照表 | — |
|
||
|
||
## P1.3 周计划总览 (W1-W13)
|
||
|
||
| 周 | Day | 主题 | 里程碑 |
|
||
|---|---|---|---|
|
||
| W1 | 1-7 | DPDK 环境 + EAL 启动流程 | hello_world 改造 |
|
||
| W2 | 8-14 | mempool 源码 + cache 机制 | mempool benchmark |
|
||
| W3 | 15-21 | ring 源码 + 无锁队列 | ring 压测 |
|
||
| W4 | 22-28 | mbuf 源码 + 零拷贝 | mbuf 操作笔记 |
|
||
| W5 | 29-35 | PMD 框架 + ixgbe/i40e | PMD 阅读笔记 |
|
||
| W6 | 36-42 | NUMA + lcore 调度 | NUMA 性能对比 |
|
||
| W7 | 43-49 | RSS + Flow Director | 多队列 echo |
|
||
| W8 | 50-56 | mTCP 源码精读 | mTCP 跑通 |
|
||
| W9 | 57-63 | libmtcp v3 设计 | 设计文档 |
|
||
| W10 | 64-70 | libmtcp v3 实现 (1) | RX/TX 路径 |
|
||
| W11 | 71-77 | libmtcp v3 实现 (2) | 协议栈核心 |
|
||
| W12 | 78-84 | 性能调优 + 火焰图 | 100G 线速 |
|
||
| W13 | 85-91 | P1 总结 + 文档 | 阶段答辩 |
|
||
|
||
## P1.4 详细日计划
|
||
|
||
### Week 1 (Day 1-7) · DPDK 环境 + EAL 启动流程
|
||
|
||
- [ ] **Day 001 (2026-06-29, 周一)** · 主题: 环境校验 + 编译 DPDK 24.11
|
||
- 📖 学习: 通读 `dpdk.org/doc/guides/linux_gsg/` (60min)
|
||
- 🔧 动手: 用 meson 重新编译 `~/myshare/dpdk-stable-24.11.6` 并跑 testpmd (90min)
|
||
- 📤 产出: `notes/P1/W1-D1-env-setup.md` 包含编译命令、hugepage 配置、网卡绑定步骤
|
||
|
||
- [ ] **Day 002 (2026-06-30, 周二)** · 主题: hugepage / IOMMU / VFIO
|
||
- 📖 学习: hugepage 原理 + VFIO vs UIO 对比 (60min)
|
||
- 🔧 动手: 在本机配置 1G hugepage × 8,验证 `/proc/meminfo` (90min)
|
||
- 🐧 内核对照: 读 `arch/x86/mm/hugetlbpage.c` 大页分配路径 (30min)
|
||
- 📤 产出: `notes/P1/W1-D2-hugepage-vfio.md`
|
||
|
||
- [ ] **Day 003 (2026-07-01, 周三)** · 主题: EAL 启动流程上半段
|
||
- 📖 学习: `lib/eal/common/eal_common_options.c` + `eal_init()` 主线 (90min)
|
||
- 🔧 动手: 加 printf 跟踪 EAL 启动过程,画出函数调用图 (90min)
|
||
- 📤 产出: `notes/P1/W1-D3-eal-init-1.md` + 调用图
|
||
|
||
- [ ] **Day 004 (2026-07-02, 周四)** · 主题: EAL 启动流程下半段
|
||
- 📖 学习: lcore 创建、master/worker 线程、内存初始化 (90min)
|
||
- 🔧 动手: 写一个最小程序,启动 4 个 lcore 打印自己的 ID (90min)
|
||
- 📤 产出: `code/P1/eal-lcore-demo/`
|
||
|
||
- [ ] **Day 005 (2026-07-03, 周五)** · 主题: hello_world 改造
|
||
- 📖 学习: `examples/helloworld/main.c` (30min)
|
||
- 🔧 动手: 改造 helloworld,让每个 lcore 把自己绑定的 CPU、NUMA node、core_id 输出 (90min)
|
||
- 📤 产出: `code/P1/helloworld-plus/`
|
||
|
||
- [ ] **Day 006 (2026-07-04, 周六)** · 主题: 大块实验 — testpmd 模式全览
|
||
- 📖 学习: testpmd 各种 forward mode (60min)
|
||
- 🔧 动手: 用 X540 / X710 跑 io / mac / macswap / rxonly / txonly 五种模式,记录 PPS (240min)
|
||
- 📤 产出: `perf-data/P1/W1-testpmd-modes.md` 含 5 组数据 + 图表
|
||
- 📤 产出: `code/P1/testpmd-runner.sh` 自动化脚本
|
||
|
||
- [ ] **Day 007 (2026-07-05, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P1/W1-summary.md`(W1 学到什么、卡在哪、下周计划)
|
||
|
||
---
|
||
|
||
### Week 2 (Day 8-14) · mempool 源码 + cache 机制
|
||
|
||
- [ ] **Day 008 (2026-07-06, 周一)** · 主题: mempool 总览
|
||
- 📖 学习: `lib/mempool/rte_mempool.h` + 设计文档 (90min)
|
||
- 🔧 动手: 写 demo 创建 mempool、alloc、free 对象 (60min)
|
||
- 📤 产出: `notes/P1/W2-D1-mempool-overview.md`
|
||
|
||
- [ ] **Day 009 (2026-07-07, 周二)** · 主题: mempool cache 原理
|
||
- 📖 学习: per-lcore cache 数据结构 + flush_threshold (90min)
|
||
- 🔧 动手: gdb 进入 `rte_mempool_get` 看 cache 命中路径 (60min)
|
||
- 🐧 内核对照: 读 `mm/slub.c` 的 per-cpu cache (kmem_cache_cpu) (30min)
|
||
- 📤 产出: `notes/P1/W2-D2-mempool-cache.md`
|
||
|
||
- [ ] **Day 010 (2026-07-08, 周三)** · 主题: mempool ops (ring / stack / lf-stack)
|
||
- 📖 学习: `rte_mempool_ops` 抽象 + 三种后端实现 (90min)
|
||
- 🔧 动手: 用 `--mempool-ops=stack` 跑 testpmd 对比性能 (60min)
|
||
- 📤 产出: `notes/P1/W2-D3-mempool-ops.md`
|
||
|
||
- [ ] **Day 011 (2026-07-09, 周四)** · 主题: mempool 与 NUMA
|
||
- 📖 学习: `rte_mempool_create_empty` 的 socket_id 参数 (60min)
|
||
- 🔧 动手: 同 socket vs 跨 socket 测 alloc 延迟 (90min)
|
||
- 📤 产出: `perf-data/P1/W2-mempool-numa.md`
|
||
|
||
- [ ] **Day 012 (2026-07-10, 周五)** · 主题: mempool benchmark 工具
|
||
- 📖 学习: `app/test/test_mempool_perf.c` (60min)
|
||
- 🔧 动手: 跑官方 perf test,记录 cache on/off 的差异 (90min)
|
||
- 📤 产出: `perf-data/P1/W2-mempool-perf.md`
|
||
|
||
- [ ] **Day 013 (2026-07-11, 周六)** · 主题: 大块实验 — 自研 mempool benchmark
|
||
- 🔧 动手: 写一个工具,分别用 cache=0 / cache=128 / cache=512 测 8 核并发 alloc,输出火焰图 (360min)
|
||
- 📤 产出: `code/P1/mempool-bench/` + `flamegraph/W2-mempool.svg`
|
||
|
||
- [ ] **Day 014 (2026-07-12, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P1/W2-summary.md`
|
||
|
||
---
|
||
|
||
### Week 3 (Day 15-21) · ring 源码 + 无锁队列
|
||
|
||
- [ ] **Day 015 (2026-07-13, 周一)** · 主题: ring 基本 API
|
||
- 📖 学习: `lib/ring/rte_ring.h` + create/enqueue/dequeue (90min)
|
||
- 🔧 动手: 写 SPSC ring 通信 demo (60min)
|
||
- 📤 产出: `notes/P1/W3-D1-ring-api.md`
|
||
|
||
- [ ] **Day 016 (2026-07-14, 周二)** · 主题: ring 无锁实现 — head/tail 指针
|
||
- 📖 学习: `__rte_ring_move_prod_head` / `__rte_ring_move_cons_head` (120min)
|
||
- 🔧 动手: 手画 4 个线程并发 enqueue 的指针变化时序图 (60min)
|
||
- 🐧 内核对照: 读 `include/linux/rculist.h` 的 RCU 无锁链表 (30min)
|
||
- 📤 产出: `notes/P1/W3-D2-ring-lockfree.md`
|
||
|
||
- [ ] **Day 017 (2026-07-15, 周三)** · 主题: ring 的内存屏障
|
||
- 📖 学习: `rte_smp_wmb` / `rte_smp_rmb` + C11 atomic (90min)
|
||
- 🔧 动手: 在 ring 源码中标注每个屏障的作用 (60min)
|
||
- 📤 产出: `notes/P1/W3-D3-ring-barrier.md`
|
||
|
||
- [ ] **Day 018 (2026-07-16, 周四)** · 主题: ring 变体 — RTS / HTS
|
||
- 📖 学习: Relaxed Tail Sync / Head Tail Sync 模式 (90min)
|
||
- 🔧 动手: 对比 default / RTS / HTS 三种模式的延迟 (60min)
|
||
- 📤 产出: `notes/P1/W3-D4-ring-variants.md`
|
||
|
||
- [ ] **Day 019 (2026-07-17, 周五)** · 主题: ring 与 mempool 关系
|
||
- 📖 学习: mempool default ops = ring 的原因 (60min)
|
||
- 🔧 动手: 看 mempool 如何用 ring 实现 (90min)
|
||
- 📤 产出: `notes/P1/W3-D5-ring-mempool.md`
|
||
|
||
- [ ] **Day 020 (2026-07-18, 周六)** · 主题: 大块实验 — ring 压测对比
|
||
- 🔧 动手: 写 ring 压测工具,分别测 SPSC/MPSC/MPMC 在 1/2/4/8 producer 下的 throughput + latency (360min)
|
||
- 📤 产出: `code/P1/ring-bench/` + `perf-data/P1/W3-ring-perf.md`
|
||
|
||
- [ ] **Day 021 (2026-07-19, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P1/W3-summary.md`
|
||
|
||
---
|
||
|
||
### Week 4 (Day 22-28) · mbuf 源码 + 零拷贝
|
||
|
||
- [ ] **Day 022 (2026-07-20, 周一)** · 主题: mbuf 结构详解
|
||
- 📖 学习: `struct rte_mbuf` 字段分布 + cache line 布局 (90min)
|
||
- 🔧 动手: 写 demo 打印 mbuf 各字段地址,验证 cache line (60min)
|
||
- 🐧 内核对照: 读 `include/linux/skbuff.h` 的 `struct sk_buff` (30min)
|
||
- 📤 产出: `notes/P1/W4-D1-mbuf-layout.md`(含 mbuf vs skb 对照表)
|
||
|
||
- [ ] **Day 023 (2026-07-21, 周二)** · 主题: mbuf 链 + segments
|
||
- 📖 学习: chained mbuf / next 指针 / nb_segs (90min)
|
||
- 🔧 动手: 构造一个 3 段的 mbuf chain 并发包 (60min)
|
||
- 📤 产出: `notes/P1/W4-D2-mbuf-chain.md`
|
||
|
||
- [ ] **Day 024 (2026-07-22, 周三)** · 主题: mbuf headroom / tailroom
|
||
- 📖 学习: prepend / append / trim / adj (90min)
|
||
- 🔧 动手: 写一个 IP-in-IP 封装 demo,用 prepend 加外层 IP (90min)
|
||
- 📤 产出: `code/P1/mbuf-encap-demo/`
|
||
|
||
- [ ] **Day 025 (2026-07-23, 周四)** · 主题: 外部 mbuf (external buffer)
|
||
- 📖 学习: `rte_pktmbuf_attach_extbuf` (60min)
|
||
- 🔧 动手: 把用户内存挂到 mbuf 实现零拷贝 (90min)
|
||
- 📤 产出: `notes/P1/W4-D4-mbuf-extbuf.md`
|
||
|
||
- [ ] **Day 026 (2026-07-24, 周五)** · 主题: mbuf offload flags
|
||
- 📖 学习: TX/RX offload 标志位(checksum / TSO / VLAN)(90min)
|
||
- 🔧 动手: 用 testpmd 验证 TSO offload (60min)
|
||
- 📤 产出: `notes/P1/W4-D5-mbuf-offload.md`
|
||
|
||
- [ ] **Day 027 (2026-07-25, 周六)** · 主题: 大块实验 — 零拷贝 echo server
|
||
- 🔧 动手: 实现一个不分配新 mbuf 的 echo server(in-place swap MAC/IP)(360min)
|
||
- 📤 产出: `code/P1/zerocopy-echo/` + benchmark 数据
|
||
|
||
- [ ] **Day 028 (2026-07-26, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P1/W4-summary.md`
|
||
|
||
---
|
||
|
||
### Week 5 (Day 29-35) · PMD 框架 + ixgbe/i40e
|
||
|
||
- [ ] **Day 029 (2026-07-27, 周一)** · 主题: ethdev 抽象层
|
||
- 📖 学习: `lib/ethdev/rte_ethdev.h` + dev_ops (90min)
|
||
- 🔧 动手: 列出所有 dev_ops 函数指针并理解用途 (60min)
|
||
- 📤 产出: `notes/P1/W5-D1-ethdev.md`
|
||
|
||
- [ ] **Day 030 (2026-07-28, 周二)** · 主题: ixgbe PMD 总览
|
||
- 📖 学习: `drivers/net/ixgbe/ixgbe_ethdev.c` (120min)
|
||
- 🐧 内核对照: 读 `linux/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c` 的 probe + open (45min)
|
||
- 📤 产出: `notes/P1/W5-D2-ixgbe-overview.md`(含 DPDK vs Kernel 对照表)
|
||
|
||
- [ ] **Day 031 (2026-07-29, 周三)** · 主题: ixgbe RX 路径
|
||
- 📖 学习: `ixgbe_recv_pkts` + 描述符环 (120min)
|
||
- 🔧 动手: 在 RX 路径打点统计 burst 大小分布 (60min)
|
||
- 📤 产出: `notes/P1/W5-D3-ixgbe-rx.md`
|
||
|
||
- [ ] **Day 032 (2026-07-30, 周四)** · 主题: ixgbe TX 路径
|
||
- 📖 学习: `ixgbe_xmit_pkts` + TX descriptor (120min)
|
||
- 📤 产出: `notes/P1/W5-D4-ixgbe-tx.md`
|
||
|
||
- [ ] **Day 033 (2026-07-31, 周五)** · 主题: vector PMD (AVX)
|
||
- 📖 学习: `ixgbe_rxtx_vec_*.c` SIMD 优化 (90min)
|
||
- 🔧 动手: 对比 vector / scalar PMD 的 PPS (60min)
|
||
- 📤 产出: `notes/P1/W5-D5-ixgbe-vec.md`
|
||
|
||
- [ ] **Day 034 (2026-08-01, 周六)** · 主题: 大块实验 — PMD 替换实验
|
||
- 🔧 动手: 写一个跨 PMD 的 forward 程序(ixgbe ↔ virtio),对比性能 (360min)
|
||
- 📤 产出: `code/P1/cross-pmd-fwd/`
|
||
|
||
- [ ] **Day 035 (2026-08-02, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P1/W5-summary.md`
|
||
|
||
---
|
||
|
||
### Week 6 (Day 36-42) · NUMA + lcore 调度
|
||
|
||
- [ ] **Day 036 (2026-08-03, 周一)** · 主题: NUMA 拓扑探查
|
||
- 📖 学习: `lstopo` / `numactl` / `/sys/devices/system/node/` (60min)
|
||
- 🔧 动手: 画出本机 NUMA 拓扑图 (90min)
|
||
- 📤 产出: `notes/P1/W6-D1-numa-topo.md`
|
||
|
||
- [ ] **Day 037 (2026-08-04, 周二)** · 主题: 跨 socket 性能惩罚
|
||
- 🔧 动手: 同 socket / 跨 socket 跑 mempool + ring 测试 (120min)
|
||
- 🐧 内核对照: 读 `mm/mempolicy.c` 看内核 NUMA 分配策略 (30min)
|
||
- 📤 产出: `perf-data/P1/W6-numa-penalty.md`
|
||
|
||
- [ ] **Day 038 (2026-08-05, 周三)** · 主题: lcore 绑核机制
|
||
- 📖 学习: `--lcores` 参数解析 + pthread_setaffinity_np (90min)
|
||
- 🔧 动手: 测试不同绑核策略的性能差异 (60min)
|
||
- 📤 产出: `notes/P1/W6-D3-lcore-affinity.md`
|
||
|
||
- [ ] **Day 039 (2026-08-06, 周四)** · 主题: service core
|
||
- 📖 学习: `rte_service` 框架 (60min)
|
||
- 🔧 动手: 写一个 service core demo 处理统计任务 (90min)
|
||
- 📤 产出: `code/P1/service-core-demo/`
|
||
|
||
- [ ] **Day 040 (2026-08-07, 周五)** · 主题: lcore 间通信模式
|
||
- 📖 学习: pipeline / run-to-completion 两种模型 (90min)
|
||
- 🔧 动手: 各写一个 demo 对比 (90min)
|
||
- 📤 产出: `code/P1/lcore-models/`
|
||
|
||
- [ ] **Day 041 (2026-08-08, 周六)** · 主题: 大块实验 — pipeline forward
|
||
- 🔧 动手: 实现 RX → classify → fwd 三阶段 pipeline,测 PPS (360min)
|
||
- 📤 产出: `code/P1/pipeline-fwd/`
|
||
|
||
- [ ] **Day 042 (2026-08-09, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P1/W6-summary.md`
|
||
|
||
---
|
||
|
||
### Week 7 (Day 43-49) · RSS + Flow Director
|
||
|
||
- [ ] **Day 043 (2026-08-10, 周一)** · 主题: RSS 原理
|
||
- 📖 学习: Toeplitz hash + RETA table (90min)
|
||
- 📤 产出: `notes/P1/W7-D1-rss.md`
|
||
|
||
- [ ] **Day 044 (2026-08-11, 周二)** · 主题: RSS 配置实战
|
||
- 🔧 动手: testpmd 配置 RSS,观察队列分布 (120min)
|
||
- 🐧 内核对照: 读 `net/core/dev.c` 的 RPS/RFS 实现(`get_rps_cpu`)(30min)
|
||
- 📤 产出: `notes/P1/W7-D2-rss-cfg.md`
|
||
|
||
- [ ] **Day 045 (2026-08-12, 周三)** · 主题: Symmetric RSS
|
||
- 📖 学习: 对称 RSS key 设计 (90min)
|
||
- 🔧 动手: 用对称 key 让双向流落同队列 (60min)
|
||
- 📤 产出: `notes/P1/W7-D3-sym-rss.md`
|
||
|
||
- [ ] **Day 046 (2026-08-13, 周四)** · 主题: rte_flow 入门
|
||
- 📖 学习: `lib/ethdev/rte_flow.h` (90min)
|
||
- 🔧 动手: 写一条 flow rule 把特定 5-tuple 导到指定队列 (90min)
|
||
- 📤 产出: `code/P1/rte-flow-demo/`
|
||
|
||
- [ ] **Day 047 (2026-08-14, 周五)** · 主题: Flow Director vs RSS
|
||
- 📖 学习: 两者适用场景 (60min)
|
||
- 📤 产出: `notes/P1/W7-D5-fdir-vs-rss.md`
|
||
|
||
- [ ] **Day 048 (2026-08-15, 周六)** · 主题: 大块实验 — 多队列 echo
|
||
- 🔧 动手: 实现 16 队列 RSS echo,测单核 vs 16 核线速 (360min)
|
||
- 📤 产出: `code/P1/multiq-echo/` + `perf-data/P1/W7-multiq.md`
|
||
|
||
- [ ] **Day 049 (2026-08-16, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P1/W7-summary.md`
|
||
|
||
---
|
||
|
||
### Week 8 (Day 50-56) · mTCP 源码精读
|
||
|
||
- [ ] **Day 050 (2026-08-17, 周一)** · 主题: mTCP 论文精读
|
||
- 📖 学习: NSDI'14 mTCP 论文全文 (180min)
|
||
- 📤 产出: `notes/P1/W8-D1-mtcp-paper.md`
|
||
|
||
- [ ] **Day 051 (2026-08-18, 周二)** · 主题: mTCP 架构
|
||
- 📖 学习: `mtcp/src/core.c` + 主循环 (120min)
|
||
- 📤 产出: `notes/P1/W8-D2-mtcp-arch.md`
|
||
|
||
- [ ] **Day 052 (2026-08-19, 周三)** · 主题: mTCP TCP 状态机
|
||
- 📖 学习: `mtcp/src/tcp_in.c` / `tcp_out.c` (150min)
|
||
- 🐧 内核对照: 读 `net/ipv4/tcp_input.c::tcp_rcv_state_process` (45min)
|
||
- 📤 产出: `notes/P1/W8-D3-mtcp-tcp.md`(含 mTCP vs Linux TCP 状态机对照)
|
||
|
||
- [ ] **Day 053 (2026-08-20, 周四)** · 主题: mTCP epoll 实现
|
||
- 📖 学习: `mtcp/src/eventpoll.c` (120min)
|
||
- 📤 产出: `notes/P1/W8-D4-mtcp-epoll.md`
|
||
|
||
- [ ] **Day 054 (2026-08-21, 周五)** · 主题: mTCP IO 抽象
|
||
- 📖 学习: `mtcp/src/io_module.c` 如何对接 DPDK (90min)
|
||
- 📤 产出: `notes/P1/W8-D5-mtcp-io.md`
|
||
|
||
- [ ] **Day 055 (2026-08-22, 周六)** · 主题: 大块实验 — mTCP 跑通 epwget/epserver
|
||
- 🔧 动手: 编译 mTCP + 你已有的 `libmtcp` 跑 epserver/epwget benchmark (360min)
|
||
- 📤 产出: `perf-data/P1/W8-mtcp-bench.md`
|
||
|
||
- [ ] **Day 056 (2026-08-23, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P1/W8-summary.md`
|
||
|
||
---
|
||
|
||
### Week 9 (Day 57-63) · libmtcp v3 设计
|
||
|
||
- [ ] **Day 057 (2026-08-24, 周一)** · 主题: 现有 libmtcp 代码盘点
|
||
- 🔧 动手: 通读你之前的 `libmtcp-20260622` / `20260625` 改动 (120min)
|
||
- 📤 产出: `notes/P1/W9-D1-libmtcp-audit.md`
|
||
|
||
- [ ] **Day 058 (2026-08-25, 周二)** · 主题: v3 目标定义
|
||
- 🔧 动手: 写 v3 RFC(功能 / 性能目标)(120min)
|
||
- 🐧 内核对照: 读 `net/socket.c` 看 socket() / bind() / listen() 内核实现 (30min)
|
||
- 📤 产出: `docs/libmtcp-v3-rfc.md`
|
||
|
||
- [ ] **Day 059 (2026-08-26, 周三)** · 主题: v3 模块划分
|
||
- 🔧 动手: 画出模块图 + 数据流图 (120min)
|
||
- 📤 产出: `docs/libmtcp-v3-arch.md`
|
||
|
||
- [ ] **Day 060 (2026-08-27, 周四)** · 主题: v3 API 设计
|
||
- 🔧 动手: 写 `libmtcp_v3.h` 头文件(仅声明)(120min)
|
||
- 📤 产出: `code/libmtcp-v3/include/libmtcp_v3.h`
|
||
|
||
- [ ] **Day 061 (2026-08-28, 周五)** · 主题: v3 内存模型
|
||
- 🔧 动手: 设计 mempool / mbuf 复用策略 (90min)
|
||
- 📤 产出: `docs/libmtcp-v3-memory.md`
|
||
|
||
- [ ] **Day 062 (2026-08-29, 周六)** · 主题: 大块实验 — 搭脚手架
|
||
- 🔧 动手: 创建仓库、Makefile、单元测试框架、CI 配置 (360min)
|
||
- 📤 产出: `code/libmtcp-v3/` 仓库初始化
|
||
|
||
- [ ] **Day 063 (2026-08-30, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P1/W9-summary.md`
|
||
|
||
---
|
||
|
||
### Week 10 (Day 64-70) · libmtcp v3 实现 (1) — RX/TX 路径
|
||
|
||
- [ ] **Day 064 (2026-08-31, 周一)** · 主题: RX 路径骨架
|
||
- 🔧 动手: 实现 `mtcp_rx_burst` + ring 分发 (180min)
|
||
- 📤 产出: commit "rx burst skeleton"
|
||
|
||
- [ ] **Day 065 (2026-09-01, 周二)** · 主题: RX 路径解析
|
||
- 🔧 动手: 实现 ether/ip/tcp 头部解析 (150min)
|
||
- 🐧 内核对照: 读 `net/core/dev.c::__netif_receive_skb_core` 看内核 RX 主入口 (30min)
|
||
- 📤 产出: commit "parse headers"
|
||
|
||
- [ ] **Day 066 (2026-09-02, 周三)** · 主题: RX 路径连接查表
|
||
- 🔧 动手: 用 rte_hash 实现 4-tuple 查表 (150min)
|
||
- 📤 产出: commit "conn lookup"
|
||
|
||
- [ ] **Day 067 (2026-09-03, 周四)** · 主题: TX 路径骨架
|
||
- 🔧 动手: 实现 `mtcp_tx_burst` + 批量发送 (150min)
|
||
- 📤 产出: commit "tx burst skeleton"
|
||
|
||
- [ ] **Day 068 (2026-09-04, 周五)** · 主题: TX 路径优化
|
||
- 🔧 动手: prefetch + batch (120min)
|
||
- 📤 产出: commit "tx prefetch"
|
||
|
||
- [ ] **Day 069 (2026-09-05, 周六)** · 主题: 大块实验 — 端到端 echo
|
||
- 🔧 动手: 让 v3 跑通最简 echo,测初步 PPS (360min)
|
||
- 📤 产出: `perf-data/P1/W10-v3-echo-v0.md`
|
||
|
||
- [ ] **Day 070 (2026-09-06, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P1/W10-summary.md`
|
||
|
||
---
|
||
|
||
### Week 11 (Day 71-77) · libmtcp v3 实现 (2) — 协议栈核心
|
||
|
||
- [ ] **Day 071 (2026-09-07, 周一)** · 主题: TCP 状态机骨架
|
||
- 🔧 动手: 实现 LISTEN/SYN_RECV/ESTABLISHED (180min)
|
||
- 📤 产出: commit "tcp fsm 1"
|
||
|
||
- [ ] **Day 072 (2026-09-08, 周二)** · 主题: TCP 状态机 (FIN/CLOSE)
|
||
- 🔧 动手: 实现 FIN_WAIT/CLOSE_WAIT/TIME_WAIT (180min)
|
||
- 🐧 内核对照: 读 `net/ipv4/tcp_timer.c` 看内核 TIME_WAIT 处理 (30min)
|
||
- 📤 产出: commit "tcp fsm 2"
|
||
|
||
- [ ] **Day 073 (2026-09-09, 周三)** · 主题: 重传 / 拥塞控制
|
||
- 🔧 动手: 实现 RTO + cwnd 简化版 (180min)
|
||
- 📤 产出: commit "rto + cwnd"
|
||
|
||
- [ ] **Day 074 (2026-09-10, 周四)** · 主题: 收发缓冲区
|
||
- 🔧 动手: 环形 buffer + 零拷贝引用 (150min)
|
||
- 📤 产出: commit "sock buffer"
|
||
|
||
- [ ] **Day 075 (2026-09-11, 周五)** · 主题: API 封装
|
||
- 🔧 动手: 暴露 mtcp_socket/listen/accept/send/recv (150min)
|
||
- 📤 产出: commit "user api"
|
||
|
||
- [ ] **Day 076 (2026-09-12, 周六)** · 主题: 大块实验 — echo 完整版
|
||
- 🔧 动手: 写 echo server demo + 客户端,跑 1000 并发连接 (360min)
|
||
- 📤 产出: `code/libmtcp-v3/examples/echo/`
|
||
|
||
- [ ] **Day 077 (2026-09-13, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P1/W11-summary.md`
|
||
|
||
---
|
||
|
||
### Week 12 (Day 78-84) · 性能调优 + 火焰图
|
||
|
||
- [ ] **Day 078 (2026-09-14, 周一)** · 主题: perf top + IPC
|
||
- 🔧 动手: 用 `perf top` / `perf stat` 找热点 (150min)
|
||
- 📤 产出: `perf-data/P1/W12-perf-top.md`
|
||
|
||
- [ ] **Day 079 (2026-09-15, 周二)** · 主题: 火焰图
|
||
- 🔧 动手: 用 FlameGraph 生成 svg (120min)
|
||
- 🐧 内核对照: 读 `kernel/events/core.c` 看 perf 子系统入口 (30min)
|
||
- 📤 产出: `flamegraph/W12-v3.svg`
|
||
|
||
- [ ] **Day 080 (2026-09-16, 周三)** · 主题: cache miss 分析
|
||
- 🔧 动手: `perf c2c` / `perf mem` 找 false sharing (150min)
|
||
- 📤 产出: `perf-data/P1/W12-cache-miss.md`
|
||
|
||
- [ ] **Day 081 (2026-09-17, 周四)** · 主题: branch / prefetch 优化
|
||
- 🔧 动手: 加 likely/unlikely + rte_prefetch0 (150min)
|
||
- 📤 产出: commit "prefetch opt"
|
||
|
||
- [ ] **Day 082 (2026-09-18, 周五)** · 主题: 批量化
|
||
- 🔧 动手: 把单包路径改批量路径 (150min)
|
||
- 📤 产出: commit "batch path"
|
||
|
||
- [ ] **Day 083 (2026-09-19, 周六)** · 主题: 大块实验 — 100G 线速冲刺
|
||
- 🔧 动手: 反复调优 + 测试,目标单核 14.88 Mpps (480min)
|
||
- 📤 产出: `perf-data/P1/W12-100G-echo.md`(最终数据)
|
||
|
||
- [ ] **Day 084 (2026-09-20, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P1/W12-summary.md`
|
||
|
||
---
|
||
|
||
### Week 13 (Day 85-91) · P1 总结 + 文档
|
||
|
||
- [ ] **Day 085 (2026-09-21, 周一)** · 主题: 整理 P1 所有产出
|
||
- 🔧 动手: 把 notes / code / perf-data 重新组织 (180min)
|
||
- 📤 产出: `P1-final/` 目录
|
||
|
||
- [ ] **Day 086 (2026-09-22, 周二)** · 主题: 写 P1 技术博客 (1)
|
||
- 🔧 动手: "DPDK mempool/ring/mbuf 源码深读" 一文 (180min)
|
||
- 🐧 内核对照: 在博客里加 "DPDK vs 内核" 对照章节 (30min)
|
||
- 📤 产出: `blog/P1-internals.md`
|
||
|
||
- [ ] **Day 087 (2026-09-23, 周三)** · 主题: 写 P1 技术博客 (2)
|
||
- 🔧 动手: "从 0 写一个 100G 用户态 TCP 协议栈" 一文 (180min)
|
||
- 📤 产出: `blog/P1-libmtcp-v3.md`
|
||
|
||
- [ ] **Day 088 (2026-09-24, 周四)** · 主题: libmtcp-v3 README + 文档
|
||
- 🔧 动手: 完善 README、架构图、性能对比表 (180min)
|
||
- 📤 产出: `code/libmtcp-v3/README.md`
|
||
|
||
- [ ] **Day 089 (2026-09-25, 周五)** · 主题: 简历草稿 v1
|
||
- 🔧 动手: 把 P1 成果写进简历项目栏 (90min)
|
||
- 📤 产出: `career/resume-v1.md`
|
||
|
||
- [ ] **Day 090 (2026-09-26, 周六)** · 主题: 大块实验 — 公开发布准备
|
||
- 🔧 动手: 项目推 GitHub,写 release note v0.1 (240min)
|
||
- 📤 产出: GitHub release
|
||
|
||
- [ ] **Day 091 (2026-09-27, 周日)** · 🎯 P1 阶段答辩
|
||
- 📤 产出: `P1-final/answer.md`(自问自答 10 个核心问题)
|
||
- 📤 产出: `P1-final/retro.md`(阶段复盘 + P2 调整建议)
|
||
|
||
---
|
||
|
||
# P2 · SONiC×DPDK 融合 (M4-M6)
|
||
|
||
> **Day 92-182**, 2026-09-28 ~ 2026-12-27
|
||
> **核心目标**: 跑通 sonic-vs,并实现 SAI-DPDK 最小适配器(15 个核心 API),让 SONiC 控制面操作能落到 DPDK 数据面上
|
||
|
||
## P2.0 阶段目标
|
||
|
||
1. 完整跑通 sonic-vs(Virtual Switch)镜像,理解 SONiC 容器栈
|
||
2. 读懂 SAI 头文件 + sairedis 链路
|
||
3. 实现 `sai-dpdk-mini`:15 个 API(switch/port/fdb/vlan/route/neighbor/acl/pkt-io)
|
||
4. SONiC 上跑通 L2 forwarding + L3 routing + 基本 ACL
|
||
|
||
## P2.1 关键交付物
|
||
|
||
- [ ] `sonic-vs` 完整跑通 + 容器架构笔记
|
||
- [ ] `sai-dpdk-mini` GitHub 仓库 + 15 个 API 实现
|
||
- [ ] SONiC + sai-dpdk-mini 集成 demo 视频/截图
|
||
- [ ] `notes/P2/` 13 周笔记
|
||
|
||
## P2.1.5 🐧 本阶段内核对照清单(K4 + K6)
|
||
|
||
| 周 | 对照主题 | 内核源码路径 |
|
||
|---|---|---|
|
||
| W14 | 内核 namespace (容器隔离基础) | `kernel/nsproxy.c`, `kernel/pid_namespace.c` |
|
||
| W15 | cgroup + container | `kernel/cgroup/` |
|
||
| W16 | netlink 总览 | `net/netlink/af_netlink.c` |
|
||
| W17 | rtnetlink(端口/路由/邻居)| `net/core/rtnetlink.c` |
|
||
| W18 | netlink RTM_NEWLINK 流程 | `net/core/rtnetlink.c::rtnl_newlink` |
|
||
| W19 | FIB + 路由表 | `net/ipv4/fib_trie.c` |
|
||
| W20 | neighbour subsystem (ARP/ND) | `net/core/neighbour.c`, `net/ipv4/arp.c` |
|
||
| W21 | net_device + ndo_* | `net/core/dev.c`, `include/linux/netdevice.h` |
|
||
| W22 | bridge + FDB | `net/bridge/br_fdb.c` |
|
||
| W23 | VLAN (802.1Q)| `net/8021q/vlan_core.c` |
|
||
| W24 | nftables / iptables | `net/netfilter/nf_tables_core.c` |
|
||
| W25 | tun/tap (host_if 对照) | `drivers/net/tun.c` |
|
||
| W26 | 综合:SONiC kernel host_if 路径 | `tun/tap → netif_receive_skb` |
|
||
|
||
## P2.2 周计划总览 (W14-W26)
|
||
|
||
| 周 | Day | 主题 | 里程碑 |
|
||
|---|---|---|---|
|
||
| W14 | 92-98 | sonic-vs 跑通 | container up |
|
||
| W15 | 99-105 | SONiC 容器架构 | 画出全栈图 |
|
||
| W16 | 106-112 | APPL_DB → ASIC_DB 链路 | 抓 redis 流 |
|
||
| W17 | 113-119 | SAI 头文件全览 | 分类整理 |
|
||
| W18 | 120-126 | sairedis 源码 | RPC 链路 |
|
||
| W19 | 127-133 | syncd 源码 | dispatch 机制 |
|
||
| W20 | 134-140 | sai-dpdk-mini 设计 | RFC |
|
||
| W21 | 141-147 | sai_switch + sai_port | 编译通过 |
|
||
| W22 | 148-154 | sai_fdb + sai_vlan | L2 跑通 |
|
||
| W23 | 155-161 | sai_route + sai_neighbor | L3 跑通 |
|
||
| W24 | 162-168 | sai_acl + rte_flow | ACL 跑通 |
|
||
| W25 | 169-175 | sai pkt-io (host_if) | CPU 收发 |
|
||
| W26 | 176-182 | 集成 + 答辩 | demo + 文档 |
|
||
|
||
## P2.3 详细日计划
|
||
|
||
### Week 14 (Day 92-98) · sonic-vs 跑通
|
||
|
||
- [ ] **Day 092 (2026-09-28, 周一)** · 主题: SONiC 总览
|
||
- 📖 学习: SONiC 官方文档 Architecture 章节 (120min)
|
||
- 📤 产出: `notes/P2/W14-D1-sonic-overview.md`
|
||
|
||
- [ ] **Day 093 (2026-09-29, 周二)** · 主题: 拉取 sonic-vs 镜像
|
||
- 🔧 动手: 从 sonic-buildimage 拉 vs 镜像或直接 download (120min)
|
||
- 🐧 内核对照: 读 `kernel/nsproxy.c` + `Documentation/admin-guide/namespaces/` (30min)
|
||
- 📤 产出: `notes/P2/W14-D2-sonic-vs-image.md`
|
||
|
||
- [ ] **Day 094 (2026-09-30, 周三)** · 主题: 启动 sonic-vs 容器
|
||
- 🔧 动手: 用 docker 跑起来,登录 cli (120min)
|
||
- 📤 产出: `notes/P2/W14-D3-sonic-vs-up.md`
|
||
|
||
- [ ] **Day 095 (2026-10-01, 周四)** · ☕ 国庆假期 — 留白
|
||
|
||
- [ ] **Day 096 (2026-10-02, 周五)** · ☕ 国庆假期 — 留白
|
||
|
||
- [ ] **Day 097 (2026-10-03, 周六)** · ☕ 国庆假期 — 留白
|
||
|
||
- [ ] **Day 098 (2026-10-04, 周日)** · ☕ 国庆假期 — 留白
|
||
|
||
---
|
||
|
||
### Week 15 (Day 99-105) · SONiC 容器架构
|
||
|
||
- [ ] **Day 099 (2026-10-05, 周一)** · ☕ 国庆假期 — 留白
|
||
|
||
- [ ] **Day 100 (2026-10-06, 周二)** · ☕ 国庆假期 — 留白
|
||
|
||
- [ ] **Day 101 (2026-10-07, 周三)** · ☕ 国庆假期 — 留白
|
||
|
||
- [ ] **Day 102 (2026-10-08, 周四)** · 主题: SONiC 容器全家福
|
||
- 🔧 动手: `docker ps` 看所有容器,画交互图 (150min)
|
||
- 📤 产出: `notes/P2/W15-D4-containers.md`
|
||
|
||
- [ ] **Day 103 (2026-10-09, 周五)** · 主题: swss 容器内部
|
||
- 🔧 动手: 进 swss 容器看 orchagent 进程 (150min)
|
||
- 🐧 内核对照: 读 `kernel/cgroup/cgroup.c` 看容器资源限制 (30min)
|
||
- 📤 产出: `notes/P2/W15-D5-swss.md`
|
||
|
||
- [ ] **Day 104 (2026-10-10, 周六)** · 主题: 大块实验 — 容器交互全链路
|
||
- 🔧 动手: 从 CLI 下一条 vlan 命令,跟踪到 ASIC_DB (360min)
|
||
- 📤 产出: `notes/P2/W15-D6-fullpath.md`
|
||
|
||
- [ ] **Day 105 (2026-10-11, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P2/W15-summary.md`
|
||
|
||
---
|
||
|
||
### Week 16 (Day 106-112) · APPL_DB → ASIC_DB 链路
|
||
|
||
- [ ] **Day 106 (2026-10-12, 周一)** · 主题: Redis 数据库结构
|
||
- 📖 学习: 6 个 DB 的用途 (90min)
|
||
- 🔧 动手: `redis-cli -n 0/1/2/...` 各看一遍 (60min)
|
||
- 📤 产出: `notes/P2/W16-D1-redis-dbs.md`
|
||
|
||
- [ ] **Day 107 (2026-10-13, 周二)** · 主题: APPL_DB 表结构
|
||
- 🔧 动手: 抓 PORT/VLAN/ROUTE 表 (120min)
|
||
- 🐧 内核对照: 读 `net/core/rtnetlink.c::rtnl_newlink` 看内核如何创建网卡 (30min)
|
||
- 📤 产出: `notes/P2/W16-D2-appl-db.md`
|
||
|
||
- [ ] **Day 108 (2026-10-14, 周三)** · 主题: ASIC_DB 表结构
|
||
- 🔧 动手: 抓 ASIC_STATE 表 (120min)
|
||
- 📤 产出: `notes/P2/W16-D3-asic-db.md`
|
||
|
||
- [ ] **Day 109 (2026-10-15, 周四)** · 主题: Producer/Consumer Table
|
||
- 📖 学习: swss-common 表抽象 (90min)
|
||
- 📤 产出: `notes/P2/W16-D4-tables.md`
|
||
|
||
- [ ] **Day 110 (2026-10-16, 周五)** · 主题: KCO/SCO 通知
|
||
- 📖 学习: Key/Sub Change Object 机制 (90min)
|
||
- 📤 产出: `notes/P2/W16-D5-notify.md`
|
||
|
||
- [ ] **Day 111 (2026-10-17, 周六)** · 主题: 大块实验 — Redis 流量抓取
|
||
- 🔧 动手: `redis-cli monitor` 同步观察一次完整配置 (360min)
|
||
- 📤 产出: `perf-data/P2/W16-redis-trace.md`
|
||
|
||
- [ ] **Day 112 (2026-10-18, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P2/W16-summary.md`
|
||
|
||
---
|
||
|
||
### Week 17 (Day 113-119) · SAI 头文件全览
|
||
|
||
- [ ] **Day 113 (2026-10-19, 周一)** · 主题: SAI 总览
|
||
- 📖 学习: sai.h + sai_object_type (120min)
|
||
- 📤 产出: `notes/P2/W17-D1-sai-overview.md`
|
||
|
||
- [ ] **Day 114 (2026-10-20, 周二)** · 主题: SAI Switch / Port
|
||
- 📖 学习: saiswitch.h / saiport.h (120min)
|
||
- 🐧 内核对照: 读 `include/linux/netdevice.h` 看 `struct net_device` 与 ndo_* (30min)
|
||
- 📤 产出: `notes/P2/W17-D2-sai-switch-port.md`(含 SAI vs net_device 对照)
|
||
|
||
- [ ] **Day 115 (2026-10-21, 周三)** · 主题: SAI FDB / VLAN
|
||
- 📖 学习: saifdb.h / saivlan.h (120min)
|
||
- 📤 产出: `notes/P2/W17-D3-sai-l2.md`
|
||
|
||
- [ ] **Day 116 (2026-10-22, 周四)** · 主题: SAI Route / Neighbor / NextHop
|
||
- 📖 学习: sairoute.h / saineighbor.h / sainexthop.h (150min)
|
||
- 📤 产出: `notes/P2/W17-D4-sai-l3.md`
|
||
|
||
- [ ] **Day 117 (2026-10-23, 周五)** · 主题: SAI ACL
|
||
- 📖 学习: saiacl.h (120min)
|
||
- 📤 产出: `notes/P2/W17-D5-sai-acl.md`
|
||
|
||
- [ ] **Day 118 (2026-10-24, 周六)** · 主题: 大块实验 — SAI API 分类整理
|
||
- 🔧 动手: 把所有 SAI API 列表 + 标红 15 个 MVP API (360min)
|
||
- 📤 产出: `notes/P2/W17-D6-sai-api-matrix.md`
|
||
|
||
- [ ] **Day 119 (2026-10-25, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P2/W17-summary.md`
|
||
|
||
---
|
||
|
||
### Week 18 (Day 120-126) · sairedis 源码
|
||
|
||
- [ ] **Day 120 (2026-10-26, 周一)** · 主题: sairedis 总览
|
||
- 📖 学习: sonic-sairedis 仓库结构 (120min)
|
||
- 📤 产出: `notes/P2/W18-D1-sairedis-overview.md`
|
||
|
||
- [ ] **Day 121 (2026-10-27, 周二)** · 主题: ClientSai
|
||
- 📖 学习: `lib/ClientSai.cpp` (150min)
|
||
- 🐧 内核对照: 读 `net/netlink/af_netlink.c` 看 netlink socket 实现 (30min)
|
||
- 📤 产出: `notes/P2/W18-D2-clientsai.md`
|
||
|
||
- [ ] **Day 122 (2026-10-28, 周三)** · 主题: RedisRemoteSaiInterface
|
||
- 📖 学习: 如何把 SAI 调用转 Redis (150min)
|
||
- 📤 产出: `notes/P2/W18-D3-redis-interface.md`
|
||
|
||
- [ ] **Day 123 (2026-10-29, 周四)** · 主题: 序列化协议
|
||
- 📖 学习: meta + sai_serialize_* (120min)
|
||
- 📤 产出: `notes/P2/W18-D4-serialize.md`
|
||
|
||
- [ ] **Day 124 (2026-10-30, 周五)** · 主题: 通知反向链路
|
||
- 📖 学习: NotificationProducer/Consumer (120min)
|
||
- 📤 产出: `notes/P2/W18-D5-notify-back.md`
|
||
|
||
- [ ] **Day 125 (2026-10-31, 周六)** · 主题: 大块实验 — 抓一次 SAI 调用
|
||
- 🔧 动手: 在 orchagent 加日志,抓 sai_create_route 完整链路 (360min)
|
||
- 📤 产出: `perf-data/P2/W18-sai-trace.md`
|
||
|
||
- [ ] **Day 126 (2026-11-01, 周日)** · ☕ 复盘 + 月度复盘
|
||
- 📤 产出: `notes/P2/W18-summary.md` + `monthly/2026-10.md`
|
||
|
||
---
|
||
|
||
### Week 19 (Day 127-133) · syncd 源码
|
||
|
||
- [ ] **Day 127 (2026-11-02, 周一)** · 主题: syncd 启动流程
|
||
- 📖 学习: `syncd/syncd_main.cpp` (120min)
|
||
- 📤 产出: `notes/P2/W19-D1-syncd-main.md`
|
||
|
||
- [ ] **Day 128 (2026-11-03, 周二)** · 主题: syncd 主循环
|
||
- 📖 学习: `Syncd::run()` (150min)
|
||
- 🐧 内核对照: 读 `net/ipv4/fib_trie.c` 看内核 FIB 路由表实现 (30min)
|
||
- 📤 产出: `notes/P2/W19-D2-syncd-loop.md`
|
||
|
||
- [ ] **Day 129 (2026-11-04, 周三)** · 主题: dispatch 机制
|
||
- 📖 学习: ASIC_STATE 操作如何 dispatch 到 SAI (150min)
|
||
- 📤 产出: `notes/P2/W19-D3-dispatch.md`
|
||
|
||
- [ ] **Day 130 (2026-11-05, 周四)** · 主题: vendor SAI 加载
|
||
- 📖 学习: dlopen + sai_api_query (120min)
|
||
- 📤 产出: `notes/P2/W19-D4-vendor-load.md`
|
||
|
||
- [ ] **Day 131 (2026-11-06, 周五)** · 主题: warm/fast boot
|
||
- 📖 学习: redis snapshot + restore (120min)
|
||
- 📤 产出: `notes/P2/W19-D5-warm-boot.md`
|
||
|
||
- [ ] **Day 132 (2026-11-07, 周六)** · 主题: 大块实验 — 替换 SAI 库实验
|
||
- 🔧 动手: 把 vs 的 libsai 换成自己的 stub,看 syncd 怎么调用 (360min)
|
||
- 📤 产出: `code/P2/sai-stub/`
|
||
|
||
- [ ] **Day 133 (2026-11-08, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P2/W19-summary.md`
|
||
|
||
---
|
||
|
||
### Week 20 (Day 134-140) · sai-dpdk-mini 设计
|
||
|
||
- [ ] **Day 134 (2026-11-09, 周一)** · 主题: 项目目标 RFC
|
||
- 🔧 动手: 写 RFC 文档 (180min)
|
||
- 📤 产出: `docs/sai-dpdk-mini-rfc.md`
|
||
|
||
- [ ] **Day 135 (2026-11-10, 周二)** · 主题: 架构设计
|
||
- 🔧 动手: 画架构图:SAI API → DPDK 资源映射 (180min)
|
||
- 🐧 内核对照: 读 `net/core/neighbour.c` 看 ARP/ND 表实现 (30min)
|
||
- 📤 产出: `docs/sai-dpdk-mini-arch.md`
|
||
|
||
- [ ] **Day 136 (2026-11-11, 周三)** · 主题: 内部数据结构
|
||
- 🔧 动手: 设计 port/fdb/route/acl 内部 struct (150min)
|
||
- 📤 产出: `docs/sai-dpdk-mini-ds.md`
|
||
|
||
- [ ] **Day 137 (2026-11-12, 周四)** · 主题: 线程模型
|
||
- 🔧 动手: 决定 SAI 调用线程 vs DPDK lcore 关系 (120min)
|
||
- 📤 产出: `docs/sai-dpdk-mini-thread.md`
|
||
|
||
- [ ] **Day 138 (2026-11-13, 周五)** · 主题: 仓库脚手架
|
||
- 🔧 动手: 创建仓库、Makefile、CMakeLists (120min)
|
||
- 📤 产出: `code/sai-dpdk-mini/` 初始化
|
||
|
||
- [ ] **Day 139 (2026-11-14, 周六)** · 主题: 大块实验 — 编译框架
|
||
- 🔧 动手: 让 sai_api_query 返回所有空 stub 编译通过 (360min)
|
||
- 📤 产出: commit "skeleton compiles"
|
||
|
||
- [ ] **Day 140 (2026-11-15, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P2/W20-summary.md`
|
||
|
||
---
|
||
|
||
### Week 21 (Day 141-147) · sai_switch + sai_port
|
||
|
||
- [ ] **Day 141 (2026-11-16, 周一)** · 主题: sai_create_switch
|
||
- 🔧 动手: 实现 EAL 初始化 + 探测端口 (180min)
|
||
- 📤 产出: commit "sai_create_switch"
|
||
|
||
- [ ] **Day 142 (2026-11-17, 周二)** · 主题: sai_remove_switch
|
||
- 🔧 动手: 资源回收 (120min)
|
||
- 🐧 内核对照: 读 `net/core/dev.c::register_netdev` / `unregister_netdev` (30min)
|
||
- 📤 产出: commit "sai_remove_switch"
|
||
|
||
- [ ] **Day 143 (2026-11-18, 周三)** · 主题: sai_create_port
|
||
- 🔧 动手: 绑定 DPDK port_id + 启动 (180min)
|
||
- 📤 产出: commit "sai_create_port"
|
||
|
||
- [ ] **Day 144 (2026-11-19, 周四)** · 主题: port attribute
|
||
- 🔧 动手: 实现 admin_state / speed / mtu 等属性 (150min)
|
||
- 📤 产出: commit "port attrs"
|
||
|
||
- [ ] **Day 145 (2026-11-20, 周五)** · 主题: port 统计
|
||
- 🔧 动手: 实现 get_port_stats 桥接 rte_eth_stats (150min)
|
||
- 📤 产出: commit "port stats"
|
||
|
||
- [ ] **Day 146 (2026-11-21, 周六)** · 主题: 大块实验 — syncd 加载 sai-dpdk-mini
|
||
- 🔧 动手: 把 .so 让 syncd 加载,看到端口出现在 ASIC_DB (360min)
|
||
- 📤 产出: `notes/P2/W21-D6-syncd-load.md`
|
||
|
||
- [ ] **Day 147 (2026-11-22, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P2/W21-summary.md`
|
||
|
||
---
|
||
|
||
### Week 22 (Day 148-154) · sai_fdb + sai_vlan (L2)
|
||
|
||
- [ ] **Day 148 (2026-11-23, 周一)** · 主题: sai_create_vlan
|
||
- 🔧 动手: 用 bitmap 实现 VLAN 表 (150min)
|
||
- 📤 产出: commit "sai_vlan"
|
||
|
||
- [ ] **Day 149 (2026-11-24, 周二)** · 主题: VLAN member
|
||
- 🔧 动手: 端口 ↔ VLAN 映射 (150min)
|
||
- 🐧 内核对照: 读 `net/8021q/vlan_core.c` 看内核 VLAN 处理 (30min)
|
||
- 📤 产出: commit "vlan member"
|
||
|
||
- [ ] **Day 150 (2026-11-25, 周三)** · 主题: sai_create_fdb_entry
|
||
- 🔧 动手: rte_hash MAC 表 (180min)
|
||
- 📤 产出: commit "fdb create"
|
||
|
||
- [ ] **Day 151 (2026-11-26, 周四)** · 主题: FDB age + flush
|
||
- 🔧 动手: 定时器 + 老化机制 (150min)
|
||
- 📤 产出: commit "fdb age"
|
||
|
||
- [ ] **Day 152 (2026-11-27, 周五)** · 主题: L2 转发路径
|
||
- 🔧 动手: 数据面查 MAC 表转发 (180min)
|
||
- 📤 产出: commit "l2 forward"
|
||
|
||
- [ ] **Day 153 (2026-11-28, 周六)** · 主题: 大块实验 — L2 跑通
|
||
- 🔧 动手: SONiC 配两个 VLAN,互通验证 (360min)
|
||
- 📤 产出: `perf-data/P2/W22-l2-test.md`
|
||
|
||
- [ ] **Day 154 (2026-11-29, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P2/W22-summary.md`
|
||
|
||
---
|
||
|
||
### Week 23 (Day 155-161) · sai_route + sai_neighbor (L3)
|
||
|
||
- [ ] **Day 155 (2026-11-30, 周一)** · 主题: sai_create_router_interface
|
||
- 🔧 动手: 实现 RIF 概念 (150min)
|
||
- 📤 产出: commit "rif"
|
||
|
||
- [ ] **Day 156 (2026-12-01, 周二)** · 主题: sai_create_neighbor
|
||
- 🔧 动手: ARP/ND 表 (180min)
|
||
- 🐧 内核对照: 读 `net/ipv4/arp.c` 看 ARP 状态机(NUD_* states)(30min)
|
||
- 📤 产出: commit "neighbor"
|
||
|
||
- [ ] **Day 157 (2026-12-02, 周三)** · 主题: sai_create_next_hop
|
||
- 🔧 动手: nexthop 表 (150min)
|
||
- 📤 产出: commit "nexthop"
|
||
|
||
- [ ] **Day 158 (2026-12-03, 周四)** · 主题: sai_create_route_entry
|
||
- 🔧 动手: rte_lpm 路由表 (180min)
|
||
- 📤 产出: commit "route lpm"
|
||
|
||
- [ ] **Day 159 (2026-12-04, 周五)** · 主题: L3 转发路径
|
||
- 🔧 动手: LPM 查表 → 改 dst MAC → 转发 (180min)
|
||
- 📤 产出: commit "l3 forward"
|
||
|
||
- [ ] **Day 160 (2026-12-05, 周六)** · 主题: 大块实验 — L3 跑通
|
||
- 🔧 动手: SONiC 配 IP + 静态路由 + ping (360min)
|
||
- 📤 产出: `perf-data/P2/W23-l3-test.md`
|
||
|
||
- [ ] **Day 161 (2026-12-06, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P2/W23-summary.md`
|
||
|
||
---
|
||
|
||
### Week 24 (Day 162-168) · sai_acl + rte_flow
|
||
|
||
- [ ] **Day 162 (2026-12-07, 周一)** · 主题: SAI ACL 模型
|
||
- 📖 学习: ACL table / group / entry / counter (120min)
|
||
- 📤 产出: `notes/P2/W24-D1-acl-model.md`
|
||
|
||
- [ ] **Day 163 (2026-12-08, 周二)** · 主题: rte_flow 映射设计
|
||
- 🔧 动手: 设计 SAI ACL → rte_flow 转换规则 (150min)
|
||
- 🐧 内核对照: 读 `net/sched/cls_flower.c` 看内核 flow classifier (30min)
|
||
- 📤 产出: `docs/acl-mapping.md`(含 rte_flow vs tc-flower 对照)
|
||
|
||
- [ ] **Day 164 (2026-12-09, 周三)** · 主题: sai_create_acl_table
|
||
- 🔧 动手: 实现 ACL table 容器 (150min)
|
||
- 📤 产出: commit "acl table"
|
||
|
||
- [ ] **Day 165 (2026-12-10, 周四)** · 主题: sai_create_acl_entry
|
||
- 🔧 动手: 转 rte_flow rule 下发网卡 (180min)
|
||
- 📤 产出: commit "acl entry"
|
||
|
||
- [ ] **Day 166 (2026-12-11, 周五)** · 主题: ACL counter
|
||
- 🔧 动手: rte_flow counter action (120min)
|
||
- 📤 产出: commit "acl counter"
|
||
|
||
- [ ] **Day 167 (2026-12-12, 周六)** · 主题: 大块实验 — ACL 跑通
|
||
- 🔧 动手: SONiC 配置 ACL drop 某 IP,验证 (360min)
|
||
- 📤 产出: `perf-data/P2/W24-acl-test.md`
|
||
|
||
- [ ] **Day 168 (2026-12-13, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P2/W24-summary.md`
|
||
|
||
---
|
||
|
||
### Week 25 (Day 169-175) · sai pkt-io (host_if)
|
||
|
||
- [ ] **Day 169 (2026-12-14, 周一)** · 主题: SAI host_if 模型
|
||
- 📖 学习: trap group / trap / host_if (120min)
|
||
- 📤 产出: `notes/P2/W25-D1-hostif-model.md`
|
||
|
||
- [ ] **Day 170 (2026-12-15, 周二)** · 主题: TAP 设备桥接
|
||
- 🔧 动手: 创建 TAP,绑定到 SAI port (150min)
|
||
- 🐧 内核对照: 读 `drivers/net/tun.c` 看 tun/tap 完整实现 (45min)
|
||
- 📤 产出: commit "tap binding"
|
||
|
||
- [ ] **Day 171 (2026-12-16, 周三)** · 主题: CPU 收包路径
|
||
- 🔧 动手: 命中 trap 的包送 TAP (180min)
|
||
- 📤 产出: commit "cpu rx"
|
||
|
||
- [ ] **Day 172 (2026-12-17, 周四)** · 主题: CPU 发包路径
|
||
- 🔧 动手: TAP 写入的包 → DPDK tx (150min)
|
||
- 📤 产出: commit "cpu tx"
|
||
|
||
- [ ] **Day 173 (2026-12-18, 周五)** · 主题: BGP/LACP 跑通验证
|
||
- 🔧 动手: 起 FRR,看能不能建邻居 (180min)
|
||
- 📤 产出: `perf-data/P2/W25-bgp-test.md`
|
||
|
||
- [ ] **Day 174 (2026-12-19, 周六)** · 主题: 大块实验 — 端到端打通
|
||
- 🔧 动手: SONiC + sai-dpdk-mini 跑完整 L2/L3/ACL/BGP (360min)
|
||
- 📤 产出: 演示视频/截图
|
||
|
||
- [ ] **Day 175 (2026-12-20, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P2/W25-summary.md`
|
||
|
||
---
|
||
|
||
### Week 26 (Day 176-182) · 集成 + 答辩
|
||
|
||
- [ ] **Day 176 (2026-12-21, 周一)** · 主题: 集成测试
|
||
- 🔧 动手: 跑 SONiC PTF / VS test (180min)
|
||
- 📤 产出: `perf-data/P2/W26-vs-test.md`
|
||
|
||
- [ ] **Day 177 (2026-12-22, 周二)** · 主题: README + 架构图
|
||
- 🔧 动手: 完善 sai-dpdk-mini 文档 (180min)
|
||
- 🐧 内核对照: 在 README 加一节 "SAI vs Linux kernel netdev API 对照" (30min)
|
||
- 📤 产出: `code/sai-dpdk-mini/README.md`
|
||
|
||
- [ ] **Day 178 (2026-12-23, 周三)** · 主题: 技术博客 (1)
|
||
- 🔧 动手: "SONiC 控制面 → SAI → DPDK 全链路" (180min)
|
||
- 📤 产出: `blog/P2-sonic-sai-dpdk.md`
|
||
|
||
- [ ] **Day 179 (2026-12-24, 周四)** · 主题: 技术博客 (2)
|
||
- 🔧 动手: "用 DPDK 实现 SAI 最小适配器" (180min)
|
||
- 📤 产出: `blog/P2-sai-dpdk-mini.md`
|
||
|
||
- [ ] **Day 180 (2026-12-25, 周五)** · 主题: 简历更新 v2
|
||
- 🔧 动手: 加入 P2 项目 (90min)
|
||
- 📤 产出: `career/resume-v2.md`
|
||
|
||
- [ ] **Day 181 (2026-12-26, 周六)** · 主题: 大块实验 — 开源发布
|
||
- 🔧 动手: GitHub release v0.1,发知乎/掘金 (240min)
|
||
- 📤 产出: GitHub release + 推广帖
|
||
|
||
- [ ] **Day 182 (2026-12-27, 周日)** · 🎯 P2 阶段答辩
|
||
- 📤 产出: `P2-final/answer.md` + `P2-final/retro.md` + `monthly/2026-12.md`
|
||
|
||
---
|
||
|
||
# P3 · vSwitch / 云网关数据面 (M7-M9)
|
||
|
||
> **Day 183-273**, 2026-12-28 ~ 2027-03-28
|
||
> **核心目标**: 吃透 OVS-DPDK 数据面、入门 VPP 并写出 plugin、自研一个用户态 LB 原型
|
||
|
||
## P3.0 阶段目标
|
||
|
||
1. OVS-DPDK 源码精读 + 调优实战
|
||
2. VPP 入门 + 写一个自定义 node 插件
|
||
3. 自研 `udp-lb` / `tcp-lb`:4-tuple hash + RSS + 健康检查
|
||
4. 跑通一个云网关原型(NAT/SNAT/DNAT)
|
||
|
||
## P3.1 关键交付物
|
||
|
||
- [ ] `notes/P3/` 13 周笔记
|
||
- [ ] `code/vpp-plugin-demo/` VPP 自定义 node
|
||
- [ ] `code/dpdk-lb/` 自研用户态 LB
|
||
- [ ] `perf-data/P3/` OVS-DPDK 调优数据
|
||
|
||
## P3.1.5 🐧 本阶段内核对照清单(K5 + K6)
|
||
|
||
| 周 | 对照主题 | 内核源码路径 |
|
||
|---|---|---|
|
||
| W27 | 内核 OVS datapath | `net/openvswitch/datapath.c`, `flow_table.c` |
|
||
| W28 | 内核 OVS flow_table | `net/openvswitch/flow_table.c` |
|
||
| W29 | 内核 conntrack | `net/netfilter/nf_conntrack_core.c` |
|
||
| W30 | qdisc + 速率限制 | `net/sched/sch_*.c` |
|
||
| W31 | bridge fast path | `net/bridge/br_input.c` |
|
||
| W32 | netdev_rx_handler | `net/core/dev.c::netif_receive_skb_core` |
|
||
| W33 | XDP 程序加载 | `net/core/dev.c::dev_xdp_install` |
|
||
| W34 | XDP redirect / cpumap | `kernel/bpf/cpumap.c`, `devmap.c` |
|
||
| W35 | IPVS (LVS) 内核 LB 实现 | `net/netfilter/ipvs/ip_vs_core.c` |
|
||
| W36 | maglev / consistent hash | `net/netfilter/ipvs/ip_vs_sh.c` |
|
||
| W37 | tc flower offload | `net/sched/cls_flower.c` |
|
||
| W38 | NAT (nftables) | `net/netfilter/nf_nat_core.c` |
|
||
| W39 | 总结:OVS-kernel vs OVS-DPDK 对照 | — |
|
||
|
||
## P3.2 周计划总览 (W27-W39)
|
||
|
||
| 周 | Day | 主题 | 里程碑 |
|
||
|---|---|---|---|
|
||
| W27 | 183-189 | OVS 架构总览 | ovs-vswitchd 起来 |
|
||
| W28 | 190-196 | OVS-DPDK datapath | dpcls/dpif |
|
||
| W29 | 197-203 | OVS megaflow | EMC + megaflow 抓数据 |
|
||
| W30 | 204-210 | OVS-DPDK 调优 | PMD threads tune |
|
||
| W31 | 211-217 | VPP 架构 | hello node |
|
||
| W32 | 218-224 | VPP graph model | 自定义 node |
|
||
| W33 | 225-231 | VPP plugin 框架 | 插件骨架 |
|
||
| W34 | 232-238 | VPP plugin 实现 | 编译/加载 |
|
||
| W35 | 239-245 | LB 设计 | RFC + 架构 |
|
||
| W36 | 246-252 | LB 数据面 | 4-tuple hash |
|
||
| W37 | 253-259 | LB 健康检查 | active probe |
|
||
| W38 | 260-266 | NAT/SNAT/DNAT | conntrack |
|
||
| W39 | 267-273 | P3 总结 | 答辩 |
|
||
|
||
## P3.3 详细日计划
|
||
|
||
### Week 27 (Day 183-189) · OVS 架构总览
|
||
|
||
- [ ] **Day 183 (2026-12-28, 周一)** · 主题: OVS 总体架构
|
||
- 📖 学习: ovs-architecture.7 文档 (120min)
|
||
- 📤 产出: `notes/P3/W27-D1-ovs-arch.md`
|
||
|
||
- [ ] **Day 184 (2026-12-29, 周二)** · 主题: OVS 编译 + DPDK 支持
|
||
- 🔧 动手: 编译 ovs-3.x with-dpdk (120min)
|
||
- 🐧 内核对照: 读 `net/openvswitch/datapath.c::ovs_dp_process_packet` (30min)
|
||
- 📤 产出: `notes/P3/W27-D2-ovs-build.md`
|
||
|
||
- [ ] **Day 185 (2026-12-30, 周三)** · 主题: 启动 ovs-vswitchd
|
||
- 🔧 动手: 配 dpdk-init + 创建 br0 (120min)
|
||
- 📤 产出: `notes/P3/W27-D3-ovs-up.md`
|
||
|
||
- [ ] **Day 186 (2026-12-31, 周四)** · 主题: 添加 dpdk port
|
||
- 🔧 动手: add-port 绑定 dpdk0/dpdk1 (120min)
|
||
- 📤 产出: `notes/P3/W27-D4-dpdk-port.md`
|
||
|
||
- [ ] **Day 187 (2027-01-01, 周五)** · ☕ 元旦假期 — 留白
|
||
|
||
- [ ] **Day 188 (2027-01-02, 周六)** · ☕ 元旦假期 — 留白
|
||
|
||
- [ ] **Day 189 (2027-01-03, 周日)** · ☕ 元旦假期 — 留白
|
||
|
||
---
|
||
|
||
### Week 28 (Day 190-196) · OVS-DPDK datapath
|
||
|
||
- [ ] **Day 190 (2027-01-04, 周一)** · 主题: dpif-netdev 总览
|
||
- 📖 学习: `lib/dpif-netdev.c` (120min)
|
||
- 📤 产出: `notes/P3/W28-D1-dpif.md`
|
||
|
||
- [ ] **Day 191 (2027-01-05, 周二)** · 主题: PMD threads
|
||
- 📖 学习: pmd_thread_main 主循环 (150min)
|
||
- 🐧 内核对照: 读 `net/openvswitch/flow_table.c` 看内核 OVS megaflow (30min)
|
||
- 📤 产出: `notes/P3/W28-D2-pmd.md`
|
||
|
||
- [ ] **Day 192 (2027-01-06, 周三)** · 主题: EMC (exact match cache)
|
||
- 📖 学习: emc_lookup / emc_insert (120min)
|
||
- 📤 产出: `notes/P3/W28-D3-emc.md`
|
||
|
||
- [ ] **Day 193 (2027-01-07, 周四)** · 主题: dpcls (megaflow cache)
|
||
- 📖 学习: dpcls_lookup (150min)
|
||
- 📤 产出: `notes/P3/W28-D4-dpcls.md`
|
||
|
||
- [ ] **Day 194 (2027-01-08, 周五)** · 主题: upcall slow path
|
||
- 📖 学习: upcall_xlate (90min)
|
||
- 📤 产出: `notes/P3/W28-D5-upcall.md`
|
||
|
||
- [ ] **Day 195 (2027-01-09, 周六)** · 主题: 大块实验 — 抓 OVS 数据面
|
||
- 🔧 动手: 用 perf 抓 PMD 热点 (360min)
|
||
- 📤 产出: `flamegraph/W28-ovs.svg`
|
||
|
||
- [ ] **Day 196 (2027-01-10, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P3/W28-summary.md`
|
||
|
||
---
|
||
|
||
### Week 29 (Day 197-203) · OVS megaflow
|
||
|
||
- [ ] **Day 197 (2027-01-11, 周一)** · 主题: megaflow 概念
|
||
- 📖 学习: 通配符 + bitmask (120min)
|
||
- 📤 产出: `notes/P3/W29-D1-megaflow.md`
|
||
|
||
- [ ] **Day 198 (2027-01-12, 周二)** · 主题: 抓 megaflow 表
|
||
- 🔧 动手: `ovs-appctl dpctl/dump-flows` (120min)
|
||
- 🐧 内核对照: 读 `net/netfilter/nf_conntrack_core.c::nf_conntrack_in` (30min)
|
||
- 📤 产出: `notes/P3/W29-D2-dump-flows.md`
|
||
|
||
- [ ] **Day 199 (2027-01-13, 周三)** · 主题: revalidator
|
||
- 📖 学习: revalidator 线程 (120min)
|
||
- 📤 产出: `notes/P3/W29-D3-revalidator.md`
|
||
|
||
- [ ] **Day 200 (2027-01-14, 周四)** · 主题: SMC (signature match cache)
|
||
- 📖 学习: SMC 优化 (90min)
|
||
- 📤 产出: `notes/P3/W29-D4-smc.md`
|
||
|
||
- [ ] **Day 201 (2027-01-15, 周五)** · 主题: connection tracking
|
||
- 📖 学习: conntrack 模块 (120min)
|
||
- 📤 产出: `notes/P3/W29-D5-ct.md`
|
||
|
||
- [ ] **Day 202 (2027-01-16, 周六)** · 主题: 大块实验 — 流表压力测试
|
||
- 🔧 动手: 用 dperf 打 100 万流,观察 EMC/SMC/dpcls 命中率 (360min)
|
||
- 📤 产出: `perf-data/P3/W29-flow-stress.md`
|
||
|
||
- [ ] **Day 203 (2027-01-17, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P3/W29-summary.md`
|
||
|
||
---
|
||
|
||
### Week 30 (Day 204-210) · OVS-DPDK 调优
|
||
|
||
- [ ] **Day 204 (2027-01-18, 周一)** · 主题: PMD core 绑定
|
||
- 🔧 动手: pmd-cpu-mask 调试 (120min)
|
||
- 📤 产出: `notes/P3/W30-D1-pmd-mask.md`
|
||
|
||
- [ ] **Day 205 (2027-01-19, 周二)** · 主题: RXQ assignment
|
||
- 🔧 动手: pmd-rxq-affinity (120min)
|
||
- 🐧 内核对照: 读 `net/sched/sch_htb.c` 看内核 qdisc 限速 (30min)
|
||
- 📤 产出: `notes/P3/W30-D2-rxq.md`
|
||
|
||
- [ ] **Day 206 (2027-01-20, 周三)** · 主题: mbuf 池调整
|
||
- 🔧 动手: shared mempool 配置 (120min)
|
||
- 📤 产出: `notes/P3/W30-D3-mbuf.md`
|
||
|
||
- [ ] **Day 207 (2027-01-21, 周四)** · 主题: TX flush 周期
|
||
- 🔧 动手: tx-flush-interval 调优 (120min)
|
||
- 📤 产出: `notes/P3/W30-D4-tx-flush.md`
|
||
|
||
- [ ] **Day 208 (2027-01-22, 周五)** · 主题: hardware offload
|
||
- 🔧 动手: hw-offload=true 试跑 (120min)
|
||
- 📤 产出: `notes/P3/W30-D5-hw-offload.md`
|
||
|
||
- [ ] **Day 209 (2027-01-23, 周六)** · 主题: 大块实验 — 调优冲线速
|
||
- 🔧 动手: 把 OVS-DPDK 调到接近线速 (480min)
|
||
- 📤 产出: `perf-data/P3/W30-ovs-perf.md`
|
||
|
||
- [ ] **Day 210 (2027-01-24, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P3/W30-summary.md`
|
||
|
||
---
|
||
|
||
### Week 31 (Day 211-217) · VPP 架构
|
||
|
||
- [ ] **Day 211 (2027-01-25, 周一)** · 主题: VPP 总览
|
||
- 📖 学习: VPP fd.io 文档 (120min)
|
||
- 📤 产出: `notes/P3/W31-D1-vpp-overview.md`
|
||
|
||
- [ ] **Day 212 (2027-01-26, 周二)** · 主题: VPP 编译安装
|
||
- 🔧 动手: 从源码编译 (120min)
|
||
- 🐧 内核对照: 读 `net/bridge/br_input.c` 看内核 bridge fast path (30min)
|
||
- 📤 产出: `notes/P3/W31-D2-vpp-build.md`
|
||
|
||
- [ ] **Day 213 (2027-01-27, 周三)** · 主题: VPP CLI 基础
|
||
- 🔧 动手: vppctl 配置 L2/L3 (120min)
|
||
- 📤 产出: `notes/P3/W31-D3-vpp-cli.md`
|
||
|
||
- [ ] **Day 214 (2027-01-28, 周四)** · 主题: vector packet processing
|
||
- 📖 学习: VPP 的 vector graph 模型 (150min)
|
||
- 📤 产出: `notes/P3/W31-D4-graph.md`
|
||
|
||
- [ ] **Day 215 (2027-01-29, 周五)** · 主题: VPP 主要 nodes
|
||
- 📖 学习: dpdk-input / ip4-lookup / ip4-rewrite (120min)
|
||
- 📤 产出: `notes/P3/W31-D5-nodes.md`
|
||
|
||
- [ ] **Day 216 (2027-01-30, 周六)** · 主题: 大块实验 — VPP L3 转发
|
||
- 🔧 动手: 配两口 + 静态路由 + 压测 (360min)
|
||
- 📤 产出: `perf-data/P3/W31-vpp-l3.md`
|
||
|
||
- [ ] **Day 217 (2027-01-31, 周日)** · ☕ 复盘 + 月度
|
||
- 📤 产出: `notes/P3/W31-summary.md` + `monthly/2027-01.md`
|
||
|
||
---
|
||
|
||
### Week 32 (Day 218-224) · VPP graph model
|
||
|
||
- [ ] **Day 218 (2027-02-01, 周一)** · 主题: node registration
|
||
- 📖 学习: VLIB_REGISTER_NODE 宏 (120min)
|
||
- 📤 产出: `notes/P3/W32-D1-node-reg.md`
|
||
|
||
- [ ] **Day 219 (2027-02-02, 周二)** · 主题: node function
|
||
- 📖 学习: 写一个最小 node (150min)
|
||
- 🐧 内核对照: 读 `net/core/dev.c::netdev_rx_handler_register` 看内核 rx_handler 注入机制 (30min)
|
||
- 📤 产出: `code/P3/vpp-hello-node/`
|
||
|
||
- [ ] **Day 220 (2027-02-03, 周三)** · 主题: next nodes
|
||
- 📖 学习: vlib_node_runtime_t::next_index (120min)
|
||
- 📤 产出: `notes/P3/W32-D3-next.md`
|
||
|
||
- [ ] **Day 221 (2027-02-04, 周四)** · 主题: buffer & metadata
|
||
- 📖 学习: vlib_buffer_t (120min)
|
||
- 📤 产出: `notes/P3/W32-D4-vlib-buf.md`
|
||
|
||
- [ ] **Day 222 (2027-02-05, 周五)** · 主题: trace + counter
|
||
- 🔧 动手: 给 node 加 trace (120min)
|
||
- 📤 产出: `notes/P3/W32-D5-trace.md`
|
||
|
||
- [ ] **Day 223 (2027-02-06, 周六)** · ☕ 春节假期 — 留白
|
||
|
||
- [ ] **Day 224 (2027-02-07, 周日)** · ☕ 春节假期 — 留白
|
||
|
||
---
|
||
|
||
### Week 33 (Day 225-231) · VPP plugin 框架
|
||
|
||
- [ ] **Day 225 (2027-02-08, 周一)** · ☕ 春节假期 — 留白
|
||
|
||
- [ ] **Day 226 (2027-02-09, 周二)** · ☕ 春节假期 — 留白
|
||
|
||
- [ ] **Day 227 (2027-02-10, 周三)** · ☕ 春节假期 — 留白
|
||
|
||
- [ ] **Day 228 (2027-02-11, 周四)** · ☕ 春节假期 — 留白
|
||
|
||
- [ ] **Day 229 (2027-02-12, 周五)** · ☕ 春节假期 — 留白
|
||
|
||
- [ ] **Day 230 (2027-02-13, 周六)** · 主题: plugin skeleton
|
||
- 🔧 动手: 用 vpp_plugin_template 生成骨架 (240min)
|
||
- 📤 产出: `code/P3/vpp-plugin-demo/`
|
||
|
||
- [ ] **Day 231 (2027-02-14, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P3/W33-summary.md`
|
||
|
||
---
|
||
|
||
### Week 34 (Day 232-238) · VPP plugin 实现
|
||
|
||
- [ ] **Day 232 (2027-02-15, 周一)** · 主题: API 定义
|
||
- 🔧 动手: 写 .api 文件 (120min)
|
||
- 📤 产出: commit "api def"
|
||
|
||
- [ ] **Day 233 (2027-02-16, 周二)** · 主题: CLI 命令
|
||
- 🔧 动手: 注册自定义 vppctl 命令 (150min)
|
||
- 🐧 内核对照: 读 `kernel/bpf/cpumap.c` 看 XDP cpumap 程序加载 (30min)
|
||
- 📤 产出: commit "cli"
|
||
|
||
- [ ] **Day 234 (2027-02-17, 周三)** · 主题: node 实现
|
||
- 🔧 动手: 写一个 IP 黑名单 drop node (180min)
|
||
- 📤 产出: commit "blacklist node"
|
||
|
||
- [ ] **Day 235 (2027-02-18, 周四)** · 主题: 接入 graph
|
||
- 🔧 动手: 插到 ip4-input 之后 (120min)
|
||
- 📤 产出: commit "graph hook"
|
||
|
||
- [ ] **Day 236 (2027-02-19, 周五)** · 主题: 单元测试
|
||
- 🔧 动手: 用 VPP test framework (120min)
|
||
- 📤 产出: commit "tests"
|
||
|
||
- [ ] **Day 237 (2027-02-20, 周六)** · 主题: 大块实验 — 黑名单压测
|
||
- 🔧 动手: 10 万条黑名单 + 压测 (360min)
|
||
- 📤 产出: `perf-data/P3/W34-blacklist.md`
|
||
|
||
- [ ] **Day 238 (2027-02-21, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P3/W34-summary.md`
|
||
|
||
---
|
||
|
||
### Week 35 (Day 239-245) · LB 设计
|
||
|
||
- [ ] **Day 239 (2027-02-22, 周一)** · 主题: LB 需求分析
|
||
- 🔧 动手: 写需求文档(L4/L7、DR/NAT)(120min)
|
||
- 📤 产出: `docs/dpdk-lb-req.md`
|
||
|
||
- [ ] **Day 240 (2027-02-23, 周二)** · 主题: 主流 LB 调研
|
||
- 📖 学习: LVS / Maglev / Katran (180min)
|
||
- 🐧 内核对照: 读 `net/netfilter/ipvs/ip_vs_core.c::ip_vs_in` 看 LVS 数据面 (30min)
|
||
- 📤 产出: `notes/P3/W35-D2-lb-survey.md`
|
||
|
||
- [ ] **Day 241 (2027-02-24, 周三)** · 主题: hash 算法选型
|
||
- 📖 学习: 一致性 hash / Maglev hash (120min)
|
||
- 📤 产出: `notes/P3/W35-D3-hash.md`
|
||
|
||
- [ ] **Day 242 (2027-02-25, 周四)** · 主题: 架构设计
|
||
- 🔧 动手: 画架构图 (150min)
|
||
- 📤 产出: `docs/dpdk-lb-arch.md`
|
||
|
||
- [ ] **Day 243 (2027-02-26, 周五)** · 主题: 仓库脚手架
|
||
- 🔧 动手: 初始化 (120min)
|
||
- 📤 产出: `code/dpdk-lb/`
|
||
|
||
- [ ] **Day 244 (2027-02-27, 周六)** · 主题: 大块实验 — 控制面 mock
|
||
- 🔧 动手: 写一个 mock config 接口 (360min)
|
||
- 📤 产出: commit "config api"
|
||
|
||
- [ ] **Day 245 (2027-02-28, 周日)** · ☕ 复盘 + 月度
|
||
- 📤 产出: `notes/P3/W35-summary.md` + `monthly/2027-02.md`
|
||
|
||
---
|
||
|
||
### Week 36 (Day 246-252) · LB 数据面
|
||
|
||
- [ ] **Day 246 (2027-03-01, 周一)** · 主题: RX + parse
|
||
- 🔧 动手: 实现 RX 路径 (180min)
|
||
- 📤 产出: commit "rx parse"
|
||
|
||
- [ ] **Day 247 (2027-03-02, 周二)** · 主题: 4-tuple hash
|
||
- 🔧 动手: rte_hash + Maglev hash (180min)
|
||
- 🐧 内核对照: 读 `net/netfilter/ipvs/ip_vs_sh.c` 看内核源散列调度 (30min)
|
||
- 📤 产出: commit "hash"
|
||
|
||
- [ ] **Day 248 (2027-03-03, 周三)** · 主题: backend 选择
|
||
- 🔧 动手: real server 列表 + 状态 (150min)
|
||
- 📤 产出: commit "backend pick"
|
||
|
||
- [ ] **Day 249 (2027-03-04, 周四)** · 主题: NAT 改写
|
||
- 🔧 动手: 改 dst IP/MAC (150min)
|
||
- 📤 产出: commit "nat rewrite"
|
||
|
||
- [ ] **Day 250 (2027-03-05, 周五)** · 主题: session table
|
||
- 🔧 动手: 连接表 + 超时 (180min)
|
||
- 📤 产出: commit "session table"
|
||
|
||
- [ ] **Day 251 (2027-03-06, 周六)** · 主题: 大块实验 — LB 跑通
|
||
- 🔧 动手: 配 3 个 backend,curl 验证 (360min)
|
||
- 📤 产出: `perf-data/P3/W36-lb-test.md`
|
||
|
||
- [ ] **Day 252 (2027-03-07, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P3/W36-summary.md`
|
||
|
||
---
|
||
|
||
### Week 37 (Day 253-259) · LB 健康检查
|
||
|
||
- [ ] **Day 253 (2027-03-08, 周一)** · 主题: 健康检查设计
|
||
- 🔧 动手: TCP/HTTP probe (150min)
|
||
- 📤 产出: commit "hc design"
|
||
|
||
- [ ] **Day 254 (2027-03-09, 周二)** · 主题: probe 线程
|
||
- 🔧 动手: 独立 service core 跑 probe (180min)
|
||
- 🐧 内核对照: 读 `net/sched/cls_flower.c` 看 tc flower + hw offload 路径 (30min)
|
||
- 📤 产出: commit "probe thread"
|
||
|
||
- [ ] **Day 255 (2027-03-10, 周三)** · 主题: 故障切换
|
||
- 🔧 动手: 摘除 unhealthy backend (150min)
|
||
- 📤 产出: commit "failover"
|
||
|
||
- [ ] **Day 256 (2027-03-11, 周四)** · 主题: 统计 + Prometheus
|
||
- 🔧 动手: 暴露 metrics (150min)
|
||
- 📤 产出: commit "metrics"
|
||
|
||
- [ ] **Day 257 (2027-03-12, 周五)** · 主题: 压力测试
|
||
- 🔧 动手: dperf 打 1Mpps (180min)
|
||
- 📤 产出: `perf-data/P3/W37-lb-stress.md`
|
||
|
||
- [ ] **Day 258 (2027-03-13, 周六)** · 主题: 大块实验 — LB 调优
|
||
- 🔧 动手: 调到 5Mpps (480min)
|
||
- 📤 产出: `perf-data/P3/W37-lb-tune.md`
|
||
|
||
- [ ] **Day 259 (2027-03-14, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P3/W37-summary.md`
|
||
|
||
---
|
||
|
||
### Week 38 (Day 260-266) · NAT/SNAT/DNAT
|
||
|
||
- [ ] **Day 260 (2027-03-15, 周一)** · 主题: NAT 概念
|
||
- 📖 学习: SNAT/DNAT/Hairpin (120min)
|
||
- 📤 产出: `notes/P3/W38-D1-nat.md`
|
||
|
||
- [ ] **Day 261 (2027-03-16, 周二)** · 主题: conntrack 设计
|
||
- 🔧 动手: 设计连接表 (150min)
|
||
- 🐧 内核对照: 读 `net/netfilter/nf_nat_core.c::nf_nat_setup_info` 看内核 NAT 实现 (30min)
|
||
- 📤 产出: `docs/conntrack.md`
|
||
|
||
- [ ] **Day 262 (2027-03-17, 周三)** · 主题: SNAT 实现
|
||
- 🔧 动手: 出方向源地址池 (180min)
|
||
- 📤 产出: commit "snat"
|
||
|
||
- [ ] **Day 263 (2027-03-18, 周四)** · 主题: DNAT 实现
|
||
- 🔧 动手: 入方向目的地址改写 (180min)
|
||
- 📤 产出: commit "dnat"
|
||
|
||
- [ ] **Day 264 (2027-03-19, 周五)** · 主题: ALG (FTP) 略
|
||
- 📖 学习: ALG 思路 (90min)
|
||
- 📤 产出: `notes/P3/W38-D5-alg.md`
|
||
|
||
- [ ] **Day 265 (2027-03-20, 周六)** · 主题: 大块实验 — NAT 跑通
|
||
- 🔧 动手: 配置 SNAT/DNAT 验证 (360min)
|
||
- 📤 产出: `perf-data/P3/W38-nat-test.md`
|
||
|
||
- [ ] **Day 266 (2027-03-21, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P3/W38-summary.md`
|
||
|
||
---
|
||
|
||
### Week 39 (Day 267-273) · P3 总结
|
||
|
||
- [ ] **Day 267 (2027-03-22, 周一)** · 主题: 整理产出
|
||
- 🔧 动手: 组织 P3 文档 (180min)
|
||
- 📤 产出: `P3-final/`
|
||
|
||
- [ ] **Day 268 (2027-03-23, 周二)** · 主题: 技术博客 (1)
|
||
- 🔧 动手: "OVS-DPDK 调优实战" (180min)
|
||
- 🐧 内核对照: 博客加一节 "OVS-kernel vs OVS-DPDK datapath 对照" (30min)
|
||
- 📤 产出: `blog/P3-ovs-tuning.md`
|
||
|
||
- [ ] **Day 269 (2027-03-24, 周三)** · 主题: 技术博客 (2)
|
||
- 🔧 动手: "用 DPDK 写一个 5Mpps LB" (180min)
|
||
- 📤 产出: `blog/P3-dpdk-lb.md`
|
||
|
||
- [ ] **Day 270 (2027-03-25, 周四)** · 主题: 技术博客 (3)
|
||
- 🔧 动手: "VPP graph model 与自定义 plugin" (180min)
|
||
- 📤 产出: `blog/P3-vpp-plugin.md`
|
||
|
||
- [ ] **Day 271 (2027-03-26, 周五)** · 主题: 简历更新 v3
|
||
- 🔧 动手: 加 P3 (90min)
|
||
- 📤 产出: `career/resume-v3.md`
|
||
|
||
- [ ] **Day 272 (2027-03-27, 周六)** · 主题: 大块实验 — 开源 dpdk-lb
|
||
- 🔧 动手: 发 GitHub + 写中英 README (240min)
|
||
- 📤 产出: GitHub release
|
||
|
||
- [ ] **Day 273 (2027-03-28, 周日)** · 🎯 P3 阶段答辩
|
||
- 📤 产出: `P3-final/answer.md` + `P3-final/retro.md` + `monthly/2027-03.md`
|
||
|
||
---
|
||
|
||
# P4 · 网络安全数据面 (M10-M12)
|
||
|
||
> **Day 274-364**, 2027-03-29 ~ 2027-06-27
|
||
> **核心目标**: Suricata-DPDK 跑通;自研一个 DDoS 清洗原型(抗 5Mpps SYN flood);理解 IDS/IPS 数据面
|
||
|
||
## P4.0 阶段目标
|
||
|
||
1. Suricata DPDK 模式跑通 + 调优
|
||
2. 自研 DDoS 清洗:SYN cookie / 速率限制 / 黑白名单
|
||
3. 理解 TLS fingerprint (JA3/JA4)
|
||
4. 输出 3 篇安全数据面博客
|
||
|
||
## P4.1 关键交付物
|
||
|
||
- [ ] `notes/P4/` 13 周笔记
|
||
- [ ] `code/ddos-clean/` 自研 DDoS 清洗
|
||
- [ ] `perf-data/P4/` 5Mpps SYN flood 抗压数据
|
||
|
||
## P4.1.5 🐧 本阶段内核对照清单(K5 深入 + syn cookie)
|
||
|
||
| 周 | 对照主题 | 内核源码路径 |
|
||
|---|---|---|
|
||
| W40 | 内核 IDS/IPS hook 点 | `net/netfilter/core.c`, `nf_hook_slow` |
|
||
| W41 | AF_PACKET / PACKET_MMAP | `net/packet/af_packet.c` |
|
||
| W42 | XDP DDoS drop | `samples/bpf/xdp_ddos*.c` |
|
||
| W43 | nftables 规则匹配 | `net/netfilter/nf_tables_core.c` |
|
||
| W44 | TLS kernel offload (kTLS) | `net/tls/` |
|
||
| W45 | 内核限速 (tbf/police) | `net/sched/sch_tbf.c` |
|
||
| W46 | 内核 SYN cookie | `net/ipv4/syncookies.c` |
|
||
| W47 | 内核 UDP 流量控制 | `net/ipv4/udp.c` |
|
||
| W48 | conntrack helper (DNS/FTP) | `net/netfilter/nf_conntrack_helper.c` |
|
||
| W49 | ipset (大规模 IP 集合) | `net/netfilter/ipset/` |
|
||
| W50 | BPF-based rate limit | `kernel/bpf/`, `samples/bpf/` |
|
||
| W51 | 内核 perf + tracepoints | `include/trace/events/net.h` |
|
||
| W52 | 总结:内核 vs 用户态清洗对比 | — |
|
||
|
||
## P4.2 周计划总览 (W40-W52)
|
||
|
||
| 周 | Day | 主题 | 里程碑 |
|
||
|---|---|---|---|
|
||
| W40 | 274-280 | DDoS 攻击类型 | 攻击谱系 |
|
||
| W41 | 281-287 | Suricata 编译 | dpdk runmode |
|
||
| W42 | 288-294 | Suricata 数据面 | 抓性能 |
|
||
| W43 | 295-301 | Suricata 规则 | Emerging Threats |
|
||
| W44 | 302-308 | TLS fingerprint | JA3/JA4 |
|
||
| W45 | 309-315 | DDoS 清洗设计 | RFC |
|
||
| W46 | 316-322 | SYN flood 防护 | SYN cookie |
|
||
| W47 | 323-329 | UDP flood 防护 | rate limit |
|
||
| W48 | 330-336 | reflection attack | DNS amp |
|
||
| W49 | 337-343 | 黑白名单 + ASN | geo block |
|
||
| W50 | 344-350 | 抗压测试 | 5Mpps |
|
||
| W51 | 351-357 | 整体调优 | 火焰图 |
|
||
| W52 | 358-364 | P4 总结 | 答辩 |
|
||
|
||
## P4.3 详细日计划
|
||
|
||
### Week 40 (Day 274-280) · DDoS 攻击类型
|
||
|
||
- [ ] **Day 274 (2027-03-29, 周一)** · 主题: 攻击分类
|
||
- 📖 学习: volumetric / protocol / application (120min)
|
||
- 📤 产出: `notes/P4/W40-D1-attack-types.md`
|
||
|
||
- [ ] **Day 275 (2027-03-30, 周二)** · 主题: SYN flood 深入
|
||
- 📖 学习: 半连接队列 + cookie (90min)
|
||
- 🐧 内核对照: 读 `net/ipv4/syncookies.c` 完整 SYN cookie 实现 (45min)
|
||
- 📤 产出: `notes/P4/W40-D2-syn-flood.md`
|
||
|
||
- [ ] **Day 276 (2027-03-31, 周三)** · 主题: UDP/ICMP flood
|
||
- 📖 学习: 反射放大 (90min)
|
||
- 📤 产出: `notes/P4/W40-D3-udp-flood.md`
|
||
|
||
- [ ] **Day 277 (2027-04-01, 周四)** · 主题: HTTP/CC 攻击
|
||
- 📖 学习: 慢攻击 + 应用层 (90min)
|
||
- 📤 产出: `notes/P4/W40-D4-cc.md`
|
||
|
||
- [ ] **Day 278 (2027-04-02, 周五)** · 主题: 业界清洗设备
|
||
- 📖 学习: Arbor / NSFOCUS / 阿里 SCDN (120min)
|
||
- 📤 产出: `notes/P4/W40-D5-vendors.md`
|
||
|
||
- [ ] **Day 279 (2027-04-03, 周六)** · ☕ 清明假期 — 留白
|
||
|
||
- [ ] **Day 280 (2027-04-04, 周日)** · ☕ 清明假期 — 留白
|
||
|
||
---
|
||
|
||
### Week 41 (Day 281-287) · Suricata 编译
|
||
|
||
- [ ] **Day 281 (2027-04-05, 周一)** · ☕ 清明假期 — 留白
|
||
|
||
- [ ] **Day 282 (2027-04-06, 周二)** · 主题: Suricata 编译
|
||
- 🔧 动手: with-dpdk 编译 (120min)
|
||
- 🐧 内核对照: 读 `net/packet/af_packet.c` 看 AF_PACKET / PACKET_MMAP (30min)
|
||
- 📤 产出: `notes/P4/W41-D2-build.md`
|
||
|
||
- [ ] **Day 283 (2027-04-07, 周三)** · 主题: dpdk runmode 配置
|
||
- 🔧 动手: suricata.yaml dpdk 配置 (120min)
|
||
- 📤 产出: `notes/P4/W41-D3-cfg.md`
|
||
|
||
- [ ] **Day 284 (2027-04-08, 周四)** · 主题: IDS 模式起跑
|
||
- 🔧 动手: 用 ET rule 跑 IDS (120min)
|
||
- 📤 产出: `notes/P4/W41-D4-ids.md`
|
||
|
||
- [ ] **Day 285 (2027-04-09, 周五)** · 主题: IPS 模式
|
||
- 🔧 动手: inline + drop 测试 (120min)
|
||
- 📤 产出: `notes/P4/W41-D5-ips.md`
|
||
|
||
- [ ] **Day 286 (2027-04-10, 周六)** · 主题: 大块实验 — 性能 baseline
|
||
- 🔧 动手: 压测 Suricata DPDK 模式吞吐 (360min)
|
||
- 📤 产出: `perf-data/P4/W41-suricata-perf.md`
|
||
|
||
- [ ] **Day 287 (2027-04-11, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P4/W41-summary.md`
|
||
|
||
---
|
||
|
||
### Week 42 (Day 288-294) · Suricata 数据面
|
||
|
||
- [ ] **Day 288 (2027-04-12, 周一)** · 主题: Suricata 流水线
|
||
- 📖 学习: capture → decode → flow → detect (120min)
|
||
- 📤 产出: `notes/P4/W42-D1-pipeline.md`
|
||
|
||
- [ ] **Day 289 (2027-04-13, 周二)** · 主题: flow tracker
|
||
- 📖 学习: flow.c (120min)
|
||
- 🐧 内核对照: 读 `samples/bpf/xdp_ddos*.c` 看 XDP DDoS drop 范例 (30min)
|
||
- 📤 产出: `notes/P4/W42-D2-flow.md`
|
||
|
||
- [ ] **Day 290 (2027-04-14, 周三)** · 主题: 规则匹配引擎
|
||
- 📖 学习: detect.c (150min)
|
||
- 📤 产出: `notes/P4/W42-D3-detect.md`
|
||
|
||
- [ ] **Day 291 (2027-04-15, 周四)** · 主题: Hyperscan 加速
|
||
- 📖 学习: MPM with hyperscan (120min)
|
||
- 📤 产出: `notes/P4/W42-D4-hs.md`
|
||
|
||
- [ ] **Day 292 (2027-04-16, 周五)** · 主题: workers 模型
|
||
- 📖 学习: workers vs autofp (90min)
|
||
- 📤 产出: `notes/P4/W42-D5-workers.md`
|
||
|
||
- [ ] **Day 293 (2027-04-17, 周六)** · 主题: 大块实验 — Suricata 调优
|
||
- 🔧 动手: 调到 10Gbps wire speed (480min)
|
||
- 📤 产出: `perf-data/P4/W42-tune.md`
|
||
|
||
- [ ] **Day 294 (2027-04-18, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P4/W42-summary.md`
|
||
|
||
---
|
||
|
||
### Week 43 (Day 295-301) · Suricata 规则
|
||
|
||
- [ ] **Day 295 (2027-04-19, 周一)** · 主题: 规则语法
|
||
- 📖 学习: rule format (90min)
|
||
- 📤 产出: `notes/P4/W43-D1-rule-syntax.md`
|
||
|
||
- [ ] **Day 296 (2027-04-20, 周二)** · 主题: ET Open 规则
|
||
- 🔧 动手: 加载 ET Open + 验证 (120min)
|
||
- 🐧 内核对照: 读 `net/netfilter/nf_tables_core.c` 看 nft 规则匹配主循环 (30min)
|
||
- 📤 产出: `notes/P4/W43-D2-et.md`
|
||
|
||
- [ ] **Day 297 (2027-04-21, 周三)** · 主题: 自定义规则
|
||
- 🔧 动手: 写一条 SSH 暴力破解检测 (120min)
|
||
- 📤 产出: `code/P4/custom-rules/`
|
||
|
||
- [ ] **Day 298 (2027-04-22, 周四)** · 主题: lua scripting
|
||
- 📖 学习: Suricata lua 接口 (120min)
|
||
- 📤 产出: `notes/P4/W43-D4-lua.md`
|
||
|
||
- [ ] **Day 299 (2027-04-23, 周五)** · 主题: EVE JSON output
|
||
- 🔧 动手: 接 ELK 看 alert (90min)
|
||
- 📤 产出: `notes/P4/W43-D5-eve.md`
|
||
|
||
- [ ] **Day 300 (2027-04-24, 周六)** · 主题: 大块实验 — 攻击 replay
|
||
- 🔧 动手: replay 真实攻击 pcap,看是否报警 (360min)
|
||
- 📤 产出: `perf-data/P4/W43-replay.md`
|
||
|
||
- [ ] **Day 301 (2027-04-25, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P4/W43-summary.md`
|
||
|
||
---
|
||
|
||
### Week 44 (Day 302-308) · TLS fingerprint
|
||
|
||
- [ ] **Day 302 (2027-04-26, 周一)** · 主题: TLS handshake 复习
|
||
- 📖 学习: ClientHello 字段 (90min)
|
||
- 📤 产出: `notes/P4/W44-D1-tls.md`
|
||
|
||
- [ ] **Day 303 (2027-04-27, 周二)** · 主题: JA3
|
||
- 📖 学习: JA3 hash 算法 (90min)
|
||
- 🐧 内核对照: 读 `net/tls/tls_sw.c` 看内核 kTLS 卸载 (30min)
|
||
- 📤 产出: `notes/P4/W44-D2-ja3.md`
|
||
|
||
- [ ] **Day 304 (2027-04-28, 周三)** · 主题: JA4
|
||
- 📖 学习: JA4 升级版 (90min)
|
||
- 📤 产出: `notes/P4/W44-D3-ja4.md`
|
||
|
||
- [ ] **Day 305 (2027-04-29, 周四)** · 主题: 用 Suricata 抓 JA3
|
||
- 🔧 动手: 配规则输出 ja3 (120min)
|
||
- 📤 产出: `notes/P4/W44-D4-ja3-suricata.md`
|
||
|
||
- [ ] **Day 306 (2027-04-30, 周五)** · 主题: 月度复盘 + 整理
|
||
- 📤 产出: `monthly/2027-04.md`
|
||
|
||
- [ ] **Day 307 (2027-05-01, 周六)** · ☕ 五一假期 — 留白
|
||
|
||
- [ ] **Day 308 (2027-05-02, 周日)** · ☕ 五一假期 — 留白
|
||
|
||
---
|
||
|
||
### Week 45 (Day 309-315) · DDoS 清洗设计
|
||
|
||
- [ ] **Day 309 (2027-05-03, 周一)** · ☕ 五一假期 — 留白
|
||
|
||
- [ ] **Day 310 (2027-05-04, 周二)** · ☕ 五一假期 — 留白
|
||
|
||
- [ ] **Day 311 (2027-05-05, 周三)** · ☕ 五一假期 — 留白
|
||
|
||
- [ ] **Day 312 (2027-05-06, 周四)** · 主题: 清洗设备需求
|
||
- 🔧 动手: 写 RFC (150min)
|
||
- 📤 产出: `docs/ddos-clean-rfc.md`
|
||
|
||
- [ ] **Day 313 (2027-05-07, 周五)** · 主题: 架构设计
|
||
- 🔧 动手: 画清洗 pipeline 图 (150min)
|
||
- 📤 产出: `docs/ddos-clean-arch.md`
|
||
|
||
- [ ] **Day 314 (2027-05-08, 周六)** · 主题: 大块实验 — 仓库脚手架
|
||
- 🔧 动手: 初始化 + Makefile (360min)
|
||
- 📤 产出: `code/ddos-clean/`
|
||
|
||
- [ ] **Day 315 (2027-05-09, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P4/W45-summary.md`
|
||
|
||
---
|
||
|
||
### Week 46 (Day 316-322) · SYN flood 防护
|
||
|
||
- [ ] **Day 316 (2027-05-10, 周一)** · 主题: SYN cookie 原理
|
||
- 📖 学习: cookie 生成算法 (90min)
|
||
- 📤 产出: `notes/P4/W46-D1-syn-cookie.md`
|
||
|
||
- [ ] **Day 317 (2027-05-11, 周二)** · 主题: SYN proxy 实现
|
||
- 🔧 动手: 实现 SYN proxy 数据面 (180min)
|
||
- 🐧 内核对照: 读 `net/netfilter/nf_synproxy_core.c` (30min)
|
||
- 📤 产出: commit "syn proxy"
|
||
|
||
- [ ] **Day 318 (2027-05-12, 周三)** · 主题: cookie 校验
|
||
- 🔧 动手: ACK 阶段校验 cookie (150min)
|
||
- 📤 产出: commit "cookie verify"
|
||
|
||
- [ ] **Day 319 (2027-05-13, 周四)** · 主题: 后端连接保持
|
||
- 🔧 动手: 与真实服务器建二段连接 (180min)
|
||
- 📤 产出: commit "splice"
|
||
|
||
- [ ] **Day 320 (2027-05-14, 周五)** · 主题: SYN 速率限制
|
||
- 🔧 动手: token bucket (120min)
|
||
- 📤 产出: commit "syn rate limit"
|
||
|
||
- [ ] **Day 321 (2027-05-15, 周六)** · 主题: 大块实验 — SYN flood 抗压
|
||
- 🔧 动手: dperf 打 5Mpps SYN flood (480min)
|
||
- 📤 产出: `perf-data/P4/W46-syn-stress.md`
|
||
|
||
- [ ] **Day 322 (2027-05-16, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P4/W46-summary.md`
|
||
|
||
---
|
||
|
||
### Week 47 (Day 323-329) · UDP flood 防护
|
||
|
||
- [ ] **Day 323 (2027-05-17, 周一)** · 主题: UDP rate limit
|
||
- 🔧 动手: 实现 per-src rate limit (150min)
|
||
- 📤 产出: commit "udp rate"
|
||
|
||
- [ ] **Day 324 (2027-05-18, 周二)** · 主题: payload signature
|
||
- 🔧 动手: 检测放大攻击特征 (150min)
|
||
- 🐧 内核对照: 读 `net/ipv4/udp.c::__udp4_lib_rcv` 看内核 UDP 主入口 (30min)
|
||
- 📤 产出: commit "udp sig"
|
||
|
||
- [ ] **Day 325 (2027-05-19, 周三)** · 主题: source validation
|
||
- 🔧 动手: BCP38 检查 (120min)
|
||
- 📤 产出: commit "bcp38"
|
||
|
||
- [ ] **Day 326 (2027-05-20, 周四)** · 主题: ICMP 防护
|
||
- 🔧 动手: ICMP rate + size limit (120min)
|
||
- 📤 产出: commit "icmp"
|
||
|
||
- [ ] **Day 327 (2027-05-21, 周五)** · 主题: fragmentation 防护
|
||
- 🔧 动手: frag 重组 + 限制 (120min)
|
||
- 📤 产出: commit "frag"
|
||
|
||
- [ ] **Day 328 (2027-05-22, 周六)** · 主题: 大块实验 — UDP flood 抗压
|
||
- 🔧 动手: 测 10Mpps UDP (480min)
|
||
- 📤 产出: `perf-data/P4/W47-udp-stress.md`
|
||
|
||
- [ ] **Day 329 (2027-05-23, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P4/W47-summary.md`
|
||
|
||
---
|
||
|
||
### Week 48 (Day 330-336) · reflection attack
|
||
|
||
- [ ] **Day 330 (2027-05-24, 周一)** · 主题: 反射攻击谱系
|
||
- 📖 学习: DNS/NTP/SSDP/Memcached (120min)
|
||
- 📤 产出: `notes/P4/W48-D1-reflection.md`
|
||
|
||
- [ ] **Day 331 (2027-05-25, 周二)** · 主题: DNS amp 检测
|
||
- 🔧 动手: 检测异常 DNS 响应 (150min)
|
||
- 🐧 内核对照: 读 `net/netfilter/nf_conntrack_helper.c` 看 conntrack helper (30min)
|
||
- 📤 产出: commit "dns amp"
|
||
|
||
- [ ] **Day 332 (2027-05-26, 周三)** · 主题: NTP monlist 防护
|
||
- 🔧 动手: 拦截 monlist (120min)
|
||
- 📤 产出: commit "ntp"
|
||
|
||
- [ ] **Day 333 (2027-05-27, 周四)** · 主题: Memcached 防护
|
||
- 🔧 动手: 11211 异常拦截 (120min)
|
||
- 📤 产出: commit "memcached"
|
||
|
||
- [ ] **Day 334 (2027-05-28, 周五)** · 主题: 反射特征库
|
||
- 🔧 动手: 整理特征库 yaml (120min)
|
||
- 📤 产出: `config/reflection.yaml`
|
||
|
||
- [ ] **Day 335 (2027-05-29, 周六)** · 主题: 大块实验 — 反射攻击 replay
|
||
- 🔧 动手: replay 真实反射 pcap (360min)
|
||
- 📤 产出: `perf-data/P4/W48-replay.md`
|
||
|
||
- [ ] **Day 336 (2027-05-30, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P4/W48-summary.md`
|
||
|
||
---
|
||
|
||
### Week 49 (Day 337-343) · 黑白名单 + ASN
|
||
|
||
- [ ] **Day 337 (2027-05-31, 周一)** · 主题: 月度复盘
|
||
- 📤 产出: `monthly/2027-05.md`
|
||
|
||
- [ ] **Day 338 (2027-06-01, 周二)** · 主题: IP 黑名单
|
||
- 🔧 动手: rte_lpm 加速黑名单 (180min)
|
||
- 🐧 内核对照: 读 `net/netfilter/ipset/ip_set_hash_ip.c` 看内核 ipset (30min)
|
||
- 📤 产出: commit "ip blacklist"
|
||
|
||
- [ ] **Day 339 (2027-06-02, 周三)** · 主题: GeoIP
|
||
- 🔧 动手: 集成 MaxMind (120min)
|
||
- 📤 产出: commit "geoip"
|
||
|
||
- [ ] **Day 340 (2027-06-03, 周四)** · 主题: ASN 阻断
|
||
- 🔧 动手: ASN 级 drop (120min)
|
||
- 📤 产出: commit "asn block"
|
||
|
||
- [ ] **Day 341 (2027-06-04, 周五)** · 主题: 白名单 fast path
|
||
- 🔧 动手: 白名单直通 (120min)
|
||
- 📤 产出: commit "whitelist"
|
||
|
||
- [ ] **Day 342 (2027-06-05, 周六)** · 主题: 大块实验 — 1 千万条规则
|
||
- 🔧 动手: 加载 1000 万 IP,看查表性能 (360min)
|
||
- 📤 产出: `perf-data/P4/W49-lpm-scale.md`
|
||
|
||
- [ ] **Day 343 (2027-06-06, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P4/W49-summary.md`
|
||
|
||
---
|
||
|
||
### Week 50 (Day 344-350) · 抗压测试
|
||
|
||
- [ ] **Day 344 (2027-06-07, 周一)** · 主题: 混合攻击测试
|
||
- 🔧 动手: SYN + UDP + HTTP 同时打 (180min)
|
||
- 📤 产出: `perf-data/P4/W50-D1-mixed.md`
|
||
|
||
- [ ] **Day 345 (2027-06-08, 周二)** · 主题: 长连接保持率
|
||
- 🔧 动手: 攻击时合法用户存活率 (180min)
|
||
- 🐧 内核对照: 读 `include/trace/events/net.h` 看内核网络 tracepoints (30min)
|
||
- 📤 产出: `perf-data/P4/W50-D2-survival.md`
|
||
|
||
- [ ] **Day 346 (2027-06-09, 周三)** · ☕ 端午假期 — 留白
|
||
|
||
- [ ] **Day 347 (2027-06-10, 周四)** · ☕ 端午假期 — 留白
|
||
|
||
- [ ] **Day 348 (2027-06-11, 周五)** · ☕ 端午假期 — 留白
|
||
|
||
- [ ] **Day 349 (2027-06-12, 周六)** · 主题: 大块实验 — 测试报告
|
||
- 🔧 动手: 整理完整测试报告 (480min)
|
||
- 📤 产出: `perf-data/P4/W50-report.md`
|
||
|
||
- [ ] **Day 350 (2027-06-13, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P4/W50-summary.md`
|
||
|
||
---
|
||
|
||
### Week 51 (Day 351-357) · 整体调优
|
||
|
||
- [ ] **Day 351 (2027-06-14, 周一)** · 主题: perf top
|
||
- 🔧 动手: 找热点 (150min)
|
||
- 📤 产出: `perf-data/P4/W51-D1-perf.md`
|
||
|
||
- [ ] **Day 352 (2027-06-15, 周二)** · 主题: 火焰图
|
||
- 🔧 动手: 生成调用栈火焰 (120min)
|
||
- 🐧 内核对照: 读 `kernel/bpf/verifier.c` 简述 BPF 校验器(了解 BPF 生态)(30min)
|
||
- 📤 产出: `flamegraph/W51-ddos.svg`
|
||
|
||
- [ ] **Day 353 (2027-06-16, 周三)** · 主题: cache 优化
|
||
- 🔧 动手: 优化数据结构布局 (180min)
|
||
- 📤 产出: commit "cache opt"
|
||
|
||
- [ ] **Day 354 (2027-06-17, 周四)** · 主题: 批量化
|
||
- 🔧 动手: 关键路径改批量 (180min)
|
||
- 📤 产出: commit "batch"
|
||
|
||
- [ ] **Day 355 (2027-06-18, 周五)** · 主题: 多核扩展
|
||
- 🔧 动手: 测 1/2/4/8 核扩展性 (180min)
|
||
- 📤 产出: `perf-data/P4/W51-D5-scale.md`
|
||
|
||
- [ ] **Day 356 (2027-06-19, 周六)** · 主题: 大块实验 — 极限冲线速
|
||
- 🔧 动手: 单机 100Gbps 入流量清洗 (480min)
|
||
- 📤 产出: `perf-data/P4/W51-100G.md`
|
||
|
||
- [ ] **Day 357 (2027-06-20, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P4/W51-summary.md`
|
||
|
||
---
|
||
|
||
### Week 52 (Day 358-364) · P4 总结
|
||
|
||
- [ ] **Day 358 (2027-06-21, 周一)** · 主题: 整理产出
|
||
- 🔧 动手: 组织 P4 文档 (180min)
|
||
- 📤 产出: `P4-final/`
|
||
|
||
- [ ] **Day 359 (2027-06-22, 周二)** · 主题: 技术博客 (1)
|
||
- 🔧 动手: "Suricata-DPDK 工程实战" (180min)
|
||
- 🐧 内核对照: 博客加对照 "AF_PACKET vs Suricata-DPDK" 章节 (30min)
|
||
- 📤 产出: `blog/P4-suricata.md`
|
||
|
||
- [ ] **Day 360 (2027-06-23, 周三)** · 主题: 技术博客 (2)
|
||
- 🔧 动手: "用 DPDK 抗 5Mpps SYN flood" (180min)
|
||
- 📤 产出: `blog/P4-syn-defense.md`
|
||
|
||
- [ ] **Day 361 (2027-06-24, 周四)** · 主题: 技术博客 (3)
|
||
- 🔧 动手: "DDoS 清洗设备数据面架构" (180min)
|
||
- 📤 产出: `blog/P4-ddos-arch.md`
|
||
|
||
- [ ] **Day 362 (2027-06-25, 周五)** · 主题: 简历 v4 + 晋升材料
|
||
- 🔧 动手: 准备晋升答辩材料 (180min)
|
||
- 📤 产出: `career/promotion-package.md`
|
||
|
||
- [ ] **Day 363 (2027-06-26, 周六)** · 主题: 大块实验 — 开源 ddos-clean
|
||
- 🔧 动手: GitHub release + 推广 (360min)
|
||
- 📤 产出: GitHub release
|
||
|
||
- [ ] **Day 364 (2027-06-27, 周日)** · 🎯 P4 阶段答辩
|
||
- 📤 产出: `P4-final/answer.md` + `P4-final/retro.md` + `monthly/2027-06.md`
|
||
|
||
---
|
||
|
||
# P5 · DPU 数据面架构 (M13-M15)
|
||
|
||
> **Day 365-455**, 2027-06-28 ~ 2027-09-26
|
||
> **核心目标**: PCIe + vDPA + rte_flow offload 全打通;输出一份 DPU 数据面架构设计文档(达到 DPU 厂商面试的水平)
|
||
|
||
## P5.0 阶段目标
|
||
|
||
1. PCIe 完全吃透:手动解码 BAR / 写最小 PCIe 驱动
|
||
2. vDPA 跑通 + 源码理解
|
||
3. rte_flow hardware offload 实测(CX5/CX6)
|
||
4. 调研 BlueField / Pensando / 国产 DPU
|
||
5. 写一份"自研 DPU 数据面架构"设计文档
|
||
|
||
## P5.1 关键交付物
|
||
|
||
- [ ] `notes/P5/` 13 周笔记
|
||
- [ ] `code/pcie-driver-demo/` 最小 PCIe 驱动
|
||
- [ ] `code/vdpa-demo/` vDPA 实验
|
||
- [ ] `docs/dpu-arch-design.md` DPU 架构设计文档(30+ 页)
|
||
|
||
## P5.1.5 🐧 本阶段内核对照清单(K7 深挖 + virtio 内核驱动)
|
||
|
||
> P5 是内核学习最密集的阶段:PCIe、VFIO、virtio-net、vhost 全在内核。
|
||
|
||
| 周 | 对照主题 | 内核源码路径 |
|
||
|---|---|---|
|
||
| W53 | 内核 PCIe 枚举 | `drivers/pci/probe.c::pci_scan_bus`, `access.c` |
|
||
| W54 | 内核 MSI/MSI-X + IOMMU | `drivers/pci/msi.c`, `drivers/iommu/` |
|
||
| W55 | 内核 pci_driver 完整生命周期 | `drivers/pci/pci-driver.c` |
|
||
| W56 | 内核 VFIO | `drivers/vfio/pci/vfio_pci_core.c` |
|
||
| W57 | 内核 virtio-net 驱动 | `drivers/net/virtio_net.c` |
|
||
| W58 | 内核 vhost | `drivers/vhost/net.c`, `vhost.c` |
|
||
| W59 | 内核 vDPA framework | `drivers/vdpa/vdpa.c`, `drivers/virtio/virtio_vdpa.c` |
|
||
| W60 | 内核 mlx5 driver 全览 | `drivers/net/ethernet/mellanox/mlx5/core/` |
|
||
| W61 | 内核 SR-IOV | `drivers/pci/iov.c` |
|
||
| W62 | 内核 DMA API | `kernel/dma/mapping.c` |
|
||
| W63 | 内核热迁移辅助 | `drivers/vfio/vfio_iommu_type1.c` migration |
|
||
| W64 | 内核 devlink (卸载配置) | `net/core/devlink.c` |
|
||
| W65 | 总结:DPU 数据面内核视角综述 | — |
|
||
|
||
## P5.2 周计划总览 (W53-W65)
|
||
|
||
| 周 | Day | 主题 | 里程碑 |
|
||
|---|---|---|---|
|
||
| W53 | 365-371 | PCIe 拓扑 + Config Space | 解码 BAR |
|
||
| W54 | 372-378 | PCIe MSI-X + DMA | DMA demo |
|
||
| W55 | 379-385 | 写最小 PCIe 驱动 | insmod 成功 |
|
||
| W56 | 386-392 | virtio-net 协议 | spec 精读 |
|
||
| W57 | 393-399 | vhost-user | qemu 接 OVS |
|
||
| W58 | 400-406 | vDPA 框架 | mdev 跑通 |
|
||
| W59 | 407-413 | vDPA driver 源码 | mlx5 vdpa |
|
||
| W60 | 414-420 | rte_flow offload | CX5 实测 |
|
||
| W61 | 421-427 | DPU 业界调研 | 厂商对比 |
|
||
| W62 | 428-434 | BlueField 深入 | DOCA 入门 |
|
||
| W63 | 435-441 | DPU 架构 RFC | 30 页设计 |
|
||
| W64 | 442-448 | 架构评审 + 模拟面试 | 答辩稿 |
|
||
| W65 | 449-455 | P5 总结 | 文档定稿 |
|
||
|
||
## P5.3 详细日计划
|
||
|
||
### Week 53 (Day 365-371) · PCIe 拓扑 + Config Space
|
||
|
||
- [ ] **Day 365 (2027-06-28, 周一)** · 主题: PCIe 总览
|
||
- 📖 学习: 《PCI Express 体系结构导读》Ch.1-2 (120min)
|
||
- 📤 产出: `notes/P5/W53-D1-pcie-overview.md`
|
||
|
||
- [ ] **Day 366 (2027-06-29, 周二)** · 主题: 拓扑探查
|
||
- 🔧 动手: `lspci -tv` 画本机拓扑图 (120min)
|
||
- 🐧 内核对照: 读 `drivers/pci/probe.c::pci_scan_bus` 看 PCIe 枚举 (45min)
|
||
- 📤 产出: `notes/P5/W53-D2-topo.md`
|
||
|
||
- [ ] **Day 367 (2027-06-30, 周三)** · 主题: Configuration Space
|
||
- 🔧 动手: `lspci -xxxx` 解码 X540 头部 (150min)
|
||
- 📤 产出: `notes/P5/W53-D3-cfg-space.md`
|
||
|
||
- [ ] **Day 368 (2027-07-01, 周四)** · 主题: BAR 解码
|
||
- 🔧 动手: 手动解码 BAR0-5 (120min)
|
||
- 📤 产出: `notes/P5/W53-D4-bar.md`
|
||
|
||
- [ ] **Day 369 (2027-07-02, 周五)** · 主题: Capability 链
|
||
- 🔧 动手: 遍历 Capability + Ext Capability (120min)
|
||
- 📤 产出: `notes/P5/W53-D5-cap.md`
|
||
|
||
- [ ] **Day 370 (2027-07-03, 周六)** · 主题: 大块实验 — setpci 实验
|
||
- 🔧 动手: 用 setpci 改寄存器观察现象 (360min)
|
||
- 📤 产出: `notes/P5/W53-D6-setpci.md`
|
||
|
||
- [ ] **Day 371 (2027-07-04, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P5/W53-summary.md`
|
||
|
||
---
|
||
|
||
### Week 54 (Day 372-378) · PCIe MSI-X + DMA
|
||
|
||
- [ ] **Day 372 (2027-07-05, 周一)** · 主题: MSI/MSI-X
|
||
- 📖 学习: spec + capability (120min)
|
||
- 📤 产出: `notes/P5/W54-D1-msix.md`
|
||
|
||
- [ ] **Day 373 (2027-07-06, 周二)** · 主题: MSI-X Table 定位
|
||
- 🔧 动手: 在 BAR 中找 MSI-X Table (120min)
|
||
- 🐧 内核对照: 读 `drivers/pci/msi.c::pci_alloc_irq_vectors` (45min)
|
||
- 📤 产出: `notes/P5/W54-D2-msix-table.md`
|
||
|
||
- [ ] **Day 374 (2027-07-07, 周三)** · 主题: DMA 概念
|
||
- 📖 学习: DMA address / IOVA / IOMMU (120min)
|
||
- 📤 产出: `notes/P5/W54-D3-dma.md`
|
||
|
||
- [ ] **Day 375 (2027-07-08, 周四)** · 主题: dma-buf / iommu
|
||
- 📖 学习: VFIO mode (120min)
|
||
- 📤 产出: `notes/P5/W54-D4-iommu.md`
|
||
|
||
- [ ] **Day 376 (2027-07-09, 周五)** · 主题: AER / ACS
|
||
- 📖 学习: Advanced Error Reporting (90min)
|
||
- 📤 产出: `notes/P5/W54-D5-aer.md`
|
||
|
||
- [ ] **Day 377 (2027-07-10, 周六)** · 主题: 大块实验 — IOMMU 实验
|
||
- 🔧 动手: 开关 IOMMU 跑 DPDK,观察行为 (360min)
|
||
- 📤 产出: `perf-data/P5/W54-iommu.md`
|
||
|
||
- [ ] **Day 378 (2027-07-11, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P5/W54-summary.md`
|
||
|
||
---
|
||
|
||
### Week 55 (Day 379-385) · 写最小 PCIe 驱动
|
||
|
||
- [ ] **Day 379 (2027-07-12, 周一)** · 主题: pci_driver 框架
|
||
- 📖 学习: `include/linux/pci.h` (120min)
|
||
- 📤 产出: `notes/P5/W55-D1-driver.md`
|
||
|
||
- [ ] **Day 380 (2027-07-13, 周二)** · 主题: probe + remove
|
||
- 🔧 动手: 写最小 probe (180min)
|
||
- 🐧 内核对照: 读 `drivers/pci/pci-driver.c::__pci_register_driver` (30min)
|
||
- 📤 产出: `code/pcie-driver-demo/main.c`
|
||
|
||
- [ ] **Day 381 (2027-07-14, 周三)** · 主题: ioremap BAR
|
||
- 🔧 动手: 映射 BAR 读寄存器 (180min)
|
||
- 📤 产出: commit "ioremap"
|
||
|
||
- [ ] **Day 382 (2027-07-15, 周四)** · 主题: MSI-X 申请
|
||
- 🔧 动手: pci_alloc_irq_vectors (180min)
|
||
- 📤 产出: commit "msix"
|
||
|
||
- [ ] **Day 383 (2027-07-16, 周五)** · 主题: 中断处理
|
||
- 🔧 动手: request_irq + handler (150min)
|
||
- 📤 产出: commit "irq handler"
|
||
|
||
- [ ] **Day 384 (2027-07-17, 周六)** · 主题: 大块实验 — 加载测试
|
||
- 🔧 动手: insmod 加载 + dmesg 观察 (360min)
|
||
- 📤 产出: `perf-data/P5/W55-load.md`
|
||
|
||
- [ ] **Day 385 (2027-07-18, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P5/W55-summary.md`
|
||
|
||
---
|
||
|
||
### Week 56 (Day 386-392) · virtio-net 协议
|
||
|
||
- [ ] **Day 386 (2027-07-19, 周一)** · 主题: virtio spec 总览
|
||
- 📖 学习: virtio 1.2 spec Ch.1-3 (150min)
|
||
- 📤 产出: `notes/P5/W56-D1-virtio.md`
|
||
|
||
- [ ] **Day 387 (2027-07-20, 周二)** · 主题: virtqueue
|
||
- 📖 学习: split / packed virtqueue (150min)
|
||
- 🐧 内核对照: 读 `drivers/net/virtio_net.c` 完整 RX/TX 路径 (45min)
|
||
- 📤 产出: `notes/P5/W56-D2-vq.md`
|
||
|
||
- [ ] **Day 388 (2027-07-21, 周三)** · 主题: feature bits
|
||
- 📖 学习: virtio-net 特性 (120min)
|
||
- 📤 产出: `notes/P5/W56-D3-features.md`
|
||
|
||
- [ ] **Day 389 (2027-07-22, 周四)** · 主题: virtio-net PMD
|
||
- 📖 学习: `drivers/net/virtio/` (150min)
|
||
- 📤 产出: `notes/P5/W56-D4-virtio-pmd.md`
|
||
|
||
- [ ] **Day 390 (2027-07-23, 周五)** · 主题: virtio mediator
|
||
- 📖 学习: vDPA mediator 角色 (90min)
|
||
- 📤 产出: `notes/P5/W56-D5-mediator.md`
|
||
|
||
- [ ] **Day 391 (2027-07-24, 周六)** · 主题: 大块实验 — 跑 virtio-user
|
||
- 🔧 动手: testpmd + virtio-user (360min)
|
||
- 📤 产出: `notes/P5/W56-D6-virtio-user.md`
|
||
|
||
- [ ] **Day 392 (2027-07-25, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P5/W56-summary.md`
|
||
|
||
---
|
||
|
||
### Week 57 (Day 393-399) · vhost-user
|
||
|
||
- [ ] **Day 393 (2027-07-26, 周一)** · 主题: vhost-user 协议
|
||
- 📖 学习: spec (120min)
|
||
- 📤 产出: `notes/P5/W57-D1-vhost.md`
|
||
|
||
- [ ] **Day 394 (2027-07-27, 周二)** · 主题: vhost-user 消息
|
||
- 📖 学习: 28 种 message (150min)
|
||
- 🐧 内核对照: 读 `drivers/vhost/net.c::vhost_net_open` (30min)
|
||
- 📤 产出: `notes/P5/W57-D2-msg.md`
|
||
|
||
- [ ] **Day 395 (2027-07-28, 周三)** · 主题: DPDK vhost lib
|
||
- 📖 学习: `lib/vhost/` (150min)
|
||
- 📤 产出: `notes/P5/W57-D3-vhost-lib.md`
|
||
|
||
- [ ] **Day 396 (2027-07-29, 周四)** · 主题: QEMU + vhost-user
|
||
- 🔧 动手: QEMU 接 OVS-DPDK 跑 VM (180min)
|
||
- 📤 产出: `notes/P5/W57-D4-qemu.md`
|
||
|
||
- [ ] **Day 397 (2027-07-30, 周五)** · 主题: VM 内 PMD
|
||
- 🔧 动手: VM 内跑 DPDK testpmd (120min)
|
||
- 📤 产出: `notes/P5/W57-D5-vm-pmd.md`
|
||
|
||
- [ ] **Day 398 (2027-07-31, 周六)** · 主题: 大块实验 — VM↔VM 性能
|
||
- 🔧 动手: 两 VM 互打,记录 PPS (360min)
|
||
- 📤 产出: `perf-data/P5/W57-vm-vm.md`
|
||
|
||
- [ ] **Day 399 (2027-08-01, 周日)** · ☕ 复盘 + 月度
|
||
- 📤 产出: `notes/P5/W57-summary.md` + `monthly/2027-07.md`
|
||
|
||
---
|
||
|
||
### Week 58 (Day 400-406) · vDPA 框架
|
||
|
||
- [ ] **Day 400 (2027-08-02, 周一)** · 主题: vDPA 概念
|
||
- 📖 学习: vDPA = virtio data path acceleration (120min)
|
||
- 📤 产出: `notes/P5/W58-D1-vdpa.md`
|
||
|
||
- [ ] **Day 401 (2027-08-03, 周二)** · 主题: vDPA 架构
|
||
- 📖 学习: kernel vDPA framework (150min)
|
||
- 🐧 内核对照: 读 `drivers/vdpa/vdpa.c` + `drivers/virtio/virtio_vdpa.c` (45min)
|
||
- 📤 产出: `notes/P5/W58-D2-arch.md`
|
||
|
||
- [ ] **Day 402 (2027-08-04, 周三)** · 主题: mdev / vhost-vdpa
|
||
- 📖 学习: 两种暴露方式 (120min)
|
||
- 📤 产出: `notes/P5/W58-D3-mdev.md`
|
||
|
||
- [ ] **Day 403 (2027-08-05, 周四)** · 主题: DPDK vdpa lib
|
||
- 📖 学习: `lib/vhost/vdpa.c` (120min)
|
||
- 📤 产出: `notes/P5/W58-D4-dpdk-vdpa.md`
|
||
|
||
- [ ] **Day 404 (2027-08-06, 周五)** · 主题: 业界 vDPA 实现
|
||
- 📖 学习: Mellanox / Intel vDPA (120min)
|
||
- 📤 产出: `notes/P5/W58-D5-impl.md`
|
||
|
||
- [ ] **Day 405 (2027-08-07, 周六)** · 主题: 大块实验 — 跑 vdpa example
|
||
- 🔧 动手: examples/vdpa 跑通 (360min)
|
||
- 📤 产出: `notes/P5/W58-D6-example.md`
|
||
|
||
- [ ] **Day 406 (2027-08-08, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P5/W58-summary.md`
|
||
|
||
---
|
||
|
||
### Week 59 (Day 407-413) · vDPA driver 源码
|
||
|
||
- [ ] **Day 407 (2027-08-09, 周一)** · 主题: mlx5 vdpa 总览
|
||
- 📖 学习: `drivers/vdpa/mlx5/` (120min)
|
||
- 📤 产出: `notes/P5/W59-D1-mlx5.md`
|
||
|
||
- [ ] **Day 408 (2027-08-10, 周二)** · 主题: 设备初始化
|
||
- 📖 学习: probe + setup (150min)
|
||
- 🐧 内核对照: 读 `drivers/net/ethernet/mellanox/mlx5/core/main.c` (45min)
|
||
- 📤 产出: `notes/P5/W59-D2-init.md`
|
||
|
||
- [ ] **Day 409 (2027-08-11, 周三)** · 主题: virtq 卸载
|
||
- 📖 学习: 如何把 virtqueue 映射到 HW (180min)
|
||
- 📤 产出: `notes/P5/W59-D3-virtq-offload.md`
|
||
|
||
- [ ] **Day 410 (2027-08-12, 周四)** · 主题: 控制消息
|
||
- 📖 学习: 状态变更处理 (120min)
|
||
- 📤 产出: `notes/P5/W59-D4-ctrl.md`
|
||
|
||
- [ ] **Day 411 (2027-08-13, 周五)** · 主题: live migration
|
||
- 📖 学习: vDPA 热迁移机制 (120min)
|
||
- 📤 产出: `notes/P5/W59-D5-migration.md`
|
||
|
||
- [ ] **Day 412 (2027-08-14, 周六)** · 主题: 大块实验 — 跑 mlx5 vDPA(若有)
|
||
- 🔧 动手: 若有 CX5/CX6,实跑 (360min)
|
||
- 📤 产出: `perf-data/P5/W59-mlx5-vdpa.md`
|
||
|
||
- [ ] **Day 413 (2027-08-15, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P5/W59-summary.md`
|
||
|
||
---
|
||
|
||
### Week 60 (Day 414-420) · rte_flow offload
|
||
|
||
- [ ] **Day 414 (2027-08-16, 周一)** · 主题: rte_flow API 复习
|
||
- 📖 学习: pattern / action / attr (120min)
|
||
- 📤 产出: `notes/P5/W60-D1-rteflow.md`
|
||
|
||
- [ ] **Day 415 (2027-08-17, 周二)** · 主题: flow 探测能力
|
||
- 🔧 动手: rte_flow_validate 探测 (120min)
|
||
- 🐧 内核对照: 读 `drivers/pci/iov.c` 看内核 SR-IOV VF 创建 (30min)
|
||
- 📤 产出: `notes/P5/W60-D2-cap.md`
|
||
|
||
- [ ] **Day 416 (2027-08-18, 周三)** · 主题: 5-tuple 卸载
|
||
- 🔧 动手: 把 5-tuple 卸到 HW (180min)
|
||
- 📤 产出: commit "5tuple offload"
|
||
|
||
- [ ] **Day 417 (2027-08-19, 周四)** · 主题: RSS action
|
||
- 🔧 动手: rss action 配置 (120min)
|
||
- 📤 产出: commit "rss action"
|
||
|
||
- [ ] **Day 418 (2027-08-20, 周五)** · 主题: counter / meter
|
||
- 🔧 动手: 卸载 counter (120min)
|
||
- 📤 产出: commit "counter"
|
||
|
||
- [ ] **Day 419 (2027-08-21, 周六)** · 主题: 大块实验 — offload 性能对比
|
||
- 🔧 动手: SW vs HW 路径 PPS 对比 (480min)
|
||
- 📤 产出: `perf-data/P5/W60-offload.md`
|
||
|
||
- [ ] **Day 420 (2027-08-22, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P5/W60-summary.md`
|
||
|
||
---
|
||
|
||
### Week 61 (Day 421-427) · DPU 业界调研
|
||
|
||
- [ ] **Day 421 (2027-08-23, 周一)** · 主题: BlueField 1/2/3
|
||
- 📖 学习: NVIDIA 文档 (150min)
|
||
- 📤 产出: `notes/P5/W61-D1-bf.md`
|
||
|
||
- [ ] **Day 422 (2027-08-24, 周二)** · 主题: Pensando DSC
|
||
- 📖 学习: Pensando 架构 (120min)
|
||
- 🐧 内核对照: 读 `kernel/dma/mapping.c` DMA API (30min)
|
||
- 📤 产出: `notes/P5/W61-D2-pensando.md`
|
||
|
||
- [ ] **Day 423 (2027-08-25, 周三)** · 主题: AWS Nitro
|
||
- 📖 学习: re:Invent talks (120min)
|
||
- 📤 产出: `notes/P5/W61-D3-nitro.md`
|
||
|
||
- [ ] **Day 424 (2027-08-26, 周四)** · 主题: Azure SmartNIC (AccelNet)
|
||
- 📖 学习: NSDI'18 论文 (120min)
|
||
- 📤 产出: `notes/P5/W61-D4-accelnet.md`
|
||
|
||
- [ ] **Day 425 (2027-08-27, 周五)** · 主题: 国产 DPU
|
||
- 📖 学习: 中科驭数 / 云豹 / 星云 (120min)
|
||
- 📤 产出: `notes/P5/W61-D5-cn-dpu.md`
|
||
|
||
- [ ] **Day 426 (2027-08-28, 周六)** · 主题: 大块实验 — 厂商对比矩阵
|
||
- 🔧 动手: 写一份对比表(功能/性能/SDK/开放度)(360min)
|
||
- 📤 产出: `notes/P5/W61-D6-matrix.md`
|
||
|
||
- [ ] **Day 427 (2027-08-29, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P5/W61-summary.md`
|
||
|
||
---
|
||
|
||
### Week 62 (Day 428-434) · BlueField 深入
|
||
|
||
- [ ] **Day 428 (2027-08-30, 周一)** · 主题: DOCA 总览
|
||
- 📖 学习: DOCA SDK 文档 (150min)
|
||
- 📤 产出: `notes/P5/W62-D1-doca.md`
|
||
|
||
- [ ] **Day 429 (2027-08-31, 周二)** · 主题: DOCA Flow
|
||
- 📖 学习: DOCA Flow API (150min)
|
||
- 🐧 内核对照: 读 `drivers/vfio/vfio_iommu_type1.c` 看 vfio 迁移辅助 (30min)
|
||
- 📤 产出: `notes/P5/W62-D2-doca-flow.md`
|
||
|
||
- [ ] **Day 430 (2027-09-01, 周三)** · 主题: DOCA App Shield / DPI
|
||
- 📖 学习: 安全相关组件 (120min)
|
||
- 📤 产出: `notes/P5/W62-D3-app-shield.md`
|
||
|
||
- [ ] **Day 431 (2027-09-02, 周四)** · 主题: ARM SoC 调度
|
||
- 📖 学习: BlueField ARM 核分工 (120min)
|
||
- 📤 产出: `notes/P5/W62-D4-arm.md`
|
||
|
||
- [ ] **Day 432 (2027-09-03, 周五)** · 主题: BlueField 模式
|
||
- 📖 学习: Separated / Embedded / SmartNIC (120min)
|
||
- 📤 产出: `notes/P5/W62-D5-modes.md`
|
||
|
||
- [ ] **Day 433 (2027-09-04, 周六)** · 主题: 大块实验 — DOCA hello(若无硬件则模拟)
|
||
- 🔧 动手: 跑 DOCA 示例(无硬件则读源码)(360min)
|
||
- 📤 产出: `notes/P5/W62-D6-doca-hello.md`
|
||
|
||
- [ ] **Day 434 (2027-09-05, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P5/W62-summary.md`
|
||
|
||
---
|
||
|
||
### Week 63 (Day 435-441) · DPU 架构 RFC
|
||
|
||
- [ ] **Day 435 (2027-09-06, 周一)** · 主题: 设计目标
|
||
- 🔧 动手: 写 motivation + 目标 (180min)
|
||
- 📤 产出: `docs/dpu-arch-design.md` (1)
|
||
|
||
- [ ] **Day 436 (2027-09-07, 周二)** · 主题: 数据面架构
|
||
- 🔧 动手: 画 fast path / slow path 图 (180min)
|
||
- 🐧 内核对照: 读 `net/core/devlink.c` 看内核 devlink 卸载配置接口 (30min)
|
||
- 📤 产出: `docs/dpu-arch-design.md` (2)
|
||
|
||
- [ ] **Day 437 (2027-09-08, 周三)** · 主题: 卸载分层
|
||
- 🔧 动手: 写 HW / FW / SW 三层卸载策略 (180min)
|
||
- 📤 产出: `docs/dpu-arch-design.md` (3)
|
||
|
||
- [ ] **Day 438 (2027-09-09, 周四)** · 主题: 控制面
|
||
- 🔧 动手: 控制器接口设计 (180min)
|
||
- 📤 产出: `docs/dpu-arch-design.md` (4)
|
||
|
||
- [ ] **Day 439 (2027-09-10, 周五)** · 主题: 多租户隔离
|
||
- 🔧 动手: SR-IOV / SF / VF 设计 (150min)
|
||
- 📤 产出: `docs/dpu-arch-design.md` (5)
|
||
|
||
- [ ] **Day 440 (2027-09-11, 周六)** · 主题: 大块实验 — 性能模型
|
||
- 🔧 动手: 算 PPS / 带宽 / 时延预算 (360min)
|
||
- 📤 产出: `docs/dpu-arch-design.md` (6)
|
||
|
||
- [ ] **Day 441 (2027-09-12, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P5/W63-summary.md`
|
||
|
||
---
|
||
|
||
### Week 64 (Day 442-448) · 架构评审 + 模拟面试
|
||
|
||
- [ ] **Day 442 (2027-09-13, 周一)** · 主题: 自评审
|
||
- 🔧 动手: 自己挑漏洞 (180min)
|
||
- 📤 产出: `docs/dpu-arch-design-review.md`
|
||
|
||
- [ ] **Day 443 (2027-09-14, 周二)** · 主题: 同行评审准备
|
||
- 🔧 动手: 发给同行/导师评审 (120min)
|
||
- 🐧 内核对照: 综述"DPU 数据面从内核视角看" — 在设计文档补一节 (60min)
|
||
- 📤 产出: review 邮件 + 内核视角综述章节
|
||
|
||
- [ ] **Day 444 (2027-09-15, 周三)** · 主题: 答辩稿 v1
|
||
- 🔧 动手: 写 PPT/Keynote 草稿 (180min)
|
||
- 📤 产出: `slides/dpu-arch.pdf`
|
||
|
||
- [ ] **Day 445 (2027-09-16, 周四)** · 主题: 模拟面试 (1)
|
||
- 🔧 动手: 自我陈述 + Q&A 30 问 (180min)
|
||
- 📤 产出: `career/mock-interview-1.md`
|
||
|
||
- [ ] **Day 446 (2027-09-17, 周五)** · 主题: 模拟面试 (2)
|
||
- 🔧 动手: 找朋友模拟 (150min)
|
||
- 📤 产出: `career/mock-interview-2.md`
|
||
|
||
- [ ] **Day 447 (2027-09-18, 周六)** · 主题: 大块实验 — 答辩稿定稿
|
||
- 🔧 动手: 反复打磨 PPT + 文档 (480min)
|
||
- 📤 产出: 定稿 slides
|
||
|
||
- [ ] **Day 448 (2027-09-19, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P5/W64-summary.md`
|
||
|
||
---
|
||
|
||
### Week 65 (Day 449-455) · P5 总结
|
||
|
||
- [ ] **Day 449 (2027-09-20, 周一)** · 主题: 整理产出
|
||
- 🔧 动手: 组织 P5 文档 (180min)
|
||
- 📤 产出: `P5-final/`
|
||
|
||
- [ ] **Day 450 (2027-09-21, 周二)** · 主题: 技术博客 (1)
|
||
- 🔧 动手: "从 0 看懂 PCIe + vDPA" (180min)
|
||
- 🐧 内核对照: 博客中同时讲内核 vDPA 与 DPDK vDPA 对照 (30min)
|
||
- 📤 产出: `blog/P5-pcie-vdpa.md`
|
||
|
||
- [ ] **Day 451 (2027-09-22, 周三)** · 主题: 技术博客 (2)
|
||
- 🔧 动手: "DPU 数据面架构设计要点" (180min)
|
||
- 📤 产出: `blog/P5-dpu-arch.md`
|
||
|
||
- [ ] **Day 452 (2027-09-23, 周四)** · 主题: 简历 v5
|
||
- 🔧 动手: 把 P5 加入简历 (120min)
|
||
- 📤 产出: `career/resume-v5.md`
|
||
|
||
- [ ] **Day 453 (2027-09-24, 周五)** · 主题: 投递准备
|
||
- 🔧 动手: 列目标公司 + JD 分析 (180min)
|
||
- 📤 产出: `career/target-companies.md`
|
||
|
||
- [ ] **Day 454 (2027-09-25, 周六)** · 主题: 大块实验 — 简历定稿
|
||
- 🔧 动手: 简历定稿 + cover letter 模板 (360min)
|
||
- 📤 产出: `career/resume-final.md`
|
||
|
||
- [ ] **Day 455 (2027-09-26, 周日)** · 🎯 P5 阶段答辩
|
||
- 📤 产出: `P5-final/answer.md` + `P5-final/retro.md` + `monthly/2027-09.md`
|
||
|
||
---
|
||
|
||
# P6 · 作品收口 + 出口 (M16-M18)
|
||
|
||
> **Day 456-546**, 2027-09-27 ~ 2027-12-27
|
||
> **核心目标**: 把 18 个月所有产出收口,做出 1 个高质量开源项目、3 篇深度博客、1 套面试材料,正式投递目标公司或申报晋升
|
||
|
||
## P6.0 阶段目标
|
||
|
||
1. 挑选 1 个最有沉淀的项目(`libmtcp-v3` / `sai-dpdk-mini` / `dpdk-lb` / `ddos-clean`)做开源升级
|
||
2. 写出 3 篇引爆型博客(可推阿里云开发者社区/InfoQ/掘金/知乎)
|
||
3. 准备完整面试材料:自我介绍 / 项目深度 / 系统设计 / 八股
|
||
4. 投递目标公司 + 跟进
|
||
5. 准备晋升答辩材料(若选晋升路线)
|
||
|
||
## P6.1 关键交付物
|
||
|
||
- [ ] 1 个 GitHub Star ≥ 100 的开源项目
|
||
- [ ] 3 篇技术博客(每篇 PV ≥ 5000 目标)
|
||
- [ ] 1 份 8-10 页简历
|
||
- [ ] 1 套面试题库(200+ Q&A)
|
||
- [ ] 拿到 offer 或晋升通过
|
||
|
||
## P6.1.5 🐧 本阶段内核相关准备
|
||
|
||
P6 阶段不再新增内核学习,而是**整理**:
|
||
|
||
- 面试题库中单开一列 "内核 vs DPDK" 对照题 (~20 道)
|
||
- 简历技能栏加 "Linux 内核网络栈 (net_device / netlink / conntrack / vfio / vdpa)"
|
||
- 收尾博客 "18 个月成长" 中重点讲 "为什么 DPDK 工程师必须懂内核"
|
||
- 系统设计题准备时,凡涉及网络的都要有内核视角
|
||
- 面试自我介绍中主动提 "读过 XX 个内核网络子系统源码"
|
||
|
||
## P6.2 周计划总览 (W66-W78)
|
||
|
||
| 周 | Day | 主题 | 里程碑 |
|
||
|---|---|---|---|
|
||
| W66 | 456-462 | 选定开源主项目 | 项目选型 |
|
||
| W67 | 463-469 | 项目代码 review | issue 列表 |
|
||
| W68 | 470-476 | 项目重构 + 文档 | v1.0 release |
|
||
| W69 | 477-483 | CI + 测试 + benchmark | 完整 ci |
|
||
| W70 | 484-490 | 引爆博客 (1) | 发布 |
|
||
| W71 | 491-497 | 引爆博客 (2) | 发布 |
|
||
| W72 | 498-504 | 引爆博客 (3) | 发布 |
|
||
| W73 | 505-511 | 简历定稿 | 8-10 页 |
|
||
| W74 | 512-518 | 面试题库 (1) | 100 题 |
|
||
| W75 | 519-525 | 面试题库 (2) | 200 题 |
|
||
| W76 | 526-532 | 系统设计 + 模拟面试 | 答辩稿 |
|
||
| W77 | 533-539 | 投递 + 一面/二面 | 进展跟踪 |
|
||
| W78 | 540-546 | 收口 + 决策 | offer / 续航 |
|
||
|
||
## P6.3 详细日计划
|
||
|
||
### Week 66 (Day 456-462) · 选定开源主项目
|
||
|
||
- [ ] **Day 456 (2027-09-27, 周一)** · 主题: 项目盘点
|
||
- 🔧 动手: 把 4 个候选项目列优缺点 (180min)
|
||
- 📤 产出: `P6/project-eval.md`
|
||
|
||
- [ ] **Day 457 (2027-09-28, 周二)** · 主题: 受众分析
|
||
- 🔧 动手: 判断哪个最有人用 (120min)
|
||
- 📤 产出: `P6/audience.md`
|
||
|
||
- [ ] **Day 458 (2027-09-29, 周三)** · 主题: 选定 + RFC
|
||
- 🔧 动手: 写主项目 v1.0 RFC (180min)
|
||
- 📤 产出: `P6/main-project-rfc.md`
|
||
|
||
- [ ] **Day 459 (2027-09-30, 周四)** · 主题: 月度复盘
|
||
- 📤 产出: `monthly/2027-09.md`
|
||
|
||
- [ ] **Day 460 (2027-10-01, 周五)** · ☕ 国庆假期 — 留白
|
||
|
||
- [ ] **Day 461 (2027-10-02, 周六)** · ☕ 国庆假期 — 留白
|
||
|
||
- [ ] **Day 462 (2027-10-03, 周日)** · ☕ 国庆假期 — 留白
|
||
|
||
---
|
||
|
||
### Week 67 (Day 463-469) · 项目代码 review
|
||
|
||
- [ ] **Day 463 (2027-10-04, 周一)** · ☕ 国庆假期 — 留白
|
||
|
||
- [ ] **Day 464 (2027-10-05, 周二)** · ☕ 国庆假期 — 留白
|
||
|
||
- [ ] **Day 465 (2027-10-06, 周三)** · ☕ 国庆假期 — 留白
|
||
|
||
- [ ] **Day 466 (2027-10-07, 周四)** · ☕ 国庆假期 — 留白
|
||
|
||
- [ ] **Day 467 (2027-10-08, 周五)** · 主题: 代码 review (1)
|
||
- 🔧 动手: 通读主项目代码挑问题 (180min)
|
||
- 📤 产出: `P6/code-review-issues.md`
|
||
|
||
- [ ] **Day 468 (2027-10-09, 周六)** · 主题: 大块实验 — 代码 review (2)
|
||
- 🔧 动手: 列出 issue 优先级 (360min)
|
||
- 📤 产出: GitHub Issues 创建
|
||
|
||
- [ ] **Day 469 (2027-10-10, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P6/W67-summary.md`
|
||
|
||
---
|
||
|
||
### Week 68 (Day 470-476) · 项目重构 + 文档
|
||
|
||
- [ ] **Day 470 (2027-10-11, 周一)** · 主题: 接口重构
|
||
- 🔧 动手: 优化 API (180min)
|
||
- 📤 产出: commit "api refactor"
|
||
|
||
- [ ] **Day 471 (2027-10-12, 周二)** · 主题: 内部代码清理
|
||
- 🔧 动手: 去 warning + 加注释 (180min)
|
||
- 📤 产出: commit "cleanup"
|
||
|
||
- [ ] **Day 472 (2027-10-13, 周三)** · 主题: README 英文版
|
||
- 🔧 动手: 写英文 README (180min)
|
||
- 📤 产出: `README.md` (en)
|
||
|
||
- [ ] **Day 473 (2027-10-14, 周四)** · 主题: 架构图
|
||
- 🔧 动手: 画专业的架构图 (180min)
|
||
- 📤 产出: `docs/architecture.png`
|
||
|
||
- [ ] **Day 474 (2027-10-15, 周五)** · 主题: 使用文档
|
||
- 🔧 动手: 写 quick start + tutorial (180min)
|
||
- 📤 产出: `docs/getting-started.md`
|
||
|
||
- [ ] **Day 475 (2027-10-16, 周六)** · 主题: 大块实验 — v1.0 release
|
||
- 🔧 动手: 打 tag + release note (360min)
|
||
- 📤 产出: GitHub Release v1.0
|
||
|
||
- [ ] **Day 476 (2027-10-17, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P6/W68-summary.md`
|
||
|
||
---
|
||
|
||
### Week 69 (Day 477-483) · CI + 测试 + benchmark
|
||
|
||
- [ ] **Day 477 (2027-10-18, 周一)** · 主题: GitHub Actions
|
||
- 🔧 动手: 加 CI 编译 (150min)
|
||
- 📤 产出: `.github/workflows/build.yml`
|
||
|
||
- [ ] **Day 478 (2027-10-19, 周二)** · 主题: 单元测试
|
||
- 🔧 动手: 补单测覆盖 (180min)
|
||
- 📤 产出: commit "unit tests"
|
||
|
||
- [ ] **Day 479 (2027-10-20, 周三)** · 主题: 集成测试
|
||
- 🔧 动手: e2e 测试脚本 (180min)
|
||
- 📤 产出: commit "e2e tests"
|
||
|
||
- [ ] **Day 480 (2027-10-21, 周四)** · 主题: benchmark suite
|
||
- 🔧 动手: 标准化压测脚本 (180min)
|
||
- 📤 产出: `benchmarks/`
|
||
|
||
- [ ] **Day 481 (2027-10-22, 周五)** · 主题: 性能曲线图
|
||
- 🔧 动手: matplotlib 出图 (150min)
|
||
- 📤 产出: `benchmarks/results.png`
|
||
|
||
- [ ] **Day 482 (2027-10-23, 周六)** · 主题: 大块实验 — Docker 镜像
|
||
- 🔧 动手: Dockerfile + 一键运行 (360min)
|
||
- 📤 产出: Docker Hub 镜像
|
||
|
||
- [ ] **Day 483 (2027-10-24, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P6/W69-summary.md`
|
||
|
||
---
|
||
|
||
### Week 70 (Day 484-490) · 引爆博客 (1)
|
||
|
||
- [ ] **Day 484 (2027-10-25, 周一)** · 主题: 选题 + 大纲
|
||
- 🔧 动手: 写大纲 (120min)
|
||
- 📤 产出: `blog/outline-1.md`
|
||
|
||
- [ ] **Day 485 (2027-10-26, 周二)** · 主题: 一稿
|
||
- 🔧 动手: 写一稿 (180min)
|
||
- 📤 产出: `blog/draft-1.md`
|
||
|
||
- [ ] **Day 486 (2027-10-27, 周三)** · 主题: 配图
|
||
- 🔧 动手: 画 5-10 张图 (180min)
|
||
- 📤 产出: `blog/images-1/`
|
||
|
||
- [ ] **Day 487 (2027-10-28, 周四)** · 主题: 二稿 + 校对
|
||
- 🔧 动手: 打磨 (180min)
|
||
- 📤 产出: `blog/final-1.md`
|
||
|
||
- [ ] **Day 488 (2027-10-29, 周五)** · 主题: 发布
|
||
- 🔧 动手: 发到知乎 / 掘金 / InfoQ (120min)
|
||
- 📤 产出: 博客链接
|
||
|
||
- [ ] **Day 489 (2027-10-30, 周六)** · 主题: 大块实验 — 推广 + 答疑
|
||
- 🔧 动手: 各群分享 + 回复评论 (240min)
|
||
- 📤 产出: 数据快照
|
||
|
||
- [ ] **Day 490 (2027-10-31, 周日)** · ☕ 复盘 + 月度
|
||
- 📤 产出: `notes/P6/W70-summary.md` + `monthly/2027-10.md`
|
||
|
||
---
|
||
|
||
### Week 71 (Day 491-497) · 引爆博客 (2)
|
||
|
||
- [ ] **Day 491 (2027-11-01, 周一)** · 主题: 选题 (2)
|
||
- 🔧 动手: 大纲 (120min)
|
||
- 📤 产出: `blog/outline-2.md`
|
||
|
||
- [ ] **Day 492 (2027-11-02, 周二)** · 主题: 一稿
|
||
- 🔧 动手: 写 (180min)
|
||
- 📤 产出: `blog/draft-2.md`
|
||
|
||
- [ ] **Day 493 (2027-11-03, 周三)** · 主题: 配图
|
||
- 🔧 动手: 出图 (180min)
|
||
- 📤 产出: `blog/images-2/`
|
||
|
||
- [ ] **Day 494 (2027-11-04, 周四)** · 主题: 二稿
|
||
- 🔧 动手: 打磨 (180min)
|
||
- 📤 产出: `blog/final-2.md`
|
||
|
||
- [ ] **Day 495 (2027-11-05, 周五)** · 主题: 发布
|
||
- 🔧 动手: 多平台发布 (120min)
|
||
- 📤 产出: 链接
|
||
|
||
- [ ] **Day 496 (2027-11-06, 周六)** · 主题: 大块实验 — 推广
|
||
- 🔧 动手: 推广 + 答疑 (240min)
|
||
- 📤 产出: 数据快照
|
||
|
||
- [ ] **Day 497 (2027-11-07, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P6/W71-summary.md`
|
||
|
||
---
|
||
|
||
### Week 72 (Day 498-504) · 引爆博客 (3)
|
||
|
||
- [ ] **Day 498 (2027-11-08, 周一)** · 主题: 选题 (3) — 终极博客
|
||
- 🔧 动手: 大纲:"18 个月从 DPDK 用户到 DPU 架构师" (120min)
|
||
- 📤 产出: `blog/outline-3.md`
|
||
|
||
- [ ] **Day 499 (2027-11-09, 周二)** · 主题: 一稿
|
||
- 🔧 动手: 写 (180min)
|
||
- 📤 产出: `blog/draft-3.md`
|
||
|
||
- [ ] **Day 500 (2027-11-10, 周三)** · 主题: 配图 + 项目集
|
||
- 🔧 动手: 出项目集大图 (180min)
|
||
- 📤 产出: `blog/images-3/`
|
||
|
||
- [ ] **Day 501 (2027-11-11, 周四)** · 主题: 二稿
|
||
- 🔧 动手: 打磨 (180min)
|
||
- 📤 产出: `blog/final-3.md`
|
||
|
||
- [ ] **Day 502 (2027-11-12, 周五)** · 主题: 发布
|
||
- 🔧 动手: 全平台 (120min)
|
||
- 📤 产出: 链接
|
||
|
||
- [ ] **Day 503 (2027-11-13, 周六)** · 主题: 大块实验 — 全网推广
|
||
- 🔧 动手: 推广 + GitHub Trending (240min)
|
||
- 📤 产出: 数据快照
|
||
|
||
- [ ] **Day 504 (2027-11-14, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P6/W72-summary.md`
|
||
|
||
---
|
||
|
||
### Week 73 (Day 505-511) · 简历定稿
|
||
|
||
- [ ] **Day 505 (2027-11-15, 周一)** · 主题: 简历重写 (1)
|
||
- 🔧 动手: 项目栏 (180min)
|
||
- 📤 产出: `career/resume-v6.md`
|
||
|
||
- [ ] **Day 506 (2027-11-16, 周二)** · 主题: 简历重写 (2)
|
||
- 🔧 动手: 技能栏 + 学历 (150min)
|
||
- 📤 产出: `career/resume-v6.md`
|
||
|
||
- [ ] **Day 507 (2027-11-17, 周三)** · 主题: 简历定量化
|
||
- 🔧 动手: 把每个项目改成"动词+数字+技术"格式 (180min)
|
||
- 📤 产出: `career/resume-v6.md`
|
||
|
||
- [ ] **Day 508 (2027-11-18, 周四)** · 主题: PDF 排版
|
||
- 🔧 动手: typora/latex 美化 (180min)
|
||
- 📤 产出: `career/resume.pdf`
|
||
|
||
- [ ] **Day 509 (2027-11-19, 周五)** · 主题: 多版本简历
|
||
- 🔧 动手: 大厂版 / DPU 厂商版 / 安全版 (180min)
|
||
- 📤 产出: `career/resume-{bigtech,dpu,security}.pdf`
|
||
|
||
- [ ] **Day 510 (2027-11-20, 周六)** · 主题: 大块实验 — 简历找朋友 review
|
||
- 🔧 动手: 发 3-5 个同行 review,收集意见 (240min)
|
||
- 📤 产出: review 意见汇总
|
||
|
||
- [ ] **Day 511 (2027-11-21, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P6/W73-summary.md`
|
||
|
||
---
|
||
|
||
### Week 74 (Day 512-518) · 面试题库 (1)
|
||
|
||
- [ ] **Day 512 (2027-11-22, 周一)** · 主题: DPDK 基础题
|
||
- 🔧 动手: 30 道题 + 答案 (180min)
|
||
- 📤 产出: `career/qa-dpdk-basic.md`
|
||
|
||
- [ ] **Day 513 (2027-11-23, 周二)** · 主题: DPDK 进阶题
|
||
- 🔧 动手: 30 道题 (180min)
|
||
- 📤 产出: `career/qa-dpdk-adv.md`
|
||
|
||
- [ ] **Day 514 (2027-11-24, 周三)** · 主题: SONiC/SAI 题
|
||
- 🔧 动手: 20 道题 (150min)
|
||
- 📤 产出: `career/qa-sonic.md`
|
||
|
||
- [ ] **Day 515 (2027-11-25, 周四)** · 主题: Linux 内核网络
|
||
- 🔧 动手: 20 道题 (150min)
|
||
- 🐧 内核对照: 补充 20 道 "内核 vs DPDK 对照题"(skb/mbuf、napi/PMD、tc/rte_flow、netlink/sairedis)(60min)
|
||
- 📤 产出: `career/qa-kernel.md`(含 20 内核题 + 20 对照题)
|
||
|
||
- [ ] **Day 516 (2027-11-26, 周五)** · 主题: 操作系统/网络八股
|
||
- 🔧 动手: 30 道经典题 (180min)
|
||
- 📤 产出: `career/qa-classic.md`
|
||
|
||
- [ ] **Day 517 (2027-11-27, 周六)** · 主题: 大块实验 — 集中复习
|
||
- 🔧 动手: 复习上述全部 (480min)
|
||
- 📤 产出: `career/review-1.md`
|
||
|
||
- [ ] **Day 518 (2027-11-28, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P6/W74-summary.md`
|
||
|
||
---
|
||
|
||
### Week 75 (Day 519-525) · 面试题库 (2)
|
||
|
||
- [ ] **Day 519 (2027-11-29, 周一)** · 主题: 项目深度题 (libmtcp)
|
||
- 🔧 动手: 20 道项目深挖题 + 答案 (180min)
|
||
- 📤 产出: `career/qa-project-libmtcp.md`
|
||
|
||
- [ ] **Day 520 (2027-11-30, 周二)** · 主题: 项目深度题 (sai-dpdk-mini)
|
||
- 🔧 动手: 20 道 (180min)
|
||
- 📤 产出: `career/qa-project-sai.md`
|
||
|
||
- [ ] **Day 521 (2027-12-01, 周三)** · 主题: 项目深度题 (lb / ddos)
|
||
- 🔧 动手: 20 道 (180min)
|
||
- 📤 产出: `career/qa-project-lb-ddos.md`
|
||
|
||
- [ ] **Day 522 (2027-12-02, 周四)** · 主题: DPU 架构题
|
||
- 🔧 动手: 20 道 (180min)
|
||
- 📤 产出: `career/qa-dpu.md`
|
||
|
||
- [ ] **Day 523 (2027-12-03, 周五)** · 主题: 行为面试题
|
||
- 🔧 动手: STAR 模板 + 20 个故事 (180min)
|
||
- 📤 产出: `career/qa-behavior.md`
|
||
|
||
- [ ] **Day 524 (2027-12-04, 周六)** · 主题: 大块实验 — 集中复习
|
||
- 🔧 动手: 200 题全复习 (480min)
|
||
- 📤 产出: `career/review-2.md`
|
||
|
||
- [ ] **Day 525 (2027-12-05, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P6/W75-summary.md`
|
||
|
||
---
|
||
|
||
### Week 76 (Day 526-532) · 系统设计 + 模拟面试
|
||
|
||
- [ ] **Day 526 (2027-12-06, 周一)** · 主题: 系统设计题库
|
||
- 🔧 动手: 收集 10 道经典网络系统设计 (180min)
|
||
- 📤 产出: `career/sysdesign-list.md`
|
||
|
||
- [ ] **Day 527 (2027-12-07, 周二)** · 主题: 设计 (1) — 全球 CDN
|
||
- 🔧 动手: 写设计方案 (180min)
|
||
- 📤 产出: `career/sd-cdn.md`
|
||
|
||
- [ ] **Day 528 (2027-12-08, 周三)** · 主题: 设计 (2) — DDoS 清洗中心
|
||
- 🔧 动手: 写方案 (180min)
|
||
- 📤 产出: `career/sd-ddos.md`
|
||
|
||
- [ ] **Day 529 (2027-12-09, 周四)** · 主题: 设计 (3) — 智能网卡卸载
|
||
- 🔧 动手: 写方案 (180min)
|
||
- 📤 产出: `career/sd-smartnic.md`
|
||
|
||
- [ ] **Day 530 (2027-12-10, 周五)** · 主题: 模拟面试 (技术面)
|
||
- 🔧 动手: 找朋友模拟 (180min)
|
||
- 📤 产出: `career/mock-tech.md`
|
||
|
||
- [ ] **Day 531 (2027-12-11, 周六)** · 主题: 大块实验 — 模拟面试 (综合)
|
||
- 🔧 动手: 完整 1.5h 模拟 (240min)
|
||
- 📤 产出: `career/mock-full.md`
|
||
|
||
- [ ] **Day 532 (2027-12-12, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P6/W76-summary.md`
|
||
|
||
---
|
||
|
||
### Week 77 (Day 533-539) · 投递 + 一面/二面
|
||
|
||
- [ ] **Day 533 (2027-12-13, 周一)** · 主题: 投递目标公司 (1)
|
||
- 🔧 动手: 内推阿里云/腾讯云/字节 (120min)
|
||
- 📤 产出: `career/applications.md`
|
||
|
||
- [ ] **Day 534 (2027-12-14, 周二)** · 主题: 投递目标公司 (2)
|
||
- 🔧 动手: 投 DPU 厂商 (120min)
|
||
- 📤 产出: 更新 applications
|
||
|
||
- [ ] **Day 535 (2027-12-15, 周三)** · 主题: 跟进 + 一面
|
||
- 🔧 动手: 处理一面(实际情况调整)(150min)
|
||
- 📤 产出: `career/interview-log.md`
|
||
|
||
- [ ] **Day 536 (2027-12-16, 周四)** · 主题: 一面 → 二面
|
||
- 🔧 动手: 复盘 + 准备二面 (150min)
|
||
- 📤 产出: 更新 log
|
||
|
||
- [ ] **Day 537 (2027-12-17, 周五)** · 主题: 二面 / HR 面
|
||
- 🔧 动手: 应对 + 复盘 (150min)
|
||
- 📤 产出: 更新 log
|
||
|
||
- [ ] **Day 538 (2027-12-18, 周六)** · 主题: 大块实验 — 应对 onsite
|
||
- 🔧 动手: 集中处理面试 (480min)
|
||
- 📤 产出: 更新 log
|
||
|
||
- [ ] **Day 539 (2027-12-19, 周日)** · ☕ 复盘
|
||
- 📤 产出: `notes/P6/W77-summary.md`
|
||
|
||
---
|
||
|
||
### Week 78 (Day 540-546) · 收口 + 决策
|
||
|
||
- [ ] **Day 540 (2027-12-20, 周一)** · 主题: offer 比较 / 晋升答辩
|
||
- 🔧 动手: 写决策表 (150min)
|
||
- 📤 产出: `career/decision.md`
|
||
|
||
- [ ] **Day 541 (2027-12-21, 周二)** · 主题: 谈薪 / 答辩材料
|
||
- 🔧 动手: 准备 (150min)
|
||
- 📤 产出: `career/negotiation.md`
|
||
|
||
- [ ] **Day 542 (2027-12-22, 周三)** · 主题: 18 个月总复盘
|
||
- 🔧 动手: 写一万字总复盘 (240min)
|
||
- 📤 产出: `final/18months-retro.md`
|
||
|
||
- [ ] **Day 543 (2027-12-23, 周四)** · 主题: 写下一个 18 个月 v4 草稿
|
||
- 🔧 动手: 启动 v4 规划草稿 (180min)
|
||
- 📤 产出: `docs/superpowers/specs/2027-12-23-roadmap-v4-draft.md`
|
||
|
||
- [ ] **Day 544 (2027-12-24, 周五)** · 主题: 整理学习仓库
|
||
- 🔧 动手: 把 18 个月所有产出归档 (180min)
|
||
- 📤 产出: 归档 README
|
||
|
||
- [ ] **Day 545 (2027-12-25, 周六)** · 主题: 大块实验 — 公开总结贴
|
||
- 🔧 动手: 发知乎/B站长文 "18 个月成为 DPDK/DPU 工程师" (360min)
|
||
- 📤 产出: 发布链接
|
||
|
||
- [ ] **Day 546 (2027-12-27, 周日)** · 🎯 整体收官答辩 + 庆祝
|
||
- 📤 产出: `final/closing.md`(结束语 + 下一步)
|
||
|
||
---
|
||
|
||
## 附录 A · 项目仓库结构建议
|
||
|
||
推荐根目录布局(建议放在 `~/projects/dpdk-roadmap-v3/`):
|
||
|
||
```
|
||
dpdk-roadmap-v3/
|
||
├── notes/ # 学习笔记
|
||
│ ├── P1/ ... P6/
|
||
├── code/ # 代码项目
|
||
│ ├── libmtcp-v3/
|
||
│ ├── sai-dpdk-mini/
|
||
│ ├── dpdk-lb/
|
||
│ ├── ddos-clean/
|
||
│ ├── pcie-driver-demo/
|
||
│ └── ...
|
||
├── perf-data/ # 性能数据
|
||
├── flamegraph/ # 火焰图
|
||
├── docs/ # 设计文档
|
||
├── blog/ # 博客草稿
|
||
├── career/ # 简历、面试材料
|
||
├── slides/ # 演讲稿
|
||
├── monthly/ # 月度复盘
|
||
├── final/ # 阶段最终产出
|
||
└── docs/superpowers/specs/2026-06-29-dpdk-roadmap-v3-design.md # 本规划文档
|
||
```
|
||
|
||
---
|
||
|
||
## 附录 B · 性能基线参考
|
||
|
||
| 场景 | 硬件 | 目标 PPS | 目标带宽 |
|
||
|---|---|---|---|
|
||
| 单核 echo (X710 10G) | 1 core | 14.88 Mpps (64B) | 10 Gbps line rate |
|
||
| 多核 echo (CX5 100G) | 8 cores | ~100 Mpps (64B) | ~100 Gbps |
|
||
| OVS-DPDK L2 fwd | 4 cores | 20 Mpps | 80% line rate |
|
||
| dpdk-lb (4-tuple hash) | 4 cores | 5 Mpps | 20 Gbps |
|
||
| ddos-clean SYN cookie | 8 cores | 5 Mpps SYN | / |
|
||
| Suricata IDS | 8 cores | / | 10 Gbps |
|
||
|
||
---
|
||
|
||
## 附录 C · 周/月复盘模板
|
||
|
||
### 周复盘 (`notes/Pn/Wmm-summary.md`)
|
||
|
||
```markdown
|
||
# Week NN 复盘 (Day xxx-yyy)
|
||
|
||
## 完成情况
|
||
- [x] Day xxx: ...
|
||
- [ ] Day yyy: ...(未完成原因)
|
||
|
||
## 学到的 3 件事
|
||
1.
|
||
2.
|
||
3.
|
||
|
||
## 卡点 / 疑惑
|
||
-
|
||
|
||
## 下周计划微调
|
||
-
|
||
```
|
||
|
||
### 月复盘 (`monthly/YYYY-MM.md`)
|
||
|
||
```markdown
|
||
# 月度复盘 YYYY-MM
|
||
|
||
## 本月目标 vs 实际
|
||
| 目标 | 完成 | 备注 |
|
||
|
||
## 关键产出
|
||
- 代码:
|
||
- 笔记:
|
||
- 数据:
|
||
|
||
## 下月调整
|
||
- 节奏:
|
||
- 内容:
|
||
- 出口:
|
||
|
||
## 自我评分 (1-5)
|
||
- 学习深度:
|
||
- 动手量:
|
||
- 输出量:
|
||
- 心态:
|
||
```
|
||
|
||
---
|
||
|
||
## 收口语
|
||
|
||
> **18 个月很长,但日子是一天一天过的。**
|
||
> 不用每一天都完美执行,但每天都必须有一个**可见的产出物**。
|
||
> 当你回头看 Day 1 到 Day 546 的勾选状态时,你的实力会比任何一份简历都更有说服力。
|
||
|
||
— 起算日 2026-06-29,目标交付日 2027-12-27。
|
||
|