AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

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

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

关注

评论

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

python爬取下载m3u8加密视频,原来这么简单!

Python研究者

8月日更

毕业设计:电商秒杀系统

唐高为

docker介绍与安装

Rubble

Docker 8月日更

智能边缘开源框架Baetyl,构建边缘融合智能应用

百度开发者中心

AI 最佳实践 物联网 边缘计算 开源技术

「让我们一起Golang」让协程自己kill自己

Regan Yue

协程 Go 语言 8月日更

FastApi-13-文件上传-1

Python研究所

FastApi 8月日更

杂谈:电商平台中的图片资源优化实战

云小梦

CSS JavaScript html5 jpeg 图片处理

架构实战营模块五作业-微博评论高性能高可用架构

王晓宇

架构实战营

kubernetes/k8s CRI 分析 -kubelet 删除 pod 分析

良凯尔

Kubernetes 源码分析 Kubernetes Plugin #Kubernetes# cri-o

上游思维的三大障碍

石云升

读书笔记 8月日更 上游思维

极客大学架构实战0期毕业总结

谢博琛

crudapi增删改查接口零代码产品成功案例之商会联盟卡项目

crudapi

Java Vue 零代码 crudapi qusar

JavaScript 中如何比较变量的相等

devpoint

JavaScript ES6 8月日更

Vue进阶(三十六):created() 详解

No Silver Bullet

Vue 8月日更

模块五作业

Mr.He

架构实战营

Python开发篇——基于React-Dropzone开发上传组件

吴脑的键客

Python flask React

netty系列之:对聊天进行加密

程序那些事

Java Netty nio

架构实战营毕业总结

Saber

架构实战营 毕业总结

架构实战训练营总结

唐江

架构实战营

【Dubbo3.0 技术专题】总体技术体系介绍及技术指南(目录)

码界西柚

dubbo Dubbo服务 8月日更 Dubbo3

Vue进阶(三十七):created、mounted等钩子函数整理

No Silver Bullet

Vue 8月日更

入职新公司后如何快速上手项目

咔咔

php MySQL 数据库

Flutter Android 端 FlutterEngine Java 相关流程源码分析

工匠若水

flutter android 面试 8月日更

如何设计一个容错的微服务架构

架构精进之路

架构 微服务 8月日更

Python Qt GUI设计简介、环境下载和安装(基础篇—1)

不脱发的程序猿

Python qt GUI设计 Qt Company

Drools 规则属性

LeifChen

drools 规则引擎 8月日更 规则属性

HarmonyOS组件开发 ScrollView嵌套ListContainer 滑动冲突问题

爱吃土豆丝的打工人

HarmonyOS ScrollView ListContainer 嵌套滑动

LeetCode题解:208. 实现 Trie (前缀树),对象,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

架构实战营毕业总结

唐高为

架构实战营 | 毕业总结

架构实战营

fil币价格行情怎么样?fil币价值和未来在哪?

fil币价格行情怎么样 fil币价值和未来在哪

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