34 puan yazan xguru 2022-11-29 | 2 yorum | WhatsApp'ta paylaş
  • Netflix, CPU ağırlıklı bir Java mikroservisini m5.4xl (16 vCPU)’den m5.12xl (48 vCPU)’ye taşıdı
  • vCPU sayısı 3 kat olduğu için yaklaşık 3 kat performans artışı bekleniyordu, ancak iş hacmi yalnızca %25 arttı
    • Hatta gecikme %50 azaldı ve hem CPU hem de gecikme desenleri daha da "kesik kesik" hale geldi (Choppy)
  • Bunu çözmek için yürütülen çalışmaları düşük seviye ayrıntılara kadar derleyen bir yazı

Çözüm süreci

  • Hızlı düğüm ile yavaş düğümü karşılaştırmaya karar verildi
  • Flame Graph ve JVM profilleme (JFR - Java Flight Recorder kullanılarak) ile fark anlaşılamadı
  • Uygulama/OS/JVM seviyesinde anormal bir durum görülmeyince, m5.12xl instance’ının sunduğu PMC’ye (Performance Monitoring Counters, PMU Counter) bakıldı
  • Sorunlardan biri "False Sharing" idi; bu, 2 çekirdeğin aynı L1 önbellek satırını paylaşan, birbiriyle ilgisiz değişkenleri okuması veya yazması sırasında ortaya çıkan bir desen
    • JDK kodunda işlev değiştirilmeden, yalnızca veri yerleşimi değiştirilip padding byte’ları eklenerek bu sorun çözüldü
  • Bir diğer sorun ise "True Sharing" idi; aynı değişkenin birden fazla thread/çekirdek tarafından okunup yazılması
    • Bunu çözmek için paylaşılan değişkene yazmak yerine JVM’in secondary super class cache’i baypas edildi
  • Her iki yamadan sonra hız başlangıca göre 3,5 kat arttı
  • Bu sorun çözülürken 5 yıldır atıl durumda olan JDK-8180450 hatası da fark edildi

Sonuç

  • JVM’in, C++ gibi performans odaklı dillerle rekabet eden son derece optimize bir çalışma zamanı ortamı olduğu düşünülme eğilimi var
  • Bu, çoğu iş yükü için doğru olsa da bazı özel iş yüklerinde yalnızca uygulama implementasyonu değil, JVM’in kendi implementasyonu da etkili olabilir
  • Bu vakada, JVM’in native kodundaki darboğaz bulunup yamanarak ilgili iş yükünün throughput’unu 3 katın üzerine çıkarmak için PMC kullanıldı
  • Bu tür performans sorunlarında, yürütmeyi CPU mikro mimarisi seviyesinde inceleyebilme yeteneği tek çözüm olabilir
  • Intel vTune, m5.12xl gibi instance’larda açığa çıkan temel PMC’lerle bile değerli içgörüler sağlıyor
  • Buluttaki tüm instance’lar PEBS (Processor Event-Based Sampling) ile birlikte kapsamlı bir PMC seti sunsaydı, daha derin analizle çok daha büyük performans artışları elde edilebilirdi

2 yorum

 
roxie 2022-12-05

Vay be gerçekten...

 
ragingwind 2022-12-05

Hipotez doğrulanıp düzeltildiğinde oldukça heyecan verici olmuştur.