范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

零拷贝是什么

  首先来说,零拷贝里面的拷贝是内存拷贝,所谓的零拷贝是减少系统缓存和用户缓存,以及一些socket的缓存拷贝次数,并不是完全没有拷贝,只是减少了拷贝次数而已,同时还具有减少上下文交换的好处。 一 不使用零拷贝
  零拷贝技术主要用在服务器端的技术开发中,最常见的服务器就是web服务器了,web服务器的功能说简单也很简单,可以抽象成接收客户的情况,然后从磁盘上读取html等网页文件再发送给客户端而已,不过这里的实现就学问大了,要如何实现高并发,要如何实现快速地读取网页内容并发送,还要考虑各种异常情况,这里面也不细说了。先看看如果不使用零拷贝技术,我们从磁盘读取一个html文件发送给客户端的流程情况: 我们需要先申请个缓存空间,大小不确定,我一般设置1KB,这个数字可能比较小了。 从磁盘文件中读取1KB的数据,发送给客户端。 重复执行步骤二,直到文件读取结束。 如果我们仔细研究下整个过程是如下图这样的: 1.1 上线文切换
  首先,应用程序是无权对磁盘文件,网卡等直接操作的,为安全起见,这些硬件的访问必须由操作系统内核来完成,应用程序通过系统调用使用相关的API来间接操作硬件,而发生系统调用的时候,会发生上下文切换,你想系统调用是一些指令序列,而我们应用程序是另外一种指令序列,调用的时候指令寄存器只能保存一个执行的地址,所以必须发生切换。 而这个过程中每次调用和返回都需要进行上下文的切换,一次读文件和发送文件就会发生四次上下文切换,那我们如何排查上下文切换那,在linux下,可以使用vmstat命令: [root@ ~]# vmstat 5 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st  1  0      0 224420 146660 1417736    0    0     9    10    0    1  4  0 96  0  0  0  0      0 224544 146660 1417736    0    0     0    14  973 1712  0  0 100  0  0
  比较关键的几个信息: r(Running or Runnable)就绪队列长度,正在运行和等待cpu的进程数,显然这个值大的话,说明机器繁忙。 b (Blocked) 处于不可中断的进程数,之所以是不可中断的,是因为可能进行硬盘的写,中断可能造成异常,如果这个比较多,多半是磁盘有问题了。 -cs (context switch)是每秒上下文交换的次数,也就是上面说到的,如果上下文切换比较高,还有一种可能是线程或进程太多了,导致来回切换。 vmstat 只给一个整体信息,那么如何查询具体哪个应用的上下文切换比较高: [root@~]# pidstat -w 5 Linux 3.10.0-957.1.3.el7.x86_64 (eishost)  05/13/2020  _x86_64_ (2 CPU)  08:58:12 AM   UID       PID   cswch/s nvcswch/s  Command 08:58:17 AM     0         1      0.80      0.00  systemd 08:58:17 AM     0         9     61.88      0.00  rcu_sched 08:58:17 AM     0        11      0.20      0.00  watchdog/0 08:58:17 AM     0        12      0.20      0.00  watchdog/1 08:58:17 AM     0        14      0.20      0.00  ksoftirqd/1
  cswch: 自愿发生上下文切换,比如等待io等。 nvcswch: 非自愿发生上下文切换,比如时间片已到,被系统强制进行上下文切换。
  这有点类似于我们的大脑,如果我们用心只做一件事情,效率比较高,如果老是进行不同的事情间的切换,会感觉比较累,整体效率一般。 1.2 内存拷贝
  除了发生上下文交换,上图我们还发现进行的内存拷贝比较多,一共发生了四次。为什么发生内存拷贝,那是因为我们在不同空间下运行,权限不一样,用户态的应用程序显然不能直接操作内核态的内存(内存映射除外),所以要来回倒腾。
  综上所述,如果我们的文件比较大,内存拷贝次数必然比较多,系统调用的次数也比较多,那么显然整个cpu在做浪费的动作很多,零拷贝就是为了减少内存的拷贝产生的技术。 二 零拷贝2.1 mmap方式减少内存拷贝
  刚才我提了下,想减少内存的拷贝,有一个可能的途径是减少内核和用户空间的内存拷贝,如何做那,可以通过mmap 使用内存映射,将文件映射到内核缓冲区,这样可以减少一次内存拷贝即减少从内核空间缓存拷贝到用户空间。我们常见的网络抓包技术pfring 普通版本就是类似的做法:
  说明:pfring的NO_DNA技术步骤如下: 1) 使用DMA技术,其实我们读取文件很多都使用了DMA技术,不需要cpu参与了,将网卡的缓存数据拷贝到Rx buffer 主存中。 2) 将Rx buffer 拷贝到环形的缓存ring中。 3) 通过mmap技术将内核态的ring映射到用户态,减少一次内存拷贝。 如果是DNA技术就更牛逼了,在上面第二步以后,通过mmap将Rx buffer 直接映射到用户空间,可以直接使用,不过这个是收费的。 mmap方式一般可以减少一次内存拷贝,将内存拷贝次数减少到三次。但是一般上下文切换次数并没有减少。
  2.2 零拷贝
  为了减少上下文切换的次数,我们可以考虑将read和write合并为一次,且对于我们上面的场景来说,用户缓存其实没必要存在,在linux中我们可以使用sendfile的系统调用,如下图:
  我们进行sendfile系统调用的时候需要进行如下步骤: 1)磁盘数据通过DMA技术,从磁盘拷贝到内核内存pagecache中。 2)将pagecache中的数据拷贝到socket缓存。 3)将socket缓存的数据拷贝到网卡的协议栈中。 整个过程进行了两次上下文切换,三次内存拷贝过程。
  在linux2.4版本开始,os提供了带有scatter/gather的DMA来从内核控件缓冲区将数据读取到协议引擎中。这样传输的数据可以分散存储在不同位置上,不用再连续存储中存放。那么就去掉了从文件中拷贝到socket缓存的步骤,只是将缓存区的描述符加到socket缓存中,DMA收集会根据缓冲区的描述符信息,将内核控件中的数据直接拷贝到协议引擎中。 如下图:
  过程: 发出sendfile系统调用的时候,导致用户空间和内核控件发生一次上下文切换,通过DMA 将磁盘文件拷贝到内核缓存区中。 将相应的描述符信息拷贝到相应的socket缓冲区中。 描述符包含kernel buffer的内存地址,kernel buffer的偏移量。 sendfile系统调用返回,产生第二次上下文切换,DMA gather copy根据socket缓冲区描述符提供的位置和偏移量信息直接将内核空间缓存的数据拷贝到协议引擎中。
  这样整个过程减少到只有两次上下文交换和两次的内存拷贝过程。 整个过程中,内核数据只存放一次,不需要cpu参与拷贝,所以叫零拷贝。 三 sendfile#include  ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
  在linux2.6.33版本之前 sendfile指支持文件到套接字之间传输数据,即in_fd相当于一个支持mmap的文件,out_fd必须是一个socket。但从linux2.6.33版本开始,out_fd可以是任意类型文件描述符。所以从linux2.6.33版本开始sendfile可以支持"文件到文件"和"文件到套接字"之间的数据传输。
  在kafka中,通过FileChannel的transferTo和transferFrom来实现零拷贝,底层还是sendfile技术。
  FileChannel的map方法会返回一个MappedByteBuffer,和我们前几天说的mmap映射内存非常像,底层应该是一样的实现,可以将文件映射到内存,内核和用户空间共享相同的缓存中,如果修改的话,os负责将缓存数据刷到磁盘中,性能很高,不过我没用过,有机会用下。 四 零拷贝的缺点
  零拷贝的时候,我们看到数据没有经过用户空间,所以我们没办法进行诸如压缩等操作,还有个缺点就是如果很大,上G的文件进行零拷贝的时候,会占满内核的缓存,也是不合适的。

为何买长安CS75PLUS的人都后悔了?看看北京X7在现在这个社会,有一辆自己的代步工具真的是太重要了,而现如今SUV的市场越来越火爆,而且也不得不说,SUV确实是不错的选择,性能好,实用性强,最重要的是和轿车比起来,空间也大上了许这样超级迷你的触控小电脑用过吗?大学生必备神器哦看评论送惊喜尺寸6。9寸,比手机略大一点。系统win1064位专业版系统,和台式机笔记本系统完全通用。接口双USB大口,一个HDMI高清接口,一个TF家族插槽。功能台式机笔记本电脑所有功能都可抖音新玩法!隔空操控让华为Mate30Pro娱乐神器9月26日,华为在上海举行了重构想象2019华为年度旗舰新品发布盛典,发布了华为Mate30系列华为智慧屏等7款新品。搭载麒麟990系列芯片,徕卡电影四摄,超曲面环幕屏的华为Mat入手假期出行的最后一个装备,Vlog神器华为nova9Pro在如今的手机市场中,华为手机已经是家喻户晓了,特别是刚刚开售的华为nova9系列,更是让人惊喜连连随着短视频和Vlog的崛起,影像社交已成为年轻人群忠爱的全新社交形式。基于年轻用户十一旅拍神器!华为nova9Pro手机展现影像硬实力华为nova9系列手机自上市起就受到了无数年轻人的追捧,作为一个紧跟时代的年轻人,小编当然也要入手一部了!这不,在首销之后小编马上就入手了一台华为nova9Pro。在十一假期的时候团队专业标准严苛,来伊份严把产品品质关零食,不仅关乎国人休闲娱乐,更关乎健康与安全。在零食消费升级的大趋势之下,如今,消费者对于休闲零食产品除了要满足基本的安全卫生标准外,对品质也提出了更高的要求。作为备受消费者肯定在不停剁手回购的心水面霜究竟有多好用还记得最初和菲洛嘉结缘是17年去法国玩,老佛爷对面的药妆店里中国导购强推菲洛嘉,那时候我在国内对这个牌子了解得并不多,不过她说巴黎时尚界都用这个牌子,什么雅漾之类的在她们眼里就是大越级产品定位于中型SUV零跑c11在这个颜值为王的时代,面子工程并不是个贬义词。汽车的前期开发工作里,外观与内饰造型设计是至关重要的一环。而从身边同事以及朋友眼中,对于零跑C11的设计风格大部分都给予了好评。前脸造刚需不代表无聊20万内选C11有惊喜今天聊一个过去几年来中国车市里为数不多的黑马品牌,它叫零跑。什么样的品牌才算黑马呢?那些一直被看好,或者被认为理应做得很好的,自然称不上黑马。黑马指的是那些原本没多少人关注,或者很红外摄像机的工作原理凯茉锐不仅在金库银行档案馆城市治安监控等重要场合都需要使用红外摄像机监控系统,而且在居民小区等一般电视监控工程中也得到了广泛使用,不同的产品对性能的要求也不同,因此需要充分了解红外摄像机省钱好帮手,这款电动车品质感老高了对于追求经济的年轻家庭而言,什么都会讲究一个省字,买东西要省,用什么东西也要省,如果一辆车在用车成本上够省,那一定受他们欢迎。目录一眼定终身省心,贴心的e2关于爱车的一言一行一眼定
华为P40Pro5G重新上架官方商城?售价5988元,还值得买吗?4月7日消息,华为商城重新上架了华为P40Pro8GB128GB版本,提供亮黑冰霜银零度白深海蓝晨曦金五款配色,目前官方售价5988元,与当初发布相同。目前的华为手机,能有5G功能曝旗舰功能加特小米12Ultra,小米11低价史无前例,堪称白菜机曝光配置信息基本相当齐全小米12Ultra超大杯版同样会配备LPDDR5运存和UFS3。1闪存,曝光配置信息基本相当齐全小米12Ultra超大杯版加上了最大512GB的存储,曝光配继华为之后,又一国产手机叫板苹果,结果网友的点评意外火了自从苹果手机进入中国市场,给中国的手机市场带来了不小的冲击。在北上广等一线城市,有一部苹果手机苹果电脑似乎成了标配,而在其他城市,苹果手机更成为了大家羡慕的电子产品。苹果手机在中国12512G卖7488,鸿蒙系统200倍变焦,华为P50Pro值这个价吗?现如今国内智能手机市场中,几乎所有的国产手机品牌都在进军高端手机市场,而这些机型除了硬件配置比较高以外价格方面也比较凸出。而要说价格最贵的国产手机品牌那还得是华为手机。华为因受到禁华为WatchGT3Pro曝光拥有钛合金版搭载鸿蒙系统近日消息,华为新款智能手表WatchGT3Pro的包装盒被数码博主曝光,根据包装盒来看,WatchGT3Pro整体白色的设计看上去更加干净,白色的表圈搭配金色的中框以及金色的按键看华为的强大源于毛泽东思想指导现在流行这么一句话在中国有两个公司,一个是华为,另一个就是其他。可想而知,华为在中国企业中的地位。大家都知道,华为是一个真正的高科技公司,是中国最伟大的公司之一,是一个非常有活力,vivoXNote开始预售,7英寸高端旗舰,大尺寸机型卷土重来?现在智能手机的屏幕尺寸基本都在六英寸到七英寸之间,但基本上没有达到七英寸的机型。很多手机厂商甚至都在努力把手机尺寸做得小一点,也推出了多款小屏旗舰。毕竟小屏手机更有利于单手操作,而安卓手机的福利免费使用微信双开微信已经在不知不觉影响到我们日常生活中的每一个地方,工作交流,亲情交流,朋友聚合,相信大家为了能够把工作和日常生活区分开,都注册了两个微信账号来进行区分。但是,微信又只能在一部手机苹果手机14pro系列两点值得购买距离苹果14系类还有5个多月了,很多人也是摩拳擦掌了,希望很快得到他们心心相念的14系类手机,小编今天想说的就是苹果的高端手机的系类,苹果手机14pro系列有两点值得我们购买。1。miui13稳定版第三批更新的手机出炉,2020年手机为主?miui13稳定版第三批可以更新的手机名单出炉,其实覆盖很广了?小米10青春版RedmiNote9ProRedmiNote94GRedmiK30RedmiK305GRedmiK30256GB1亿像素,从1999元降至1299元,这款落伍手机值得买随着手机市场的急剧变革,市面上的手机产品也出现了越来越多的分级,纵览整个手机市场不难发现,虽然价格高的旗舰手机拥有更好的硬件配置,但是它的销量却远远没有热门的千元机高。RedmiN