'परफैक्ट स्टेट' परिणाम में स्टेल्ड-साइकल-फ्रंटेंड और स्टेल्ड-साइकल-बैकेंड क्या हैं?


83

क्या किसी को पता है कि स्टेल्ड-साइकल-फ्रंटेंड और स्टेल्ड-साइकल-बैकएंड का परफैक्ट स्टेटस रिजल्ट में क्या मतलब है ? मैंने इंटरनेट पर सर्च किया लेकिन जवाब नहीं मिला। धन्यवाद

$ sudo perf stat ls                     

Performance counter stats for 'ls':

      0.602144 task-clock                #    0.762 CPUs utilized          
             0 context-switches          #    0.000 K/sec                  
             0 CPU-migrations            #    0.000 K/sec                  
           236 page-faults               #    0.392 M/sec                  
        768956 cycles                    #    1.277 GHz                    
        962999 stalled-cycles-frontend   #  125.23% frontend cycles idle   
        634360 stalled-cycles-backend    #   82.50% backend  cycles idle
        890060 instructions              #    1.16  insns per cycle        
                                         #    1.08  stalled cycles per insn
        179378 branches                  #  297.899 M/sec                  
          9362 branch-misses             #    5.22% of all branches         [48.33%]

   0.000790562 seconds time elapsed

मुझे यकीन नहीं है कि असली सवाल यहां क्या है। पूछ रहे हैं कि सीपीयू के आगे और पीछे क्या हैं? कृपया इसे उच्च स्तरीय परिचय पढ़ें । क्या इससे आपके सवाल का जवाब मिलता है?
अली

मैंने एक समान उत्तर खोजा और खोजा ... यह इंटेल से मुझे मिला सबसे उपयोगी संसाधन था: software.intel.com/en-us/articles/…
Jmoney38

नहीं, लगभग कोई नहीं जानता कि उन लोगों का वास्तव में क्या मतलब है। लेकिन मैनुअल (जैसा कि मैनुअल सेल्वा के उत्तर में है) को संदर्भित करते हुए इस पोस्ट के साथ संयुक्त (जो मुझे अभी तक पूरी तरह से समझ में नहीं आया है), निकटतम हैं जो मैंने पाया है: sites.utexas.edu/jdm4372/2014/06/04/…
jberryman

जवाबों:


60

सिद्धांत:

आइए इस से शुरू करें: नोवाडे के सीपीयू सुपरस्क्लेयर हैं, जिसका अर्थ है कि वे प्रति चक्र (आईपीसी) एक से अधिक निर्देशों को निष्पादित कर सकते हैं। नवीनतम इंटेल आर्किटेक्चर 4 IPC (4 x86 इंस्ट्रक्शन डिकोडर्स) तक जा सकते हैं। आइए अधिक चीजों को जटिल करने के लिए चर्चा में स्थूल / सूक्ष्म संलयन न लाएं :)।

आमतौर पर, विभिन्न संसाधन सामग्री के कारण वर्कलोड IPC = 4 तक नहीं पहुंचता है। इसका मतलब है कि सीपीयू चक्र बर्बाद कर रहा है (सॉफ्टवेयर द्वारा निर्देशों की संख्या दी गई है और सीपीयू को उन्हें यथासंभव कुछ चक्रों में निष्पादित करना है)।

हम CPU द्वारा खर्च किए जा रहे कुल चक्रों को 3 श्रेणियों में विभाजित कर सकते हैं:

  1. चक्र जहां निर्देश सेवानिवृत्त हो जाते हैं (उपयोगी कार्य)
  2. बैक-एंड (व्यर्थ) में खर्च किए जा रहे चक्र
  3. फ्रंट-एंड (व्यर्थ) में खर्च किए गए चक्र।

4 का IPC प्राप्त करने के लिए, रिटायर होने वाले चक्रों की संख्या को कुल चक्रों के करीब होना चाहिए। ध्यान रखें कि इस अवस्था में, सभी माइक्रो-ऑपरेशंस (uOps) पाइपलाइन से रिटायर हो जाते हैं और रजिस्टर / कैश में अपना परिणाम देते हैं। इस स्तर पर आपके पास 4 से अधिक uOps सेवानिवृत्त हो सकते हैं, क्योंकि यह संख्या निष्पादन बंदरगाहों की संख्या द्वारा दी गई है। यदि आपके पास 4 uOps को रिटायर करने वाले केवल 25% चक्र हैं तो आपके पास 1 का समग्र IPC होगा।

चक्र पीठ के अंत में ठप (- sqrt, reciprocals, विभाजन, आदि जैसे transcedentals) क्योंकि CPU संसाधनों के लिए प्रतीक्षा (आमतौर पर स्मृति) या लंबी विलंबता निर्देश खत्म करने के लिए किया है बर्बादी कर रहे हैं।

चक्र सामने के अंत में ठप बर्बादी कर रहे हैं क्योंकि इसका मतलब है कि फ्रंट-एंड सूक्ष्म संचालन के साथ बैक एंड फ़ीड नहीं है। इसका मतलब यह हो सकता है कि आपको निर्देश कैश में याद आ गया है, या जटिल निर्देश जो पहले से ही माइक्रो-ऑप कैश में डिकोड नहीं किए गए हैं। आमतौर पर संकलित कोड आमतौर पर इस व्यवहार को व्यक्त करता है।

एक और स्टाल कारण है शाखा की भविष्यवाणी की याद। इसे खराब अटकल कहा जाता है। उस स्थिति में uOps जारी किए जाते हैं, लेकिन उन्हें छोड़ दिया जाता है क्योंकि BP ने गलत भविष्यवाणी की है।

प्रोफाइलरों में कार्यान्वयन:

आप बीई और एफई स्टाल चक्रों की व्याख्या कैसे करते हैं?

अलग-अलग प्रोफाइल के इन मैट्रिक्स पर अलग-अलग दृष्टिकोण हैं। VTune में, श्रेणियों 1 से 3 में 100% चक्र दिए गए हैं। वह सीम उचित है क्योंकि या तो आपके पास आपका सीपीयू रुका हुआ है (कोई uOps सेवानिवृत्त नहीं हो रहा है) या तो यह उपयोगी कार्य (uOps) रिटायर कर रहा है। यहाँ और देखें: https://software.intel.com/sites/products/documentation/doclib/stdxe/2013SP1/amplifierxe/snb/index.htm

पूर्ण रूप से यह आमतौर पर नहीं होता है। यह एक समस्या है क्योंकि जब आप 125% चक्रों को सामने के अंत में रोकते देखते हैं , तो आप यह नहीं जानते कि वास्तव में इसकी व्याख्या कैसे करें। आप> 1 मीट्रिक को इस तथ्य से जोड़ सकते हैं कि 4 डिकोडर हैं, लेकिन यदि आप तर्क जारी रखते हैं, तो आईपीसी मेल नहीं खाएगा।

इससे भी बेहतर, आप नहीं जानते कि समस्या कितनी बड़ी है। 125% में से क्या? फिर # चक्रों का क्या मतलब है?

मैं व्यक्तिगत रूप से perf के BE और FE पर थोड़े संदेहास्पद चक्रों को देखता हूं और आशा करता हूं कि यह ठीक हो जाएगा।

संभवतः हम यहाँ से कोड डिबग करके अंतिम उत्तर प्राप्त करेंगे: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/tools/perf/builtin-bat.c


VTune में FE और BE के रूप में किन घटनाओं का उपयोग किया जाता है? मैनुअल ने सैंडी ब्रिज पर परफेक्ट से इवेंट पोस्ट किए। कभी-कभी डिकोडर 4 निर्देशों को डीकोड नहीं कर सकता ( realworldtech.com/sandy-bridge/4 - 3 सरल डिकोडर हैं जो जटिल कमांड को डिकोड नहीं कर सकते हैं)।
ऑक्सएक्स

यह सच है कि एक जटिल डिकोडर भी है लेकिन यह सरल निर्देशों को डिकोड करने में सक्षम हो सकता है। मैंने अपने पोस्ट को vTune काउंटरों के लिंक के साथ अपडेट किया। यह समान काउंटरों का उपयोग करता है, लेकिन मुझे लगता है कि vTune अलग तरह से संयोजित होता है।
वंद्रेई

4
Vtune सॉफ़्टवेयर का उपयोग करता है ।intel.com/en-us/articles/… "IDQ_UOPS_NOT_DELIVERED.CORE / SLOT" के रूप में "फ्रंटेंड बाउंड" और "1 - (फ्रंट-एंड बाउंड + रिटायरिंग + बैड सटेशन)" के रूप में "बैकएंड बाउंड" जहां " रिटायर हो रहा है ”।
ऑग्सक्स

1
और सैंडी ब्रिज इंटेल के अधिक उपयोग के लिए मैनुअल intel.com/content/dam/www/public/us/en/documents/manuals/... "B.3.2 श्रेणीबद्ध ऊपर से नीचे प्रदर्शन विशेषता पद्धति" "% FE_Bound = 100 में एक ही देता है * { * (1 - (FE_Bound + रिटायरिंग + Bad_Speculation)); N = 4 * CPU_CLK_UNHALTED.THREAD "
ऑग्सक्स

@osgx धन्यवाद। अब हम जानते हैं कि vTune में मेट्रिक्स का क्या मतलब है और वे 100% तक जोड़ते हैं। अगला सवाल यह है कि परफेक्ट उनकी गणना अलग तरह से क्यों करता है? क्या यह बग है या इसके पीछे कोई अर्थ है?
वाँड्रेई

43

अपने सीपीयू प्रलेखन कच्ची घटनाओं में आप द्वारा चलाए जा सकते हैं द्वारा निर्यात सामान्य घटनाओं को परिवर्तित करने के लिए:

more /sys/bus/event_source/devices/cpu/events/stalled-cycles-frontend 

यह आपको कुछ ऐसा दिखाएगा

event=0x0e,umask=0x01,inv,cmask=0x01

के अनुसार इंटेल प्रलेखन एसडीएम मात्रा 3 बी (मैं एक कोर i5-2520 है):

UOPS_ISSUED.ANY:

  • आरएएस द्वारा आरएस को जारी किए गए प्रत्येक चक्र के # चक्र में वृद्धि।
  • इस कोर के रुके हुए चक्रों को गिनने के लिए Cmask = 1, Inv = 1, Any = 1 सेट करें।

इवेंट में 0 = 0bb1, umask = 0x01 पर अनुवाद करने वाले स्टेल्ड-साइकल-बैकएंड इवेंट के लिए वही सिस्टम कहता है:

UOPS_DISPATCHED.THREAD:

  • प्रत्येक चक्र को प्रति थ्रेड को भेजने के लिए कुल संख्याओं की संख्या गिना जाता है
  • स्टाल चक्रों को गिनने के लिए Cmask = 1, INV = 1 सेट करें।

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


आपके जवाब के लिए धन्यवाद। तो रुकी हुई और बेकार के बीच क्या अंतर है?
दफन

2
रुकी हुई और बेकार समान हैं। सीपीयू बेकार है क्योंकि इसका स्टेपल निर्देश पाइपलाइन के रूप में नहीं चल रहा है।
मिलिंद डम्बरे

@Milind, क्या कोई अंतर नहीं होना चाहिए, रुका हुआ होना चाहिए "हम प्रगति नहीं करते हैं क्योंकि अगला चरण इसकी अनुमति नहीं देता है", और निष्क्रिय होना चाहिए "प्रक्रिया के लिए कुछ भी नहीं है"?
सुर्त

13

एक सीपीयू चक्र "ठप" होता है जब पाइपलाइन उस दौरान आगे नहीं बढ़ती है।

प्रोसेसर पाइपलाइन कई चरणों से बना है: फ्रंट-एंड इन चरणों का एक समूह है जो भ्रूण के लिए जिम्मेदार है और चरणों को डिकोड करता है, जबकि बैक-एंड निर्देशों को निष्पादित करता है। फ्रंट-एंड और बैक-एंड के बीच एक बफर है, इसलिए जब पूर्व को रोक दिया जाता है तो बाद में भी कुछ काम करना पड़ सकता है।

Http://paolobernardi.wordpress.com/2012/08/07/playing-around-with-perf/ से लिया गया


2
हम साइकिल से ज्यादा स्टॉल कैसे लगा सकते हैं?
ऑक्सक्स

11

इन घटनाओं के लेखक के अनुसार, वे शिथिल परिभाषित करते हैं और उपलब्ध सीपीयू प्रदर्शन काउंटरों द्वारा अनुमानित होते हैं। जैसा कि मुझे पता है, perf कई हार्डवेयर घटनाओं के आधार पर कुछ सिंथेटिक घटना की गणना के लिए सूत्रों का समर्थन नहीं करता है, इसलिए यह Intel के ऑप्टिमाइज़ेशन मैनुअल (VTune में कार्यान्वित) http: // से फ्रंट-एंड / बैक-एंड स्टाल बाउंड विधि का उपयोग नहीं कर सकता है। www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-Healthectures-optimization-manual.pdf "B.3.2 पदानुक्रमिक टॉप-डाउन वर्ण विशेषता पद्धति"

%FE_Bound = 100 * (IDQ_UOPS_NOT_DELIVERED.CORE / N ); 
%Bad_Speculation = 100 * ( (UOPS_ISSUED.ANY – UOPS_RETIRED.RETIRE_SLOTS + 4 * INT_MISC.RECOVERY_CYCLES ) / N) ; 
%Retiring = 100 * ( UOPS_RETIRED.RETIRE_SLOTS/ N) ; 
%BE_Bound = 100 * (1 – (FE_Bound + Retiring + Bad_Speculation) ) ; 
N = 4*CPU_CLK_UNHALTED.THREAD" (for SandyBridge)

कुछ बाहरी स्क्रिप्टिंग के साथ सही फ़ार्मुलों का उपयोग किया जा सकता है, जैसे कि यह एंडी क्लेन के शामू-टूल्स ( toplev.py): https://github.com/andikleen/pmu-tools (स्रोत), http://halobates.de/log/ पर किया गया था। पी / 262 (विवरण):

% toplev.py -d -l2 numademo  100M stream
...
perf stat --log-fd 4 -x, -e
{r3079,r19c,r10401c3,r100030d,rc5,r10e,cycles,r400019c,r2c2,instructions}
{r15e,r60006a3,r30001b1,r40004a3,r8a2,r10001b1,cycles}
numademo 100M stream
...
BE      Backend Bound:                      72.03%
    This category reflects slots where no uops are being delivered due to a lack
    of required resources for accepting more uops in the    Backend of the pipeline.
 .....
FE      Frontend Bound:                     54.07%
This category reflects slots where the Frontend of the processor undersupplies
its Backend.

मूल सार्वभौमिक के बजाय स्टाल्ड-साइकल-फ्रंटेंड और स्टेल्ड-साइकल-बैकएंड घटनाओं की शुरुआत करने वाले प्रतिबद्ध stalled-cycles:

http://git.kernel.org/cgit/linux/kernel/git/tip/git/commit/?id=8f62242246351b5a4bc0c1f00c0c700c8eaea128a

author  Ingo Molnar <mingo@el...>   2011-04-29 11:19:47 (GMT)
committer   Ingo Molnar <mingo@el...>   2011-04-29 12:23:58 (GMT)
commit  8f62242246351b5a4bc0c1f00c0c7003edea128a (patch)
tree    9021c99956e0f9dc64655aaa4309c0f0fdb055c9
parent  ede70290046043b2638204cab55e26ea1d0c6cd9 (diff)

पूर्ण घटनाएँ: जेनेरिक फ्रंट-एंड और बैक-एंड स्टाल्ड साइकिल ईवेंट परिभाषाएँ जोड़ें दो जेनेरिक हार्डवेयर ईवेंट जोड़ें: फ्रंट-एंड और बैक-एंड स्टेल्ड साइकल।

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

दोनों घटनाओं के प्रदर्शन को सीमित करता है: ज्यादातर फ्रंट एंड स्टॉल्स ब्रांच मिसकैरेज या इंस्ट्रूमेंट कैशेमिस के कारण होते हैं, बैकएंड स्टॉल विभिन्न संसाधन की कमी या अक्षम निर्देश शेड्यूलिंग के कारण हो सकते हैं।

फ़्रंट-एंड स्टॉल अधिक महत्वपूर्ण हैं: यदि निर्देश धारा नहीं रखी जा रही है तो कोड तेजी से नहीं चल सकता है।

एक ओवर-यूज़्ड बैक-एंड स्टॉप-एंड स्टॉल का कारण बन सकता है और इस तरह उस पर भी नज़र रखनी होगी।

सटीक रचना बहुत ही प्रोग्राम लॉजिक और इंस्ट्रक्शन मिक्स डिपेंडेंट है।

हम 'स्टाल', 'फ्रंट-एंड' और 'बैक-एंड' शब्दों का उपयोग शिथिल करते हैं और विशिष्ट सीपीयू से सर्वोत्तम उपलब्ध घटनाओं का उपयोग करने की कोशिश करते हैं जो इन अवधारणाओं का अनुमान लगाते हैं।

Cc: पीटर Zijlstra Cc: Arnaldo Carvalho de Melo Cc: Frederic Weisbecker लिंक: http://lkml.kernel.org/n/tip-7y40wib8n000io7jjpn1dsrm@git.kernel.org साइन-ऑफ-बाय: इंगो मोलनार

    /* Install the stalled-cycles event: UOPS_EXECUTED.CORE_ACTIVE_CYCLES,c=1,i=1 */
-       intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES] = 0x1803fb1;
+       intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = 0x1803fb1;

-   PERF_COUNT_HW_STALLED_CYCLES        = 7,
+   PERF_COUNT_HW_STALLED_CYCLES_FRONTEND   = 7,
+   PERF_COUNT_HW_STALLED_CYCLES_BACKEND    = 8,

तो आखिर में क्या यह त्रुटि है? क्योंकि FE + BE +? एक ज्ञात सैद्धांतिक मूल्य में न जोड़ें, यह आकलन करना कठिन है कि आपके कोड की समस्या कितनी बड़ी है। जब आप 75% एफई स्टालिंग को देखते हैं जिसकी किसी चीज के साथ तुलना करने की आवश्यकता होती है। यह कहते हुए कि 100% में से 75% कोड FE या BE में रुका हुआ है, का एक अलग अर्थ और मूल्य है। मैं जो देखता हूं, उससे भी toplev.py का एक ही मुद्दा है। यदि यह कोई समस्या नहीं है, तो हम मैट्रिक्स की व्याख्या कैसे करते हैं? क्या मैट्रिक्स उच्च या निम्न बनाता है?
वांडरेई

VAndrei, क्या आपके पास SandyBridge (+ -1 पीढ़ी) के लिए संक्षिप्त और प्रतिलिपि प्रस्तुत करने योग्य उदाहरण है; perf statFE> 100% और toplev.py दोनों के लिए ? मैंने अभी छोटी सरल छोरों से शुरुआत की है और 3 जी निर्देशों के लिए 3 जी चक्र हैं (2 जी स्टालों ( perf stat) और 1 जी बीई स्टालों (आईपीसी = 1.00) के साथ 1 जी 0.00% मिस रेट वाली शाखाएं हैं )। मुझे लगता है कि समस्या जटिल OOO कोर के लिए "स्टाल" को सही ढंग से परिभाषित करने के लिए है और दूसरा toplev.pyपरिणामों की सही व्याख्या करने के लिए है ।
असग

मेरे द्वारा यहां पोस्ट किया गया कोड: stackoverflow.com/questions/28961405/… फ्रंट एंड बाउंड होना चाहिए। इसमें बहुत सी शाखाएँ छूटी हुई हैं जिससे FE स्टाल बनेंगे। बीई बाउंड के बारे में आपको एक काम का बोझ चाहिए जो रैम डेटा से इंतजार करता है। बफर में अपने भौतिक स्मृति आकार का आवंटन 1/2 करें और बफर में एक यादृच्छिक स्थान पर पढ़ने / संशोधित / लिखने के लिए एक LCG (मेरे कोड में) का उपयोग करें। यह आरएमडब्ल्यू लेनदेन के अलावा कम संख्या में निर्देश उत्पन्न करता है और कोर रैम डेटा से प्रतीक्षा में बीई में स्टाल करेगा।
वांडरेई

FE बाउंड वर्कलोड उत्पन्न करना काफी चुनौती भरा है। कृपया प्रयास करें कि अगर ब्रांचिंग माइक्रोबेनमार्क काम करता है लेकिन अगर आपको कुछ और जटिल की आवश्यकता नहीं है। FE स्टाल उच्च संख्या अनुदेश कैश मिस द्वारा उत्पन्न किया जाएगा। ऐसा करने के लिए, आपको एक से अधिक जंप के साथ एक बड़ी कोड की आवश्यकता है ताकि मैं कई $ I को याद कर सकूं। मैं इस बिंदु पर एक विचारधारा नहीं है कि कैसे एक microbenchmark में एक एफई बाउंड वर्कलोड बना रहा हूं।
वाँड्रेई

मुझे लगता है कि आप इस लिंक में दिलचस्पी लेंगे: stackoverflow.com/questions/1756825/… आप उन चर्चा की गई कुछ तकनीकों का उपयोग I $ को फ्लश करने के लिए कर सकते हैं और इसलिए FE स्टाल उत्पन्न कर सकते हैं।
वांड्रेई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.