写点什么

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

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

关注

评论

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

经典递归 - 青蛙跳台阶问题

芒果酱

递归 C语言 5月月更

全国超市区域分布分析-数据分析学习笔记-1

清林情报分析师

数据分析 学习笔记 数据处理 数据可视化 知识图谱

LabVIEW实现Modbus通信

不脱发的程序猿

LabVIEW Modbus 串口通信 VISA 工业通信

多个平台显示IP地址:如何看待互联网实名制

石头IT视角

Go Web 编程入门:中间件

宇宙之一粟

中间件 Go web 5月月更

虎符Hoo重点布局合规 打造安全稳定交易环境

区块链前沿News

国际化 Hoo 合规

AiTalk创始人梁宇淇:镜像连接虚拟与现实的纽带

阿里云弹性计算

vr XR 数字人

【LeetCode】括号的分数Java题解

Albert

LeetCode 5月月更

搜狐全员遭诈骗,暴露哪些问题?

Authing

身份云 信息 统一身份认证 mfa

上证数据可视化分析展示-数据分析学习笔记-2

清林情报分析师

数据分析 学习笔记 数据处理 证券 上市公司

LinkedHashMap 源码分析-访问

zarmnosaj

5月月更

基线监控:基于依赖关系的全链路智能监控报警

字节跳动数据平台

监控 SLA 基线检查

LabVIEW使用移位寄存器计算平均值

不脱发的程序猿

LabVIEW 移位寄存器计算平均值 移位寄存器

英特尔宣布加入OpenCloudOS操作系统社区

TencentOS

勇往直前,做全能开发者,华为伙伴暨开发者大会2022精彩活动正式解锁!

华为云开发者联盟

云计算 量子计算

十二、云原生安全趋势

穿过生命散发芬芳

云原生安全 5月月更

DNS解析过程

工程师日月

5月月更

flask框架关于静态文件及其模板生成

恒山其若陋兮

5月月更

JavaScript获取元素的宽高

空城机

JavaScript 5月月更

Java Core「5」自定义注解编程

Samson

学习笔记 5月月更 Java core

LabVIEW操作鼠标滚轮放大/缩小图像

不脱发的程序猿

图像处理 LabVIEW 鼠标滚轮来放大和缩小图片

OpenCloudOS 云原生演进之路

TencentOS

寻找智能精灵:出海与创新时代的开发者之需

脑极体

内网穿透的实现原理(附源码)

风斩断晚霞

Java Go 网络编程 Netty 内网穿透

LabVIEW虚拟数字示波器

不脱发的程序猿

数据采集 LabVIEW 虚拟示波器 信号发生VI

Netty实战-实现内网穿透(一)

风斩断晚霞

Java Go Netty 内网穿透

中科曙光加入OpenCloudOS操作系统社区,携手共建应用生态体系

TencentOS

阿里云“大算力”支持嬴彻自动驾驶仿真提速 20 倍

阿里巴巴云原生

阿里云 容器 云原生 ACK 客户案例

中兴通讯宣布加入OpenCloudOS操作系统社区,为自主操作系统做出重要贡献

TencentOS

密码学系列之:使用openssl创建私有CA

程序那些事

密码学 程序那些事 5月月更

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