T4g(ARM) の PHP8.0 で JIT が使えなかった

結論から申し上げると、T4gインスタンスは ARMアーキテクチャなので、現段階では PHP8.0 の目玉機能である JIT が使えません。

恐らく、AWSのGraviton2以外でも、ARMを採用している Apple M1 や Microsoft SQ2 でも同様かと思うので、M1搭載のMacBook ProやMacBook Air、SQ2搭載のSurface Pro X などでPHP開発する皆さんはお気を付けください。

PHPのJITに関するRFCにもしっかり書かれてました。

We use DynAsm (developed for LuaJIT project) for generation of native code. It’s a very lightweight and advanced tool, but does assume good, and very low-level development knowledge of target assembler languages. In the past we tried LLVM, but its code generation speed was almost 100 times slower, making it prohibitively expensive to use. Currently we support x86 and x86_64 CPUs on POSIX platforms and Windows. DynAsm also supports ARM. ARM64, MIPS, MIPS64 and PPC, so in theory we should be able to support all of the platforms that are popular for PHP deployments (given enough efforts).

https://wiki.php.net/rfc/jit

残念。

RFCによると、LuaJITプロジェクトで開発されたDynAsmを使っているんだけど、現状はx86とx86_64しか対応しないとのこと。
DynAsm自体はARM、ARM64、MIPD、MIPS64もサポートしているので、理論的にはPHPを展開する一般的な全てのプラットフォームをサポートできるはずとも書いてあるので、今後サポート対象になるよう期待してます。

t3インスタンスで改めて試したら、すんなりできました。
ビルドの手順は変わらず。

t3.nano では、JITがOnになりました!

くそー。
コマンドで確認するとこうなりました。

t4gで同じコマンド投げても、悲しいことに何も返ってきませんでした。

※2022/12/9追記:Amazon Linux 2 の Extras Library から PHP8.1 をインストールしたら、ARM系プロセッサでもJITが有効になりました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

PAGE TOP