LWN: facebook利用transparent huge page来优化代码执行性能

栏目: 后端 · 发布时间: 5年前

内容简介:全文完极度欢迎将文章分享到朋友圈长按下面二维码关注:Linux News搬运工,希望每周的深度文章以及开源社区的各种新近言论,能够让大家满意~

Transparent huge pages for filesystems

By Jake Edge

May 22, 2019

LSFMM

继续2019 Linux Storage, Filesystem, and Memory-Management Summit (LSFMM)会议记录。Liu Song在会场里提出一个问题,关于如何让文件系统能真正支持transparement huge pages (THPs)。大家都知道文件系统支持THPs很难,那么如何开始第一步?Liu Song在Facebook工作,他们很需要在file page cache里面支持THPs。THPs可以减少page数量,从而减少TLB miss(Translation lookaside buffer miss,指MMU地址翻译没法利用TLB快速查询到结果,需要走完整的MMU walk路径,耗时较长),也就会有更好的performance。Facebook希望把常用的函数都放到huge page里面,从而减少相关指令导致的TLB miss。Facebook先利用Binary Optimization and Layout Tool (BOLT) 来采集他们的代码的运行情况,了解最常用函数是哪些。然后把这些函数归集到一个8MB的memory空间,塞到最终生成的可执行程序里去。

LWN: facebook利用transparent huge page来优化代码执行性能

在程序运行的时候,它会在内存里创建一个8MB的临时缓存区,然后把那些常用函数都复制到这块区域。此后,通过mmap()映射anonymous page以及madvise来创建huge page,程序代码段原来的8MB的区域就变成了一个huge page区域,再把临时缓存区的内容copy回来,并且用mprotect()来把这块区域继续设置为可执行代码区域。

这一系列操作之后,kernel什么都不用改,就能获得5~10%的性能提升。不过THP区域的符号地址以及uprobe target就乱掉了,因为kernel没有意识到这块区域还是程序代码段的一部分。假如文件系统代码里面支持了THPs,那就不用搞这么多复杂的小动作,直接用一个madvise()命令来达成即可。

Liu希望能完成filesystem里面相关的代码,不过他所实现的代码里面还是有很多限制和简化。例如,不支持对THP内存区域的写入操作。大家对这里的操作有不小分歧。一位参会者问他为何部支持写操作,是因为性能问题,还是因为代码太复杂。Johannes Weiner解释说如果要加write支持的话,就意味着要修改filesystem里面所有需要用到page结构的代码。特别是所有的文件系统都要被修改了。所以为了避免用一个巨大的patch来一次修改完所有文件,他们采取了一个简洁的修改作为第一步,当然这不会是最终版本。

Kirill Shutemov和Matthew Wilcox有点担心,不支持写入的话,这个代码很难被合入Linux kernel。Chris Mason认为Facebook所描述的这种应用场景,确实不需要写操作。Wilcox坚持认为这个方案太不通用了。Rik van Riel认为大家都应该牢记一点,要想把这么大的一个改动一次性合入kernel,简直是不可能完成的任务。这个patch太大了,还是需要确定第一阶段应该完成什么。Shutemov和Wilcox很坚定的认为,不支持write操作的话,就没有理由合入kernel。

Wilcox倒是提到,他在做的page cache的一些改动(minimizing the tail pages, https://lwn.net/Articles/787388/ ) 会能简化文件系统里相关的支持。具体来说,能够把所有那些针对compound page来返回tail page的函数都拿掉。这样文件系统代码就只需要处理head page即可。他建议等他的代码完成之后,在此基础之上来加文件系统的THP支持。Shutemov比较赞同这个想法。当然这可能不是Liu最希望从这个讨论中看到的结果,没关系,Facebook还是可以继续在内部使用它现有的方案作为过渡。

全文完

极度欢迎将文章分享到朋友圈 

长按下面二维码关注:Linux News搬运工,希望每周的深度文章以及开源社区的各种新近言论,能够让大家满意~

LWN: facebook利用transparent huge page来优化代码执行性能


以上所述就是小编给大家介绍的《LWN: facebook利用transparent huge page来优化代码执行性能》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

视觉SLAM十四讲

视觉SLAM十四讲

高翔、张涛、等 / 电子工业出版社 / 2017-3 / 75

《视觉SLAM十四讲:从理论到实践》系统介绍了视觉SLAM(同时定位与地图构建)所需的基本知识与核心算法,既包括数学理论基础,如三维空间的刚体运动、非线性优化,又包括计算机视觉的算法实现,例如多视图几何、回环检测等。此外,还提供了大量的实例代码供读者学习研究,从而更深入地掌握这些内容。 《视觉SLAM十四讲:从理论到实践》可以作为对SLAM 感兴趣的研究人员的入门自学材料,也可以作为SLAM......一起来看看 《视觉SLAM十四讲》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器