美文网首页
mmap和sendfile

mmap和sendfile

作者: 九楼记 | 来源:发表于2022-04-27 15:37 被阅读0次

mmap

mmap主要实现方式是将读缓冲区的地址和用户缓冲区的地址进行映射,内核缓冲区和应用缓冲区共享,从而减少了从读缓冲区到用户缓冲区的一次CPU拷贝。

sendfile

相比mmap来说,sendfile同样减少了一次CPU拷贝,而且还减少了2次上下文切换。

sendfile是Linux2.1内核版本后引入的一个系统调用函数,通过使用sendfile数据可以直接在内核空间进行传输,因此避免了用户空间和内核空间的拷贝,同时由于使用sendfile替代了read+write从而节省了一次系统调用,也就是2次上下文切换。

整个过程发生了2次用户态和内核态的上下文切换和3次拷贝,具体流程如下:

  1. 用户进程通过sendfile()方法向操作系统发起调用,上下文从用户态转向内核态
  2. DMA控制器把数据从硬盘中拷贝到读缓冲区
  3. CPU将读缓冲区中数据拷贝到socket缓冲区
  4. DMA控制器把数据从socket缓冲区拷贝到网卡,上下文从内核态切换回用户态,sendfile调用返回

sendfile方法IO数据对用户空间完全不可见,所以只能适用于完全不需要用户空间处理的情况,比如静态文件服务器。

Reference

[1] https://zhuanlan.zhihu.com/p/357820303

相关文章

  • mmap和sendfile

    mmap mmap主要实现方式是将读缓冲区的地址和用户缓冲区的地址进行映射,内核缓冲区和应用缓冲区共享,从而减少了...

  • mmap与sendfile()

    平时在面试中你肯定会经常碰见的问题就是:RocketMQ为什么快?Kafka为什么快?什么是mmap? 这一类的问...

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

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

  • mmap + sendfile很好的文章

    https://www.cnblogs.com/ericli-ericli/articles/12923420.h...

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

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

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

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

  • mmap

    简单的目录 mmap基础概念 mmap内存映射原理 mmap和常规文件操作的区别 mmap优点总结 mmap相关函...

  • 【转】linux库函数mmap()原理

    linux库函数mmap()原理 目录 1.mmap基本概念 2.mmap内存映射原理 3.mmap和常规文件操作...

  • 内存映射

    转自认真分析mmap:是什么 为什么 怎么用 阅读目录mmap基础概念mmap内存映射原理mmap和常规文件操作的...

  • nginx笔记(二)

    1 文件读取 Syntax:sendfile on | off;Default:sendfile off;Cont...

网友评论

      本文标题:mmap和sendfile

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