- उच्च-प्रदर्शन मेमोरी allocator jemalloc, Meta software stack में Linux kernel और compiler के साथ एक बुनियादी component के रूप में core infrastructure की भूमिका निभाता रहा है
- पिछले कुछ वर्षों में, jemalloc development का मार्गदर्शन करने वाले मुख्य engineering principles से धीरे-धीरे दूर होने के कारण technical debt जमा होती गई और प्रगति धीमी पड़ गई
- community feedback को स्वीकार करते हुए और project founder Jason Evans सहित सदस्यों के साथ चर्चा के बाद, मूल open source repository को फिर से सक्रिय (unarchived) किया गया
- आगे चलकर technical debt को साफ करने, Huge-Page allocator में सुधार, memory efficiency बढ़ाने और AArch64 optimization पर ध्यान केंद्रित करने की योजना है
- Meta ने jemalloc की दीर्घकालिक stewardship के प्रति अपनी प्रतिबद्धता की फिर से पुष्टि की है और community के साथ सहयोग के ज़रिए project को आगे बढ़ाने की दिशा में रुख किया है
jemalloc की भूमिका और महत्व
- jemalloc एक उच्च-प्रदर्शन मेमोरी allocator है, जो Meta software stack में लगातार उच्च leverage देने वाला component रहा है
- यह hardware और ऊपर की software layers में होने वाले बदलावों के अनुसार लगातार खुद को ढालता रहा है, और Linux kernel और compiler के साथ मिलकर Meta infrastructure की स्थिरता और performance में योगदान देता है
सिद्धांतों से विचलन और आत्ममंथन
- बुनियादी software components को व्यवहारिकता और सिद्धांतों के बीच सबसे ऊँचे स्तर की कठोरता की आवश्यकता होती है
- jemalloc द्वारा प्रदान किए जाने वाले उच्च leverage के कारण अल्पकालिक लाभ लेने का प्रलोभन मौजूद रहता है, और इसे ठुकराने के लिए संगठन-स्तर की मज़बूत self-discipline की ज़रूरत होती है
- पिछले कुछ वर्षों में jemalloc development का नेतृत्व करने वाले मुख्य engineering principles से क्रमिक विचलन हुआ
- कुछ निर्णयों ने तुरंत लाभ दिया, लेकिन उनके परिणामस्वरूप पैदा हुई technical debt ने प्रगति को बाधित किया
- community feedback को गंभीरता से लिया गया और project founder Jason Evans सहित community members के साथ बैठकें की गईं
- stewardship का jemalloc के दीर्घकालिक स्वास्थ्य पर क्या प्रभाव पड़ा, इस पर गहराई से विचार किया गया और approach में बदलाव साझा किया गया
- technical debt हटाने और jemalloc के लिए दीर्घकालिक roadmap को फिर से बनाने का काम शुरू किया गया
नया अध्याय: repository का archive हटना और आगे की योजना
- community के साथ बातचीत के परिणामस्वरूप, मूल jemalloc open source repository को फिर से सक्रिय (unarchived) किया गया
- Meta अब भी project की steward की भूमिका निभा सकेगा, और maintenance burden कम करने तथा codebase को modernize करने पर ध्यान देगा
- technical debt की सफाई: refactoring और सुधारों के माध्यम से इसे सभी users के लिए efficient, reliable और उपयोग में आसान बनाए रखना
- Huge-Page allocator (HPA): Transparent Hugepages (THP) का बेहतर उपयोग करके CPU efficiency बढ़ाना
- memory efficiency: packing, caching और purging mechanisms में सुधार के ज़रिए memory efficiency को optimize करना
- AArch64 optimization: ARM64 platform पर default state में अच्छा performance सुनिश्चित करना
community के साथ सहयोग को मज़बूत करना
- Meta ने कार्रवाइयों के ज़रिए भरोसा बनाने पर ज़ोर दिया और jemalloc के स्वस्थ विकास को लक्ष्य बताया
- community की feedback और भागीदारी का स्वागत किया गया, और साथ मिलकर jemalloc का भविष्य बनाने की उम्मीद जताई गई
- open source ecosystem में sustainable collaboration और विकास को आगे बढ़ाया जाएगा
1 टिप्पणियां
Hacker News की राय
Facebook में काम करते समय, jemalloc के purging mechanism को बेहतर बनाने के लिए kernel patch मेंटेन किया था
kernel या security community में यह खास लोकप्रिय नहीं था, लेकिन benchmarks में इसकी efficiency अच्छी थी
समस्या यह थी कि memory को किसी दूसरे thread को फिर से allocate करते समय zeroing होता था, जिससे cache locality और performance पर असर पड़ता था
उसी security domain के भीतर memory को reuse करते समय यह अनावश्यक व्यवहार था, लेकिन ‘security domain’ की सीमा कहाँ तक मानी जाए इस पर सहमति बनाना मुश्किल था
संबंधित चर्चा Linux Kernel mailing list में है
HHVM में उस patch के लागू होने से पहले और बाद में व्यापक benchmarks किए गए थे, लेकिन system level पर कोई statistically significant अंतर नहीं था
कुछ microbenchmarks में सुधार रहा होगा, लेकिन पूरे system performance पर असर नहीं था, इसलिए उसे kernel में शामिल नहीं किया गया
हाल में Microsoft के mimalloc को LD_PRELOAD के साथ इस्तेमाल करके 1GB huge page का उपयोग किया
memory-intensive program में लगभग 20% performance improvement मिला
Linux पर open source MS library से performance बढ़ाना थोड़ा अजीब लगता है
लगता है malloc क्षेत्र में और competition होना चाहिए
ऐप्स Rust में लिखे गए थे, और ज़्यादातर statically linked थे
उदाहरण के लिए app1 में glibc की तुलना में tcmalloc ने RSS 35% घटाया और processing time 30% कम किया
पूरे नतीजे tcmalloc repository के आधार पर टेस्ट किए गए थे
Turbo Pascal तक में memory allocator को सीधे define करने के लिए API दिया गया था
अंततः “one size fits all” approach की सीमा बहुत पहले से साफ थी
हर request के लिए एक pool बनता था, और request खत्म होने पर पूरा pool एक साथ free हो जाता था
लगता है malloc में भी इस दिशा में आगे बढ़ने की काफी गुंजाइश है
अगर allocation pattern सरल हो, तो third-party malloc से भी बेहतर नतीजे मिल सकते हैं
लोग malloc को किसी जादुई black box की तरह देखते हैं, लेकिन वास्तव में वह इतना असाधारण नहीं है
हमारी टीम ने 2 साल पहले glibc malloc से jemalloc पर migration किया था
Python service में memory usage 15~20% कम हुआ
लेकिन container environment में oversize_threshold को tune करना महत्वपूर्ण था — गलत setting पर OOM हो सकता है
जानना चाहूँगा कि long-running services में jemalloc और mimalloc की तुलना वाला कोई benchmark है क्या
संबंधित पढ़ाई के लिए Jemalloc Postmortem और
Jemalloc Repositories Are Archived की सिफारिश है
क्या यह बदलाव कहीं global memory shortage की वजह से तो नहीं, यह जानने की जिज्ञासा है
शायद “memory allocator बदलकर सालाना लाखों डॉलर की बचत” जैसी गणना निकल सकती है
सिर्फ 0.1% efficiency improvement से भी हर महीने 1 लाख डॉलर की बचत संभव थी
बचत का मुख्य कारण cooling cost (HVAC) और कम servers खरीदने की ज़रूरत थी
अब memory saving भी बड़ा मुद्दा है, लेकिन तब ऐसा नहीं था
अगर असर हज़ारों servers पर पड़े, तो छोटा सुधार भी बड़ी संख्या बन जाता है
ऐसी quantitative improvement culture वहाँ जमी हुई है
सिर्फ 10% तेज़ होना भी LLM competition में बढ़त दे सकता है
performance improvement के लिए incentive बहुत बड़ा है
ऑस्ट्रेलिया में low-level programming करते हुए layoff का सामना किया था
मुझे ऐसे problems सुलझाना सच में पसंद है, लेकिन local market ज़्यादातर React CRUD पर केंद्रित है, यह अफ़सोस की बात है
World Bank funding वाले startup project में Ruby + jemalloc को production में deploy किया था
speed और memory efficiency में साफ़ सुधार दिखा, जिससे AWS cost काफ़ी घट गई
यह 8 साल पहले की बात है, इसलिए हैरानी होती है कि jemalloc अब तक standard क्यों नहीं बन पाया
जो systems पहले से production में चल रहे हों, उन्हें बदलना आसान नहीं होता, भले ही फ़ायदा स्पष्ट हो
jemalloc का इस्तेमाल करके memory leak के कारण को trace करने का एक मामला भी है
GOV.UK tech blog post देखें
Meta ने अपने fork में चल रहे काम को बड़े पैमाने पर merge किया है
इसे PR #2863 में देखा जा सकता है
jemalloc की timeline या history को समेटने वाला कोई material है क्या, यह जानना चाहूँगा
यह एक open source project है, फिर भी Meta के पास इसकी lead क्यों है, यह सवाल है
Jemalloc Postmortem blog देखें
बाकी 2 भी संभव है कि निजी रूप से Meta से जुड़े हों