傻大方


首页 > 人文 >

coding|原来 8 张图,就可以搞懂“零拷贝”了!( 四 )



按关键词阅读:


如果你追溯 Kafka 文件传输的代码 , 你会发现 , 最终它调用了 Java NIO 库里的transferTo方法:
如果 Linux 系统支持sendfile()系统调用 , 那么transferTo()实际上最后就会使用到sendfile()系统调用函数 。
曾经有大佬专门写过程序测试过 , 在同样的硬件条件下 , 传统文件传输和零拷拷贝文件传输的性能差异 , 你可以看到下面这张测试数据图 , 使用了零拷贝能够缩短65%的时间 , 大幅度提升了机器传输数据的吞吐量 。
coding|原来 8 张图,就可以搞懂“零拷贝”了!
本文图片

数据来源于:https://developer.ibm.com/articles/j-zerocopy/
另外 , Nginx 也支持零拷贝技术 , 一般默认是开启零拷贝技术 , 这样有利于提高文件传输的效率 , 是否开启零拷贝技术的配置如下:
sendfile 配置的具体意思:
设置为 on 表示 , 使用零拷贝技术来传输文件:sendfile, 这样只需要 2 次上下文切换 , 和 2 次数据拷贝 。
设置为 off 表示 , 使用传统的文件传输技术:read + write , 这时就需要 4 次上下文切换 , 和 4 次数据拷贝 。
当然 , 要使用 sendfile , Linux 内核版本必须要 2.1 以上的版本 。
PageCache 有什么作用?
回顾前面说道文件传输过程 , 其中第一步都是先需要先把磁盘文件数据拷贝「内核缓冲区」里 , 这个「内核缓冲区」实际上是磁盘高速缓存(PageCache) 。
由于零拷贝使用了 PageCache 技术 , 可以使得零拷贝进一步提升了性能 , 我们接下来看看 PageCache 是如何做到这一点的 。
读写磁盘相比读写内存的速度慢太多了 , 所以我们应该想办法把「读写磁盘」替换成「读写内存」 。 于是 , 我们会通过 DMA 把磁盘里的数据搬运到内存里 , 这样就可以用读内存替换读磁盘 。
但是 , 内存空间远比磁盘要小 , 内存注定只能拷贝磁盘里的一小部分数据 。
那问题来了 , 选择哪些磁盘数据拷贝到内存呢?
我们都知道程序运行的时候 , 具有「局部性」 , 所以通常 , 刚被访问的数据在短时间内再次被访问的概率很高 , 于是我们可以用PageCache 来缓存最近被访问的数据 , 当空间不足时淘汰最久未被访问的缓存 。
所以 , 读磁盘数据的时候 , 优先在 PageCache 找 , 如果数据存在则可以直接返回;如果没有 , 则从磁盘中读取 , 然后缓存 PageCache 中 。
还有一点 , 读取磁盘数据的时候 , 需要找到数据所在的位置 , 但是对于机械磁盘来说 , 就是通过磁头旋转到数据所在的扇区 , 再开始「顺序」读取数据 , 但是旋转磁头这个物理动作是非常耗时的 , 为了降低它的影响 , PageCache 使用了「预读功能」 。
比如 , 假设 read 方法每次只会读32 KB的字节 , 虽然 read 刚开始只会读 0 ~ 32 KB 的字节 , 但内核会把其后面的 32~64 KB 也读取到 PageCache , 这样后面读取 32~64 KB 的成本就很低 , 如果在 32~64 KB 淘汰出 PageCache 前 , 进程读取到它了 , 收益就非常大 。
所以 , PageCache 的优点主要是两个:
缓存最近被访问的数据;
预读功能;
这两个做法 , 将大大提高读写磁盘的性能 。
但是 , 在传输大文件(GB 级别的文件)的时候 , PageCache 会不起作用 , 那就白白浪费 DMA 多做的一次数据拷贝 , 造成性能的降低 , 即使使用了 PageCache 的零拷贝也会损失性能 。
这是因为如果你有很多 GB 级别文件需要传输 , 每当用户访问这些大文件的时候 , 内核就会把它们载入 PageCache 中 , 于是 PageCache 空间很快被这些大文件占满 。
另外 , 由于文件太大 , 可能某些部分的文件数据被再次访问的概率比较低 , 这样就会带来 2 个问题:
PageCache 由于长时间被大文件占据 , 其他「热点」的小文件可能就无法充分使用到 PageCache , 于是这样磁盘读写的性能就会下降了;


稿源:(CSDN)

【】网址:http://www.shadafang.com/c/hn10049531C2020.html

标题:coding|原来 8 张图,就可以搞懂“零拷贝”了!( 四 )


上一篇:荣耀v40|荣耀V40已经在路上,曲面屏+双扬声器,国行2599元有戏!

下一篇:苹果|苹果开始自寻“后路”,转移生产线到印度,郭台铭发言说明了一切


人文

格萨尔|《藏地奇兵》石渠开机 穿越藏地最后秘境热血探险

阅读(15)

由沃星影业、拉近影业、拉近沃星影业出品,成都影视硅谷集团、青岛东望影业联合出品的电影《藏地奇兵》于10月12日在四川石渠正式开机。该片由著名演员秦岚担任出品人兼艺术总监,张楚晗担任总制片人,张著麟、李希杰、温子迅执导,魏千翔、屈菁菁、邢瀚卿、吴...

人文

怪我碍你|十月再见,十一月你好,释然过往,砥砺向前

阅读(12)

逝去的时光中,总有一些东西会在心中成为永恒,那么,就铭记那些美好吧,心中有阳光,充满正能量,微笑着面对生活;也会有些事情成为遗憾,有些心愿没能实现,但也不要气馁,更不要抱怨,笑看过往,努力过好当下和明天,不胡思乱想,不执着于过去。愿所有的真...

人文

年薪制| 年薪制要来了吗?事业单位职工收入或将有大变化!

阅读(22)

近日,人社部组织实施人才服务专项行动,推进高校、科研院所薪酬制度改革。落实高层次人才工资分配激励政策,鼓励事业单位对高层次人才实行年薪制、协议工资制、项目工资等灵活多样的分配形式。鼓励事业单位对高层次人才实行年薪制、协议工资制、项目工资等灵...

人文

社会【观点】医改进程迟缓的原因及破解之策

阅读(20)

1供给侧改革进展迟缓大年夜实际来看,医疗供给侧改革在社会办医、医务人员自由执业、公立病院去行政化三个方面并没有太多本质性的进展,这也是我国医改未能有大年夜冲破的重要原因。1.1社会办医成长迟缓成长社会办医,不仅是实际须要,也是一种策略。在公立病...

人文

时尚探究社成都街拍:图集分享

阅读(43)

这个夏天阴阳色也太好看了吧~又个性,又显白的发色,就算搭配学院风也一点都不突兀。一看就是经常健身的小姐姐,这个身材曲线真的羡慕了~不要太美~...

人文

#quot#六旬男子足底黑痣会长大 检查发现是恶性肿瘤

阅读(10)

本年60 岁的陈师长教师比来有些忧?。本来,三年前他的左脚底足跟邻近长了一颗黄豆大年夜小、凸起的黑" 痣"。一年前开端,这颗" 痣" 有逐渐长大年夜之势,伴有些许压痛,于是陈师长教师按期到家邻近的修脚店把这颗" 痣" 磨平,...

人文

凤眼看房长沙|长三角多市出台调控政策 房企拿地热情不减

阅读(17)

回望过去一段时间,不仅是宁波,整个长三角已是房企必争之地。今年融资环境稍有宽松后,大小房企集体携金杀往长三角,土拍市场屡现高溢价,即便多地出手调控,仍有地王出现。楼市也在市场情绪助推下迅速反弹。“近年来三四线城市房产饱和、风险积聚,标杆企业...

人文

午间时刻《欢喜猎人》要播了吗?包贝尔贾玲再次合作,携手《欢喜密探》原班人马回归

阅读(35)

网剧《欢乐密探》就是一部不错的喜剧作品,而《欢乐猎人》是《欢乐密探》原班人马打造的第二部影视作品,所以有很多人都等着可以早点看到这部剧,然则在《欢乐猎人》拍了两年今后,一向没有播出,大年夜家也都等得异常焦急。不过,有传言说《欢乐猎人》这部电...

人文

Tina|卫衣 + 半裙,照着穿好看爆了 !

阅读(21)

卫衣+半裙的搭配,属实是显胖王者,它要是称第二,那也是太谦虚了。当你挑选的裙子也很宽松时,穿上它就是灾难本身,转过身去看背后,Tina都想落泪,这五五分的身材是真实存在的吗?明明是同款卫衣,却比旁边穿裤子的look,腿长短了好多!不过小可爱们不用害...