程序员面试之零拷贝技术解析22
17页1、程序员面试之零拷贝技术解析Hey guys,这里是程序员cxuan,欢迎你收看我最新一期的文章,这篇文章给大家分享一篇非常优质的文章 -零拷贝技术,零拷贝技术也是面试常考的一个点,比较重要,而这篇文章恰好的解决了所有的疑惑,推荐给你。1. 数据的四次拷贝与四次上下文切换很多应用程序在面临客户端请求时,可以等价为进行如下的系统调用:1. File.read(file, buf, len);2. Socket.send(socket, buf, len);例如消息中间件 Kafka 就是这个应用场景,从磁盘中读取一批消息后原封不动地写入网卡(NIC,Network interface controller)进行发送。在没有任何优化技术使用的背景下,操作系统为此会进行 4 次数据拷贝,以及 4 次上下文切换,如下图所示:如果没有优化,读取磁盘数据,再通过网卡传输的场景性能比较差:4 次 copy:1. CPU 负责将数据从磁盘搬运到内核空间的 Page Cache 中;2. CPU 负责将数据从内核空间的 Socket 缓冲区搬运到的网络中;3. CPU 负责将数据从内核空间的 Page C
2、ache 搬运到用户空间的缓冲区;4. CPU 负责将数据从用户空间的缓冲区搬运到内核空间的 Socket 缓冲区中;4 次上下文切换:1. read 系统调用时:用户态切换到内核态;2. read 系统调用完毕:内核态切换回用户态;3. write 系统调用时:用户态切换到内核态;4. write 系统调用完毕:内核态切换回用户态;我们不免发出抱怨:1. CPU 全程负责内存内的数据拷贝还可以接受,因为效率还算可以接受,但是如果要全程负责内存与磁盘、网络的数据拷贝,这将难以接受,因为磁盘、网卡的速度远小于内存,内存又远远小于 CPU;2. 4 次 copy 太多了,4 次上下文切换也太频繁了;2. DMA 参与下的数据四次拷贝DMA 技术很容易理解,本质上,DMA 技术就是我们在主板上放一块独立的芯片。在进行内存和 I/O 设备的数据传输的时候,我们不再通过 CPU 来控制数据传输,而直接通过 DMA 控制器(DMA Controller,简称 DMAC)。这块芯片,我们可以认为它其实就是一个协处理器(Co-Processor)。DMAC 最有价值的地方体现在,当我们要传输的数据特别
3、大、速度特别快,或者传输的数据特别小、速度特别慢的时候。比如说,我们用千兆网卡或者硬盘传输大量数据的时候,如果都用 CPU 来搬运的话,肯定忙不过来,所以可以选择 DMAC。而当数据传输很慢的时候,DMAC 可以等数据到齐了,再发送信号,给到 CPU 去处理,而不是让 CPU 在那里忙等待。注意,这里面的“协”字。DMAC 是在“协助”CPU,完成对应的数据传输工作。在 DMAC 控制数据传输的过程中,我们还是需要 CPU 的进行控制,但是具体数据的拷贝不再由 CPU 来完成。原本,计算机所有组件之间的数据拷贝(流动)必须经过 CPU,如下图所示:现在,DMA 代替了 CPU 负责内存与磁盘以及内存与网卡之间的数据搬运,CPU 作为 DMA 的控制者,如下图所示:但是 DMA 有其局限性,DMA 仅仅能用于设备之间交换数据时进行数据拷贝,但是设备内部的数据拷贝还需要 CPU 进行,例如 CPU 需要负责内核空间数据与用户空间数据之间的拷贝(内存内部的拷贝),如下图所示:上图中的 read buffer 也就是 page cache,socket buffer 也就是 Socket 缓冲
4、区。3. 零拷贝技术3.1 什么是零拷贝技术?零拷贝技术是一个思想,指的是指计算机执行操作时,CPU 不需要先将数据从某处内存复制到另一个特定区域。可见,零拷贝的特点是 CPU 不全程负责内存中的数据写入其他组件,CPU 仅仅起到管理的作用。但注意,零拷贝不是不进行拷贝,而是 CPU 不再全程负责数据拷贝时的搬运工作。如果数据本身不在内存中,那么必须先通过某种方式拷贝到内存中(这个过程 CPU 可以不参与),因为数据只有在内存中,才能被转移,才能被 CPU 直接读取计算。零拷贝技术的具体实现方式有很多,例如: sendfile mmap splice 直接 Direct I/O不同的零拷贝技术适用于不同的应用场景,下面依次进行 sendfile、mmap、Direct I/O 的分析。不过出于总结性的目的,我们在这里先对下面的技术做一个前瞻性的总结。 DMA 技术回顾:DMA 负责内存与其他组件之间的数据拷贝,CPU 仅需负责管理,而无需负责全程的数据拷贝; 使用 page cache 的 zero copy: sendfile:一次代替 read/write 系统调用,通过使用 DM
《程序员面试之零拷贝技术解析22》由会员沧海****19分享,可在线阅读,更多相关《程序员面试之零拷贝技术解析22》请在金锄头文库上搜索。
体育用品买卖合同 简洁版.doc
实习劳动合同(三方协议)
实习协议书实习劳动合同模板
未毕业大学生通用实习生就业协议合同
三方实习协议书(企业、学生、学校).doc
【小学英语】新课标高频核心单词汇总表(可打印)
2023年中.国幼儿园办托育情况研究报告
自然灾害后现金援助的适用方向与可行条件:基于积石山地震后快速调研的考察
2023-2024年全国托育行业发展报告
华为财务管理(6版)(6)
2023年资产证券化发展报告
中.国银行业理财市场年度报告(2023年)
会计师事务所上市公司审计业务监管案例集(2023)
读书笔记读书分享PPT
微信视频号的实时推荐技术架构30
蓝色商务风企业介绍模板
重庆市中考初中语文古诗文汇总(可打印)
科学仪器行业分析&国产化路径
商务风房地产公司简介企业介绍宣传PPT模板
简约商务风公司宣传企业介绍PPT模板
2022-04-25 3页
2022-04-17 1页
2021-11-26 10页
2021-08-29 34页
2021-02-05 37页
2021-01-14 12页
2020-03-20 8页
2020-03-20 6页
2020-03-20 9页