目录
第一部分 基础原理
第 1 章 背景概述........................................................................................................ 3
1.1 产业背景.................................................................................................................. 3
1.1.1 x86 架构性能分析..............................................................................................4
1.1.2 NFV 中的网络转发性能分析..............................................................................5
1.1.3 DPDK 的引入.......................................................................................................7
1.1.4 本书范围............................................................................................................... 8
1.2 DPDK 开源社区.................................................................................................. 9
1.2.1 社区起源............................................................................................................... 9
1.2.2 社区网站............................................................................................................. 10
1.3 DPDK 源代码...................................................................................................... 11
1.3.1 版本总述............................................................................................................. 11
1.3.2 最新版本特性介绍.............................................................................................12
参考文献........................................................................................................................... 13
第 2 章 DPDK 技术简介.............................................................................................. 14
2.1 软件架构................................................................................................................. 14
2.2 巨页技术.................................................................................................................. 16
2.3 轮询技术.................................................................................................................. 16
2.4 CPU 亲和技术........................................................................................................ 16
2.5 DPDK 性能影响因素........................................................................................ 17
2.5.1 硬件结构............................................................................................................. 17
2.5.2 OS 版本及其内核...............................................................................................18
2.5.3 OVS 性能问题.................................................................................................... 20
2.5.4 内存管理............................................................................................................. 20
2.5.5 CPU 核间无锁通信 ............................................................................................22
2.5.6 目标 CPU 类型的正确设置 ...............................................................................22
第 3 章 DPDK 库函数.................................................................................................. 23
3.1 EAL 库................................................................................................................. 24
3.1.1 内核初始化与启动.............................................................................................24
3.1.2 内存..................................................................................................................... 25
3.1.3 多线程与亲和性.................................................................................................25
3.2 Ring 库.................................................................................................................. 26
3.2.1 单消费者入队..................................................................................................... 26
3.2.2 单消费者出队..................................................................................................... 28
3.3 Mempool 库 ......................................................................................................... 29
3.4 mbuf 库 .................................................................................................................. 30
3.4.1 数据存储............................................................................................................. 30
3.4.2 缓冲区分配与释放.............................................................................................31
3.4.3 相关操作............................................................................................................. 31
3.5 PMD 驱动........................................................................................................... 31
3.5.1 需求与设计......................................................................................................... 31
3.5.2 配置..................................................................................................................... 32
3.6 IVSHMEM 库........................................................................................................ 32
3.6.1 API 概述 ............................................................................................................. 33
3.6.2 环境配置............................................................................................................. 34
3.7 Timer 库.................................................................................................................... 34
3.8 LPM 库..................................................................................................................... 34
3.8.1 API 概述 ............................................................................................................. 35
3.8.2 实现说明............................................................................................................. 35
3.9 Hash 库................................................................................................................. 36
3.9.1 API 概述 ............................................................................................................. 36
3.9.2 实现说明............................................................................................................. 36
3.10 多进程支持....................................................................................................... 37
3.10.1 内存共享............................................................................................................. 38
3.10.2 局限性................................................................................................................. 38
参考文献........................................................................................................................... 39
第 4 章 DPDK 安装与部署.................................................................................... 40
4.1 系统要求.............................................................................................................. 40
4.1.1 BIOS 设置要求................................................................................................... 40
4.1.2 DPDK 编译要求................................................................................................. 40
4.1.3 运行 DPDK 应用程序要求................................................................................41
4.2 使用源代码编译 DPDK............................................................................................. 43
4.2.1 安装 DPDK 安装包............................................................................................43
4.2.2 安装 DPDK 目标环境........................................................................................43
4.2.3 查看已安装的 DPDK 环境................................................................................44
4.2.4 启用 DPDK 用户空间 I/O 的模块.....................................................................44
4.2.5 加载 VFIO 模块.................................................................................................. 45
4.2.6 在内核模块绑定/解除网络端口........................................................................45
4.3 编译和运行示例应用程序...............................................................................46
4.3.1 编译示例应用程序.............................................................................................46
4.3.2 运行示例应用程序.............................................................................................47
4.3.3 应用程序的逻辑核使用.....................................................................................47
4.3.4 应用程序巨页内存使用.....................................................................................48
4.3.5 其他应用示例程序.............................................................................................48
4.3.6 测试应用程序..................................................................................................... 48
4.4 启用其他功能...................................................................................................... 49
4.4.1 高精度事件计时器(HPET)功能...................................................................49
4.4.2 无权限运行 DPDK 应用程序............................................................................49
4.4.3 电源管理和节能功能.........................................................................................50
4.4.4 核隔离功能......................................................................................................... 50
4.4.5 加载 DPDK KNI 内核模块................................................................................50
4.4.6 IOMMU 功能...................................................................................................... 51
4.4.7 小数据分组高速转发功能.................................................................................51
4.5 快速启动设置脚本............................................................................................ 52
4.5.1 脚本组织结构..................................................................................................... 52
4.5.2 使用场景............................................................................................................. 53
第 5 章 DPDK 自带应用软件调试..............................................................................54
5.1 命令行应用例....................................................................................................... 54
5.1.1 概述..................................................................................................................... 54
5.1.2 应用例编译......................................................................................................... 55
5.1.3 应用例运行......................................................................................................... 55
5.1.4 代码说明............................................................................................................. 55
5.2 HelloWorld 应用例............................................................................................. 56
5.2.1 应用例编译......................................................................................................... 57
5.2.2 运行应用例......................................................................................................... 57
5.2.3 代码说明............................................................................................................. 57
5.3 L2 转发应用例 .................................................................................................... 58
5.3.1 概述..................................................................................................................... 58
5.3.2 编译..................................................................................................................... 59
5.3.3 运行..................................................................................................................... 59
5.3.4 代码说明............................................................................................................. 60
5.4 L3 转发应用例 .................................................................................................... 65
5.4.1 概述..................................................................................................................... 65
5.4.2 L3 转发应用例编译............................................................................................65
5.4.3 L3 转发应用例运行............................................................................................65
5.4.4 代码说明............................................................................................................. 66
5.5 负载均衡应用例................................................................................................. 69
5.5.1 概述..................................................................................................................... 69
5.5.2 编译与运行......................................................................................................... 70
5.5.3 代码说明............................................................................................................. 70
5.6 QoS 调度应用例................................................................................................... 72
5.6.1 QoS 调度应用例概述.........................................................................................72
5.6.2 QoS 调度应用例编译.........................................................................................72
5.6.3 QoS 调度应用例运行.........................................................................................73
5.6.4 应用例代码说明................................................................................................. 75
5.7 定时器应用例....................................................................................................... 76
5.7.1 应用例编译与运行.............................................................................................76
5.7.2 应用例代码说明................................................................................................. 76
5.8 分发器应用例..................................................................................................... 78
5.8.1 概述..................................................................................................................... 78
5.8.2 分发器应用例编译.............................................................................................79
5.8.3 分发器应用例运行.............................................................................................79
5.8.4 分发器应用例代码说明.....................................................................................79
5.8.5 调试与统计信息................................................................................................. 80
参考文献........................................................................................................................... 80
第二部分 DPDK 应用与测试
第 6 章 DPDK 在 NFV 的应用和相关测试方法......................................................... 83
6.1 DPDK 在 NFV 中的应用场景.............................................................................. 83
6.1.1 x86 服务器上的应用..........................................................................................83
6.1.2 虚拟机+OVS 的应用..........................................................................................84
6.1.3 虚拟机+SR-IOV 技术的应用.............................................................................86
6.2 NFV 场景下的测试方法................................................................................ .... ..87
6.2.1 测试拓扑............................................................................................................. 87
6.2.2 测试标准............................................................................................................. 88
6.2.3 测试平台说明..................................................................................................... 89
第 7 章 DPDK 专项测试与结论.................................................................................. 92
7.1 测试用例介绍............................................................................................................. 92
7.2 专项测试详情.......................................................................................................... 93
7.2.1 x86 服务器三层转发测试..................................................................................93
7.2.2 SR-IOV 测试..................................................................................................... 108
7.2.3 OVS 测试.......................................................................................................... 126
第三部分 DPDK 应用开发及实例解析
第 8 章 DPDK 应用开发基础....................................................................................... 135
8.1 网卡设备................................................................................................................ 135
8.1.1 设备驱动........................................................................................................... 135
8.1.2 应用接口........................................................................................................... 136
8.1.3 设备接口........................................................................................................... 137
8.2 进程..................................................................................................................... 145
8.2.1 线程................................................................................................................... 145
8.2.2 单进程............................................................................................................... 146
8.2.3 多进程............................................................................................................... 147
参考文献............................................................................................................................... 149
第 9 章 vDPI 应用实例.................................................................................................. 150
9.1 DPI 简介 ................................................................................................................... 150
9.2 总体设计.................................................................................................................... 151
9.2.1 模型设计........................................................................................................... 151
9.2.2 组件设计...........................................................................................................151
9.3 实现方案设计.............................................................................................................. 152
9.4 基于 l3fwd 的实现方案.......................................................................................... 153
9.4.1 DPDK 以太网接口........................................................................................... 153
9.4.2 DPI 以太网接口................................................................................................ 154
9.4.3 DPDK 与 DPI 的数据接口转换.......................................................................155
9.4.4 代码解析........................................................................................................... 155
9.5 基于 pipeline 的实现方案.................................................................................... 157
9.6 实例运行及性能测试.................................................................................................. 158
参考文献............................................................................................................................... 159
第 10 章 mTCP 和 BRAS 应用实例.................................................................................. 160
10.1 mTCP 案例解析 ...................................................................................................160
10.1.1 mTCP 简介 ..................................................................................................... 160
10.1.2 mTCP 应用解析.............................................................................................. 161
10.2 BRAS 案例解析 ........................................................................................................ 165 10.2.1 BRAS 简介 ..................................................................................................... 165
10.2.2 BRAS 应用解析.............................................................................................. 166
参考文献............................................................................................................................... 168
附录
附录一 操作系统服务关闭说明......................................................................................... 171 附录二 操作系统安装......................................................................................................... 172 附录三 DPDK 编译............................................................................................................. 173
附录四 操作系统启动参数................................................................................................ 174
附录五 l3fwd 程序编译 ................................................................................................... 175
附录六 l3fwd 启动配置 ................................................................................................... 178
附录七 SR-IOV 测试配置........................................................................................................ 181
附录八 OVS 安装.................................................................................................................. 183
附录九 OVS 测试配置...................................................................................................... 184
附录十 l3fwd 在不同流量下启动配置 .............................................................................187
附录十一 大流表测试 l3fwd 启动配置 ............................................................................. 190