2013-02-03 45 views
27

perf tutorials के अनुसार, perf stat हार्डवेयर काउंटर का उपयोग कर कैश मिस की रिपोर्ट करना है। हालांकि, मेरे सिस्टम (अप-टू-डेट आर्क लिनक्स) पर, यह नहीं है:रिपोर्ट कैश मिस क्यों नहीं करता है?

[[email protected] goog]$ perf stat ./hash 

Performance counter stats for './hash': 

    869.447863 task-clock    # 0.997 CPUs utilized   
      92 context-switches   # 0.106 K/sec     
      4 cpu-migrations   # 0.005 K/sec     
     1,041 page-faults    # 0.001 M/sec     
2,628,646,296 cycles     # 3.023 GHz      
    819,269,992 stalled-cycles-frontend # 31.17% frontend cycles idle 
    132,355,435 stalled-cycles-backend # 5.04% backend cycles idle 
4,515,152,198 instructions    # 1.72 insns per cycle   
             # 0.18 stalled cycles per insn 
1,060,739,808 branches     # 1220.015 M/sec     
    2,653,157 branch-misses    # 0.25% of all branches   

    0.871766141 seconds time elapsed 

मुझे क्या याद आ रही है? मैंने पहले से ही मैन पेज और वेब की खोज की है, लेकिन कुछ भी स्पष्ट नहीं मिला।

संपादित करें: मेरा सीपीयू एक इंटेल i5 2300K है, यदि यह मायने रखता है।

+0

यह आपके हार्डवेयर काउंटर पर निर्भर करता है। मैंने कभी भी 'perf' का उपयोग नहीं किया है, लेकिन मैंने 'PAPI' (http://icl.cs.utk.edu/PAPI/) का उपयोग किया है और यह पता लगाने के लिए उपलब्ध हार्डवेयर काउंटरों को जांचना संभव है कि आप क्या प्राप्त कर सकते हैं आपका सीपीयू – SamGamgee

+2

'perf stat-d' आज़माएं - यह कुछ कैश घटनाओं की रिपोर्ट करेगा। रिकॉर्ड/रिपोर्ट मेमोरी इवेंट्स के लिए नया 'perf mem' टूल भी देखें - http://www.linuxtag.org/2013/fileadmin/www.linuxtag.org/slides/Arnaldo_Melo_-_Linux__perf__tools__Overview_and_Current_Developments.e323.pdf स्लाइड 10 और http में प्रलेखित : //man7.org/linux/man-pages/man1/perf-mem.1.html – osgx

+1

osgx, 'perf stat -d' ईवेंट मल्टीप्लेक्सिंग चालू करेगा, जो कभी-कभी गलत दरों की रिपोर्ट कर सकता है। प्रति रन 5-7 एचडब्ल्यू घटनाओं को मैन्युअल रूप से चुनना बेहतर है; और केवल ऐसी घटनाओं के नाम प्राप्त करने के लिए perf stat -d का उपयोग करें। इंटेल के लिए अन्य तरीका - https://github.com/andikleen/pmu-tools – osgx

उत्तर

39

मेरे सिस्टम पर, Intel Xeon X5570 @ 2.93 GHz मैं abl था ई उन घटनाओं को स्पष्ट रूप से इस

perf stat -B -e cache-references,cache-misses,cycles,instructions,branches,faults,migrations sleep 5 
Performance counter stats for 'sleep 5': 

     10573 cache-references            
      1949 cache-misses    # 18.434 % of all cache refs  
     1077328 cycles     # 0.000 GHz      
     715248 instructions    # 0.66 insns per cycle   
     151188 branches              
      154 faults              
      0 migrations             

    5.002776842 seconds time elapsed 

की तरह, घटनाओं के डिफ़ॉल्ट सेट का अनुरोध कैश घटनाओं को शामिल नहीं किया अपने परिणामों का मिलान करके कैश संदर्भ और छूट जाए रिपोर्ट करने के लिए perf stat प्राप्त करने के लिए, मैं नहीं जानता कि क्यों

perf stat -B sleep 5 

Performance counter stats for 'sleep 5': 

     0.344308 task-clock    # 0.000 CPUs utilized   
      1 context-switches   # 0.003 M/sec     
      0 CPU-migrations   # 0.000 M/sec     
      154 page-faults    # 0.447 M/sec     
     977183 cycles     # 2.838 GHz      
     586878 stalled-cycles-frontend # 60.06% frontend cycles idle 
     430497 stalled-cycles-backend # 44.05% backend cycles idle 
     720815 instructions    # 0.74 insns per cycle   
             # 0.81 stalled cycles per insn 
     152217 branches     # 442.095 M/sec     
      7646 branch-misses    # 5.02% of all branches   

    5.002763199 seconds time elapsed 
+0

से toplev.py को आजमाएं, धन्यवाद, यह सहायक था। मुझे लगता है कि उन्होंने कब्जे वाले कार्यक्रमों का डिफ़ॉल्ट सेट बदलना होगा। –

+0

अच्छा, मैं सोच रहा था कि यह हमेशा जानकारी रिकॉर्ड करना अजीब था .. यह दृष्टिकोण तेज़ है :) – SamGamgee

+0

प्रश्न के अंदर एक प्रश्न, पेफ आउटपुट –

3

मैंने perf को समझने की कोशिश करने में कुछ मिनट बिताए हैं। मैंने पहली रिकॉर्डिंग द्वारा कैश-मिस और फिर डेटा की रिपोर्टिंग (perf टूल्स) की रिपोर्ट की।

perf list 

उदाहरण के लिए, पिछले स्तर के-कैश लोड जांचें को आप इस

perf record -e LLC-loads-misses ./your_program 

की तरह घटना LLC-loads-misses उपयोग करने के लिए तो रिपोर्ट चाहते हैं याद करते हैं:

घटनाओं की एक सूची देखने के लिए परिणाम

perf report -v 
7

the latest source code में, डिफ़ॉल्ट घटना फिर से cache-misses और cache-references शामिल नहीं है:

struct perf_event_attr default_attrs[] = { 

    { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_TASK_CLOCK  }, 
    { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_CONTEXT_SWITCHES }, 
    { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_CPU_MIGRATIONS  }, 
    { .type = PERF_TYPE_SOFTWARE, .config = PERF_COUNT_SW_PAGE_FAULTS  }, 

    { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_CPU_CYCLES  }, 
    { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_STALLED_CYCLES_FRONTEND }, 
    { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_STALLED_CYCLES_BACKEND }, 
    { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_INSTRUCTIONS  }, 
    { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_BRANCH_INSTRUCTIONS }, 
    { .type = PERF_TYPE_HARDWARE, .config = PERF_COUNT_HW_BRANCH_MISSES  }, 

}; 

तो मा n और अधिकांश वेब अब तक पुराने हैं।