美文网首页
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和零拷贝

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