34 điểm bởi xguru 2022-11-29 | 2 bình luận | Chia sẻ qua WhatsApp
  • Netflix đã di chuyển một Java microservice nặng về CPU từ m5.4xl (16 vCPU) sang m5.12xl (48 vCPU)
  • Vì số vCPU tăng gấp 3 nên họ kỳ vọng hiệu năng cũng sẽ tăng xấp xỉ 3 lần, nhưng thực tế thông lượng chỉ tăng 25%
    • Thậm chí độ trễ còn giảm 50%, và cả mẫu CPU lẫn độ trễ đều trở nên rất "giật cục" (choppy)
  • Bài viết này tổng hợp hành trình tìm cách giải quyết vấn đề đó, đi sâu xuống tới mức rất thấp

Quá trình xử lý

  • Họ quyết định so sánh node nhanh với node chậm
  • Flame Graph và profiling JVM (sử dụng JFR-Java Flight Recorder) không cho thấy được sự khác biệt
  • Vì không có gì bất thường ở mức ứng dụng/OS/JVM, họ xem xét PMC (Performance Monitoring Counters, bộ đếm giám sát hiệu năng) mà instance m5.12xl cung cấp
  • Một trong các vấn đề là "False Sharing" - mẫu xảy ra khi 2 core đọc hoặc ghi các biến không liên quan nhưng lại dùng chung cùng một dòng cache L1
    • Họ giải quyết việc này trong mã JDK bằng cách chèn các byte đệm để thay đổi layout dữ liệu mà không đổi chức năng
  • Một vấn đề khác là "True Sharing" - cùng một biến bị nhiều thread/core đọc và ghi
    • Để giải quyết, họ tránh ghi vào biến dùng chung và đi vòng qua secondary super class cache của JVM
  • Sau khi vá cả hai điểm này, tốc độ tăng 3,5 lần so với ban đầu
  • Trong quá trình xử lý, họ cũng phát hiện ra JDK-8180450, một bug đã nằm im suốt 5 năm

Kết luận

  • Mọi người thường có xu hướng xem JVM là một môi trường runtime được tối ưu hóa rất cao, có thể cạnh tranh với các ngôn ngữ thiên về hiệu năng như C++
  • Điều đó đúng với phần lớn workload, nhưng với một số workload cụ thể, hiệu năng có thể bị ảnh hưởng không chỉ bởi cách triển khai của ứng dụng mà còn bởi chính cách triển khai của JVM
  • Trong trường hợp này, họ đã dùng PMC để tìm ra điểm nghẽn trong native code của JVM và vá nó, nhờ đó nâng thông lượng của workload này lên hơn 3 lần
  • Với kiểu vấn đề hiệu năng như vậy, khả năng kiểm tra việc thực thi ở mức vi kiến trúc CPU là lời giải duy nhất
  • Intel vTune vẫn cung cấp những insight rất có giá trị chỉ với các PMC cốt lõi được lộ ra trên các instance như m5.12xl
  • Nếu mọi instance trên cloud đều cung cấp bộ PMC đầy đủ cùng với PEBS (Processor Event-Based Sampling), thì việc phân tích sâu hơn có thể mang lại mức cải thiện hiệu năng còn lớn hơn nhiều

2 bình luận

 
roxie 2022-12-05

Wow, rốt cuộc là...

 
ragingwind 2022-12-05

Chắc hẳn lúc giả thuyết được kiểm chứng và vấn đề được sửa thì rất phấn khích.