2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

Facebook 如何重新设计 HHVM JIT 编译器的性能

  • 2016-10-18
  • 本文字数:818 字

    阅读完需:约 3 分钟

2013 年夏天,Facebook 工程师开始对 HHVM JIT 编译器进行重大的重新设计,这次重新设计使得 Facebook Web 服务器 CPU 的使用率整体降低了 15%。Facebook 工程师 Guilherme Ottoni 最近描述了Facebook 如何在JIT 编译器中利用性能分析引导优化(PGO)技术达到这一效果。

性能分析引导优化技术主要采用运行时分析,例如,识别出更频繁执行的代码,以改进代码的生成。由于编译器和运行时环境的集成特性,PGO 更适合集成到动态编译器和JIT 编译器中。

Facebook 工程师专注于两个主要的目标:利用性能分析的信息优化编译时作出的决策,以帮助编译器识别更大的专用类型编译区域(即可以为给定的已知类型生成的代码进行优化的区域),从而避免类型检查的开销。为了实现这一点,HHVM JIT 编译器必须学习如何转换任意代码区域,而不仅仅是 tracelet ,tracelet 是非常基础的可以独立转换成机器代码的专用类型块。Tracelet 不会任意增长,因为它的定义是:当无法确定块的输入类型或者当 JIT 编译器不能确定分支的方向时,tracelet 就会结束。

Facebook 工程师概括 tracelet 采取的第一步是,基于性能分析信息将其中的几个组合在一起。通过这样做,可以减少不同 tracelet 进入和退出的开销,并且实现更高级的 cross-tracelet 优化,例如提升循环不变式计算到循环外。

在基本的 tracelet 外构建更大的区域具有不违反现有 JIT 优化器和后端中任何假设的优点,这些假设是紧密围绕这一概念设计的。在第二个阶段,Facebook 工程师开始重新设计这些组件,以便能够处理具有任意控制流的区域。这一努力在 2015 年春天完成了,通过将 CPU 使用率降低 15%,显著提高了 JIT 编译器的性能,相比第一阶段的改进提升了两倍。

查看英文原文: How Facebook Redesigned the HHVM JIT Compiler for Performance


感谢夏雪对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-10-18 19:001646
用户头像

发布了 31 篇内容, 共 10.8 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

1.开篇(听说你还在艰难的啃react源码)

全栈潇晨

React React Hooks react源码

给hugo博客添加评论功能

远鹏

Hugo 静态博客 utterances

程序员成长第五篇:如何选择城市工作?

石云升

程序员 2月春节不断更 选择城市

门诊数字化:患者信息识别方式

boshi

医疗 数字化基础 七日更

算法从有序数组中移除重复的数据,AI学习资源2020 John 易筋 ARTS 打卡 Week 38

John(易筋)

ARTS 打卡计划 ai youbute学习资源

一维数组的动态和

小马哥

算法

开发利器——C语言必备实用第三方库

码哥比特

c c++ Linux 后端 框架

翻译:《实用的Python编程》01_05_Lists

codists

人工智能 后端 python 爬虫 列表 数据结构与算法

EternalWallet为您提供快速、便捷、低价的国际汇款服务

Geek_c610c0

【LeetCode】重塑矩阵Java题解

Albert

算法 LeetCode 2月春节不断更

字幕组时代落幕,翻译的未来可能是?

字节跳动技术团队

13. 如果自己写的 Python 程序出错了,怎么办?

梦想橡皮擦

python 爬虫 2月春节不断更

IDEA插件:快速删除Java代码中的注释

xiaoxi666

Java 代码注释 JavaParser

春节快过腻了?不妨关心下太空探索

脑极体

第四章作业-编写一个用例文档

秦挺

【函数计算实践】nodejs初探示例——本地mac环境

程序员架构进阶

架构 nodejs 函数计算 七日更 2月春节不断更

C语言第三方库Melon开箱即用之词法分析器使用

码哥比特

c c++ Linux 后端 框架

微信红包封面,2021年为啥突然火了?

架构精进之路

春节 微信红包封面 商业洞察

写公号大半年,看看我都收获了些啥

架构精进之路

技术 总结 微信公众号 成长笔记

日记 2021年2月17日(周三)

Changing Lin

2月春节不断更

【STM32】PWM 输出 (标准库)

AXYZdong

硬件 stm32 2月春节不断更

C语言实用第三方库Melon开箱即用之多线程模型

码哥比特

c c++ Linux 后端 框架

2.react心智模型(来来来,让大脑有react思维吧)

全栈潇晨

React React Hooks react源码

Elasticsearch mapping 复杂数据类型

escray

elastic 七日更 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

揭秘登上2021春晚舞台的黑科技-XR技术

架构精进之路

黑科技 vr 春晚 XR MR

gradle中的增量构建

程序那些事

maven Gradle 程序那些事 构建工具

3.Fiber(我是在内存中的dom)

全栈潇晨

React React Hooks react源码

LeetCode题解:1091. 二进制矩阵中的最短路径,BFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

端口隔离和VLAN的区别

用例文档

三生赤水

第 4 周作业

老元宵

Facebook如何重新设计HHVM JIT编译器的性能_PHP_Sergio De Simone_InfoQ精选文章