mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
4484 字
13 分钟
高性能网络与系统底层技术
2025-08-25

一、系列简介#

2019 年,某头部互联网公司在线上大促期间遭遇严重的网络瓶颈:单台服务器的吞吐量卡在 40Gbps 上不去,CPU 利用率却已经飙到 90%。网络团队排查发现,瓶颈不在硬件,而在 Linux 内核协议栈。从那时起,“内核旁通”这个词开始频繁出现在基础设施团队的议事日程上。

本系列从**内核旁通(Kernel Bypass)**的核心思路出发,系统剖析现代高性能网络与系统底层技术。当你用 socket() 收发数据时,数据包要穿越中断处理、软中断、协议栈解析、系统调用、内存拷贝等层层关卡,单核吞吐量很难突破 1~2 Mpps。而在高频交易、电信级转发、云虚拟网络、分布式存储等场景中,这个数字远远不够。

内核旁通(Kernel Bypass)技术的核心思路是:绕过内核协议栈,让用户态程序直接接管数据平面。DPDK 把网卡收发包拉到用户态轮询处理,XDP/eBPF 在内核最早期路径挂载可编程逻辑,RDMA 让两台机器的内存直接互访,SPDK 把存储 I/O 也拉到用户态,io_uring 用共享环形队列消除系统调用开销。这些技术不是孤立的,它们共享同一套理念:减少上下文切换、消除不必要的数据拷贝、用轮询替代中断、用无锁结构替代内核锁。

本系列覆盖 15 个章节,从”为什么内核网络慢”到”内核旁通技术全景”,再到 DPDK 五章深入、XDP/eBPF、SPDK、RDMA、SmartNIC/DPU、OVS-DPDK、VPP、io_uring,最后以综合实战收尾。每章配有可编译运行的代码示例与性能基准数据,让你从”会用网络 API”进阶到”掌控数据平面性能”。

Note

本系列假设你已具备 Linux 系统编程基础(系统调用、epoll、多线程),了解基本网络概念(TCP/IP、MAC/IP 地址)。如果你需要补课,推荐先阅读姊妹系列「从零剖析 Linux 操作系统」中的 网络协议栈中断与软中断 章节。

二、场景驱动阅读路线#

不想按部就班从第 1 章读到第 15 章?以下 5 条路线从你日常遇到的真实问题出发,按”瓶颈在哪→怎么旁通→如何优化”的顺序串联章节。每条路线可独立阅读,前置依赖已在路线内标注。

路线总览#

flowchart TB subgraph 路线A[" 路线A:我的网络应用为什么慢"] A1[Ch01 内核瓶颈] --> A2[Ch02 旁通全景] A2 --> A3[Ch03 DPDK架构] A3 --> A4[Ch04 DPDK内存] A4 --> A5[Ch07 DPDK多核] end subgraph 路线B[" 路线B:云环境虚拟网络加速"] B1[Ch03 DPDK架构] --> B2[Ch05 PMD驱动] B2 --> B3[Ch12 OVS-DPDK] B3 --> B4[Ch11 SmartNIC/DPU] end subgraph 路线C[" 路线C:存储性能极限"] C1[Ch02 旁通全景] --> C2[Ch09 SPDK] C2 --> C3[Ch10 RDMA] end subgraph 路线D[" 路线D:内核态高性能方案"] D1[Ch02 旁通全景] --> D2[Ch08 XDP/eBPF] D2 --> D3[Ch14 io_uring] end subgraph 路线E[" 路线E:全栈高性能网络系统"] E1[Ch03 DPDK架构] --> E2[Ch04 DPDK内存] E2 --> E3[Ch05 PMD驱动] E3 --> E4[Ch06 数据平面] E4 --> E5[Ch07 多核并发] E5 --> E6[Ch13 VPP] E6 --> E7[Ch15 综合实战] end style 路线A fill:#e3f2fd,stroke:#1565c0 style 路线B fill:#e8f5e9,stroke:#2e7d32 style 路线C fill:#fff3e0,stroke:#e65100 style 路线D fill:#fce4ec,stroke:#c62828 style 路线E fill:#f3e5f5,stroke:#6a1b9a

路线A:我的网络应用为什么慢#

场景:你的网络服务 P99 延迟居高不下,perf top 显示大量时间花在软中断和内核协议栈,单核吞吐量卡在 1 Mpps 上不去。问题到底出在哪?能不能绕过去?

顺序章节为什么读这章
1Ch01 内核网络栈的性能瓶颈定位瓶颈:中断开销、协议栈解析、系统调用、内存拷贝——理解”为什么内核网络慢”
2Ch02 内核旁通技术全景全景地图:DPDK/XDP/RDMA/SPDK/io_uring 各自绕过了哪些瓶颈、适用什么场景
3Ch03 DPDK架构全景与核心概念DPDK 入口:用户态轮询驱动模型、EAL 抽象层、rte_ring 无锁队列——理解 DPDK 的设计哲学
4Ch04 DPDK内存管理大页内存、mempool、mbuf 结构——DPDK 性能的地基是零拷贝内存管理
5Ch07 DPDK多核与并发模型多核扩展:RSS 哈希分流、lcore 绑核、无锁数据结构——从单核到多核的线性扩展

路线逻辑:先定位瓶颈(Ch01),再了解旁通全景(Ch02),然后深入最成熟的旁通方案 DPDK,从架构(Ch03)到内存(Ch04)到多核(Ch07),掌握”绕过内核做高性能网络”的完整路径。


路线B:云环境虚拟网络加速#

场景:OpenStack/OVN 虚拟网络延迟高、OVS 内核态转发成为瓶颈、租户间隔离与性能难以兼顾。云厂商是怎么用 DPDK + SmartNIC 把虚拟交换做到线速的?

顺序章节为什么读这章
1Ch03 DPDK架构全景与核心概念理解 DPDK 用户态轮询模型——OVS-DPDK 的性能根基
2Ch05 DPDK轮询模式驱动PMD 工作原理:轮询收包、批量处理、向量化的收发包优化——OVS-DPDK 的数据面引擎
3Ch12 OVS-DPDK与虚拟交换核心:OVS-DPDK 数据路径、vhost-user 虚拟机收发包、流表匹配与缓存——云网络加速的工业级方案
4Ch11 SmartNIC与DPU卸载到硬件:OVS 流表卸载到 SmartNIC、DPU 的可编程数据平面——虚拟网络加速的下一步

路线逻辑:先掌握 DPDK 基础(Ch03→Ch05),再理解 OVS-DPDK 如何用 DPDK 加速虚拟交换(Ch12),最后看 SmartNIC/DPU 如何把转发逻辑卸载到硬件(Ch11)。


路线C:存储性能极限#

场景:NVMe SSD 延迟已经低到微秒级,内核块设备栈的开销反而成了瓶颈。SPDK 怎么把存储 I/O 拉到用户态?RDMA 怎么让远程存储访问像本地访问一样快?

顺序章节为什么读这章
1Ch02 内核旁通技术全景理解旁通技术的共性——存储旁通与网络旁通共享同一套理念:消除上下文切换和数据拷贝
2Ch09 SPDK与存储旁通核心:SPDK NVMe 驱动、bdev 框架、vhost-blk/scsi、BlobStore——用户态存储栈全貌
3Ch10 RDMA与远程直接内存访问绕过远程 CPU:RoCE/iWARP 协议、Verbs API、RDMA 在分布式存储中的应用——NVMe-oF 的传输基础

路线逻辑:先建立旁通技术的共性认知(Ch02),再深入存储旁通方案 SPDK(Ch09),然后理解 RDMA 如何让远程存储绕过远端 CPU(Ch10)。


路线D:内核态高性能方案#

场景:你的场景不适合完全旁通内核——需要与内核协议栈协作、需要可编程的包处理逻辑、或者只是想让异步 I/O 更快。XDP/eBPF 和 io_uring 是什么?能解决什么问题?

顺序章节为什么读这章
1Ch02 内核旁通技术全景理解旁通谱系:完全旁通(DPDK/SPDK)vs 内核态加速(XDP/io_uring)的定位差异
2Ch08 XDP与eBPF高性能网络核心:XDP 在网卡驱动层的早期处理、eBPF 程序的验证与 JIT、tc/BPF 与 XDP 的协作——不离开内核的高性能网络
3Ch14 io_uring与异步IO革命共享环形队列、批量提交、零拷贝收发——io_uring 如何把 Linux 异步 I/O 推向新高度

路线逻辑:先理解旁通谱系的全景(Ch02),再深入两种内核态高性能方案:XDP/eBPF 处理网络包(Ch08),io_uring 处理异步 I/O(Ch14)。


路线E:全栈高性能网络系统#

场景:你要构建一个电信级 vEPC/UPF、5G 数据面、或高性能软件路由器。需要 DPDK 收发包、VPP 做图节点处理、多核线性扩展,最后端到端验证性能。这是完整的数据平面工程师路线。

顺序章节为什么读这章
1Ch03 DPDK架构全景与核心概念DPDK 架构与 EAL——高性能数据平面的基础设施
2Ch04 DPDK内存管理大页、mempool、mbuf——零拷贝的内存基础
3Ch05 DPDK轮询模式驱动PMD 收发包、向量化——数据面吞吐的核心引擎
4Ch06 DPDK数据平面核心机制rte_ring、rte_hash、ACL/FIB——数据面处理的核心数据结构与算法
5Ch07 DPDK多核与并发模型RSS 分流、lcore pipeline/run-to-completion——多核扩展策略
6Ch13 VPP与FD.io数据平面核心:VPP 图节点架构、插件机制、与 DPDK 的集成——工业级数据平面框架
7Ch15 综合实战端到端:构建高性能软件路由器/UPF,性能调优与基准测试——全系列知识的综合运用

路线逻辑:这是最完整的路线,从 DPDK 基础(Ch03→Ch04→Ch05)到数据平面核心机制(Ch06)到多核扩展(Ch07),再用 VPP 构建工业级数据平面(Ch13),最后综合实战(Ch15)。


路线交叉参考#

同一章节在不同路线中的关注点不同:

章节路线A 关注点路线B 关注点路线C 关注点路线D 关注点路线E 关注点
Ch01核心:瓶颈定位
Ch02旁通全景旁通共性理念旁通谱系定位
Ch03DPDK 设计哲学DPDK 基础DPDK 架构
Ch04零拷贝内存大页/mempool
Ch05PMD 收发包向量化引擎
Ch06数据结构/算法
Ch07多核扩展多核策略
Ch08核心:XDP/eBPF
Ch09核心:SPDK
Ch10RDMA 远程存储
Ch11SmartNIC 卸载
Ch12核心:OVS-DPDK
Ch13核心:VPP
Ch14核心:io_uring
Ch15综合实战

三、知识导图#

以下导图展示 16 章知识之间的网络关系。与线性目录不同,这里强调跨技术的连接——DPDK 的内存管理与 SPDK 共享大页理念,XDP 的 eBPF 程序与 io_uring 共享内核可编程基础设施,RDMA 与 DPDK 共享零拷贝与 CPU 亲和性设计。

概念关系图#

graph TB subgraph 用户可见层[" 用户可见层 — 你能观察和操作什么"] NETAPP["网络应用<br/>curl / iperf / wrk"] VNF["虚拟网络功能<br/>OVS / VPP / vEPC"] STORE["分布式存储<br/>Ceph / SPDK / NVMe-oF"] CLOUD["云网络<br/>OpenStack / K8S CNI"] PERF["性能观测<br/>perf / pktgen / dpdk-procinfo"] ASYNC["异步应用<br/>io_uring / Tokio"] end subgraph 高性能机制层[" 高性能机制层 — 如何绕过内核实现极限性能"] DPDK_CORE["DPDK 核心<br/>Ch03-07"] XDP["XDP/eBPF<br/>Ch08"] SPDK["SPDK<br/>Ch09"] RDMA["RDMA<br/>Ch10"] SMARTNIC["SmartNIC/DPU<br/>Ch11"] OVS_DPDK["OVS-DPDK<br/>Ch12"] VPP["VPP/FD.io<br/>Ch13"] IOURING["io_uring<br/>Ch14"] end subgraph 共享基础设施层[" 共享基础设施层 — 所有旁通技术的共同地基"] BOTTLENECK["瓶颈分析<br/>Ch01"] BYPASS["旁通全景<br/>Ch02"] HUGEPAGE["大页内存"] PINNING["CPU 亲和性"] ZEROCPY["零拷贝"] POLLING["轮询模式"] LOCKFREE["无锁结构"] end %% 用户可见 → 高性能机制 NETAPP --> DPDK_CORE NETAPP --> XDP NETAPP --> IOURING VNF --> OVS_DPDK VNF --> VPP VNF --> DPDK_CORE STORE --> SPDK STORE --> RDMA CLOUD --> OVS_DPDK CLOUD --> SMARTNIC PERF --> BOTTLENECK ASYNC --> IOURING %% 高性能机制 → 共享基础设施 DPDK_CORE --> HUGEPAGE DPDK_CORE --> PINNING DPDK_CORE --> ZEROCPY DPDK_CORE --> POLLING DPDK_CORE --> LOCKFREE XDP --> ZEROCPY XDP --> PINNING SPDK --> HUGEPAGE SPDK --> POLLING SPDK --> ZEROCPY RDMA --> ZEROCPY RDMA --> PINNING OVS_DPDK --> DPDK_CORE VPP --> DPDK_CORE SMARTNIC --> ZEROCPY IOURING --> ZEROCPY IOURING --> POLLING %% 跨层关键连接 OVS_DPDK -.->|"vhost-user"| VNF VPP -.->|"图节点"| DPDK_CORE SPDK -.->|"NVMe-oF RDMA"| RDMA SMARTNIC -.->|"流表卸载"| OVS_DPDK XDP -.->|"早期处理"| DPDK_CORE IOURING -.->|"网络零拷贝"| DPDK_CORE style 用户可见层 fill:#e8eaf6,stroke:#283593 style 高性能机制层 fill:#e0f2f1,stroke:#00695c style 共享基础设施层 fill:#fce4ec,stroke:#880e4f

章节网络关系图#

graph LR Ch0["Ch0 导读"] --> Ch1["Ch1 内核瓶颈"] Ch1 --> Ch2["Ch2 旁通全景"] Ch2 --> Ch3["Ch3 DPDK架构"] Ch2 --> Ch8["Ch8 XDP/eBPF"] Ch2 --> Ch9["Ch9 SPDK"] Ch2 --> Ch10["Ch10 RDMA"] Ch2 --> Ch14["Ch14 io_uring"] Ch3 --> Ch4["Ch4 DPDK内存"] Ch4 --> Ch5["Ch5 PMD驱动"] Ch5 --> Ch6["Ch6 数据平面"] Ch6 --> Ch7["Ch7 多核并发"] Ch5 --> Ch12["Ch12 OVS-DPDK"] Ch7 --> Ch12 Ch7 --> Ch13["Ch13 VPP"] Ch9 -.->|"共享大页"| Ch4 Ch10 -.->|"零拷贝"| Ch4 Ch12 -.->|"DPDK驱动"| Ch5 Ch13 -.->|"DPDK收包"| Ch5 Ch11["Ch11 SmartNIC"] -.->|"流表卸载"| Ch12 Ch11 -.->|"可编程"| Ch8 Ch8 -.->|"eBPF"| Ch14 Ch10 -.->|"NVMe-oF"| Ch9 Ch7 --> Ch15["Ch15 综合实战"] Ch13 --> Ch15 Ch8 --> Ch15 Ch14 --> Ch15 Ch9 --> Ch15 Ch10 --> Ch15 style Ch0 fill:#bbdefb,stroke:#1565c0 style Ch1 fill:#ffcdd2,stroke:#c62828 style Ch3 fill:#c8e6c9,stroke:#2e7d32 style Ch8 fill:#ffe0b2,stroke:#e65100 style Ch9 fill:#fff9c4,stroke:#f9a825 style Ch12 fill:#e1bee7,stroke:#6a1b9a style Ch15 fill:#b2dfdb,stroke:#00695c

知识关联参考表#

按三层模型组织:用户可见层(你日常接触的概念)→ 高性能机制层(旁通技术如何实现)→ 共享基础设施层(所有旁通技术的共同地基)。同一行的条目之间存在直接的知识依赖或概念映射。

用户可见概念对应章节高性能机制对应章节共享基础对应章节
网络应用低延迟Ch01DPDK 用户态轮询Ch03, Ch05大页内存 + CPU 亲和性Ch04, Ch07
虚拟交换线速转发Ch12OVS-DPDK 数据路径Ch12PMD 收发包 + 无锁队列Ch05, Ch06
软件路由器/UPFCh13VPP 图节点处理Ch13DPDK 收发包 + 多核扩展Ch05, Ch07
分布式存储低延迟Ch09SPDK NVMe 用户态驱动Ch09大页内存 + 轮询模式Ch04
远程存储高速访问Ch10RDMA Verbs + RoCECh10零拷贝 + CPU 亲和性Ch04
DDoS 防护/负载均衡Ch08XDP 早期丢包/转发Ch08零拷贝 + eBPF 可编程Ch02
云网络硬件卸载Ch11SmartNIC 流表卸载Ch11OVS-DPDK + 可编程数据面Ch12
高并发异步 I/OCh14io_uring 共享环形队列Ch14零拷贝 + 批量提交Ch02
数据包快速查找Ch06rte_hash / FIB / ACLCh06无锁结构 + 大页Ch04
多核线性扩展Ch07RSS + lcore 绑核Ch07CPU 亲和性 + 无锁队列Ch06
内核协议栈瓶颈定位Ch01中断/软中断/拷贝分析Ch01性能观测方法论Ch01
旁通技术选型Ch02DPDK/XDP/RDMA/SPDK 对比Ch02旁通共性理念Ch02

四、系列大纲#

以下是按章节编号排列的完整目录。建议结合上方的场景驱动阅读路线知识导图选择适合你的阅读顺序。

章节标题核心内容
0系列导读系列定位、场景路线、知识导图、环境搭建
1内核网络栈的性能瓶颈中断开销、软中断处理、协议栈解析、系统调用、内存拷贝、性能基准测量
2内核旁通技术全景DPDK/XDP/RDMA/SPDK/io_uring 谱系、旁通共性理念、选型决策树
3DPDK架构全景与核心概念EAL 抽象层、用户态轮询模型、rte_ring 无锁队列、DPDK 构建系统
4DPDK内存管理大页内存、mempool、mbuf 结构、物理内存映射、零拷贝设计
5DPDK轮询模式驱动PMD 工作原理、轮询收包、批量处理、向量化收发包、多队列
6DPDK数据平面核心机制rte_ring、rte_hash、ACL/FIB 查找、数据包分发、计时器与周期任务
7DPDK多核与并发模型RSS 哈希分流、lcore 绑核、pipeline/run-to-completion、无锁数据结构
8XDP与eBPF高性能网络XDP 早期处理、eBPF 验证器与 JIT、tc/BPF 协作、XDP vs DPDK 选型
9SPDK与存储旁通SPDK NVMe 驱动、bdev 框架、vhost-blk/scsi、BlobStore、NVMe-oF
10RDMA与远程直接内存访问RoCE/iWARP 协议、Verbs API、QP/CQ/MR、RDMA 在分布式存储中的应用
11SmartNIC与DPUSmartNIC 流表卸载、DPU 可编程数据平面、OVS 硬件卸载、P4 编程
12OVS-DPDK与虚拟交换OVS-DPDK 数据路径、vhost-user、流表匹配与缓存、emc/ukey
13VPP与FD.io数据平面VPP 图节点架构、插件机制、与 DPDK 集成、性能调优
14io_uring与异步IO革命共享环形队列、批量提交、零拷贝收发、io_uring 与 DPDK 的协作
15综合实战构建高性能软件路由器/UPF,端到端性能调优与基准测试

五、开发环境搭建#

Warning

以下环境搭建步骤基于 Ubuntu 22.04 LTS。其他发行版(CentOS/RHEL/Fedora)的包名和路径可能不同,请参考各项目的官方文档。部分实验需要物理网卡和特定硬件(如 RDMA 网卡、SmartNIC),虚拟机环境下功能可能受限。

DPDK 开发环境#

# 安装编译依赖
sudo apt install build-essential meson ninja-build pkg-config libnuma-dev
# 下载 DPDK 源码
git clone https://dpdk.org/git/dpdk
cd dpdk
# 使用 meson 构建
meson setup build
ninja -C build
sudo ninja -C build install
# 配置大页内存(DPDK 运行必需)
# 方式一:2MB 大页(需要 1024 页 = 2GB)
echo 1024 | sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
# 方式二:1GB 大页(更高效,需要重启)
# 在内核命令行添加:default_hugepagesz=1G hugepagesz=1G hugepages=4
# 挂载 hugetlbfs(通常已自动挂载)
sudo mkdir -p /dev/hugepages
sudo mount -t hugetlbfs nodev /dev/hugepages
# 绑定网卡到 DPDK 兼容驱动(vfio-pci)
sudo modprobe vfio-pci
sudo dpdk-devbind.py --bind=vfio-pci <pci-address>
# 验证安装
dpdk-testpmd -l 0-3 -n 4 -- -i

SPDK 开发环境#

# 安装编译依赖
sudo apt install libaio-dev libiscsi-dev libncurses5-dev librdmacm-dev
# 下载 SPDK 源码
git clone https://github.com/spdk/spdk
cd spdk
# 安装依赖(SPDK 提供的自动化脚本)
sudo scripts/pkgdep.sh
# 编译
./configure --with-dpdk=/path/to/dpdk
make -j$(nproc)
# 设置大页(与 DPDK 共享)
echo 1024 | sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
# 绑定 NVMe 设备到用户态驱动
sudo scripts/setup.sh
# 验证安装
build/bin/spdk_nvme_identify -i 0

RDMA 开发环境#

# 安装 RDMA 工具和开发库
sudo apt install rdma-core libibverbs-dev librdmacm-dev ibverbs-utils perftest
# 加载 RDMA 驱动(Mellanox/NVIDIA 网卡)
sudo modprobe mlx5_core
sudo modprobe mlx5_ib
# 验证 RDMA 设备
ibv_devinfo
# 性能测试(需要两台机器)
# 服务端
ib_send_bw -d mlx5_0
# 客户端
ib_send_bw -d mlx5_0 <server-ip>

io_uring 开发环境#

# 安装 liburing
git clone https://github.com/axboe/liburing
cd liburing
make -j$(nproc)
sudo make install
# 确认内核版本(io_uring 需要 5.1+,推荐 5.10+)
uname -r
# 验证 io_uring 可用
cat /proc/sys/kernel/io_uring_disabled
# 输出 0 表示可用
# 编译测试程序
gcc -o io_uring_test io_uring_test.c -luring

XDP/eBPF 开发环境#

# 安装 eBPF 开发工具
sudo apt install clang llvm bpftool linux-headers-$(uname -r)
# 安装 libbpf
git clone https://github.com/libbpf/libbpf
cd libbpf/src
make -j$(nproc)
sudo make install
# 验证 BPF 可用
bpftool prog list
bpftool map list
# 编译 XDP 程序示例
clang -O2 -g -target bpf -c xdp_prog.c -o xdp_prog.o
# 加载 XDP 程序到网卡
sudo ip link set dev <interface> xdpgeneric obj xdp_prog.o sec xdp
Note

DPDK 和 SPDK 共享大页内存基础设施。如果你同时搭建两者,只需配置一次大页。RDMA 的 Verbs API 与 DPDK 的内存注册机制有概念上的对应关系,理解 DPDK 内存管理后再学 RDMA 会更顺畅。

六、本系列的实践方法论#

本系列遵循 观察 → 基准 → 旁通 → 验证 的学习方法:

  1. 观察:用 perfsar/proc/interruptsethtool -S 等工具观察内核网络栈的行为,定位性能瓶颈所在
  2. 基准:用 pktgeniperf3dpdk-procinfo 等工具建立性能基线,量化”当前有多慢”
  3. 旁通:选择合适的旁通技术(DPDK/XDP/RDMA/SPDK/io_uring),编写代码绕过内核瓶颈
  4. 验证:对比旁通前后的性能数据,确认瓶颈是否消除,分析新的瓶颈在哪里

每章的「动手实践」部分都遵循这一方法论。先测量再优化,用数据说话,而不是凭感觉调参。

Warning

旁通技术是把双刃剑。绕过内核意味着你放弃了内核提供的安全保护、流量控制、协议处理等机制。在生产环境中使用旁通技术前,务必理解其安全边界和运维代价。本系列在每章都会标注相关风险。

七、推荐参考资料#

经典教材#

书籍作者特点
《DPDK Application Development Guide》DPDK 社区DPDK 官方开发指南,API 参考与最佳实践
《Systems Performance》Brendan Gregg性能分析与可观测性的百科全书,旁通技术的观测方法论基础
《Linux Kernel Networking》Rami Rosen内核网络栈实现详解,理解”为什么内核网络慢”的必备参考
《RDMA Aware Networks Programming Manual》Mellanox/NVIDIARDMA Verbs API 的权威参考
《SPDK Programming Guide》SPDK 社区SPDK 官方开发指南,存储旁通的核心文档
《BPF Performance Tools》Brendan GreggeBPF 性能工具全书,XDP/eBPF 的实践参考

在线资源#

性能测试工具#

  • dpdk-testpmd:DPDK 自带的包转发测试工具,验证 PMD 收发包性能
  • pktgen-dpdk:基于 DPDK 的高性能流量生成器
  • TRex:Cisco 开源的高性能流量生成器,支持 DPDK
  • ib_send_bw / ib_write_bw:RDMA 带宽与延迟基准测试
  • spdk_nvme_perf:SPDK NVMe 性能基准测试
  • fio + io_uring:io_uring 存储性能基准测试
  • bpftool:eBPF/XDP 程序加载、查看、统计

准备好开始了吗?从 内核网络栈的性能瓶颈 开始你的高性能网络之旅吧!


参考#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

高性能网络与系统底层技术
https://blog.souloss.com/posts/high-perf-networking/high-perf-networking-series-guide/
作者
Souloss
发布于
2025-08-25
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

相关文章 智能推荐
1
XDP 与 eBPF 高性能网络
高性能网络 深入 XDP(eXpress Data Path)与 eBPF——eBPF 验证器与 JIT 编译、XDP 五种动作语义、BPF Map 类型体系、cpumap/devmap 重定向、AF_XDP 套接字、XDP 与 DPDK 的全面对比——掌握内核态高性能网络的完整技术栈。
2
综合实战:构建高性能网络应用
高性能网络 综合实战——技术选型决策树、构建 DPDK L4 负载均衡器(全代码走读)、集成 XDP DDoS 防护、RDMA 远程存储访问、性能基准方法论(pktgen/TRex/MoonGen)、调优检查清单——将前 14 章知识融会贯通,构建生产级高性能网络应用。
3
内核网络栈的性能瓶颈
高性能网络 从定量角度剖析 Linux 内核网络栈的五大性能瓶颈——系统调用开销、sk_buff 拷贝与分配、中断处理链路、锁竞争、Qdisc 排队延迟——理解「为什么需要内核旁通」是掌握高性能网络技术的第一步。
4
内核旁通技术全景
高性能网络 全景式对比五大内核旁通技术路线——DPDK(用户态轮询)、netmap(内存映射环)、PF_RING(内核模块环缓冲)、XDP/eBPF(内核快速路径)、io_uring(异步 I/O)——从架构哲学、性能特征、适用场景到选型决策树,帮你找到最适合的高性能网络方案。
5
OVS-DPDK 与虚拟交换
高性能网络 深入 OVS-DPDK 与虚拟交换——OVS-DPDK 架构与内核 OVS 对比、dpdkvhostuser 端口类型、vhost-user 协议与共享 virtio 环、virtio 前后端、VM-to-VM 交换路径、流分类(EMC/DPCLS/megaflows)、性能调优——掌握云环境虚拟网络加速的完整技术栈。