前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >3、mmap(内存映射、共享)

3、mmap(内存映射、共享)

原创
作者头像
Get
发布于 2024-03-10 11:46:23
发布于 2024-03-10 11:46:23
2860
举报
文章被收录于专栏:零拷贝技术零拷贝技术
clipboard.png
clipboard.png
代码语言:java
AI代码解释
复制
mmap:内存映射(内存、用户缓冲区共享一块映射数据)
      直接将磁盘文件数基于DMA引擎拷贝据映射到内核缓冲区,同时用户缓冲区是跟内核缓冲区共享一块映射数据,
      建立映射后,不需要从内核缓冲区拷贝到用户缓冲区。故,可减少一次拷贝。
mmap:产生4次用户上下文切换,3次拷贝。
传统IOread() 系统调用的过程中会把内核缓冲区的数据拷贝到用户的缓冲区里,为了减少这一步开销,我们可以用 mmap() 替换 read() 系统调用函数。
mmap() 系统调用函数会直接把内核缓冲区里的数据映射到用户空间,这样,操作系统内核与用户空间共享缓冲区,就不需要再进行任何的数据拷贝操作。
buf = mmap(file, len);
write(sockfd, buf, len);
注释: mmap file ,write socket 隐含了read file and copy file to socket buffer
1、第一次拷贝:应用进程调用了 mmap() 后,DMA 会把磁盘的数据拷贝到内核的缓冲区里。接着,应用进程跟操作系统内核「共享」这个缓冲区;
2、第二次拷贝:应用进程再调用 write(),操作系统直接将内核缓冲区的数据拷贝到 socket 缓冲区中,这一切都发生在内核态,由 CPU 来搬运数据;
3、第三次拷贝:最后,把内核的 socket 缓冲区里的数据,拷贝到网卡的缓冲区里,这个过程是由 DMA 搬运的。
我们可以得知,通过使用 mmap() 来代替 read(), 可以减少一次数据拷贝的过程。
clipboard.png
clipboard.png

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一文搞懂什么是阻塞IO、信号驱动IO、Reactor模型、零拷贝
公众号《鲁大猿》 ,寻精品资料,帮你构建Java全栈知识体系 http://www.jiagoujishu.cn
鲁大猿
2024/01/05
4550
一文搞懂什么是阻塞IO、信号驱动IO、Reactor模型、零拷贝
原来 8 张图,就可以搞懂「零拷贝」了
磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。
帅地
2020/09/28
1.3K0
原来 8 张图,就可以搞懂「零拷贝」了
DMA与零拷贝
注意事项:除了 Direct I/O,与磁盘相关的文件读写操作都有使用到 page cache 技术。
运维部落
2021/09/22
2.5K0
DMA与零拷贝
阿里二面:什么是mmap?
平时在面试中你肯定会经常碰见的问题就是:RocketMQ为什么快?Kafka为什么快?什么是mmap?
艾小仙
2021/03/23
8670
阿里二面:什么是mmap?
看一遍就理解:零拷贝详解
零拷贝是老生常谈的问题啦,大厂非常喜欢问。比如Kafka为什么快,RocketMQ为什么快等,都涉及到零拷贝知识点。最近技术讨论群几个伙伴分享了阿里、虾皮的面试真题,也都涉及到零拷贝。因此本文将跟大家一起来学习零拷贝原理。
捡田螺的小男孩
2021/12/21
6.6K1
看一遍就理解:零拷贝详解
面试题:如何理解 Linux 的零拷贝技术?
本文讲解 Linux 的零拷贝技术,云计算是一门很庞大的技术学科,融合了很多技术,Linux 算是比较基础的技术,所以,学好 Linux 对于云计算的学习会有比较大的帮助。
老钱
2019/10/25
1.9K2
从Linux零拷贝深入了解Linux I/O
存储器是计算机的核心部件之一,在完全理想的状态下,存储器应该要同时具备以下三种特性:
Kevinello
2022/11/28
2.6K0
从Linux零拷贝深入了解Linux I/O
彻底搞懂高性能I/O之道
本文介绍操作系统I/O工作原理,Java I/O设计,基本使用,开源项目中实现高性能I/O常见方法和实现,彻底搞懂高性能I/O之道
用户1260737
2019/11/15
1.2K0
浅谈 Linux下的零拷贝机制
什么是零拷贝 维基上是这么描述零拷贝的:零拷贝描述的是CPU不执行拷贝数据从一个存储区域到另一个存储区域的任务,这通常用于通过网络传输一个文件时以减少CPU周期和内存带宽。 零拷贝给我们带来的好处: 减少甚至完全避免不必要的CPU拷贝,从而让CPU解脱出来去执行其他的任务 减少内存带宽的占用 通常零拷贝技术还能够减少用户空间和操作系统内核空间之间的上下文切换 Linux系统的“用户空间”和“内核空间” 从Linux系统上看,除了引导系统的BIN区,整个内存空间主要被分成两个部分:内核空间(Ke
tomas家的小拨浪鼓
2018/06/27
2.5K0
轻松突破文件IO瓶颈:内存映射mmap技术
mmap 即 memory map,也就是内存映射。mmap 是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用 read、write 等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。
嵌入式Linux内核
2023/08/08
6.1K0
轻松突破文件IO瓶颈:内存映射mmap技术
【Linux内核】零拷贝技术
零拷贝(Zero-copy) 技术指在计算机执行操作时,CPU不需要先将数据从一个缓冲区复制到另一个缓冲区当中,也就是CPU不参与内存拷贝的过程,从而可以减少上下文切换以及CPU的拷贝时间。
用户11029129
2025/03/21
3160
【Linux内核】零拷贝技术
零拷贝原理详解_多路复用的基本原理是什么
引言 传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。这样做最大的好处是可以减少磁盘 I/O 的操作,因为如果所请求的数据已经存放在操作系统的高速缓冲存储器中,那么就不需要再进行实际的物理磁盘 I/O 操作。但是数据传输过程中的数据拷贝操作却导致了极大的 CPU 开销,限制了操作系统有效进行数据传输操作的能力。 零拷贝( zero-copy )技术可以有效地改善数据传输的性能,在内核驱动程序(比如网络堆栈或者磁盘存储驱动程序)处理 I/O 数据的时候,零拷贝技术可以在某种程度上减少甚至完全避免不必要 CPU 数据拷贝操作。
全栈程序员站长
2022/08/02
7250
零拷贝原理详解_多路复用的基本原理是什么
零拷贝(zero copy)技术你真的懂吗?什么时候需要用到内存映射?
Linux系统是虚拟内存系统,虚拟内存并不是真正的物理内存,而是虚拟的连续内存地址空间。虚拟内存又分为内核空间和用户空间,内核空间是内核程序运行的地方,用户空间是用户进程代码运行的地方,只有内核才能直接访问物理内存并为用户空间映射物理内存(MMU)。内核会为每个进程分配独立的连续的虚拟内存空间,并且在需要的时候映射物理内存,为了完成内存映射,内核为每个进程都维护了一张页表,记录虚拟地址与物理地址的映射关系,这个页表就是存在于MMU中;用户进程访问内存的时候,通过页表把虚拟内存地址转换为物理内存地址进而访问数据;其实对于用户进程而言,虚拟内存就是内存一般的存在(当作内存看待就好)。这样的设计可以把用户程序和系统程序分开,互不影响;内核可以对所有的用户程序进行管理,比如限制内存滥用等
IT大咖说
2020/04/21
1.7K0
彻底理解零拷贝的原理以及Java代码的实现
我们以用户通过网络读取一个本地磁盘上文件为例,在说零拷贝之前,我们先要说说一个普通的IO操作是怎样做的
诺浅
2020/08/19
1.4K0
DMA 和 零拷贝技术 到 网络大文件传输优化
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
Lorin 洛林
2024/01/27
9752
DMA 和 零拷贝技术 到 网络大文件传输优化
零拷贝技术:减少数据复制和上下文切换,提高网络传输效率(下)
在前一章节中,我们了解了DMA技术在文件传输中的重要性,并简要介绍了零拷贝技术。为了提高文件传输的性能,我们需要减少用户态与内核态之间的上下文切换次数以及内存拷贝次数。本章将深入探讨零拷贝技术的优化方法,让我们一起走进零拷贝的优化之路!
努力的小雨
2023/11/25
7760
面试系列之-rocketmq零拷贝原理
传统的WEB服务器在收到请求后,从磁盘读取数据,然后将数据写到网卡,通过网卡发送给客户端,这一读一写的过程中就涉及数据的拷贝:
用户4283147
2022/12/29
1.5K0
面试系列之-rocketmq零拷贝原理
掌握这5个技巧,彻底掌握Netty中的零拷贝!
Linux 按照特权等级,把进程的运行空间分为内核空间和用户空间,分别对应着下图中, CPU 特权等级分为4个,Linux 使用 Ring 0 和 Ring 3。
Java程序猿
2021/03/15
1.2K0
详解Java中的五种IO模型
我们电脑上跑着的应用程序,其实是需要经过操作系统,才能做一些特殊操作,如磁盘文件读写、内存的读写等等。因为这些都是比较危险的操作,不可以由应用程序乱来,只能交给底层操作系统来。
Java微观世界
2025/01/21
1070
详解Java中的五种IO模型
Linux零拷贝和Netty零拷贝
DMA 的全称叫直接内存存取(Direct Memory Access),是一种允许外围设备(硬件子系统)直接访问系统主内存的机制。
leobhao
2022/06/28
3.5K0
Linux零拷贝和Netty零拷贝
相关推荐
一文搞懂什么是阻塞IO、信号驱动IO、Reactor模型、零拷贝
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档