Linux 高性能網絡詳解:從 DPDK、RDMA 到 XDP

劉偉

  • 出版商: 人民郵電
  • 出版日期: 2023-04-01
  • 售價: $713
  • 貴賓價: 9.5$677
  • 語言: 簡體中文
  • 頁數: 342
  • ISBN: 7115609640
  • ISBN-13: 9787115609649
  • 相關分類: LinuxXD
  • 立即出貨

  • Linux 高性能網絡詳解:從 DPDK、RDMA 到 XDP-preview-1
  • Linux 高性能網絡詳解:從 DPDK、RDMA 到 XDP-preview-2
Linux 高性能網絡詳解:從 DPDK、RDMA 到 XDP-preview-1

買這商品的人也買了...

商品描述

《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》適合對高性能網絡技術感興趣的軟件和硬件開發工程師、系統工程師、網絡性能分析人員閱讀。

作者簡介

刘伟,拥有14年网络设备开发领域的从业经验,当前就职于浪潮电子信息产业股份有限公司体系结构研究部,负责高性能网卡的架构设计和驱动程序开发工作。在此之前,曾以驱动团队和网络接入设备产品开发负责人的身份在上海诺基亚贝尔固网事业部工作了7年;还曾经就职于中兴通讯和上海爱吉信息技术有限公司,负责多款通信产品的研发工作。平时喜欢钻研技术和读书,并经常在自己的个人公 众号“布鲁斯的读书圈”中发表原创的技术文章。

目錄大綱

第 1部分 背景知識

第 1章 電腦網絡概述 3

1.1 電腦網絡的定義和構成 3

1.2 電腦網絡的體系結構 4

1.3 常見術語 6

第 2章 電腦硬件 10

2.1 中央處理器 10

2.1.1 處理器體系結構 11

2.1.2 Cache 12

2.1.3 NUMA 17

2.2 存儲器 19

2.3 總線 19

2.4 網卡 22

第3章 Linux操作系統 25

3.1 Linux操作系統的誕生和發展 25

3.2 用戶態和內核態 27

3.3 虛擬地址、物理地址和頁表 28

3.4 用戶空間和內核空間 30

3.5 Linux內核的組成 31

3.5.1 Linux內核源代碼的目錄結構 31

3.5.2 Linux內核的主要組成部分 32

3.6 Linux設備驅動程序 35

第4章 軟件和硬件之間傳遞信息的方式 37

4.1 寄存器 37

4.2 數據緩存 38

4.3 隊列和描述符 39

4.4 中斷 43

4.5 DMA 46

第5章 內核協議棧方案及其存在的問題 47

5.1 內核協議棧方案的工作過程 47

5.2 內核協議棧方案的數據流 49

5.3 內核協議棧方案的缺點 50

第6章 Corundum——一個開源的基於FPGA的100G網卡方案 51

6.1 Corundum方案簡介 51

6.2 Corundum的隊列 54

6.3 Corundum的Linux網絡設備驅動程序解析 56

6.3.1 驅動程序源碼概覽 57

6.3.2 驅動程序的編譯和使用 57

6.3.3 驅動程序的加載和註冊 58

6.3.4 驅動程序和設備的匹配 59

6.3.5 初始化階段 60

6.3.6 打開網絡接口 72

6.3.7 數據發送 75

6.3.8 中斷處理 81

6.3.9 發送完成處理 85

6.3.10 數據接收 89

第 2部分 DPDK

第7章 認識DPDK 97

7.1 為什麽需要DPDK 97

7.2 DPDK體系結構 98

7.2.1 核心組件 98

7.2.2 輪詢模式驅動 100

7.3 一個典型的DPDK應用程序 102

第8章 DPDK的內存管理 104

8.1 影響數據包處理速度的內存問題 104

8.2 大頁 105

8.2.1 在Linux系統中預留和配置大頁 105

8.2.2 DPDK的大頁管理 106

8.3 mempool 111

8.4 通道和rank 113

8.5 DPDK使用的內存管理技巧總結 114

第9章 UIO——DPDK的基石 115

9.1 UIO驅動程序的構成 115

9.2 應用程序和UIO的交互方式 118

9.3 UIO驅動程序的API 119

9.4 DPDK如何使用UIO 120

第 10章 DPDK的基本使用方法 123

10.1 編譯DPDK 123

10.2 使用dpdk-testpmd進行數據包轉發測試 123

10.2.1 運行環境和連接方式 124

10.2.2 使用Linux以太網驅動程序運行dpdk-testpmd 125

10.2.3 使用輪詢模式驅動程序運行dpdk-testpmd 129

10.3 使用pktgen測試Mellanox ConnectX-4 LX 10G網卡 132

10.3.1 硬件環境 132

10.3.2 軟件版本 132

10.3.3 安裝Mellanox網卡驅動程序 132

10.3.4 編譯和安裝DPDK 133

10.3.5 “回環+轉發”測試 133

10.3.6 編譯pktgen 138

10.3.7 “外部發包+本地轉發”測試 138

10.3.8 測試過程中可能遇到的問題及解決方法 141

第 11章 測試和分析高性能網卡 142

11.1 關於DDR訪問速率的思考和測試 142

11.1.1 硬件配置和軟件版本 143

11.1.2 DDR理論速率 144

11.1.3 內存性能測試工具mbw 145

11.1.4 單核測試 146

11.1.5 多核測試 148

11.2 基於100G網卡的單核和多核測試 150

11.2.1 硬件配置 150

11.2.2 軟件版本和配置 150

11.2.3 單核測試 150

11.2.4 雙核測試 152

11.2.5 測試結果總結 153

11.3 使用Intel VTune Profiler定量分析DPDK 154

11.3.1 硬件環境和軟件版本 154

11.3.2 Intel VTune Profiler的下載和安裝 155

11.3.3 測試模型 155

11.3.4 重新編譯安裝DPDK 155

11.3.5 使用Intel VTune Profiler啟動和監控dpdk-testpmd 156

11.3.6 開始產生和發送數據包 159

11.3.7 統計和分析 159

第12章 為Corundum編寫DPDK驅動程序 163

12.1 Corundum DPDK驅動程序的組成 164

12.2 註冊和打開調試日誌 164

12.2.1 DPDK的日誌級別 164

12.2.2 Corundum DPDK驅動程序的日誌 165

12.3 Corundum DPDK驅動程序的註冊 167

12.4 Corundum DPDK驅動程序的初始化 168

12.5 啟動隊列 173

12.6 數據發送 176

12.7 編寫驅動程序時的註意事項 179

第3部分 RDMA

第 13章 RDMA技術簡介 185

13.1 RDMA的控制通路和數據通路 185

13.2 RDMA的優勢 188

13.3 RDMA協議 189

13.3.1 InfiniBand 190

13.3.2 RoCE 190

13.3.3 iWARP 192

13.4 RDMA網絡構成 192

13.5 LID和GID 194

13.5.1 LID 194

13.5.2 GID 195

第 14章 RDMA軟件架構 198

14.1 rdma-core 198

14.2 內核RDMA子系統 199

14.3 RDMA軟件架構總覽 201

第 15章 RDMA基本元素 202

15.1 WQ和WQE 202

15.2 QP和QPN 203

15.3 CQ和CQN 205

15.4 WR和WC 206

15.5 RDMA基本元素總結 207

第 16章 RDMA基本操作類型及其配套機制 208

16.1 Send和Receive 208

16.2 RDMA Write 209

16.3 RDMA Read 210

16.4 其他RDMA操作類型 212

16.5 RDMA操作類型總結 213

16.6 Memory Region 214

16.6.1 MR的基本概念 215

16.6.2 MR的作用之一 215

16.6.3 MR的作用之二 216

16.6.4 MR的作用之三 217

16.7 PD 218

16.8 Doorbell機制 219

16.9 RDMA各種元素的實體形式 220

第 17章 RDMA傳輸服務 222

17.1 傳輸服務維度一——可靠/不可靠 222

17.2 傳輸服務維度二——連接/數據報 223

17.3 傳輸服務類型 225

第 18章 一個簡單的RDMA應用程序 229

18.1 程序的執行和輸出 229

18.2 代碼執行流程 230

第 19章 RDMA主要元素的實現 234

19.1 分配PD 234

19.2 註冊MR 240

19.2.1 代碼執行流程分析 240

19.2.2 註冊MR的具體工作 242

19.2.3 硬件查表獲取MR物理地址的過程 246

19.2.4 MR相關的軟硬件行為匯總 248

19.3 創建CQ 249

19.3.1 代碼執行流程分析 249

19.3.2 CQ buffer的組織形式 253

19.3.3 CQ Context的組織形式 255

19.3.4 硬件獲取CQE地址的過程 257

19.3.5 CQ相關的軟硬件行為匯總 258

19.4 創建QP 258

19.4.1 代碼執行流程分析 258

19.4.2 QP buffer的組織形式 263

19.4.3 QP Context的組織形式 264

19.5 修改QP 265

19.5.1 應用程序修改QP 265

19.5.2 代碼執行流程分析 267

19.5.3 硬件獲取WQE地址的過程 270

第 20章 進行一次數據傳輸 272

20.1 發起數據傳輸——RDMA Write 272

20.1.1 應用程序發起數據傳輸 272

20.1.2 代碼執行流程分析 273

20.2 確認數據傳輸完畢——輪詢CQ 276

20.3 軟件和硬件行為匯總 277

第 21章 RoCEv2網卡的MAC、IP和GID 279

21.1 RoCEv2網卡的GID 279

21.2 向RoCEv2網卡配置自己的MAC、IP和GID 281

21.2.1 獲取RoCEv2網卡自己的MAC 281

21.2.2 獲取RoCEv2網卡自己的IP地址 281

21.2.3 配置RoCEv2網卡自己的0號GID 281

21.2.4 配置RoCEv2網卡自己的非0號GID 282

21.3 向RoCEv2網卡配置對端設備的MAC、IP和GID 282

21.3.1 應用程序獲取本地和對端設備的0號GID 283

21.3.2 應用程序獲取對端設備的非0號(3號)GID 284

21.3.3 向RoCEv2網卡配置對端設備的MAC地址 284

21.3.4 向RoCEv2網卡配置對端設備的IP地址 285

第 22章 RDMA性能測試工具—perftest 286

22.1 源碼獲取和安裝 286

22.2 測試方法和註意事項 286

22.3 測試選項 287

22.4 簡單的測試過程和結果呈現 289

第4部分 XDP

第 23章 XDP簡介 293

23.1 什麽是BPF和eBPF 293

23.2 XDP系統架構 294

23.2.1 XDP程序的執行流程 295

23.2.2 BPF map 297

第 24章 XDP教程代碼分析 298

24.1 xdp-tutorial代碼獲取和編譯 298

24.2 基礎課程 299

24.2.1 XDP程序的加載和卸載 299

24.2.2 按名稱加載SEC 301

24.2.3 使用BPF map 302

24.2.4 多程序交流和共享 304

24.3 數據包處理課程 308

24.3.1 解析數據包 308

24.3.2 改寫數據包 311

24.3.3 重定向 313

第 25章 簡單的XDP性能測試 319

25.1 測試方法 319

25.2 測試流程和命令 320

25.3 測試結果 321

25.4 測試結果分析 321

第 26章 讓網卡驅動程序支持XDP功能 322

26.1 XDP代碼在網卡驅動中的位置 322

26.2 數據包的準備 323

26.3 返回值的處理 323

附錄A 在Linux系統中查找各種核的對應關系 325

附錄B 關於內存性能測試工具mbw的問題分析 331

附錄C 簡單分析memcpy的代碼優化方法 335

附錄D 用線性回歸方法計算CPU頻率 338