深入浅出DPDK

深入浅出DPDK pdf epub mobi txt 电子书 下载 2025

朱河清 等 著
图书标签:
  • DPDK
  • 网络编程
  • 高性能
  • Linux
  • 数据平面
  • 网络加速
  • 包处理
  • 内核旁路
  • 网络协议
  • 开发实践
想要找书就要到 静流书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 机械工业出版社
ISBN:9787111537830
版次:1
商品编码:11937100
品牌:机工出版
包装:平装
开本:16开
出版时间:2016-05-01
用纸:胶版纸
页数:267

具体描述

编辑推荐

  

挑战网络性能极限 ,资深开发者伴你在DPDK的世界中成长。展现软件优化的极*魅力,百万兆高性能网络就在身边。剖析数据面软件中的核心算法和关键技术 全面展示DPDK与 NFV的深度融合

难得的NFV数据面软件书籍,
  全面系统地阐述硬件平台和数据面软件中一系列关键技术。
  权*的数据面软件开发指南,
  深入剖析核心算法的原理及详尽的DPDK编程实践。
  前沿的数据面产业应用和动向
  全面介绍DPDK与 NFV、软件存储等领域的深度融合的案例。

内容简介

  

近年来,随着网络技术的不断创新和市场的发展,越来越多的网络设备基础架构开始向基于通用处理器平台的架构方向融合,期望用更低的成本和更短的产品开发周期来提供多样的网络单元和丰富的功能,如应用处理、控制处理、包处理、信号处理等。为了适应这一新的产业趋势, 英特尔公司联合第三方软件开发公司及时推出了基于Intel® x86架构的DPDK (Data Plane Development Kit,数据平面开发套件),实现了高效灵活的包处理解决方案。经过近6年的发展DPDK已经发展成支持多种高性能网卡和多通用处理器平台的开源软件工具包,并已成为通用处理器平台上影响力*大的数据平面解决方案。
  本书汇聚了资深的DPDK技术专家的精辟见解和实战体验,详细介绍了DPDK技术发展趋势、数据包处理、硬件加速技术、包处理和虚拟化 ,以及DPDK 技术在SDN、NFV、网络存储等领域的实际应用。书中还使用大量的篇幅讲解各种核心软件算法、先进的数据优化思想、大量详尽的实战心得和使用指南。作为国内*一本全面阐述网络数据面的核心技术的书籍,本书主要面向IT、网络通讯行业的从业人员,以及大专院校的学生,用通俗易懂的文字打开了一扇通向新一代网络处理架构的大门。

作者简介

朱河清 现为英特尔DPDK与Hyperscan软件经理,在Intel、Alcatel、Huawei、Lucent有15年通信网络设备研发与开源软件开发经验。
梁存铭 英特尔资深软件工程师,在计算机网络领域具有丰富的实践开发经验,提交多项美国专利。作为DPDK早期贡献者之一,在PCIe 高性能加速、I/O虚拟化、IA指令优化、协议栈优化等方面有较深入的研究。
胡雪焜 现为英特尔网络通讯平台部门应用工程师,主要研究底层虚拟化技术和基于IA架构的数据面性能优化, 以及对网络演进的影响,具有丰富的SDN/NFV商业实践。
曹水 现为英特尔软件经理,从事嵌入式开发和软件行业超过15年,主要负责DPDK软件测试工作。


精彩书评

  

当前,一场全新的网络技术革新正在如火如荼地展开,其焦点在于如何给通信企业、云服务商提供更具性价*的方案和更灵活的服务,而软件的创新正是推动这场革新的核心动力。经过多年的发展,DPDK已经成为事实上的数据面软件的标准,支持多个主流处理器架构,并已经拥有上百个成功的商业部署。英特尔公司非常荣幸能够作为这次网络技术变革的领导者,帮助用户打造具备高性能和灵活功能的产品。
  ——Sandra Rivera,英特尔数据中心网络平台事业部总裁
  
  英特尔平台在软件优化方面拥有巨大的潜力,DPDK是一个非常出色的例子。过去10年是我人生中尤为珍贵的旅程,我有幸主持DPDK开发计划,亲眼见证DPDK从最初一个很小的软件库起步,逐步完善原型设计,获得客户认可。伴随着多核时代和高速以太网时代的到来,DPDK在电信业、云计算和企业服务中掀起了一股网络技术革新的浪潮。在未来几年,我们即将看到全行业开源步伐加快,最近思科公司VPP在www.fd.io发布是一个优秀的实践。我们很幸运,能够成为网络技术革新的领导者。
  ——St Leger Jim,英特尔网络事业部软件产品总监
  
  软件正在改变世界,DPDK这样的开源软件展示了软件在高速的网络报文处理中的魅力。本书能够帮助广大学生在系统地学习理论知识的同时紧密联系实际工程和应用,具有相当不错的参考价值。
  ——金耀辉教授,上海交通大学网络中心

目录

序  言
引  言
作者介绍
第一部分 DPDK基础篇
第1章 认识DPDK 3
1.1 主流包处理硬件平台 3
1.1.1 硬件加速器 4
1.1.2 网络处理器 4
1.1.3 多核处理器 5
1.2 初识DPDK 7
1.2.1 IA不适合进行数据包处理吗 7
1.2.2 DPDK最佳实践 9
1.2.3 DPDK框架简介 10
1.2.4 寻找性能优化的天花板 11
1.3 解读数据包处理能力 12
1.4 探索IA处理器上最艰巨的任务 13
1.5 软件包处理的潜力——再识DPDK 14
1.5.1 DPDK加速网络节点 14
1.5.2 DPDK加速计算节点 15
1.5.3 DPDK加速存储节点 15
1.5.4 DPDK的方法论 16
1.6 从融合的角度看DPDK 16
1.7 实例 17
1.7.1 HelloWorld 17
1.7.2 Skeleton 19
1.7.3 L3fwd 22
1.8 小结 25
第2章 Cache和内存 26
2.1 存储系统简介 26
2.1.1 系统架构的演进 26
2.1.2 内存子系统 28
2.2 Cache系统简介 29
2.2.1 Cache的种类 29
2.2.2 TLB Cache 30
2.3 Cache地址映射和变换 31
2.3.1 全关联型Cache 32
2.3.2 直接关联型Cache 32
2.3.3 组关联型Cache 33
2.4 Cache的写策略 34
2.5 Cache预取 35
2.5.1 Cache的预取原理 35
2.5.2 NetBurst架构处理器上的预取 36
2.5.3 两个执行效率迥异的程序 37
2.5.4 软件预取 38
2.6 Cache一致性 41
2.6.1 Cache Line对齐 41
2.6.2 Cache一致性问题的由来 42
2.6.3 一致性协议 43
2.6.4 MESI协议 44
2.6.5 DPDK如何保证Cache一致性 45
2.7 TLB和大页 47
2.7.1 逻辑地址到物理地址的转换 47
2.7.2 TLB 48
2.7.3 使用大页 49
2.7.4 如何激活大页 49
2.8 DDIO 50
2.8.1 时代背景 50
2.8.2 网卡的读数据操作 51
2.8.3 网卡的写数据操作 53
2.9 NUMA系统 54
第3章 并行计算 57
3.1 多核性能和可扩展性 57
3.1.1 追求性能水平扩展 57
3.1.2 多核处理器 58
3.1.3 亲和性 61
3.1.4 DPDK的多线程 63
3.2 指令并发与数据并行 66
3.2.1 指令并发 67
3.2.2 单指令多数据 68
3.3 小结 70
第4章 同步互斥机制 71
4.1 原子操作 71
4.1.1 处理器上的原子操作 71
4.1.2 Linux内核原子操作 72
4.1.3 DPDK原子操作实现和应用 74
4.2 读写锁 76
4.2.1 Linux读写锁主要API 77
4.2.2 DPDK读写锁实现和应用 78
4.3 自旋锁 79
4.3.1 自旋锁的缺点 79
4.3.2 Linux自旋锁API 79
4.3.3 DPDK自旋锁实现和应用 80
4.4 无锁机制 81
4.4.1 Linux内核无锁环形缓冲 81
4.4.2 DPDK无锁环形缓冲 82
4.5 小结 89
第5章 报文转发 90
5.1 网络处理模块划分 90
5.2 转发框架介绍 91
5.2.1 DPDK run to completion模型 94
5.2.2 DPDK pipeline模型 95
5.3 转发算法 97
5.3.1 精确匹配算法 97
5.3.2 最长前缀匹配算法 100
5.3.3 ACL算法 102
5.3.4 报文分发 103
5.4 小结 104
第6章 PCIe与包处理I/O 105
6.1 从PCIe事务的角度看包处理 105
6.1.1 PCIe概览 105
6.1.2 PCIe事务传输 105
6.1.3 PCIe带宽 107
6.2 PCIe上的数据传输能力 108
6.3 网卡DMA描述符环形队列 109
6.4 数据包收发——CPU和I/O的协奏 111
6.4.1 全景分析 111
6.4.2 优化的考虑 113
6.5 PCIe的净荷转发带宽 113
6.6 Mbuf与Mempool 114
6.6.1 Mbuf 114
6.6.2 Mempool 117
6.7 小结 117
第7章 网卡性能优化 118
7.1 DPDK的轮询模式 118
7.1.1 异步中断模式 118
7.1.2 轮询模式 119
7.1.3 混和中断轮询模式 120
7.2 网卡I/O性能优化 121
7.2.1 Burst收发包的优点 121
7.2.2 批处理和时延隐藏 124
7.2.3 利用Intel SIMD指令进一步并行化包收发 127
7.3 平台优化及其配置调优 128
7.3.1 硬件平台对包处理性能的影响 129
7.3.2 软件平台对包处理性能的影响 133
7.4 队列长度及各种阈值的设置 136
7.4.1 收包队列长度 136
7.4.2 发包队列长度 137
7.4.3 收包队列可释放描述符数量阈值(rx_free_thresh) 137
7.4.4 发包队列发送结果报告阈值(tx_rs_thresh) 137
7.4.5 发包描述符释放阈值(tx_free_thresh) 138
7.5 小结 138
第8章 流分类与多队列 139
8.1 多队列 139
8.1.1 网卡多队列的由来 139
8.1.2 Linux内核对多队列的支持 140
8.1.3 DPDK与多队列 142
8.1.4 队列分配 144
8.2 流分类 144
8.2.1 包的类型 144
8.2.2 RSS 145
8.2.3 Flow Director 146
8.2.4 服务质量 148
8.2.5 虚拟化流分类方式 150
8.2.6 流过滤 150
8.3 流分类技术的使用 151
8.3.1 DPDK结合网卡Flow Director功能 152
8.3.2 DPDK结合网卡虚拟化及Cloud Filter功能 155
8.4 可重构匹配表 156
8.5 小结 157
第9章 硬件加速与功能卸载 158
9.1 硬件卸载简介 158
9.2 网卡硬件卸载功能 159
9.3 DPDK软件接口 160
9.4 硬件与软件功能实现 161
9.5 计算及更新功能卸载 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 小结 172
第二部分 DPDK虚拟化技术篇
第10章 X86平台上的I/O虚拟化 175
10.1 X86平台虚拟化概述 176
10.1.1 CPU虚拟化 176
10.1.2 内存虚拟化 177
10.1.3 I/O虚拟化 178
10.2 I/O透传虚拟化 180
10.2.1 Intel? VT-d简介 180
10.2.2 PCIe SR-IOV概述 181
10.3 PCIe网卡透传下的收发包流程 183
10.4 I/O透传虚拟化配置的常见问题 184
10.5 小结 184
第11章 半虚拟化Virtio 185
11.1 Virtio使用场景 185
11.2 Virtio规范和原理 186
11.2.1 设备的配置 187
11.2.2 虚拟队列的配置 190
11.2.3 设备的使用 192
11.3 Virtio网络设备驱动设计 193
11.3.1 Virtio网络设备Linux内核驱动设计 193
11.3.2 基于DPDK用户空间的Virtio网络设备驱动设计以及性能优化 196
11.4 小结 198
第12章 加速包处理的vhost优化方案 199
12.1 vhost的演进和原理 199
12.1.1 Qemu与virtio-net 199
12.1.2 Linux内核态vhost-net 200
12.1.3 用户态vhost 201
12.2 基于DPDK的用户态vhost设计 201
12.2.1 消息机制 202
12.2.2 地址转换和映射虚拟机内存 203
12.2.3 vhost特性协商 204
......











前言/序言

  引言
  动机
  2015年4月,第一届DPDK中国峰会在北京成功召开。来自中国移动、中国电信、阿里巴巴、IBM、Intel、华为以及中兴的专家朋友登台演讲,一起分享了以DPDK为中心的技术主题。表1列出了2015DPDK中国峰会的主题及演讲者。
  表12015DPDK中国峰会主题及演讲者主题演讲者公司利用DPDK加速NFV邓辉中国移动利用DPDK优化云基础设施孙成浩阿里巴巴构建core以及高能效应用的最佳实践梁存铭Intel基于英特尔ONP构建虚拟化的IP接入方案欧亮中国电信DPDK加速无线数据核心网络陈东华中兴电信业务场景下的数据面挑战刘郡华为运行于Power架构下的DPDK和数据转发祝超IBM这次会议吸引了来自各行业、科研单位与高校的200多名开发人员、专家和企业代表参会。会上问答交流非常热烈,会后我们就想,也许是时间写一本介绍DPDK、探讨NFV数据面的技术书籍。现在,很多公司在招聘网络和系统软件人才时,甚至会将DPDK作为一项技能罗列在招聘要求中。DPDK从一个最初的小众技术,经过10年的孕育,慢慢走来,直至今日已经逐渐被越来越多的通信、云基础架构厂商接受。同时,互联网上也出现不少介绍DPDK基础理论的文章和博客,从不同的角度对DPDK技术进行剖析和应用,其中很多观点非常新颖。作为DPDK的中国开发团队人员,我们意识到如果能够提供一本DPDK的书籍,进行一些系统性的梳理,将核心的原理进行深入分析,可以更好地加速DPDK技术的普及,触发更多的软件创新,促进行业的新技术发展。于是,就萌发了写这本书的初衷。当然,我们心里既有创作的激动骄傲,也有些犹豫忐忑,写书不是一件简单的事情,但经过讨论和考量,我们逐渐变得坚定,这是一本集结团队智慧的尝试。我们希望能够把DPDK的技术深入浅出地解释清楚,让更多的从业人员和高校师生了解并使用DPDK,促进DPDK发展日新月异,兴起百家争鸣的局面,这是我们最大的愿景。
  多核2005年的夏天,刚加入Intel的我们畅想着CPU多核时代的到来给软件业带来的挑战与机会。如果要充分利用多核处理器,需要软件针对并行化做大量改进,传统软件的并行化程度不高,在多核以前,软件依靠CPU频率提升自动获得更高性能。并行化改进不是一件简单的工作,许多软件需要重新设计,基本很难在短期实现,整个计算机行业都对此纠结了很久。2005年以前,整个CPU的发展历史,是不断提升芯片运算频率核心的做法,软件性能会随着处理器的频率升高,即使软件不做改动,性能也会跟着上一个台阶。但这样的逻辑进入多核时代已无法实现。首先我们来看看表2所示的Intel?多核处理器演进。
  表2Intel?多核处理器演进的历史图表Xeon处理器代码制造工艺最大核心数量发布时间超线程双路服务器可使用核心数量WoodCrest65nm??22006年6月否??4Nehalem-EP45nm??42009年7月是16Westmere-EP32nm??62010年2月是24SandyBridge-EP32nm??82012年3月是32IvyBridge-EP22nm122013年9月是48Haswell-EP22nm182014年9月是72在过去10年里,服务器平台的处理器核心数目扩展了很多。表2参考了英特尔至强系列的处理器的核心技术演进历史,这个系列的处理器主要面向双通道(双路)服务器和相应的硬件平台。与此同时,基于MIPS、Power、ARM架构的处理器也经历着类似或者更加激进的并行化计算的路线图。在处理器飞速发展的同时,服务器平台在硬件技术上提供了支撑。基于PCIExpress的高速IO设备、内存访问与带宽的上升相辅相成。此外,价格和经济性优势越发突出,今天一台双路服务器的价格可能和10年前一台高端笔记本电脑的价格类似,但计算能力达到甚至超越了当年的超级计算机。强大的硬件平台为软件优化技术创新蕴蓄了温床。
  以太网接口技术也经历了飞速发展。从早期主流的10Mbit/s与100Mbit/s,发展到千兆网(1Gbit/s)。到如今,万兆(10Gbit/s)网卡技术成为数据中心服务器的主流接口技术,近年来,Intel等公司还推出了40Gbit/s、100Gbit/s的超高速网络接口技术。而CPU的运行频率基本停留在10年前的水平,为了迎接超高速网络技术的挑战,软件也需要大幅度创新。
  结合硬件技术的发展,DPDK(DataPlaneDevelopmentKit),一个以软件优化为主的数据面技术应时而生,它为今天NFV技术的发展提供了绝佳的平台可行性。
  IXP提到硬件平台和数据面技术,网络处理器是无法绕过的话题。电信行业通常使用网络处理器或类似芯片技术作为数据面开发平台首选。Intel此前也曾专注此领域,2002年收购了DEC下属的研究部门,在美国马萨诸塞州哈德逊开发了这一系列芯片,诞生了行业闻名的IntelExchangeArchitectureNetworkProcessor(IXP4xx、IXP12xx、IXP24xx、IXP28xx)产品线,曾取得行业市场占有率第一的成绩。即使今日,相信很多通信业的朋友,还对这些处理器芯片有些熟悉或者非常了解。IXP内部拥有大量的微引擎(MicroEngine),同时结合了XSCALE作为控制面处理器,众所周知,XSCALE是以ARM芯片为核心技术的一种扩展。
  2006年,AMD向Intel发起了一场大战,时至今日结局已然明了,Intel依赖麾下的以色列团队,打出了新一代Core架构,迅速在能效比上完成超车。公司高层同时确立了Tick-Tock的研发节奏,每隔两年推出新一代体系结构,每隔两年推出基于新一代制造工艺的芯片。这一战略基本保证了每年都会推出新产品。当时AMD的处理器技术一度具有领先地位,并触发了Intel在内部研发架构城门失火的状况下不得不进行重组,就在那时Intel的网络处理器业务被进行重估,由于IXP芯片系列的市场容量不够大,Intel的架构师也开始预测,通用处理器多核路线有取代IXP专用处理芯片的潜力。自此,IXP的研发体系开始调整,逐步转向使用IntelCPU多核的硬件平台,客观上讲,这一转型为DPDK的产生创造了机会。时至今日,Intel还保留并发展了基于硬件加速的QuickAssist技术,这和当日的IXP息息相关。由此看来,DPDK算是生于乱世。
  DPDK的历史网络处理器能够迅速将数据报文接收入系统,比如将64字节的报文以10Gbit/s的线速也就是14.88Mp/s(百万报文每秒)收入系统,并且交由CPU处理,这在早期Linux和服务器平台上无法实现。以VenkyVenkastraen、WalterGilmore、MikeLynch为核心的Intel团队开始了可行性研究,并希望借助软件技术来实现,很快他们取得了一定的技术突破,设计了运行在Linux用户态的网卡程序架构。传统上,网卡驱动程序运行在Linux的内核态,以中断方式来唤醒系统处理,这和历史形成有关。早期CPU运行速度远高于外设访问,所以中断处理方式十分有效,但随着芯片技术与高速网络接口技术的一日千里式发展,报文吞吐需要高达10Gbit/s的端口处理能力,市面上已经出现大量的25Gbit/s、40Gbit/s甚至100Gbit/s高速端口,主流处理器的主频仍停留在3GHz以下。高端游戏玩家可以将CPU超频到5GHz,但网络和通信节点的设计基于能效比经济性的考量,网络设备需要日以继夜地运行,运行成本(包含耗电量)在总成本中需要重点考量,系统选型时大多选取2.5GHz以下的芯片,保证合适的性价比。I/O超越CPU的运行速率,是横在行业面前的技术挑战。用轮询来处理高速端口开始成为必然,这构成了DPDK运行的基础。
  在理论框架和核心技术取得一定突破后,Intel与6wind进行了合作,交由在法国的软件公司进行部分软件开发和测试,6wind向Intel交付了早期的DPDK软件开发包。2011年开始,6wind、Windriver、Tieto、Radisys先后宣布了对IntelDPDK的商业服务支持。Intel起初只是将DPDK以源代码方式分享给少量客户,作为评估IA平台和硬件性能的软件服务模块,随着时间推移与行业的大幅度接受,2013年Intel将DPDK这一软件以BSD开源方式分享在Intel的网站上,供开发者免费下载。2013年4月,6wind联合其他开发者成立www.dpdk.org的开源社区,DPDK开始走上开源的大道。
  开源DPDK在代码开源后,任何开发者都被允许通过www.dpdk.org提交代码。随着开发者社区进一步扩大,Intel持续加大了在开源社区的投入,同时在NFV浪潮下,越来越多的公司和个人开发者加入这一社区,比如Brocade、Cisco、RedHat、VMware、IBM,他们不再只是DPDK的消费者,角色向生产者转变,开始提供代码,对DPDK的代码进行优化和整理。起初DPDK完全专注于Intel的服务器平台技术,专注于利用处理器与芯片组高级特性,支持Intel的网卡产品线系列。
  DPDK2.1版本在2015年8月发布,几乎所有行业主流的网卡设备商都已经加入DPDK社区,提供源代码级别支持。另外,除了支持通用网卡之外,能否将DPDK应用在特别的加速芯片上是一个有趣的话题,有很多工作在进行中,Intel最新提交了用于Crypto设备的接口设计,可以利用类似Intel的QuickAssit的硬件加速单元,实现一个针对数据包加解密与压缩处理的软件接口。
  在多架构支持方面,DPDK社区也取得了很大的进展,IBM中国研究院的祝超博士启动了将DPDK移植到Power体系架构的工作,Freescale的中国开发者也参与修改,Tilera与Ezchip的工程师也花了不少精力将DPDK运行在Tile架构下。很快,DPDK从单一的基于Intel平台的软件,逐步演变成一个相对完整的生态系统,覆盖了多个处理器、以太网和硬件加速技术。
  在Linux社区融合方面,DPDK也开始和一些主流的Linux社区合作,并得到了越来越多的响应。作为Linux社区最主要的贡献者之一的RedHat尝试在FedoraLinux集成DPDK;接着RedHatEnterpriseLinux在安装库里也加入DPDK支持,用户可以自动下载安装DPDK扩展库。RedHat工程师还尝试将DPDK与Container集成测试,并公开发布了运行结果。传统虚拟化的领导者VMware的工程师也加入DPDK社区,负责VMXNET3-PMD模块的维护。Canonical在Ubuntu15中加入了DPDK的支持。
  延伸由于DPDK主体运行在用户态,这种设计理念给Linux或者FreeBSD这类操作系统带来很多创新思路,也在Linux社区引发一些讨论。
  DPDK的出现使人们开始思考,Linux的用户态和内核态,谁更适合进行高速网络数据报文处理。从简单数据对比来看,在Intel的通用服务器上,使用单核处理小包收发,纯粹的报文收发,理想模型下能达到大约57Mp/s(每秒百万包)。尽管在真实应用中,不会只收发报文不处理,但这样的性能相对Linux的普通网卡驱动来说已经是遥不可及的高性能。OpenVSwitch是一个很好的例子,作为主流的虚拟交换开源软件,也尝试用DPDK来构建和加速虚拟交换技术,DPDK的支持在OVS2.4中被发布,开辟了在内核态数据通道之外一条新的用户态数据通道。目前,经过20多年的发展,Linux已经累积大量的开源软件,具备丰富的协议和应用支持,无所不能,而数据报文进出Linux系统,基本都是在Linux内核态来完成处理。因为Linux系统丰富强大的功能,相当多的生产系统(现有软件)运行在Linux内核态,这样的好处是大量软件可以重用,研发成本低。但也正因为内核功能强大丰富,其处理效率和性能就必然要做出一些牺牲。
  使用在专业的通信网络系统中,高速数据进出速率是衡量系统性能的关键指标之一。大多通信系统是基于Linux的定制系统,在保证实时性的嵌入式开发环境中开发出用户态下的程序完成系统功能。利用DPDK的高速报文吞吐优势,对接运行在Linux用户态的程序,对成本降低和硬件通用化有很大的好处,使得以软件为主体的网络设备成为可能。对Intel?x86通用处理器而言,这是一个巨大的市场机会。
  对于通信设备厂商,通用平台和软件驱动的开发方式具有易采购、易升级、稳定性、节约成本的优点。
  易采购:通用服务器作为主流的基础硬件,拥有丰富的采购渠道和供应商,供货量巨大。
  易升级:软件开发模式简单,工具丰富,最大程度上避免系统升级中对硬件的依赖和更新,实现低成本的及时升级。
  稳定性:通用服务器平台已经通过大量功能的验证,产品稳定性毋庸置疑。而且,对于专用的设计平台,系统稳定需要时间累积和大量测试,尤其是当采用新一代平台设计时可能需要硬件更新,这就会带来稳定性的风险。
  节约研发成本和降低复杂性:传统的网络设备因为功能复杂和高可靠性需求,系统切分为多个子系统,每个子系统需要单独设计和选型,独立开发,甚至选用单独的芯片。这样的系统需要构建复杂的开发团队、完善的系统规划、有效的项目管理和组织协调,来确保系统开发进度。而且,由于开发的范围大,各项目之间会产生路径依赖。而基于通用服务器搭建的网络设备可以很好地避免这些问题。
  版权DPDK全称是DataPlaneDevelopmentKit,从字面解释上看,这是专注于数据面软件开发的套件。本质上,它由一些底层的软件库组成。目前,DPDK使用BSDlicense,绝大多数软件代码都运行在用户态。少量代码运行在内核态,涉及UIO、VFIO以及XenDom0,KNI这类内核模块只能以GPL发布。BSD给了DPDK的开发者和消费者很大的自由,大家可以自由地修改源代码,并且广泛应用于商业场景。这和GPL对商业应用的限制有很大区别。作为开发者,向DPDK社区提交贡献代码时,需要特别注意license的定义,开发者需要明确license并且申明来源的合法性。
  ......



《高性能网络加速器:原理、实践与优化》 内容简介: 在当今数据驱动的时代,网络性能已成为衡量信息技术效率的关键指标。从大规模数据中心到边缘计算节点,再到物联网设备,高速、低延迟的网络通信需求正以前所未有的速度增长。传统网络栈的处理能力在面对海量数据流和高并发请求时,常常捉襟见肘,成为系统性能的瓶颈。本书旨在深入剖析现代高性能网络加速技术的底层原理,并通过大量的实践案例和优化策略,为读者构建一套完整的技术知识体系,使其能够自信地设计、实现和优化面向未来的网络应用。 本书并非局限于单一的技术框架,而是着眼于整个高性能网络生态。我们将从数据包在网络硬件和软件栈中的旅程出发,逐步揭示导致性能损耗的根源。从网卡硬件的 DMA(Direct Memory Access)机制,到中断处理的效率,再到操作系统内核协议栈的开销,每一个环节都可能成为性能的“阿喀琉斯之踵”。理解这些瓶颈,是实现突破性性能提升的第一步。 第一部分:高性能网络架构基础 在深入具体的技术实现之前,本书将首先奠定坚实的理论基础。我们将详细讲解网络协议栈的演进历程,重点阐述 TCP/IP 协议族的内在机制,以及在现代高并发环境下,传统内核协议栈所面临的挑战。这包括对网络设备中断模型的分析,缓冲区管理的效率问题,以及上下文切换带来的开销。 我们将深入探讨高性能网络设计的核心思想,例如: 零拷贝(Zero-Copy): 减少数据在用户态和内核态之间不必要的拷贝,直接在内存或硬件中进行数据传输,从而显著降低 CPU 开销和内存带宽占用。我们会分析不同零拷贝技术的实现原理,如 `sendfile`、`splice` 等,并探讨其适用场景和局限性。 用户态网络栈(Userspace Networking): 绕过操作系统内核,直接在用户态处理网络数据包。这极大地减少了内核协议栈带来的延迟和开销,为应用程序提供了前所未有的网络控制权和性能。我们将详细介绍用户态网络栈的典型架构,包括其与应用程序的交互方式,以及如何管理网络设备。 多队列(Multi-Queue)与无锁(Lock-Free)设计: 针对多核 CPU 的并行处理能力,探讨如何将网络接收和发送队列分布到不同的 CPU 核心,避免锁竞争,实现真正的并行数据处理。我们将深入讲解多队列网卡的工作原理,以及无锁数据结构的设计和应用,以实现高效的并发访问。 CPU 亲和性(CPU Affinity)与 NUMA(Non-Uniform Memory Access)优化: 如何将网络处理线程绑定到特定的 CPU 核心,并考虑 CPU 和内存的拓扑结构,以最大程度地提高缓存命中率和内存访问效率,减少跨节点内存访问的延迟。 第二部分:核心技术与实现原理 在掌握了基础理论后,本书将带领读者深入到高性能网络加速的核心技术实现。我们将聚焦于几个关键的技术领域,并提供详实的原理剖析和代码示例。 现代网卡(NIC)硬件加速: 深入解析网卡硬件提供的各种加速功能,如 TSO (TCP Segmentation Offload)、LRO (Large Receive Offload)、Checksum Offload、RSS (Receive Side Scaling) 等。我们将讲解这些功能的原理,以及它们如何减轻 CPU 的负担。 中断与轮询(Polling): 对比中断驱动和轮询驱动的网络数据接收模式。分析中断模式下的延迟瓶颈,以及在高性能场景下,为何轮询模式成为主流。我们将深入讲解如何实现高效的轮询模型,包括忙碌等待、事件通知与轮询的结合等。 内存管理与大页(Huge Pages): 高性能网络应用对内存管理提出了极高的要求。我们将详细讲解如何通过内存池、内存预分配等技术来减少内存分配和释放的开销。同时,我们将重点介绍大页(Huge Pages)的使用,以及它如何提高 TLB(Translation Lookaside Buffer)的命中率,减少页表查找的开销,从而提升内存访问性能。 原子操作与锁机制: 在多核并发环境下,数据的同步和一致性至关重要。我们将详细讲解各种原子操作(如 Compare-and-Swap)和锁机制(如自旋锁、互斥锁)在网络数据处理中的应用,并重点探讨无锁(Lock-Free)数据结构的实现,以避免锁竞争带来的性能瓶颈。 数据包解析与转发: 从接收到的原始数据包开始,我们将逐步讲解如何进行高效的数据包解析,包括 MAC 地址、IP 地址、TCP/UDP 头部等字段的提取。然后,我们将探讨不同场景下的数据包转发策略,包括基于查找表的转发、基于规则的转发等。 第三部分:实践案例与性能优化 理论结合实践是本书的另一大亮点。在这一部分,我们将通过一系列精心设计的实践案例,引导读者将所学知识应用于实际场景,并掌握系统性的性能优化方法。 构建高性能网络应用: 我们将演示如何从零开始构建一个高性能的网络服务器或客户端,例如一个高性能的 HTTP 服务器、一个低延迟的消息队列代理,或者一个高吞吐量的网络代理。在这些案例中,我们将逐步引入前面讲解的各种高性能网络技术。 性能瓶颈分析与诊断: 掌握高性能网络技术后,识别和解决性能瓶颈同样重要。我们将介绍多种性能分析工具和方法,如 `perf`、`strace`、`tcpdump` 等,并指导读者如何使用它们来定位 CPU 占用过高、内存泄漏、网络拥塞等问题。 网络协议栈调优: 除了应用程序层面的优化,操作系统网络协议栈的调优也不可或缺。我们将讲解如何调整 TCP 参数(如 `net.ipv4.tcp_rmem`、`net.ipv4.tcp_wmem`、`net.ipv4.tcp_congestion_control` 等),以及如何优化网络设备驱动参数,以适应不同的网络环境和应用需求。 缓存一致性与伪共享(False Sharing): 在多核环境下,CPU 缓存的一致性问题以及伪共享现象会严重影响性能。我们将深入讲解缓存一致性协议,并提供避免伪共享的技巧,如数据结构对齐、填充字节等。 负载均衡与流量控制: 在大规模部署时,负载均衡和流量控制是保证系统稳定性和可用性的关键。我们将介绍多种负载均衡算法,以及如何实现公平的流量控制,避免“坏邻居”效应。 第四部分:高级主题与未来展望 为了让读者对高性能网络技术有更全面的认知,本书的最后一部分将探讨一些高级主题,并对未来的发展趋势进行展望。 RDMA(Remote Direct Memory Access): 深入讲解 RDMA 技术,包括其工作原理、不同实现(如 InfiniBand、RoCE)的特点,以及如何在分布式系统中实现低延迟、高吞吐量的数据传输,例如在高性能计算和分布式存储系统中。 DPDK(Data Plane Development Kit)深度剖析(非本书核心内容,但可作为延伸参考): 虽然本书不直接以 DPDK 为核心,但为了提供更广泛的视野,我们将简要介绍 DPDK 的设计理念、核心组件(如 PMD、MBUF、Ring Buffer)以及其在用户态网络处理中的重要地位。我们将分析 DPDK 如何通过绕过内核、使用轮询等方式实现高性能,并与其他技术结合的可能性。 网络功能虚拟化(NFV)与 SDN(Software-Defined Networking): 探讨高性能网络技术在 NFV 和 SDN 架构中的应用,以及如何通过软件定义网络来实现更灵活、更智能的网络管理和流量调度。 AI 与网络: 展望人工智能技术在网络领域的应用,例如智能流量预测、异常检测、自动化网络优化等,以及高性能网络技术如何为这些 AI 应用提供底层支持。 目标读者: 本书适合以下人群阅读: 网络工程师: 希望深入理解网络底层机制,提升网络设备和系统的性能。 系统架构师: 设计和构建高性能、可扩展的网络服务的技术负责人。 软件开发者: 需要开发高性能网络应用(如数据库、消息队列、Web服务器、游戏服务器等)的程序员。 嵌入式开发工程师: 在资源受限的设备上实现高效网络通信的开发者。 对网络性能优化感兴趣的研究人员和学生。 通过本书的学习,读者将能够深刻理解现代高性能网络技术的核心原理,掌握解决网络性能瓶颈的有效方法,并能够自信地设计和实现满足严苛性能要求的网络解决方案。本书将成为您在高性能网络领域探索和创新的有力助手。

用户评价

评分

我一直对网络数据包的处理流程和底层优化技术充满好奇,尤其是在看到一些惊人的网络性能测试数据时,总想知道那背后究竟隐藏着怎样的技术玄机。《深入浅出DPDK》这本书,彻底满足了我的这份好奇心。它不仅仅是一本关于DPDK API的参考手册,更像是一本关于高性能网络编程的“武林秘籍”。书中的内容,对于理解网络包在硬件层面和软件层面是如何被高效处理的,有着极其深刻的洞察。我特别喜欢它对网卡驱动模型和中断处理的讲解。以往我总是觉得网卡驱动是一个黑盒子,但这本书通过细致的分析,让我了解了DPDK是如何通过轮询模式,跳过传统中断模式的开销,直接从网卡队列中拉取数据包。这种对底层机制的深入剖析,让我豁然开朗。同时,书中对于缓存一致性、CPU流水线等 CPU 体系结构方面的知识与 DPDK 的结合也讲得非常到位,让我明白了为什么有时候简单的代码调整能带来巨大的性能飞跃。它不仅仅是告诉你 DPDK 能做什么,更是教会你如何思考,如何从根本上理解和优化网络性能。

评分

作为一名在网络领域摸爬滚打多年的开发者,我一直觉得,理论知识的深度直接决定了你解决问题的能力上限。而《深入浅出DPDK》这本书,完美地契合了我的这一认知。它并没有停留在API的罗列和简单功能的介绍上,而是深挖了DPDK背后的设计哲学和工程实践。书中的每一个章节,都像是在为我揭示一个隐藏的“宝藏”。比如说,它在讲解 rte_mbuf 的设计时,不仅仅是描述了其结构,更是深入分析了为什么它被设计成这样,以及它如何高效地管理和传递网络数据。这种“为什么”的视角,对于我这种希望知其然更要知其所以然的技术人员来说,简直是福音。更让我印象深刻的是,书中对多核并发模型和锁机制的阐述。在实际项目中,并发问题往往是性能瓶颈的根源,而DPDK在这方面的处理方式,确实是业界标杆。这本书的讲解,让我理解了DPDK是如何通过无锁队列、内存池等机制,最大程度地避免了锁竞争,从而实现了极致的吞吐量。读完之后,我感觉自己对如何构建高性能、高并发的网络应用有了全新的认识,不再是从前那种“头痛医头,脚痛医脚”的粗浅理解,而是能够从宏观上把握整个系统的性能脉络。

评分

这本《深入浅出DPDK》简直是我近期技术阅读中最具颠覆性的一本!我一直对高性能网络处理有着浓厚的兴趣,但常常在各种零散的资料和官方文档之间迷失方向,感觉像是隔着一层纱,看不真切背后的机制。这本书的出现,如同一束强光,瞬间驱散了我所有的困惑。从一开始,作者就以一种极其耐心且循序渐进的方式,将DPDK复杂的架构展现在读者面前。我尤其喜欢它在讲解内存管理和轮询模式时,那种抽丝剥茧般的叙述。它不仅仅告诉你“怎么做”,更重要的是解释了“为什么这样做”。比如,关于大页内存的优势,书里通过生动的比喻和清晰的图示,让我彻底理解了它如何减少TLB miss,从而带来的巨大性能提升。然后是CPU亲和性、NUMA架构对网络性能的影响,这些理论性的知识在实践中往往被忽视,但这本书却将其提升到了核心地位,并且详细阐述了DPDK如何利用这些特性进行优化。每一次阅读,我都感觉自己对网络数据包的生命周期有了更深刻的认知,不再是简单的“收发”,而是能够想象它在CPU流水线中穿梭的每一个细节。它让我明白了,高性能不是靠“魔法”,而是源于对底层硬件原理的深刻理解和精妙的软件设计。

评分

说实话,一开始拿到《深入浅出DPDK》,我心里是有点忐忑的。DPDK的名声在外,但其复杂度和学习曲线也是出了名的陡峭。我担心这本书会不会像很多技术书籍一样,只是流于表面,或者过于晦涩难懂,最终让我望而却步。然而,事实证明我的担忧是多余的。这本书的作者,真的做到了“深入浅出”。它就像一位经验丰富的导师,耐心地引导着我一步步走进DPDK的世界。从最基础的环境搭建,到核心的数据结构,再到复杂的网络协议栈加速,每一个环节都讲解得条理清晰,重点突出。我特别欣赏书中对于代码示例的运用。它不是简单地丢几个代码片段,而是会详细解释每一行代码的作用,以及它在整个DPDK框架中扮演的角色。这对于我这种喜欢通过动手实践来学习的人来说,简直太友好了。读到关于报文解析的部分,书里将不同协议的解析逻辑娓娓道来,并且结合了DPDK的优化技巧,让我明白了为什么DPDK能够如此快速地处理各种网络流量。这本书让我觉得,掌握DPDK并非遥不可及,而是通过正确的学习方法和优质的教材,完全可以实现。

评分

读完《深入浅出DPDK》,我感觉自己像是经历了一次“内功心法”的深度训练。这本书没有炫技,没有花哨的辞藻,而是用一种朴实而严谨的态度,将DPDK的精髓展现在我面前。从最初的内存管理策略,到各种高效的数据结构设计,再到复杂的协议卸载和流分类,每一部分都充满了作者的匠心独运。我尤其对书中关于“零拷贝”和“内存池”的讲解印象深刻。它们不仅仅是技术名词,更是DPDK性能优化的基石。书里通过清晰的图示和逻辑严密的解释,让我理解了为什么这些技术能够如此有效地减少数据复制和内存分配的开销,从而将吞吐量推向新的高度。此外,这本书还非常注重将理论与实践相结合。它提供的代码示例,不仅仅是为了演示某个功能,更是为了帮助读者理解DPDK在实际场景中的应用。这种“学以致用”的设计理念,让我觉得这本书的价值不仅仅体现在理论知识的传授,更在于它能够赋能读者去解决实际问题。它让我看到了高性能网络编程的“道”,而不仅仅是“术”。

评分

速度很快,包装完好,第二天就到了,非常满意呢,赞一个!

评分

不错,学习中

评分

老公买的学习书,质量不错,活动时买的特别合适

评分

还不错

评分

物流超快,包装完好无损。

评分

质量好,快递给力,小哥非常好

评分

质量很好,质量很好,质量很好,质量很好,质量很好

评分

不错,正版,阅读很方便。

评分

能了解多核之间是怎样实现高并发的。了解多核架构下各部件怎样协同。

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.coffeedeals.club All Rights Reserved. 静流书站 版权所有