PHP 8.4'te JIT: Performansa Gerçek Etkisi

PHP 8.4'te JIT: Performansa Gerçek Etkisi

3 dakika okuma

JIT, PHP kodunun bir bölümünü çalışma anında makine koduna çeviren derleyici. Duyurulduğundan bu yana beklenti ile gerçek kazanç arasında belirgin bir fark oluştu. Beklenti her uygulamanın hızlanmasıydı; gerçekte kazanç işin türüne sıkı biçimde bağlı.

Farkı anlamak için önce PHP'nin bir isteği nasıl çalıştırdığına bakmak gerekir.

Opcache ile JIT arasındaki fark

PHP kaynak dosyayı önce ara koda çevirir, sonra bu ara kodu çalıştırır. Opcache, çevirme adımının sonucunu bellekte tutar; böylece aynı dosya her istekte yeniden çözümlenmez. Kazanç büyüktür ve neredeyse her uygulamada geçerlidir.

JIT bir adım öteye gider ve sık çalışan ara kod parçalarını makine koduna çevirir. Yani opcache çözümleme maliyetini, JIT ise yürütme maliyetini azaltır. Opcache açık değilse JIT devreye giremez.

Web isteklerinde kazanç neden sınırlı?

Tipik bir web isteğinde geçen sürenin büyük bölümü hesaplamada değil bekleme sırasında harcanır: veritabanı sorgusu, dosya okuma, dış servis çağrısı, şablon üretimi. JIT yalnızca hesaplama süresine dokunduğu için toplam üzerindeki etkisi küçük kalır.

Sorgu süresi iki yüz milisaniye olan bir sayfada, PHP tarafındaki on milisaniyenin sekize inmesi kullanıcı açısından fark edilmez. Bu tür uygulamalarda gerçek kazanç sorgu iyileştirmesi ve önbellekleme ile elde edilir.

JIT hangi işlerde fark yaratır?

  • Görüntü işleme ve piksel düzeyinde döngüler.
  • Matematiksel hesaplama, simülasyon ve sayısal analiz.
  • Sıkıştırma, şifreleme gibi yoğun döngü içeren algoritmalar.
  • Uzun süre çalışan komut satırı işleri ve kuyruk işleyicileri.

Ortak nokta şudur: iş, dış kaynağı beklemeden işlemciyi meşgul ediyorsa JIT kazanç sağlar. Bu tür işlerde iki katına yaklaşan hızlanmalar ölçülmüştür.

Yapılandırma

JIT opcache ayarları altında tanımlanır. Bellek ayrımı ve tetikleme modu belirlenir. Aşağıdaki ayar, izleme temelli modda makul bir başlangıç noktası sunar:

PHP4 satır
; php.ini
opcache.enable=1
opcache.jit_buffer_size=64M
opcache.jit=tracing

Tampon boyutu sıfır bırakıldığında JIT tamamen devre dışı kalır. Ayarların komut satırı için ayrı yapılandırılabildiği de unutulmamalıdır; web ve komut satırı çoğu kurulumda farklı yapılandırma dosyası kullanır.

Ölçmeden ayar değiştirmemek

Performans çalışmasında sıra önemlidir. Önce ölçüm yapılır, darboğazın nerede olduğu belirlenir, sonra o noktaya müdahale edilir. JIT'i açıp sonucu ölçmemek, kazancın olup olmadığını bilinmez bırakır.

Ölçüm için istek düzeyinde profil çıkaran araçlar kullanılır. Çıktıda sürenin nereye gittiği görüldüğünde, çoğu uygulamada ilk sıraya veritabanı ve dış servis çağrılarının yerleştiği ortaya çıkar.

Önce hangi iyileştirme yapılmalı?

Performans çalışmasında etkisi en büyük müdahaleler genellikle dilin kendisiyle ilgili değildir. Sıralama çoğu uygulamada şu şekilde işler: önce gereksiz sorgular kaldırılır, sonra kalan sorgular indekslenir, ardından tekrar üretilen sonuçlar önbelleğe alınır.

Döngü içinde çalışan sorgu, bu listenin en tepesindeki sorundur. Yüz satır listelenirken her satır için ayrı sorgu çalıştırmak, tek sorguyla alınabilecek veriyi yüz kat pahalı hale getirir. Bu düzeltme yapılmadan yürütme hızını artırmaya çalışmak sonuç vermez.

Önbellekleme ise en son ele alınmalıdır. Yanlış yerde kurulan önbellek, var olan sorunu gizler ve veri tutarlılığıyla ilgili yeni sorunlar üretir. Sorgu düzeltildikten sonra eklenen önbellek ise hem daha basit hem daha güvenilir olur.

Bu adımlar tamamlandıktan sonra hâlâ işlemci sınırına takılan bir iş kalıyorsa, JIT anlamlı bir seçenek haline gelir.

Kontrol listesi

  • Opcache her ortamda açık tutulur.
  • JIT yalnızca işlemci yoğun işlerde beklenti oluşturur.
  • Tampon boyutu ayarlanmadan JIT etkinleşmez.
  • Değişiklik öncesi ve sonrası ölçüm yapılır.
  • Darboğaz veritabanındaysa önce sorgu ele alınır.

İlgili yazılar

Yorumlar

Bu form reCAPTCHA ile korunur; Google Gizlilik Politikası ve Hizmet Şartları geçerlidir.

İlk yorumu sen yap.

İlgili Yazılar