34 पॉइंट द्वारा xguru 2022-11-29 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • Netflix ने CPU-heavy Java Microservice को m5.4xl(16 vCPU) से m5.12xl(48 vCPU) पर माइग्रेट किया
  • vCPU 3 गुना होने के कारण लगभग 3 गुना performance improvement की उम्मीद थी, लेकिन throughput सिर्फ 25% बढ़ा
    • यहाँ तक कि latency 50% घट गई, और CPU व latency patterns दोनों ही बहुत ज़्यादा 'टूटी-फूटी' (Choppy) हो गईं
  • इसे हल करने के लिए किए गए सफ़र को low-level तक व्यवस्थित करने वाला लेख

समाधान प्रक्रिया

  • तेज़ node और धीमे node की तुलना करने का फ़ैसला किया
  • Flame Graph और JVM profiling (JFR-Java Flight Recorder का उपयोग) से कोई अंतर पता नहीं चला
  • app/OS/JVM स्तर पर कुछ असामान्य नहीं मिला, इसलिए m5.12xl instance द्वारा दिए गए PMC(Performance Monitoring Counters, PMU Counter) को देखा गया
  • समस्याओं में से एक थी "False Sharing" - जब 2 core एक ही L1 cache line को साझा करने वाले असंबंधित variables को पढ़ते या लिखते हैं, तब बनने वाला pattern
    • JDK code में functionality बदले बिना, data layout में padding bytes डालकर इस समस्या को हल किया गया
  • एक दूसरी समस्या थी "True Sharing" - एक ही variable को कई thread/core द्वारा पढ़ना और लिखना
    • इसे हल करने के लिए shared variable पर लिखने से बचा गया और JVM के secondary super class cache को bypass किया गया
  • दोनों patches लागू करने पर शुरुआती स्थिति की तुलना में speed 3.5 गुना बढ़ गई
  • इस समस्या को हल करते समय 5 साल से निष्क्रिय पड़े bug JDK-8180450 के बारे में भी पता चला

निष्कर्ष

  • अक्सर JVM को C++ जैसी performance-oriented language से प्रतिस्पर्धा करने वाला अत्यधिक optimized runtime environment माना जाता है
  • ज़्यादातर workloads के लिए यह सही है, लेकिन कुछ खास workloads में असर सिर्फ application implementation से नहीं, बल्कि JVM की अपनी implementation से भी पड़ सकता है
  • इस मामले में JVM के native code में bottleneck ढूँढकर उसे patch किया गया, और उस workload का throughput 3 गुना से अधिक बढ़ाने के लिए PMC का उपयोग किया गया
  • इस तरह की performance problems में CPU microarchitecture स्तर पर execution की जाँच करने की क्षमता ही एकमात्र समाधान हो सकती है
  • Intel vTune, m5.12xl जैसे instance पर उपलब्ध मुख्य PMC के आधार पर भी काफ़ी मूल्यवान insights देता है
  • अगर cloud के सभी instance, PEBS(Processor Event-Based Sampling) के साथ व्यापक PMC set उपलब्ध कराएँ, तो और गहन analysis के ज़रिए इससे भी बड़ा performance improvement हासिल किया जा सकता है

2 टिप्पणियां

 
roxie 2022-12-05

वाह, आखिर...

 
ragingwind 2022-12-05

जब परिकल्पना सही साबित होकर उसे ठीक कर लिया गया होगा, तब काफ़ी रोमांचक लगा होगा।