游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

零拷贝是什么

  首先来说,零拷贝里面的拷贝是内存拷贝,所谓的零拷贝是减少系统缓存和用户缓存,以及一些socket的缓存拷贝次数,并不是完全没有拷贝,只是减少了拷贝次数而已,同时还具有减少上下文交换的好处。一不使用零拷贝
  零拷贝技术主要用在服务器端的技术开发中,最常见的服务器就是web服务器了,web服务器的功能说简单也很简单,可以抽象成接收客户的情况,然后从磁盘上读取html等网页文件再发送给客户端而已,不过这里的实现就学问大了,要如何实现高并发,要如何实现快速地读取网页内容并发送,还要考虑各种异常情况,这里面也不细说了。先看看如果不使用零拷贝技术,我们从磁盘读取一个html文件发送给客户端的流程情况:我们需要先申请个缓存空间,大小不确定,我一般设置1KB,这个数字可能比较小了。从磁盘文件中读取1KB的数据,发送给客户端。重复执行步骤二,直到文件读取结束。如果我们仔细研究下整个过程是如下图这样的:1。1上线文切换
  首先,应用程序是无权对磁盘文件,网卡等直接操作的,为安全起见,这些硬件的访问必须由操作系统内核来完成,应用程序通过系统调用使用相关的API来间接操作硬件,而发生系统调用的时候,会发生上下文切换,你想系统调用是一些指令序列,而我们应用程序是另外一种指令序列,调用的时候指令寄存器只能保存一个执行的地址,所以必须发生切换。而这个过程中每次调用和返回都需要进行上下文的切换,一次读文件和发送文件就会发生四次上下文切换,那我们如何排查上下文切换那,在linux下,可以使用vmstat命令:〔root〕vmstat5procsmemoryswapiosystemcpurbswpdfreebuffcachesisobiboincsussyidwast1002244201466601417736009100140960000022454414666014177360001497317120010000
  比较关键的几个信息:r(RunningorRunnable)就绪队列长度,正在运行和等待cpu的进程数,显然这个值大的话,说明机器繁忙。b(Blocked)处于不可中断的进程数,之所以是不可中断的,是因为可能进行硬盘的写,中断可能造成异常,如果这个比较多,多半是磁盘有问题了。cs(contextswitch)是每秒上下文交换的次数,也就是上面说到的,如果上下文切换比较高,还有一种可能是线程或进程太多了,导致来回切换。vmstat只给一个整体信息,那么如何查询具体哪个应用的上下文切换比较高:〔root〕pidstatw5Linux3。10。0957。1。3。el7。x8664(eishost)05132020x8664(2CPU)08:58:12AMUIDPIDcswchsnvcswchsCommand08:58:17AM010。800。00systemd08:58:17AM0961。880。00rcusched08:58:17AM0110。200。00watchdog008:58:17AM0120。200。00watchdog108:58:17AM0140。200。00ksoftirqd1
  cswch:自愿发生上下文切换,比如等待io等。nvcswch:非自愿发生上下文切换,比如时间片已到,被系统强制进行上下文切换。
  这有点类似于我们的大脑,如果我们用心只做一件事情,效率比较高,如果老是进行不同的事情间的切换,会感觉比较累,整体效率一般。1。2内存拷贝
  除了发生上下文交换,上图我们还发现进行的内存拷贝比较多,一共发生了四次。为什么发生内存拷贝,那是因为我们在不同空间下运行,权限不一样,用户态的应用程序显然不能直接操作内核态的内存(内存映射除外),所以要来回倒腾。
  综上所述,如果我们的文件比较大,内存拷贝次数必然比较多,系统调用的次数也比较多,那么显然整个cpu在做浪费的动作很多,零拷贝就是为了减少内存的拷贝产生的技术。二零拷贝2。1mmap方式减少内存拷贝
  刚才我提了下,想减少内存的拷贝,有一个可能的途径是减少内核和用户空间的内存拷贝,如何做那,可以通过mmap使用内存映射,将文件映射到内核缓冲区,这样可以减少一次内存拷贝即减少从内核空间缓存拷贝到用户空间。我们常见的网络抓包技术pfring普通版本就是类似的做法:
  说明:pfring的NODNA技术步骤如下:1)使用DMA技术,其实我们读取文件很多都使用了DMA技术,不需要cpu参与了,将网卡的缓存数据拷贝到Rxbuffer主存中。2)将Rxbuffer拷贝到环形的缓存ring中。3)通过mmap技术将内核态的ring映射到用户态,减少一次内存拷贝。如果是DNA技术就更牛逼了,在上面第二步以后,通过mmap将Rxbuffer直接映射到用户空间,可以直接使用,不过这个是收费的。mmap方式一般可以减少一次内存拷贝,将内存拷贝次数减少到三次。但是一般上下文切换次数并没有减少。
  2。2零拷贝
  为了减少上下文切换的次数,我们可以考虑将read和write合并为一次,且对于我们上面的场景来说,用户缓存其实没必要存在,在linux中我们可以使用sendfile的系统调用,如下图:
  我们进行sendfile系统调用的时候需要进行如下步骤:1)磁盘数据通过DMA技术,从磁盘拷贝到内核内存pagecache中。2)将pagecache中的数据拷贝到socket缓存。3)将socket缓存的数据拷贝到网卡的协议栈中。整个过程进行了两次上下文切换,三次内存拷贝过程。
  在linux2。4版本开始,os提供了带有scattergather的DMA来从内核控件缓冲区将数据读取到协议引擎中。这样传输的数据可以分散存储在不同位置上,不用再连续存储中存放。那么就去掉了从文件中拷贝到socket缓存的步骤,只是将缓存区的描述符加到socket缓存中,DMA收集会根据缓冲区的描述符信息,将内核控件中的数据直接拷贝到协议引擎中。如下图:
  过程:发出sendfile系统调用的时候,导致用户空间和内核控件发生一次上下文切换,通过DMA将磁盘文件拷贝到内核缓存区中。将相应的描述符信息拷贝到相应的socket缓冲区中。描述符包含kernelbuffer的内存地址,kernelbuffer的偏移量。sendfile系统调用返回,产生第二次上下文切换,DMAgathercopy根据socket缓冲区描述符提供的位置和偏移量信息直接将内核空间缓存的数据拷贝到协议引擎中。
  这样整个过程减少到只有两次上下文交换和两次的内存拷贝过程。整个过程中,内核数据只存放一次,不需要cpu参与拷贝,所以叫零拷贝。三sendfileincludesyssendfile。hssizetsendfile(intoutfd,intinfd,offtoffset,sizetcount);
  在linux2。6。33版本之前sendfile指支持文件到套接字之间传输数据,即infd相当于一个支持mmap的文件,outfd必须是一个socket。但从linux2。6。33版本开始,outfd可以是任意类型文件描述符。所以从linux2。6。33版本开始sendfile可以支持文件到文件和文件到套接字之间的数据传输。
  在kafka中,通过FileChannel的transferTo和transferFrom来实现零拷贝,底层还是sendfile技术。
  FileChannel的map方法会返回一个MappedByteBuffer,和我们前几天说的mmap映射内存非常像,底层应该是一样的实现,可以将文件映射到内存,内核和用户空间共享相同的缓存中,如果修改的话,os负责将缓存数据刷到磁盘中,性能很高,不过我没用过,有机会用下。四零拷贝的缺点
  零拷贝的时候,我们看到数据没有经过用户空间,所以我们没办法进行诸如压缩等操作,还有个缺点就是如果很大,上G的文件进行零拷贝的时候,会占满内核的缓存,也是不合适的。

为什么印度大米煮熟后是散状的,而我国的大米是胶团状的?咱们平时吃的米饭,米粒几乎都是黏在一起的,软糯的口感非常受到欢迎,而同样以米饭作为主食的印度,他们的米饭却大多粒粒分开,比较松散,看着就跟国内的不同。其实也非常正常,因为……句子很短,道理很深(建议收藏)句子很短,道理很深。01hr人生有三个要想到阴沟能翻船鸡毛能上天骨肉能相残感悟:人生在世不满百,何必常怀千岁忧。不要太苛求,不要太在意,任它风云变……不在国内卷反去海外重拳出击,匹克的逆向操作到底有多牛?3月初,好丽友被喷上了热搜不少小伙伴才发现原来好丽友,竟然是根正苗红的韩国品牌精心伪装了20多年的国货外皮只用了一天就被网友们扒了下来只能怪他骨子……蚌埠有哪些美食?蚌埠有哪些美食?小恒知道的有:金涂山烧全鸡:蚌埠当地的特色美食金涂山烧全鸡,这道菜之所以特别,除了好吃以外它还是发明专利产品,风味独特。金涂山牌烧全鸡是在1999年经国家……山马扎菜怎么做最好吃?山马扎菜怎么做最好吃?天气渐渐转暖了,对于哪些爱吃野菜的吃货们,荠菜苦菜都长老了,又在琢磨吃什么呢,梅花今天给大家介绍一种我们家乡特有的好吃又有营养的野菜山马扎菜。……如何看出烧腊档的烧鸭是不是用冰冻鸭做的?谢邀。我是《粤港烧腊论坛》今天分享如何看出烧腊档的烧鸭是不是用冰冻鸭做的?首先,你知道冰冻鸭鹅和新鲜鸭鹅差别在哪,新鲜鸭鹅肉质纹理清晰,吃起来很有肉质嫩、口感鲜,急冻过的……红辣椒阴干好还是晒干好?辣椒在我当地广泛种植,村民们自家的菜园里,既种植菜辣椒,也种植比较辣的尖椒、朝天椒和螺丝椒。种植辣椒在春季先育苗后移栽,在夏季可以采摘新鲜的青辣椒食用;在秋季辣椒变红后,采摘下……刀鱼和带鱼有何区别?刀鱼是淡水鱼类,而带鱼是海水鱼类。二者的外形稍有相似,但不论是味道还是价格,它们都有着天差地别的区别。下面我就来详细说一下吧!首先来看一下外形。这是我们所熟知的带鱼……茅台酒40年调价历程(19812021)回顾茅台酒最近40年调价历程(19812021)一、198019891981年,出厂价8。4元,零售价为7元瓶。1986年,出厂价9。54元,零售价18元瓶。……你吃过最好吃的饺子是什么馅的你吃过最好吃的饺子是什么馅的饺子不仅是一种美食,更是中华美食的代表。虽然现在老百姓的生活水平提高了,想吃啥有啥,但是逢年过节,大小节日仍然是饺子的主场。素衣台案前,巧手赛天工。……时代更迭,新老交替,央视春晚主持首次启用两名90后今年央视春节联欢晚会主持人阵容发布,依旧是新老面孔齐聚,全国观众熟悉的撒贝宁、尼格买提、任鲁豫均曾多次主持春晚。女主持的变动较大,除了龙洋、马凡舒均分别担任2021、2022年……大家吃黄瓜削皮吗?削皮〔呲牙〕去除农药残留,更脆香〔赞〕过去不削,现在削。我倒不是嫌黄瓜皮太硬,怕就怕农药化肥超标。尽管我知道黄瓜是长在架上的,但自从我做了一次血液的检测,知道……
减掉内脏脂肪和大肚腩其实不难,只要生活习惯做点小改变只要生活中能应用这些建议,改变一些饮食习惯,不但可以减掉全身脂肪,更可以让肚子变得更小,让身体更健康!1。提高维C摄入维生素C有助于保持氧化应激,可防止许多健康问题……已有家庭还不自律?这8位已婚明星,真是一个比一个没分寸前阵子,王岳伦和美女同回酒店的照片被拍。转天,王岳伦就单方官宣离婚,结束了和李湘12年的婚姻。从2018年开始,王岳伦就多次被爆与美女相携,虽然李湘每次都会出来力挺老公,……75岁之后,对这些事情不讨厌,晚年会幸福前言:人过75岁,不管是从身体方面还是在心理方面都会发生很大的变化,不是你讨厌这个世界就是这个世界讨厌你。在我们的生活当中,其实每个人都有自己的生活方式,都知道该如何去处……麒麟9000手机价格松动,256GBRYYB主摄50倍变焦,春节过后,市面上即将涌现一大波新款旗舰手机,这其中不乏某些性价比极高的产品,比如大家期待的红米K50系列、OPPOFindX5系列在网络都有了全新的消息。而对于喜欢华为的朋友,……科普平阴春节期间,警惕这些高发病春节是阖家团圆的好日子但是同时也意味着比平时更频繁的聚会吃喝人来人往、推杯换盏之间总有一些朋友因为过于沉溺在过节的喜悦中而选择性忽视了隐藏的……太阳的七宗罪在我们的生活中,有这么一些人,他们的一大偏好就是总爱挑别人的毛病。有的人是天生喜好、生性如此,有的人是以此谋利,作为职业。耳闻目染多了,久而久之,我也被带入了歧途,产生了一股也……喝酒时花生米为什么最下菜?谢谢邀请,内容原创。花生米营养丰富,补血益气,补钙强身,色切红亮,颗粒饱满,粒粒在目,国民喝酒时,首选花生米作为下酒菜。况花生米身份显赫,可登大雅之堂,席桌上可作头道下酒菜,也……韩媒不满方昊冲撞门将本应道歉却笑呵呵的走开了30是回应北京时间7月20日18:00,2022年东亚杯首轮比赛展开较量,中国队迎战韩国队。上半场朱辰杰自摆乌龙,下半场权昶勋和曹圭成先后进球,最终国足03韩国队。值得一提的是,在……羊肉两大食疗功效吃羊肉的6大注意事项羊是纯食草动物,所以较牛肉的肉质要细嫩,容易消化,高蛋白、低脂肪、含磷脂多,较猪肉和牛肉的脂肪含量都要少,胆固醇含量少,是冬季防寒温补的美味之一,可收到进补和防寒的双重效果。……亚洲首次发现侏罗纪早期有甲类恐龙记者3月中旬从云南大学了解到,该校生命科学学院的脊椎动物研究团队近期在云南玉溪距今1。9亿年的早侏罗世地层中,发现了一件基干有甲类恐龙的化石骨架。依据其头骨、脊椎和肢骨等相关特……羊肉怎么做才最营养好吃呢?大家好我是崔小厨,一名资深吃货也喜欢自己动手制作美食。很高兴邀请我回答这个{羊肉怎么做才最营养好吃}这个问题。平时我也非常喜欢吃羊肉在家也经常用羊肉制作美食,羊肉怎么做才……还记得怀念焦裕禄今天,兰考的天空很蓝没有一片云,没有一丝风只有太阳在眼前辉耀还记得,阚家泉的风景,他的文采飞扬还记得,洛阳矿山的卷扬机,他的青春闪亮……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网