我们的活动在互联网上每天都会产生海量的数据。我们知道这是一个“很大”的数字,但你知道到底有多大吗?
据粗略估算,目前互联网上每天新增的数据量超过 1.15 EB 。而预测到 2025 年,这一数字会增长到 491 EB。如果看不出来这个数字有多大,那么看下这个单位换算公式:1 EB = 1*1024*1024*1024 GB。
因为物联网也在超快地发展,无处不在的 IoT 设备会产生更多的数据,所以互联网数据会呈指数级增长。那么无论是云计算、大数据分析应用,还是 AI 处理,网络传输能否及时“吞”下暴涨的数据,就决定了服务的能力。
但目前承载互联网服务的主流操作系统 Linux却存在网络性能瓶颈,问题出在哪里呢?
1Linux 网络的瓶颈
当 Linux 在 20世纪90 年代初设计开发 Linux 内核时,还无法预料到未来30年全球互联网的规模,所以也不可能按现在的数据流量去做设计。而 Linux 内核的基本结构也保持到现在。
因此问题就在于 Linux 内核网络协议栈的实现,相对于当下的数据吞吐量需求,有以下三个原因会产生网络传输瓶颈:
应用程序和网络协议栈在交换数据时,会频繁地在用户态与内核态之间切换,导致延时产生;
数据要在用户空间缓存与内核空间缓存之间往来复制,耗费时间;
内核协议栈需要对数据进行封装和解析工作,占用 CPU 时钟。
内核协议栈方案的数据流
办法总比困难多,《Linux高性能网络详解:从DPDK、RDMA到XDP》一书就针对上述问题给出了包括软件与硬件的解决办法。本书的作者是业内资深专家,他在书中以理论结合实践,说明了 DPDK、RDMA、XDP 实现 Linux 高性能网络以及保障传输安全的方案。
2DPDK:低成本的高性能网络技术
DPDK(Data Plane Development Kit,数据平面开发工具包)是在用户态运行的一组软件库和驱动程序。它的一大优点是可以在所有主要 CPU 体系上加速网络数据包的处理,这样一来,现有硬件无须升级,只要在内核加装相应驱动就可以提升网络性能,是一种低成本的实现方案。
DPDK 技术原理是绕过 Linux 内核协议栈直接访问网卡硬件,从而提高网络数据包的处理速度和吞吐量。DPDK 将网卡的数据包直接映射到用户空间,然后使用高效的数据包处理库进行数据包的处理和转发,最后再将数据包发送回网卡。
在数据中心、云计算、虚拟化、网络安全等应用场景中,DPDK可以提高网络应用的性能和吞吐量、降低网络延迟、提高网络应用的响应速度和稳定性,还可以支持多种网络协议和数据包格式,具有很好的灵活性和可扩展性。
DPDK 为处理数据包实现了一个“运行到完成”(run to completion)的模型,在执行数据平面处理逻辑之前,必须先分配所有资源,然后以逻辑核上执行单元(线程)的形式运行。该模型不支持调度器,以轮询的方式访问所有设备。
DPDK 的核心是一组库,下图是核心组件以及它们之间的依赖关系。
DPDK 核心组件
《Linux高性能网络详解:从DPDK、RDMA到XDP》详细说明了 DPDK 的内存管理与优化、DPDK 的编译与运行方法,介绍了测试和分析高性能网卡的工具与方法,是手把手式的贴心教程。这对于讲述内核驱动开发来说,是相当友好的学习体验。
接下来,我们了解一种软硬件结合的解决方案。
3RDMA:软硬兼施的高性能网络技术
RDMA(Remote Direct Memory Access,远程直接内存访问)提供了一种消息服务,应用程序可基于该服务直接读写远程计算机上的虚拟内存。
RDMA 相对于 DPDK 技术,不仅绕过了软件协议栈,最大的优点是将数据封装和解析工作放在了网卡里,由硬件来实现。这样就降低了 CPU 的负载,特别适合高性能计算场景,例如分布式神经网络计算。
它的工作原理是通过操作系统的通信机制建立通道,由应用程序在用户态直接操作硬件,数据无须流经内核,从而实现高效的网络传输性能。
下面我们从数据在两台主机之间的传输过程来了解一下 RDMA 的工作方式:
发送端网卡从本机内存用户空间复制数据到硬件缓冲区,并添加协议头,完成封装工作;
发送端网卡将数据通过网线或光纤将数据发往对端;
接收端网卡收到数据后,进行协议解封装,然后将数据从硬件缓冲区复制到本机用户空间内存中。
RDMA 方案的数据流
由上述可知,采用 RDMA 方案可以稳定获得网卡最大速率传输能力,而不会因为 CPU 负载变化造成传输效能波动。但在部署组网时,必须采购支持 RDMA 的特殊网卡。
《Linux高性能网络详解:从DPDK、RDMA到XDP》对 RDMA 组网方案与性能评估测试有详细说明,对于提供高性能计算服务的企业极具参考价值。
4XDP:高效传输的保障
DPDK 在传输数据时采用了操作系统内核旁路方式,这固然提升了效率,但也失去了操作系统安全机制提供的防护。这样就存在数据被截获、盗取的风险,因此需要有对数据的保护措施,同时保证高效传输。
XDP(eXpress Data Path,快速数据通路)是一种 BPF 的程序/代码,可以理解为挂载在 BPF 处理流程内的挂钩方法。它能够在网络数据到达网卡时就对其处理,而不过多占用 CPU 计算资源。
BPF 提供了在内核事件与应用程序事件发生时执行一段程序的机制。这使得内核可编程,XDP 即基于 BPF 特性为数据高速传输提供了保障。目前,XDP 已经是 Linux 内核的一部分,与现有的内核网络协议栈完全兼容,二者可以协同工作 。
XDP 的典型处理流程如下:
从网卡收到数据包,提取数据报头信息;
读取或更新一些元数据;
根据需要修改或者重写数据包;
根据策略决定是丢包、重传,还是重定向至内核协议栈等。
典型的 XDP 程序的执行流程
XDP 拥有诸多优点。第一,它由 Linux 内核社区维护,长期使用有保障,也无须额外安装组件;第二,它可以与内核协同,可复用内核安全模型;第三,BPF能够识别并拒绝执行不安全指令;第四,它不会独占 CPU,节约计算资源。
所以,在规划高性能网络实施方案时,需要将 DPDK 等技术与 XDP 相结合,尽可能地在性能与稳定、安全之间取得最佳平衡。
5结语
对于企业来说,在规划和实施网络方案时,一定要从自身业务特点出发,切忌巨额投资之后却是高射炮打蚊子的效果。这也需要技术团队对 Linux 网络技术原理有透彻理解,然后才能选择最适合的技术方案。
例如,业务发展稳定且已部署大量 Linux 服务器的企业,为了提升网络效能,可以选择 DPDK、XDP 技术。对于意欲进军 AI 业务的新兴企业来说,就要考虑充分解放算力,获得最优传输效能,可以选择 RDMA 技术路线。而拥有诸多复杂服务的云计算厂商,则要混合部署多种网络传输方案,同时保持稳定和速率。
《Linux高性能网络详解:从DPDK、RDMA到XDP》就为实现上述需求提供了很好的指引。从对 DPDK、RDMA、XDP 技术的原理说明,到深入代码级别的剖析,再以实例展示使用方法。企业据此就可以开展网络环境评估、技术选型参考、规划实施等工作。
在数据还将指数级暴增的未来,互联网企业都要未雨绸缪,及时调整网络环境,消除网络传输瓶颈,在未来赢得先机!
审核编辑:汤梓红
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:Linux网络性能瓶颈和解决方案-linux网络优化加速 https://www.yhzz.com.cn/a/3517.html