रोमन गुशचिन (एक फेसबुक सॉफ्टवेयर इंजीनियर) Registro लिनक्स कर्नेल विकास सूची में, स्लैब कंट्रोलर मेमोरी मैपिंग एप्लिकेशन को पैच का एक सेट (एक मेमोरी कंट्रोलर)।
नया नियंत्रक उल्लेखनीय है मेमोरी पेज स्तर से स्लैब अकाउंट को कर्नेल ऑब्जेक्ट स्तर पर ले जाकर, प्रत्येक समूह के लिए अलग स्लैब कैश आवंटित करने के बजाय, अलग-अलग समूहों सी के बीच स्लैब पेज साझा करना संभव बनाता है।
रोमन ने पाया कि वह मौजूदा स्लैब मेमोरी कंट्रोलर में "बहुत गंभीर दोष" कहता है जो इन दिनों cgroups के साथ कम उपयोग की ओर जाता है।
“वास्तविक कारण मौजूदा डिज़ाइन कम स्लैब का उपयोग सरल है: स्लैब पृष्ठों का उपयोग विशेष रूप से मेमोरी पूल द्वारा किया जाता है।
यदि cgroup द्वारा किए गए एक निश्चित आकार के कुछ ही आवंटन हैं, या यदि cgroup हटाए जाने के बाद कुछ सक्रिय ऑब्जेक्ट्स बचे हैं, या cgroup में एक एकल थ्रेडेड एप्लिकेशन है जो किसी भी कर्नेल ऑब्जेक्ट्स को मुश्किल से आवंटित कर रहा है, लेकिन हर बार एक नए सीपीयू पर: इन सभी मामलों में, परिणामी स्लैब का उपयोग बहुत कम है।
यदि किमीम अकाउंटिंग अक्षम है, तो कर्नेल अन्य आबंटन के लिए स्लैब पृष्ठों पर मुफ्त स्थान का उपयोग कर सकता है। «
प्रस्तावित स्लैब मेमोरी कंट्रोलर पिछले एक साल में रोमानो गुशिन के रूप में काफी आशाजनक था दक्षता बढ़ाता है स्लैब के उपयोग के लिए, उपयोग की गई मेमोरी का आकार कम करें 30-45% तक स्लैब के लिए और कुल कर्नेल मेमोरी खपत को काफी कम करें।
इसके अलावा, लागू किए गए पैच ने संकेत दिया है फेसबुक पहले से ही अपने सर्वर पर उत्पादन में कोड का उपयोग कर रहा था और था फ्रंट-एंड वेब सर्वर के लिए ~ 650-700MB + की बचत, डेटाबेस कैशिंग और डीएनएस सर्वर, अन्य पुरस्कारों के बीच।
गैर-मोबाइल स्लैब की संख्या को कम करके, स्मृति विखंडन को कम करने के क्षेत्र में एक सकारात्मक प्रभाव भी देखा जाता है। नया मेमोरी कंट्रोलर अकाउंटिंग स्लैब के लिए कोड को सरल बनाता है और गतिशील सृजन और प्रत्येक समूह के लिए स्लैब कैश को हटाने के लिए जटिल एल्गोरिदम की आवश्यकता नहीं है।
नए कार्यान्वयन में स्मृति के लिए सभी cgroups स्लैब कैश का एक सामान्य सेट का उपयोग करते हैं, और स्लैब कैश के जीवन काल को अब cgroup के माध्यम से सेट की गई मेमोरी की कमी के जीवनकाल से नहीं जोड़ा जाता है।
नए स्लैब नियंत्रक में लागू किए गए अधिक सटीक संसाधन लेखांकन को सैद्धांतिक रूप से सीपीयू को अधिक लोड करना चाहिए, लेकिन व्यवहार में अंतर नगण्य निकला।
विशेष रूप से नए स्लैब ड्राइवर का इस्तेमाल फेसबुक सर्वर पर कई महीनों से किया जा रहा है ऑपरेशन में जो विभिन्न प्रकार के भारों को संभालते हैं, और अब तक कोई महत्वपूर्ण प्रतिगमन का पता नहीं चला है।
पैच में अर्ध-स्वतंत्र भागों के एक जोड़े होते हैं, जो स्लैब के मेमोरी कंट्रोलर के बाहर भी उनका उपयोग पा सकते हैं:
- उपपृष्ठ लोड एपीआई, जिसका उपयोग भविष्य में उन वस्तुओं को गिनने के लिए किया जा सकता है जो एक पृष्ठ का आकार नहीं हैं, उदाहरण के लिए प्रति व्यक्ति आवंटन
- Mem_cgroup_ptr API, जहाँ पॉइंटर्स एक मेमेक में गिना जाता है, का पुन: उपयोग अन्य वस्तुओं के कुशल रिप्रेंटिंग के लिए किया जा सकता है, उदाहरण के लिए पेजकेच।
एक ही समय में, स्मृति की खपत में उल्लेखनीय कमी आई है- कुछ मेजबानों पर 1 जीबी तक मेमोरी को सहेजना संभव था, लेकिन यह संकेतक काफी हद तक लोड की प्रकृति पर निर्भर करता है, RAM का कुल आकार, CPU की मात्रा और मेमोरी के साथ काम करने की विशेषताएं।
प्रत्येक मेमोरी cgroup के लिए kmem_caches का एक अलग सेट बनाने के बजाय, दो वैश्विक सेट का उपयोग किया जाता है: रूट सेट बेशुमार और रूट समूह cgroup असाइनमेंट के लिए, और अन्य सभी असाइनमेंट के लिए दूसरा सेट। यह व्यक्तिगत kmem_caches के जीवनकाल प्रबंधन को सरल बनाने की अनुमति देता है।
अंत में, यदि आप 19 पैच के नए सेट को जानने में रुचि रखते हैं तो यह सूची में पाया जा सकता है कर्नेल मेल.