写点什么

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:001413
用户头像

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

关注

评论

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

揭秘高效人事财务对接新方案!

聚道云软件连接器

案例分享

Python官方发布的《Python标准库参考》,共2018页,建议收藏!

我再BUG界嘎嘎乱杀

Python 后端 入门 开发语言 零基础

推进现代化的财务计划,打造可持续的企业发展

智达方通

全面预算管理 财务管理

鸿蒙开发之音频播放开发技术文档

彭康佳

鸿蒙 音视频

淘宝API接口在电商商品数据实时采集与分析中的实践

技术冰糖葫芦

API Explorer API 类型 API 管理 pinduoduo API

Python的try、except异常处理模块使用方法

我再BUG界嘎嘎乱杀

Python 异常处理

“云捷共创 智启未来”2024零售行业技术沙龙开讲,共话转型升级新机遇

科技热闻

从 Docker Hub 拉取镜像受阻?这些解决方案帮你轻松应对

北京好雨科技有限公司

docker image rainbond 企业号 6 月 PK 榜

「白帽黑客」还是「敲诈勒索」:Kraken 与 CertiK 对峙上了

TechubNews

web3、

2024年开发体育直播平台:最具潜力的创业项目

软件开发-梦幻运营部

肇庆具有资质等保机构有几家?在哪里?

行云管家

等保 等级保护 等保测评 肇庆

恭喜行云绽放,24年再度荣获国家鼓励的企业软件证书

行云管家

行云绽放 企业软件

加密货币交易所开发成本:2024 年完整指南

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

如何使用 NFTScan NFT API 在 Sei 网络上开发 Web3 应用

NFT Research

NFT\ NFTScan API 类型

闲鱼面试:说说JWT工作原理?

王磊

AD域控同步新突破:一键解决企业身份管理难题!

聚道云软件连接器

案例分享

浅析Vite本地构建原理

不在线第一只蜗牛

vite 本地

使用NJet作为K8s的Ingress Controller -高性能、可动态配置

通明湖

调用了这么久的JS方法是长在对象、类、值本身还是原型链上?

EquatorCoco

JavaScript js

云VR技术服务与传统VR的区别对比

3DCAT实时渲染

云VR 实时渲染云 VR虚拟现实

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