【PHP8.1】PHP8.1相对于PHP7.4的性能提升了20%

由于有一篇文章提到了关于ML自动性能基准测试方面的内容:PHP 8.1比PHP 7.4快大约30%,所以我想介绍一下。

https://externals.io/message/116323 的内容请用中文进行转述。

kocsismate90

我最近在开发一个专为PHP的自动基准测试框架,并为此来宣传。最初,我用它来评估is_literal的RFC性能,但后来修复了许多问题并添加了新功能。

也许有人还记得过去英特尔所做的自动基准测试。我受到这个项目的启发,现在也在做类似的事情,但是看来我真的无法像他们那样做到如此高级。

我目前正在制作的php版本基准测试。

・可以完全自动定期执行。
・可以在本地通过Docker执行,也可在云端(目前仅支持AWS)执行。
・支持X86-64和ARM64架构。
・适用于PHP7.4及以上版本。
・支持OPcache/JIT/preloading。
・提供了包含Symfony和Laravel的PHP源码和实际网站示例。

这里公开了最新的基准测试结果。
定期将这些结果投稿到机器学习中,怎么样?

来自@chilliet.eu

请停止将机器学习的自动发送消息,因为它很烦人。
如果出现重大变更,请随时发布,我们欢迎。

克雷格·弗朗西斯

也许能够发现退化可能是很方便的。

kocsismate90

很抱歉,我之前的计算有误,已经进行修正。
不是30%,而是大约23%或21.5%左右。
即使如此,我认为这仍然是一个很大的性能提升,非常厉害。

测量结果

您可以在kocsismate/php-version-benchmarks中查看。

Laravel演示应用程序 – 25次连续运行,共计250个请求(每秒)。

这是一个在实际环境中,也就是真实环境的Laravel上发送大量请求并查看结果的测试。

PHP最小最大標準偏差平均値平均値差分中央値中央値差分メモリPHP 7.41.336391.464240.035081.365860.00%1.351020.00%33.00 MBPHP 8.01.256931.396060.035391.28991-5.56%1.27588-5.56%32.39 MBPHP 8.11.055941.068410.004091.06094-22.32%1.05898-21.62%35.48 MBPHP 8.1 (JIT)1.041561.080100.006971.04972-23.15%1.04883-22.37%43.29 MBPHP 8.1 (preloading)1.052531.149540.020231.06853-21.77%1.06247-21.36%35.37 MB

PHP 7.4 到 8.0 的速度提升了 5%,而从 7.4 到 8.1 更是达到了 20% 的大幅度提升,这真是相当惊人啊。
仅仅将 PHP 版本从 8.0 升级到 8.1 就能获得 10% 以上的速度提升,不知道 PHP 到底是如何进行优化的呢。

然而,即使打开JIT编译器也几乎没有影响。很可能是因为大部分处理时间都花在了数据库和文件的输入/输出上。与输入/输出相比,CPU的使用时间微不足道。

bench.php – 连续运行15次(秒)

这是一个CPU的基准测试。具体来说,它是一个常见的计算处理任务重复无穷次的测试。

PHP最小最大標準偏差平均値平均値差分中央値中央値差分メモリPHP 7.40.341320.344020.000670.341970.00%0.341820.00%23.52 MBPHP 8.00.333400.342200.002450.33838-1.05%0.33817-1.07%23.43 MBPHP 8.10.342590.352760.002470.347491.61%0.348501.95%23.52 MBPHP 8.1 (JIT)0.109650.111360.000440.10993-67.85%0.10978-67.88%25.23 MBPHP 8.1 (preloading)0.346130.351170.001800.347571.64%0.346231.29%23.53 MB

JIT太厉害了。
JIT的好处显而易见。

JIT的极速优化引人注目,但除了JIT之外,速度并没有提升很多,反而稍稍变慢了。大约只有1-2%的程度,几乎察觉不到。

根据测试结果,可以看出JIT在对CPU的运算处理上具有超强的优势,适用于后端的批处理等操作。
而在像Laravel等常规应用程序中,相反地,几乎没有JIT的好处,仅仅通过PHP8.1的整体处理能力提升来提高性能。

因此,在Web服务器中禁用JIT来运行,并在批处理后端服务器中启用JIT的策略将是有效的。
虽然通常情况下两者兼用,但如果需要的话,先让JIT启用就可以了。

我的感受

你还会早到吗?

尽管PHP7.3相较于PHP5已经提速3倍,但再增加20%速度是什么意思呢?

如果继续这样加快速度,说不定会超过C语言的速度。

广告
将在 10 秒后关闭
bannerAds