2009-09-06 14 views
19

क्या कोई अच्छी मेमोरी विखंडन प्रोफाइलर्स हैं? (लिनक्स जीसीसी संस्करण अच्छा होगा)। Valgrind इसका विश्लेषण नहीं कर सकता क्योंकि यह कस्टम malloc/मुफ्त कार्यों का उपयोग करता है।मेमोरी फ्रैगमेंटेशन प्रोफाइलर

धन्यवाद, एंड्रयू

+0

आप केवल 'gdb' या अन्य डीबगर का उपयोग कर सकते हैं। –

+0

जीडीबी का उपयोग करके चलने और पूरे मेमोरी बफर के प्रोफाइल का निर्माण करने के लिए मैलोक प्रबंधित नहीं किया जा सकता है। – nos

उत्तर

1

मैं मुसीबत को समझने के लिए किसी भी उपकरण आपको पता चल सकता अपने कस्टम स्मृति प्रबंधन के खंड डेटा संरचनाओं को समझना होगा की है। आप व्यस्त वितरण (मॉलोक/फ्री में हुकिंग) प्राप्त करने में सक्षम हो सकते हैं लेकिन मुक्त वितरण (जो अनिवार्य रूप से विखंडन है) हवा में दिखाई देता है।

तो क्यों नहीं अपने कस्टम मेमोरी मैनेजर में व्यस्त/मुफ्त आंकड़े/हिस्टोग्राम जोड़ें। यदि डिब्बे को लॉग 2 (आकार) के आनुपातिक रूप से अनुक्रमित किया जाता है तो यह ओ (1) इन आंकड़ों को तब तक रखने के लिए जब आप विभाजित करते हैं और आप को आकार जानते हैं और आप लॉग 2 (आकार)

के आनुपातिक सूचकांक का उपयोग करके सीधे लुकअप द्वारा बिन पा सकते हैं।

जैसे हिस्टोग्राम बिन अंतराल

[2^n, 2^(n + 1)) ...

(जैसे आप महीन डिब्बे लॉग आधार वर्गमूल 2 (आकार का उपयोग करें चाहते हैं) जो कर सकते हैं x86 [बिट स्कैन, तुलना, सेट, एड] पर 4 पूर्णांक निर्देशों के साथ गणना की जा सकती है)

उचित बिन आकारों का एक और सेट उपयोग करने के लिए follo हैं विंग ओपन अंतराल

[2^एन, 2^एन + 2^(एन -1)), [2^एन + 2^(एन -1), 2^(एन + 1)) ...

फिर आसानी से गण्य [बिट स्कैन, पाली, और, जोड़ने])

+0

वह एक कस्टम आवंटक का उल्लेख नहीं करता है। यह इतना नहीं है कि किसी को उदा। एक उपकरण लिखा है जो लिनक्स पर glibc आवंटक की आंतरिक संरचनाओं को चला सकता है। – nos

+0

तो "कस्टम malloc/मुक्त कार्यों" में "कस्टम" क्या मतलब है? – pgast

+3

'कस्टम' वाल्ग्रिंड को संदर्भित करता है - यह वाल्ग्रिंड के लिए मॉलोक विखंडन को मापने के लिए मूर्खतापूर्ण होगा क्योंकि वाल्ग्रिंड डिफ़ॉल्ट आवंटक को प्रतिस्थापित करता है (आप असली आवंटक को मापना चाहते हैं, न कि एक वाल्ग्रिंड हुक इन करें) – nos

0

nedmalloc एक बहुत अच्छा कस्टम संभाजक, है स्रोत, विखंडन से बचने के लिए अनुकूलित के साथ आता है।

मैं इसे प्लग कर दूंगा, और विखंडन आंकड़ों के लिए अपने आंतरिक लॉगिंग को देखना शुरू कर दूंगा।

+0

nedmalloc तेज़ करने के लिए एक शानदार तरीका दिखता है कार्यक्रम, लेकिन यह बहुत सारे काम किए बिना विखंडन प्रोफाइलिंग समस्या को हल करने के करीब नहीं आता है। जानकारी के लिए धन्यवाद, मैं गंभीरता से स्विच करने पर विचार कर रहा हूं। – Andrew

+0

विचार यह था कि ए) नेडमॉलोक विखंडन को अच्छी तरह से संभालता है, इसलिए इसकी एक समस्या कम है, बी) यह ट्यूनिंग और स्रोत कोड में बनाया गया है, ताकि आप अपने स्वयं के विश्लेषण को मेट्रस जैसे कुछ विस्तृत आत्मनिरीक्षण के साथ रोल कर सकें। – Justicle

5

मैं mtrace से शुरू करूंगा। जब आपके पास ट्रेस होता है, तो ग्लिब एक पर्ल स्क्रिप्ट mtrace (1) के साथ आता है जो लीक पाता है। हालांकि, ट्रेस प्रारूप को समझना आसान है, इसलिए इसे सीधे विखंडन विश्लेषण में संसाधित करना चाहिए।

+1

क्या मैट्रस लॉग के विज़ुअलाइज़र या विश्लेषक हैं? – osgx

3

मुझे डर है कि उत्तर Valgrind है।

आप वालग्रींड को बता सकते हैं कि कौन से फ़ंक्शंस आवंटन करने के लिए उपयोग किए जाते हैं और यह कोड में वाल्ग्रिंड एक्सटेंशन का उपयोग करके यह कैसे करता है (इसलिए आपको अपने एप्लिकेशन को संशोधित और पुन: संकलित करने की आवश्यकता है, लेकिन यदि आप डिबगिंग नहीं कर रहे हैं तो परिवर्तनों को संकलित करने की आवश्यकता है) विवरण Valgrind मैनुअल Memory pools: working with custom allocators में हैं।

बार जब आप इस किया है, तो आप दो उपकरण है कि आप अपने ढेर उपयोग का निदान करने की अनुमति है: पुंजक और DHAT (त्वरित अनुस्मारक, वेलग्रिंड एक सेट उपकरणों की है, यह सिर्फ एक हम सभी जानते हैं और प्यार चलाता है , डिफ़ॉल्ट रूप से, Memcheck)।

Massif "एक ढेर प्रोफाइलर है। यह मापता है कितना ढेर स्मृति अपने कार्यक्रम का उपयोग करता है। यह दोनों उपयोगी अंतरिक्ष, और पुस्तक कीपिंग और संरेखण प्रयोजनों के लिए आवंटित अतिरिक्त बाइट्स भी शामिल है। यह भी अपने कार्यक्रम के आकार को माप सकते हैं ढेर, हालांकि यह डिफ़ॉल्ट रूप से ऐसा नहीं करता है।रेखांकन ""

यह बना सकते हैं ", तो यह चित्रमय की तरह है:।

 
19.63^            ###      
    |            #       
    |            # ::      
    |            # : :::     
    |          :::::::::# : : ::    
    |          :  # : : : ::    
    |          :  # : : : : :::   
    |          :  # : : : : : ::   
    |       :::::::::::  # : : : : : : :::  
    |       :   :  # : : : : : : : :: 
    |      :::::   :  # : : : : : : : : :: 
    |      @@@: :   :  # : : : : : : : : : @ 
    |     ::@ : :   :  # : : : : : : : : : @ 
    |    :::: @ : :   :  # : : : : : : : : : @ 
    |    ::: : @ : :   :  # : : : : : : : : : @ 
    |   ::: : : @ : :   :  # : : : : : : : : : @ 
    |   :::: : : : @ : :   :  # : : : : : : : : : @ 
    |  ::: : : : : @ : :   :  # : : : : : : : : : @ 
    | :::: : : : : : @ : :   :  # : : : : : : : : : @ 
    | ::: : : : : : : @ : :   :  # : : : : : : : : : @ 
    0 +----------------------------------------------------------------------->KB  0                 29.48 

Number of snapshots: 25 
Detailed snapshots: [9, 14 (peak), 24] 

इतना ही नहीं, वहाँ एक Massif Visualizer है कि वास्तव में सुंदर रेखांकन पैदा करता

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

संबंधित मुद्दे