- 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>
121 KiB
Executable File
DPDK 全景路线 v3 — 18 个月日级学习与发展规划
版本: v3 (升级自
~/myshare/DPDK_DPU_GROWTH_PLAN.mdv2) 起算日: 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 内核对照学习策略(横切式)
- 五、留白与节假日策略
- 六、出口与简历卖点映射
- 七、推荐资料总表
- P1 · M1-M3 · DPDK 内功 + 用户态协议栈
- P2 · M4-M6 · SONiC×DPDK 融合
- P3 · M7-M9 · vSwitch / 云网关数据面
- P4 · M10-M12 · 网络安全数据面
- P5 · M13-M15 · DPU 数据面架构
- P6 · M16-M18 · 作品收口 + 出口
- 附录 A · 项目仓库结构建议
- 附录 B · 性能基线参考
- 附录 C · 周/月复盘模板
一、规划总览
1.1 一句话目标
18 个月后,我能够同时回答这三个问题:
- 给我一张 100Gbps 网卡,我能写出单核线速的用户态数据面
- 给我一颗 DPU/SmartNIC,我能设计它的数据面架构
- 给我一套 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 / 勾选 / 复盘:
- [ ] **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),格式:
- 🐧 内核对照: <内核侧主题> 读 `<内核源码路径>` (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 阶段目标
- 读完 DPDK 五大子系统源码并产出笔记:mempool / ring / mbuf / ethdev / eal
libmtcp升级到 v3:支持多 RSS 队列 + 零拷贝 + 单核线速 echo- 性能 profile 报告:火焰图 + perf top + IPC 数据
- 产出 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_*.cSIMD 优化 (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
- 🔧 动手: 编译 mTCP + 你已有的
-
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 阶段目标
- 完整跑通 sonic-vs(Virtual Switch)镜像,理解 SONiC 容器栈
- 读懂 SAI 头文件 + sairedis 链路
- 实现
sai-dpdk-mini:15 个 API(switch/port/fdb/vlan/route/neighbor/acl/pkt-io) - SONiC 上跑通 L2 forwarding + L3 routing + 基本 ACL
P2.1 关键交付物
sonic-vs完整跑通 + 容器架构笔记sai-dpdk-miniGitHub 仓库 + 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 阶段目标
- OVS-DPDK 源码精读 + 调优实战
- VPP 入门 + 写一个自定义 node 插件
- 自研
udp-lb/tcp-lb:4-tuple hash + RSS + 健康检查 - 跑通一个云网关原型(NAT/SNAT/DNAT)
P3.1 关键交付物
notes/P3/13 周笔记code/vpp-plugin-demo/VPP 自定义 nodecode/dpdk-lb/自研用户态 LBperf-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 阶段目标
- Suricata DPDK 模式跑通 + 调优
- 自研 DDoS 清洗:SYN cookie / 速率限制 / 黑白名单
- 理解 TLS fingerprint (JA3/JA4)
- 输出 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 阶段目标
- PCIe 完全吃透:手动解码 BAR / 写最小 PCIe 驱动
- vDPA 跑通 + 源码理解
- rte_flow hardware offload 实测(CX5/CX6)
- 调研 BlueField / Pensando / 国产 DPU
- 写一份"自研 DPU 数据面架构"设计文档
P5.1 关键交付物
notes/P5/13 周笔记code/pcie-driver-demo/最小 PCIe 驱动code/vdpa-demo/vDPA 实验docs/dpu-arch-design.mdDPU 架构设计文档(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.cDMA 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 个最有沉淀的项目(
libmtcp-v3/sai-dpdk-mini/dpdk-lb/ddos-clean)做开源升级 - 写出 3 篇引爆型博客(可推阿里云开发者社区/InfoQ/掘金/知乎)
- 准备完整面试材料:自我介绍 / 项目深度 / 系统设计 / 八股
- 投递目标公司 + 跟进
- 准备晋升答辩材料(若选晋升路线)
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)
# Week NN 复盘 (Day xxx-yyy)
## 完成情况
- [x] Day xxx: ...
- [ ] Day yyy: ...(未完成原因)
## 学到的 3 件事
1.
2.
3.
## 卡点 / 疑惑
-
## 下周计划微调
-
月复盘 (monthly/YYYY-MM.md)
# 月度复盘 YYYY-MM
## 本月目标 vs 实际
| 目标 | 完成 | 备注 |
## 关键产出
- 代码:
- 笔记:
- 数据:
## 下月调整
- 节奏:
- 内容:
- 出口:
## 自我评分 (1-5)
- 学习深度:
- 动手量:
- 输出量:
- 心态:
收口语
18 个月很长,但日子是一天一天过的。 不用每一天都完美执行,但每天都必须有一个可见的产出物。 当你回头看 Day 1 到 Day 546 的勾选状态时,你的实力会比任何一份简历都更有说服力。
— 起算日 2026-06-29,目标交付日 2027-12-27。