美文网首页C++精进之路
谈谈linux零拷贝机制

谈谈linux零拷贝机制

作者: this_is_for_u | 来源:发表于2020-01-29 18:38 被阅读0次

什么是零拷贝

零拷贝指的是数据从一个存储区域到另一个存储区域的过程中不需要cpu参与执行拷贝的动作,通常用于网络传输文件时减少cpu的负载,解放cpu去提升系统整体性能。

谈到零拷贝我们还需要了解到DMA是什么:
DMA(Direct Memory Access)是指在现代计算机系统上,外接设备可以不用CPU干预,直接把数据传输到内存的技术。正常情况下,CPU全权负责内存的读写操作,而DMA技术可以把CPU解放出来,这将使计算机性能得到显著改善。

如果做到零拷贝

普通的文件传输伪代码如下:

while(read(buffer)) {
  write(fd, buffer);
}

拷贝动作如图


zero_copy0.png

从图中可以看到,cpu参与了两次拷贝动作,从内核态拷贝到用户态,再从用户态拷贝到内核态,而且cpu的下文切换也是有消耗的,我们致力于减少cpu的上下文切换以及这两次cpu的拷贝操作。

linux有一个系统调用sendfile可以避免cpu的上下文切换,使得拷贝操作全部在内核态执行,拷贝操作如图:

#include <sys/sendfile.h>
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
zero_copy1.png

如图,使用sendfile系统调用避免了cpu的上下文切换,同时cpu的拷贝动作也减少了一次,其实上面的sendfile是老版本的内核实现,最新版本的内核带有gather功能的sendfile就已经完全避免了cpu的拷贝操作,如图:


zero_copy2.png

这就是cpu的零拷贝。

参考链接

linux sendfile
浅谈 Linux下的零拷贝机制
DMA简介
Linux 中的零拷贝技术,第 1 部分
Linux 中的零拷贝技术,第 2 部分

相关文章

  • 谈谈linux零拷贝机制

    什么是零拷贝 零拷贝指的是数据从一个存储区域到另一个存储区域的过程中不需要cpu参与执行拷贝的动作,通常用于网络传...

  • 2020-10-10

    深入剖析Linux IO原理和几种零拷贝机制的实现 - 零壹技术栈的文章 - 知乎https://zhuanlan...

  • Netty零拷贝

    Netty零拷贝分别用到了 直接内存 Linux零拷贝 Netty内部CompositeByteBuf 三个技术点...

  • 浅析Linux中的零拷贝技术

    本文探讨Linux中主要的几种零拷贝技术以及零拷贝技术适用的场景。为了迅速建立起零拷贝的概念,我们拿一个常用的场景...

  • zero-copy

    zero-copy 零拷贝 在linux上kafka使用了两种手段实现零拷贝: mmap 写入数据阶段 sendf...

  • 浅谈 Linux下的零拷贝机制

    什么是零拷贝 维基上是这么描述零拷贝的:零拷贝描述的是CPU不执行拷贝数据从一个存储区域到另一个存储区域的任务,这...

  • Linux 零拷贝原理

    零拷贝的好处 减少或避免不必要的CPU数据拷贝,从而释放CPU去执行其他任务零拷贝机制能减少用户空间和操作系统内核...

  • 零拷贝(Zero-copy)及其应用详解

    目录 前言 传统的数据传输方法 零拷贝的数据传输方法“基础的”零拷贝机制对Scatter/Gather的支持对内存...

  • Linux 零拷贝技术

    目录 [TOC] 简介 零拷贝(zero-copy)技术可以减少数据拷贝和共享总线操作的次数,消除通信数据在存储器...

  • linux的零拷贝

    零拷贝主要是为了解决用户态与内核态之间数据的拷贝,减少cpu的负担。下面的图描述了常见的数据处理过程。 零拷贝的实...

网友评论

    本文标题:谈谈linux零拷贝机制

    本文链接:https://www.haomeiwen.com/subject/krcbthtx.html