इन घटनाओं के लेखक के अनुसार, वे शिथिल परिभाषित करते हैं और उपलब्ध सीपीयू प्रदर्शन काउंटरों द्वारा अनुमानित होते हैं। जैसा कि मुझे पता है, 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,