写点什么

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

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

关注

评论

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

详解PON基础知识:OLT、ONU、ONT和ODN,建议收藏

Ethereal

pon 光纤 弱电工程师

吹水的6大坏习惯

搬砖的周狮傅

沟通艺术

工业机器视觉系统相机如何选型?(理论篇—3)

不脱发的程序猿

机器视觉 图像处理 工业自动化

化“整”为“零”,明道云为企业信息化提速(一)

明道云

16.  《重学JAVA》--1.8新日期类

杨鹏Geek

Java 25 周年 28天写作 12月日更

面向WEB开发人员的Docker(七):使用 Docker 开发Node应用程序

devpoint

node.js Docker 12月日更

抬头看天

xujiangniao

知识梳理

React进阶(八):state 属性讲解

No Silver Bullet

React 12月日更 props

如何在 CentOS 8 服务器上安装 ISP Config 3.2?

Ethereal

服务器 ISP CentOS 8

如何在 Debian 11 上使用 Nginx 安装 HTTP Git 服务器

Ethereal

nginx git HTTP Debian 11

文本编辑器GNU Nano 6.0 发布!

Ethereal

Nano

分布式锁及其实现

xcbeyond

分布式锁 28天写作 12月日更

47 K8S之 Ingress资源

穿过生命散发芬芳

k8s 28天写作 12月日更

【LeetCode】换酒问题Java题解

Albert

算法 LeetCode 12月日更

存量经营

张老蔫

架构实战营 4 期第二模块作业

jialuooooo

架构实战营

性能工具之linux三剑客awk、grep、sed详解

zuozewei

Linux 性能测试 12月日更

不太推荐 《沟通的方法》(17/28)

赵新龙

28天写作

走进Java接口测试之简单解决写接口脏数据问题

zuozewei

Java 自动化测试 测试开发 接口自动化 12月日更

Kotlin ‘...has private access in...’ 问题小结

阿策小和尚

28天写作 Android 小菜鸟 12月日更

使用JDK自带的工具jstack找出造成运行程序死锁的原因

汪子熙

Java 并发 死锁 28天写作 12月日更

保护自己电脑绝对不做黑客肉鸡

喀拉峻

网络安全 安全

Go+ URL 解析教程(5.6)

liuzhen007

28天写作 12月日更

实用机器学习笔记十七:模型评估

打工人!

机器学习 深度学习 算法 模型评估 12月日更

模块三作业

Geek_e6f7f6

架构实战营

电商秒杀系统

胡颖

架构实战营

.NET 6新东西--高性能日志

喵叔

28天写作 12月日更

Dubbo框架学习笔记五

风翱

dubbo 12月日更

反射

Nydia

[Pulsar] Producer 流控

Zike Yang

Apache Pulsar 12月日更

模块二作业

whoami

「架构实战营」

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