« Tüm yayınlar

PHP 8'in JIT Derleyicisi: Yorumlayıcı Vergisini Nasıl Kaldırıyor

PHP 8 JIT'i, opcode'ları native koda çevirerek yorumlayıcı yükünü kaldırır. Tracing/Function JIT stratejileri ve CRTO yapılandırması ele alınıyor.

PHP'nin geleneksel çalışma modeli, kaynak kodu opcode'lara çevirip bunları Zend VM üzerinde yorumlamaya dayanır. Bu döngü her adımda dinamik tip kontrolü ve zval yönetimi gerektirdiği için, PHP'nin yıllardır taşıdığı 'yorumlayıcı vergisi' adı verilen bir performans maliyeti ortaya çıkar.

Kasım 2020'de PHP 8.0 ile gelen JIT derleyicisi, OPcache altyapısı üzerine kurularak opcode'ları doğrudan makine koduna çevirir ve CPU'nun bu kodu doğrudan çalıştırmasını sağlar. Tip çıkarımı sayesinde bir değişkenin her zaman aynı türde olduğu kanıtlanabildiğinde, JIT karmaşık zval kontrolleri yerine tek bir makine komutu üretebilir; bu da özellikle sıkı sayısal döngülerde belirgin bir hız kazancı sağlar.

PHP iki farklı JIT stratejisi sunar: fonksiyonların tamamını baştan derleyen Function JIT ve çalışma zamanında sık çalışan yolları izleyip yalnızca bunları gözlemlenen tiplere göre özelleştiren Tracing JIT. Tracing JIT, daha az bellek kullanması ve soğuk kodu gereksiz yere derlememesi nedeniyle önerilen ve varsayılan moddur.

JIT'in davranışı opcache.jit direktifiyle CRTO formatında dört haneli bir değer üzerinden yapılandırılır; ayrıca opcache.jit_buffer_size sıfırdan büyük olmadıkça JIT hiçbir zaman etkinleşmez. Bu ayrıntılar, PHP uygulamalarının çalışma zamanı performansını anlamak ve optimize etmek isteyen mühendisler için doğrudan pratik önem taşır.

» KaynakHashnode #19