挑戰(zhàn)網(wǎng)絡(luò)性能極限 ,資深開(kāi)發(fā)者伴你在DPDK的世界中成長(zhǎng)。展現(xiàn)軟件優(yōu)化的極*魅力,百萬(wàn)兆高性能網(wǎng)絡(luò)就在身邊。剖析數(shù)據(jù)面軟件中的核心算法和關(guān)鍵技術(shù) 全面展示DPDK與 NFV的深度融合
難得的NFV數(shù)據(jù)面軟件書(shū)籍,
全面系統(tǒng)地闡述硬件平臺(tái)和數(shù)據(jù)面軟件中一系列關(guān)鍵技術(shù)。
權(quán)*的數(shù)據(jù)面軟件開(kāi)發(fā)指南,
深入剖析核心算法的原理及詳盡的DPDK編程實(shí)踐。
前沿的數(shù)據(jù)面產(chǎn)業(yè)應(yīng)用和動(dòng)向
全面介紹DPDK與 NFV、軟件存儲(chǔ)等領(lǐng)域的深度融合的案例。
近年來(lái),隨著網(wǎng)絡(luò)技術(shù)的不斷創(chuàng)新和市場(chǎng)的發(fā)展,越來(lái)越多的網(wǎng)絡(luò)設(shè)備基礎(chǔ)架構(gòu)開(kāi)始向基于通用處理器平臺(tái)的架構(gòu)方向融合,期望用更低的成本和更短的產(chǎn)品開(kāi)發(fā)周期來(lái)提供多樣的網(wǎng)絡(luò)單元和豐富的功能,如應(yīng)用處理、控制處理、包處理、信號(hào)處理等。為了適應(yīng)這一新的產(chǎn)業(yè)趨勢(shì), 英特爾公司聯(lián)合第三方軟件開(kāi)發(fā)公司及時(shí)推出了基于Intel® x86架構(gòu)的DPDK (Data Plane Development Kit,數(shù)據(jù)平面開(kāi)發(fā)套件),實(shí)現(xiàn)了高效靈活的包處理解決方案。經(jīng)過(guò)近6年的發(fā)展DPDK已經(jīng)發(fā)展成支持多種高性能網(wǎng)卡和多通用處理器平臺(tái)的開(kāi)源軟件工具包,并已成為通用處理器平臺(tái)上影響力*大的數(shù)據(jù)平面解決方案。
本書(shū)匯聚了資深的DPDK技術(shù)專(zhuān)家的精辟見(jiàn)解和實(shí)戰(zhàn)體驗(yàn),詳細(xì)介紹了DPDK技術(shù)發(fā)展趨勢(shì)、數(shù)據(jù)包處理、硬件加速技術(shù)、包處理和虛擬化 ,以及DPDK 技術(shù)在SDN、NFV、網(wǎng)絡(luò)存儲(chǔ)等領(lǐng)域的實(shí)際應(yīng)用。書(shū)中還使用大量的篇幅講解各種核心軟件算法、先進(jìn)的數(shù)據(jù)優(yōu)化思想、大量詳盡的實(shí)戰(zhàn)心得和使用指南。作為國(guó)內(nèi)*一本全面闡述網(wǎng)絡(luò)數(shù)據(jù)面的核心技術(shù)的書(shū)籍,本書(shū)主要面向IT、網(wǎng)絡(luò)通訊行業(yè)的從業(yè)人員,以及大專(zhuān)院校的學(xué)生,用通俗易懂的文字打開(kāi)了一扇通向新一代網(wǎng)絡(luò)處理架構(gòu)的大門(mén)。
朱河清 現(xiàn)為英特爾DPDK與Hyperscan軟件經(jīng)理,在Intel、Alcatel、Huawei、Lucent有15年通信網(wǎng)絡(luò)設(shè)備研發(fā)與開(kāi)源軟件開(kāi)發(fā)經(jīng)驗(yàn)。
梁存銘 英特爾資深軟件工程師,在計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域具有豐富的實(shí)踐開(kāi)發(fā)經(jīng)驗(yàn),提交多項(xiàng)美國(guó)專(zhuān)利。作為DPDK早期貢獻(xiàn)者之一,在PCIe 高性能加速、I/O虛擬化、IA指令優(yōu)化、協(xié)議棧優(yōu)化等方面有較深入的研究。
胡雪焜 現(xiàn)為英特爾網(wǎng)絡(luò)通訊平臺(tái)部門(mén)應(yīng)用工程師,主要研究底層虛擬化技術(shù)和基于IA架構(gòu)的數(shù)據(jù)面性能優(yōu)化, 以及對(duì)網(wǎng)絡(luò)演進(jìn)的影響,具有豐富的SDN/NFV商業(yè)實(shí)踐。
曹水 現(xiàn)為英特爾軟件經(jīng)理,從事嵌入式開(kāi)發(fā)和軟件行業(yè)超過(guò)15年,主要負(fù)責(zé)DPDK軟件測(cè)試工作。
序 言
引 言
作者介紹
第一部分 DPDK基礎(chǔ)篇
第1章 認(rèn)識(shí)DPDK 3
1.1 主流包處理硬件平臺(tái) 3
1.1.1 硬件加速器 4
1.1.2 網(wǎng)絡(luò)處理器 4
1.1.3 多核處理器 5
1.2 初識(shí)DPDK 7
1.2.1 IA不適合進(jìn)行數(shù)據(jù)包處理嗎 7
1.2.2 DPDK最佳實(shí)踐 9
1.2.3 DPDK框架簡(jiǎn)介 10
1.2.4 尋找性能優(yōu)化的天花板 11
1.3 解讀數(shù)據(jù)包處理能力 12
1.4 探索IA處理器上最艱巨的任務(wù) 13
1.5 軟件包處理的潛力——再識(shí)DPDK 14
1.5.1 DPDK加速網(wǎng)絡(luò)節(jié)點(diǎn) 14
1.5.2 DPDK加速計(jì)算節(jié)點(diǎn) 15
1.5.3 DPDK加速存儲(chǔ)節(jié)點(diǎn) 15
1.5.4 DPDK的方法論 16
1.6 從融合的角度看DPDK 16
1.7 實(shí)例 17
1.7.1 HelloWorld 17
1.7.2 Skeleton 19
1.7.3 L3fwd 22
1.8 小結(jié) 25
第2章 Cache和內(nèi)存 26
2.1 存儲(chǔ)系統(tǒng)簡(jiǎn)介 26
2.1.1 系統(tǒng)架構(gòu)的演進(jìn) 26
2.1.2 內(nèi)存子系統(tǒng) 28
2.2 Cache系統(tǒng)簡(jiǎn)介 29
2.2.1 Cache的種類(lèi) 29
2.2.2 TLB Cache 30
2.3 Cache地址映射和變換 31
2.3.1 全關(guān)聯(lián)型Cache 32
2.3.2 直接關(guān)聯(lián)型Cache 32
2.3.3 組關(guān)聯(lián)型Cache 33
2.4 Cache的寫(xiě)策略 34
2.5 Cache預(yù)取 35
2.5.1 Cache的預(yù)取原理 35
2.5.2 NetBurst架構(gòu)處理器上的預(yù)取 36
2.5.3 兩個(gè)執(zhí)行效率迥異的程序 37
2.5.4 軟件預(yù)取 38
2.6 Cache一致性 41
2.6.1 Cache Line對(duì)齊 41
2.6.2 Cache一致性問(wèn)題的由來(lái) 42
2.6.3 一致性協(xié)議 43
2.6.4 MESI協(xié)議 44
2.6.5 DPDK如何保證Cache一致性 45
2.7 TLB和大頁(yè) 47
2.7.1 邏輯地址到物理地址的轉(zhuǎn)換 47
2.7.2 TLB 48
2.7.3 使用大頁(yè) 49
2.7.4 如何激活大頁(yè) 49
2.8 DDIO 50
2.8.1 時(shí)代背景 50
2.8.2 網(wǎng)卡的讀數(shù)據(jù)操作 51
2.8.3 網(wǎng)卡的寫(xiě)數(shù)據(jù)操作 53
2.9 NUMA系統(tǒng) 54
第3章 并行計(jì)算 57
3.1 多核性能和可擴(kuò)展性 57
3.1.1 追求性能水平擴(kuò)展 57
3.1.2 多核處理器 58
3.1.3 親和性 61
3.1.4 DPDK的多線程 63
3.2 指令并發(fā)與數(shù)據(jù)并行 66
3.2.1 指令并發(fā) 67
3.2.2 單指令多數(shù)據(jù) 68
3.3 小結(jié) 70
第4章 同步互斥機(jī)制 71
4.1 原子操作 71
4.1.1 處理器上的原子操作 71
4.1.2 Linux內(nèi)核原子操作 72
4.1.3 DPDK原子操作實(shí)現(xiàn)和應(yīng)用 74
4.2 讀寫(xiě)鎖 76
4.2.1 Linux讀寫(xiě)鎖主要API 77
4.2.2 DPDK讀寫(xiě)鎖實(shí)現(xiàn)和應(yīng)用 78
4.3 自旋鎖 79
4.3.1 自旋鎖的缺點(diǎn) 79
4.3.2 Linux自旋鎖API 79
4.3.3 DPDK自旋鎖實(shí)現(xiàn)和應(yīng)用 80
4.4 無(wú)鎖機(jī)制 81
4.4.1 Linux內(nèi)核無(wú)鎖環(huán)形緩沖 81
4.4.2 DPDK無(wú)鎖環(huán)形緩沖 82
4.5 小結(jié) 89
第5章 報(bào)文轉(zhuǎn)發(fā) 90
5.1 網(wǎng)絡(luò)處理模塊劃分 90
5.2 轉(zhuǎn)發(fā)框架介紹 91
5.2.1 DPDK run to completion模型 94
5.2.2 DPDK pipeline模型 95
5.3 轉(zhuǎn)發(fā)算法 97
5.3.1 精確匹配算法 97
5.3.2 最長(zhǎng)前綴匹配算法 100
5.3.3 ACL算法 102
5.3.4 報(bào)文分發(fā) 103
5.4 小結(jié) 104
第6章 PCIe與包處理I/O 105
6.1 從PCIe事務(wù)的角度看包處理 105
6.1.1 PCIe概覽 105
6.1.2 PCIe事務(wù)傳輸 105
6.1.3 PCIe帶寬 107
6.2 PCIe上的數(shù)據(jù)傳輸能力 108
6.3 網(wǎng)卡DMA描述符環(huán)形隊(duì)列 109
6.4 數(shù)據(jù)包收發(fā)——CPU和I/O的協(xié)奏 111
6.4.1 全景分析 111
6.4.2 優(yōu)化的考慮 113
6.5 PCIe的凈荷轉(zhuǎn)發(fā)帶寬 113
6.6 Mbuf與Mempool 114
6.6.1 Mbuf 114
6.6.2 Mempool 117
6.7 小結(jié) 117
第7章 網(wǎng)卡性能優(yōu)化 118
7.1 DPDK的輪詢(xún)模式 118
7.1.1 異步中斷模式 118
7.1.2 輪詢(xún)模式 119
7.1.3 混和中斷輪詢(xún)模式 120
7.2 網(wǎng)卡I/O性能優(yōu)化 121
7.2.1 Burst收發(fā)包的優(yōu)點(diǎn) 121
7.2.2 批處理和時(shí)延隱藏 124
7.2.3 利用Intel SIMD指令進(jìn)一步并行化包收發(fā) 127
7.3 平臺(tái)優(yōu)化及其配置調(diào)優(yōu) 128
7.3.1 硬件平臺(tái)對(duì)包處理性能的影響 129
7.3.2 軟件平臺(tái)對(duì)包處理性能的影響 133
7.4 隊(duì)列長(zhǎng)度及各種閾值的設(shè)置 136
7.4.1 收包隊(duì)列長(zhǎng)度 136
7.4.2 發(fā)包隊(duì)列長(zhǎng)度 137
7.4.3 收包隊(duì)列可釋放描述符數(shù)量閾值(rx_free_thresh) 137
7.4.4 發(fā)包隊(duì)列發(fā)送結(jié)果報(bào)告閾值(tx_rs_thresh) 137
7.4.5 發(fā)包描述符釋放閾值(tx_free_thresh) 138
7.5 小結(jié) 138
第8章 流分類(lèi)與多隊(duì)列 139
8.1 多隊(duì)列 139
8.1.1 網(wǎng)卡多隊(duì)列的由來(lái) 139
8.1.2 Linux內(nèi)核對(duì)多隊(duì)列的支持 140
8.1.3 DPDK與多隊(duì)列 142
8.1.4 隊(duì)列分配 144
8.2 流分類(lèi) 144
8.2.1 包的類(lèi)型 144
8.2.2 RSS 145
8.2.3 Flow Director 146
8.2.4 服務(wù)質(zhì)量 148
8.2.5 虛擬化流分類(lèi)方式 150
8.2.6 流過(guò)濾 150
8.3 流分類(lèi)技術(shù)的使用 151
8.3.1 DPDK結(jié)合網(wǎng)卡Flow Director功能 152
8.3.2 DPDK結(jié)合網(wǎng)卡虛擬化及Cloud Filter功能 155
8.4 可重構(gòu)匹配表 156
8.5 小結(jié) 157
第9章 硬件加速與功能卸載 158
9.1 硬件卸載簡(jiǎn)介 158
9.2 網(wǎng)卡硬件卸載功能 159
9.3 DPDK軟件接口 160
9.4 硬件與軟件功能實(shí)現(xiàn) 161
9.5 計(jì)算及更新功能卸載 162
9.5.1 VLAN硬件卸載 162
9.5.2 IEEE1588硬件卸載功能 165
9.5.3 IP TCP/UDP/SCTP checksum硬件卸載功能 167
9.5.4 Tunnel硬件卸載功能 168
9.6 分片功能卸載 169
9.7 組包功能卸載 170
9.8 小結(jié) 172
第二部分 DPDK虛擬化技術(shù)篇
第10章 X86平臺(tái)上的I/O虛擬化 175
10.1 X86平臺(tái)虛擬化概述 176
10.1.1 CPU虛擬化 176
10.1.2 內(nèi)存虛擬化 177
10.1.3 I/O虛擬化 178
10.2 I/O透?jìng)魈摂M化 180
10.2.1 Intel? VT-d簡(jiǎn)介 180
10.2.2 PCIe SR-IOV概述 181
10.3 PCIe網(wǎng)卡透?jìng)飨碌氖瞻l(fā)包流程 183
10.4 I/O透?jìng)魈摂M化配置的常見(jiàn)問(wèn)題 184
10.5 小結(jié) 184
第11章 半虛擬化Virtio 185
11.1 Virtio使用場(chǎng)景 185
11.2 Virtio規(guī)范和原理 186
11.2.1 設(shè)備的配置 187
11.2.2 虛擬隊(duì)列的配置 190
11.2.3 設(shè)備的使用 192
11.3 Virtio網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)設(shè)計(jì) 193
11.3.1 Virtio網(wǎng)絡(luò)設(shè)備Linux內(nèi)核驅(qū)動(dòng)設(shè)計(jì) 193
11.3.2 基于DPDK用戶(hù)空間的Virtio網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)設(shè)計(jì)以及性能優(yōu)化 196
11.4 小結(jié) 198
第12章 加速包處理的vhost優(yōu)化方案 199
12.1 vhost的演進(jìn)和原理 199
12.1.1 Qemu與virtio-net 199
12.1.2 Linux內(nèi)核態(tài)vhost-net 200
12.1.3 用戶(hù)態(tài)vhost 201
12.2 基于DPDK的用戶(hù)態(tài)vhost設(shè)計(jì) 201
12.2.1 消息機(jī)制 202
12.2.2 地址轉(zhuǎn)換和映射虛擬機(jī)內(nèi)存 203
12.2.3 vhost特性協(xié)商 204
......