《Linux高性能网络详解:从DPDK、RDMA到XDP》主要介绍了DPDK、RDMA和XDP三种高性能网络技术的原理、使用方法和实现方案。《Linux高性能网络详解:从DPDK、RDMA到XDP》总计26章,分为四大部分。第1部分介绍了计算机网络、计算机硬件和Linux操作系统的基础知识,以及软件和硬件之间传递信息的方式、以内核协议栈为基础的网络方案和Corundum。第2部分介绍了DPDK的入门知识、DPDK的内存管理、UIO DPDK的基本使用方法、测试和分析高性能网卡,以及如何为Corundum编写DPDK驱动程序。第3部分包括RDMA技术简介、软件架构、基本元素、基本操作类型及其配套机制、传输服务类型、应用程序执行流程、主要元素的实现、数据传输、RoCEv2网卡的配置、性能测试工具等内容。第4部分包括XDP简介、XDP教程代码分析、简单的XDP性能测试、如何让网卡驱动程序支持XDP功能等内容。《Linux高性能网络详解:从DPDK、RDMA到XDP》适合对高性能网络技术感兴趣的软件和硬件开发工程师、系统工程师、网络性能分析人员阅读。
| ISBN | 9787115609649 |
|---|
目录 222 章
- 1部分 背景知识 1 字
- 1章 计算机网络概述3 1 字
- 1.1 计算机网络的定义和构成3 1 字
- 1.2 计算机网络的体系结构4 1 字
- 1.3 常见术语6 1 字
- 2章 计算机硬件10 1 字
- 2.1 中央处理器10 1 字
- 2.1.1 处理器体系结构11 1 字
- 2.1.2 Cache12 1 字
- 2.1.3 NUMA17 1 字
- 2.2 存储器19 1 字
- 2.3 总线19 1 字
- 2.4 网卡22 1 字
- Linux操作系统25 1 字
- 3.1 Linux操作系统的诞生和发展25 1 字
- 3.2 用户态和内核态27 1 字
- 3.3 虚拟地址、物理地址和页表28 1 字
- 3.4 用户空间和内核空间30 1 字
- 3.5 Linux内核的组成31 1 字
- 3.5.1 Linux内核源代码的目录结构31 1 字
- 3.5.2 Linux内核的主要组成部分32 1 字
- 3.6 Linux设备驱动程序35 1 字
- 软件和硬件之间传递信息的方式37 1 字
- 4.1 寄存器37 1 字
- 4.2 数据缓存38 1 字
- 4.3 队列和描述符39 1 字
- 4.4 中断43 1 字
- 4.5 DMA46 1 字
- 内核协议栈方案及其存在的问题47 1 字
- 5.1 内核协议栈方案的工作过程47 1 字
- 5.2 内核协议栈方案的数据流49 1 字
- 5.3 内核协议栈方案的缺点50 1 字
- 6.1 Corundum方案简介51 1 字
- 6.2 Corundum的队列54 1 字
- 6.3 Corundum的Linux网络设备驱动程序解析56 1 字
- 6.3.1 驱动程序源码概览57 1 字
- 6.3.2 驱动程序的编译和使用57 1 字
- 6.3.3 驱动程序的加载和注册58 1 字
- 6.3.4 驱动程序和设备的匹配59 1 字
- 6.3.5 初始化阶段60 1 字
- 6.3.6 打开网络接口72 1 字
- 6.3.7 数据发送75 1 字
- 6.3.8 中断处理81 1 字
- 6.3.9 发送完成处理85 1 字
- 6.3.10 数据接收89 1 字
- 2部分 DPDK 1 字
- 认识DPDK97 1 字
- 7.1 为什么需要DPDK97 1 字
- 7.2 DPDK体系结构98 1 字
- 7.2.1 核心组件98 1 字
- 7.2.2 轮询模式驱动100 1 字
- 7.3 一个典型的DPDK应用程序102 1 字
- DPDK的内存管理104 1 字
- 8.1 影响数据包处理速度的内存问题104 1 字
- 8.2 大页105 1 字
- 8.2.1 在Linux系统中预留和配置大页105 1 字
- 8.2.2 DPDK的大页管理106 1 字
- 8.3 mempool111 1 字
- 8.4 通道和rank113 1 字
- 8.5 DPDK使用的内存管理技巧总结114 1 字
- UIO——DPDK的基石115 1 字
- 9.1 UIO驱动程序的构成115 1 字
- 9.2 应用程序和UIO的交互方式118 1 字
- 9.3 UIO驱动程序的API119 1 字
- 9.4 DPDK如何使用UIO120 1 字
- 10章 DPDK的基本使用方法123 1 字
- 10.1 编译DPDK123 1 字
- 10.2 使用dpdk-testpmd进行数据包转发测试123 1 字
- 10.2.1 运行环境和连接方式124 1 字
- 10.3 使用pktgen测试Mellanox ConnectX-4 LX 10G网卡132 1 字
- 10.3.1 硬件环境132 1 字
- 10.3.2 软件版本132 1 字
- 10.3.3 安装Mellanox网卡驱动程序132 1 字
- 10.3.4 编译和安装DPDK133 1 字
- 10.3.5 “回环+转发”测试133 1 字
- 10.3.6 编译pktgen138 1 字
- 10.3.7 “外部发包+本地转发”测试138 1 字
- 11章 测试和分析高性能网卡142 1 字
- 11.1 关于DDR访问速率的思考和测试142 1 字
- 11.1.1 硬件配置和软件版本143 1 字
- 11.1.2 DDR理论速率144 1 字
- 11.1.3 内存性能测试工具mbw145 1 字
- 11.1.4 单核测试146 1 字
- 11.1.5 多核测试148 1 字
- 11.2 基于100G网卡的单核和多核测试150 1 字
- 11.2.1 硬件配置150 1 字
- 11.2.2 软件版本和配置150 1 字
- 11.2.3 单核测试150 1 字
- 11.2.4 双核测试152 1 字
- 11.2.5 测试结果总结153 1 字
- 11.3 使用Intel VTune Profiler定量分析DPDK154 1 字
- 11.3.1 硬件环境和软件版本154 1 字
- 11.3.2 Intel VTune Profiler的下载和安装155 1 字
- 11.3.3 测试模型155 1 字
- 11.3.4 重新编译安装DPDK155 1 字
- 11.3.6 开始产生和发送数据包159 1 字
- 11.3.7 统计和分析159 1 字
- 第12章 为Corundum编写DPDK驱动程序163 1 字
- 12.1 Corundum DPDK驱动程序的组成164 1 字
- 12.2 注册和打开调试日志164 1 字
- 12.2.1 DPDK的日志级别164 1 字
- 12.2.2 Corundum DPDK驱动程序的日志165 1 字
- 12.3 Corundum DPDK驱动程序的注册167 1 字
- 12.4 Corundum DPDK驱动程序的初始化168 1 字
- 12.5 启动队列173 1 字
- 12.6 数据发送176 1 字
- 12.7 编写驱动程序时的注意事项179 1 字
- 第3部分 RDMA 1 字
- 13章 RDMA技术简介185 1 字
- 13.1 RDMA的控制通路和数据通路185 1 字
- 13.2 RDMA的优势188 1 字
- 13.3 RDMA协议189 1 字
- 13.3.1 InfiniBand190 1 字
- 13.3.2 RoCE190 1 字
- 13.3.3 iWARP192 1 字
- 13.4 RDMA网络构成192 1 字
- 13.5 LID和GID194 1 字
- 13.5.1 LID194 1 字
- 13.5.2 GID195 1 字
- 14章 RDMA软件架构198 1 字
- 14.1 rdma-core198 1 字
- 14.2 内核RDMA子系统199 1 字
- 14.3 RDMA软件架构总览201 1 字
- 15章 RDMA基本元素202 1 字
- 15.1 WQ和WQE202 1 字
- 15.2 QP和QPN203 1 字
- 15.3 CQ和CQN205 1 字
- 15.4 WR和WC206 1 字
- 15.5 RDMA基本元素总结207 1 字
- 16章 RDMA基本操作类型及其配套机制208 1 字
- 16.1 Send和Receive208 1 字
- 16.2 RDMA Write209 1 字
- 16.3 RDMA Read210 1 字
- 16.4 其他RDMA操作类型212 1 字
- 16.5 RDMA操作类型总结213 1 字
- 16.6 Memory Region214 1 字
- 16.6.1 MR的基本概念215 1 字
- 16.6.2 MR的作用之一215 1 字
- 16.6.3 MR的作用之二216 1 字
- 16.6.4 MR的作用之三217 1 字
- 16.7 PD218 1 字
- 16.8 Doorbell机制219 1 字
- 16.9 RDMA各种元素的实体形式220 1 字
- 17章 RDMA传输服务222 1 字
- 17.1 传输服务维度一——可靠 不可靠222 1 字
- 17.2 传输服务维度二——连接 数据报223 1 字
- 17.3 传输服务类型225 1 字
- 18章 一个简单的RDMA应用程序229 1 字
- 18.1 程序的执行和输出229 1 字
- 18.2 代码执行流程230 1 字
- 19章 RDMA主要元素的实现234 1 字
- 19.1 分配PD234 1 字
- 19.2 注册MR240 1 字
- 19.2.1 代码执行流程分析240 1 字
- 19.2.2 注册MR的具体工作242 1 字
- 19.2.3 硬件查表获取MR物理地址的过程246 1 字
- 19.2.4 MR相关的软硬件行为汇总248 1 字
- 19.3 创建CQ249 1 字
- 19.3.1 代码执行流程分析249 1 字
- 19.3.2 CQ buffer的组织形式253 1 字
- 19.3.3 CQ Context的组织形式255 1 字
- 19.3.4 硬件获取CQE地址的过程257 1 字
- 19.3.5 CQ相关的软硬件行为汇总258 1 字
- 19.4 创建QP258 1 字
- 19.4.1 代码执行流程分析258 1 字
- 19.4.2 QP buffer的组织形式263 1 字
- 19.4.3 QP Context的组织形式264 1 字
- 19.5 修改QP265 1 字
- 19.5.1 应用程序修改QP265 1 字
- 19.5.2 代码执行流程分析267 1 字
- 19.5.3 硬件获取WQE地址的过程270 1 字
- 20章 进行一次数据传输272 1 字
- 20.1 发起数据传输——RDMA Write272 1 字
- 20.1.1 应用程序发起数据传输272 1 字
- 20.1.2 代码执行流程分析273 1 字
- 20.2 确认数据传输完毕——轮询CQ276 1 字
- 20.3 软件和硬件行为汇总277 1 字
- 21章 RoCEv2网卡的MAC、IP和GID279 1 字
- 21.1 RoCEv2网卡的GID279 1 字
- 21.2 向RoCEv2网卡配置自己的MAC、IP和GID281 1 字
- 21.2.1 获取RoCEv2网卡自己的MAC281 1 字
- 21.2.2 获取RoCEv2网卡自己的IP地址281 1 字
- 21.2.3 配置RoCEv2网卡自己的0号GID281 1 字
- 21.2.4 配置RoCEv2网卡自己的非0号GID282 1 字
- 21.3 向RoCEv2网卡配置对端设备的MAC、IP和GID282 1 字
- 21.3.3 向RoCEv2网卡配置对端设备的MAC地址284 1 字
- 21.3.4 向RoCEv2网卡配置对端设备的IP地址285 1 字
- 22章 RDMA性能测试工具—perftest286 1 字
- 22.1 源码获取和安装286 1 字
- 22.2 测试方法和注意事项286 1 字
- 22.3 测试选项287 1 字
- 22.4 简单的测试过程和结果呈现289 1 字
- 第4部分 XDP 1 字
- 23章 XDP简介293 1 字
- 23.1 什么是BPF和eBPF293 1 字
- 23.2 XDP系统架构294 1 字
- 23.2.1 XDP程序的执行流程295 1 字
- 23.2.2 BPF map297 1 字
- 24章 XDP教程代码分析298 1 字
- 24.1 xdp-tutorial代码获取和编译298 1 字
- 24.2 基础课程299 1 字
- 24.2.1 XDP程序的加载和卸载299 1 字
- 24.2.2 按名称加载SEC301 1 字
- 24.2.3 使用BPF map302 1 字
- 24.2.4 多程序交流和共享304 1 字
- 24.3 数据包处理课程308 1 字
- 24.3.1 解析数据包308 1 字
- 24.3.2 改写数据包311 1 字
- 24.3.3 重定向313 1 字
- 25章 简单的XDP性能测试319 1 字
- 25.1 测试方法319 1 字
- 25.2 测试流程和命令320 1 字
- 25.3 测试结果321 1 字
- 25.4 测试结果分析321 1 字
- 26章 让网卡驱动程序支持XDP功能322 1 字
- 26.1 XDP代码在网卡驱动中的位置322 1 字
- 26.2 数据包的准备323 1 字
- 26.3 返回值的处理323 1 字
- 附录A 在Linux系统中查找各种核的对应关系325 1 字
- 附录B 关于内存性能测试工具mbw的问题分析331 1 字
- 附录C 简单分析memcpy的代码优化方法335 1 字
- 附录D 用线性回归方法计算CPU频率338 1 字
这本书还没有同步到划线。
这本书还没有同步到想法。
我日常工作的时候会接触点dpdk、vpp、xdp。我在高性能网络这块,还没入门,差得远。
这些工具服务于高性能网络。但是,高性能网络可能有不同的应用场景。在一份工作中,能接触的网络场景有限。所以,我来翻看这本书,看能否看到些不一样的场景。
这本书,仅仅是将 DPDK、RDMA、XDP这三个内容简单介绍下。对于不接触这方面内容的开发者而言,基本看不明白书中的内容。对于接触这方面的内容的开发者而言,言之无味。
这不是这本书的问题,而是初级开发者向中级开发者升级过程中必然会面临的问题。对于初级开发者而言,书籍有很好的引导作用。对于中级开发者而言,更多的需要从代码中,从工程实践中汲取经验。在汲取经验的过程中,代码就是最好的示范,网上的博客和官方文档才是最好的参考。经验在解决一个个现实的网络需求中,得以增长。
由于高性能网络的书籍很少,我给这本书的评价是”一般“。但是整本书的阅读体验而言,我的评价是”不行“