- Netflix ย้าย Java Microservice ที่กิน CPU หนักจาก m5.4xl (16 vCPU) ไปเป็น m5.12xl (48 vCPU)
- เนื่องจากจำนวน vCPU เพิ่มเป็น 3 เท่า จึงคาดว่าประสิทธิภาพน่าจะเพิ่มขึ้นราว 3 เท่า แต่กลับพบว่าสถานการณ์จริงคือ throughput เพิ่มขึ้นเพียง 25%
- แถม latency ยังลดลง 50% และทั้งรูปแบบการใช้ CPU กับ latency ก็ยิ่งมีอาการ "สะดุด" (Choppy) อย่างชัดเจน
- บทความนี้สรุปเส้นทางการแก้ปัญหานี้ลงไปถึงระดับล่างอย่างละเอียด
ขั้นตอนการแก้ปัญหา
- เริ่มจากตัดสินใจเปรียบเทียบโหนดที่เร็วกับโหนดที่ช้า
- แต่ Flame Graph และการทำ JVM profiling (โดยใช้ JFR-Java Flight Recorder) ไม่สามารถบอกความแตกต่างได้
- เมื่อไม่พบความผิดปกติในระดับแอป/OS/JVM จึงหันไปดู PMC (Performance Monitoring Counters, PMU Counter) ที่อินสแตนซ์ m5.12xl มีให้
- ปัญหาหนึ่งคือ "False Sharing" — รูปแบบที่เกิดขึ้นเมื่อ 2 คอร์อ่านหรือเขียนตัวแปรที่ไม่เกี่ยวข้องกัน แต่ดันใช้ L1 cache line เดียวกัน
- แก้ปัญหานี้ในโค้ด JDK โดยไม่เปลี่ยนฟังก์ชันการทำงาน แต่แทรก padding byte เพื่อเปลี่ยน data layout
- อีกปัญหาคือ "True Sharing" — การที่หลายเธรด/คอร์อ่านและเขียนตัวแปรเดียวกัน
- เพื่อแก้ปัญหานี้ จึงหลีกเลี่ยงการเขียนลง shared variable และ bypass secondary super class cache ของ JVM
- เมื่อแพตช์ทั้งสองจุดแล้ว ความเร็วเพิ่มขึ้น 3.5 เท่าจากเดิม
- ระหว่างแก้ปัญหานี้ ยังได้พบกับบั๊ก JDK-8180450 ที่ถูกปล่อยทิ้งไว้เฉย ๆ มา 5 ปี
บทสรุป
- มักมีแนวโน้มจะมองว่า JVM เป็น runtime environment ที่ถูกปรับแต่งมาอย่างหนักจนแข่งขันกับภาษาที่เน้นประสิทธิภาพอย่าง C++ ได้
- สำหรับ workload ส่วนใหญ่นั้นเป็นจริง แต่สำหรับ workload บางประเภท ประสิทธิภาพอาจได้รับผลไม่ใช่แค่จากการอิมพลีเมนต์ของแอปพลิเคชันเท่านั้น แต่รวมถึงการอิมพลีเมนต์ของ JVM เองด้วย
- ในกรณีนี้ มีการใช้ PMC เพื่อค้นหาและแพตช์คอขวดใน native code ของ JVM จนทำให้ throughput ของ workload นี้เพิ่มขึ้นมากกว่า 3 เท่า
- สำหรับปัญหาประสิทธิภาพลักษณะนี้ ความสามารถในการตรวจสอบการทำงานในระดับ CPU microarchitecture คือทางออกเพียงหนึ่งเดียว
- Intel vTune ให้ข้อมูลเชิงลึกที่มีคุณค่าได้ แม้จะมีเพียง PMC หลัก ๆ ที่เปิดให้ใช้บนอินสแตนซ์อย่าง m5.12xl
- หากอินสแตนซ์ทั้งหมดบนคลาวด์เปิดให้ใช้ชุด PMC แบบครอบคลุมพร้อม PEBS (Processor Event-Based Sampling) ก็จะสามารถวิเคราะห์เชิงลึกได้มากขึ้น และอาจเพิ่มประสิทธิภาพได้อีกมาก
2 ความคิดเห็น
โห อะไรกันเนี่ย...
คงรู้สึกสะใจมากเลยตอนที่สมมติฐานได้รับการพิสูจน์และแก้ไขได้สำเร็จ