2012-09-26 16 views
22

मैं यह पता लगाने की कोशिश कर रहा हूं कि एक संशोधित सी प्रोग्राम अपने गैर संशोधित काउंटर भाग से तेज़ी से क्यों चल रहा है (मैं कुछ अतिरिक्त काम करने के लिए कोड की बहुत कम पंक्तियां जोड़ रहा हूं)। इस संदर्भ में, मुझे मुख्य स्पष्टीकरण (निर्देश कैश) होने के लिए "कैश प्रभाव" पर संदेह है। इस प्रकार मैं perf (https://perf.wiki.kernel.org/index.php/Main_Page) प्रोफाइलिंग टूल तक पहुंचता हूं लेकिन दुर्भाग्यवश मैं कैश मिस के संबंध में अपने आउटपुट के अर्थ को समझने में सक्षम नहीं हूं। कैश के बारे मेंपरफ कैश घटनाओं का अर्थ क्या है?

कई घटनाओं प्रदान की जाती हैं:

cache-references         [Hardware event] 
    cache-misses          [Hardware event] 
    L1-dcache-loads         [Hardware cache event] 
    L1-dcache-load-misses        [Hardware cache event] 
    L1-dcache-stores         [Hardware cache event] 
    L1-dcache-store-misses        [Hardware cache event] 
    L1-dcache-prefetches        [Hardware cache event] 
    L1-dcache-prefetch-misses       [Hardware cache event] 
    L1-icache-loads         [Hardware cache event] 
    L1-icache-load-misses        [Hardware cache event] 
    L1-icache-prefetches        [Hardware cache event] 
    L1-icache-prefetch-misses       [Hardware cache event] 
    LLC-loads           [Hardware cache event] 
    LLC-load-misses         [Hardware cache event] 
    LLC-stores           [Hardware cache event] 
    LLC-store-misses         [Hardware cache event] 
    LLC-prefetches          [Hardware cache event] 
    LLC-prefetch-misses        [Hardware cache event] 
    dTLB-loads           [Hardware cache event] 
    dTLB-load-misses         [Hardware cache event] 
    dTLB-stores          [Hardware cache event] 
    dTLB-store-misses         [Hardware cache event] 
    dTLB-prefetches         [Hardware cache event] 
    dTLB-prefetch-misses        [Hardware cache event] 
    iTLB-loads           [Hardware cache event] 
    iTLB-load-misses         [Hardware cache event] 
    branch-loads          [Hardware cache event] 
    branch-load-misses         [Hardware cache event] 
    node-loads           [Hardware cache event] 
    node-load-misses         [Hardware cache event] 
    node-stores          [Hardware cache event] 
    node-store-misses         [Hardware cache event] 
    node-prefetches         [Hardware cache event] 
    node-prefetch-misses        [Hardware cache event] 

मैं इन क्षेत्रों के बारे में स्पष्टीकरण कहाँ से मिलेगी? कैश-मिस इवेंट अन्य घटनाओं से हमेशा छोटा होता है। यह घटना क्या मापती है?

निम्नलिखित उदाहरण में एलएस बनाम 5,708 कैश-मिस बनाम 26,760 एल 1-आईस्कैच-लोड-मिस की व्याख्या कैसे करें?

perf stat -e L1-icache-load-misses ls 
caches caches~ out 

Performance counter stats for 'ls': 

      26,760 L1-icache-load-misses          

     0.002816690 seconds time elapsed 



perf stat -e cache-misses ls 
caches caches~ out 

Performance counter stats for 'ls': 

      5,708 cache-misses             

     0.002822122 seconds time elapsed 

उत्तर

17

आप को लगता है कि cache-misses घटना कैश छूट जाए (L1-dcache-load-misses, और इतने पर) के अन्य सभी प्रकार का योग है लग रहे हैं। यह वास्तव में सच नहीं है।

cache-misses घटना मेमोरी एक्सेस की संख्या का प्रतिनिधित्व करती है जिसे किसी भी कैश द्वारा परोसा नहीं जा सकता है।

मैं मानता हूं कि perf का दस्तावेज सबसे अच्छा नहीं है।

हालांकि, कोई इसे पढ़ने के बारे में बहुत कुछ सीख सकता है (मान लीजिए कि आपके पास पहले से ही एक अच्छा ज्ञान है कि सीपीयू और प्रदर्शन निगरानी इकाई कैसे काम करती है, यह स्पष्ट रूप से कंप्यूटर आर्किटेक्चर कोर्स नहीं है) perf_event_open का दस्तावेज़() फ़ंक्शन:

http://web.eece.maine.edu/~vweaver/projects/perf_events/perf_event_open.html

उदाहरण के लिए, यह पढ़कर आप देख सकते हैं कि cache-misses घटना पर्फ़ सूची से पता चला है के लिए PERF_COUNT_HW_CACHE_MISSES

22

कुछ उत्तर:

  • L1 स्तर -1 कैश है, सबसे छोटी और सबसे तेजी से एक। दूसरी तरफ LLCcache hierarchy के अंतिम स्तर को संदर्भित करता है, इस प्रकार सबसे बड़ा लेकिन धीमा कैश दर्शाता है।
  • i बनाम d डेटा कैश से निर्देश कैश को अलग करता है। केवल एल 1 इस तरह विभाजित है, अन्य कैश डेटा और निर्देशों के बीच साझा किए जाते हैं।
  • TLBtranslation lookaside buffer को संदर्भित करता है, जो भौतिक लोगों को आभासी पते मैप करते समय उपयोग किया जाता है।
  • अलग-अलग टीएलबी काउंटर इस बात पर निर्भर करते हैं कि नामित पता किसी निर्देश या कुछ डेटा को संदर्भित करता है या नहीं।
  • सभी डेटा एक्सेस के लिए, दिए गए मेमोरी लोकेशन को पढ़ा, लिखा, या प्रीफ़ेट किया गया था या नहीं (यानी बाद में पढ़ने के लिए पुनर्प्राप्त किया गया था) के आधार पर विभिन्न काउंटर रखे जाते हैं।
  • मिस की संख्या इंगित करती है कि डेटा के किसी दिए गए आइटम को कितनी बार एक्सेस किया गया था लेकिन कैश में मौजूद नहीं था।
+0

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

+0

और इसके अलावा "लोड" और "प्रीफेच" के बीच क्या अंतर है? –

+0

@ मैनुअल सेल्वा: मैं खुद को 'perf' का उपयोग नहीं कर रहा हूं, इसलिए मेरे पास थोड़ा वास्तविक अनुभव नहीं है। विशेष रूप से, मैं अनिश्चित हूं कि सभी हार्डवेयर कैश घटनाओं की तुलना में 'कैश-मिस' घटना वास्तव में क्या वर्णन करती है। मैं prefetches के बारे में पूरी तरह से निश्चित नहीं हूं: एप्लिकेशन स्तर पर prefetches को ट्रिगर करने के साथ-साथ हार्डवेयर द्वारा भविष्यवाणी की गई डेटा पहुंच के स्वचालित प्रीफ़ेच करने का एक तरीका भी है। इनमें से कोई भी या दोनों हो सकता है कि प्रीफेच काउंटर वास्तव में वर्णन करते हैं। 'perf' दस्तावेज आगे के विवरण के लिए निर्माता चश्मा का उल्लेख करता है, लेकिन मुझे अभी तक प्रासंगिक अनुभाग नहीं मिला है। – MvG

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