V8 新编译器架构 Crankshaft 简介 提高50%性能

Posted by pudd on December 10, 2010

Crankshaft (意为曲轴,一种机械部件)是 Chrome 的 JavaScript 引擎 V8 的全新编译器架构。

经过不断的锤炼和优化,Crankshaft 在应付计算任务密集的 JavaScript 程序时有极其良好的表现,对比旧架构性能大概有一到两倍的提高。用户在浏览加载含有复杂 JavaScript 程序的网页时可以获得更快的响应速度。下面是引入 Crankshaft 后新旧 V8 引擎的速度对比。

以上基准测试中,提升显著的当属 Richards, DeltaBlue 和 Crypto,表明 V8 在数值读取、算术运算、紧密循环和函数调用方面取得了最为长足的进步。从测试数据来看,整体速度提升了50%,这也是 Chrome 自2008年推出以来最大的进步。

除了峰值性能的提高外,Crankshaft 也可以提高网络应用的启动速度(如Gmail),我们的页面循环读取测试结果表明,对于富含 JavaScript 代码的页面,总体性能有12%的提高。

启动时间和峰值性能的双双提高,得益于 Crankshaft 的自适应编译。大体思路是极力优化部分频繁执行的代码,而不花费额外的资源对少用的作优化处理,这也是为什么对一些简单的几毫秒可以完成的基准测试(如SunSpider),Crankshaft 没有带来明显的性能提高——程序越复杂,提高才越明显。

Crankshaft 包含四大组件:

  1. 基础编译器:用于代码的首次编译,特点是速度快但是没有优化编译能力。Chrome 9基础编译器的性能是 V8 编译器的两倍,并且能产出更加精简的代码(数目少30%)。
  2. 实时追踪器:系统运行时,用于监视追踪哪些代码执行最频繁。
  3. 优化编译器:实时追踪器判断出哪部分由基础编译器产出的代码执行最频繁后,优化编译器将对其进行重编译优化。优化编译器使用静态单一分配方法来进行优化工作,如循环不变量代码移动,线性扫描寄存器分配算法和内联方法等。
  4. 解优化支持:让部分过度优化的代码还原至基础编译器产出的代码。 为32位 Intel 处理架构设计的 Crankshaft 已经集成在最新的 V8 引擎和 Canary 分支的 Chrome 中,ARM 架构和64位的 Crankshaft 的开发工作已经展开。

Crankshaft 带来的性能提高让人鼓舞,这是一个优秀的新架构,为 V8 接下来的性能提高创造了更多的进步空间,我们会继续推动 JavaScript 性能的进步,以迎接 Web App 的新时代。

via the chromium blog