美文网首页
linux的零拷贝

linux的零拷贝

作者: ZMRWEGo | 来源:发表于2019-04-07 15:46 被阅读0次

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


图中一共出现了四次拷贝,即使使用了DMA
来处理与硬件的通讯,cpu仍然需要处理两次拷贝。

零拷贝的实现方法

1. 使用mmap

我们减少拷贝次数的一种方法是调用mmap()来代替read调用。操作系统会通过内核缓冲区与应用程序共享,应用程序再调用write()操作,操作系统直接将内核缓冲区的内容拷贝到socket缓冲区。这个拷贝过程一直在内核态


当拷贝数据量很大时,这种方式很明显提升了效率,但是也是存在缺陷的,作为共享缓冲区,他很有可能被其他的进程修改,所以通常会对mmap()的文件加锁。

2. 使用sendfile

系统调用sendfile()在代表输入文件的描述符in_fd和代表输出文件的描述符out_fd之间传送文件内容。描述符out_fd必须指向的是一个套接字,而in_fd指向的文件必须是mmap的。这些局限了sendfile的使用。这里将in_fd指向文件标记为mmap,是为了用户态对文件的修改。当然这里唯一的一次cpu拷贝也可以由dma引擎执行,只不过还需将带有文件位置和长度信息的缓冲区描述符添加到socket缓冲区中,dma引擎会直接将页缓存的数据拷贝到协议引擎中,实现真正的零拷贝。

相关文章

  • Netty零拷贝

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

  • 浅析Linux中的零拷贝技术

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

  • zero-copy

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

  • linux的零拷贝

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

  • Linux 零拷贝技术

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

  • linux零拷贝技术

    在看Kafka相关设计时,注意到一个零拷贝技术。对其做一简要介绍: 为什么需要零拷贝技术? 以常见的read 和w...

  • Linux 零拷贝原理

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

  • 零拷贝实现流程梳理

    何为零拷贝? 我们先从linux正常的数据读写场景入手: 零拷贝如何实现 第一步:消灭第一个CPU复制 使用 mm...

  • linux的零拷贝技术

    在介绍零拷贝技术之前,不得不提的是linux中标准的IO操作存在的问题。linux中的IO操作(主要是read和w...

  • Linux中的零拷贝技术

    参考文章:浅析Linux中的零拷贝技术[https://www.jianshu.com/p/fad3339e344...

网友评论

      本文标题:linux的零拷贝

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