diff --git a/roadmap.md b/roadmap.md index 6c58d02..e87ccf6 100755 --- a/roadmap.md +++ b/roadmap.md @@ -1,3163 +1,124 @@ -# DPDK 全景路线 v3 — 18 个月日级学习与发展规划 +# DPDK → DPU Growth Roadmap -> **版本**: 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 +> **Single source of truth.** Supersedes all previous Chinese roadmap docs (deleted 2026-09-04, recoverable via git history). +> +> **Goal:** top-tier network data-plane engineer (DPU / AI-networking), offer from ByteDance/Ali by mid-2027. +> **Start:** 2026-08-21 (Day 1) · **Timeline:** 8–10 months, stretch to 2027-06. +> **Effort:** weekdays 1.5–2h + weekends 4–6h (≈ 20h/week). +> **Philosophy:** done > perfect · honest timelines · quality > speed. --- -## 📜 目录 +## 1. Current Focus — AI-Networking Interview Sprint (4 weeks, parallel track) -- [一、规划总览](#一规划总览) -- [二、当前能力盘点](#二当前能力盘点) -- [三、六阶段主线](#三六阶段主线) -- [四、日任务格式约定](#四日任务格式约定) -- [四点五、Linux 内核对照学习策略(横切式)](#四点五linux-内核对照学习策略横切式) -- [五、留白与节假日策略](#五留白与节假日策略) -- [六、出口与简历卖点映射](#六出口与简历卖点映射) -- [七、推荐资料总表](#七推荐资料总表) -- [P1 · M1-M3 · DPDK 内功 + 用户态协议栈](#p1--dpdk-内功--用户态协议栈-m1-m3) -- [P2 · M4-M6 · SONiC×DPDK 融合](#p2--sonicdpdk-融合-m4-m6) -- [P3 · M7-M9 · vSwitch / 云网关数据面](#p3--vswitch--云网关数据面-m7-m9) -- [P4 · M10-M12 · 网络安全数据面](#p4--网络安全数据面-m10-m12) -- [P5 · M13-M15 · DPU 数据面架构](#p5--dpu-数据面架构-m13-m15) -- [P6 · M16-M18 · 作品收口 + 出口](#p6--作品收口--出口-m16-m18) -- [附录 A · 项目仓库结构建议](#附录-a--项目仓库结构建议) -- [附录 B · 性能基线参考](#附录-b--性能基线参考) -- [附录 C · 周/月复盘模板](#附录-c--周月复盘模板) +*Now (from 2026-09-02). Runs alongside the main track. Output-driven: every week produces one blog post.* ---- +**Why this is a re-naming exercise, not a pivot** — existing knowledge maps directly: -## 一、规划总览 - -### 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 天为复盘缓冲日,允许欠债结清 -- **可演进**:每月最后一天为月度复盘日,可调整下月节奏 - ---- - -## 二、当前能力盘点 - -| 维度 | 现状 | 备注 | +| You already know | AI-network equivalent | Difficulty | |---|---|---| -| DPDK API | 中级,能写应用 | `dpdk-ws-client`、`dperf` 改造 | -| 用户态协议栈 | 中级 | `libmtcp` 多版本迭代中 | -| SONiC 架构 | 入门-中级 | 看过 OrchAgent / syncd / APPL_DB | -| SAI | 入门-中级 | 读过头文件,未写过适配器 | -| Linux 内核网络 | 入门 | 有书在读 | -| PCIe | 入门 | 概念知道,未亲手解码 BAR | -| ASIC / SDK | 入门 | T140 / X540 用过 | -| Go / 工程化 | 中级 | go1.21 + 服务端经验 | -| 学历 | 专升本在读 | 不构成阻塞 | +| TCP congestion control (RTO/cwnd, from libmtcp-v3) | DCQCN (RDMA congestion control) | ⭐ very low | +| Loss = congestion signal (TCP) | Loss = disaster (RDMA, PFC) | ⭐ very low | +| ECMP / L3 (daily work) | Fat-Tree multi-pathing | ⭐ very low | +| SAI / chip pipeline (strongest area) | PFC/ECN chip-side implementation | ⭐ low | +| DPDK data-plane mindset | DPU/SmartNIC offload, collective-comm acceleration | ⭐ low | +| TCP FSM from scratch | RoCEv2 transport semantics (QP/verbs/retransmit) | ⭐⭐ medium | -**核心资产(已有项目)**: -- `~/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 源码树 +**Week 0 — Panorama.** Why AI training is network-bound (AllReduce stalls 30–50% of time in 1000-GPU clusters); topology evolution (Spine-Leaf → Fat-Tree → Rail-Optimized); 800G/CPO/LPO; RDMA; lossless Ethernet. +*Output:* blog post "Why GPU Clusters Eat Networks: Starting from AllReduce" (concept-level). *Gate:* draw the GPU-cluster communication stack and explain it to a layperson. + +**Week 1 — RDMA & lossless networking (the interview core).** RDMA semantics (QP/verb, zero-copy); RoCEv2 vs InfiniBand; **PFC** (priority flow control, storms, deadlocks, PFC watchdog); **ECN + DCQCN** (explicit congestion signaling, AIMD curve vs TCP Reno — your strongest talking point). +*Output:* "DCQCN: Congestion Control's RDMA Cousin — Why It Looks Familiar" (side-by-side with libmtcp-v3 experience). +*Gate:* draw how a PFC deadlock happens; talk 10 min on DCQCN vs TCP CC. + +**Week 2 — Collective communication & NCCL.** Three AllReduce generations (Ring / Tree / Hierarchical) and their bandwidth/delay models; NCCL topology awareness over Fat-Tree; compute-communication overlap. +*Output:* "Ring AllReduce × Fat-Tree: How Communication Patterns Dictate Network Design". +*Gate:* derive Ring AllReduce per-step transfer = (N−1)/N × data; explain why NCCL dislikes unordered topologies. + +**Week 3 — SONiC/chip side (your home turf, where you win).** PFC/ECN config surface in SONiC; PFC watchdog; buffer model & headroom math; INT (in-band telemetry); where DPU sits in AI networking. +*Output:* "SONiC on AI Switches: Familiar Control Plane, Unfamiliar Lossless Forwarding" (chip-view author — rare position). +*Gate:* name where PFC/ECN/buffer intervene on one AllReduce flow end-to-end. + +**Week 4 — Interview sprint.** Benchmark literacy (perftest/ib_write_bw/NCCL-test); 20-question self-quiz (3-min oral each, recorded); resume rewritten with AI-networking vocabulary; attach the 4 blog posts as portfolio. + +**Sprint reading list (each repo = one article, three-layer peeling, never the whole repo):** +- `linux-rdma/rdma-core` `libibverbs/verbs.h` (the API contract) · `linux-rdma/perftest` `ib_write_bw.c` (RDMA "ping") +- Kernel SoftRoCE: `drivers/infiniband/sw/rxe/{rxe_verbs,rxe_req,rxe_resp}.c` — **runs real RDMA between two VMs without special NICs** +- `bobzhuyb/ns3-rdma`: DCQCN/TIMELY/HPCC implementations (few hundred lines each) +- `NVIDIA/nccl` `src/graph/` (CPU side only) · `facebookincubator/gloo` (Ring/Tree AllReduce, read first) +- `sonic-net/sonic-swss` `orchagent/pfcwd/` + `orchagent/buffer` (lossless config lives here; you read it faster than papers) +- `OpenSmartNIC` / `corundum` (SmartNIC/FPGA data-plane reference) + +**Papers:** DCQCN (SIGCOMM'15) 🔴 · Revisiting Network Support for RDMA (SIGCOMM'18) 🔴 · Deadlocks in Datacenter Networks (HotNets'16) 🔴 · HPCC (SIGCOMM'19) 🟡 · TIMELY (SIGCOMM'15) 🟡 · RoCEv2 spec (scan the congestion chapter) ⚪ + +**Sprint rules:** study only what is "interview-asked + article-writable" (no IB protocol minutiae, no optical-layer physics) · every concept gets a hand-drawn diagram · ≤3 reads per paper or switch to easier material · Friday self-quiz: 5 random kb/ cards, 3-min oral each. --- -## 三、六阶段主线 +## 2. Main Track — 6 Phases (≈ 252 days) -| # | 阶段 | 月份 | 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 个高质量开源项目 | +*Dates are cumulative from 2026-08-21; they slide 1:1 with slips — the monthly review (section 4) is the correction mechanism.* ---- - -## 四、日任务格式约定 - -每天的任务条目格式**严格统一**,方便 grep / 勾选 / 复盘: - -```markdown -- [ ] **Day NNN (YYYY-MM-DD, 周X)** · 主题: <主题短句> - - 📖 学习: <读什么> (Xmin) - - 🔧 动手: <做什么> (Xmin) - - 📤 产出: <文件路径或结论> -``` - -**符号约定**: -- 📖 = 读源码 / 读书 / 看视频 -- 🔧 = 写代码 / 跑实验 / 抓数据 -- 📤 = 产出物(代码 commit / 笔记 / 图表 / 数据) -- 🎯 = 周/月里程碑 -- ☕ = 复盘 / 缓冲 / 休息 -- 🐧 = Linux 内核对照学习(与当周 DPDK 主题相互印证) - ---- - -## 四点五、Linux 内核对照学习策略(横切式) - -> **原则**: DPDK 工程师不懂 Linux 内核网络栈 = 只会调 API 的人。 -> v3 把内核学习**横切**进每个阶段,与 DPDK 主题成对照关系——学 DPDK PMD 时对照内核 ixgbe 驱动,学 SAI host_if 时对照内核 netlink,学 PCIe 时对照内核 `drivers/pci/`。 - -### 4.5.1 时间分配 - -| 时段 | 内核学习方式 | 时长/周 | -|---|---|---| -| 工作日(周二/周三 注入子任务)| 🐧 子任务,30min × ~2 天 | ~1h | -| 周日复盘日下半场 | 集中读源码 + 写对照笔记 | 1-2h | -| **合计** | | **~2-3h / 周** | -| 18 个月总投入 | 78 周 × 2.5h | **~195h** | - -### 4.5.2 学习地图(7 大模块,覆盖 P1-P5) - -| 模块 | 子主题 | 主要文件 | 对应阶段 | +| Phase | Days | Duration | Core deliverable | |---|---|---|---| -| 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 | +| **P0 Foundations** | 1–14 | 2 wk | Hardware grounding + MPSC lock-free queue passing 2M-enqueue test (hard gate) | +| **P1 DPDK internals** | 15–42 | 4 wk | Deep understanding of the 5 subsystems (mempool/ring/mbuf/PMD/EAL/RSS-flow) vs kernel counterparts | +| **P2 libmtcp-v3** | 43–126 | 10–12 wk | Userspace TCP stack: v0.1 single-conn echo → v0.2 multi-conn + basic FSM → v0.3 perf tuning → v0.4 API + RSS + release | +| **P3 SAI-DPDK Mini** | 127–168 | 6 wk | switch/port + FDB/VLAN + route/neighbor + simplified L2/L3 pipeline + mock control plane | +| **P4 PCIe + DPU theory** | 169–196 | 4 wk | PCIe driver on X540 (probe/ioremap/MSI-X/DMA) + DMA/IOMMU/VFIO + virtio/vhost/vDPA theory | +| **P5 Job-search loop** | 197–252 | 8 wk | Resume v3 → small-company batch → feedback → H3C/云豹/中科驭数 batch → big-company batch (Ali/Byte/Tencent) → offer | -### 4.5.3 推荐资料 +**Scope discipline (what was cut from the naive plan):** +- P2: **no** congestion control / SACK / PAWS / epoll / reordering — interview answer: "next steps". TCP corner cases (zero-window probe, TIME_WAIT assassination, timer interactions) are why 10–12 weeks is honest. +- P3: **no** ACL / QoS / ECMP(kept simplified) / real syncd integration — mock control plane only. +- P4: X540 is a plain NIC, not a DPU — claim "read mlx5 vdpa code, wrote a PCIe driver", never "DPU hands-on experience". +- P5: first batch after P3 completes (not during P4) — coding + interviewing in parallel breaks both. -- 📚 《Linux 内核网络协议栈从入门到精通》(你已有) -- 📚 《深入理解 Linux 网络》—— 张彦飞 -- 📚 《Understanding Linux Network Internals》(O'Reilly) -- 📂 内核源码:`linux-stable` (建议 v6.6 LTS) -- 🎥 LWN.net 网络栈专栏 -- 📝 论文:The Design and Implementation of Open vSwitch (NSDI'15) 对照内核 datapath - -### 4.5.4 阶段对应表 - -| 阶段 | 内核重点 | -|---|---| -| P1 (M1-3) | K1 packet path + K2 NIC 驱动 + K3 TCP/IP 栈(核心,对照 DPDK PMD/libmtcp) | -| P2 (M4-6) | K4 netlink(对照 SONiC host_if / sairedis 通知)| -| P3 (M7-9) | K5 tc/flow_offload + K6 虚拟设备(对照 OVS-DPDK / VPP)| -| P4 (M10-12) | K5 nftables + conntrack(对照 DDoS 清洗)| -| P5 (M13-15) | K7 PCI/VFIO + virtio-net 驱动(对照 vDPA / DPU 数据面)| -| P6 (M16-18) | 综合复盘 + 简历面试中讲对照 | - -### 4.5.5 注入位置 - -P1-P5 详细日计划中,每周选 1-2 天在原任务下注入一行 🐧 子任务(30min),格式: - -```markdown -- 🐧 内核对照: <内核侧主题> 读 `<内核源码路径>` (30min) -``` - -阶段开头也会列出"本阶段内核对照清单"。 - ---- - -## 五、留白与节假日策略 - -### 5.1 每周节奏(7 天循环) - -| 周几 | 类型 | 时长 | -|---|---|---| -| 周一 | 新主题启动 | 2-3h | -| 周二 | 主题深入 | 2-3h | -| 周三 | 主题深入 | 2-3h | -| 周四 | 整合实验 | 2-3h | -| 周五 | 整合实验 | 2-3h | -| 周六 | 大块动手 / 项目推进 | 6-8h | -| 周日 | ☕ 复盘 + 笔记整理 + 欠债补做 | 2-4h | - -### 5.2 月度节奏 - -- 每月最后一天 = ☕ 月度复盘日(不安排新内容) -- 每月第一个周日 = 调整下月节奏 - -### 5.3 法定假期空窗(不安排任务) - -| 假期 | 日期范围 | Day 区间 | -|---|---|---| -| 国庆 2026 | 10.01-10.07 | Day 95-101 | -| 元旦 2027 | 01.01-01.03 | Day 187-189 | -| 春节 2027 | 02.06-02.12 | Day 223-229 | -| 清明 2027 | 04.03-04.05 | Day 279-281 | -| 五一 2027 | 05.01-05.05 | Day 307-311 | -| 端午 2027 | 06.09-06.11 | Day 346-348 | -| 国庆 2027 | 10.01-10.07 | Day 460-466 | - -假期空窗用途:补做欠债 / 长项目冲刺 / 休息。文档中这些 Day 留空 + 标注 ☕ 。 - ---- - -## 六、出口与简历卖点映射 - -| 出口 | 关键阶段 | 简历卖点 | 推荐时机 | -|---|---|---|---| -| 一线大厂网络团队(阿里云/腾讯云/字节/华为 2012) | P1+P3+P5 | "单核 100Gbps 用户态协议栈"、"自研 vSwitch plugin"、"DPU 架构设计" | M15 末投递 | -| DPU 厂商(云豹/中科驭数/Pensando) | P5 主 + P2 副 | "SAI-DPDK 适配器"、"rte_flow offload 验证"、"BlueField vDPA 调研" | M15 末投递 | -| 现公司晋升技术专家 | P2+P4 | "SONiC×DPDK 融合落地"、"DDoS 清洗 5Mpps" | M12 末申报 | -| 开源 / 个人品牌 | 全程 | GitHub libmtcp-v3 + sai-dpdk-mini + 技术博客 | M18 | - ---- - -## 七、推荐资料总表 - -### 7.1 书籍 - -| 书 | 阶段 | 用途 | -|---|---|---| -| 《DPDK 应用开发实战》 | P1 | API 速通 | -| 《深入浅出 DPDK》 | P1-P3 | 原理理解 | -| 《Linux 内核网络协议栈从入门到精通》 | P1 | 内核对照 | -| 《计算机系统结构量化研究方法》 | P5 | DPU 架构 | -| 《PCI Express 体系结构导读》 | P5 | PCIe 必读 | -| 《SONiC 架构与实现》 | P2 | SONiC 入门 | - -### 7.2 源码 - -| 仓库 | 阶段 | -|---|---| -| dpdk-stable-24.11.6 | 全程 | -| sonic-buildimage / sonic-swss / sonic-sairedis | P2 | -| openvswitch-3.x | P3 | -| vpp-master | P3 | -| suricata-master | P4 | -| f-stack / mtcp | P1 | - -### 7.3 论文 - -- mTCP (NSDI'14) -- IX (OSDI'14) -- Snap (SOSP'19) — Google DPDK-like 框架 -- AccelNet (NSDI'18) — Azure SmartNIC -- BlueField DPU Architecture Guide (NVIDIA) - ---- - -# P1 · DPDK 内功 + 用户态协议栈 (M1-M3) - -> **Day 1-91**, 2026-06-29 ~ 2026-09-27 -> **核心目标**: 把 DPDK 的 mempool / ring / mbuf / PMD / NUMA / lcore 调度吃到骨头里,并把你的 `libmtcp` 升级为 v3(单核 100Gbps echo 线速) - -## P1.0 阶段目标 - -1. 读完 DPDK 五大子系统源码并产出笔记:mempool / ring / mbuf / ethdev / eal -2. `libmtcp` 升级到 v3:支持多 RSS 队列 + 零拷贝 + 单核线速 echo -3. 性能 profile 报告:火焰图 + perf top + IPC 数据 -4. 产出 5 篇深度笔记(每篇 3000 字+) - -## P1.1 关键交付物 - -- [ ] `notes/P1/` 下 13 周笔记(每周 1 篇 + 总结 1 篇) -- [ ] `libmtcp-v3` 仓库可运行 + benchmark 数据 -- [ ] `flamegraph/P1-final.svg` 性能火焰图 -- [ ] `perf-data/P1-100G-echo.md` 性能数据表 - -## P1.2 推荐资料 - -- 📚 《深入浅出 DPDK》Ch.3-7 -- 📂 `dpdk-stable-24.11.6/lib/{mempool,ring,mbuf,ethdev,eal}/` -- 🎥 DPDK Summit 历年 Talk(YouTube) -- 📝 mTCP NSDI'14 论文 - -## P1.2.5 🐧 本阶段内核对照清单(K1+K2+K3) - -| 周 | 对照主题 | 内核源码路径 | -|---|---|---| -| W1 | 内核启动 + 模块加载 | `init/main.c`, `kernel/module.c` | -| W2 | slab / kmem_cache (对照 DPDK mempool) | `mm/slab.c`, `mm/slub.c` | -| W3 | 内核无锁 — RCU + atomic (对照 DPDK ring) | `kernel/rcu/`, `include/linux/rculist.h` | -| W4 | skb_buff 结构 (对照 DPDK mbuf) | `include/linux/skbuff.h`, `net/core/skbuff.c` | -| W5 | 内核 ixgbe 驱动 (对照 DPDK ixgbe PMD) | `drivers/net/ethernet/intel/ixgbe/ixgbe_main.c` | -| W6 | NUMA + 进程调度 | `mm/mempolicy.c`, `kernel/sched/` | -| W7 | RPS/RFS + napi (对照 DPDK RSS) | `net/core/dev.c::netif_receive_skb` | -| W8 | 内核 TCP 协议栈总览 (对照 mTCP) | `net/ipv4/tcp.c`, `tcp_input.c` | -| W9 | 内核 socket 层 | `net/socket.c`, `net/ipv4/af_inet.c` | -| W10 | 内核 RX 路径全链路 | `napi_poll → netif_receive_skb → tcp_v4_rcv` | -| W11 | 内核 TX 路径 + qdisc | `__dev_queue_xmit → qdisc → ndo_start_xmit` | -| W12 | XDP / AF_XDP (DPDK 替代品对照) | `net/core/filter.c`, `net/xdp/` | -| W13 | 总结:DPDK vs Kernel 全景对照表 | — | - -## P1.3 周计划总览 (W1-W13) - -| 周 | Day | 主题 | 里程碑 | -|---|---|---|---| -| W1 | 1-7 | DPDK 环境 + EAL 启动流程 | hello_world 改造 | -| W2 | 8-14 | mempool 源码 + cache 机制 | mempool benchmark | -| W3 | 15-21 | ring 源码 + 无锁队列 | ring 压测 | -| W4 | 22-28 | mbuf 源码 + 零拷贝 | mbuf 操作笔记 | -| W5 | 29-35 | PMD 框架 + ixgbe/i40e | PMD 阅读笔记 | -| W6 | 36-42 | NUMA + lcore 调度 | NUMA 性能对比 | -| W7 | 43-49 | RSS + Flow Director | 多队列 echo | -| W8 | 50-56 | mTCP 源码精读 | mTCP 跑通 | -| W9 | 57-63 | libmtcp v3 设计 | 设计文档 | -| W10 | 64-70 | libmtcp v3 实现 (1) | RX/TX 路径 | -| W11 | 71-77 | libmtcp v3 实现 (2) | 协议栈核心 | -| W12 | 78-84 | 性能调优 + 火焰图 | 100G 线速 | -| W13 | 85-91 | P1 总结 + 文档 | 阶段答辩 | - -## P1.4 详细日计划 - -### Week 1 (Day 1-7) · DPDK 环境 + EAL 启动流程 - -- [ ] **Day 001 (2026-06-29, 周一)** · 主题: 环境校验 + 编译 DPDK 24.11 - - 📖 学习: 通读 `dpdk.org/doc/guides/linux_gsg/` (60min) - - 🔧 动手: 用 meson 重新编译 `~/myshare/dpdk-stable-24.11.6` 并跑 testpmd (90min) - - 📤 产出: `notes/P1/W1-D1-env-setup.md` 包含编译命令、hugepage 配置、网卡绑定步骤 - -- [ ] **Day 002 (2026-06-30, 周二)** · 主题: hugepage / IOMMU / VFIO - - 📖 学习: hugepage 原理 + VFIO vs UIO 对比 (60min) - - 🔧 动手: 在本机配置 1G hugepage × 8,验证 `/proc/meminfo` (90min) - - 🐧 内核对照: 读 `arch/x86/mm/hugetlbpage.c` 大页分配路径 (30min) - - 📤 产出: `notes/P1/W1-D2-hugepage-vfio.md` - -- [ ] **Day 003 (2026-07-01, 周三)** · 主题: EAL 启动流程上半段 - - 📖 学习: `lib/eal/common/eal_common_options.c` + `eal_init()` 主线 (90min) - - 🔧 动手: 加 printf 跟踪 EAL 启动过程,画出函数调用图 (90min) - - 📤 产出: `notes/P1/W1-D3-eal-init-1.md` + 调用图 - -- [ ] **Day 004 (2026-07-02, 周四)** · 主题: EAL 启动流程下半段 - - 📖 学习: lcore 创建、master/worker 线程、内存初始化 (90min) - - 🔧 动手: 写一个最小程序,启动 4 个 lcore 打印自己的 ID (90min) - - 📤 产出: `code/P1/eal-lcore-demo/` - -- [ ] **Day 005 (2026-07-03, 周五)** · 主题: hello_world 改造 - - 📖 学习: `examples/helloworld/main.c` (30min) - - 🔧 动手: 改造 helloworld,让每个 lcore 把自己绑定的 CPU、NUMA node、core_id 输出 (90min) - - 📤 产出: `code/P1/helloworld-plus/` - -- [ ] **Day 006 (2026-07-04, 周六)** · 主题: 大块实验 — testpmd 模式全览 - - 📖 学习: testpmd 各种 forward mode (60min) - - 🔧 动手: 用 X540 / X710 跑 io / mac / macswap / rxonly / txonly 五种模式,记录 PPS (240min) - - 📤 产出: `perf-data/P1/W1-testpmd-modes.md` 含 5 组数据 + 图表 - - 📤 产出: `code/P1/testpmd-runner.sh` 自动化脚本 - -- [ ] **Day 007 (2026-07-05, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P1/W1-summary.md`(W1 学到什么、卡在哪、下周计划) - ---- - -### Week 2 (Day 8-14) · mempool 源码 + cache 机制 - -- [ ] **Day 008 (2026-07-06, 周一)** · 主题: mempool 总览 - - 📖 学习: `lib/mempool/rte_mempool.h` + 设计文档 (90min) - - 🔧 动手: 写 demo 创建 mempool、alloc、free 对象 (60min) - - 📤 产出: `notes/P1/W2-D1-mempool-overview.md` - -- [ ] **Day 009 (2026-07-07, 周二)** · 主题: mempool cache 原理 - - 📖 学习: per-lcore cache 数据结构 + flush_threshold (90min) - - 🔧 动手: gdb 进入 `rte_mempool_get` 看 cache 命中路径 (60min) - - 🐧 内核对照: 读 `mm/slub.c` 的 per-cpu cache (kmem_cache_cpu) (30min) - - 📤 产出: `notes/P1/W2-D2-mempool-cache.md` - -- [ ] **Day 010 (2026-07-08, 周三)** · 主题: mempool ops (ring / stack / lf-stack) - - 📖 学习: `rte_mempool_ops` 抽象 + 三种后端实现 (90min) - - 🔧 动手: 用 `--mempool-ops=stack` 跑 testpmd 对比性能 (60min) - - 📤 产出: `notes/P1/W2-D3-mempool-ops.md` - -- [ ] **Day 011 (2026-07-09, 周四)** · 主题: mempool 与 NUMA - - 📖 学习: `rte_mempool_create_empty` 的 socket_id 参数 (60min) - - 🔧 动手: 同 socket vs 跨 socket 测 alloc 延迟 (90min) - - 📤 产出: `perf-data/P1/W2-mempool-numa.md` - -- [ ] **Day 012 (2026-07-10, 周五)** · 主题: mempool benchmark 工具 - - 📖 学习: `app/test/test_mempool_perf.c` (60min) - - 🔧 动手: 跑官方 perf test,记录 cache on/off 的差异 (90min) - - 📤 产出: `perf-data/P1/W2-mempool-perf.md` - -- [ ] **Day 013 (2026-07-11, 周六)** · 主题: 大块实验 — 自研 mempool benchmark - - 🔧 动手: 写一个工具,分别用 cache=0 / cache=128 / cache=512 测 8 核并发 alloc,输出火焰图 (360min) - - 📤 产出: `code/P1/mempool-bench/` + `flamegraph/W2-mempool.svg` - -- [ ] **Day 014 (2026-07-12, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P1/W2-summary.md` - ---- - -### Week 3 (Day 15-21) · ring 源码 + 无锁队列 - -- [ ] **Day 015 (2026-07-13, 周一)** · 主题: ring 基本 API - - 📖 学习: `lib/ring/rte_ring.h` + create/enqueue/dequeue (90min) - - 🔧 动手: 写 SPSC ring 通信 demo (60min) - - 📤 产出: `notes/P1/W3-D1-ring-api.md` - -- [ ] **Day 016 (2026-07-14, 周二)** · 主题: ring 无锁实现 — head/tail 指针 - - 📖 学习: `__rte_ring_move_prod_head` / `__rte_ring_move_cons_head` (120min) - - 🔧 动手: 手画 4 个线程并发 enqueue 的指针变化时序图 (60min) - - 🐧 内核对照: 读 `include/linux/rculist.h` 的 RCU 无锁链表 (30min) - - 📤 产出: `notes/P1/W3-D2-ring-lockfree.md` - -- [ ] **Day 017 (2026-07-15, 周三)** · 主题: ring 的内存屏障 - - 📖 学习: `rte_smp_wmb` / `rte_smp_rmb` + C11 atomic (90min) - - 🔧 动手: 在 ring 源码中标注每个屏障的作用 (60min) - - 📤 产出: `notes/P1/W3-D3-ring-barrier.md` - -- [ ] **Day 018 (2026-07-16, 周四)** · 主题: ring 变体 — RTS / HTS - - 📖 学习: Relaxed Tail Sync / Head Tail Sync 模式 (90min) - - 🔧 动手: 对比 default / RTS / HTS 三种模式的延迟 (60min) - - 📤 产出: `notes/P1/W3-D4-ring-variants.md` - -- [ ] **Day 019 (2026-07-17, 周五)** · 主题: ring 与 mempool 关系 - - 📖 学习: mempool default ops = ring 的原因 (60min) - - 🔧 动手: 看 mempool 如何用 ring 实现 (90min) - - 📤 产出: `notes/P1/W3-D5-ring-mempool.md` - -- [ ] **Day 020 (2026-07-18, 周六)** · 主题: 大块实验 — ring 压测对比 - - 🔧 动手: 写 ring 压测工具,分别测 SPSC/MPSC/MPMC 在 1/2/4/8 producer 下的 throughput + latency (360min) - - 📤 产出: `code/P1/ring-bench/` + `perf-data/P1/W3-ring-perf.md` - -- [ ] **Day 021 (2026-07-19, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P1/W3-summary.md` - ---- - -### Week 4 (Day 22-28) · mbuf 源码 + 零拷贝 - -- [ ] **Day 022 (2026-07-20, 周一)** · 主题: mbuf 结构详解 - - 📖 学习: `struct rte_mbuf` 字段分布 + cache line 布局 (90min) - - 🔧 动手: 写 demo 打印 mbuf 各字段地址,验证 cache line (60min) - - 🐧 内核对照: 读 `include/linux/skbuff.h` 的 `struct sk_buff` (30min) - - 📤 产出: `notes/P1/W4-D1-mbuf-layout.md`(含 mbuf vs skb 对照表) - -- [ ] **Day 023 (2026-07-21, 周二)** · 主题: mbuf 链 + segments - - 📖 学习: chained mbuf / next 指针 / nb_segs (90min) - - 🔧 动手: 构造一个 3 段的 mbuf chain 并发包 (60min) - - 📤 产出: `notes/P1/W4-D2-mbuf-chain.md` - -- [ ] **Day 024 (2026-07-22, 周三)** · 主题: mbuf headroom / tailroom - - 📖 学习: prepend / append / trim / adj (90min) - - 🔧 动手: 写一个 IP-in-IP 封装 demo,用 prepend 加外层 IP (90min) - - 📤 产出: `code/P1/mbuf-encap-demo/` - -- [ ] **Day 025 (2026-07-23, 周四)** · 主题: 外部 mbuf (external buffer) - - 📖 学习: `rte_pktmbuf_attach_extbuf` (60min) - - 🔧 动手: 把用户内存挂到 mbuf 实现零拷贝 (90min) - - 📤 产出: `notes/P1/W4-D4-mbuf-extbuf.md` - -- [ ] **Day 026 (2026-07-24, 周五)** · 主题: mbuf offload flags - - 📖 学习: TX/RX offload 标志位(checksum / TSO / VLAN)(90min) - - 🔧 动手: 用 testpmd 验证 TSO offload (60min) - - 📤 产出: `notes/P1/W4-D5-mbuf-offload.md` - -- [ ] **Day 027 (2026-07-25, 周六)** · 主题: 大块实验 — 零拷贝 echo server - - 🔧 动手: 实现一个不分配新 mbuf 的 echo server(in-place swap MAC/IP)(360min) - - 📤 产出: `code/P1/zerocopy-echo/` + benchmark 数据 - -- [ ] **Day 028 (2026-07-26, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P1/W4-summary.md` - ---- - -### Week 5 (Day 29-35) · PMD 框架 + ixgbe/i40e - -- [ ] **Day 029 (2026-07-27, 周一)** · 主题: ethdev 抽象层 - - 📖 学习: `lib/ethdev/rte_ethdev.h` + dev_ops (90min) - - 🔧 动手: 列出所有 dev_ops 函数指针并理解用途 (60min) - - 📤 产出: `notes/P1/W5-D1-ethdev.md` - -- [ ] **Day 030 (2026-07-28, 周二)** · 主题: ixgbe PMD 总览 - - 📖 学习: `drivers/net/ixgbe/ixgbe_ethdev.c` (120min) - - 🐧 内核对照: 读 `linux/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c` 的 probe + open (45min) - - 📤 产出: `notes/P1/W5-D2-ixgbe-overview.md`(含 DPDK vs Kernel 对照表) - -- [ ] **Day 031 (2026-07-29, 周三)** · 主题: ixgbe RX 路径 - - 📖 学习: `ixgbe_recv_pkts` + 描述符环 (120min) - - 🔧 动手: 在 RX 路径打点统计 burst 大小分布 (60min) - - 📤 产出: `notes/P1/W5-D3-ixgbe-rx.md` - -- [ ] **Day 032 (2026-07-30, 周四)** · 主题: ixgbe TX 路径 - - 📖 学习: `ixgbe_xmit_pkts` + TX descriptor (120min) - - 📤 产出: `notes/P1/W5-D4-ixgbe-tx.md` - -- [ ] **Day 033 (2026-07-31, 周五)** · 主题: vector PMD (AVX) - - 📖 学习: `ixgbe_rxtx_vec_*.c` SIMD 优化 (90min) - - 🔧 动手: 对比 vector / scalar PMD 的 PPS (60min) - - 📤 产出: `notes/P1/W5-D5-ixgbe-vec.md` - -- [ ] **Day 034 (2026-08-01, 周六)** · 主题: 大块实验 — PMD 替换实验 - - 🔧 动手: 写一个跨 PMD 的 forward 程序(ixgbe ↔ virtio),对比性能 (360min) - - 📤 产出: `code/P1/cross-pmd-fwd/` - -- [ ] **Day 035 (2026-08-02, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P1/W5-summary.md` - ---- - -### Week 6 (Day 36-42) · NUMA + lcore 调度 - -- [ ] **Day 036 (2026-08-03, 周一)** · 主题: NUMA 拓扑探查 - - 📖 学习: `lstopo` / `numactl` / `/sys/devices/system/node/` (60min) - - 🔧 动手: 画出本机 NUMA 拓扑图 (90min) - - 📤 产出: `notes/P1/W6-D1-numa-topo.md` - -- [ ] **Day 037 (2026-08-04, 周二)** · 主题: 跨 socket 性能惩罚 - - 🔧 动手: 同 socket / 跨 socket 跑 mempool + ring 测试 (120min) - - 🐧 内核对照: 读 `mm/mempolicy.c` 看内核 NUMA 分配策略 (30min) - - 📤 产出: `perf-data/P1/W6-numa-penalty.md` - -- [ ] **Day 038 (2026-08-05, 周三)** · 主题: lcore 绑核机制 - - 📖 学习: `--lcores` 参数解析 + pthread_setaffinity_np (90min) - - 🔧 动手: 测试不同绑核策略的性能差异 (60min) - - 📤 产出: `notes/P1/W6-D3-lcore-affinity.md` - -- [ ] **Day 039 (2026-08-06, 周四)** · 主题: service core - - 📖 学习: `rte_service` 框架 (60min) - - 🔧 动手: 写一个 service core demo 处理统计任务 (90min) - - 📤 产出: `code/P1/service-core-demo/` - -- [ ] **Day 040 (2026-08-07, 周五)** · 主题: lcore 间通信模式 - - 📖 学习: pipeline / run-to-completion 两种模型 (90min) - - 🔧 动手: 各写一个 demo 对比 (90min) - - 📤 产出: `code/P1/lcore-models/` - -- [ ] **Day 041 (2026-08-08, 周六)** · 主题: 大块实验 — pipeline forward - - 🔧 动手: 实现 RX → classify → fwd 三阶段 pipeline,测 PPS (360min) - - 📤 产出: `code/P1/pipeline-fwd/` - -- [ ] **Day 042 (2026-08-09, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P1/W6-summary.md` - ---- - -### Week 7 (Day 43-49) · RSS + Flow Director - -- [ ] **Day 043 (2026-08-10, 周一)** · 主题: RSS 原理 - - 📖 学习: Toeplitz hash + RETA table (90min) - - 📤 产出: `notes/P1/W7-D1-rss.md` - -- [ ] **Day 044 (2026-08-11, 周二)** · 主题: RSS 配置实战 - - 🔧 动手: testpmd 配置 RSS,观察队列分布 (120min) - - 🐧 内核对照: 读 `net/core/dev.c` 的 RPS/RFS 实现(`get_rps_cpu`)(30min) - - 📤 产出: `notes/P1/W7-D2-rss-cfg.md` - -- [ ] **Day 045 (2026-08-12, 周三)** · 主题: Symmetric RSS - - 📖 学习: 对称 RSS key 设计 (90min) - - 🔧 动手: 用对称 key 让双向流落同队列 (60min) - - 📤 产出: `notes/P1/W7-D3-sym-rss.md` - -- [ ] **Day 046 (2026-08-13, 周四)** · 主题: rte_flow 入门 - - 📖 学习: `lib/ethdev/rte_flow.h` (90min) - - 🔧 动手: 写一条 flow rule 把特定 5-tuple 导到指定队列 (90min) - - 📤 产出: `code/P1/rte-flow-demo/` - -- [ ] **Day 047 (2026-08-14, 周五)** · 主题: Flow Director vs RSS - - 📖 学习: 两者适用场景 (60min) - - 📤 产出: `notes/P1/W7-D5-fdir-vs-rss.md` - -- [ ] **Day 048 (2026-08-15, 周六)** · 主题: 大块实验 — 多队列 echo - - 🔧 动手: 实现 16 队列 RSS echo,测单核 vs 16 核线速 (360min) - - 📤 产出: `code/P1/multiq-echo/` + `perf-data/P1/W7-multiq.md` - -- [ ] **Day 049 (2026-08-16, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P1/W7-summary.md` - ---- - -### Week 8 (Day 50-56) · mTCP 源码精读 - -- [ ] **Day 050 (2026-08-17, 周一)** · 主题: mTCP 论文精读 - - 📖 学习: NSDI'14 mTCP 论文全文 (180min) - - 📤 产出: `notes/P1/W8-D1-mtcp-paper.md` - -- [ ] **Day 051 (2026-08-18, 周二)** · 主题: mTCP 架构 - - 📖 学习: `mtcp/src/core.c` + 主循环 (120min) - - 📤 产出: `notes/P1/W8-D2-mtcp-arch.md` - -- [ ] **Day 052 (2026-08-19, 周三)** · 主题: mTCP TCP 状态机 - - 📖 学习: `mtcp/src/tcp_in.c` / `tcp_out.c` (150min) - - 🐧 内核对照: 读 `net/ipv4/tcp_input.c::tcp_rcv_state_process` (45min) - - 📤 产出: `notes/P1/W8-D3-mtcp-tcp.md`(含 mTCP vs Linux TCP 状态机对照) - -- [ ] **Day 053 (2026-08-20, 周四)** · 主题: mTCP epoll 实现 - - 📖 学习: `mtcp/src/eventpoll.c` (120min) - - 📤 产出: `notes/P1/W8-D4-mtcp-epoll.md` - -- [ ] **Day 054 (2026-08-21, 周五)** · 主题: mTCP IO 抽象 - - 📖 学习: `mtcp/src/io_module.c` 如何对接 DPDK (90min) - - 📤 产出: `notes/P1/W8-D5-mtcp-io.md` - -- [ ] **Day 055 (2026-08-22, 周六)** · 主题: 大块实验 — mTCP 跑通 epwget/epserver - - 🔧 动手: 编译 mTCP + 你已有的 `libmtcp` 跑 epserver/epwget benchmark (360min) - - 📤 产出: `perf-data/P1/W8-mtcp-bench.md` - -- [ ] **Day 056 (2026-08-23, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P1/W8-summary.md` - ---- - -### Week 9 (Day 57-63) · libmtcp v3 设计 - -- [ ] **Day 057 (2026-08-24, 周一)** · 主题: 现有 libmtcp 代码盘点 - - 🔧 动手: 通读你之前的 `libmtcp-20260622` / `20260625` 改动 (120min) - - 📤 产出: `notes/P1/W9-D1-libmtcp-audit.md` - -- [ ] **Day 058 (2026-08-25, 周二)** · 主题: v3 目标定义 - - 🔧 动手: 写 v3 RFC(功能 / 性能目标)(120min) - - 🐧 内核对照: 读 `net/socket.c` 看 socket() / bind() / listen() 内核实现 (30min) - - 📤 产出: `docs/libmtcp-v3-rfc.md` - -- [ ] **Day 059 (2026-08-26, 周三)** · 主题: v3 模块划分 - - 🔧 动手: 画出模块图 + 数据流图 (120min) - - 📤 产出: `docs/libmtcp-v3-arch.md` - -- [ ] **Day 060 (2026-08-27, 周四)** · 主题: v3 API 设计 - - 🔧 动手: 写 `libmtcp_v3.h` 头文件(仅声明)(120min) - - 📤 产出: `code/libmtcp-v3/include/libmtcp_v3.h` - -- [ ] **Day 061 (2026-08-28, 周五)** · 主题: v3 内存模型 - - 🔧 动手: 设计 mempool / mbuf 复用策略 (90min) - - 📤 产出: `docs/libmtcp-v3-memory.md` - -- [ ] **Day 062 (2026-08-29, 周六)** · 主题: 大块实验 — 搭脚手架 - - 🔧 动手: 创建仓库、Makefile、单元测试框架、CI 配置 (360min) - - 📤 产出: `code/libmtcp-v3/` 仓库初始化 - -- [ ] **Day 063 (2026-08-30, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P1/W9-summary.md` - ---- - -### Week 10 (Day 64-70) · libmtcp v3 实现 (1) — RX/TX 路径 - -- [ ] **Day 064 (2026-08-31, 周一)** · 主题: RX 路径骨架 - - 🔧 动手: 实现 `mtcp_rx_burst` + ring 分发 (180min) - - 📤 产出: commit "rx burst skeleton" - -- [ ] **Day 065 (2026-09-01, 周二)** · 主题: RX 路径解析 - - 🔧 动手: 实现 ether/ip/tcp 头部解析 (150min) - - 🐧 内核对照: 读 `net/core/dev.c::__netif_receive_skb_core` 看内核 RX 主入口 (30min) - - 📤 产出: commit "parse headers" - -- [ ] **Day 066 (2026-09-02, 周三)** · 主题: RX 路径连接查表 - - 🔧 动手: 用 rte_hash 实现 4-tuple 查表 (150min) - - 📤 产出: commit "conn lookup" - -- [ ] **Day 067 (2026-09-03, 周四)** · 主题: TX 路径骨架 - - 🔧 动手: 实现 `mtcp_tx_burst` + 批量发送 (150min) - - 📤 产出: commit "tx burst skeleton" - -- [ ] **Day 068 (2026-09-04, 周五)** · 主题: TX 路径优化 - - 🔧 动手: prefetch + batch (120min) - - 📤 产出: commit "tx prefetch" - -- [ ] **Day 069 (2026-09-05, 周六)** · 主题: 大块实验 — 端到端 echo - - 🔧 动手: 让 v3 跑通最简 echo,测初步 PPS (360min) - - 📤 产出: `perf-data/P1/W10-v3-echo-v0.md` - -- [ ] **Day 070 (2026-09-06, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P1/W10-summary.md` - ---- - -### Week 11 (Day 71-77) · libmtcp v3 实现 (2) — 协议栈核心 - -- [ ] **Day 071 (2026-09-07, 周一)** · 主题: TCP 状态机骨架 - - 🔧 动手: 实现 LISTEN/SYN_RECV/ESTABLISHED (180min) - - 📤 产出: commit "tcp fsm 1" - -- [ ] **Day 072 (2026-09-08, 周二)** · 主题: TCP 状态机 (FIN/CLOSE) - - 🔧 动手: 实现 FIN_WAIT/CLOSE_WAIT/TIME_WAIT (180min) - - 🐧 内核对照: 读 `net/ipv4/tcp_timer.c` 看内核 TIME_WAIT 处理 (30min) - - 📤 产出: commit "tcp fsm 2" - -- [ ] **Day 073 (2026-09-09, 周三)** · 主题: 重传 / 拥塞控制 - - 🔧 动手: 实现 RTO + cwnd 简化版 (180min) - - 📤 产出: commit "rto + cwnd" - -- [ ] **Day 074 (2026-09-10, 周四)** · 主题: 收发缓冲区 - - 🔧 动手: 环形 buffer + 零拷贝引用 (150min) - - 📤 产出: commit "sock buffer" - -- [ ] **Day 075 (2026-09-11, 周五)** · 主题: API 封装 - - 🔧 动手: 暴露 mtcp_socket/listen/accept/send/recv (150min) - - 📤 产出: commit "user api" - -- [ ] **Day 076 (2026-09-12, 周六)** · 主题: 大块实验 — echo 完整版 - - 🔧 动手: 写 echo server demo + 客户端,跑 1000 并发连接 (360min) - - 📤 产出: `code/libmtcp-v3/examples/echo/` - -- [ ] **Day 077 (2026-09-13, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P1/W11-summary.md` - ---- - -### Week 12 (Day 78-84) · 性能调优 + 火焰图 - -- [ ] **Day 078 (2026-09-14, 周一)** · 主题: perf top + IPC - - 🔧 动手: 用 `perf top` / `perf stat` 找热点 (150min) - - 📤 产出: `perf-data/P1/W12-perf-top.md` - -- [ ] **Day 079 (2026-09-15, 周二)** · 主题: 火焰图 - - 🔧 动手: 用 FlameGraph 生成 svg (120min) - - 🐧 内核对照: 读 `kernel/events/core.c` 看 perf 子系统入口 (30min) - - 📤 产出: `flamegraph/W12-v3.svg` - -- [ ] **Day 080 (2026-09-16, 周三)** · 主题: cache miss 分析 - - 🔧 动手: `perf c2c` / `perf mem` 找 false sharing (150min) - - 📤 产出: `perf-data/P1/W12-cache-miss.md` - -- [ ] **Day 081 (2026-09-17, 周四)** · 主题: branch / prefetch 优化 - - 🔧 动手: 加 likely/unlikely + rte_prefetch0 (150min) - - 📤 产出: commit "prefetch opt" - -- [ ] **Day 082 (2026-09-18, 周五)** · 主题: 批量化 - - 🔧 动手: 把单包路径改批量路径 (150min) - - 📤 产出: commit "batch path" - -- [ ] **Day 083 (2026-09-19, 周六)** · 主题: 大块实验 — 100G 线速冲刺 - - 🔧 动手: 反复调优 + 测试,目标单核 14.88 Mpps (480min) - - 📤 产出: `perf-data/P1/W12-100G-echo.md`(最终数据) - -- [ ] **Day 084 (2026-09-20, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P1/W12-summary.md` - ---- - -### Week 13 (Day 85-91) · P1 总结 + 文档 - -- [ ] **Day 085 (2026-09-21, 周一)** · 主题: 整理 P1 所有产出 - - 🔧 动手: 把 notes / code / perf-data 重新组织 (180min) - - 📤 产出: `P1-final/` 目录 - -- [ ] **Day 086 (2026-09-22, 周二)** · 主题: 写 P1 技术博客 (1) - - 🔧 动手: "DPDK mempool/ring/mbuf 源码深读" 一文 (180min) - - 🐧 内核对照: 在博客里加 "DPDK vs 内核" 对照章节 (30min) - - 📤 产出: `blog/P1-internals.md` - -- [ ] **Day 087 (2026-09-23, 周三)** · 主题: 写 P1 技术博客 (2) - - 🔧 动手: "从 0 写一个 100G 用户态 TCP 协议栈" 一文 (180min) - - 📤 产出: `blog/P1-libmtcp-v3.md` - -- [ ] **Day 088 (2026-09-24, 周四)** · 主题: libmtcp-v3 README + 文档 - - 🔧 动手: 完善 README、架构图、性能对比表 (180min) - - 📤 产出: `code/libmtcp-v3/README.md` - -- [ ] **Day 089 (2026-09-25, 周五)** · 主题: 简历草稿 v1 - - 🔧 动手: 把 P1 成果写进简历项目栏 (90min) - - 📤 产出: `career/resume-v1.md` - -- [ ] **Day 090 (2026-09-26, 周六)** · 主题: 大块实验 — 公开发布准备 - - 🔧 动手: 项目推 GitHub,写 release note v0.1 (240min) - - 📤 产出: GitHub release - -- [ ] **Day 091 (2026-09-27, 周日)** · 🎯 P1 阶段答辩 - - 📤 产出: `P1-final/answer.md`(自问自答 10 个核心问题) - - 📤 产出: `P1-final/retro.md`(阶段复盘 + P2 调整建议) - ---- - -# P2 · SONiC×DPDK 融合 (M4-M6) - -> **Day 92-182**, 2026-09-28 ~ 2026-12-27 -> **核心目标**: 跑通 sonic-vs,并实现 SAI-DPDK 最小适配器(15 个核心 API),让 SONiC 控制面操作能落到 DPDK 数据面上 - -## P2.0 阶段目标 - -1. 完整跑通 sonic-vs(Virtual Switch)镜像,理解 SONiC 容器栈 -2. 读懂 SAI 头文件 + sairedis 链路 -3. 实现 `sai-dpdk-mini`:15 个 API(switch/port/fdb/vlan/route/neighbor/acl/pkt-io) -4. SONiC 上跑通 L2 forwarding + L3 routing + 基本 ACL - -## P2.1 关键交付物 - -- [ ] `sonic-vs` 完整跑通 + 容器架构笔记 -- [ ] `sai-dpdk-mini` GitHub 仓库 + 15 个 API 实现 -- [ ] SONiC + sai-dpdk-mini 集成 demo 视频/截图 -- [ ] `notes/P2/` 13 周笔记 - -## P2.1.5 🐧 本阶段内核对照清单(K4 + K6) - -| 周 | 对照主题 | 内核源码路径 | -|---|---|---| -| W14 | 内核 namespace (容器隔离基础) | `kernel/nsproxy.c`, `kernel/pid_namespace.c` | -| W15 | cgroup + container | `kernel/cgroup/` | -| W16 | netlink 总览 | `net/netlink/af_netlink.c` | -| W17 | rtnetlink(端口/路由/邻居)| `net/core/rtnetlink.c` | -| W18 | netlink RTM_NEWLINK 流程 | `net/core/rtnetlink.c::rtnl_newlink` | -| W19 | FIB + 路由表 | `net/ipv4/fib_trie.c` | -| W20 | neighbour subsystem (ARP/ND) | `net/core/neighbour.c`, `net/ipv4/arp.c` | -| W21 | net_device + ndo_* | `net/core/dev.c`, `include/linux/netdevice.h` | -| W22 | bridge + FDB | `net/bridge/br_fdb.c` | -| W23 | VLAN (802.1Q)| `net/8021q/vlan_core.c` | -| W24 | nftables / iptables | `net/netfilter/nf_tables_core.c` | -| W25 | tun/tap (host_if 对照) | `drivers/net/tun.c` | -| W26 | 综合:SONiC kernel host_if 路径 | `tun/tap → netif_receive_skb` | - -## P2.2 周计划总览 (W14-W26) - -| 周 | Day | 主题 | 里程碑 | -|---|---|---|---| -| W14 | 92-98 | sonic-vs 跑通 | container up | -| W15 | 99-105 | SONiC 容器架构 | 画出全栈图 | -| W16 | 106-112 | APPL_DB → ASIC_DB 链路 | 抓 redis 流 | -| W17 | 113-119 | SAI 头文件全览 | 分类整理 | -| W18 | 120-126 | sairedis 源码 | RPC 链路 | -| W19 | 127-133 | syncd 源码 | dispatch 机制 | -| W20 | 134-140 | sai-dpdk-mini 设计 | RFC | -| W21 | 141-147 | sai_switch + sai_port | 编译通过 | -| W22 | 148-154 | sai_fdb + sai_vlan | L2 跑通 | -| W23 | 155-161 | sai_route + sai_neighbor | L3 跑通 | -| W24 | 162-168 | sai_acl + rte_flow | ACL 跑通 | -| W25 | 169-175 | sai pkt-io (host_if) | CPU 收发 | -| W26 | 176-182 | 集成 + 答辩 | demo + 文档 | - -## P2.3 详细日计划 - -### Week 14 (Day 92-98) · sonic-vs 跑通 - -- [ ] **Day 092 (2026-09-28, 周一)** · 主题: SONiC 总览 - - 📖 学习: SONiC 官方文档 Architecture 章节 (120min) - - 📤 产出: `notes/P2/W14-D1-sonic-overview.md` - -- [ ] **Day 093 (2026-09-29, 周二)** · 主题: 拉取 sonic-vs 镜像 - - 🔧 动手: 从 sonic-buildimage 拉 vs 镜像或直接 download (120min) - - 🐧 内核对照: 读 `kernel/nsproxy.c` + `Documentation/admin-guide/namespaces/` (30min) - - 📤 产出: `notes/P2/W14-D2-sonic-vs-image.md` - -- [ ] **Day 094 (2026-09-30, 周三)** · 主题: 启动 sonic-vs 容器 - - 🔧 动手: 用 docker 跑起来,登录 cli (120min) - - 📤 产出: `notes/P2/W14-D3-sonic-vs-up.md` - -- [ ] **Day 095 (2026-10-01, 周四)** · ☕ 国庆假期 — 留白 - -- [ ] **Day 096 (2026-10-02, 周五)** · ☕ 国庆假期 — 留白 - -- [ ] **Day 097 (2026-10-03, 周六)** · ☕ 国庆假期 — 留白 - -- [ ] **Day 098 (2026-10-04, 周日)** · ☕ 国庆假期 — 留白 - ---- - -### Week 15 (Day 99-105) · SONiC 容器架构 - -- [ ] **Day 099 (2026-10-05, 周一)** · ☕ 国庆假期 — 留白 - -- [ ] **Day 100 (2026-10-06, 周二)** · ☕ 国庆假期 — 留白 - -- [ ] **Day 101 (2026-10-07, 周三)** · ☕ 国庆假期 — 留白 - -- [ ] **Day 102 (2026-10-08, 周四)** · 主题: SONiC 容器全家福 - - 🔧 动手: `docker ps` 看所有容器,画交互图 (150min) - - 📤 产出: `notes/P2/W15-D4-containers.md` - -- [ ] **Day 103 (2026-10-09, 周五)** · 主题: swss 容器内部 - - 🔧 动手: 进 swss 容器看 orchagent 进程 (150min) - - 🐧 内核对照: 读 `kernel/cgroup/cgroup.c` 看容器资源限制 (30min) - - 📤 产出: `notes/P2/W15-D5-swss.md` - -- [ ] **Day 104 (2026-10-10, 周六)** · 主题: 大块实验 — 容器交互全链路 - - 🔧 动手: 从 CLI 下一条 vlan 命令,跟踪到 ASIC_DB (360min) - - 📤 产出: `notes/P2/W15-D6-fullpath.md` - -- [ ] **Day 105 (2026-10-11, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P2/W15-summary.md` - ---- - -### Week 16 (Day 106-112) · APPL_DB → ASIC_DB 链路 - -- [ ] **Day 106 (2026-10-12, 周一)** · 主题: Redis 数据库结构 - - 📖 学习: 6 个 DB 的用途 (90min) - - 🔧 动手: `redis-cli -n 0/1/2/...` 各看一遍 (60min) - - 📤 产出: `notes/P2/W16-D1-redis-dbs.md` - -- [ ] **Day 107 (2026-10-13, 周二)** · 主题: APPL_DB 表结构 - - 🔧 动手: 抓 PORT/VLAN/ROUTE 表 (120min) - - 🐧 内核对照: 读 `net/core/rtnetlink.c::rtnl_newlink` 看内核如何创建网卡 (30min) - - 📤 产出: `notes/P2/W16-D2-appl-db.md` - -- [ ] **Day 108 (2026-10-14, 周三)** · 主题: ASIC_DB 表结构 - - 🔧 动手: 抓 ASIC_STATE 表 (120min) - - 📤 产出: `notes/P2/W16-D3-asic-db.md` - -- [ ] **Day 109 (2026-10-15, 周四)** · 主题: Producer/Consumer Table - - 📖 学习: swss-common 表抽象 (90min) - - 📤 产出: `notes/P2/W16-D4-tables.md` - -- [ ] **Day 110 (2026-10-16, 周五)** · 主题: KCO/SCO 通知 - - 📖 学习: Key/Sub Change Object 机制 (90min) - - 📤 产出: `notes/P2/W16-D5-notify.md` - -- [ ] **Day 111 (2026-10-17, 周六)** · 主题: 大块实验 — Redis 流量抓取 - - 🔧 动手: `redis-cli monitor` 同步观察一次完整配置 (360min) - - 📤 产出: `perf-data/P2/W16-redis-trace.md` - -- [ ] **Day 112 (2026-10-18, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P2/W16-summary.md` - ---- - -### Week 17 (Day 113-119) · SAI 头文件全览 - -- [ ] **Day 113 (2026-10-19, 周一)** · 主题: SAI 总览 - - 📖 学习: sai.h + sai_object_type (120min) - - 📤 产出: `notes/P2/W17-D1-sai-overview.md` - -- [ ] **Day 114 (2026-10-20, 周二)** · 主题: SAI Switch / Port - - 📖 学习: saiswitch.h / saiport.h (120min) - - 🐧 内核对照: 读 `include/linux/netdevice.h` 看 `struct net_device` 与 ndo_* (30min) - - 📤 产出: `notes/P2/W17-D2-sai-switch-port.md`(含 SAI vs net_device 对照) - -- [ ] **Day 115 (2026-10-21, 周三)** · 主题: SAI FDB / VLAN - - 📖 学习: saifdb.h / saivlan.h (120min) - - 📤 产出: `notes/P2/W17-D3-sai-l2.md` - -- [ ] **Day 116 (2026-10-22, 周四)** · 主题: SAI Route / Neighbor / NextHop - - 📖 学习: sairoute.h / saineighbor.h / sainexthop.h (150min) - - 📤 产出: `notes/P2/W17-D4-sai-l3.md` - -- [ ] **Day 117 (2026-10-23, 周五)** · 主题: SAI ACL - - 📖 学习: saiacl.h (120min) - - 📤 产出: `notes/P2/W17-D5-sai-acl.md` - -- [ ] **Day 118 (2026-10-24, 周六)** · 主题: 大块实验 — SAI API 分类整理 - - 🔧 动手: 把所有 SAI API 列表 + 标红 15 个 MVP API (360min) - - 📤 产出: `notes/P2/W17-D6-sai-api-matrix.md` - -- [ ] **Day 119 (2026-10-25, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P2/W17-summary.md` - ---- - -### Week 18 (Day 120-126) · sairedis 源码 - -- [ ] **Day 120 (2026-10-26, 周一)** · 主题: sairedis 总览 - - 📖 学习: sonic-sairedis 仓库结构 (120min) - - 📤 产出: `notes/P2/W18-D1-sairedis-overview.md` - -- [ ] **Day 121 (2026-10-27, 周二)** · 主题: ClientSai - - 📖 学习: `lib/ClientSai.cpp` (150min) - - 🐧 内核对照: 读 `net/netlink/af_netlink.c` 看 netlink socket 实现 (30min) - - 📤 产出: `notes/P2/W18-D2-clientsai.md` - -- [ ] **Day 122 (2026-10-28, 周三)** · 主题: RedisRemoteSaiInterface - - 📖 学习: 如何把 SAI 调用转 Redis (150min) - - 📤 产出: `notes/P2/W18-D3-redis-interface.md` - -- [ ] **Day 123 (2026-10-29, 周四)** · 主题: 序列化协议 - - 📖 学习: meta + sai_serialize_* (120min) - - 📤 产出: `notes/P2/W18-D4-serialize.md` - -- [ ] **Day 124 (2026-10-30, 周五)** · 主题: 通知反向链路 - - 📖 学习: NotificationProducer/Consumer (120min) - - 📤 产出: `notes/P2/W18-D5-notify-back.md` - -- [ ] **Day 125 (2026-10-31, 周六)** · 主题: 大块实验 — 抓一次 SAI 调用 - - 🔧 动手: 在 orchagent 加日志,抓 sai_create_route 完整链路 (360min) - - 📤 产出: `perf-data/P2/W18-sai-trace.md` - -- [ ] **Day 126 (2026-11-01, 周日)** · ☕ 复盘 + 月度复盘 - - 📤 产出: `notes/P2/W18-summary.md` + `monthly/2026-10.md` - ---- - -### Week 19 (Day 127-133) · syncd 源码 - -- [ ] **Day 127 (2026-11-02, 周一)** · 主题: syncd 启动流程 - - 📖 学习: `syncd/syncd_main.cpp` (120min) - - 📤 产出: `notes/P2/W19-D1-syncd-main.md` - -- [ ] **Day 128 (2026-11-03, 周二)** · 主题: syncd 主循环 - - 📖 学习: `Syncd::run()` (150min) - - 🐧 内核对照: 读 `net/ipv4/fib_trie.c` 看内核 FIB 路由表实现 (30min) - - 📤 产出: `notes/P2/W19-D2-syncd-loop.md` - -- [ ] **Day 129 (2026-11-04, 周三)** · 主题: dispatch 机制 - - 📖 学习: ASIC_STATE 操作如何 dispatch 到 SAI (150min) - - 📤 产出: `notes/P2/W19-D3-dispatch.md` - -- [ ] **Day 130 (2026-11-05, 周四)** · 主题: vendor SAI 加载 - - 📖 学习: dlopen + sai_api_query (120min) - - 📤 产出: `notes/P2/W19-D4-vendor-load.md` - -- [ ] **Day 131 (2026-11-06, 周五)** · 主题: warm/fast boot - - 📖 学习: redis snapshot + restore (120min) - - 📤 产出: `notes/P2/W19-D5-warm-boot.md` - -- [ ] **Day 132 (2026-11-07, 周六)** · 主题: 大块实验 — 替换 SAI 库实验 - - 🔧 动手: 把 vs 的 libsai 换成自己的 stub,看 syncd 怎么调用 (360min) - - 📤 产出: `code/P2/sai-stub/` - -- [ ] **Day 133 (2026-11-08, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P2/W19-summary.md` - ---- - -### Week 20 (Day 134-140) · sai-dpdk-mini 设计 - -- [ ] **Day 134 (2026-11-09, 周一)** · 主题: 项目目标 RFC - - 🔧 动手: 写 RFC 文档 (180min) - - 📤 产出: `docs/sai-dpdk-mini-rfc.md` - -- [ ] **Day 135 (2026-11-10, 周二)** · 主题: 架构设计 - - 🔧 动手: 画架构图:SAI API → DPDK 资源映射 (180min) - - 🐧 内核对照: 读 `net/core/neighbour.c` 看 ARP/ND 表实现 (30min) - - 📤 产出: `docs/sai-dpdk-mini-arch.md` - -- [ ] **Day 136 (2026-11-11, 周三)** · 主题: 内部数据结构 - - 🔧 动手: 设计 port/fdb/route/acl 内部 struct (150min) - - 📤 产出: `docs/sai-dpdk-mini-ds.md` - -- [ ] **Day 137 (2026-11-12, 周四)** · 主题: 线程模型 - - 🔧 动手: 决定 SAI 调用线程 vs DPDK lcore 关系 (120min) - - 📤 产出: `docs/sai-dpdk-mini-thread.md` - -- [ ] **Day 138 (2026-11-13, 周五)** · 主题: 仓库脚手架 - - 🔧 动手: 创建仓库、Makefile、CMakeLists (120min) - - 📤 产出: `code/sai-dpdk-mini/` 初始化 - -- [ ] **Day 139 (2026-11-14, 周六)** · 主题: 大块实验 — 编译框架 - - 🔧 动手: 让 sai_api_query 返回所有空 stub 编译通过 (360min) - - 📤 产出: commit "skeleton compiles" - -- [ ] **Day 140 (2026-11-15, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P2/W20-summary.md` - ---- - -### Week 21 (Day 141-147) · sai_switch + sai_port - -- [ ] **Day 141 (2026-11-16, 周一)** · 主题: sai_create_switch - - 🔧 动手: 实现 EAL 初始化 + 探测端口 (180min) - - 📤 产出: commit "sai_create_switch" - -- [ ] **Day 142 (2026-11-17, 周二)** · 主题: sai_remove_switch - - 🔧 动手: 资源回收 (120min) - - 🐧 内核对照: 读 `net/core/dev.c::register_netdev` / `unregister_netdev` (30min) - - 📤 产出: commit "sai_remove_switch" - -- [ ] **Day 143 (2026-11-18, 周三)** · 主题: sai_create_port - - 🔧 动手: 绑定 DPDK port_id + 启动 (180min) - - 📤 产出: commit "sai_create_port" - -- [ ] **Day 144 (2026-11-19, 周四)** · 主题: port attribute - - 🔧 动手: 实现 admin_state / speed / mtu 等属性 (150min) - - 📤 产出: commit "port attrs" - -- [ ] **Day 145 (2026-11-20, 周五)** · 主题: port 统计 - - 🔧 动手: 实现 get_port_stats 桥接 rte_eth_stats (150min) - - 📤 产出: commit "port stats" - -- [ ] **Day 146 (2026-11-21, 周六)** · 主题: 大块实验 — syncd 加载 sai-dpdk-mini - - 🔧 动手: 把 .so 让 syncd 加载,看到端口出现在 ASIC_DB (360min) - - 📤 产出: `notes/P2/W21-D6-syncd-load.md` - -- [ ] **Day 147 (2026-11-22, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P2/W21-summary.md` - ---- - -### Week 22 (Day 148-154) · sai_fdb + sai_vlan (L2) - -- [ ] **Day 148 (2026-11-23, 周一)** · 主题: sai_create_vlan - - 🔧 动手: 用 bitmap 实现 VLAN 表 (150min) - - 📤 产出: commit "sai_vlan" - -- [ ] **Day 149 (2026-11-24, 周二)** · 主题: VLAN member - - 🔧 动手: 端口 ↔ VLAN 映射 (150min) - - 🐧 内核对照: 读 `net/8021q/vlan_core.c` 看内核 VLAN 处理 (30min) - - 📤 产出: commit "vlan member" - -- [ ] **Day 150 (2026-11-25, 周三)** · 主题: sai_create_fdb_entry - - 🔧 动手: rte_hash MAC 表 (180min) - - 📤 产出: commit "fdb create" - -- [ ] **Day 151 (2026-11-26, 周四)** · 主题: FDB age + flush - - 🔧 动手: 定时器 + 老化机制 (150min) - - 📤 产出: commit "fdb age" - -- [ ] **Day 152 (2026-11-27, 周五)** · 主题: L2 转发路径 - - 🔧 动手: 数据面查 MAC 表转发 (180min) - - 📤 产出: commit "l2 forward" - -- [ ] **Day 153 (2026-11-28, 周六)** · 主题: 大块实验 — L2 跑通 - - 🔧 动手: SONiC 配两个 VLAN,互通验证 (360min) - - 📤 产出: `perf-data/P2/W22-l2-test.md` - -- [ ] **Day 154 (2026-11-29, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P2/W22-summary.md` - ---- - -### Week 23 (Day 155-161) · sai_route + sai_neighbor (L3) - -- [ ] **Day 155 (2026-11-30, 周一)** · 主题: sai_create_router_interface - - 🔧 动手: 实现 RIF 概念 (150min) - - 📤 产出: commit "rif" - -- [ ] **Day 156 (2026-12-01, 周二)** · 主题: sai_create_neighbor - - 🔧 动手: ARP/ND 表 (180min) - - 🐧 内核对照: 读 `net/ipv4/arp.c` 看 ARP 状态机(NUD_* states)(30min) - - 📤 产出: commit "neighbor" - -- [ ] **Day 157 (2026-12-02, 周三)** · 主题: sai_create_next_hop - - 🔧 动手: nexthop 表 (150min) - - 📤 产出: commit "nexthop" - -- [ ] **Day 158 (2026-12-03, 周四)** · 主题: sai_create_route_entry - - 🔧 动手: rte_lpm 路由表 (180min) - - 📤 产出: commit "route lpm" - -- [ ] **Day 159 (2026-12-04, 周五)** · 主题: L3 转发路径 - - 🔧 动手: LPM 查表 → 改 dst MAC → 转发 (180min) - - 📤 产出: commit "l3 forward" - -- [ ] **Day 160 (2026-12-05, 周六)** · 主题: 大块实验 — L3 跑通 - - 🔧 动手: SONiC 配 IP + 静态路由 + ping (360min) - - 📤 产出: `perf-data/P2/W23-l3-test.md` - -- [ ] **Day 161 (2026-12-06, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P2/W23-summary.md` - ---- - -### Week 24 (Day 162-168) · sai_acl + rte_flow - -- [ ] **Day 162 (2026-12-07, 周一)** · 主题: SAI ACL 模型 - - 📖 学习: ACL table / group / entry / counter (120min) - - 📤 产出: `notes/P2/W24-D1-acl-model.md` - -- [ ] **Day 163 (2026-12-08, 周二)** · 主题: rte_flow 映射设计 - - 🔧 动手: 设计 SAI ACL → rte_flow 转换规则 (150min) - - 🐧 内核对照: 读 `net/sched/cls_flower.c` 看内核 flow classifier (30min) - - 📤 产出: `docs/acl-mapping.md`(含 rte_flow vs tc-flower 对照) - -- [ ] **Day 164 (2026-12-09, 周三)** · 主题: sai_create_acl_table - - 🔧 动手: 实现 ACL table 容器 (150min) - - 📤 产出: commit "acl table" - -- [ ] **Day 165 (2026-12-10, 周四)** · 主题: sai_create_acl_entry - - 🔧 动手: 转 rte_flow rule 下发网卡 (180min) - - 📤 产出: commit "acl entry" - -- [ ] **Day 166 (2026-12-11, 周五)** · 主题: ACL counter - - 🔧 动手: rte_flow counter action (120min) - - 📤 产出: commit "acl counter" - -- [ ] **Day 167 (2026-12-12, 周六)** · 主题: 大块实验 — ACL 跑通 - - 🔧 动手: SONiC 配置 ACL drop 某 IP,验证 (360min) - - 📤 产出: `perf-data/P2/W24-acl-test.md` - -- [ ] **Day 168 (2026-12-13, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P2/W24-summary.md` - ---- - -### Week 25 (Day 169-175) · sai pkt-io (host_if) - -- [ ] **Day 169 (2026-12-14, 周一)** · 主题: SAI host_if 模型 - - 📖 学习: trap group / trap / host_if (120min) - - 📤 产出: `notes/P2/W25-D1-hostif-model.md` - -- [ ] **Day 170 (2026-12-15, 周二)** · 主题: TAP 设备桥接 - - 🔧 动手: 创建 TAP,绑定到 SAI port (150min) - - 🐧 内核对照: 读 `drivers/net/tun.c` 看 tun/tap 完整实现 (45min) - - 📤 产出: commit "tap binding" - -- [ ] **Day 171 (2026-12-16, 周三)** · 主题: CPU 收包路径 - - 🔧 动手: 命中 trap 的包送 TAP (180min) - - 📤 产出: commit "cpu rx" - -- [ ] **Day 172 (2026-12-17, 周四)** · 主题: CPU 发包路径 - - 🔧 动手: TAP 写入的包 → DPDK tx (150min) - - 📤 产出: commit "cpu tx" - -- [ ] **Day 173 (2026-12-18, 周五)** · 主题: BGP/LACP 跑通验证 - - 🔧 动手: 起 FRR,看能不能建邻居 (180min) - - 📤 产出: `perf-data/P2/W25-bgp-test.md` - -- [ ] **Day 174 (2026-12-19, 周六)** · 主题: 大块实验 — 端到端打通 - - 🔧 动手: SONiC + sai-dpdk-mini 跑完整 L2/L3/ACL/BGP (360min) - - 📤 产出: 演示视频/截图 - -- [ ] **Day 175 (2026-12-20, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P2/W25-summary.md` - ---- - -### Week 26 (Day 176-182) · 集成 + 答辩 - -- [ ] **Day 176 (2026-12-21, 周一)** · 主题: 集成测试 - - 🔧 动手: 跑 SONiC PTF / VS test (180min) - - 📤 产出: `perf-data/P2/W26-vs-test.md` - -- [ ] **Day 177 (2026-12-22, 周二)** · 主题: README + 架构图 - - 🔧 动手: 完善 sai-dpdk-mini 文档 (180min) - - 🐧 内核对照: 在 README 加一节 "SAI vs Linux kernel netdev API 对照" (30min) - - 📤 产出: `code/sai-dpdk-mini/README.md` - -- [ ] **Day 178 (2026-12-23, 周三)** · 主题: 技术博客 (1) - - 🔧 动手: "SONiC 控制面 → SAI → DPDK 全链路" (180min) - - 📤 产出: `blog/P2-sonic-sai-dpdk.md` - -- [ ] **Day 179 (2026-12-24, 周四)** · 主题: 技术博客 (2) - - 🔧 动手: "用 DPDK 实现 SAI 最小适配器" (180min) - - 📤 产出: `blog/P2-sai-dpdk-mini.md` - -- [ ] **Day 180 (2026-12-25, 周五)** · 主题: 简历更新 v2 - - 🔧 动手: 加入 P2 项目 (90min) - - 📤 产出: `career/resume-v2.md` - -- [ ] **Day 181 (2026-12-26, 周六)** · 主题: 大块实验 — 开源发布 - - 🔧 动手: GitHub release v0.1,发知乎/掘金 (240min) - - 📤 产出: GitHub release + 推广帖 - -- [ ] **Day 182 (2026-12-27, 周日)** · 🎯 P2 阶段答辩 - - 📤 产出: `P2-final/answer.md` + `P2-final/retro.md` + `monthly/2026-12.md` - ---- - -# P3 · vSwitch / 云网关数据面 (M7-M9) - -> **Day 183-273**, 2026-12-28 ~ 2027-03-28 -> **核心目标**: 吃透 OVS-DPDK 数据面、入门 VPP 并写出 plugin、自研一个用户态 LB 原型 - -## P3.0 阶段目标 - -1. OVS-DPDK 源码精读 + 调优实战 -2. VPP 入门 + 写一个自定义 node 插件 -3. 自研 `udp-lb` / `tcp-lb`:4-tuple hash + RSS + 健康检查 -4. 跑通一个云网关原型(NAT/SNAT/DNAT) - -## P3.1 关键交付物 - -- [ ] `notes/P3/` 13 周笔记 -- [ ] `code/vpp-plugin-demo/` VPP 自定义 node -- [ ] `code/dpdk-lb/` 自研用户态 LB -- [ ] `perf-data/P3/` OVS-DPDK 调优数据 - -## P3.1.5 🐧 本阶段内核对照清单(K5 + K6) - -| 周 | 对照主题 | 内核源码路径 | -|---|---|---| -| W27 | 内核 OVS datapath | `net/openvswitch/datapath.c`, `flow_table.c` | -| W28 | 内核 OVS flow_table | `net/openvswitch/flow_table.c` | -| W29 | 内核 conntrack | `net/netfilter/nf_conntrack_core.c` | -| W30 | qdisc + 速率限制 | `net/sched/sch_*.c` | -| W31 | bridge fast path | `net/bridge/br_input.c` | -| W32 | netdev_rx_handler | `net/core/dev.c::netif_receive_skb_core` | -| W33 | XDP 程序加载 | `net/core/dev.c::dev_xdp_install` | -| W34 | XDP redirect / cpumap | `kernel/bpf/cpumap.c`, `devmap.c` | -| W35 | IPVS (LVS) 内核 LB 实现 | `net/netfilter/ipvs/ip_vs_core.c` | -| W36 | maglev / consistent hash | `net/netfilter/ipvs/ip_vs_sh.c` | -| W37 | tc flower offload | `net/sched/cls_flower.c` | -| W38 | NAT (nftables) | `net/netfilter/nf_nat_core.c` | -| W39 | 总结:OVS-kernel vs OVS-DPDK 对照 | — | - -## P3.2 周计划总览 (W27-W39) - -| 周 | Day | 主题 | 里程碑 | -|---|---|---|---| -| W27 | 183-189 | OVS 架构总览 | ovs-vswitchd 起来 | -| W28 | 190-196 | OVS-DPDK datapath | dpcls/dpif | -| W29 | 197-203 | OVS megaflow | EMC + megaflow 抓数据 | -| W30 | 204-210 | OVS-DPDK 调优 | PMD threads tune | -| W31 | 211-217 | VPP 架构 | hello node | -| W32 | 218-224 | VPP graph model | 自定义 node | -| W33 | 225-231 | VPP plugin 框架 | 插件骨架 | -| W34 | 232-238 | VPP plugin 实现 | 编译/加载 | -| W35 | 239-245 | LB 设计 | RFC + 架构 | -| W36 | 246-252 | LB 数据面 | 4-tuple hash | -| W37 | 253-259 | LB 健康检查 | active probe | -| W38 | 260-266 | NAT/SNAT/DNAT | conntrack | -| W39 | 267-273 | P3 总结 | 答辩 | - -## P3.3 详细日计划 - -### Week 27 (Day 183-189) · OVS 架构总览 - -- [ ] **Day 183 (2026-12-28, 周一)** · 主题: OVS 总体架构 - - 📖 学习: ovs-architecture.7 文档 (120min) - - 📤 产出: `notes/P3/W27-D1-ovs-arch.md` - -- [ ] **Day 184 (2026-12-29, 周二)** · 主题: OVS 编译 + DPDK 支持 - - 🔧 动手: 编译 ovs-3.x with-dpdk (120min) - - 🐧 内核对照: 读 `net/openvswitch/datapath.c::ovs_dp_process_packet` (30min) - - 📤 产出: `notes/P3/W27-D2-ovs-build.md` - -- [ ] **Day 185 (2026-12-30, 周三)** · 主题: 启动 ovs-vswitchd - - 🔧 动手: 配 dpdk-init + 创建 br0 (120min) - - 📤 产出: `notes/P3/W27-D3-ovs-up.md` - -- [ ] **Day 186 (2026-12-31, 周四)** · 主题: 添加 dpdk port - - 🔧 动手: add-port 绑定 dpdk0/dpdk1 (120min) - - 📤 产出: `notes/P3/W27-D4-dpdk-port.md` - -- [ ] **Day 187 (2027-01-01, 周五)** · ☕ 元旦假期 — 留白 - -- [ ] **Day 188 (2027-01-02, 周六)** · ☕ 元旦假期 — 留白 - -- [ ] **Day 189 (2027-01-03, 周日)** · ☕ 元旦假期 — 留白 - ---- - -### Week 28 (Day 190-196) · OVS-DPDK datapath - -- [ ] **Day 190 (2027-01-04, 周一)** · 主题: dpif-netdev 总览 - - 📖 学习: `lib/dpif-netdev.c` (120min) - - 📤 产出: `notes/P3/W28-D1-dpif.md` - -- [ ] **Day 191 (2027-01-05, 周二)** · 主题: PMD threads - - 📖 学习: pmd_thread_main 主循环 (150min) - - 🐧 内核对照: 读 `net/openvswitch/flow_table.c` 看内核 OVS megaflow (30min) - - 📤 产出: `notes/P3/W28-D2-pmd.md` - -- [ ] **Day 192 (2027-01-06, 周三)** · 主题: EMC (exact match cache) - - 📖 学习: emc_lookup / emc_insert (120min) - - 📤 产出: `notes/P3/W28-D3-emc.md` - -- [ ] **Day 193 (2027-01-07, 周四)** · 主题: dpcls (megaflow cache) - - 📖 学习: dpcls_lookup (150min) - - 📤 产出: `notes/P3/W28-D4-dpcls.md` - -- [ ] **Day 194 (2027-01-08, 周五)** · 主题: upcall slow path - - 📖 学习: upcall_xlate (90min) - - 📤 产出: `notes/P3/W28-D5-upcall.md` - -- [ ] **Day 195 (2027-01-09, 周六)** · 主题: 大块实验 — 抓 OVS 数据面 - - 🔧 动手: 用 perf 抓 PMD 热点 (360min) - - 📤 产出: `flamegraph/W28-ovs.svg` - -- [ ] **Day 196 (2027-01-10, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P3/W28-summary.md` - ---- - -### Week 29 (Day 197-203) · OVS megaflow - -- [ ] **Day 197 (2027-01-11, 周一)** · 主题: megaflow 概念 - - 📖 学习: 通配符 + bitmask (120min) - - 📤 产出: `notes/P3/W29-D1-megaflow.md` - -- [ ] **Day 198 (2027-01-12, 周二)** · 主题: 抓 megaflow 表 - - 🔧 动手: `ovs-appctl dpctl/dump-flows` (120min) - - 🐧 内核对照: 读 `net/netfilter/nf_conntrack_core.c::nf_conntrack_in` (30min) - - 📤 产出: `notes/P3/W29-D2-dump-flows.md` - -- [ ] **Day 199 (2027-01-13, 周三)** · 主题: revalidator - - 📖 学习: revalidator 线程 (120min) - - 📤 产出: `notes/P3/W29-D3-revalidator.md` - -- [ ] **Day 200 (2027-01-14, 周四)** · 主题: SMC (signature match cache) - - 📖 学习: SMC 优化 (90min) - - 📤 产出: `notes/P3/W29-D4-smc.md` - -- [ ] **Day 201 (2027-01-15, 周五)** · 主题: connection tracking - - 📖 学习: conntrack 模块 (120min) - - 📤 产出: `notes/P3/W29-D5-ct.md` - -- [ ] **Day 202 (2027-01-16, 周六)** · 主题: 大块实验 — 流表压力测试 - - 🔧 动手: 用 dperf 打 100 万流,观察 EMC/SMC/dpcls 命中率 (360min) - - 📤 产出: `perf-data/P3/W29-flow-stress.md` - -- [ ] **Day 203 (2027-01-17, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P3/W29-summary.md` - ---- - -### Week 30 (Day 204-210) · OVS-DPDK 调优 - -- [ ] **Day 204 (2027-01-18, 周一)** · 主题: PMD core 绑定 - - 🔧 动手: pmd-cpu-mask 调试 (120min) - - 📤 产出: `notes/P3/W30-D1-pmd-mask.md` - -- [ ] **Day 205 (2027-01-19, 周二)** · 主题: RXQ assignment - - 🔧 动手: pmd-rxq-affinity (120min) - - 🐧 内核对照: 读 `net/sched/sch_htb.c` 看内核 qdisc 限速 (30min) - - 📤 产出: `notes/P3/W30-D2-rxq.md` - -- [ ] **Day 206 (2027-01-20, 周三)** · 主题: mbuf 池调整 - - 🔧 动手: shared mempool 配置 (120min) - - 📤 产出: `notes/P3/W30-D3-mbuf.md` - -- [ ] **Day 207 (2027-01-21, 周四)** · 主题: TX flush 周期 - - 🔧 动手: tx-flush-interval 调优 (120min) - - 📤 产出: `notes/P3/W30-D4-tx-flush.md` - -- [ ] **Day 208 (2027-01-22, 周五)** · 主题: hardware offload - - 🔧 动手: hw-offload=true 试跑 (120min) - - 📤 产出: `notes/P3/W30-D5-hw-offload.md` - -- [ ] **Day 209 (2027-01-23, 周六)** · 主题: 大块实验 — 调优冲线速 - - 🔧 动手: 把 OVS-DPDK 调到接近线速 (480min) - - 📤 产出: `perf-data/P3/W30-ovs-perf.md` - -- [ ] **Day 210 (2027-01-24, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P3/W30-summary.md` - ---- - -### Week 31 (Day 211-217) · VPP 架构 - -- [ ] **Day 211 (2027-01-25, 周一)** · 主题: VPP 总览 - - 📖 学习: VPP fd.io 文档 (120min) - - 📤 产出: `notes/P3/W31-D1-vpp-overview.md` - -- [ ] **Day 212 (2027-01-26, 周二)** · 主题: VPP 编译安装 - - 🔧 动手: 从源码编译 (120min) - - 🐧 内核对照: 读 `net/bridge/br_input.c` 看内核 bridge fast path (30min) - - 📤 产出: `notes/P3/W31-D2-vpp-build.md` - -- [ ] **Day 213 (2027-01-27, 周三)** · 主题: VPP CLI 基础 - - 🔧 动手: vppctl 配置 L2/L3 (120min) - - 📤 产出: `notes/P3/W31-D3-vpp-cli.md` - -- [ ] **Day 214 (2027-01-28, 周四)** · 主题: vector packet processing - - 📖 学习: VPP 的 vector graph 模型 (150min) - - 📤 产出: `notes/P3/W31-D4-graph.md` - -- [ ] **Day 215 (2027-01-29, 周五)** · 主题: VPP 主要 nodes - - 📖 学习: dpdk-input / ip4-lookup / ip4-rewrite (120min) - - 📤 产出: `notes/P3/W31-D5-nodes.md` - -- [ ] **Day 216 (2027-01-30, 周六)** · 主题: 大块实验 — VPP L3 转发 - - 🔧 动手: 配两口 + 静态路由 + 压测 (360min) - - 📤 产出: `perf-data/P3/W31-vpp-l3.md` - -- [ ] **Day 217 (2027-01-31, 周日)** · ☕ 复盘 + 月度 - - 📤 产出: `notes/P3/W31-summary.md` + `monthly/2027-01.md` - ---- - -### Week 32 (Day 218-224) · VPP graph model - -- [ ] **Day 218 (2027-02-01, 周一)** · 主题: node registration - - 📖 学习: VLIB_REGISTER_NODE 宏 (120min) - - 📤 产出: `notes/P3/W32-D1-node-reg.md` - -- [ ] **Day 219 (2027-02-02, 周二)** · 主题: node function - - 📖 学习: 写一个最小 node (150min) - - 🐧 内核对照: 读 `net/core/dev.c::netdev_rx_handler_register` 看内核 rx_handler 注入机制 (30min) - - 📤 产出: `code/P3/vpp-hello-node/` - -- [ ] **Day 220 (2027-02-03, 周三)** · 主题: next nodes - - 📖 学习: vlib_node_runtime_t::next_index (120min) - - 📤 产出: `notes/P3/W32-D3-next.md` - -- [ ] **Day 221 (2027-02-04, 周四)** · 主题: buffer & metadata - - 📖 学习: vlib_buffer_t (120min) - - 📤 产出: `notes/P3/W32-D4-vlib-buf.md` - -- [ ] **Day 222 (2027-02-05, 周五)** · 主题: trace + counter - - 🔧 动手: 给 node 加 trace (120min) - - 📤 产出: `notes/P3/W32-D5-trace.md` - -- [ ] **Day 223 (2027-02-06, 周六)** · ☕ 春节假期 — 留白 - -- [ ] **Day 224 (2027-02-07, 周日)** · ☕ 春节假期 — 留白 - ---- - -### Week 33 (Day 225-231) · VPP plugin 框架 - -- [ ] **Day 225 (2027-02-08, 周一)** · ☕ 春节假期 — 留白 - -- [ ] **Day 226 (2027-02-09, 周二)** · ☕ 春节假期 — 留白 - -- [ ] **Day 227 (2027-02-10, 周三)** · ☕ 春节假期 — 留白 - -- [ ] **Day 228 (2027-02-11, 周四)** · ☕ 春节假期 — 留白 - -- [ ] **Day 229 (2027-02-12, 周五)** · ☕ 春节假期 — 留白 - -- [ ] **Day 230 (2027-02-13, 周六)** · 主题: plugin skeleton - - 🔧 动手: 用 vpp_plugin_template 生成骨架 (240min) - - 📤 产出: `code/P3/vpp-plugin-demo/` - -- [ ] **Day 231 (2027-02-14, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P3/W33-summary.md` - ---- - -### Week 34 (Day 232-238) · VPP plugin 实现 - -- [ ] **Day 232 (2027-02-15, 周一)** · 主题: API 定义 - - 🔧 动手: 写 .api 文件 (120min) - - 📤 产出: commit "api def" - -- [ ] **Day 233 (2027-02-16, 周二)** · 主题: CLI 命令 - - 🔧 动手: 注册自定义 vppctl 命令 (150min) - - 🐧 内核对照: 读 `kernel/bpf/cpumap.c` 看 XDP cpumap 程序加载 (30min) - - 📤 产出: commit "cli" - -- [ ] **Day 234 (2027-02-17, 周三)** · 主题: node 实现 - - 🔧 动手: 写一个 IP 黑名单 drop node (180min) - - 📤 产出: commit "blacklist node" - -- [ ] **Day 235 (2027-02-18, 周四)** · 主题: 接入 graph - - 🔧 动手: 插到 ip4-input 之后 (120min) - - 📤 产出: commit "graph hook" - -- [ ] **Day 236 (2027-02-19, 周五)** · 主题: 单元测试 - - 🔧 动手: 用 VPP test framework (120min) - - 📤 产出: commit "tests" - -- [ ] **Day 237 (2027-02-20, 周六)** · 主题: 大块实验 — 黑名单压测 - - 🔧 动手: 10 万条黑名单 + 压测 (360min) - - 📤 产出: `perf-data/P3/W34-blacklist.md` - -- [ ] **Day 238 (2027-02-21, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P3/W34-summary.md` - ---- - -### Week 35 (Day 239-245) · LB 设计 - -- [ ] **Day 239 (2027-02-22, 周一)** · 主题: LB 需求分析 - - 🔧 动手: 写需求文档(L4/L7、DR/NAT)(120min) - - 📤 产出: `docs/dpdk-lb-req.md` - -- [ ] **Day 240 (2027-02-23, 周二)** · 主题: 主流 LB 调研 - - 📖 学习: LVS / Maglev / Katran (180min) - - 🐧 内核对照: 读 `net/netfilter/ipvs/ip_vs_core.c::ip_vs_in` 看 LVS 数据面 (30min) - - 📤 产出: `notes/P3/W35-D2-lb-survey.md` - -- [ ] **Day 241 (2027-02-24, 周三)** · 主题: hash 算法选型 - - 📖 学习: 一致性 hash / Maglev hash (120min) - - 📤 产出: `notes/P3/W35-D3-hash.md` - -- [ ] **Day 242 (2027-02-25, 周四)** · 主题: 架构设计 - - 🔧 动手: 画架构图 (150min) - - 📤 产出: `docs/dpdk-lb-arch.md` - -- [ ] **Day 243 (2027-02-26, 周五)** · 主题: 仓库脚手架 - - 🔧 动手: 初始化 (120min) - - 📤 产出: `code/dpdk-lb/` - -- [ ] **Day 244 (2027-02-27, 周六)** · 主题: 大块实验 — 控制面 mock - - 🔧 动手: 写一个 mock config 接口 (360min) - - 📤 产出: commit "config api" - -- [ ] **Day 245 (2027-02-28, 周日)** · ☕ 复盘 + 月度 - - 📤 产出: `notes/P3/W35-summary.md` + `monthly/2027-02.md` - ---- - -### Week 36 (Day 246-252) · LB 数据面 - -- [ ] **Day 246 (2027-03-01, 周一)** · 主题: RX + parse - - 🔧 动手: 实现 RX 路径 (180min) - - 📤 产出: commit "rx parse" - -- [ ] **Day 247 (2027-03-02, 周二)** · 主题: 4-tuple hash - - 🔧 动手: rte_hash + Maglev hash (180min) - - 🐧 内核对照: 读 `net/netfilter/ipvs/ip_vs_sh.c` 看内核源散列调度 (30min) - - 📤 产出: commit "hash" - -- [ ] **Day 248 (2027-03-03, 周三)** · 主题: backend 选择 - - 🔧 动手: real server 列表 + 状态 (150min) - - 📤 产出: commit "backend pick" - -- [ ] **Day 249 (2027-03-04, 周四)** · 主题: NAT 改写 - - 🔧 动手: 改 dst IP/MAC (150min) - - 📤 产出: commit "nat rewrite" - -- [ ] **Day 250 (2027-03-05, 周五)** · 主题: session table - - 🔧 动手: 连接表 + 超时 (180min) - - 📤 产出: commit "session table" - -- [ ] **Day 251 (2027-03-06, 周六)** · 主题: 大块实验 — LB 跑通 - - 🔧 动手: 配 3 个 backend,curl 验证 (360min) - - 📤 产出: `perf-data/P3/W36-lb-test.md` - -- [ ] **Day 252 (2027-03-07, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P3/W36-summary.md` - ---- - -### Week 37 (Day 253-259) · LB 健康检查 - -- [ ] **Day 253 (2027-03-08, 周一)** · 主题: 健康检查设计 - - 🔧 动手: TCP/HTTP probe (150min) - - 📤 产出: commit "hc design" - -- [ ] **Day 254 (2027-03-09, 周二)** · 主题: probe 线程 - - 🔧 动手: 独立 service core 跑 probe (180min) - - 🐧 内核对照: 读 `net/sched/cls_flower.c` 看 tc flower + hw offload 路径 (30min) - - 📤 产出: commit "probe thread" - -- [ ] **Day 255 (2027-03-10, 周三)** · 主题: 故障切换 - - 🔧 动手: 摘除 unhealthy backend (150min) - - 📤 产出: commit "failover" - -- [ ] **Day 256 (2027-03-11, 周四)** · 主题: 统计 + Prometheus - - 🔧 动手: 暴露 metrics (150min) - - 📤 产出: commit "metrics" - -- [ ] **Day 257 (2027-03-12, 周五)** · 主题: 压力测试 - - 🔧 动手: dperf 打 1Mpps (180min) - - 📤 产出: `perf-data/P3/W37-lb-stress.md` - -- [ ] **Day 258 (2027-03-13, 周六)** · 主题: 大块实验 — LB 调优 - - 🔧 动手: 调到 5Mpps (480min) - - 📤 产出: `perf-data/P3/W37-lb-tune.md` - -- [ ] **Day 259 (2027-03-14, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P3/W37-summary.md` - ---- - -### Week 38 (Day 260-266) · NAT/SNAT/DNAT - -- [ ] **Day 260 (2027-03-15, 周一)** · 主题: NAT 概念 - - 📖 学习: SNAT/DNAT/Hairpin (120min) - - 📤 产出: `notes/P3/W38-D1-nat.md` - -- [ ] **Day 261 (2027-03-16, 周二)** · 主题: conntrack 设计 - - 🔧 动手: 设计连接表 (150min) - - 🐧 内核对照: 读 `net/netfilter/nf_nat_core.c::nf_nat_setup_info` 看内核 NAT 实现 (30min) - - 📤 产出: `docs/conntrack.md` - -- [ ] **Day 262 (2027-03-17, 周三)** · 主题: SNAT 实现 - - 🔧 动手: 出方向源地址池 (180min) - - 📤 产出: commit "snat" - -- [ ] **Day 263 (2027-03-18, 周四)** · 主题: DNAT 实现 - - 🔧 动手: 入方向目的地址改写 (180min) - - 📤 产出: commit "dnat" - -- [ ] **Day 264 (2027-03-19, 周五)** · 主题: ALG (FTP) 略 - - 📖 学习: ALG 思路 (90min) - - 📤 产出: `notes/P3/W38-D5-alg.md` - -- [ ] **Day 265 (2027-03-20, 周六)** · 主题: 大块实验 — NAT 跑通 - - 🔧 动手: 配置 SNAT/DNAT 验证 (360min) - - 📤 产出: `perf-data/P3/W38-nat-test.md` - -- [ ] **Day 266 (2027-03-21, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P3/W38-summary.md` - ---- - -### Week 39 (Day 267-273) · P3 总结 - -- [ ] **Day 267 (2027-03-22, 周一)** · 主题: 整理产出 - - 🔧 动手: 组织 P3 文档 (180min) - - 📤 产出: `P3-final/` - -- [ ] **Day 268 (2027-03-23, 周二)** · 主题: 技术博客 (1) - - 🔧 动手: "OVS-DPDK 调优实战" (180min) - - 🐧 内核对照: 博客加一节 "OVS-kernel vs OVS-DPDK datapath 对照" (30min) - - 📤 产出: `blog/P3-ovs-tuning.md` - -- [ ] **Day 269 (2027-03-24, 周三)** · 主题: 技术博客 (2) - - 🔧 动手: "用 DPDK 写一个 5Mpps LB" (180min) - - 📤 产出: `blog/P3-dpdk-lb.md` - -- [ ] **Day 270 (2027-03-25, 周四)** · 主题: 技术博客 (3) - - 🔧 动手: "VPP graph model 与自定义 plugin" (180min) - - 📤 产出: `blog/P3-vpp-plugin.md` - -- [ ] **Day 271 (2027-03-26, 周五)** · 主题: 简历更新 v3 - - 🔧 动手: 加 P3 (90min) - - 📤 产出: `career/resume-v3.md` - -- [ ] **Day 272 (2027-03-27, 周六)** · 主题: 大块实验 — 开源 dpdk-lb - - 🔧 动手: 发 GitHub + 写中英 README (240min) - - 📤 产出: GitHub release - -- [ ] **Day 273 (2027-03-28, 周日)** · 🎯 P3 阶段答辩 - - 📤 产出: `P3-final/answer.md` + `P3-final/retro.md` + `monthly/2027-03.md` - ---- - -# P4 · 网络安全数据面 (M10-M12) - -> **Day 274-364**, 2027-03-29 ~ 2027-06-27 -> **核心目标**: Suricata-DPDK 跑通;自研一个 DDoS 清洗原型(抗 5Mpps SYN flood);理解 IDS/IPS 数据面 - -## P4.0 阶段目标 - -1. Suricata DPDK 模式跑通 + 调优 -2. 自研 DDoS 清洗:SYN cookie / 速率限制 / 黑白名单 -3. 理解 TLS fingerprint (JA3/JA4) -4. 输出 3 篇安全数据面博客 - -## P4.1 关键交付物 - -- [ ] `notes/P4/` 13 周笔记 -- [ ] `code/ddos-clean/` 自研 DDoS 清洗 -- [ ] `perf-data/P4/` 5Mpps SYN flood 抗压数据 - -## P4.1.5 🐧 本阶段内核对照清单(K5 深入 + syn cookie) - -| 周 | 对照主题 | 内核源码路径 | -|---|---|---| -| W40 | 内核 IDS/IPS hook 点 | `net/netfilter/core.c`, `nf_hook_slow` | -| W41 | AF_PACKET / PACKET_MMAP | `net/packet/af_packet.c` | -| W42 | XDP DDoS drop | `samples/bpf/xdp_ddos*.c` | -| W43 | nftables 规则匹配 | `net/netfilter/nf_tables_core.c` | -| W44 | TLS kernel offload (kTLS) | `net/tls/` | -| W45 | 内核限速 (tbf/police) | `net/sched/sch_tbf.c` | -| W46 | 内核 SYN cookie | `net/ipv4/syncookies.c` | -| W47 | 内核 UDP 流量控制 | `net/ipv4/udp.c` | -| W48 | conntrack helper (DNS/FTP) | `net/netfilter/nf_conntrack_helper.c` | -| W49 | ipset (大规模 IP 集合) | `net/netfilter/ipset/` | -| W50 | BPF-based rate limit | `kernel/bpf/`, `samples/bpf/` | -| W51 | 内核 perf + tracepoints | `include/trace/events/net.h` | -| W52 | 总结:内核 vs 用户态清洗对比 | — | - -## P4.2 周计划总览 (W40-W52) - -| 周 | Day | 主题 | 里程碑 | -|---|---|---|---| -| W40 | 274-280 | DDoS 攻击类型 | 攻击谱系 | -| W41 | 281-287 | Suricata 编译 | dpdk runmode | -| W42 | 288-294 | Suricata 数据面 | 抓性能 | -| W43 | 295-301 | Suricata 规则 | Emerging Threats | -| W44 | 302-308 | TLS fingerprint | JA3/JA4 | -| W45 | 309-315 | DDoS 清洗设计 | RFC | -| W46 | 316-322 | SYN flood 防护 | SYN cookie | -| W47 | 323-329 | UDP flood 防护 | rate limit | -| W48 | 330-336 | reflection attack | DNS amp | -| W49 | 337-343 | 黑白名单 + ASN | geo block | -| W50 | 344-350 | 抗压测试 | 5Mpps | -| W51 | 351-357 | 整体调优 | 火焰图 | -| W52 | 358-364 | P4 总结 | 答辩 | - -## P4.3 详细日计划 - -### Week 40 (Day 274-280) · DDoS 攻击类型 - -- [ ] **Day 274 (2027-03-29, 周一)** · 主题: 攻击分类 - - 📖 学习: volumetric / protocol / application (120min) - - 📤 产出: `notes/P4/W40-D1-attack-types.md` - -- [ ] **Day 275 (2027-03-30, 周二)** · 主题: SYN flood 深入 - - 📖 学习: 半连接队列 + cookie (90min) - - 🐧 内核对照: 读 `net/ipv4/syncookies.c` 完整 SYN cookie 实现 (45min) - - 📤 产出: `notes/P4/W40-D2-syn-flood.md` - -- [ ] **Day 276 (2027-03-31, 周三)** · 主题: UDP/ICMP flood - - 📖 学习: 反射放大 (90min) - - 📤 产出: `notes/P4/W40-D3-udp-flood.md` - -- [ ] **Day 277 (2027-04-01, 周四)** · 主题: HTTP/CC 攻击 - - 📖 学习: 慢攻击 + 应用层 (90min) - - 📤 产出: `notes/P4/W40-D4-cc.md` - -- [ ] **Day 278 (2027-04-02, 周五)** · 主题: 业界清洗设备 - - 📖 学习: Arbor / NSFOCUS / 阿里 SCDN (120min) - - 📤 产出: `notes/P4/W40-D5-vendors.md` - -- [ ] **Day 279 (2027-04-03, 周六)** · ☕ 清明假期 — 留白 - -- [ ] **Day 280 (2027-04-04, 周日)** · ☕ 清明假期 — 留白 - ---- - -### Week 41 (Day 281-287) · Suricata 编译 - -- [ ] **Day 281 (2027-04-05, 周一)** · ☕ 清明假期 — 留白 - -- [ ] **Day 282 (2027-04-06, 周二)** · 主题: Suricata 编译 - - 🔧 动手: with-dpdk 编译 (120min) - - 🐧 内核对照: 读 `net/packet/af_packet.c` 看 AF_PACKET / PACKET_MMAP (30min) - - 📤 产出: `notes/P4/W41-D2-build.md` - -- [ ] **Day 283 (2027-04-07, 周三)** · 主题: dpdk runmode 配置 - - 🔧 动手: suricata.yaml dpdk 配置 (120min) - - 📤 产出: `notes/P4/W41-D3-cfg.md` - -- [ ] **Day 284 (2027-04-08, 周四)** · 主题: IDS 模式起跑 - - 🔧 动手: 用 ET rule 跑 IDS (120min) - - 📤 产出: `notes/P4/W41-D4-ids.md` - -- [ ] **Day 285 (2027-04-09, 周五)** · 主题: IPS 模式 - - 🔧 动手: inline + drop 测试 (120min) - - 📤 产出: `notes/P4/W41-D5-ips.md` - -- [ ] **Day 286 (2027-04-10, 周六)** · 主题: 大块实验 — 性能 baseline - - 🔧 动手: 压测 Suricata DPDK 模式吞吐 (360min) - - 📤 产出: `perf-data/P4/W41-suricata-perf.md` - -- [ ] **Day 287 (2027-04-11, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P4/W41-summary.md` - ---- - -### Week 42 (Day 288-294) · Suricata 数据面 - -- [ ] **Day 288 (2027-04-12, 周一)** · 主题: Suricata 流水线 - - 📖 学习: capture → decode → flow → detect (120min) - - 📤 产出: `notes/P4/W42-D1-pipeline.md` - -- [ ] **Day 289 (2027-04-13, 周二)** · 主题: flow tracker - - 📖 学习: flow.c (120min) - - 🐧 内核对照: 读 `samples/bpf/xdp_ddos*.c` 看 XDP DDoS drop 范例 (30min) - - 📤 产出: `notes/P4/W42-D2-flow.md` - -- [ ] **Day 290 (2027-04-14, 周三)** · 主题: 规则匹配引擎 - - 📖 学习: detect.c (150min) - - 📤 产出: `notes/P4/W42-D3-detect.md` - -- [ ] **Day 291 (2027-04-15, 周四)** · 主题: Hyperscan 加速 - - 📖 学习: MPM with hyperscan (120min) - - 📤 产出: `notes/P4/W42-D4-hs.md` - -- [ ] **Day 292 (2027-04-16, 周五)** · 主题: workers 模型 - - 📖 学习: workers vs autofp (90min) - - 📤 产出: `notes/P4/W42-D5-workers.md` - -- [ ] **Day 293 (2027-04-17, 周六)** · 主题: 大块实验 — Suricata 调优 - - 🔧 动手: 调到 10Gbps wire speed (480min) - - 📤 产出: `perf-data/P4/W42-tune.md` - -- [ ] **Day 294 (2027-04-18, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P4/W42-summary.md` - ---- - -### Week 43 (Day 295-301) · Suricata 规则 - -- [ ] **Day 295 (2027-04-19, 周一)** · 主题: 规则语法 - - 📖 学习: rule format (90min) - - 📤 产出: `notes/P4/W43-D1-rule-syntax.md` - -- [ ] **Day 296 (2027-04-20, 周二)** · 主题: ET Open 规则 - - 🔧 动手: 加载 ET Open + 验证 (120min) - - 🐧 内核对照: 读 `net/netfilter/nf_tables_core.c` 看 nft 规则匹配主循环 (30min) - - 📤 产出: `notes/P4/W43-D2-et.md` - -- [ ] **Day 297 (2027-04-21, 周三)** · 主题: 自定义规则 - - 🔧 动手: 写一条 SSH 暴力破解检测 (120min) - - 📤 产出: `code/P4/custom-rules/` - -- [ ] **Day 298 (2027-04-22, 周四)** · 主题: lua scripting - - 📖 学习: Suricata lua 接口 (120min) - - 📤 产出: `notes/P4/W43-D4-lua.md` - -- [ ] **Day 299 (2027-04-23, 周五)** · 主题: EVE JSON output - - 🔧 动手: 接 ELK 看 alert (90min) - - 📤 产出: `notes/P4/W43-D5-eve.md` - -- [ ] **Day 300 (2027-04-24, 周六)** · 主题: 大块实验 — 攻击 replay - - 🔧 动手: replay 真实攻击 pcap,看是否报警 (360min) - - 📤 产出: `perf-data/P4/W43-replay.md` - -- [ ] **Day 301 (2027-04-25, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P4/W43-summary.md` - ---- - -### Week 44 (Day 302-308) · TLS fingerprint - -- [ ] **Day 302 (2027-04-26, 周一)** · 主题: TLS handshake 复习 - - 📖 学习: ClientHello 字段 (90min) - - 📤 产出: `notes/P4/W44-D1-tls.md` - -- [ ] **Day 303 (2027-04-27, 周二)** · 主题: JA3 - - 📖 学习: JA3 hash 算法 (90min) - - 🐧 内核对照: 读 `net/tls/tls_sw.c` 看内核 kTLS 卸载 (30min) - - 📤 产出: `notes/P4/W44-D2-ja3.md` - -- [ ] **Day 304 (2027-04-28, 周三)** · 主题: JA4 - - 📖 学习: JA4 升级版 (90min) - - 📤 产出: `notes/P4/W44-D3-ja4.md` - -- [ ] **Day 305 (2027-04-29, 周四)** · 主题: 用 Suricata 抓 JA3 - - 🔧 动手: 配规则输出 ja3 (120min) - - 📤 产出: `notes/P4/W44-D4-ja3-suricata.md` - -- [ ] **Day 306 (2027-04-30, 周五)** · 主题: 月度复盘 + 整理 - - 📤 产出: `monthly/2027-04.md` - -- [ ] **Day 307 (2027-05-01, 周六)** · ☕ 五一假期 — 留白 - -- [ ] **Day 308 (2027-05-02, 周日)** · ☕ 五一假期 — 留白 - ---- - -### Week 45 (Day 309-315) · DDoS 清洗设计 - -- [ ] **Day 309 (2027-05-03, 周一)** · ☕ 五一假期 — 留白 - -- [ ] **Day 310 (2027-05-04, 周二)** · ☕ 五一假期 — 留白 - -- [ ] **Day 311 (2027-05-05, 周三)** · ☕ 五一假期 — 留白 - -- [ ] **Day 312 (2027-05-06, 周四)** · 主题: 清洗设备需求 - - 🔧 动手: 写 RFC (150min) - - 📤 产出: `docs/ddos-clean-rfc.md` - -- [ ] **Day 313 (2027-05-07, 周五)** · 主题: 架构设计 - - 🔧 动手: 画清洗 pipeline 图 (150min) - - 📤 产出: `docs/ddos-clean-arch.md` - -- [ ] **Day 314 (2027-05-08, 周六)** · 主题: 大块实验 — 仓库脚手架 - - 🔧 动手: 初始化 + Makefile (360min) - - 📤 产出: `code/ddos-clean/` - -- [ ] **Day 315 (2027-05-09, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P4/W45-summary.md` - ---- - -### Week 46 (Day 316-322) · SYN flood 防护 - -- [ ] **Day 316 (2027-05-10, 周一)** · 主题: SYN cookie 原理 - - 📖 学习: cookie 生成算法 (90min) - - 📤 产出: `notes/P4/W46-D1-syn-cookie.md` - -- [ ] **Day 317 (2027-05-11, 周二)** · 主题: SYN proxy 实现 - - 🔧 动手: 实现 SYN proxy 数据面 (180min) - - 🐧 内核对照: 读 `net/netfilter/nf_synproxy_core.c` (30min) - - 📤 产出: commit "syn proxy" - -- [ ] **Day 318 (2027-05-12, 周三)** · 主题: cookie 校验 - - 🔧 动手: ACK 阶段校验 cookie (150min) - - 📤 产出: commit "cookie verify" - -- [ ] **Day 319 (2027-05-13, 周四)** · 主题: 后端连接保持 - - 🔧 动手: 与真实服务器建二段连接 (180min) - - 📤 产出: commit "splice" - -- [ ] **Day 320 (2027-05-14, 周五)** · 主题: SYN 速率限制 - - 🔧 动手: token bucket (120min) - - 📤 产出: commit "syn rate limit" - -- [ ] **Day 321 (2027-05-15, 周六)** · 主题: 大块实验 — SYN flood 抗压 - - 🔧 动手: dperf 打 5Mpps SYN flood (480min) - - 📤 产出: `perf-data/P4/W46-syn-stress.md` - -- [ ] **Day 322 (2027-05-16, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P4/W46-summary.md` - ---- - -### Week 47 (Day 323-329) · UDP flood 防护 - -- [ ] **Day 323 (2027-05-17, 周一)** · 主题: UDP rate limit - - 🔧 动手: 实现 per-src rate limit (150min) - - 📤 产出: commit "udp rate" - -- [ ] **Day 324 (2027-05-18, 周二)** · 主题: payload signature - - 🔧 动手: 检测放大攻击特征 (150min) - - 🐧 内核对照: 读 `net/ipv4/udp.c::__udp4_lib_rcv` 看内核 UDP 主入口 (30min) - - 📤 产出: commit "udp sig" - -- [ ] **Day 325 (2027-05-19, 周三)** · 主题: source validation - - 🔧 动手: BCP38 检查 (120min) - - 📤 产出: commit "bcp38" - -- [ ] **Day 326 (2027-05-20, 周四)** · 主题: ICMP 防护 - - 🔧 动手: ICMP rate + size limit (120min) - - 📤 产出: commit "icmp" - -- [ ] **Day 327 (2027-05-21, 周五)** · 主题: fragmentation 防护 - - 🔧 动手: frag 重组 + 限制 (120min) - - 📤 产出: commit "frag" - -- [ ] **Day 328 (2027-05-22, 周六)** · 主题: 大块实验 — UDP flood 抗压 - - 🔧 动手: 测 10Mpps UDP (480min) - - 📤 产出: `perf-data/P4/W47-udp-stress.md` - -- [ ] **Day 329 (2027-05-23, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P4/W47-summary.md` - ---- - -### Week 48 (Day 330-336) · reflection attack - -- [ ] **Day 330 (2027-05-24, 周一)** · 主题: 反射攻击谱系 - - 📖 学习: DNS/NTP/SSDP/Memcached (120min) - - 📤 产出: `notes/P4/W48-D1-reflection.md` - -- [ ] **Day 331 (2027-05-25, 周二)** · 主题: DNS amp 检测 - - 🔧 动手: 检测异常 DNS 响应 (150min) - - 🐧 内核对照: 读 `net/netfilter/nf_conntrack_helper.c` 看 conntrack helper (30min) - - 📤 产出: commit "dns amp" - -- [ ] **Day 332 (2027-05-26, 周三)** · 主题: NTP monlist 防护 - - 🔧 动手: 拦截 monlist (120min) - - 📤 产出: commit "ntp" - -- [ ] **Day 333 (2027-05-27, 周四)** · 主题: Memcached 防护 - - 🔧 动手: 11211 异常拦截 (120min) - - 📤 产出: commit "memcached" - -- [ ] **Day 334 (2027-05-28, 周五)** · 主题: 反射特征库 - - 🔧 动手: 整理特征库 yaml (120min) - - 📤 产出: `config/reflection.yaml` - -- [ ] **Day 335 (2027-05-29, 周六)** · 主题: 大块实验 — 反射攻击 replay - - 🔧 动手: replay 真实反射 pcap (360min) - - 📤 产出: `perf-data/P4/W48-replay.md` - -- [ ] **Day 336 (2027-05-30, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P4/W48-summary.md` - ---- - -### Week 49 (Day 337-343) · 黑白名单 + ASN - -- [ ] **Day 337 (2027-05-31, 周一)** · 主题: 月度复盘 - - 📤 产出: `monthly/2027-05.md` - -- [ ] **Day 338 (2027-06-01, 周二)** · 主题: IP 黑名单 - - 🔧 动手: rte_lpm 加速黑名单 (180min) - - 🐧 内核对照: 读 `net/netfilter/ipset/ip_set_hash_ip.c` 看内核 ipset (30min) - - 📤 产出: commit "ip blacklist" - -- [ ] **Day 339 (2027-06-02, 周三)** · 主题: GeoIP - - 🔧 动手: 集成 MaxMind (120min) - - 📤 产出: commit "geoip" - -- [ ] **Day 340 (2027-06-03, 周四)** · 主题: ASN 阻断 - - 🔧 动手: ASN 级 drop (120min) - - 📤 产出: commit "asn block" - -- [ ] **Day 341 (2027-06-04, 周五)** · 主题: 白名单 fast path - - 🔧 动手: 白名单直通 (120min) - - 📤 产出: commit "whitelist" - -- [ ] **Day 342 (2027-06-05, 周六)** · 主题: 大块实验 — 1 千万条规则 - - 🔧 动手: 加载 1000 万 IP,看查表性能 (360min) - - 📤 产出: `perf-data/P4/W49-lpm-scale.md` - -- [ ] **Day 343 (2027-06-06, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P4/W49-summary.md` - ---- - -### Week 50 (Day 344-350) · 抗压测试 - -- [ ] **Day 344 (2027-06-07, 周一)** · 主题: 混合攻击测试 - - 🔧 动手: SYN + UDP + HTTP 同时打 (180min) - - 📤 产出: `perf-data/P4/W50-D1-mixed.md` - -- [ ] **Day 345 (2027-06-08, 周二)** · 主题: 长连接保持率 - - 🔧 动手: 攻击时合法用户存活率 (180min) - - 🐧 内核对照: 读 `include/trace/events/net.h` 看内核网络 tracepoints (30min) - - 📤 产出: `perf-data/P4/W50-D2-survival.md` - -- [ ] **Day 346 (2027-06-09, 周三)** · ☕ 端午假期 — 留白 - -- [ ] **Day 347 (2027-06-10, 周四)** · ☕ 端午假期 — 留白 - -- [ ] **Day 348 (2027-06-11, 周五)** · ☕ 端午假期 — 留白 - -- [ ] **Day 349 (2027-06-12, 周六)** · 主题: 大块实验 — 测试报告 - - 🔧 动手: 整理完整测试报告 (480min) - - 📤 产出: `perf-data/P4/W50-report.md` - -- [ ] **Day 350 (2027-06-13, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P4/W50-summary.md` - ---- - -### Week 51 (Day 351-357) · 整体调优 - -- [ ] **Day 351 (2027-06-14, 周一)** · 主题: perf top - - 🔧 动手: 找热点 (150min) - - 📤 产出: `perf-data/P4/W51-D1-perf.md` - -- [ ] **Day 352 (2027-06-15, 周二)** · 主题: 火焰图 - - 🔧 动手: 生成调用栈火焰 (120min) - - 🐧 内核对照: 读 `kernel/bpf/verifier.c` 简述 BPF 校验器(了解 BPF 生态)(30min) - - 📤 产出: `flamegraph/W51-ddos.svg` - -- [ ] **Day 353 (2027-06-16, 周三)** · 主题: cache 优化 - - 🔧 动手: 优化数据结构布局 (180min) - - 📤 产出: commit "cache opt" - -- [ ] **Day 354 (2027-06-17, 周四)** · 主题: 批量化 - - 🔧 动手: 关键路径改批量 (180min) - - 📤 产出: commit "batch" - -- [ ] **Day 355 (2027-06-18, 周五)** · 主题: 多核扩展 - - 🔧 动手: 测 1/2/4/8 核扩展性 (180min) - - 📤 产出: `perf-data/P4/W51-D5-scale.md` - -- [ ] **Day 356 (2027-06-19, 周六)** · 主题: 大块实验 — 极限冲线速 - - 🔧 动手: 单机 100Gbps 入流量清洗 (480min) - - 📤 产出: `perf-data/P4/W51-100G.md` - -- [ ] **Day 357 (2027-06-20, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P4/W51-summary.md` - ---- - -### Week 52 (Day 358-364) · P4 总结 - -- [ ] **Day 358 (2027-06-21, 周一)** · 主题: 整理产出 - - 🔧 动手: 组织 P4 文档 (180min) - - 📤 产出: `P4-final/` - -- [ ] **Day 359 (2027-06-22, 周二)** · 主题: 技术博客 (1) - - 🔧 动手: "Suricata-DPDK 工程实战" (180min) - - 🐧 内核对照: 博客加对照 "AF_PACKET vs Suricata-DPDK" 章节 (30min) - - 📤 产出: `blog/P4-suricata.md` - -- [ ] **Day 360 (2027-06-23, 周三)** · 主题: 技术博客 (2) - - 🔧 动手: "用 DPDK 抗 5Mpps SYN flood" (180min) - - 📤 产出: `blog/P4-syn-defense.md` - -- [ ] **Day 361 (2027-06-24, 周四)** · 主题: 技术博客 (3) - - 🔧 动手: "DDoS 清洗设备数据面架构" (180min) - - 📤 产出: `blog/P4-ddos-arch.md` - -- [ ] **Day 362 (2027-06-25, 周五)** · 主题: 简历 v4 + 晋升材料 - - 🔧 动手: 准备晋升答辩材料 (180min) - - 📤 产出: `career/promotion-package.md` - -- [ ] **Day 363 (2027-06-26, 周六)** · 主题: 大块实验 — 开源 ddos-clean - - 🔧 动手: GitHub release + 推广 (360min) - - 📤 产出: GitHub release - -- [ ] **Day 364 (2027-06-27, 周日)** · 🎯 P4 阶段答辩 - - 📤 产出: `P4-final/answer.md` + `P4-final/retro.md` + `monthly/2027-06.md` - ---- - -# P5 · DPU 数据面架构 (M13-M15) - -> **Day 365-455**, 2027-06-28 ~ 2027-09-26 -> **核心目标**: PCIe + vDPA + rte_flow offload 全打通;输出一份 DPU 数据面架构设计文档(达到 DPU 厂商面试的水平) - -## P5.0 阶段目标 - -1. PCIe 完全吃透:手动解码 BAR / 写最小 PCIe 驱动 -2. vDPA 跑通 + 源码理解 -3. rte_flow hardware offload 实测(CX5/CX6) -4. 调研 BlueField / Pensando / 国产 DPU -5. 写一份"自研 DPU 数据面架构"设计文档 - -## P5.1 关键交付物 - -- [ ] `notes/P5/` 13 周笔记 -- [ ] `code/pcie-driver-demo/` 最小 PCIe 驱动 -- [ ] `code/vdpa-demo/` vDPA 实验 -- [ ] `docs/dpu-arch-design.md` DPU 架构设计文档(30+ 页) - -## P5.1.5 🐧 本阶段内核对照清单(K7 深挖 + virtio 内核驱动) - -> P5 是内核学习最密集的阶段:PCIe、VFIO、virtio-net、vhost 全在内核。 - -| 周 | 对照主题 | 内核源码路径 | -|---|---|---| -| W53 | 内核 PCIe 枚举 | `drivers/pci/probe.c::pci_scan_bus`, `access.c` | -| W54 | 内核 MSI/MSI-X + IOMMU | `drivers/pci/msi.c`, `drivers/iommu/` | -| W55 | 内核 pci_driver 完整生命周期 | `drivers/pci/pci-driver.c` | -| W56 | 内核 VFIO | `drivers/vfio/pci/vfio_pci_core.c` | -| W57 | 内核 virtio-net 驱动 | `drivers/net/virtio_net.c` | -| W58 | 内核 vhost | `drivers/vhost/net.c`, `vhost.c` | -| W59 | 内核 vDPA framework | `drivers/vdpa/vdpa.c`, `drivers/virtio/virtio_vdpa.c` | -| W60 | 内核 mlx5 driver 全览 | `drivers/net/ethernet/mellanox/mlx5/core/` | -| W61 | 内核 SR-IOV | `drivers/pci/iov.c` | -| W62 | 内核 DMA API | `kernel/dma/mapping.c` | -| W63 | 内核热迁移辅助 | `drivers/vfio/vfio_iommu_type1.c` migration | -| W64 | 内核 devlink (卸载配置) | `net/core/devlink.c` | -| W65 | 总结:DPU 数据面内核视角综述 | — | - -## P5.2 周计划总览 (W53-W65) - -| 周 | Day | 主题 | 里程碑 | -|---|---|---|---| -| W53 | 365-371 | PCIe 拓扑 + Config Space | 解码 BAR | -| W54 | 372-378 | PCIe MSI-X + DMA | DMA demo | -| W55 | 379-385 | 写最小 PCIe 驱动 | insmod 成功 | -| W56 | 386-392 | virtio-net 协议 | spec 精读 | -| W57 | 393-399 | vhost-user | qemu 接 OVS | -| W58 | 400-406 | vDPA 框架 | mdev 跑通 | -| W59 | 407-413 | vDPA driver 源码 | mlx5 vdpa | -| W60 | 414-420 | rte_flow offload | CX5 实测 | -| W61 | 421-427 | DPU 业界调研 | 厂商对比 | -| W62 | 428-434 | BlueField 深入 | DOCA 入门 | -| W63 | 435-441 | DPU 架构 RFC | 30 页设计 | -| W64 | 442-448 | 架构评审 + 模拟面试 | 答辩稿 | -| W65 | 449-455 | P5 总结 | 文档定稿 | - -## P5.3 详细日计划 - -### Week 53 (Day 365-371) · PCIe 拓扑 + Config Space - -- [ ] **Day 365 (2027-06-28, 周一)** · 主题: PCIe 总览 - - 📖 学习: 《PCI Express 体系结构导读》Ch.1-2 (120min) - - 📤 产出: `notes/P5/W53-D1-pcie-overview.md` - -- [ ] **Day 366 (2027-06-29, 周二)** · 主题: 拓扑探查 - - 🔧 动手: `lspci -tv` 画本机拓扑图 (120min) - - 🐧 内核对照: 读 `drivers/pci/probe.c::pci_scan_bus` 看 PCIe 枚举 (45min) - - 📤 产出: `notes/P5/W53-D2-topo.md` - -- [ ] **Day 367 (2027-06-30, 周三)** · 主题: Configuration Space - - 🔧 动手: `lspci -xxxx` 解码 X540 头部 (150min) - - 📤 产出: `notes/P5/W53-D3-cfg-space.md` - -- [ ] **Day 368 (2027-07-01, 周四)** · 主题: BAR 解码 - - 🔧 动手: 手动解码 BAR0-5 (120min) - - 📤 产出: `notes/P5/W53-D4-bar.md` - -- [ ] **Day 369 (2027-07-02, 周五)** · 主题: Capability 链 - - 🔧 动手: 遍历 Capability + Ext Capability (120min) - - 📤 产出: `notes/P5/W53-D5-cap.md` - -- [ ] **Day 370 (2027-07-03, 周六)** · 主题: 大块实验 — setpci 实验 - - 🔧 动手: 用 setpci 改寄存器观察现象 (360min) - - 📤 产出: `notes/P5/W53-D6-setpci.md` - -- [ ] **Day 371 (2027-07-04, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P5/W53-summary.md` - ---- - -### Week 54 (Day 372-378) · PCIe MSI-X + DMA - -- [ ] **Day 372 (2027-07-05, 周一)** · 主题: MSI/MSI-X - - 📖 学习: spec + capability (120min) - - 📤 产出: `notes/P5/W54-D1-msix.md` - -- [ ] **Day 373 (2027-07-06, 周二)** · 主题: MSI-X Table 定位 - - 🔧 动手: 在 BAR 中找 MSI-X Table (120min) - - 🐧 内核对照: 读 `drivers/pci/msi.c::pci_alloc_irq_vectors` (45min) - - 📤 产出: `notes/P5/W54-D2-msix-table.md` - -- [ ] **Day 374 (2027-07-07, 周三)** · 主题: DMA 概念 - - 📖 学习: DMA address / IOVA / IOMMU (120min) - - 📤 产出: `notes/P5/W54-D3-dma.md` - -- [ ] **Day 375 (2027-07-08, 周四)** · 主题: dma-buf / iommu - - 📖 学习: VFIO mode (120min) - - 📤 产出: `notes/P5/W54-D4-iommu.md` - -- [ ] **Day 376 (2027-07-09, 周五)** · 主题: AER / ACS - - 📖 学习: Advanced Error Reporting (90min) - - 📤 产出: `notes/P5/W54-D5-aer.md` - -- [ ] **Day 377 (2027-07-10, 周六)** · 主题: 大块实验 — IOMMU 实验 - - 🔧 动手: 开关 IOMMU 跑 DPDK,观察行为 (360min) - - 📤 产出: `perf-data/P5/W54-iommu.md` - -- [ ] **Day 378 (2027-07-11, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P5/W54-summary.md` - ---- - -### Week 55 (Day 379-385) · 写最小 PCIe 驱动 - -- [ ] **Day 379 (2027-07-12, 周一)** · 主题: pci_driver 框架 - - 📖 学习: `include/linux/pci.h` (120min) - - 📤 产出: `notes/P5/W55-D1-driver.md` - -- [ ] **Day 380 (2027-07-13, 周二)** · 主题: probe + remove - - 🔧 动手: 写最小 probe (180min) - - 🐧 内核对照: 读 `drivers/pci/pci-driver.c::__pci_register_driver` (30min) - - 📤 产出: `code/pcie-driver-demo/main.c` - -- [ ] **Day 381 (2027-07-14, 周三)** · 主题: ioremap BAR - - 🔧 动手: 映射 BAR 读寄存器 (180min) - - 📤 产出: commit "ioremap" - -- [ ] **Day 382 (2027-07-15, 周四)** · 主题: MSI-X 申请 - - 🔧 动手: pci_alloc_irq_vectors (180min) - - 📤 产出: commit "msix" - -- [ ] **Day 383 (2027-07-16, 周五)** · 主题: 中断处理 - - 🔧 动手: request_irq + handler (150min) - - 📤 产出: commit "irq handler" - -- [ ] **Day 384 (2027-07-17, 周六)** · 主题: 大块实验 — 加载测试 - - 🔧 动手: insmod 加载 + dmesg 观察 (360min) - - 📤 产出: `perf-data/P5/W55-load.md` - -- [ ] **Day 385 (2027-07-18, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P5/W55-summary.md` - ---- - -### Week 56 (Day 386-392) · virtio-net 协议 - -- [ ] **Day 386 (2027-07-19, 周一)** · 主题: virtio spec 总览 - - 📖 学习: virtio 1.2 spec Ch.1-3 (150min) - - 📤 产出: `notes/P5/W56-D1-virtio.md` - -- [ ] **Day 387 (2027-07-20, 周二)** · 主题: virtqueue - - 📖 学习: split / packed virtqueue (150min) - - 🐧 内核对照: 读 `drivers/net/virtio_net.c` 完整 RX/TX 路径 (45min) - - 📤 产出: `notes/P5/W56-D2-vq.md` - -- [ ] **Day 388 (2027-07-21, 周三)** · 主题: feature bits - - 📖 学习: virtio-net 特性 (120min) - - 📤 产出: `notes/P5/W56-D3-features.md` - -- [ ] **Day 389 (2027-07-22, 周四)** · 主题: virtio-net PMD - - 📖 学习: `drivers/net/virtio/` (150min) - - 📤 产出: `notes/P5/W56-D4-virtio-pmd.md` - -- [ ] **Day 390 (2027-07-23, 周五)** · 主题: virtio mediator - - 📖 学习: vDPA mediator 角色 (90min) - - 📤 产出: `notes/P5/W56-D5-mediator.md` - -- [ ] **Day 391 (2027-07-24, 周六)** · 主题: 大块实验 — 跑 virtio-user - - 🔧 动手: testpmd + virtio-user (360min) - - 📤 产出: `notes/P5/W56-D6-virtio-user.md` - -- [ ] **Day 392 (2027-07-25, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P5/W56-summary.md` - ---- - -### Week 57 (Day 393-399) · vhost-user - -- [ ] **Day 393 (2027-07-26, 周一)** · 主题: vhost-user 协议 - - 📖 学习: spec (120min) - - 📤 产出: `notes/P5/W57-D1-vhost.md` - -- [ ] **Day 394 (2027-07-27, 周二)** · 主题: vhost-user 消息 - - 📖 学习: 28 种 message (150min) - - 🐧 内核对照: 读 `drivers/vhost/net.c::vhost_net_open` (30min) - - 📤 产出: `notes/P5/W57-D2-msg.md` - -- [ ] **Day 395 (2027-07-28, 周三)** · 主题: DPDK vhost lib - - 📖 学习: `lib/vhost/` (150min) - - 📤 产出: `notes/P5/W57-D3-vhost-lib.md` - -- [ ] **Day 396 (2027-07-29, 周四)** · 主题: QEMU + vhost-user - - 🔧 动手: QEMU 接 OVS-DPDK 跑 VM (180min) - - 📤 产出: `notes/P5/W57-D4-qemu.md` - -- [ ] **Day 397 (2027-07-30, 周五)** · 主题: VM 内 PMD - - 🔧 动手: VM 内跑 DPDK testpmd (120min) - - 📤 产出: `notes/P5/W57-D5-vm-pmd.md` - -- [ ] **Day 398 (2027-07-31, 周六)** · 主题: 大块实验 — VM↔VM 性能 - - 🔧 动手: 两 VM 互打,记录 PPS (360min) - - 📤 产出: `perf-data/P5/W57-vm-vm.md` - -- [ ] **Day 399 (2027-08-01, 周日)** · ☕ 复盘 + 月度 - - 📤 产出: `notes/P5/W57-summary.md` + `monthly/2027-07.md` - ---- - -### Week 58 (Day 400-406) · vDPA 框架 - -- [ ] **Day 400 (2027-08-02, 周一)** · 主题: vDPA 概念 - - 📖 学习: vDPA = virtio data path acceleration (120min) - - 📤 产出: `notes/P5/W58-D1-vdpa.md` - -- [ ] **Day 401 (2027-08-03, 周二)** · 主题: vDPA 架构 - - 📖 学习: kernel vDPA framework (150min) - - 🐧 内核对照: 读 `drivers/vdpa/vdpa.c` + `drivers/virtio/virtio_vdpa.c` (45min) - - 📤 产出: `notes/P5/W58-D2-arch.md` - -- [ ] **Day 402 (2027-08-04, 周三)** · 主题: mdev / vhost-vdpa - - 📖 学习: 两种暴露方式 (120min) - - 📤 产出: `notes/P5/W58-D3-mdev.md` - -- [ ] **Day 403 (2027-08-05, 周四)** · 主题: DPDK vdpa lib - - 📖 学习: `lib/vhost/vdpa.c` (120min) - - 📤 产出: `notes/P5/W58-D4-dpdk-vdpa.md` - -- [ ] **Day 404 (2027-08-06, 周五)** · 主题: 业界 vDPA 实现 - - 📖 学习: Mellanox / Intel vDPA (120min) - - 📤 产出: `notes/P5/W58-D5-impl.md` - -- [ ] **Day 405 (2027-08-07, 周六)** · 主题: 大块实验 — 跑 vdpa example - - 🔧 动手: examples/vdpa 跑通 (360min) - - 📤 产出: `notes/P5/W58-D6-example.md` - -- [ ] **Day 406 (2027-08-08, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P5/W58-summary.md` - ---- - -### Week 59 (Day 407-413) · vDPA driver 源码 - -- [ ] **Day 407 (2027-08-09, 周一)** · 主题: mlx5 vdpa 总览 - - 📖 学习: `drivers/vdpa/mlx5/` (120min) - - 📤 产出: `notes/P5/W59-D1-mlx5.md` - -- [ ] **Day 408 (2027-08-10, 周二)** · 主题: 设备初始化 - - 📖 学习: probe + setup (150min) - - 🐧 内核对照: 读 `drivers/net/ethernet/mellanox/mlx5/core/main.c` (45min) - - 📤 产出: `notes/P5/W59-D2-init.md` - -- [ ] **Day 409 (2027-08-11, 周三)** · 主题: virtq 卸载 - - 📖 学习: 如何把 virtqueue 映射到 HW (180min) - - 📤 产出: `notes/P5/W59-D3-virtq-offload.md` - -- [ ] **Day 410 (2027-08-12, 周四)** · 主题: 控制消息 - - 📖 学习: 状态变更处理 (120min) - - 📤 产出: `notes/P5/W59-D4-ctrl.md` - -- [ ] **Day 411 (2027-08-13, 周五)** · 主题: live migration - - 📖 学习: vDPA 热迁移机制 (120min) - - 📤 产出: `notes/P5/W59-D5-migration.md` - -- [ ] **Day 412 (2027-08-14, 周六)** · 主题: 大块实验 — 跑 mlx5 vDPA(若有) - - 🔧 动手: 若有 CX5/CX6,实跑 (360min) - - 📤 产出: `perf-data/P5/W59-mlx5-vdpa.md` - -- [ ] **Day 413 (2027-08-15, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P5/W59-summary.md` - ---- - -### Week 60 (Day 414-420) · rte_flow offload - -- [ ] **Day 414 (2027-08-16, 周一)** · 主题: rte_flow API 复习 - - 📖 学习: pattern / action / attr (120min) - - 📤 产出: `notes/P5/W60-D1-rteflow.md` - -- [ ] **Day 415 (2027-08-17, 周二)** · 主题: flow 探测能力 - - 🔧 动手: rte_flow_validate 探测 (120min) - - 🐧 内核对照: 读 `drivers/pci/iov.c` 看内核 SR-IOV VF 创建 (30min) - - 📤 产出: `notes/P5/W60-D2-cap.md` - -- [ ] **Day 416 (2027-08-18, 周三)** · 主题: 5-tuple 卸载 - - 🔧 动手: 把 5-tuple 卸到 HW (180min) - - 📤 产出: commit "5tuple offload" - -- [ ] **Day 417 (2027-08-19, 周四)** · 主题: RSS action - - 🔧 动手: rss action 配置 (120min) - - 📤 产出: commit "rss action" - -- [ ] **Day 418 (2027-08-20, 周五)** · 主题: counter / meter - - 🔧 动手: 卸载 counter (120min) - - 📤 产出: commit "counter" - -- [ ] **Day 419 (2027-08-21, 周六)** · 主题: 大块实验 — offload 性能对比 - - 🔧 动手: SW vs HW 路径 PPS 对比 (480min) - - 📤 产出: `perf-data/P5/W60-offload.md` - -- [ ] **Day 420 (2027-08-22, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P5/W60-summary.md` - ---- - -### Week 61 (Day 421-427) · DPU 业界调研 - -- [ ] **Day 421 (2027-08-23, 周一)** · 主题: BlueField 1/2/3 - - 📖 学习: NVIDIA 文档 (150min) - - 📤 产出: `notes/P5/W61-D1-bf.md` - -- [ ] **Day 422 (2027-08-24, 周二)** · 主题: Pensando DSC - - 📖 学习: Pensando 架构 (120min) - - 🐧 内核对照: 读 `kernel/dma/mapping.c` DMA API (30min) - - 📤 产出: `notes/P5/W61-D2-pensando.md` - -- [ ] **Day 423 (2027-08-25, 周三)** · 主题: AWS Nitro - - 📖 学习: re:Invent talks (120min) - - 📤 产出: `notes/P5/W61-D3-nitro.md` - -- [ ] **Day 424 (2027-08-26, 周四)** · 主题: Azure SmartNIC (AccelNet) - - 📖 学习: NSDI'18 论文 (120min) - - 📤 产出: `notes/P5/W61-D4-accelnet.md` - -- [ ] **Day 425 (2027-08-27, 周五)** · 主题: 国产 DPU - - 📖 学习: 中科驭数 / 云豹 / 星云 (120min) - - 📤 产出: `notes/P5/W61-D5-cn-dpu.md` - -- [ ] **Day 426 (2027-08-28, 周六)** · 主题: 大块实验 — 厂商对比矩阵 - - 🔧 动手: 写一份对比表(功能/性能/SDK/开放度)(360min) - - 📤 产出: `notes/P5/W61-D6-matrix.md` - -- [ ] **Day 427 (2027-08-29, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P5/W61-summary.md` - ---- - -### Week 62 (Day 428-434) · BlueField 深入 - -- [ ] **Day 428 (2027-08-30, 周一)** · 主题: DOCA 总览 - - 📖 学习: DOCA SDK 文档 (150min) - - 📤 产出: `notes/P5/W62-D1-doca.md` - -- [ ] **Day 429 (2027-08-31, 周二)** · 主题: DOCA Flow - - 📖 学习: DOCA Flow API (150min) - - 🐧 内核对照: 读 `drivers/vfio/vfio_iommu_type1.c` 看 vfio 迁移辅助 (30min) - - 📤 产出: `notes/P5/W62-D2-doca-flow.md` - -- [ ] **Day 430 (2027-09-01, 周三)** · 主题: DOCA App Shield / DPI - - 📖 学习: 安全相关组件 (120min) - - 📤 产出: `notes/P5/W62-D3-app-shield.md` - -- [ ] **Day 431 (2027-09-02, 周四)** · 主题: ARM SoC 调度 - - 📖 学习: BlueField ARM 核分工 (120min) - - 📤 产出: `notes/P5/W62-D4-arm.md` - -- [ ] **Day 432 (2027-09-03, 周五)** · 主题: BlueField 模式 - - 📖 学习: Separated / Embedded / SmartNIC (120min) - - 📤 产出: `notes/P5/W62-D5-modes.md` - -- [ ] **Day 433 (2027-09-04, 周六)** · 主题: 大块实验 — DOCA hello(若无硬件则模拟) - - 🔧 动手: 跑 DOCA 示例(无硬件则读源码)(360min) - - 📤 产出: `notes/P5/W62-D6-doca-hello.md` - -- [ ] **Day 434 (2027-09-05, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P5/W62-summary.md` - ---- - -### Week 63 (Day 435-441) · DPU 架构 RFC - -- [ ] **Day 435 (2027-09-06, 周一)** · 主题: 设计目标 - - 🔧 动手: 写 motivation + 目标 (180min) - - 📤 产出: `docs/dpu-arch-design.md` (1) - -- [ ] **Day 436 (2027-09-07, 周二)** · 主题: 数据面架构 - - 🔧 动手: 画 fast path / slow path 图 (180min) - - 🐧 内核对照: 读 `net/core/devlink.c` 看内核 devlink 卸载配置接口 (30min) - - 📤 产出: `docs/dpu-arch-design.md` (2) - -- [ ] **Day 437 (2027-09-08, 周三)** · 主题: 卸载分层 - - 🔧 动手: 写 HW / FW / SW 三层卸载策略 (180min) - - 📤 产出: `docs/dpu-arch-design.md` (3) - -- [ ] **Day 438 (2027-09-09, 周四)** · 主题: 控制面 - - 🔧 动手: 控制器接口设计 (180min) - - 📤 产出: `docs/dpu-arch-design.md` (4) - -- [ ] **Day 439 (2027-09-10, 周五)** · 主题: 多租户隔离 - - 🔧 动手: SR-IOV / SF / VF 设计 (150min) - - 📤 产出: `docs/dpu-arch-design.md` (5) - -- [ ] **Day 440 (2027-09-11, 周六)** · 主题: 大块实验 — 性能模型 - - 🔧 动手: 算 PPS / 带宽 / 时延预算 (360min) - - 📤 产出: `docs/dpu-arch-design.md` (6) - -- [ ] **Day 441 (2027-09-12, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P5/W63-summary.md` - ---- - -### Week 64 (Day 442-448) · 架构评审 + 模拟面试 - -- [ ] **Day 442 (2027-09-13, 周一)** · 主题: 自评审 - - 🔧 动手: 自己挑漏洞 (180min) - - 📤 产出: `docs/dpu-arch-design-review.md` - -- [ ] **Day 443 (2027-09-14, 周二)** · 主题: 同行评审准备 - - 🔧 动手: 发给同行/导师评审 (120min) - - 🐧 内核对照: 综述"DPU 数据面从内核视角看" — 在设计文档补一节 (60min) - - 📤 产出: review 邮件 + 内核视角综述章节 - -- [ ] **Day 444 (2027-09-15, 周三)** · 主题: 答辩稿 v1 - - 🔧 动手: 写 PPT/Keynote 草稿 (180min) - - 📤 产出: `slides/dpu-arch.pdf` - -- [ ] **Day 445 (2027-09-16, 周四)** · 主题: 模拟面试 (1) - - 🔧 动手: 自我陈述 + Q&A 30 问 (180min) - - 📤 产出: `career/mock-interview-1.md` - -- [ ] **Day 446 (2027-09-17, 周五)** · 主题: 模拟面试 (2) - - 🔧 动手: 找朋友模拟 (150min) - - 📤 产出: `career/mock-interview-2.md` - -- [ ] **Day 447 (2027-09-18, 周六)** · 主题: 大块实验 — 答辩稿定稿 - - 🔧 动手: 反复打磨 PPT + 文档 (480min) - - 📤 产出: 定稿 slides - -- [ ] **Day 448 (2027-09-19, 周日)** · ☕ 复盘 - - 📤 产出: `notes/P5/W64-summary.md` - ---- - -### Week 65 (Day 449-455) · P5 总结 - -- [ ] **Day 449 (2027-09-20, 周一)** · 主题: 整理产出 - - 🔧 动手: 组织 P5 文档 (180min) - - 📤 产出: `P5-final/` - -- [ ] **Day 450 (2027-09-21, 周二)** · 主题: 技术博客 (1) - - 🔧 动手: "从 0 看懂 PCIe + vDPA" (180min) - - 🐧 内核对照: 博客中同时讲内核 vDPA 与 DPDK vDPA 对照 (30min) - - 📤 产出: `blog/P5-pcie-vdpa.md` - -- [ ] **Day 451 (2027-09-22, 周三)** · 主题: 技术博客 (2) - - 🔧 动手: "DPU 数据面架构设计要点" (180min) - - 📤 产出: `blog/P5-dpu-arch.md` - -- [ ] **Day 452 (2027-09-23, 周四)** · 主题: 简历 v5 - - 🔧 动手: 把 P5 加入简历 (120min) - - 📤 产出: `career/resume-v5.md` - -- [ ] **Day 453 (2027-09-24, 周五)** · 主题: 投递准备 - - 🔧 动手: 列目标公司 + JD 分析 (180min) - - 📤 产出: `career/target-companies.md` - -- [ ] **Day 454 (2027-09-25, 周六)** · 主题: 大块实验 — 简历定稿 - - 🔧 动手: 简历定稿 + cover letter 模板 (360min) - - 📤 产出: `career/resume-final.md` - -- [ ] **Day 455 (2027-09-26, 周日)** · 🎯 P5 阶段答辩 - - 📤 产出: `P5-final/answer.md` + `P5-final/retro.md` + `monthly/2027-09.md` - ---- - -# P6 · 作品收口 + 出口 (M16-M18) - -> **Day 456-546**, 2027-09-27 ~ 2027-12-27 -> **核心目标**: 把 18 个月所有产出收口,做出 1 个高质量开源项目、3 篇深度博客、1 套面试材料,正式投递目标公司或申报晋升 - -## P6.0 阶段目标 - -1. 挑选 1 个最有沉淀的项目(`libmtcp-v3` / `sai-dpdk-mini` / `dpdk-lb` / `ddos-clean`)做开源升级 -2. 写出 3 篇引爆型博客(可推阿里云开发者社区/InfoQ/掘金/知乎) -3. 准备完整面试材料:自我介绍 / 项目深度 / 系统设计 / 八股 -4. 投递目标公司 + 跟进 -5. 准备晋升答辩材料(若选晋升路线) - -## P6.1 关键交付物 - -- [ ] 1 个 GitHub Star ≥ 100 的开源项目 -- [ ] 3 篇技术博客(每篇 PV ≥ 5000 目标) -- [ ] 1 份 8-10 页简历 -- [ ] 1 套面试题库(200+ Q&A) -- [ ] 拿到 offer 或晋升通过 - -## P6.1.5 🐧 本阶段内核相关准备 - -P6 阶段不再新增内核学习,而是**整理**: - -- 面试题库中单开一列 "内核 vs DPDK" 对照题 (~20 道) -- 简历技能栏加 "Linux 内核网络栈 (net_device / netlink / conntrack / vfio / vdpa)" -- 收尾博客 "18 个月成长" 中重点讲 "为什么 DPDK 工程师必须懂内核" -- 系统设计题准备时,凡涉及网络的都要有内核视角 -- 面试自我介绍中主动提 "读过 XX 个内核网络子系统源码" - -## P6.2 周计划总览 (W66-W78) - -| 周 | Day | 主题 | 里程碑 | -|---|---|---|---| -| W66 | 456-462 | 选定开源主项目 | 项目选型 | -| W67 | 463-469 | 项目代码 review | issue 列表 | -| W68 | 470-476 | 项目重构 + 文档 | v1.0 release | -| W69 | 477-483 | CI + 测试 + benchmark | 完整 ci | -| W70 | 484-490 | 引爆博客 (1) | 发布 | -| W71 | 491-497 | 引爆博客 (2) | 发布 | -| W72 | 498-504 | 引爆博客 (3) | 发布 | -| W73 | 505-511 | 简历定稿 | 8-10 页 | -| W74 | 512-518 | 面试题库 (1) | 100 题 | -| W75 | 519-525 | 面试题库 (2) | 200 题 | -| W76 | 526-532 | 系统设计 + 模拟面试 | 答辩稿 | -| W77 | 533-539 | 投递 + 一面/二面 | 进展跟踪 | -| W78 | 540-546 | 收口 + 决策 | offer / 续航 | - -## P6.3 详细日计划 - -### Week 66 (Day 456-462) · 选定开源主项目 - -- [ ] **Day 456 (2027-09-27, 周一)** · 主题: 项目盘点 - - 🔧 动手: 把 4 个候选项目列优缺点 (180min) - - 📤 产出: `P6/project-eval.md` - -- [ ] **Day 457 (2027-09-28, 周二)** · 主题: 受众分析 - - 🔧 动手: 判断哪个最有人用 (120min) - - 📤 产出: `P6/audience.md` - -- [ ] **Day 458 (2027-09-29, 周三)** · 主题: 选定 + RFC - - 🔧 动手: 写主项目 v1.0 RFC (180min) - - 📤 产出: `P6/main-project-rfc.md` - -- [ ] **Day 459 (2027-09-30, 周四)** · 主题: 月度复盘 - - 📤 产出: `monthly/2027-09.md` - -- [ ] **Day 460 (2027-10-01, 周五)** · ☕ 国庆假期 — 留白 - -- [ ] **Day 461 (2027-10-02, 周六)** · ☕ 国庆假期 — 留白 - -- [ ] **Day 462 (2027-10-03, 周日)** · ☕ 国庆假期 — 留白 +**P0 completion gate (hard):** MPSC queue 2P1C, 2M enqueues, zero loss · can draw NIC→CPU packet path · perf stat/record/flamegraph basics · buddy/slab vs mempool. --- -### Week 67 (Day 463-469) · 项目代码 review +## 3. Weekly Rhythm -- [ ] **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` +**Weekdays (1.5–2h):** 15 min review yesterday → the day's ONE core task → 30 min notes + git commit. +**Weekends (4–6h):** Sat AM big coding block · Sat PM test/debug · Sun AM notes + blog post · Sun PM buffer (catch-up or rest). +**Rules:** one core task per day · if missed, mark slipped — never chase with all-nighters · Sunday is the buffer · update progress at week end, adjust next week. --- -### Week 77 (Day 533-539) · 投递 + 一面/二面 +## 4. Monthly Stop-Loss Review -- [ ] **Day 533 (2027-12-13, 周一)** · 主题: 投递目标公司 (1) - - 🔧 动手: 内推阿里云/腾讯云/字节 (120min) - - 📤 产出: `career/applications.md` +- ≥70% of plan done → keep pace. +- 30–50% done → find why, cut scope or extend next month. +- Two consecutive months ≤30% → stop, re-evaluate the whole direction. -- [ ] **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 # 本规划文档 -``` +Checklist: days completed vs plan · what slipped and why · next-month adjustments · health (sleep/exercise/mood). --- -## 附录 B · 性能基线参考 +## 5. Testing Strategy -| 场景 | 硬件 | 目标 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 | +- **P2 libmtcp-v3:** unit tests per function (scapy-crafted packets) · integration with dperf · corner cases via iptables drop/reorder/delay · perf stat + flame graphs. +- **P3 SAI-DPDK Mini:** control-plane script tests (SAI API returns) · scapy data-plane verification · 1000-flow soak for leaks · benchmark vs kernel bridge/OVS. +- **Sprint experiments:** SoftRoCE (rxe) + perftest between two VMs — real RDMA traffic without RDMA NICs; reproduce PFC on/off difference with tc rate limiting. --- -## 附录 C · 周/月复盘模板 - -### 周复盘 (`notes/Pn/Wmm-summary.md`) - -```markdown -# Week NN 复盘 (Day xxx-yyy) - -## 完成情况 -- [x] Day xxx: ... -- [ ] Day yyy: ...(未完成原因) - -## 学到的 3 件事 -1. -2. -3. +## 6. Principles -## 卡点 / 疑惑 -- - -## 下周计划微调 -- -``` - -### 月复盘 (`monthly/YYYY-MM.md`) - -```markdown -# 月度复盘 YYYY-MM - -## 本月目标 vs 实际 -| 目标 | 完成 | 备注 | - -## 关键产出 -- 代码: -- 笔记: -- 数据: - -## 下月调整 -- 节奏: -- 内容: -- 出口: - -## 自我评分 (1-5) -- 学习深度: -- 动手量: -- 输出量: -- 心态: -``` +1. Direction right, timeline honest, scope halved, done > perfect. +2. This is an 8–10 month marathon, not a 6-month sprint. +3. Interview feedback > closed-door polishing: ship early, fix from feedback. +4. A project you can explain beats a rushed one you can't. +5. Health > progress. Long-termism. --- -## 收口语 - -> **18 个月很长,但日子是一天一天过的。** -> 不用每一天都完美执行,但每天都必须有一个**可见的产出物**。 -> 当你回头看 Day 1 到 Day 546 的勾选状态时,你的实力会比任何一份简历都更有说服力。 +## 7. Resources -— 起算日 2026-06-29,目标交付日 2027-12-27。 +- `dpdk-roadmap-v3/books/` (13 ebooks) · `dpdk-roadmap-v3/references/` (5 papers + 9 tech docs) · `dpdk-roadmap-v3/code/` (artifacts) +- `src/` — 6 vendored source trees, each its own git repo (DPDK 25.11.3, OVS 4.0.0, VPP 26.06, rdma-core 64.0, perftest, tcp-stack) +- `kb/` — knowledge cards (3/day during sprints) · `blog-site/` — all output posts +- Career docs: `career-planning/` (decision report, Gallup profiles) +*Execution artifacts live in git commits — the roadmap above is the only planning document.*