2011-03-27 14 views
8

मुझे स्मृति पदानुक्रम दक्षता के बारे में परिकल्पना के समूह में एक सी ++ फ़ंक्शन द्वारा लिया गया समय का मूल्यांकन करने की आवश्यकता है (उदाहरण: जब हमारे पास कैश मिस होता है, कैश हिट होता है या पृष्ठ का गलती एक सरणी), इसलिए मैं कुछ पुस्तकालयों को रखना चाहता हूं जो मुझे प्रदर्शन सारांश स्वत: उत्पन्न करने में सक्षम होने के लिए कैश मिस/पेज दोषों की गिनती करते हैं।प्रोग्रामेटिक रूप से कैश दोषों की गणना

मुझे पता है कि कैशग्रींड जैसे कुछ टूल्स हैं जो किसी दिए गए एप्लिकेशन निष्पादन पर कुछ संबंधित आंकड़े देते हैं, लेकिन मुझे लाइब्रेरी चाहिए, जैसा कि मैंने पहले ही कहा है।

संपादित करें ओह, मैं भूल गया: मैं लिनक्स का उपयोग कर रहा हूं और मुझे पोर्टेबिलिटी में दिलचस्पी नहीं है, यह एक अकादमिक बात है।

कोई भी सुझाव स्वागत है!

+1

आप साधन ऑपरेटिंग सिस्टम मदद करने के लिए कर सकते हैं कि आप इस जानकारी में से कुछ दे सकता है? वर्चुअल मेमोरी के साथ एक आधुनिक प्रीपेप्टिव मल्टीटास्किंग सिस्टम में, यह काफी संभव है कि ओएस आपके ज्ञान के बिना आपके आवेदन के लिए सभी प्रकार की पागल चीजें करेगा ... –

+0

मुझे नहीं पता, मैं लिनक्स का उपयोग कर रहा हूं। पेज दोषों के लिए मुझे पता है कि इस तरह के आंकड़े कम रुचि के हैं क्योंकि आधुनिक ओएस मेमोरी का प्रबंधन करते हैं, जैसा कि आपने कहा था: असल में, मुझे एल 2 कैश मिस में ज्यादा दिलचस्पी है, जो मुझे लगता है कि यह अधिक स्वतंत्र है ऑपरेटिंग सिस्टम प्रबंधन। – akappa

उत्तर

4

ऐसा लगता है कि मैं वही खोज रहा हूं जो मैं खोज रहा था: perf_event_open

यह आपको एक वर्चुअल और सहज ज्ञान युक्त एपीआई के माध्यम से अपने मूल्यों को लाने के लिए कुछ प्रदर्शन काउंटर प्रारंभ करने/सक्षम/अक्षम करने जैसी दिलचस्प चीजें करने देता है (यह आपको एक विशेष फ़ाइल डिस्क्रिप्टर देता है जो पहले से अनुरोधित सूचनाओं वाली संरचना को होस्ट करता है)।

यह एक लिनक्स एकमात्र समाधान और कार्यक्षमताओं कर्नेल संस्करण पर निर्भर करता है है, इसलिए सावधान रहना :)

+0

फिक्स्ड (यह अब एक मैन पेज है)। – akappa

1

कैश मिस को आसानी से गिना जा सकता है। अधिकांश टूल या प्रोफाइलर इस सुविधा को प्रदान करने वाले फ़ंक्शन में मेमोरी एक्सेस को रीडायरेक्ट करके मेमोरी एक्सेस अनुकरण करते हैं। इसका मतलब है कि इस तरह के टूल्स उन सभी जगहों पर कोड का वाद्य यंत्र करते हैं जहां मेमोरी एक्सेस किया जाता है और आपका कोड धीरे-धीरे धीमा हो जाता है। ऐसा नहीं है कि मेरा इरादा मुझे लगता है।

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

संपादित करें: मुझे यह दिलचस्प लेख मिल सकता है जो आपकी मदद कर सकता है: http://lwn.net/Articles/417979/

+0

मैं कुछ "जादू" प्रोसेसर सुविधाओं (जैसे कुछ अच्छे रजिस्टरों की तरह किसी भी तरह कैश दोषों की गणना करता है) के बारे में सोच रहा था, जो लाइब्रेरी द्वारा सारणीबद्ध है जो प्रोसेसर प्रकार को स्वतः पहचानता है और वास्तविक डेटा प्राप्त करने के लिए आवश्यक नलसाजी करता है। मुझे नहीं पता कि यह भी संभव है कि कुछ ऐसा काम करता है - उदाहरण के लिए, "जादू मान" को संदर्भ स्विच पर कॉपी किया जाना चाहिए - लेकिन यदि ऐसी लाइब्रेरी मौजूद है तो यह बहुत अच्छा होगा। – akappa

5

हाल के सीपीयू (एएमडी और इंटेल दोनों) में प्रदर्शन मॉनीटर रजिस्ट्रार हैं जिनका उपयोग इस तरह के काम के लिए किया जा सकता है। इंटेल के लिए, वे प्रोग्रामर के संदर्भ मैनुअल, वॉल्यूम 3 बी, अध्याय 30 में शामिल हैं। एएमडी के लिए, यह BIOS और कर्नेल डेवलपर गाइड में है।

किसी भी तरह से, आप कैश हिट, कैश मिस, मेमोरी अनुरोध, डेटा प्रीफेच इत्यादि जैसी चीजें गिन सकते हैं। उनके पास बहुत विशिष्ट चयनकर्ता हैं, इसलिए आप L2 पर पढ़ने की संख्या (उदाहरण के लिए) की गणना कर सकते हैं एल 1 निर्देश कैश में लाइनों को भरने के लिए कैश (जबकि एल 2 को छोड़कर एल 1 डेटा कैश में लाइन भरने के लिए पढ़ा जाता है)।

एमएसआर (मॉडल-विशिष्ट रजिस्टरों) तक पहुंच प्रदान करने के लिए एक लिनक्स कर्नेल मॉड्यूल है। ऑफहैंड, मुझे नहीं पता कि यह प्रदर्शन मॉनिटर रजिस्टरों तक पहुंच प्रदान करता है, लेकिन मुझे उम्मीद है कि यह संभवतः करता है।

+0

क्या आप कर्नेल मॉड्यूल के बारे में बात करते समय perfmon2 का जिक्र कर रहे थे? – akappa

+0

@akappa: जैसा कि मुझे याद है, इसे सिर्फ "एमएसआर कर्नेल मॉड्यूल" या ऐसा कुछ कहा जाता था। यह थोड़ी देर के बाद से मैंने इसका इस्तेमाल किया है, इसलिए यह संभव है कि मुझे सही नाम याद न हो। –

+0

ठीक है, अगर कुछ perfmon2 का उपयोग करना मुश्किल होगा तो मैं कुछ शोध करूंगा। धन्यवाद :) – akappa

3

इंटेल वीट्यून एक प्रदर्शन ट्यूनिंग टूल है जो वास्तव में आप जो पूछ रहे हैं वह करता है; बेशक यह इंटेल प्रोसेसर के साथ काम करता है, क्योंकि यह आंतरिक प्रोसेसर काउंटर तक पहुंचता है, जैसा कि Jerry Coffin द्वारा समझाया गया है, इसलिए यह शायद एएमडी प्रोसेसर पर काम नहीं करता है। यह कैश हिट/मिस, शाखा भविष्यवाणी दर आदि जैसे काउंटरों के शाब्दिक रूप से अनदेखा करता है। वास्तविक समस्या यह समझती है कि कौन से काउंटर जांचने के लिए हैं;)

+0

दिलचस्प उपकरण, लेकिन मैं प्रलेखन पढ़ रहा हूं और रनटाइम पर कुछ प्रदर्शन आंकड़े लाने के लिए कुछ एपीआई को कोई उल्लेख नहीं मिल रहा है। – akappa

+0

ईमानदारी से मैं हमेशा स्टैंड स्टैंड अकेले प्रोग्राम के रूप में उपयोग करता हूं, अगर मुझे अधिक जानकारी मिलती है तो मैं उन्हें पोस्ट करूंगा;) – sergico

+0

यही मुझे मिला: [link] (http://software.intel.com/en-us/articles/performance -टॉल्स-फॉर-सॉफ्टवेयर-डेवलपर्स-का-विट्यून-विश्लेषक-पॉज़्रेस्यूम-एपीआई-से-माइक्रोसॉफ्ट-विज़ुअल-बेसिक /) और [लिंक] (http://www.google.com/url?sa=t&source = वेब और सीडी = 1 & वेद = 0CBoQFjAA & url = http% 3A% 2F% 2Fsoftware.intel.com% 2Ffile% 2F6743 और RCT = जम्मू q = vtune% 20API और Ei = M9iQTbaDCZGbhQe41-G7Dg और यूएसजी = AFQjCNGP4BIHFHtUbNUBY4wcth9_Tmmd8A और सीएडी = RJA) – sergico

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