Files
dpdk-blog/products/home-gateway.md
T
newbieandClaude Code 71c90bb632 fix: uNOS 硬件基线对齐 jb3455b 实测
- 1G 大页规划(×2-4) vs 实机实际 1G=0,须加内核引导参数
- 数据面单核 → 1-2 核:纯转发单核够,叠加 NAT/ACL/QoS 后无余量
- unos-design §2.2 物理口笔误 82576 × 2 → X540-T2 10G × 2
- home-gateway 补「研发机 vs 量产 BOM」分工说明
- §4.0「单核转发无法扩展」限定为 Cloud Edge 目标,与 Home CPE 区分

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-10 00:13:26 +08:00

355 lines
13 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 家用 DPDK 网络加速器 — 产品规划文档
> **创建日期**: 2026-07-13
> **关联学习路线**: `2026-06-29-dpdk-roadmap-v3-design.md`
> **目标**: 基于 DPDK 做一个低成本家用网络加速器,可以量产销售
---
## 一、产品定义
| 项目 | 内容 |
|------|------|
| 产品名 | 家用网络加速器(暂定) |
| 定位 | 插在光猫和路由器之间,即插即用 |
| 一句话卖点 | "让千兆宽带真正跑满,全家不卡,不用设置" |
| 目标用户 | 家庭用户,不折腾 |
| 参考售价 | ¥299(100 台试水,单台毛利 ~¥118) |
### 使用方式
```
原来: 光猫 ─── 路由器 ─── 全家设备
↑ 光猫 NAT 性能差,有人下载全家卡
加盒子: 光猫 ─── [你的盒子] ─── 路由器 ─── 全家设备
↑ ↑
桥模式/无感透传 DPDK 线速 + 智能 QoS
```
---
## 二、三大核心功能
| # | 功能 | 痛点 | 实现原理 |
|---|------|------|---------|
| 1 | **提速** | 运营商光猫 NAT 差,千兆宽带只能跑 600M | 光猫改桥接,盒子 DPDK 线速 NAT/转发,跑满 940M |
| 2 | **不卡** | 有人下载/BT/看视频,其他人游戏延迟爆炸 | DPDK rte_flow 按流特征分类:小包优先、大包限速、视频保底 |
| 3 | **零配置** | 用户不想进后台、不想学网络知识 | 开机自动 DHCP 探测 WAN/LAN 方向,默认桥模式透传 |
### 功能 2 详细:智能流控
```
收包 → rte_flow 五元组分类
│
├── 小包持续流 (<256B, >100pps)
│ → 标记 "游戏/通话/视频会议"
│ → 高优先级队列,绝对优先
│
├── 大包持续流 (>1024B, >50Mbps)
│ → 标记 "下载/BT/视频缓冲"
│ → 低优先级队列,带宽上限
│
└── 其他
→ 普通优先级,尽力转发
```
> 关键设计:不识别具体应用(不需要 DPI),只靠流特征判断。简单、可靠、私密。
---
## 三、硬件 BOM(最低成本,支持 VFIO)
> **研发机 vs 量产 BOM 的分工(2026-10-03)**:本节是**量产** BOM——目标是 ¥299 售价下的最低成本 + 低功耗(常开设备)。
> **研发/验证机**已就绪:jb3455b = J3455 四核 + **X540-AT2 10G × 2** + 8GB DDR3。
> 两者**不要混**:X540 单价/功耗都高于 82576,对 1 Gbps 产品是过度设计;研发机上的价值是能跑通代码 + 压实测数字,不是出货配置。
> X540 在 jb3455b 上实测 PCIe 2.0 **x2**(≈8 Gbps),对 1G 产品 8 倍余量,不构成约束。
### 选型理由
- **J3355B-ITX**: Apollo Lake 起全系支持 VT-d,这是 Intel 平台最便宜的 VT-d 方案
- **Intel 82576**: DPDK igb PMD 原生驱动,最老最稳定的网卡之一,二手极便宜
- **VFIO > UIO**: VFIO 是 DPDK 官方推荐驱动方式,内核主线永久支持,DMA 安全隔离
### 逐项 BOM
| # | 零件 | 规格 | 来源 | 单价 |
|---|------|------|------|------|
| 1 | 主板 | ASRock J3355B-ITX (双核 2.0GHz, 10W, VT-d) | 闲鱼 | ¥100 |
| 2 | 内存 | DDR3L 2GB SODIMM | 闲鱼拆机 | ¥12 |
| 3 | 存储 | 8GB mSATA SSD | 闲鱼拆机 | ¥10 |
| 4 | 网卡 | Intel 82576 双口千兆 (PCIe 2.0 x4) | 闲鱼拆机 | ¥30 |
| 5 | 电源 | 12V 3A 适配器 + DC 5.5×2.5mm 线 | 1688 批发 | ¥8 |
| 6 | 外壳 | 3mm 亚克力激光切割 (17×17cm ITX) | 淘宝定制 | ¥10 |
| 7 | 铜柱+螺丝 | M3×6 一套 4 颗 | 1688 | ¥2 |
| 8 | 导热垫 | 40×40×1mm 硅胶 | — | ¥1 |
| | | | **合计** | **¥173** |
### 备选主板
| 型号 | CPU | 核数 | VT-d | 价格 | 备注 |
|------|-----|------|------|------|------|
| ASRock J3355B-ITX | J3355 | 双核 | ✅ | ¥100 | **首选,最便宜 VT-d** |
| ASRock J3455-ITX | J3455 | 四核 | ✅ | ¥140 | J3355 缺货时备选 |
| ASRock J4205-ITX | J4205 | 四核 | ✅ | ¥160 | 第二备选 |
### 内存使用分析
```
DPDK hugepage: 64MB
Alpine Linux: ~128MB
DPDK app: ~50MB
空闲缓冲: ~1.7GB
总计 (2GB): ~300MB 使用 / ~1.7GB 空闲
结论: 2GB 绰绰有余,不需要 4GB
```
### 存储使用分析
```
Alpine Linux: ~130MB ISO → 安装后 ~50MB
DPDK 库: ~20MB
应用二进制: ~5MB
配置/日志: ~10MB
总计: <100MB
结论: 8GB mSATA 完全够用
```
---
## 四、软件技术栈
| 层 | 组件 | 说明 |
|----|------|------|
| 操作系统 | Alpine Linux 3.20 | 最小 Linux 发行版,~50MB |
| 内核 | linux-lts 6.6 | VFIO、hugepage、AF_PACKET 主线支持 |
| 数据面框架 | DPDK 24.11 LTS | 用户态高性能包处理 |
| PMD 驱动 | `drivers/net/igb` | Intel 82576 原生 DPDK Poll Mode Driver |
| 设备绑定 | `vfio-pci` | VT-d + IOMMU,DPDK 官方推荐方式 |
| 转发 | 自研 DPDK 应用 | L3 转发 + NAT + rte_flow QoS |
| 控制面 | Unix socket + HTTP API | 配置下发、状态查询 |
| 初始化 | 自定义 init 脚本 | DHCP 探测、自动识别 WAN/LAN |
### DPDK 技术点与学习路线对应
| DPDK 技术 | 用途 | 学习路线阶段 |
|-----------|------|------------|
| `rte_mempool` | 包内存池管理 | P1 |
| `rte_mbuf` | 包数据结构 | P1 |
| `rte_ring` | lcore 间无锁通信 | P1 |
| `rte_eal_init` | EAL 初始化 (hugepage/lcore) | P1 |
| `rte_ethdev` (igb PMD) | 82576 网卡收发 | P1 |
| `rte_eth_tx_burst` / `rte_eth_rx_burst` | 批量收发包 | P1 |
| `rte_flow` | 流分类 (小包/大包分流) | P3 |
| `rte_hash` | NAT 连接跟踪表 | P1 |
| `rte_lcore` | 核绑定 (控制面/数据面分离) | P1 |
| `rte_kni` | DPDK↔内核通道 (可选) | P2 |
---
## 五、数据面架构
### 整体架构:快慢路径分离
```
┌────────────────────┐
│ 控制面 (lcore 0) │
│ │
│ DHCP Client │ ← 自动探测 WAN 口
│ 配置管理 │
│ HTTP API (可选) │ ← 手机配置用
│ 日志/统计 │
└────────┬───────────┘
│
Unix socket
│
┌────────────────────────┼────────────────────────┐
│ │ │
▼ ▼ ▼
WAN 口 (port 0) 转发核 (lcore 1) LAN 口 (port 1)
│ │ │
▼ ▼ ▼
┌─────────┐ ┌───────────────┐ ┌─────────┐
│ RX 队列 │──mbuf──►│ rte_flow 分流 │──mbuf──►│ TX 队列 │
│ │ │ │ │ │
│ 82576 │ │ 小包→高优先 │ │ 82576 │
│ igb PMD │ │ 大包→低优先 │ │ igb PMD │
│ │ │ NAT 连接跟踪 │ │ │
└─────────┘ └───────────────┘ └─────────┘
```
### 收发包路径
```
收包:
rte_eth_rx_burst(port, queue, mbufs, BURST_SIZE)
→ 逐包处理:
1. rte_flow 匹配(五元组 hash)
2. 如果不是已知流 → 新建流表项
3. 按流优先级入队
4. NAT 转换 (SNAT/DNAT)
5. 查路由表决定出端口
发包:
高优先队列 → rte_eth_tx_burst (先发)
低优先队列 → rte_eth_tx_burst (后发,有剩余带宽才发)
```
### Lcore 分配
```
lcore 0 (主核):
- EAL 初始化
- 控制面逻辑
- 定时器 (统计收集)
- Unix socket 服务
lcore 1 (转发核):
- 数据面死循环
- 收包 → 分流 → NAT → 发包
- 独占 100% CPU,无中断干扰
```
---
## 六、软件模块划分
```
dpdk-gateway/
├── src/
│ ├── main.c # EAL 初始化,启动 lcore
│ ├── forward.c # 转发核主循环
│ ├── forward.h
│ ├── nat.c # NAT 连接跟踪 (SNAT/DNAT)
│ ├── nat.h
│ ├── classifier.c # rte_flow 流分类 + 优先级队列
│ ├── classifier.h
│ ├── control.c # 控制面 (DHCP 探测 + 配置)
│ ├── control.h
│ ├── stats.c # 统计收集
│ └── stats.h
├── scripts/
│ ├── init.sh # 启动脚本 (配 hugepage/绑定网卡)
│ └── probe.sh # WAN/LAN 自动探测脚本
├── config/
│ └── gateway.conf # 默认配置文件
├── Makefile # 或 meson.build
└── README.md
```
---
## 七、量产降本路径
| 阶段 | 数量 | 主板来源 | 网卡来源 | 单台 BOM |
|------|------|---------|---------|---------|
| 样机验证 | 1 台 | 闲鱼 J3355B ¥100 | 闲鱼 82576 ¥30 | ¥173 |
| 小批试水 | 100 台 | 闲鱼打包 ¥90 | 闲鱼打包 ¥25 | ¥146 |
| 中批 | 500 台 | 批发商 ¥85 | 批发 ¥22 | ¥130 |
| 大批定制 | 1000 台 | 自研板 (I226 焊板) | 芯片直焊 | ~¥120 |
> 1000 台定制板后,Intel I226-V 网卡芯片直接焊主板上,省去独立网卡和 PCIe 槽。
---
## 八、成本与利润测算
### 100 台试水
| 项目 | 金额 |
|------|------|
| 单台 BOM | ¥146 |
| 单台组装(自己干) | ¥0 |
| 包装盒(定制牛皮纸,100 个) | ¥3/台 |
| 快递费(均摊) | ¥5/台 |
| 单台全成本 | ¥154 |
| **售价** | **¥299** |
| **单台毛利** | **¥145** |
| **100 台总毛利** | **¥14,500** |
### 1000 台(定制板)
| 项目 | 金额 |
|------|------|
| 单台 BOM | ¥120 |
| 组装(深圳厂 ¥15/台) | ¥15 |
| 包装盒 | ¥3 |
| 快递 | ¥5 |
| 单台全成本 | ¥143 |
| **售价** | **¥299** |
| **单台毛利** | **¥156** |
| **1000 台总毛利** | **¥156,000** |
---
## 九、下一步行动计划
```
Phase 1: 样机验证 (1-2 周)
□ 1. 采购 J3355B-ITX + Intel 82576 + DDR3L 2GB + mSATA 8GB
□ 2. 安装 Alpine Linux,配置 VFIO + hugepage
□ 3. 编译 DPDK,跑通 testpmd L2 转发
□ 4. 编写最简单的 DPDK L3 转发程序 (main.c + forward.c)
Phase 2: 核心功能 (2-4 周)
□ 5. 实现 NAT (SNAT/DNAT + 连接跟踪)
□ 6. 实现 rte_flow 流分类 (小包/大包分流)
□ 7. 实现优先级队列调度
□ 8. 实现 WAN/LAN 自动探测 (DHCP)
Phase 3: 产品化 (2-4 周)
□ 9. 添加启动脚本 (init.sh + probe.sh)
□ 10. 添加 LED 状态指示 (通过 GPIO 或内核接口)
□ 11. 制作 Alpine 固件镜像 (dd 可刷)
□ 12. 设计外壳图纸 (DXF for 亚克力切割)
Phase 4: 自用验证 (4 周)
□ 13. 替换家中路由器,自己用 1 个月
□ 14. 记录所有问题和改进点
□ 15. 性能压测 (iperf3 小包/大包)
Phase 5: 开源 + 销售
□ 16. GitHub 开源基础版
□ 17. 恩山论坛 / chiphell 发帖
□ 18. 淘宝/闲鱼上架
```
---
## 十、风险评估
| 风险 | 严重度 | 概率 | 应对措施 |
|------|--------|------|---------|
| 二手主板货源不稳定 | 🟡 中 | 中 | 初期囤 100 片;J3455-ITX 备选;1000 台后走定制 |
| 用户不会改光猫桥接 | 🔴 高 | 高 | 默认纯桥模式透传,不改任何配置也能工作(仅提速效果打折) |
| 2 口不够替代路由器 | 🟡 中 | 高 | 就定位加速器,不定位路由器;明确告诉用户"插在光猫和路由器之间" |
| GPL 合规问题 | 🟢 低 | 低 | DPDK 用户态程序 BSD 协议,Alpine Linux 用 GPL 但无需修改内核 |
| 售后工作量大 | 🔴 高 | 中 | 初期配详细 LED 故障灯说明、FAQ 文档;逐步建立知识库 |
| 被友商抄袭 | 🟡 中 | 中 | 开源 + 社区粘性 + 持续更新;品牌信任是壁垒 |
| 3C 认证 (做硬件后) | 🔴 高 | 中 | 初期只卖固件/散件/DIY 套件;量大了再走认证 |
---
## 十一、竞品对比
| 对比维度 | 运营商光猫 | 小米路由器 | 软路由 (iStoreOS) | **你的盒子** |
|---------|-----------|-----------|-----------------|------------|
| NAT 性能 (千兆) | ~600M | ~940M | ~940M | **~940M (线速)** |
| 满载延迟 (小包) | 200ms+ | 80ms+ | 50ms+ | **<20ms** |
| 智能流控 | ❌ | 基础 QoS | 需手动配置 | **自动,零配置** |
| 配置难度 | 不用 (默认烂) | 中等 | 高 | **不用配** |
| 售价 | ¥0 (送的) | ¥300 | ¥400+ | **¥299** |
| 开源 | ❌ | ❌ | 部分 | **✅ 核心开源** |
---
## 十二、相关资源
- **学习路线文档**: `2026-06-29-dpdk-roadmap-v3-design.md`
- **加速路径文档**: `DPDK_ACCELERATED_PATH.md`
- **DPDK 源码**: `~/myshare/dpdk-stable-24.11.6`
- **内核对照**: `~/myshare/linux-stable` (v6.6)
- **性能压测工具**: `~/myshare/dperf-main`