零拷贝技术:减少数据复制和上下文切换,提高网络传输效率(上)

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 在本次讨论中,我们确实只是提到了DMA技术在文件传输过程中的重要作用,并对零拷贝技术进行了简要介绍。然而,网络传输中存在的问题和优化方法是一个庞大的话题,涉及到诸多方面。因此,我决定将这些问题的详细讨论留到下一篇文章中,以便更全面地探讨网络传输的优化。我希望通过这样的讨论,能够为读者提供有益的信息和思路,感谢大家的阅读和关注,期待在下一篇文章中与大家再次交流和分享关于网络传输的优化问题。

零拷贝

当涉及到网络传输中的零拷贝技术时,它在提高性能和效率方面扮演着重要的角色。在之前我们已经讨论了磁盘设备管理中的零拷贝技术,其中涉及到了DMA技术。现在,让我们来深入探讨一下网络传输中零拷贝技术的实现方式以及它的重要性。

为什么要有DMA技术

在没有DMA(直接内存访问)技术之前,I/O(输入/输出)的过程相对较为繁琐。当CPU需要进行数据读取或写入时,它会发送相应的指令给磁盘控制器,然后等待返回。

磁盘控制器接收到指令后,会开始处理,并将相应的数据缓冲填充到自身的缓冲区中。一旦缓冲区被填满,磁盘控制器会产生一个中断信号,通知CPU数据已准备就绪。

CPU接收到中断信号后,会保存当前进程的上下文,并开始处理这个中断。处理中断的过程包括将磁盘控制器缓冲区中的数据取出,并放入内核缓冲区中。一旦所有数据填满内核缓冲区后,CPU会将数据放入用户缓冲区的内存中,使应用程序可以对数据进行操作。

为了更好地理解这个过程,这里有一幅图:

image

可以看到,在整个数据传输过程中,CPU需要亲自参与搬运数据的过程,而且这个过程中CPU无法同时进行其他任务。然而,CPU本应该用来处理运算而不是搬运数据。

简单的搬运几个字符数据那没问题,当我们使用千兆网卡或者硬盘传输大量数据时,如果仍然让CPU来搬运数据,显然CPU会忙不过来。为了解决这个问题,计算机科学家们发明了DMA技术,即直接内存访问(Direct Memory Access)技术。

什么是DMA技术?大家肯定知道了一些,我在简单提一下吧。DMA技术的简单理解就是,在进行IO设备和内存之间的数据搬运时,尽量交给DMA控制器来完成,这样CPU就可以在搬运过程中继续处理其他任务,不再参与与数据搬运相关的工作。通过使用DMA控制器进行数据传输,CPU可以去处理其他事务。

那么,具体来看DMA控制器进行数据传输的过程是怎样的呢?下面我们来详细了解一下。

image

具体过程如下:

  1. 应用程序调用read方法时,发送一个IO请求给操作系统,请求将数据读取到自己的用户缓冲区中,此时进程开始阻塞等待数据。
  2. CPU告诉DMA控制器将数据写入到哪个内存地址,并将请求发送给DMA控制器,此时CPU可以继续进行其他任务。
  3. DMA控制器将请求指令发送给磁盘控制器。
  4. 磁盘控制器接收到指令后进行处理,将数据填充到数据缓冲区中,并发送中断信号给DMA控制器,通知其开始取数据。
  5. DMA控制器开始将磁盘控制器缓冲区中的数据拷贝到内核缓冲区中。在此过程中,CPU并不参与搬运数据的工作,而是忙于处理其他任务。
  6. 当DMA控制器将数据写入到内核缓冲区中足够多时,会发送一个中断信号给CPU,此时CPU才会介入,将数据从内核缓冲区拷贝到用户缓冲区(用户态中)。
  7. 系统调用返回,用户进程等待进行各种算法处理,然后再次被CPU调度。

可以看到,在整个数据传输过程中,CPU不再参与数据搬运的工作,而是由DMA控制器全程完成。然而,CPU在这个过程中仍然不可或缺,因为它需要告诉DMA控制器传输哪些数据,从何处传输到何处。

在早期的计算机系统中,DMA控制器主要存在于主板上。但是随着技术的发展,I/O设备的数量和种类不断增加,为了满足各种不同的数据传输需求,每个I/O设备中通常都会包含自己的DMA控制器。例如:网卡:例如以太网网卡,它负责将计算机连接到网络。网卡内部通常包含一个DMA控制器,用于将数据从网络传输到内存或从内存传输到网络。硬盘驱动器:硬盘驱动器中的控制器通常包含一个DMA控制器,用于将数据从硬盘传输到内存或从内存传输到硬盘。

传统的文件传输有多糟糕?

如果服务端需要提供文件传输功能,我们可以考虑以下最简单的方式来实现:首先,从磁盘读取文件内容,然后通过网络协议将文件内容发送给客户端。

传统的文件传输方式在性能方面存在一些问题。首先,传统的I/O过程中,数据的读取和写入需要经过用户空间和内核空间之间的复制,这会导致额外的开销和延迟。其次,数据的读取和写入是通过操作系统层面的I/O接口来完成的,这也会增加一定的系统开销。此外,传统的文件传输方式需要进行多次系统调用,包括读取文件内容和写入网络报文,这也会增加系统的负担和延迟。
通常情况下,文件传输功能的代码如下所示,通常会涉及到两个系统调用:

// 伪代码如下:
// 读取文件内容:read(file)
// 将文件内容写入符合要求的报文中:write(socket)

尽管代码只有两行,但是其中发生了许多重要的操作。我们看下:

image

首先,这段代码中发生了4次用户态与内核态的上下文切换。由于涉及两次系统调用(read()和write()),因此每次系统调用都需要从用户态切换到内核态,并在内核完成任务后再切换回用户态。

上下文切换的成本并不小,每次切换需要耗费几十纳秒到几微秒的时间。虽然单个切换时间很短,但在高并发的场景下,这种时间很容易被累积和放大,从而影响系统的性能。

其次,还发生了4次数据拷贝操作。其中两次是通过DMA(直接内存访问)进行的拷贝,另外两次则是通过CPU进行的拷贝。具体过程如下:

  1. DMA将数据从磁盘中拷贝到内核态的数据缓冲区;
  2. CPU接收到DMA控制器的中断信号后,将数据从内核缓冲区拷贝到用户缓冲区;
  3. 用户缓冲区的数据可能会被应用程序操作后直接发送或写入,再次由CPU拷贝到内核的socket缓冲区;
  4. DMA控制器再将socket缓冲区的数据拷贝到网卡上。

我们回过头看这个文件传输的过程,我们只是搬运一份数据,结果却搬运了 4 次,过多的数据拷贝无疑会消耗 CPU 资源,大大降低了系统性能。

我们可以看到,在文件传输的过程中,我们只需要搬运一份数据,但实际却进行了4次数据拷贝。过多的数据拷贝无疑会消耗CPU资源,大大降低系统性能。

这种简单且传统的文件传输方式存在冗余的上下文切换和数据拷贝操作,对于高并发系统而言非常糟糕。这些不必要的开销严重影响系统性能。因此,要提高文件传输的性能,我们需要减少用户态与内核态的上下文切换次数以及内存拷贝次数。

总结

在本次讨论中,我们确实只是提到了DMA技术在文件传输过程中的重要作用,并对零拷贝技术进行了简要介绍。然而,网络传输中存在的问题和优化方法是一个庞大的话题,涉及到诸多方面。因此,我决定将这些问题的详细讨论留到下一篇文章中,以便更全面地探讨网络传输的优化。我希望通过这样的讨论,能够为读者提供有益的信息和思路,感谢大家的阅读和关注,期待在下一篇文章中与大家再次交流和分享关于网络传输的优化问题。

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
2天前
|
存储 安全 算法
网络安全与信息安全:防御前线的关键技术与意识觉醒
【5月更文挑战第12天】在数字化浪潮不断推进的今天,网络安全与信息安全已成为维护社会稳定、保障个人隐私和商业秘密的重要屏障。本文深入探讨了网络安全漏洞的形成机理及其对信息系统的潜在威胁,分析了加密技术在数据保护中的应用及发展,并强调了提升全社会网络安全意识的必要性。通过综合研究,旨在为读者提供一套全面的网络安全知识框架,以及实用的防护策略。
9 2
|
5天前
|
存储 安全 物联网
网络安全与信息安全:防御前线的技术与意识
【5月更文挑战第9天】 在数字化时代,网络安全和信息安全已成为维护个人隐私、企业数据和国家安全的基石。本文将深入探讨网络安全漏洞的概念、加密技术的重要性以及提升安全意识的必要性。通过对这些关键领域的分析,我们将了解如何构建一个更加坚固的信息安全防线,并掌握保护信息不受未授权访问、泄露或破坏的策略和技术。
|
7天前
|
负载均衡 网络协议
虚拟网络技术:bond技术
虚拟网络技术:bond技术
8 0
|
8天前
|
运维 安全 网络协议
即时通讯安全篇(十四):网络端口的安全防护技术实践
网络端口因其数量庞大、端口开放和关闭的影响评估难度大,业务影响程度高、以及异常识别技术复杂度高等特点给网络端口安全防护带来了一定的挑战,如何对端口风险进行有效治理几乎是每个企业安全团队在攻击面管理工作中持续探索的重点项。
19 0
|
8天前
|
安全 物联网 网络安全
网络安全与信息安全:防御前线的关键技术与策略
【5月更文挑战第6天】在数字化时代,网络安全与信息安全已成为保护个人隐私、企业资产和国家安全不可或缺的一环。本文深入探讨了网络安全漏洞的概念、加密技术的进展以及提升安全意识的重要性。通过分析当前网络环境中存在的风险和挑战,文章提出了一系列创新的防御措施和最佳实践,旨在帮助读者构建一个更加安全的网络环境。
|
10天前
|
SQL 安全 算法
网络安全与信息安全:防御前线的技术与意识
【5月更文挑战第4天】在数字化时代,网络安全和信息安全已成为维护网络环境稳定的关键。本文深入探讨了网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性,旨在为读者提供全面的安全防护策略。通过对常见安全威胁的分析,我们展示了如何运用现代加密技术和安全机制来保护数据和隐私。同时,文章强调了培养个人和组织的安全意识对于构建安全防线的核心作用。
18 0
|
11天前
|
存储 安全 网络安全
网络安全与信息安全:防御前线的技术与意识
【5月更文挑战第3天】 在数字化时代,网络安全和信息安全已成为维护社会稳定、保护个人隐私和企业资产的重要领域。本文深入探讨了网络安全漏洞的成因与影响,加密技术的最新发展以及提升安全意识的必要性。通过对现有威胁的分析,我们强调了构建多层次防御策略的重要性,并提出了相应的技术解决方案和管理措施。
|
12天前
|
存储 SQL 安全
网络安全与信息安全:防御前线的关键技术与策略
【5月更文挑战第2天】 在数字化时代,数据成为了新的货币,而网络安全则是保护这些宝贵资产不受威胁的盾牌。本文将深入探讨网络安全漏洞的本质,分析加密技术如何成为防御体系的核心,并强调提升个人和企业的安全意识在构建坚固防线中的重要性。通过技术性解析和实践策略的分享,旨在为读者提供一套综合性的网络与信息安全解决方案。
|
13天前
|
安全 网络安全
网络安全攻防实战演练:技术探索与实践
【5月更文挑战第1天】网络安全攻防实战演练,通过模拟攻击与防御,提升组织应对网络安全威胁的能力。演练包括准备、攻击、防御和总结四个阶段,涉及环境搭建、攻击技术应用、防御措施执行及后期评估。此类演练有助于检验安全防护能力,提升应急响应速度,暴露系统隐患,加强团队协作,是保障网络安全的关键实践。
|
14天前
|
机器学习/深度学习 自动驾驶 安全
基于深度学习的图像识别技术在自动驾驶系统中的应用网络安全与信息安全:防御前线的关键技术与意识
【4月更文挑战第30天】随着人工智能技术的飞速发展,深度学习已成为推动多个技术领域革新的核心力量。特别是在图像识别领域,深度学习模型已展现出超越传统算法的性能。在自动驾驶系统中,准确的图像识别是确保行车安全和高效导航的基础。本文将探讨深度学习在自动驾驶中图像识别的应用,分析关键技术挑战,并提出未来的发展方向。