2012-02-27 21 views
6

sched_setaffinity() कॉल का उपयोग कर CPU कोर के विशिष्ट सेट पर प्रक्रिया को पिन करना संभव है। मैनुअल पेज कहता है:क्या सीपीयू कोर या एसएमपी नोड को एक प्रक्रिया पिन करना कैश कोहेरेंसी यातायात को कम करने में मदद करता है?

Restricting a process to run on a single CPU also avoids the 
    performance cost caused by the cache invalidation that occurs when a process 
    ceases to execute on one CPU and then recommences execution on a different 
    CPU. 

जो लगभग एक स्पष्ट चीज़ है (या नहीं?)। मेरे लिए यह स्पष्ट नहीं है कि यह है -

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

उत्तर

10

आपके द्वारा वर्णित पिन किए गए प्रक्रिया मामले के लिए कोई CPU सॉकेट-टू-सॉकेट कोहेरेंसी ट्रैफ़िक नहीं होना चाहिए। आधुनिक ज़ीऑन प्लेटफॉर्म चिपसेट में स्नूप फ़िल्टरिंग को लागू करते हैं। स्नूप फ़िल्टर इंगित करता है कि रिमोट सॉकेट में कैश लाइन नहीं हो सकती है, इस प्रकार कैश को उस सॉकेट में अमान्य संदेशों को भेजने की आवश्यकता से परहेज करता है।

आप इसे अपने लिए माप सकते हैं। ज़ीऑन प्रोसेसर कैश सांख्यिकीय काउंटरों की एक बड़ी विविधता को लागू करते हैं। आप अपने कोड में काउंटर को rdpmc निर्देश के साथ पढ़ सकते हैं या केवल VTune जैसे उत्पाद का उपयोग कर सकते हैं। एफवाईआई, rdpmc का उपयोग करना बहुत सटीक है, लेकिन थोड़ा मुश्किल है क्योंकि आपको प्रारंभ में सीआर 4 में थोड़ा सा सेट करना है ताकि उपयोगकर्ता मोड में इस निर्देश का उपयोग करने की अनुमति मिल सके।

- संपादित करें -

मेरा जवाब ऊपर CPU की 55xx श्रृंखला जो QPI लिंक का उपयोग करने के लिए पुरानी है। ये लिंक इंटरकनेक्ट सीपीयू सीधे सॉकेट एक बीच के चिपसेट के बिना, के रूप में में: http://ark.intel.com/products/37111/Intel-Xeon-Processor-X5570-%288M-Cache-2_93-GHz-6_40-GTs-Intel-QPI%29

हालांकि, बाद से प्रत्येक सीपीयू में L3 कैश समावेशी है, QPI लिंक पर snoops ही होते हैं जब स्थानीय L3 कैश इंगित करता है लाइन में कहीं नहीं है स्थानीय सॉकेट इसी तरह, रिमोट सॉकेट का एल 3 कोर को परेशान किए बिना क्रॉस-स्नूप का तुरंत जवाब दे सकता है, मानते हुए कि लाइन वहां नहीं है।

तो, समावेशी एल 3 कैशों को अंतर-सॉकेट कोहेरेंसी ओवरहेड को कम करना चाहिए, यह आपके मामले में चिपसेट स्नूप फ़िल्टर के कारण नहीं है।

7

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

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

+0

मैं ज़ीऑन एक्स 5570 का उपयोग कर रहा हूं, जो कुछ हद तक NUMA है। मान लें कि मेरे पास 4 कोर प्रति सीपीयू और 4 सीपीयू हैं। सवाल यह है कि - यदि मैं 4 थ्रेड लगातार मेमोरी बाड़ के साथ कुछ व्यस्त-प्रतीक्षा कर रहा हूं, तो कैश अमान्यता अनुरोध अन्य CPUs पर भेजा जाएगा, लेकिन उन एलडब्लूपी को उसी सीपीयू के 4 कोर पर पिन किया गया है?यदि हां, तो कौन यह सुनिश्चित करता है कि अन्य सीपीयू सैद्धांतिक रूप से उसी स्मृति को संशोधित नहीं कर सकते हैं और इसलिए यह अनुकूलन लागू किया जा सकता है? मुझे पता है कि कुछ लोग डीएमए और डिवाइस ड्राइवरों के साथ ऐसा करते हैं, लेकिन उपयोगकर्ता-स्थान लिनक्स ऐप्स के बारे में कैसे? –

+0

एक ही सीपीयू पर 4 कोर के लिए, मुझे नहीं लगता कि यह एक समस्या क्यों होनी चाहिए (एल 2 को ज़ीऑन 5xxx पर साझा किया जाता है, और सीपीयू जो कुछ भी करने की ज़रूरत है उसे एल 1 को सिंक में रखने के लिए बस ठीक है, मैं ठीक हूं इसके साथ किसी भी मुद्दे को कभी नहीं देखा है)। अन्य 3 सीपीयू में से एक पर कोर के लिए, स्निंग फ़िल्टर के रूप में स्नूप फ़िल्टर है। आप आम तौर पर व्यस्त नहीं रहना चाहते हैं-वैसे भी प्रतीक्षा करें (जो थोड़ा समझ में आता है), इसलिए प्रदर्शन के मुद्दों को किसी भी तरह से कोई फर्क नहीं पड़ता। – Damon

+0

बेशक यह आपके आवेदन पर बहुत निर्भर करता है, लेकिन जब कोई व्यस्त रहता है, तो आमतौर पर लंबे कार्यों के बीच बहुत कम समय के लिए होता है, इसलिए आमतौर पर 16 धागे के साथ भी बहुत अधिक विवाद नहीं होता है। इस प्रकार, किसी भी कैश स्थिरता प्रभाव जो आप देख सकते हैं, यहां तक ​​कि कल्पित रूप से, वास्तव में बहुत मायने रखता नहीं है। यदि वे करते हैं, तो आपको वास्तव में अपने अधिकांश समय कताई खर्च करना होगा, और फिर शुरुआत से कुछ गड़बड़ है। – Damon