内容简介
第一部分 DPDK基础篇
第1章 认识DPDK
1.1 主流包处理硬件平台
1.1.1 硬件加速器
1.1.2 网络处理器
1.1.3 多核处理器
1.2 初识DPDK
1.2.1 IA不适合进行数据包处理吗
1.2.2 DPDK最佳实践
1.2.3 DPDK框架简介
1.2.4 寻找性能优化的天花板
1.3 解读数据包处理能力
1.4 探索IA处理器上最艰巨的任务
1.5 软件包处理的潜力——再识DPDK
1.5.1 DPDK加速网络节点
1.5.2 DPDK加速计算节点
1.5.3 DPDK加速存储节点
1.5.4 DPDK的方法论
1.6 从融合的角度看DPDK
1.7 实例
1.7.1 HelloWorld
1.7.2 Skeleton
1.7.3 L3fwd
1.8 小结
第2章 Cache和内存
2.1 存储系统简介
2.1.1 系统架构的演进
2.1.2 内存子系统
2.2 Cache系统简介
2.2.1 Cache的种类
2.2.2 TLB Cache
2.3 Cache地址映射和变换
2.3.1 全关联型Cache
2.3.2 直接关联型Cache
2.3.3 组关联型Cache
2.4 Cache的写策略
2.5 Cache预取
2.5.1 Cache的预取原理
2.5.2 NetBurst架构处理器上的预取
2.5.3 两个执行效率迥异的程序
2.5.4 软件预取
2.6 Cache一致性
2.6.1 Cache Line对齐
2.6.2 Cache一致性问题的由来
2.6.3 一致性协议
2.6.4 MESI协议
2.6.5 DPDK如何保证Cache一致性
2.7 TLB和大页
2.7.1 逻辑地址到物理地址的转换
2.7.2 TLB
2.7.3 使用大页
2.7.4 如何激活大页
2.8 DDIO
2.8.1 时代背景
2.8.2 网卡的读数据操作
2.8.3 网卡的写数据操作
2.9 NUMA系统
第3章 并行计算
3.1 多核性能和可扩展性
3.1.1 追求性能水平扩展
3.1.2 多核处理器
3.1.3 亲和性
3.1.4 DPDK的多线程
3.2 指令并发与数据并行
3.2.1 指令并发
3.2.2 单指令多数据
3.3 小结
第4章 同步互斥机制
4.1 原子操作
4.1.1 处理器上的原子操作
4.1.2 Linux内核原子操作
4.1.3 DPDK原子操作实现和应用
4.2 读写锁
4.2.1 Linux读写锁主要API
4.2.2 DPDK读写锁实现和应用
4.3 自旋锁
4.3.1 自旋锁的缺点
4.3.2 Linux自旋锁API
4.3.3 DPDK自旋锁实现和应用
4.4 无锁机制
4.4.1 Linux内核无锁环形缓冲
4.4.2 DPDK无锁环形缓冲
4.5 小结
第5章 报文转发
5.1 网络处理模块划分
5.2 转发框架介绍
5.2.1 DPDK run to completion模型
5.2.2 DPDK pipeline模型
5.3 转发算法
5.3.1 精确匹配算法
5.3.2 最长前缀匹配算法
5.3.3 ACL算法
5.3.4 报文分发
5.4 小结
第6章 PCIe与包处理I/O
6.1 从PCIe事务的角度看包处理
6.1.1 PCIe概览
6.1.2 PCIe事务传输
6.1.3 PCIe带宽
6.2 PCIe上的数据传输能力
6.3 网卡DMA描述符环形队列
6.4 数据包收发——CPU和I/O的协奏
6.4.1 全景分析
6.4.2 优化的考虑
6.5 PCIe的净荷转发带宽
6.6 Mbuf与Mempool
6.6.1 Mbuf
6.6.2 Mempool
6.7 小结
第7章 网卡性能优化
7.1 DPDK的轮询模式
7.1.1 异步中断模式
7.1.2 轮询模式
7.1.3 混和中断轮询模式
7.2 网卡I/O性能优化
7.2.1 Burst收发包的优点
7.2.2 批处理和时延隐藏
7.2.3 利用Intel SIMD指令进一步并行化包收发
7.3 平台优化及其配置调优
7.3.1 硬件平台对包处理性能的影响
7.3.2 软件平台对包处理性能的影响
7.4 队列长度及各种阈值的设置
7.4.1 收包队列长度
7.4.2 发包队列长度
7.4.3 收包队列可释放描述符数量阈值(rx_free_thresh)
7.4.4 发包队列发送结果报告阈值(tx_rs_thresh)
7.4.5 发包描述符释放阈值(tx_free_thresh)
7.5 小结
第8章 流分类与多队列
8.1 多队列
8.1.1 网卡多队列的由来
8.1.2 Linux内核对多队列的支持
8.1.3 DPDK与多队列
8.1.4 队列分配
8.2 流分类
8.2.1 包的类型
8.2.2 RSS
8.2.3 Flow Director
8.2.4 服务质量
8.2.5 虚拟化流分类方式
8.2.6 流过滤
8.3 流分类技术的使用
8.3.1 DPDK结合网卡Flow Director 功能
8.3.2 DPDK结合网卡虚拟化及Cloud Filter功能
8.4 可重构匹配表
8.5 小结
第9章 硬件加速与功能卸载
9.1 硬件卸载简介
9.2 网卡硬件卸载功能
9.3 DPDK软件接口
9.4 硬件与软件功能实现
9.5 计算及更新功能卸载
9.5.1 VLAN硬件卸载
9.5.2 IEEE1588硬件卸载功能
9.5.3 IP TCP/UDP/SCTP checksum硬件卸载功能
9.5.4 Tunnel硬件卸载功能
9.6 分片功能卸载
9.7 组包功能卸载
9.8 小结
第二部分 DPDK虚拟化技术篇
第10章 X86平台上的I/O虚拟化
10.1 X86平台虚拟化概述
10.1.1 CPU虚拟化
10.1.2 内存虚拟化
10.1.3 I/O虚拟化
10.2 I/O透传虚拟化
10.2.1 Inte?VT-d简介
10.2.2 PCIe SR-IOV概述
10.3 PCIe网卡透传下的收发包流程
10.4 I/O透传虚拟化配置的常见问题
10.5 小结
第11章 半虚拟化Virtio
11.1 Virtio使用场景
11.2 Virtio规范和原理
11.2.1 设备的配置
11.2.2 虚拟队列的配置
11.2.3 设备的使用
11.3 Virtio网络设备驱动设计
11.3.1 Virtio网络设备Linux内核驱动设计
11.3.2 基于DPDK用户空间的Virtio网络设备驱动设计以及性能优化
11.4 小结
第12章 加速包处理的vhost优化方案
12.1 vhost的演进和原理
12.1.1 Qemu与virtio-net
12.1.2 Linux内核态vhost-net
12.1.3 用户态vhost
12.2 基于DPDK的用户态vhost设计
12.2.1 消息机制
12.2.2 地址转换和映射虚拟机内存
12.2.3 vhost特性协商
12.2.4 virtio-net设备管理
12.2.5 vhost中的Checksum和TSO功能卸载
12.3 DPDK vhost编程实例
12.3.1 报文收发接口介绍
12.3.2 使用DPDK vhost lib进行编程
12.3.3 使用DPDK vhost PMD进行编程
12.4 小结
第三部分 DPDK应用篇
第13章 DPDK与网络功能虚拟化
13.1 网络功能虚拟化
13.1.1 起源
13.1.2 发展
13.2 OPNFV与DPDK
13.3 NFV的部署
13.4 VNF部署的形态
13.5 VNF自身特性的评估
13.5.1 性能分析方法论
13.5.2 性能优化思路
13.6 VNF的设计
13.6.1 VNF虚拟网络接口的选择
13.6.2 IVSHMEM共享内存的PCI设备
13.6.3 网卡轮询和混合中断轮询模式的选择
13.6.4 硬件加速功能的考虑
13.6.5 服务质量的保证
13.7 实例解析和商业案例
13.7.1 Virtual BRAS
13.7.2 Brocade vRouter 5600
13.8 小结
第14章 Open vSwitch (OVS)中的DPDK性能加速
14.1 虚拟交换机简介
14.2 OVS简介
14.3 DPDK加速的OVS
14.3.1 OVS的数据通路
14.3.2 DPDK加速的数据通路
14.3.3 DPDK加速的OVS性能比较
14.4 小结
第15章 基于DPDK的存储软件优化
15.1 基于以太网的存储系统
15.2 以太网存储系统的优化
15.3 SPDK介绍
15.3.1 基于DPDK的用户态TCP/IP栈
15.3.2 用户态存储驱动
15.3.3 SPDK中iSCSI target实现与性能
15.4 小结
附录A缩略词
附录B推荐阅读