微信读书·看板
登录
← 书架 · 笔记

Linux高性能网络详解:从DPDK、RDMA到XDP

刘伟
划线 0 想法 0 书评 1 导出 Markdown

《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》适合对高性能网络技术感兴趣的软件和硬件开发工程师、系统工程师、网络性能分析人员阅读。

ISBN9787115609649

目录 222 章

  1. 1部分 背景知识 1 字
  2. 1章 计算机网络概述3 1 字
  3. 1.1 计算机网络的定义和构成3 1 字
  4. 1.2 计算机网络的体系结构4 1 字
  5. 1.3 常见术语6 1 字
  6. 2章 计算机硬件10 1 字
  7. 2.1 中央处理器10 1 字
  8. 2.1.1 处理器体系结构11 1 字
  9. 2.1.2 Cache12 1 字
  10. 2.1.3 NUMA17 1 字
  11. 2.2 存储器19 1 字
  12. 2.3 总线19 1 字
  13. 2.4 网卡22 1 字
  14. Linux操作系统25 1 字
  15. 3.1 Linux操作系统的诞生和发展25 1 字
  16. 3.2 用户态和内核态27 1 字
  17. 3.3 虚拟地址、物理地址和页表28 1 字
  18. 3.4 用户空间和内核空间30 1 字
  19. 3.5 Linux内核的组成31 1 字
  20. 3.5.1 Linux内核源代码的目录结构31 1 字
  21. 3.5.2 Linux内核的主要组成部分32 1 字
  22. 3.6 Linux设备驱动程序35 1 字
  23. 软件和硬件之间传递信息的方式37 1 字
  24. 4.1 寄存器37 1 字
  25. 4.2 数据缓存38 1 字
  26. 4.3 队列和描述符39 1 字
  27. 4.4 中断43 1 字
  28. 4.5 DMA46 1 字
  29. 内核协议栈方案及其存在的问题47 1 字
  30. 5.1 内核协议栈方案的工作过程47 1 字
  31. 5.2 内核协议栈方案的数据流49 1 字
  32. 5.3 内核协议栈方案的缺点50 1 字
  33. 6.1 Corundum方案简介51 1 字
  34. 6.2 Corundum的队列54 1 字
  35. 6.3 Corundum的Linux网络设备驱动程序解析56 1 字
  36. 6.3.1 驱动程序源码概览57 1 字
  37. 6.3.2 驱动程序的编译和使用57 1 字
  38. 6.3.3 驱动程序的加载和注册58 1 字
  39. 6.3.4 驱动程序和设备的匹配59 1 字
  40. 6.3.5 初始化阶段60 1 字
  41. 6.3.6 打开网络接口72 1 字
  42. 6.3.7 数据发送75 1 字
  43. 6.3.8 中断处理81 1 字
  44. 6.3.9 发送完成处理85 1 字
  45. 6.3.10 数据接收89 1 字
  46. 2部分 DPDK 1 字
  47. 认识DPDK97 1 字
  48. 7.1 为什么需要DPDK97 1 字
  49. 7.2 DPDK体系结构98 1 字
  50. 7.2.1 核心组件98 1 字
  51. 7.2.2 轮询模式驱动100 1 字
  52. 7.3 一个典型的DPDK应用程序102 1 字
  53. DPDK的内存管理104 1 字
  54. 8.1 影响数据包处理速度的内存问题104 1 字
  55. 8.2 大页105 1 字
  56. 8.2.1 在Linux系统中预留和配置大页105 1 字
  57. 8.2.2 DPDK的大页管理106 1 字
  58. 8.3 mempool111 1 字
  59. 8.4 通道和rank113 1 字
  60. 8.5 DPDK使用的内存管理技巧总结114 1 字
  61. UIO——DPDK的基石115 1 字
  62. 9.1 UIO驱动程序的构成115 1 字
  63. 9.2 应用程序和UIO的交互方式118 1 字
  64. 9.3 UIO驱动程序的API119 1 字
  65. 9.4 DPDK如何使用UIO120 1 字
  66. 10章 DPDK的基本使用方法123 1 字
  67. 10.1 编译DPDK123 1 字
  68. 10.2 使用dpdk-testpmd进行数据包转发测试123 1 字
  69. 10.2.1 运行环境和连接方式124 1 字
  70. 10.3 使用pktgen测试Mellanox ConnectX-4 LX 10G网卡132 1 字
  71. 10.3.1 硬件环境132 1 字
  72. 10.3.2 软件版本132 1 字
  73. 10.3.3 安装Mellanox网卡驱动程序132 1 字
  74. 10.3.4 编译和安装DPDK133 1 字
  75. 10.3.5 “回环+转发”测试133 1 字
  76. 10.3.6 编译pktgen138 1 字
  77. 10.3.7 “外部发包+本地转发”测试138 1 字
  78. 11章 测试和分析高性能网卡142 1 字
  79. 11.1 关于DDR访问速率的思考和测试142 1 字
  80. 11.1.1 硬件配置和软件版本143 1 字
  81. 11.1.2 DDR理论速率144 1 字
  82. 11.1.3 内存性能测试工具mbw145 1 字
  83. 11.1.4 单核测试146 1 字
  84. 11.1.5 多核测试148 1 字
  85. 11.2 基于100G网卡的单核和多核测试150 1 字
  86. 11.2.1 硬件配置150 1 字
  87. 11.2.2 软件版本和配置150 1 字
  88. 11.2.3 单核测试150 1 字
  89. 11.2.4 双核测试152 1 字
  90. 11.2.5 测试结果总结153 1 字
  91. 11.3 使用Intel VTune Profiler定量分析DPDK154 1 字
  92. 11.3.1 硬件环境和软件版本154 1 字
  93. 11.3.2 Intel VTune Profiler的下载和安装155 1 字
  94. 11.3.3 测试模型155 1 字
  95. 11.3.4 重新编译安装DPDK155 1 字
  96. 11.3.6 开始产生和发送数据包159 1 字
  97. 11.3.7 统计和分析159 1 字
  98. 第12章 为Corundum编写DPDK驱动程序163 1 字
  99. 12.1 Corundum DPDK驱动程序的组成164 1 字
  100. 12.2 注册和打开调试日志164 1 字
  101. 12.2.1 DPDK的日志级别164 1 字
  102. 12.2.2 Corundum DPDK驱动程序的日志165 1 字
  103. 12.3 Corundum DPDK驱动程序的注册167 1 字
  104. 12.4 Corundum DPDK驱动程序的初始化168 1 字
  105. 12.5 启动队列173 1 字
  106. 12.6 数据发送176 1 字
  107. 12.7 编写驱动程序时的注意事项179 1 字
  108. 第3部分 RDMA 1 字
  109. 13章 RDMA技术简介185 1 字
  110. 13.1 RDMA的控制通路和数据通路185 1 字
  111. 13.2 RDMA的优势188 1 字
  112. 13.3 RDMA协议189 1 字
  113. 13.3.1 InfiniBand190 1 字
  114. 13.3.2 RoCE190 1 字
  115. 13.3.3 iWARP192 1 字
  116. 13.4 RDMA网络构成192 1 字
  117. 13.5 LID和GID194 1 字
  118. 13.5.1 LID194 1 字
  119. 13.5.2 GID195 1 字
  120. 14章 RDMA软件架构198 1 字
  121. 14.1 rdma-core198 1 字
  122. 14.2 内核RDMA子系统199 1 字
  123. 14.3 RDMA软件架构总览201 1 字
  124. 15章 RDMA基本元素202 1 字
  125. 15.1 WQ和WQE202 1 字
  126. 15.2 QP和QPN203 1 字
  127. 15.3 CQ和CQN205 1 字
  128. 15.4 WR和WC206 1 字
  129. 15.5 RDMA基本元素总结207 1 字
  130. 16章 RDMA基本操作类型及其配套机制208 1 字
  131. 16.1 Send和Receive208 1 字
  132. 16.2 RDMA Write209 1 字
  133. 16.3 RDMA Read210 1 字
  134. 16.4 其他RDMA操作类型212 1 字
  135. 16.5 RDMA操作类型总结213 1 字
  136. 16.6 Memory Region214 1 字
  137. 16.6.1 MR的基本概念215 1 字
  138. 16.6.2 MR的作用之一215 1 字
  139. 16.6.3 MR的作用之二216 1 字
  140. 16.6.4 MR的作用之三217 1 字
  141. 16.7 PD218 1 字
  142. 16.8 Doorbell机制219 1 字
  143. 16.9 RDMA各种元素的实体形式220 1 字
  144. 17章 RDMA传输服务222 1 字
  145. 17.1 传输服务维度一——可靠 不可靠222 1 字
  146. 17.2 传输服务维度二——连接 数据报223 1 字
  147. 17.3 传输服务类型225 1 字
  148. 18章 一个简单的RDMA应用程序229 1 字
  149. 18.1 程序的执行和输出229 1 字
  150. 18.2 代码执行流程230 1 字
  151. 19章 RDMA主要元素的实现234 1 字
  152. 19.1 分配PD234 1 字
  153. 19.2 注册MR240 1 字
  154. 19.2.1 代码执行流程分析240 1 字
  155. 19.2.2 注册MR的具体工作242 1 字
  156. 19.2.3 硬件查表获取MR物理地址的过程246 1 字
  157. 19.2.4 MR相关的软硬件行为汇总248 1 字
  158. 19.3 创建CQ249 1 字
  159. 19.3.1 代码执行流程分析249 1 字
  160. 19.3.2 CQ buffer的组织形式253 1 字
  161. 19.3.3 CQ Context的组织形式255 1 字
  162. 19.3.4 硬件获取CQE地址的过程257 1 字
  163. 19.3.5 CQ相关的软硬件行为汇总258 1 字
  164. 19.4 创建QP258 1 字
  165. 19.4.1 代码执行流程分析258 1 字
  166. 19.4.2 QP buffer的组织形式263 1 字
  167. 19.4.3 QP Context的组织形式264 1 字
  168. 19.5 修改QP265 1 字
  169. 19.5.1 应用程序修改QP265 1 字
  170. 19.5.2 代码执行流程分析267 1 字
  171. 19.5.3 硬件获取WQE地址的过程270 1 字
  172. 20章 进行一次数据传输272 1 字
  173. 20.1 发起数据传输——RDMA Write272 1 字
  174. 20.1.1 应用程序发起数据传输272 1 字
  175. 20.1.2 代码执行流程分析273 1 字
  176. 20.2 确认数据传输完毕——轮询CQ276 1 字
  177. 20.3 软件和硬件行为汇总277 1 字
  178. 21章 RoCEv2网卡的MAC、IP和GID279 1 字
  179. 21.1 RoCEv2网卡的GID279 1 字
  180. 21.2 向RoCEv2网卡配置自己的MAC、IP和GID281 1 字
  181. 21.2.1 获取RoCEv2网卡自己的MAC281 1 字
  182. 21.2.2 获取RoCEv2网卡自己的IP地址281 1 字
  183. 21.2.3 配置RoCEv2网卡自己的0号GID281 1 字
  184. 21.2.4 配置RoCEv2网卡自己的非0号GID282 1 字
  185. 21.3 向RoCEv2网卡配置对端设备的MAC、IP和GID282 1 字
  186. 21.3.3 向RoCEv2网卡配置对端设备的MAC地址284 1 字
  187. 21.3.4 向RoCEv2网卡配置对端设备的IP地址285 1 字
  188. 22章 RDMA性能测试工具—perftest286 1 字
  189. 22.1 源码获取和安装286 1 字
  190. 22.2 测试方法和注意事项286 1 字
  191. 22.3 测试选项287 1 字
  192. 22.4 简单的测试过程和结果呈现289 1 字
  193. 第4部分 XDP 1 字
  194. 23章 XDP简介293 1 字
  195. 23.1 什么是BPF和eBPF293 1 字
  196. 23.2 XDP系统架构294 1 字
  197. 23.2.1 XDP程序的执行流程295 1 字
  198. 23.2.2 BPF map297 1 字
  199. 24章 XDP教程代码分析298 1 字
  200. 24.1 xdp-tutorial代码获取和编译298 1 字
  201. 24.2 基础课程299 1 字
  202. 24.2.1 XDP程序的加载和卸载299 1 字
  203. 24.2.2 按名称加载SEC301 1 字
  204. 24.2.3 使用BPF map302 1 字
  205. 24.2.4 多程序交流和共享304 1 字
  206. 24.3 数据包处理课程308 1 字
  207. 24.3.1 解析数据包308 1 字
  208. 24.3.2 改写数据包311 1 字
  209. 24.3.3 重定向313 1 字
  210. 25章 简单的XDP性能测试319 1 字
  211. 25.1 测试方法319 1 字
  212. 25.2 测试流程和命令320 1 字
  213. 25.3 测试结果321 1 字
  214. 25.4 测试结果分析321 1 字
  215. 26章 让网卡驱动程序支持XDP功能322 1 字
  216. 26.1 XDP代码在网卡驱动中的位置322 1 字
  217. 26.2 数据包的准备323 1 字
  218. 26.3 返回值的处理323 1 字
  219. 附录A 在Linux系统中查找各种核的对应关系325 1 字
  220. 附录B 关于内存性能测试工具mbw的问题分析331 1 字
  221. 附录C 简单分析memcpy的代码优化方法335 1 字
  222. 附录D 用线性回归方法计算CPU频率338 1 字