Erlang 21

erts_alloc




erlang

erts_alloc

C लाइब्रेरी

erts_alloc

लाइब्रेरी सारांश

एक एरलंग रनटाइम सिस्टम आंतरिक मेमोरी एलोकेटर लाइब्रेरी।

विवरण

erts_alloc एक Erlang क्रम प्रणाली आंतरिक मेमोरी एलोकेटर लाइब्रेरी है। erts_alloc कई मेमोरी erts_alloc साथ Erlang रनटाइम सिस्टम प्रदान करता है।

allocators

निम्नलिखित आवंटनकर्ता उपस्थित हैं:

temp_alloc
अस्थायी आवंटन के लिए आवंटित किया गया।
eheap_alloc
एरलैंग हीप डेटा के लिए उपयोग किया जाने वाला एलोकैटर, जैसे एर्लांग प्रक्रिया ढेर।
binary_alloc
एलोकैंग बाइनरी डेटा के लिए एलोकेटर का उपयोग किया जाता है।
ets_alloc
एलोकेट डेटा के लिए उपयोग किया जाता है।
driver_alloc
ड्राइवर डेटा के लिए एलोकेटर का उपयोग किया जाता है।
literal_alloc
एलांग कोड में निरंतर शब्दों के लिए एलोकेटर का उपयोग किया जाता है।
sl_alloc
स्मृति ब्लॉकों के लिए उपयोग किया जाने वाला एलोकेटर जो अल्पकालिक होने की उम्मीद है।
ll_alloc
एलोकेटर का उपयोग मेमोरी ब्लॉकों के लिए किया जाता है जो लंबे समय तक रहने की उम्मीद करते हैं, उदाहरण के लिए, एरलांग कोड।
fix_alloc
एक तेज आबंटक जिसका उपयोग अक्सर कुछ निश्चित आकार के डेटा प्रकारों के लिए किया जाता है।
exec_alloc
देशी निष्पादन योग्य कोड के लिए HiPE एप्लिकेशन द्वारा उपयोग किया जाने वाला HiPE
std_alloc
अधिकांश मेमोरी ब्लॉकों के लिए उपयोग किया गया एलोकेटर उपरोक्त वर्णित अन्य आवंटनकर्ताओं में से किसी के माध्यम से आवंटित नहीं किया गया है।
sys_alloc
यह सामान्य रूप से विशिष्ट OS पर उपयोग किया जाने वाला डिफ़ॉल्ट malloc कार्यान्वयन है।
mseg_alloc
एक स्मृति खंड आवंटनकर्ता। इसका उपयोग अन्य आवंटनकर्ताओं द्वारा मेमोरी सेगमेंट को आवंटित करने के लिए किया जाता है और यह केवल उन सिस्टमों पर उपलब्ध होता है, जिनमें mmap सिस्टम कॉल होता है। नष्ट होने से पहले मेमोरी सेगमेंट को एक खंड कैश में कुछ समय के लिए रखा जाता है। जब सेगमेंट आवंटित किए जाते हैं, तो नए सेगमेंट बनाने के बजाय यदि संभव हो तो कैश्ड सेगमेंट का उपयोग किया जाता है। यह सिस्टम कॉल की संख्या को कम करने के लिए।

sys_alloc , literal_alloc और temp_alloc हमेशा सक्षम होते हैं और अक्षम नहीं किए जा सकते। exec_alloc केवल तभी उपलब्ध है जब इसकी आवश्यकता है और इसे अक्षम नहीं किया जा सकता है। mseg_alloc को हमेशा सक्षम किया जाता है और इसका उपयोग करने वाला एक आवंटन सक्षम होता है। अन्य सभी आवंटन enabled or disabled जा सकते हैं। डिफ़ॉल्ट रूप से सभी आवंटन सक्षम हैं। जब कोई एलोकेटर अक्षम किया जाता है, तो अक्षम sys_alloc बजाय sys_alloc का उपयोग किया जाता है।

erts_alloc लाइब्रेरी के साथ मुख्य विचार अलग-अलग मेमोरी क्षेत्रों में अलग-अलग उपयोग किए जाने वाले मेमोरी ब्लॉक को कम मेमोरी फ़्रेग्मेंटेशन को प्राप्त करना है। मेमोरी ब्लॉक के लिए एक अच्छा फिट ढूंढने में कम प्रयास लगाने से जो अक्सर कम आवंटित किए गए की तुलना में आवंटित किए जाते हैं, एक प्रदर्शन लाभ प्राप्त किया जा सकता है।

आवंटन_ ढांचा रूपरेखा

आंतरिक रूप से alloc_util नामक एक फ्रेम का उपयोग alloc_util को लागू करने के लिए किया जाता है। sys_alloc और mseg_alloc इस ढांचे का उपयोग नहीं करते हैं, इसलिए निम्नलिखित उन पर लागू नहीं होता है।

एक आवंटनकर्ता कई क्षेत्रों का प्रबंधन करता है, जिन्हें वाहक कहा जाता है, जिसमें मेमोरी ब्लॉक रखे जाते हैं। एक वाहक को या तो एक अलग मेमोरी सेगमेंट ( mseg_alloc माध्यम से आवंटित) में रखा जाता है, या हीप सेगमेंट में ( sys_alloc माध्यम से आवंटित)।

  • मल्टीब्लॉक वाहक कई ब्लॉकों के भंडारण के लिए उपयोग किए जाते हैं।

  • सिंगलब्लॉक वाहक का उपयोग एक ब्लॉक के भंडारण के लिए किया जाता है।

  • एकलब्लॉक कैरियर थ्रेशोल्ड ( sbct ) पैरामीटर के मान से बड़े ब्लॉक सिंगलब्लॉक कैरियर में रखे जाते हैं।

  • ब्लॉक जो पैरामीटर sbct के मान से छोटे होते हैं उन्हें sbct कैरियर में रखा जाता है।

आम तौर पर एक आवंटनकर्ता "मुख्य मल्टीब्लॉक वाहक" बनाता है। मुख्य मल्टीब्लॉक वाहक कभी नहीं निपटे जाते हैं। मुख्य मल्टीब्लॉक वाहक का आकार पैरामीटर mmbcs के मूल्य से निर्धारित होता है।

mseg_alloc माध्यम से आवंटित mseg_alloc वाहक के आकार निम्नलिखित मापदंडों के आधार पर तय mseg_alloc जाते हैं:

  • सबसे बड़े lmbcs वाहक आकार ( lmbcs ) के मूल्य
  • सबसे छोटा smbcs वाहक आकार ( smbcs )
  • mbcgs वाहक विकास चरण ( mbcgs )

यदि nc एक एलोकेटर द्वारा प्रबंधित mseg_alloc कैरियर्स (मुख्य मल्टीब्लॉक कैरियर को छोड़कर) की वर्तमान संख्या है, तो इस एलोकेटर द्वारा आवंटित अगले mseg_alloc कैरियर का आकार लगभग smbcs+nc*(lmbcs-smbcs)/mbcgs जब nc <= mbcgs , और lmbcs जब nc > mbcgs । यदि पैरामीटर sbct का मान पैरामीटर sbct के मान से बड़ा है, तो आबंटक को lmbcs कैरियर बनाने पड़ सकते हैं जो पैरामीटर lmbcs के मान से बड़े होते हैं। Mseg_alloc के माध्यम से आवंटित सिंगलब्लॉक वाहक पूरे पृष्ठों के आकार के होते हैं।

sys_alloc माध्यम से आवंटित वाहक के आकार का sys_alloc वाहक आकार ( ycs ) पैरामीटर के मान के आधार पर किया जाता है। एक वाहक का आकार अनुरोध को संतुष्ट करने वाले पैरामीटर ycs के मूल्य के कम से कम गुणकों की संख्या है।

मुक्त ब्लॉकों का तालमेल हमेशा तुरंत किया जाता है। मुक्त ब्लॉकों में सीमा टैग (हेडर और फुटर) का उपयोग किया जाता है, जो निरंतर तालमेल के लिए समय की जटिलता बनाता है।

एक आवंटनकर्ता द्वारा मल्टीब्लॉक वाहकों के लिए उपयोग की जाने वाली मेमोरी आवंटन रणनीति को पैरामीटर का उपयोग करके कॉन्फ़िगर किया जा सकता है। निम्नलिखित रणनीतियाँ उपलब्ध हैं:

सर्वोत्तम योग्य

रणनीति: अनुरोधित ब्लॉक आकार को संतुष्ट करने वाले सबसे छोटे ब्लॉक का पता लगाएं।

कार्यान्वयन: एक संतुलित बाइनरी सर्च ट्री का उपयोग किया जाता है। समय जटिलता एन लॉग करने के लिए आनुपातिक है, जहां एन मुक्त ब्लॉकों के आकार की संख्या है।

पता क्रम सबसे उपयुक्त है

रणनीति: अनुरोधित ब्लॉक आकार को संतुष्ट करने वाले सबसे छोटे ब्लॉक का पता लगाएं। यदि कई ब्लॉक मिलते हैं, तो सबसे कम पते वाले को चुनें।

कार्यान्वयन: एक संतुलित बाइनरी सर्च ट्री का उपयोग किया जाता है। समय जटिलता एन लॉग करने के लिए आनुपातिक है, जहां एन मुक्त ब्लॉकों की संख्या है।

पता क्रम पहले फिट

रणनीति: अनुरोधित ब्लॉक आकार को संतुष्ट करने वाले सबसे कम पते वाले ब्लॉक का पता लगाएं।

कार्यान्वयन: एक संतुलित बाइनरी सर्च ट्री का उपयोग किया जाता है। समय जटिलता एन लॉग करने के लिए आनुपातिक है, जहां एन मुक्त ब्लॉकों की संख्या है।

पता क्रम पहले फिट वाहक सबसे अच्छा फिट

रणनीति: सबसे कम पते वाले वाहक का पता लगाएं जो अनुरोधित ब्लॉक आकार को संतुष्ट कर सकता है, फिर "सर्वश्रेष्ठ फिट" रणनीति का उपयोग करके उस वाहक के भीतर एक ब्लॉक ढूंढें।

कार्यान्वयन: संतुलित बाइनरी खोज पेड़ों का उपयोग किया जाता है। समय जटिलता एन लॉग करने के लिए आनुपातिक है, जहां एन मुक्त ब्लॉकों की संख्या है।

पता क्रम पहले फिट वाहक पता क्रम सबसे अच्छा फिट

रणनीति: सबसे कम पते के साथ वाहक का पता लगाएं जो अनुरोधित ब्लॉक आकार को संतुष्ट कर सकता है, फिर "पता क्रम" सबसे उपयुक्त रणनीति का उपयोग करके उस वाहक के भीतर एक ब्लॉक ढूंढें।

कार्यान्वयन: संतुलित बाइनरी खोज पेड़ों का उपयोग किया जाता है। समय जटिलता एन लॉग करने के लिए आनुपातिक है, जहां एन मुक्त ब्लॉकों की संख्या है।

आयु क्रम पहले फिट वाहक पता क्रम पहले फिट

रणनीति: सबसे पुराने वाहक का पता लगाएं जो अनुरोधित ब्लॉक आकार को संतुष्ट कर सकता है, फिर "पता क्रम पहले फिट" रणनीति का उपयोग करके उस वाहक के भीतर एक ब्लॉक ढूंढें।

कार्यान्वयन: एक संतुलित बाइनरी सर्च ट्री का उपयोग किया जाता है। समय जटिलता एन लॉग करने के लिए आनुपातिक है, जहां एन मुक्त ब्लॉकों की संख्या है।

आयु क्रम पहले फिट वाहक सबसे अच्छा फिट

रणनीति: सबसे पुराने वाहक का पता लगाएं जो अनुरोधित ब्लॉक आकार को संतुष्ट कर सकता है, फिर "सर्वश्रेष्ठ फिट" रणनीति का उपयोग करके उस वाहक के भीतर एक ब्लॉक ढूंढें।

कार्यान्वयन: संतुलित बाइनरी खोज पेड़ों का उपयोग किया जाता है। समय जटिलता एन लॉग करने के लिए आनुपातिक है, जहां एन मुक्त ब्लॉकों की संख्या है।

आयु क्रम पहले फिट वाहक पता क्रम सबसे अच्छा फिट

रणनीति: सबसे पुराने वाहक का पता लगाएं जो अनुरोधित ब्लॉक आकार को संतुष्ट कर सकता है, फिर "पता क्रम सबसे उपयुक्त" रणनीति का उपयोग करके उस वाहक के भीतर एक ब्लॉक ढूंढें।

कार्यान्वयन: संतुलित बाइनरी खोज पेड़ों का उपयोग किया जाता है। समय जटिलता एन लॉग करने के लिए आनुपातिक है, जहां एन मुक्त ब्लॉकों की संख्या है।

अच्छी तरह से फिट

रणनीति: सबसे अच्छा फिट खोजने की कोशिश करें, लेकिन एक सीमित खोज के दौरान पाए जाने वाले सर्वोत्तम फिट के लिए समझौता करें।

कार्यान्वयन: कार्यान्वयन एक अच्छा फिट उपवास खोजने के लिए अधिकतम ब्लॉक खोज गहराई (प्रत्येक सूची में) के साथ अलग-अलग मुक्त सूचियों का उपयोग करता है। जब अधिकतम ब्लॉक खोज की गहराई छोटी होती है (डिफ़ॉल्ट 3 से), तो इस कार्यान्वयन में एक समय जटिलता होती है जो निरंतर होती है। अधिकतम ब्लॉक खोज गहराई को पैरामीटर mbsd का उपयोग करके कॉन्फ़िगर किया जा सकता है।

एक दौरा

रणनीति: एक फिट की खोज न करें, यह देखने के लिए केवल एक नि: शुल्क ब्लॉक का निरीक्षण करें कि क्या यह अनुरोध को संतुष्ट करता है। यह रणनीति केवल अस्थायी आवंटन के लिए उपयोग करने के लिए है।

कार्यान्वयन: एक मुक्त सूची में पहले ब्लॉक का निरीक्षण करें। यदि यह अनुरोध को संतुष्ट करता है, तो इसका उपयोग किया जाता है, अन्यथा एक नया वाहक बनाया जाता है। कार्यान्वयन में एक समय जटिलता है जो निरंतर है।

ईआरटीएस 5.6.1 के रूप में एमुलेटर इस रणनीति का उपयोग करने से इनकार करता है temp_alloc अलावा अन्य temp_alloc । ऐसा इसलिए है क्योंकि यह केवल अन्य आवंटनकर्ताओं के लिए समस्या पैदा करता है।

ऊपर वर्णित साधारण आवंटनकर्ताओं के अलावा, कुछ विशिष्ट डेटा प्रकारों के लिए कुछ पूर्व-आवंटनकर्ताओं का उपयोग किया जाता है। ये पूर्व-आवंटनकर्ता रनटाइम सिस्टम शुरू होने पर कुछ निश्चित डेटा प्रकारों के लिए निश्चित मात्रा में मेमोरी आवंटित करते हैं। जब तक पूर्व-आवंटित मेमोरी उपलब्ध है, तब तक इसका उपयोग किया जाता है। जब कोई पूर्व-आवंटित मेमोरी उपलब्ध नहीं होती है, तो मेमोरी को सामान्य आवंटनकर्ताओं में आवंटित किया जाता है। ये पूर्व-आवंटनकर्ता आम आवंटनकर्ताओं की तुलना में आम तौर पर बहुत तेज़ होते हैं, लेकिन केवल सीमित संख्या में अनुरोधों को पूरा कर सकते हैं।

सिस्टम फ्लैग इफेक्टिंग erts_alloc

चेतावनी

यदि आप सुनिश्चित हैं कि आप क्या कर रहे हैं तो केवल इन झंडों का उपयोग करें। अनुपयुक्त सेटिंग्स गंभीर प्रदर्शन में गिरावट और यहां तक ​​कि ऑपरेशन के दौरान किसी भी समय सिस्टम क्रैश का कारण बन सकती हैं।

मेमोरी एलोकेटर सिस्टम झंडे में निम्नलिखित सिंटैक्स होते हैं: +M<S><P> <V> , जहां <S> एक सबसिस्टम की पहचान करने वाला एक अक्षर है, <P> एक पैरामीटर है, और <V> उपयोग करने का मान है। झंडे को एर्लांग एमुलेटर ( erl(1) ) को कमांड-लाइन तर्क के रूप में पारित किया जा सकता है।

विशिष्ट आबंटकों को प्रभावित करने वाले सिस्टम झंडे में <S> रूप में एक बड़ा अक्षर है। आवंटनकर्ताओं के लिए निम्नलिखित पत्रों का उपयोग किया जाता है:

  • B: binary_alloc
  • D: std_alloc
  • E: ets_alloc
  • F: fix_alloc
  • H: eheap_alloc
  • I: literal_alloc
  • L: ll_alloc
  • M: mseg_alloc
  • R: driver_alloc
  • S: sl_alloc
  • T: temp_alloc
  • X: exec_alloc
  • Y: sys_alloc

Mseg_alloc के विन्यास के लिए झंडे

+MMamcbf <size>

पूर्ण अधिकतम कैश खराब फिट (किलोबाइट में)। मेमोरी खंड कैश में एक खंड का पुन: उपयोग नहीं किया जाता है यदि इसका आकार इस पैरामीटर के मूल्य से अधिक के साथ अनुरोधित आकार से अधिक है। 4096

+MMrmcbf <ratio>

सापेक्ष अधिकतम कैश खराब फिट (प्रतिशत में)। मेमोरी सेगमेंट कैश में एक सेगमेंट का पुन: उपयोग नहीं किया जाता है यदि इसका आकार अनुरोधित आकार से अधिक है, जो सापेक्ष अधिकतम कैश के साथ फिट किए गए आकार के खराब प्रतिशत से अधिक है। 20 कमी।

+MMsco true|false

super carrier केवल ध्वज सेट करता है। true अवहेलना। जब एक सुपर वाहक का उपयोग किया जाता है और यह ध्वज true होता true , mseg_alloc केवल सुपर वाहक में वाहक बनाता है। ध्यान दें कि alloc_util फ्रेमवर्क sys_alloc कैरियर बना sys_alloc है, इसलिए यदि आप चाहते हैं कि सभी वाहक सुपर कैरियर में बनाए जाएं, तो आप sys_alloc वाहक का उपयोग करके भी निष्क्रिय करना चाहते हैं। जब ध्वज false , तो mseg_alloc सुपर वाहक के बाहर वाहक बनाने की कोशिश करता है जब सुपर वाहक भरा होता है।

ध्यान दें

इस ध्वज को false सेट करना सभी प्रणालियों पर समर्थित नहीं है। झंडे को तब नजरअंदाज कर दिया जाता है।

+MMscrfsd <amount>

super carrier आरक्षित मुक्त खंड वर्णनकर्ता। 65536 । यह पैरामीटर सुपर कैरियर द्वारा उपयोग किए जाने वाले मुफ्त सेगमेंट डिस्क्रिप्टर के लिए मेमोरी की मात्रा निर्धारित करता है। यदि सिस्टम मुक्त खंड वर्णनकर्ताओं के लिए आरक्षित मेमोरी से बाहर निकलता है, तो अन्य मेमोरी का उपयोग किया जाता है। यह हालांकि विखंडन मुद्दों का कारण बन सकता है, इसलिए आप यह सुनिश्चित करना चाहते हैं कि ऐसा कभी न हो। उपयोग किए जाने वाले फ्री सेगमेंट डिस्क्रिप्टर की अधिकतम राशि erlang:system_info({allocator, mseg_alloc}) को कॉल करने से परिणाम के erts_mmap टपल भाग से पुनर्प्राप्त की जा सकती है।

+MMscrpm true|false

super carrier रिजर्व फिजिकल मेमोरी फ्लैग सेट करता है। true अवहेलना। जब यह ध्वज true होता true , तो भौतिक मेमोरी पूरे सुपर वाहक के लिए एक बार बनाए जाने पर आरक्षित होती है। आरक्षण उसके बाद अपरिवर्तित है। जब यह ध्वज false सेट किया जाता false , तो निर्माण पर सुपर वाहक के लिए केवल वर्चुअल पता स्थान आरक्षित होता है। सिस्टम सुपर वाहक में वाहक कृतियों पर भौतिक स्मृति को आरक्षित करने का प्रयास करता है, और सुपर वाहक में वाहक विनाश पर भौतिक स्मृति को अनारक्षित करने का प्रयास करता है।

ध्यान दें

भौतिक मेमोरी का आरक्षण क्या मतलब है, अत्यधिक ऑपरेटिंग सिस्टम पर निर्भर करता है, और यह कैसे कॉन्फ़िगर किया गया है। उदाहरण के लिए, लिनक्स पर अलग-अलग मेमोरी ओवरकॉमिट सेटिंग्स व्यवहार को काफी बदल देती हैं।

इस झंडे को false स्थापित करना संभवतः सभी प्रणालियों पर समर्थित नहीं है। झंडे को तब नजरअंदाज कर दिया जाता है।

+MMscs <size in MB>

सुपर कैरियर आकार (एमबी में) सेट करता है। डिफ़ॉल्ट 0 , यानी, सुपर वाहक डिफ़ॉल्ट रूप से अक्षम है। सुपर कैरियर वर्चुअल एड्रेस स्पेस में एक बड़ा निरंतर क्षेत्र है। mseg_alloc हमेशा सुपर कैरियर में नए वाहक बनाने की कोशिश करता है अगर यह मौजूद है। ध्यान दें कि alloc_util फ्रेमवर्क sys_alloc वाहक बना sys_alloc है। अधिक जानकारी के लिए, +MMsco देखें।

+MMmcs <amount>

अधिकतम कैश्ड सेगमेंट। स्मृति खंड कैश में संग्रहीत मेमोरी सेगमेंट की अधिकतम संख्या। वैध सीमा [0, 30] 10 चूक।

Sys_alloc के विन्यास के लिए झंडे

+MYe true

sys_alloc सक्षम करता है।

ध्यान दें

sys_alloc को अक्षम नहीं किया जा सकता।

+MYm libc

उपयोग करने के लिए malloc लाइब्रेरी। केवल libc उपलब्ध है। libc मानक libc malloc कार्यान्वयन को सक्षम बनाता है। डिफ़ॉल्ट रूप से libc का उपयोग किया जाता है।

+MYtt <size>

ट्रिम सीमा आकार (किलोबाइट में)। यह ढेर के शीर्ष पर मुफ्त मेमोरी की अधिकतम मात्रा है (जिसे sbrk द्वारा आवंटित किया गया है) जिसे sbrk द्वारा रखा गया है (ऑपरेटिंग सिस्टम के लिए जारी नहीं किया गया है)। जब ढेर के शीर्ष पर मुक्त मेमोरी की मात्रा ट्रिम दहलीज से अधिक हो जाती है, तो sbrk इसे ( sbrk कॉल sbrk ) जारी करता है। ट्रिम दहलीज किलोबाइट में निर्दिष्ट है। 128 कमी।

ध्यान दें

यह ध्वज तभी प्रभावी होता है जब एमुलेटर को जीएनयू सी लाइब्रेरी के साथ जोड़ा जाता है, और इसके malloc कार्यान्वयन का उपयोग करता है।

+MYtp <size>

शीर्ष पैड का आकार (किलोबाइट में)। यह अतिरिक्त मेमोरी की मात्रा है जो sbrk द्वारा आवंटित की जाती है जब ऑपरेटिंग सिस्टम से अधिक मेमोरी प्राप्त करने के लिए sbrk कहा जाता है। चूक 0

ध्यान दें

यह ध्वज तभी प्रभावी होता है जब एमुलेटर को जीएनयू सी लाइब्रेरी के साथ जोड़ा जाता है, और इसके malloc कार्यान्वयन का उपयोग करता है।

आबंटन के आधार पर आवंटन के लिए झंडे

यदि u का उपयोग सबसिस्टम आइडेंटिफ़ायर के रूप में किया जाता है (जो कि, <S> = u ) है, तो alloc_util आधार पर सभी एलोकेटर प्रभावित होते हैं। यदि B , D , E , F , H , L , R , S या T को उप-पहचानकर्ता के रूप में उपयोग किया जाता है, तो केवल विशिष्ट आवंटनकर्ता पहचानकर्ता ही प्रभावित होता है।

+M<S>acul <utilization>|de

वाहक उपयोग सीमा का परित्याग करें। मान्य <utilization> प्रतिशत में उपयोग का प्रतिनिधित्व करते हुए सीमा [0, 100] में एक पूर्णांक है। जब एक उपयोग मूल्य> 0 का उपयोग किया जाता है, तो आवंटन उदाहरणों को मल्टीब्लॉक वाहक को छोड़ने की अनुमति दी जाती है। यदि de (डिफॉल्ट इनेबल) को एक <utilization> बजाय पास किया जाता है, तो अनुशंसित गैर-जीरो यूसेज वैल्यू का उपयोग किया जाता है। चुना गया मूल्य एलोकेटर प्रकार पर निर्भर करता है और इसे ईआरटीएस संस्करणों के बीच बदला जा सकता है। de दोष, लेकिन इसे भविष्य में बदला जा सकता है।

वाहक का परित्याग तब किया जाता है जब आवंटन उदाहरण में स्मृति उपयोग उपयोग मूल्य से नीचे गिर जाता है। एक बार जब एक वाहक को छोड़ दिया जाता है, तो इसमें कोई नया आवंटन नहीं किया जाता है। जब एक आबंटक का उदाहरण बढ़े हुए मल्टीब्लॉक वाहक की आवश्यकता को प्राप्त करता है, तो यह पहले एक ही आवंटनकर्ता प्रकार के आवंटनकर्ता उदाहरण से एक परित्यक्त वाहक को लाने की कोशिश करता है। यदि कोई परित्यक्त वाहक नहीं लाया जा सकता है, तो यह एक नया खाली वाहक बनाता है। जब एक परित्यक्त वाहक लाया गया हो, तो यह एक सामान्य वाहक के रूप में कार्य करेगा। इस सुविधा का उपयोग की गई as पर विशेष आवश्यकता है। केवल रणनीतियों aoff , aoffcbf , aoffcaobf , ageffcaoff एम, ageffcbf और ageffcaobf परित्यक्त वाहक का समर्थन करते हैं।

इस सुविधा को सक्षम करने के multiple thread specific instances भी आवश्यकता होती है। इस सुविधा को सक्षम करते समय, यदि पहले से ही सक्षम नहीं है, तो कई थ्रेड-विशिष्ट इंस्टेंसेस सक्षम होते हैं, और यदि वर्तमान कार्यनीति परित्यक्त वाहक का समर्थन नहीं करता है, तो aoffcbf रणनीति सक्षम है। इस सुविधा को सभी alloc_util पर आधारित किया जा सकता है, जो कि alloc_util आधार पर किया alloc_util है, केवल temp_alloc को छोड़कर (जो व्यर्थ होगा)।

+M<S>acfml <bytes>

वाहक मुक्त ब्लॉक न्यूनतम सीमा का त्याग करें। एक मान्य <bytes> ब्लॉक आकार सीमा का प्रतिनिधित्व करने वाला एक सकारात्मक पूर्णांक है। एक वाहक में सबसे बड़ा मुक्त ब्लॉक कम से कम bytes बड़ा होना चाहिए, वाहक को छोड़ दिया जाना चाहिए। डिफ़ॉल्ट शून्य है लेकिन भविष्य में बदला जा सकता है।

acul भी देखें।

+M<S>acnl <amount>

वाहक संख्या सीमा का परित्याग करें। एक मान्य <amount> एक सकारात्मक पूर्णांक है जो प्रति आवंटित आवृत्ति पर अधिकतम परित्यक्त वाहक की संख्या का प्रतिनिधित्व करता है। 1000 तक की चूक जो व्यावहारिक रूप से सीमा को अक्षम कर देगी, लेकिन भविष्य में इसे बदला जा सकता है।

acul भी देखें।

+M<S>as bf|aobf|aoff|aoffcbf|aoffcaobf|ageffcaoff|ageffcbf|ageffcaobf|gf|af

आवंटन की रणनीति। निम्नलिखित रणनीतियाँ मान्य हैं:

  • bf (सबसे उपयुक्त)
  • aobf (पता क्रम सबसे उपयुक्त)
  • aoff (पता क्रम पहले फिट)
  • aoffcbf (एड्रेस ऑर्डर फर्स्ट फिट कैरियर बेस्ट फिट)
  • aoffcaobf (पता क्रम पहले फिट वाहक पता क्रम सबसे अच्छा फिट)
  • ageffcaoff (आयु क्रम पहले फिट वाहक पता क्रम पहले फिट)
  • ageffcbf (आयु क्रम पहले फिट वाहक सबसे अच्छा फिट)
  • ageffcaobf (आयु क्रम पहले फिट वाहक पता क्रम सबसे अच्छा फिट)
  • gf (अच्छा फिट)
  • af (एक फिट)

अनुभाग में आवंटन रणनीतियों का विवरण देखें।

+M<S>asbcst <size>

निरपेक्ष सिंगलब्लॉक कैरियर थ्रेशोल्ड (किलोबाइट में) सिकुड़ जाता है। जब एक mseg_alloc सिंगलब्लॉक वाहक में स्थित ब्लॉक सिकुड़ जाता है, तो अप्रयुक्त मेमोरी की मात्रा इस सीमा से कम होने पर, वाहक को अपरिवर्तित छोड़ दिया जाता है, अन्यथा वाहक सिकुड़ जाता है। rsbcst भी देखें

+M<S>atags true|false

प्रत्येक आवंटित ब्लॉक में एक छोटा सा टैग जोड़ता है जिसमें बुनियादी जानकारी होती है कि यह क्या है और इसे किसने आवंटित किया है। इस जानकारी का निरीक्षण करने के लिए instrument मॉड्यूल का उपयोग करें।

रन ओवरहेड सक्षम होने पर प्रति आवंटन एक शब्द है। यह भविष्य में किसी भी समय बदल सकता है।

binary_alloc और driver_alloc लिए डिफ़ॉल्ट true , और अन्य driver_alloc प्रकारों के लिए false

+M<S>e true|false

आवंटनकर्ता को सक्षम करता है <S>

+M<S>lmbcs <size>

सबसे बड़ा ( mseg_alloc ) mseg_alloc वाहक आकार (किलोबाइट में)। The alloc_util Framework खंड में mseg_alloc लिए mseg_alloc वाहकों के आकार कैसे तय किए गए हैं, mseg_alloc विवरण देखें। 32-बिट यूनिक्स शैली के ओएस पर यह सीमा निर्धारित नहीं की जा सकती है> 128 एमबी।

+M<S>mbcgs <ratio>

( mseg_alloc ) mseg_alloc वाहक विकास चरण। The alloc_util Framework खंड में mseg_alloc लिए mseg_alloc वाहकों के आकार कैसे तय किए गए हैं, mseg_alloc विवरण देखें।

+M<S>mbsd <depth>

अधिकतम ब्लॉक खोज गहराई। यह ध्वज तभी प्रभावी होता है जब आवंटन के लिए अच्छी फिट रणनीति का चयन किया जाता है। जब अच्छी फिट रणनीति का उपयोग किया जाता है, तो मुक्त ब्लॉकों को अलग-अलग मुक्त सूचियों में रखा जाता है। प्रत्येक मुक्त-सूची में एक विशिष्ट श्रेणी में आकार के ब्लॉक होते हैं। मैक्सिमम ब्लॉक खोज गहराई अनुरोध को संतुष्ट करने वाले उपयुक्त ब्लॉक की खोज के दौरान मुक्त सूची में निरीक्षण करने के लिए ब्लॉक की अधिकतम संख्या पर एक सीमा निर्धारित करती है।

+M<S>mmbcs <size>

मुख्य मल्टीब्लॉक वाहक आकार। आवंटनकर्ता <S> लिए मुख्य मल्टीब्लॉक वाहक का आकार निर्धारित करता है। मुख्य sys_alloc कैरियर को sys_alloc माध्यम से आवंटित किया गया है और इसे कभी नहीं हटाया जाता है।

+M<S>mmmbc <amount>

अधिकतम mseg_alloc वाहक। mseg_alloc द्वारा <S> mseg_alloc <S> mseg_alloc माध्यम से आवंटित mseg_alloc वाहक की अधिकतम संख्या। जब यह सीमा समाप्त हो जाती है, तो नए sys_alloc वाहक को sys_alloc माध्यम से आवंटित किया जाता है।

+M<S>mmsbc <amount>

अधिकतम mseg_alloc सिंगलब्लॉक वाहक। आवंटनकर्ता <S> द्वारा mseg_alloc माध्यम से आवंटित सिंगलब्लॉक कैरियर की अधिकतम संख्या। जब यह सीमा पूरी हो जाती है, तो नए सिंगलब्लॉक वाहक को sys_alloc माध्यम से आवंटित किया जाता है।

+M<S>ramv <bool>

Realloc हमेशा चलता रहता है। जब सक्षम किया जाता है, तो पुन: आवंटन, प्रतिलिपि, मुफ्त अनुक्रम में अधिक से अधिक अनुवाद किए जाते हैं। यह अक्सर मेमोरी के विखंडन को कम करता है, लेकिन प्रदर्शन को कम करता है।

+M<S>rmbcmt <ratio>

रिश्तेदार मल्टीब्लॉक वाहक चालन सीमा (प्रतिशत में)। जब एक मल्टीब्लॉक वाहक में स्थित एक ब्लॉक सिकुड़ जाता है, तो ब्लॉक ले जाया जाता है यदि पिछले आकार की तुलना में लौटी मेमोरी के आकार का अनुपात इस सीमा से अधिक है, अन्यथा ब्लॉक वर्तमान स्थान पर सिकुड़ गया है।

+M<S>rsbcmt <ratio>

रिलेटिव सिंगलब्लॉक कैरियर मूव थ्रेशोल्ड (प्रतिशत में)। जब एक सिंगलब्लॉक कैरियर में स्थित ब्लॉक पैरामीटर sbct के मान से छोटे आकार में सिकुड़ जाता है, तो ब्लॉक को सिंगलब्लॉक कैरियर में अपरिवर्तित छोड़ दिया जाता है यदि अप्रयुक्त मेमोरी का अनुपात इस सीमा से कम है, अन्यथा इसे मल्टीब्लॉक वाहक में स्थानांतरित किया जाता है ।

+M<S>rsbcst <ratio>

सापेक्ष एकलब्लॉक वाहक थ्रेसहोल्ड (प्रतिशत में) सिकुड़ जाता है। जब एक mseg_alloc सिंगलब्लॉक कैरियर में स्थित ब्लॉक सिकुड़ जाता है, तो अप्रयुक्त मेमोरी का अनुपात इस सीमा से कम होने पर वाहक को अपरिवर्तित छोड़ दिया जाता है, अन्यथा वाहक सिकुड़ जाता है। भी देखें asbcst

+M<S>sbct <size>

सिंगलब्लॉक कैरियर थ्रेशोल्ड (किलोबाइट में)। इस सीमा से बड़े ब्लॉक को सिंगलब्लॉक कैरियर में रखा गया है। इस दहलीज से छोटे ब्लॉक को मल्टीब्लॉक कैरियर में रखा जाता है। 32-बिट यूनिक्स स्टाइल OS पर यह थ्रेशोल्ड> 8 MB सेट नहीं किया जा सकता है।

+M<S>smbcs <size>

सबसे छोटा ( mseg_alloc ) mseg_alloc वाहक आकार (किलोबाइट में)। The alloc_util Framework खंड में mseg_alloc लिए mseg_alloc वाहकों के आकार कैसे तय किए गए हैं, mseg_alloc विवरण देखें।

+M<S>t true|false

आवंटनकर्ता के कई, थ्रेड-विशिष्ट उदाहरण। यह विकल्प केवल SMP समर्थन के साथ रनटाइम सिस्टम पर प्रभाव डालता है। SMP समर्थन के साथ रनटाइम सिस्टम पर डिफ़ॉल्ट व्यवहार NoSchedulers+1 उदाहरण है। प्रत्येक अनुसूचक अपने स्वयं के लॉक-फ्री इंस्टेंस का उपयोग करता है और अन्य थ्रेड्स एक सामान्य उदाहरण का उपयोग करते हैं।

ईआरटीएस 5.9 से पहले शेड्यूलर्स की तुलना में थ्रेड-विशिष्ट उदाहरणों की एक छोटी संख्या को कॉन्फ़िगर करना संभव था। हालांकि, यह संभव नहीं है।

आवंटन_टील के विन्यास के लिए झंडे

alloc_util पर आधारित सभी आवंटन प्रभावित होते हैं।

+Muycs <size>

sys_alloc वाहक आकार। sys_alloc माध्यम से आवंटित वाहक उन आकारों में आवंटित किए जाते हैं जो sys_alloc वाहक आकार के sys_alloc होते हैं। यह मुख्य मल्टीब्लॉक वाहक और एक स्मृति की कमी के दौरान आवंटित वाहक के लिए सही नहीं है, हालांकि।

+Mummc <amount>

अधिकतम mseg_alloc वाहक। अलग-अलग मेमोरी सेगमेंट में अधिकतम वाहक रखे गए हैं। जब यह सीमा पूरी हो जाती है, तो नए वाहक को sys_alloc से पुनर्प्राप्त मेमोरी में रखा जाता है।

+Musac <bool>

sys_alloc वाहकों को अनुमति दें। true अवहेलना। यदि false सेट किया गया false , तो sys_alloc वाहक को sys_alloc द्वारा कभी भी alloc_util रूपरेखा का उपयोग करके नहीं बनाया जाता है।

शाब्दिक_लेख के लिए विशेष ध्वज

+MIscs <size in MB>

literal_alloc सुपर कैरियर आकार (एमबी में)। 64-बिट आर्किटेक्चर पर Erlang कोड में शाब्दिक शब्दों के लिए आरक्षित वर्चुअल एड्रेस स्पेस की मात्रा। डिफ़ॉल्ट रूप से 1024 (जो कि, 1 जीबी) है, जो आमतौर पर पर्याप्त है। ध्वज को 32-बिट आर्किटेक्चर पर ध्यान नहीं दिया गया है।

इंस्ट्रूमेंटेशन झंडे

+M<S>atags

प्रत्येक आवंटित ब्लॉक में एक छोटा सा टैग जोड़ता है जिसमें बुनियादी जानकारी होती है कि यह क्या है और इसे किसने आवंटित किया है। अधिक पूर्ण विवरण के लिए +M<S>atags देखें।

+Mit X

भविष्य उपयोग के लिए आरक्षित। इस ध्वज का उपयोग करें।

ध्यान दें

जब एमुलेटर का इंस्ट्रूमेंटेशन सक्षम होता है, तो एमुलेटर अधिक मेमोरी का उपयोग करता है और धीमी गति से चलता है।

अन्य झंडे

+Mea min|max|r9c|r10b|r11b|config

विकल्प:

min

अक्षम किए जा सकने वाले सभी आवंटन अक्षम करता है।

max

सभी आवंटनकर्ताओं (डिफ़ॉल्ट) को सक्षम करता है।

r9c|r10b|r11b

सभी आवंटनकर्ताओं को कॉन्फ़िगर करता है क्योंकि वे संबंधित एरलांग / ओटीपी रिलीज़ में कॉन्फ़िगर किए गए थे। अंत में इन्हें हटा दिया जाएगा।

config

erts_alloc_config(3) साथ आवंटन कॉन्फ़िगरेशन बनाते समय ऐसी सुविधाएँ अक्षम की जा सकती हैं जो सक्षम नहीं हैं।

ध्यान दें

यह विकल्प केवल erts_alloc_config(3) को चलाने के दौरान उपयोग किया जाना है, कि बनाए गए कॉन्फ़िगरेशन का उपयोग करते समय।

+Mlpm all|no

भौतिक मेमोरी लॉक करें। डिफॉल्ट्स टू no , यानी कोई भी भौतिक मेमोरी लॉक नहीं है। यदि all को सेट किया जाता है, तो रनटाइम सिस्टम द्वारा किए गए सभी मेमोरी मैपिंग को भौतिक मेमोरी में बंद कर दिया जाता है। यदि all को सेट किया जाता है, तो रनटाइम सिस्टम शुरू नहीं होता है यदि यह सुविधा समर्थित नहीं है, तो उपयोगकर्ता को पर्याप्त विशेषाधिकार नहीं मिले हैं, या उपयोगकर्ता को पर्याप्त भौतिक मेमोरी लॉक करने की अनुमति नहीं है। रनटाइम सिस्टम मेमोरी की एक शर्त के साथ भी विफल हो जाता है यदि उपयोगकर्ता लॉक की गई मेमोरी की मात्रा तक पहुंच जाता है।

टिप्पणियाँ

केवल कुछ डिफ़ॉल्ट मान यहां प्रस्तुत किए गए हैं। वर्तमान में उपयोग की गई सेटिंग्स और erlang:system_info({allocator, Alloc}) की वर्तमान स्थिति के बारे में जानकारी के लिए, erlang:system_info(allocator) और erlang:system_info({allocator, Alloc})

ध्यान दें

इनमें से अधिकांश झंडे अत्यधिक कार्यान्वयन-निर्भर हैं और इन्हें पूर्व सूचना के बिना बदला या हटाया जा सकता है।

erts_alloc उस सेटिंग्स का कड़ाई से उपयोग करने के लिए बाध्य नहीं है जो इसे पारित किया गया है (यह उन्हें अनदेखा भी कर सकता है)।

erts_alloc_config(3) टूल का उपयोग erts_alloc कॉन्फ़िगरेशन के निर्माण में सहायता के लिए किया जा सकता है जो सीमित संख्या में रनटाइम परिदृश्यों के लिए उपयुक्त है।

यह भी देखें

erl(1) , erlang(3) , erts_alloc_config(3) , instrument(3)