Erlang 21

instrument




erlang

instrument

मॉड्यूल

साधन

मॉड्यूल सारांश

इंस्ट्रूमेंटेशन के लिए विश्लेषण और उपयोगिता कार्य

विवरण

मॉड्यूल instrument में एरलंग रनटाइम सिस्टम में संसाधन उपयोग का अध्ययन करने के लिए समर्थन शामिल है। वर्तमान में, केवल मेमोरी के आवंटन का अध्ययन किया जा सकता है।

ध्यान दें

ध्यान दें कि यह पूरा मॉड्यूल प्रयोगात्मक है, और प्रतिनिधित्व के साथ-साथ कार्यक्षमता का उपयोग भविष्य में बदलने की संभावना है।

जानकारी का प्रकार

block_histogram() = tuple()

ब्लॉक आकार का एक हिस्टोग्राम जहां प्रत्येक अंतराल की ऊपरी सीमा पहले की तुलना में दोगुनी होती है।

पहले अंतराल के ऊपरी हिस्से को हिस्टोग्राम वापस करने वाले फ़ंक्शन द्वारा प्रदान किया जाता है, और अंतिम अंतराल में कोई ऊपरी सीमा नहीं होती है।

allocation_summary() =
{HistogramStart :: integer() >= 0,
UnscannedSize :: integer() >= 0,
Allocations ::
#{Origin :: atom() =>
#{Type :: atom() => block_histogram() }}}

उनके Origin और Type द्वारा समूहीकृत (उनके हेडर सहित) आवंटित ब्लॉक आकार का सारांश।

Origin आम तौर पर एनआईएफ या ड्राइवर है जो ब्लॉक, या 'सिस्टम' को आवंटित करता है अगर यह निर्धारित नहीं किया जा सकता है।

Type आवंटन श्रेणी है जो ब्लॉक से संबंधित है, उदाहरण के लिए db_term , message या binary

यदि सिस्टम की जवाबदेही को नुकसान पहुंचाए बिना एक या एक से अधिक वाहक को पूरी तरह से स्कैन नहीं किया जा सकता है, तो UnscannedSize बाइट्स की संख्या है जिसे छोड़ दिया जाना था।

carrier_info_list() =
{HistogramStart :: integer() >= 0,
Carriers ::
[{AllocatorType :: atom(),
TotalSize :: integer() >= 0,
UnscannedSize :: integer() >= 0,
AllocatedSize :: integer() >= 0,
AllocatedCount :: integer() >= 0,
InPool :: boolean(),
FreeBlocks :: block_histogram() }]}

AllocatorType , इस वाहक को नियुक्त करने वाले एलोकेटर का प्रकार है।

TotalSize वाहक का कुल आकार है, जिसमें इसके हेडर भी शामिल हैं।

AllocatedSize आकार वाहक के आवंटित ब्लॉकों का संयुक्त आकार है, जिसमें उनके हेडर भी शामिल हैं।

AllocatedCount वाहक में आवंटित ब्लॉकों की संख्या है।

InPool है कि वाहक माइग्रेशन पूल में है या नहीं।

FreeBlocks वाहक में मुक्त ब्लॉक आकारों का एक हिस्टोग्राम है।

यदि सिस्टम की जवाबदेही को नुकसान पहुंचाए बिना वाहक को पूरी तरह से स्कैन नहीं किया जा सकता है, तो UnscannedSize बाइट्स की संख्या है जिसे छोड़ दिया जाना था।

निर्यात

आवंटन () -> {ठीक है, परिणाम} | {त्रुटि, कारण}

प्रकार

allocations(#{}) . लिए आशुलिपि allocations(#{}) .

आवंटन (विकल्प) -> {ठीक है, परिणाम} | {त्रुटि, कारण}

प्रकार

सिस्टम में सभी टैग किए गए आवंटन का एक सारांश लौटाता है, वैकल्पिक रूप से आवंटन प्रकार और अनुसूचक आईडी द्वारा फ़िल्टर किया जाता है।

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

यदि किसी निर्दिष्ट आवंटनकर्ता प्रकार पर टैग किए गए आवंटन सक्षम नहीं हैं, तो कॉल {error, not_enabled} साथ विफल हो जाएगी।

निम्नलिखित विकल्पों का उपयोग किया जा सकता है:

allocator_types

आवंटनकर्ता प्रकार जिन्हें खोजा जाएगा। सभी alloc_util लिए चूक।

scheduler_ids

अनुसूचक आईडी जिनका आवंटनकर्ता उदाहरण खोजा जाएगा। 0 का एक अनुसूचक आईडी वैश्विक उदाहरण को संदर्भित करेगा जो किसी विशेष अनुसूचक से बंधा नहीं है। सभी अनुसूचियों और वैश्विक उदाहरण के लिए चूक।

histogram_start

आवंटित ब्लॉक आकार हिस्टोग्राम में पहले अंतराल की ऊपरी सीमा। 128 की कमी।

histogram_width

आवंटित ब्लॉक आकार हिस्टोग्राम में अंतराल की संख्या। 18 से चूक।

उदाहरण:

> instrument:allocations(#{ histogram_start => 128, histogram_width => 15 }).
{ok,{128,0,
     #{udp_inet =>
           #{driver_event_state => {0,0,0,0,0,0,0,0,0,1,0,0,0,0,0}},
       system =>
           #{heap => {0,0,0,0,20,4,2,2,2,3,0,1,0,0,1},
             db_term => {271,3,1,52,80,1,0,0,0,0,0,0,0,0,0},
             code => {0,0,0,5,3,6,11,22,19,20,10,2,1,0,0},
             binary => {18,0,0,0,7,0,0,1,0,0,0,0,0,0,0},
             message => {0,40,78,2,2,0,0,0,0,0,0,0,0,0,0},
             ... }
       spawn_forker =>
           #{driver_select_data_state =>
                 {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0}},
       ram_file_drv => #{drv_binary => {0,0,0,0,0,0,1,0,0,0,0,0,0,0,0}},
       prim_file =>
           #{process_specific_data => {2,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
             nif_trap_export_entry => {0,4,0,0,0,0,0,0,0,0,0,0,0,0,0},
             monitor_extended => {0,1,0,0,0,0,0,0,0,0,0,0,0,0,0},
             drv_binary => {0,0,0,0,0,0,1,0,3,5,0,0,0,1,0},
             binary => {0,4,0,0,0,0,0,0,0,0,0,0,0,0,0}},
       prim_buffer =>
           #{nif_internal => {0,4,0,0,0,0,0,0,0,0,0,0,0,0,0},
             binary => {0,4,0,0,0,0,0,0,0,0,0,0,0,0,0}}}}}
वाहक () -> {ठीक है, परिणाम} | {त्रुटि, कारण}

प्रकार

carriers(#{}) . लिए आशुलिपि carriers(#{}) .

वाहक (विकल्प) -> {ठीक है, परिणाम} | {त्रुटि, कारण}

प्रकार

सिस्टम में सभी वाहकों का एक सारांश लौटाता है, वैकल्पिक रूप से आवंटन प्रकार और अनुसूचक आईडी द्वारा फ़िल्टर किया जाता है।

यदि निर्दिष्ट आबंटक प्रकार सक्षम नहीं हैं, तो कॉल {error, not_enabled} साथ विफल हो जाएगी।

निम्नलिखित विकल्पों का उपयोग किया जा सकता है:

allocator_types

आवंटनकर्ता प्रकार जिन्हें खोजा जाएगा। सभी alloc_util लिए चूक।

scheduler_ids

अनुसूचक आईडी जिनका आवंटनकर्ता उदाहरण खोजा जाएगा। 0 का एक अनुसूचक आईडी वैश्विक उदाहरण को संदर्भित करेगा जो किसी विशेष अनुसूचक से बंधा नहीं है। सभी अनुसूचियों और वैश्विक उदाहरण के लिए चूक।

histogram_start

मुक्त ब्लॉक आकार हिस्टोग्राम में पहले अंतराल की ऊपरी सीमा। चूक से 512।

histogram_width

मुक्त ब्लॉक आकार हिस्टोग्राम में अंतराल की संख्या। 14 से चूक।

उदाहरण:

> instrument:carriers(#{ histogram_start => 512, histogram_width => 8 }).
{ok,{512,
     [{ll_alloc,1048576,0,1048344,71,false,{0,0,0,0,0,0,0,0}},
      {binary_alloc,1048576,0,324640,13,false,{3,0,0,1,0,0,0,2}},
      {eheap_alloc,2097152,0,1037200,45,false,{2,1,1,3,4,3,2,2}},
      {fix_alloc,32768,0,29544,82,false,{22,0,0,0,0,0,0,0}},
      {...}|...]}}

यह भी देखें

erts_alloc(3) , erl(1)