Linux高性能網(wǎng)絡詳解:從DPDK、RDMA到XDP
定 價:118.8 元
- 作者:劉偉
- 出版時間:2023/4/1
- ISBN:9787115609649
- 出 版 社:人民郵電出版社
- 中圖法分類:TP316.85
- 頁碼:342
- 紙張:
- 版次:01
- 開本:16開
《Linux高性能網(wǎng)絡詳解:從DPDK、RDMA到XDP》主要介紹了DPDK、RDMA和XDP三種高性能網(wǎng)絡技術的原理、使用方法和實現(xiàn)方案。
《Linux高性能網(wǎng)絡詳解:從DPDK、RDMA到XDP》總計26章,分為四大部分。第1部分介紹了計算機網(wǎng)絡、計算機硬件和Linux操作系統(tǒng)的基礎知識,以及軟件和硬件之間傳遞信息的方式、以內核協(xié)議棧為基礎的網(wǎng)絡方案和Corundum。第2部分介紹了DPDK的入門知識、DPDK的內存管理、UIO/DPDK的基本使用方法、測試和分析高性能網(wǎng)卡,以及如何為Corundum編寫DPDK驅動程序。第3部分包括RDMA技術簡介、軟件架構、基本元素、基本操作類型及其配套機制、傳輸服務類型、應用程序執(zhí)行流程、主要元素的實現(xiàn)、數(shù)據(jù)傳輸、RoCEv2網(wǎng)卡的配置、性能測試工具等內容。第4部分包括XDP簡介、XDP教程代碼分析、簡單的XDP性能測試、如何讓網(wǎng)卡驅動程序支持XDP功能等內容。
《Linux高性能網(wǎng)絡詳解:從DPDK、RDMA到XDP》適合對高性能網(wǎng)絡技術感興趣的軟件和硬件開發(fā)工程師、系統(tǒng)工程師、網(wǎng)絡性能分析人員閱讀。
源自作者十多年高性能網(wǎng)絡設備領域的開發(fā)經驗總結
細致剖析Linux高性能網(wǎng)絡主流解決方案以及開發(fā)細節(jié)
涵蓋DPDK和RDMA等當下熱點技術,同時涉及前沿的XDP技術
源碼級教學,圖示軟硬件交互流程,實現(xiàn)方法翔實齊全,可直接用于業(yè)務實踐,提升高性能網(wǎng)絡開發(fā)能力
本書主要內容:
第1部分,背景知識
介紹網(wǎng)絡基本概念、計算機硬件構成、Linux操作系統(tǒng)、軟硬件之間的信息傳遞方式、內核協(xié)議棧方案及其存在的問題,并詳細講解了開源網(wǎng)卡解決方案Corundum的實現(xiàn)機制。
第2部分,DPDK
介紹DPDK技術,具體內容包括DPDK簡介、內存管理、UIO機制、基本使用方法等,并測試和分析DPDK的性能,以及為Corundum編寫DPDK驅動程序。
第3部分,RDMA
介紹RDMA技術,內容包括其軟件架構、基本元素、基本操作類型及其配套機制、傳輸服務、RDMA主要元素的實現(xiàn)等。
第4部分,XDP
介紹XDP的基本概念、實現(xiàn)機制、使用方法,以及如何在Linux設備驅動中支持XDP功能。
劉偉,擁有14年網(wǎng)絡設備開發(fā)領域的從業(yè)經驗,當前就職于浪潮電子信息產業(yè)股份有限公司體系結構研究部,負責高性能網(wǎng)卡的架構設計和驅動程序開發(fā)工作。在此之前,曾以驅動團隊和網(wǎng)絡接入設備產品開發(fā)負責人的身份在上海諾基亞貝爾固網(wǎng)事業(yè)部工作了7年;還曾經就職于中興通訊和上海愛吉信息技術有限公司,負責多款通信產品的研發(fā)工作。平時喜歡鉆研技術和讀書,并經常在自己的個人公 眾號“布魯斯的讀書圈”中發(fā)表原創(chuàng)的技術文章。
第 1部分 背景知識
第 1章 計算機網(wǎng)絡概述 3
1.1 計算機網(wǎng)絡的定義和構成 3
1.2 計算機網(wǎng)絡的體系結構 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 網(wǎng)卡 22
第3章 Linux操作系統(tǒng) 25
3.1 Linux操作系統(tǒng)的誕生和發(fā)展 25
3.2 用戶態(tài)和內核態(tài) 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 數(shù)據(jù)緩存 38
4.3 隊列和描述符 39
4.4 中斷 43
4.5 DMA 46
第5章 內核協(xié)議棧方案及其存在的問題 47
5.1 內核協(xié)議棧方案的工作過程 47
5.2 內核協(xié)議棧方案的數(shù)據(jù)流 49
5.3 內核協(xié)議棧方案的缺點 50
第6章 Corundum——一個開源的基于FPGA的100G網(wǎng)卡方案 51
6.1 Corundum方案簡介 51
6.2 Corundum的隊列 54
6.3 Corundum的Linux網(wǎng)絡設備驅動程序解析 56
6.3.1 驅動程序源碼概覽 57
6.3.2 驅動程序的編譯和使用 57
6.3.3 驅動程序的加載和注冊 58
6.3.4 驅動程序和設備的匹配 59
6.3.5 初始化階段 60
6.3.6 打開網(wǎng)絡接口 72
6.3.7 數(shù)據(jù)發(fā)送 75
6.3.8 中斷處理 81
6.3.9 發(fā)送完成處理 85
6.3.10 數(shù)據(jù)接收 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 影響數(shù)據(jù)包處理速度的內存問題 104
8.2 大頁 105
8.2.1 在Linux系統(tǒng)中預留和配置大頁 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進行數(shù)據(jù)包轉發(fā)測試 123
10.2.1 運行環(huán)境和連接方式 124
10.2.2 使用Linux以太網(wǎng)驅動程序運行dpdk-testpmd 125
10.2.3 使用輪詢模式驅動程序運行dpdk-testpmd 129
10.3 使用pktgen測試Mellanox ConnectX-4 LX 10G網(wǎng)卡 132
10.3.1 硬件環(huán)境 132
10.3.2 軟件版本 132
10.3.3 安裝Mellanox網(wǎng)卡驅動程序 132
10.3.4 編譯和安裝DPDK 133
10.3.5 “回環(huán)+轉發(fā)”測試 133
10.3.6 編譯pktgen 138
10.3.7 “外部發(fā)包+本地轉發(fā)”測試 138
10.3.8 測試過程中可能遇到的問題及解決方法 141
第 11章 測試和分析高性能網(wǎng)卡 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網(wǎng)卡的單核和多核測試 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 硬件環(huán)境和軟件版本 154
11.3.2 Intel VTune Profiler的下載和安裝 155
11.3.3 測試模型 155
11.3.4 重新編譯安裝DPDK 155
11.3.5 使用Intel VTune Profiler啟動和監(jiān)控dpdk-testpmd 156
11.3.6 開始產生和發(fā)送數(shù)據(jù)包 159
11.3.7 統(tǒng)計和分析 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 數(shù)據(jù)發(fā)送 176
12.7 編寫驅動程序時的注意事項 179
第3部分 RDMA
第 13章 RDMA技術簡介 185
13.1 RDMA的控制通路和數(shù)據(jù)通路 185
13.2 RDMA的優(yōu)勢 188
13.3 RDMA協(xié)議 189
13.3.1 InfiniBand 190
13.3.2 RoCE 190
13.3.3 iWARP 192
13.4 RDMA網(wǎng)絡構成 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子系統(tǒng) 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 傳輸服務維度二——連接/數(shù)據(jù)報 223
17.3 傳輸服務類型 225
第 18章 一個簡單的RDMA應用程序 229
18.1 程序的執(zhí)行和輸出 229
18.2 代碼執(zhí)行流程 230
第 19章 RDMA主要元素的實現(xiàn) 234
19.1 分配PD 234
19.2 注冊MR 240
19.2.1 代碼執(zhí)行流程分析 240
19.2.2 注冊MR的具體工作 242
19.2.3 硬件查表獲取MR物理地址的過程 246
19.2.4 MR相關的軟硬件行為匯總 248
19.3 創(chuàng)建CQ 249
19.3.1 代碼執(zhí)行流程分析 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 創(chuàng)建QP 258
19.4.1 代碼執(zhí)行流程分析 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 代碼執(zhí)行流程分析 267
19.5.3 硬件獲取WQE地址的過程 270
第 20章 進行一次數(shù)據(jù)傳輸 272
20.1 發(fā)起數(shù)據(jù)傳輸——RDMA Write 272
20.1.1 應用程序發(fā)起數(shù)據(jù)傳輸 272
20.1.2 代碼執(zhí)行流程分析 273
20.2 確認數(shù)據(jù)傳輸完畢——輪詢CQ 276
20.3 軟件和硬件行為匯總 277
第 21章 RoCEv2網(wǎng)卡的MAC、IP和GID 279
21.1 RoCEv2網(wǎng)卡的GID 279
21.2 向RoCEv2網(wǎng)卡配置自己的MAC、IP和GID 281
21.2.1 獲取RoCEv2網(wǎng)卡自己的MAC 281
21.2.2 獲取RoCEv2網(wǎng)卡自己的IP地址 281
21.2.3 配置RoCEv2網(wǎng)卡自己的0號GID 281
21.2.4 配置RoCEv2網(wǎng)卡自己的非0號GID 282
21.3 向RoCEv2網(wǎng)卡配置對端設備的MAC、IP和GID 282
21.3.1 應用程序獲取本地和對端設備的0號GID 283
21.3.2 應用程序獲取對端設備的非0號(3號)GID 284
21.3.3 向RoCEv2網(wǎng)卡配置對端設備的MAC地址 284
21.3.4 向RoCEv2網(wǎng)卡配置對端設備的IP地址 285
第 22章 RDMA性能測試工具—perftest 286
22.1 源碼獲取和安裝 286
22.2 測試方法和注意事項 286
22.3 測試選項 287
22.4 簡單的測試過程和結果呈現(xiàn) 289
第4部分 XDP
第 23章 XDP簡介 293
23.1 什么是BPF和eBPF 293
23.2 XDP系統(tǒng)架構 294
23.2.1 XDP程序的執(zhí)行流程 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 數(shù)據(jù)包處理課程 308
24.3.1 解析數(shù)據(jù)包 308
24.3.2 改寫數(shù)據(jù)包 311
24.3.3 重定向 313
第 25章 簡單的XDP性能測試 319
25.1 測試方法 319
25.2 測試流程和命令 320
25.3 測試結果 321
25.4 測試結果分析 321
第 26章 讓網(wǎng)卡驅動程序支持XDP功能 322
26.1 XDP代碼在網(wǎng)卡驅動中的位置 322
26.2 數(shù)據(jù)包的準備 323
26.3 返回值的處理 323
附錄A 在Linux系統(tǒng)中查找各種核的對應關系 325
附錄B 關于內存性能測試工具mbw的問題分析 331
附錄C 簡單分析memcpy的代碼優(yōu)化方法 335
附錄D 用線性回歸方法計算CPU頻率 338