Files
dpdk-blog/roadmap.md
T
newbieandClaude 6d8c994dde init: DPDK → DPU learning blog (VitePress)
- 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>
2026-08-09 15:42:47 +00:00

121 KiB
Executable File
Raw Blame History

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


📜 目录


一、规划总览

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 / 勾选 / 复盘:

- [ ] **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 阶段目标

  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 抗压数据
周 对照主题 内核源码路径
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)

# 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。