34 poin oleh xguru 2022-11-29 | 2 komentar | Bagikan ke WhatsApp
  • Netflix memigrasikan Java Microservice yang CPU-Heavy dari m5.4xl (16 vCPU) ke m5.12xl (48 vCPU)
  • Karena vCPU menjadi 3 kali lipat, mereka memperkirakan peningkatan performa sekitar 3 kali, tetapi yang terjadi throughput hanya naik 25%
    • Bahkan latensi turun 50%, dan pola CPU maupun latensi justru menjadi sangat "tersendat" (Choppy)
  • Ini adalah tulisan yang merangkum perjalanan penyelesaiannya hingga ke level rendah

Proses penyelesaian

  • Diputuskan untuk membandingkan node cepat dan node lambat
  • Dengan Flame Graph dan profiling JVM (menggunakan JFR-Java Flight Recorder), perbedaannya tidak terlihat
  • Karena tidak ada hal aneh di level aplikasi/OS/JVM, mereka memeriksa PMC (Performance Monitoring Counters, PMU Counter) yang disediakan instance m5.12xl
  • Salah satu masalahnya adalah "False Sharing" - pola yang terjadi saat 2 core membaca atau menulis variabel yang tidak saling terkait tetapi berbagi line cache L1 yang sama
    • Masalah ini diselesaikan di kode JDK dengan menyisipkan byte padding yang hanya mengubah tata letak data tanpa mengubah fungsinya
  • Masalah lainnya adalah "True Sharing" - membaca dan menulis variabel yang sama dari beberapa thread/core
    • Untuk mengatasinya, mereka menghindari penulisan ke variabel bersama dan melewati secondary super class cache milik JVM
  • Setelah kedua hal itu dipatch, kecepatannya meningkat 3,5 kali dibanding sebelumnya
  • Selama menyelesaikan masalah ini, mereka juga mengetahui bug JDK-8180450 yang telah dorman selama 5 tahun

Kesimpulan

  • Ada kecenderungan untuk menganggap JVM sebagai lingkungan runtime yang sangat dioptimalkan dan mampu bersaing dengan bahasa berorientasi performa seperti C++
  • Itu benar untuk sebagian besar workload, tetapi untuk workload tertentu, performa dapat dipengaruhi bukan hanya oleh implementasi aplikasi, melainkan juga oleh implementasi JVM itu sendiri
  • Dalam kasus ini, mereka menemukan bottleneck di native code JVM dan mematch-nya, serta memanfaatkan PMC untuk meningkatkan throughput workload tersebut lebih dari 3 kali
  • Untuk masalah performa semacam ini, kemampuan memeriksa eksekusi di level mikroarsitektur CPU adalah satu-satunya solusi
  • Intel vTune memberikan insight yang berharga bahkan hanya dengan PMC inti yang diekspos pada instance seperti m5.12xl
  • Jika semua instance cloud menyediakan set PMC yang komprehensif bersama PEBS (Processor Event-Based Sampling), analisis yang lebih mendalam dapat menghasilkan peningkatan performa yang jauh lebih besar

2 komentar

 
roxie 2022-12-05

Wah, serius deh...

 
ragingwind 2022-12-05

Pasti terasa sangat memuaskan saat hipotesisnya tervalidasi lalu bisa diperbaiki.