美文网首页
MMAP和零拷贝

MMAP和零拷贝

作者: Robin92 | 来源:发表于2020-03-15 12:27 被阅读0次

MMAP

mmap技术 是一种文件或其他对象映射到内存的技术。

这种技术,让用户程序(用户空间)直接访问设备内存(内核空间),相比于在用户空间和内核空间互相拷贝数据,效率更高。

系统调用命令: mmap()。使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read(),write() 等操作。

零拷贝

零拷贝技术 是另一个系统调用,Linux 中如 sendfile 命令。它减少了内存中用户空间与内核空间数据的拷贝过程,使得 CPU 处理效率更高。

Kafka

Kafka 是一个分布式发布订阅消息系统(详细学习参考),它巧妙用到了这两种技术。

MMAP和零拷贝.png

数据的输入(从网卡到磁盘)

用了 MMAP 打通用户空间和内核空间,并将一部分内存映射到磁盘上的一段空间。

流程:data 从网卡过来,进入内核,再读入到用户空间的服务,服务处理后扔到 MMAP 中,内核将数据再拷贝到磁盘中。

数据的输出(从磁盘到网卡)

若没有零拷贝,用户空间先调内核的 read 去读磁盘中的文件,将磁盘数据存入用户空间(data 从磁盘->内核空间->用户空间);然后再调用内核的 write 方法,将数据发到网卡(data 从用户空间->内核空间->网卡)。由于数据没有在用户态改变数据,所以造成了数据的流转浪费。

内核有一个方法叫 sendfile(out_fd, in_fd, offset, size),用户直接将命令发给内核,内核便可以直接将数据从磁盘经过内核发出到内存。

相关文章

  • MMAP和零拷贝

    MMAP mmap技术 是一种文件或其他对象映射到内存的技术。 这种技术,让用户程序(用户空间)直接访问设备内存(...

  • 零拷贝/mmap

    本文转自 https://www.cnblogs.com/ilovejaney/p/14549909.html[h...

  • zero-copy

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

  • sendfile“零拷贝”、mmap内存映射、DMA

    KAFKA推送消息用到了sendfile,落盘技术用到了mmap,DMA贯穿其中。 先说说零拷贝 零拷贝并不是不需...

  • 理解Java中的零拷贝技术原理:MappedByteBuffer

    零拷贝技术主要包括mmap和sendfile,在RocketMQ、Kafka这类高性能消息队列中间件中有应用,在N...

  • 【网络】关于MMAP、零拷贝

    MMAP介绍 mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。 普通文件被映射到进程地址空间后...

  • linux下的mmap和零拷贝技术

    本文结合下面两个link的博文。https://blog.csdn.net/z_ryan/article/deta...

  • java 零拷贝-- MMAP,sendFile,Channel

    零copy的意义 应用程序在使用请求网络数据或者硬盘数据的时候,这些数据往往需要在用户程序缓存区,内核缓存区中来回...

  • MemoryMap

    在涉及到IO的开发中,我们经常看到零拷贝(zero copy)、内存映射(memroy map, 以下简称mmap...

  • NIO

    传统IO拷贝 4次 切换 3次DMA直接内存拷贝(不使用CPU)mmap优化 内存映射 4次切换 3次拷贝send...

网友评论

      本文标题:MMAP和零拷贝

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