基于 GraalVM 的 PHP JIT 实现性能优于原生方案

2020年09月30日

GraalVM 是 Oracle 打造的高性能跨语言虚拟机,支持运行 JavaScript、Python 3、Ruby、R、基于 JVM 的语言(如 Java、Scala 和 Kotlin),以及基于 LLVM 的语言,如 C 和 C++。

近期一名开发者基于 GraalVM 实现了针对 PHP 7.4+ 的实验性 JIT 编译器和 runtime,并将此项目命名为 GraalPHP。


 

GraalPHP 实现了 PHP 语言的一个子集,通过运行“The Computer Language Benchmarks Game”综合基准测试,与 PHP 7 和 PHP 8 alpha 早期版本,以及其他 PHP 替代实现如 HHVM 和 JPHP 进行比较,得到了如下的峰值性能结果:


 

可以看到,在多个测试选项中,GraalPHP 的性能优于原生 PHP,包括实现了官方 JIT 编译器的 PHP 8。

GraalPHP 是作者 Andrin Bertschi 的本科论文项目,所以它在作者的论文工作结束后是否会继续被关注目前不得而知。不过无论如何,能看到在 GraalVM 之上的 PHP JIT 实现还是很有趣的。

有关 GraalPHP 的更多细节查看 https://github.com/abertschi/graalphp

展开阅读全文
9 收藏
分享
加载中
精彩评论
@红薯 新版网页加灰功能是失效了,赶紧加回来,不然天天看阅读理解不过关的人笑话。
2020-09-30 10:43
7
举报
测试PHP性能,居然不使用PHP内置的两个标准综合测试脚本,我笑了.
php-src/Zend/bench.php
php-src/Zend/micro_bench.php

还有,如果测生成一个包含100万个元素的关联数组这个测试,我保证它性能天崩.
https://static.oschina.net/uploads/space/2017/0507/114545_l2Gp_561214.png
测试内容主要包含时间戳获取,字符串拼接,关联数组生成这几个Web开发中经常用到的操作.
其中字符串连接和关联数组的生成,这两个主要跟语言的实现有关.
而时间戳的获取是一个系统调用,通过系统获取一个语言无法预期的变量(随机种子),来模拟真实的应用场景.
2020-09-30 09:35
6
举报
PSI
基于GraalVM写新语言,并不需要太高深的技术,计算机专业的学过编译语言课程后,在GraalVM框架下写出类似的东东,只是个体力活。
2020-09-30 09:21
4
举报
PSI
GraalPHP大概率是昙花一现。实现PHP语言本身的工程量并不大,但是要完整实现PHP各个内置函数,就不是一个人能完成的工程量了。另外,PHP8 JIT的实现是接近于手撸汇编,所以目前优化还不够,假以时日总能进一步提高。
2020-09-30 09:17
2
举报
在一个项目的测试里 php8.0 比 php7.4有3倍以上的性能提升 https://github.com/lizhichao/one-ck/actions/runs/280428154
2020-09-30 21:35
1
举报
最新评论 (23)
对于从php逐渐迁移到java的企业来说,这个项目还是很有用的。
java模块和php模块一起运行,然后按照模块替换php模块,这个道路还是比较稳健的。希望啥时候出一个无缝替换php-fpm的。
2020-10-09 09:34
0
回复
举报
在一个项目的测试里 php8.0 比 php7.4有3倍以上的性能提升 https://github.com/lizhichao/one-ck/actions/runs/280428154
2020-09-30 21:35
1
回复
举报
php的没落绝不是因为性能
2020-09-30 16:10
1
回复
举报
$->$->$->
2020-09-30 16:13
0
回复
举报
成也萧何,败也萧何。官方再不出协程要完。
2020-10-02 03:32
0
回复
举报
php一开始就不是为了通用功能的
2020-10-05 01:54
0
回复
举报
这不就是java对比php???
2020-09-30 13:07
0
回复
举报
我有原生的不用,去用第三方的,闲的蛋疼?
2020-09-30 12:26
0
回复
举报
言之有理
2020-09-30 12:50
0
回复
举报
用GraalVM做语言。。比用LLVM撸方便多了。。AOT反正也支持
2020-09-30 11:21
1
回复
举报
php挺好,一直用
2020-09-30 10:11
0
回复
举报
测试PHP性能,居然不使用PHP内置的两个标准综合测试脚本,我笑了.
php-src/Zend/bench.php
php-src/Zend/micro_bench.php

还有,如果测生成一个包含100万个元素的关联数组这个测试,我保证它性能天崩.
https://static.oschina.net/uploads/space/2017/0507/114545_l2Gp_561214.png
测试内容主要包含时间戳获取,字符串拼接,关联数组生成这几个Web开发中经常用到的操作.
其中字符串连接和关联数组的生成,这两个主要跟语言的实现有关.
而时间戳的获取是一个系统调用,通过系统获取一个语言无法预期的变量(随机种子),来模拟真实的应用场景.
2020-09-30 09:35
6
回复
举报
@红薯 新版网页加灰功能是失效了,赶紧加回来,不然天天看阅读理解不过关的人笑话。
2020-09-30 10:43
7
回复
举报
PSI
GraalPHP大概率是昙花一现。实现PHP语言本身的工程量并不大,但是要完整实现PHP各个内置函数,就不是一个人能完成的工程量了。另外,PHP8 JIT的实现是接近于手撸汇编,所以目前优化还不够,假以时日总能进一步提高。
2020-09-30 09:17
2
回复
举报
国外的大牛就是多!!
2020-09-30 09:15
0
回复
举报
PSI
基于GraalVM写新语言,并不需要太高深的技术,计算机专业的学过编译语言课程后,在GraalVM框架下写出类似的东东,只是个体力活。
2020-09-30 09:21
4
回复
举报
这不是写新语言吧,而是把其他语言翻译成GraalVM字节码,本质上还是Java?
2020-09-30 11:06
0
回复
举报
PSI
https://www.graalvm.org/graalvm-as-a-platform/implement-language/
2020-09-30 11:25
1
回复
举报
所以说如果说LLVM的目标是通用编译器,那GraalVM的目标就是通用虚拟机,任何语言只要翻译成GraalVM的字节码都可以兼容,LLVM要自己实现前端的话难度不小,而GraalVM更简单,提供了Truffle API可以很方便的实现DSL,这么说来确实要容易一点,但毕竟不是原生的PHP实现,就算再快用起来也不爽,我是这么认为的。原生php比这玩意小多了
2020-09-30 12:59
0
回复
举报
更多评论
23 评论
9 收藏
分享
返回顶部
顶部