2023-2更文23-零拷贝

91 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 23 天,点击查看活动详情

零拷贝

前文

本文内容主要是关于io处理的零拷贝技术的相关知识的总结。

什么是零拷贝

什么是零拷贝?零拷贝主要是针对计算机体系中,当进行数据的搬运时,不需要cpu参与数据的复制工作,而是仅仅适当的进行调度,主要是为了减少cpu在数据过程中的搬运耗时持久等待,优化系统的io处理速度,避免cpu资源的浪费。

零拷贝的内容

再来具体的看一下零拷贝是什么。首先考虑这样的一个问题,当我们需要进行数据的io处理时,倘若不进行过程的优化,那么需要经历如下几个步骤:

  • 将磁盘中的数据写入到缓冲区中
  • cpu进行磁盘缓冲区数据的拷贝
  • cpu将拷贝的数据写入到内存中 在上述的整个过程中,cpu将全程参与数据的拷贝,且无法进行其他工作,几乎占用了全部的cpu资源。由此,也就产生了dma技术。

所谓的dma技术就是采用dma控制器来代替cpu完成这部分工作,避免cpu被长时间占用影响整个系统的执行效率。cpu向dma控制器发出指令,要进行数据读取。dma控制器会首先向磁盘发送信号,指令将数据写入到磁盘缓冲区。再将磁盘缓冲区中的数据,写入到内核缓冲区中。缓冲区处理完毕后再通知cpu,将数据写入到用户空间中。在整个过程中,cpu几乎不参与数据的复制,能极大的节省cpu的资源。

那么零拷贝是如何实现的呢,主要是当上述的文件io进行传递时,我们既需要读取到缓存区,又需要写入到socket缓存区,也就是进行两次dma数据的读写。那么这部分自然就是另外的优化空间,用户空间不会对文件进行操作,因此第二次的拷贝其实可以不必进行。这也就是零拷贝的处理,在内核空间不再进行数据的拷贝,而是直接传输文件的描述符等信息,以此减少了拷贝的过程。

零拷贝的应用

很常见的一个零拷贝的应用是kafka,通过零拷贝技术,极大的提高了数据的处理速度,实现了海量数据的吞吐。

总结

本文主要是关于dma以及零拷贝的技术,对其中的数据传输优化方式进行了一定程度的分析。