हाइपरथ्रेडिंग के साथ कितने सीपीयू का उपयोग किया जाना चाहिए?


22

मान लीजिए कि मेरे पास 18 कोर के साथ एक सर्वर सीपीयू है, जिस पर हाइपरथ्रेडिंग है, जिसका मतलब है कि मैं htop में 36 सीपीयू देख सकता हूं।

पूरी तरह से सीपीयू का उपयोग करने और एकल-थ्रेड प्रदर्शन को प्रभावित न करने के लिए, क्या मुझे सभी 36 "कोर" को 100% पर चलाने का लक्ष्य होना चाहिए, और एचटी कोर केवल कम काम करेगा और अभी भी 100% रिपोर्ट करेगा, या इसका मतलब होगा कि "पूर्ण" कोर पहले से ही अपने "एचटी कोर" पर कार्य से बाधित हो रहे हैं और इस तरह कम एकल-थ्रेडेड काम कर रहे हैं?

मुझे पता है कि बहुत सारे चर हैं जो एचटी प्रदर्शन को प्रभावित करते हैं, मैं सिर्फ यह जानना चाहता हूं कि एचटी से निपटने के दौरान सीपीयू मीटर का क्या मतलब है।


6
हाइपरथ्रेडिंग वास्तव में आपको दो बार cpus नहीं देता है। इसे और समझें जैसे कि एक सीपीयू दो कार्यक्रमों में पढ़ता है, और जब भी एक कार्यक्रम कुछ ऐसा करने वाला होता है जिसमें कई चक्र लगेंगे, या जब यह सभी संसाधनों (योजक, गुणक, लोडर, आदि) का उपयोग नहीं कर रहा है, तो यह स्विच हो जाएगा अन्य कार्यक्रम इसलिए यह उनका उपयोग कर सकता है। इसलिए सभी थ्रेड्स में 100% देखने के लिए एक कोर पर चलने वाले संगत कार्यक्रमों के सुखद संयोग की आवश्यकता होती है।
simpleuser

4
उस डिजाइन के कारण, मिश्रित काम के बोझ के साथ हाइपरथ्रेडिंग अच्छी तरह से काम करता है। उदाहरण के लिए, एक हाइपरविजर जहां सभी VM विभिन्न सेवाओं को चलाते हैं। उस प्रकार के परिदृश्य में, शायद परीक्षण करना भी आवश्यक नहीं है। अधिक समरूप कार्यभार के लिए, परीक्षण आमतौर पर सुनिश्चित होना आवश्यक है।
माइकल हैम्पटन

जवाबों:


14

यदि दूसरे वर्चुअल कोर को योगदान करने की अनुमति दी जाती है जब पहली अन्यथा अन्यथा अटक जाएगी, तो यह बेहतर नहीं है , इसलिए आपको कम से कम अतिरिक्त काम मिलता है।

सवाल यह बन जाता है: जब दो अलग-अलग धागे होने से एक के खराब होने का कारण बनता है? निर्देशों के बीच शाखा की भविष्यवाणी और निर्भरता नहीं बदलेगी। मेमोरी एक्सेस पर प्रतीक्षा कर रहा है ... दोनों थ्रेड मेमोरी एक्सेस पर प्रतिस्पर्धा करते हैं, दोनों कैशे उपयोग और बैंडविड्थ में।

यदि आपके पास एचटी और अन्य के साथ चलने वाले कुछ सीपीयू हैं, तो इसका मतलब यह नहीं है कि आप विशिष्ट थ्रेड्स को एक प्रकार या दूसरे को निर्दिष्ट करेंगे? मुझे नहीं लगता: आपके कार्यक्रम यादृच्छिक आभासी कोर पर अपने धागे चलाएंगे। तो कॉन्फ़िगरेशन को विभाजित करने में कैसे मदद मिलती है? चूँकि प्रत्येक CPU का अपना कैश होता है, एकमात्र प्रभाव मेमोरी बैंडविड्थ और कैश कोहेरेंसी के बोझ के कारण होता है।

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

कोई आसान जवाब नहीं है। यहां तक ​​कि एक विशिष्ट कार्यक्रम को ध्यान में रखते हुए, मशीन उन लोगों से भिन्न हो सकती है जो अपने स्वयं के अनुभवों से संबंधित हैं।

आपको इसे स्वयं आज़माना होगा और मापना होगा कि सबसे तेज़ क्या है, उस सटीक मशीन पर विशिष्ट कार्य के साथ। और फिर भी, यह समय के साथ सॉफ्टवेयर अपडेट और शिफ्टिंग उपयोग के साथ बदल सकता है।

एंगर के मैग्नम ओपस के वॉल्यूम 3 पर एक नज़र डालें । यदि आप कुछ विशिष्ट प्रोसेसर को ध्यान से देखते हैं, तो आप कोड को निष्पादित करने के लिए आवश्यक कई चरणों की गहरी पाइपलाइन के बीच संसाधनों को सीमित कर सकते हैं। आपको एक ऐसा मामला खोजने की जरूरत है, जहां अधिक काम करने के कारण विरोधाभासी धीमी गति से निष्पादित हो। सामान्य तौर पर इसका मतलब होता है किसी तरह का कैशिंग; और जहां संसाधन थ्रेड्स के बीच साझा किया गया है।


सीपीयू मीटर का क्या मतलब है: यह हर समय रिपोर्ट करता है कि बेकार धागा चलाने में खर्च नहीं होता है। कोर को सौंपे गए दोनों तार्किक धागे बेकार नहीं होंगे, हालांकि उनमें से किसी एक पर किया गया वास्तविक कार्य छोटा हो सकता है। परिणाम तैयार होने तक कुछ चक्रों के लिए अटक गई पाइपलाइन के साथ समय बिताया जाता है, स्मृति प्राप्त की जाती है, परमाणु संचालन में बाड़ लगाई जाती है, आदि इसी कारण से धागे को "तैयार नहीं" के रूप में आश्रय नहीं दिया जाता है, इसलिए यह निष्क्रिय नहीं होगा, और समय अभी भी उपयोग के रूप में दिखाता है। रैम पर वेटिंग बेकार नहीं दिखेगी। केवल I / O जैसी कोई चीज ही थ्रेड को ब्लॉक करेगी और उसकी ओर चार्जिंग टाइम रोक देगी। सामान्य तौर पर एक ऑपरेटिंग-सिस्टम म्यूटेक्स ऐसा करेगा, लेकिन मल्टीकोर सिस्टम के उदय के साथ यह सुनिश्चित नहीं रह जाता है कि "स्पिनलॉक" के रूप में धागा शेल्फ पर वापस नहीं जाएगा ।

तो, 100% का सीपीयू मीटर का मतलब यह नहीं है कि सभी चिकनी नौकायन है, अगर सीपीयू अक्सर मेमोरी के इंतजार में फंस जाता है। 90% दिखाने वाली कम संख्या में तार्किक कोर बहुत अधिक काम कर सकते हैं, क्योंकि यह संख्या की कमी को पूरा करता है और अब डिस्क पर प्रतीक्षा कर रहा है।

तो सीपीयू मीटर के बारे में चिंता मत करो। केवल की गई वास्तविक प्रगति को देखें ।


23

सीपीयू मीटर आपको यह बताने के लिए बहुत खराब हैं कि आप अपने हाइपरथ्रेडेड सीपीयू से कितना अधिक प्रदर्शन कर सकते हैं। उसके लिए, आपको विभिन्न भौतिक-कोर ओवर-सब्सक्रिप्शन दरों पर अपने स्वयं के बेंचमार्क चलाना चाहिए। कुछ वर्कलोड हैं जो एचटी के साथ सबसे अच्छा काम करते हैं पूरी तरह से बंद हो जाते हैं, इसलिए उस मामले को अपने परीक्षण में भी शामिल करें। यह 1: 2 (36 समानांतर श्रमिक), या 1: 1.5, या 1: 2.5 हो सकता है! यह आपके कार्यभार पर निर्भर करता है।

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

दो निष्पादन प्रोफाइल हैं जो आपके इष्टतम ओवर-सब्सक्रिप्शन बिंदु को प्रभावित करेंगे:

  • लंबी निष्पादन अवधि । यदि आपके कर्मचारी रीसाइक्लिंग से पहले मिनटों या घंटों तक चलते हैं, जैसे कि बड़े रेंडरिंग जॉब्स या पर्यावरण मॉडलिंग, तो आपको प्रति कार्यकर्ता अधिक कुशल सिंगल-कोर प्रदर्शन मिलेगा। इससे आपका अनुपात कम होगा।
  • लघु निष्पादन अवधि । यदि आपके कार्यकर्ता सेकंड या छोटे मिनटों में चक्र करते हैं, जैसे कि वेब-ऐप थ्रेड्स, एक नई प्रक्रिया को चालू करने में शामिल ओवरहेड का मतलब है कि आपका अनुपात अधिक होगा।

छोटे मिनट? तुम्हारा मतलब है, कुछ मिनट?
इस्माईल मिगुएल

बहुत ज्यादा। 1 से 5 या तो। 18 श्रमिकों के साथ प्रति कार्यकर्ता 120 सेकंड पर, आप हर 7 सेकंड में एक नया ओवर कर रहे हैं। इसका बहुत सा हिस्सा स्थानीयता को कैश करने के लिए आता है।
sysadmin1138

1
आपको यह नहीं मिला .. आप अपने दूसरे बिंदु पर "छोटे मिनट" कह रहे हैं। मिनटों में हमेशा एक ही "आकार" होता है, जो 60 सेकंड होता है। कभी-कभी 61 सेकंड।
इस्माइल मिगुएल

4

आपको सभी 36 कोर को 100% पर चलते हुए देखना चाहिए - यह मानते हुए कि सॉफ्टवेयर ऐसा कर सकता है (जो कि तुच्छ नहीं है - शेड्यूलिंग उस कई कोर के साथ मुश्किल हो सकता है, इसलिए 100% से नीचे डिप्स स्वीकार्य हैं)।

जाहिर है जब आप हाइपरथ्रेडिंग के साथ एक अयस्क को "विभाजित" करते हैं, तो उन 200% का अर्थ "काम में 2x100%" नहीं होता है। लेकिन यह किसी भी माप के लिए अदृश्य है (जो सीपीयू उपयोग से आता है और काम की कोई अवधारणा नहीं है)। यह कितना काम करता है यह इस बात पर निर्भर करता है कि काम क्या है - 1.5 x से ऊपर हाइपर थ्रेडिंग के बिना काम सबसे अधिक समय की उम्मीद है।


3

जिस तरह से हाइपरथ्रेडिंग को लागू किया जाता है वह विशिष्ट सीपीयू uarch के साथ बदलता रहता है। नेहेल्म से स्काईलेक तक, इंटेल ने निश्चित रूप से निश्चित अनुपात (यानी: 50/50) को पाइप लाइन के साझा भागों को कम कर दिया, जो कि गतिशील रूप से साझा संरचनाओं की ओर बढ़ रहा था।

वैसे भी, सामान्य शब्दों में, HT को सक्षम करने से सिंगल-थ्रेड निष्पादन धीमा हो जाता है, लेकिन लिनक्स शेड्यूलर कैसे काम करता है, यह केवल तब होता है जब संख्या या रनिंग थ्रेड भौतिक कोर की संख्या से अधिक होता है। ऐसी स्थितियों में (जब थ्रेड> कोर) आप आम तौर पर अधिकतम महत्व के कुल थ्रूपुट को महत्व देते हैं, हाइपरथ्रेडिंग एक शुद्ध जीत बनी हुई है।

यह कैसे संभव है? समझने के लिए महत्वपूर्ण बिंदु यह है कि सीपीयू भौतिक कोर और वर्चुअल वाले को समान कोर के रूप में प्रस्तुत नहीं करता है, बल्कि यह इस तरह से उत्तरार्द्ध को उजागर करता है जैसे लिनक्स शेड्यूलर उन पर शेड्यूलिंग से बच सकता है यदि कोई अन्य भौतिक कोर उपलब्ध है। दूसरे शब्दों में, यह पहले सभी भौतिक कोर का उपयोग करता है, फिर वर्चुअल वर्चुअल का उपयोग करना शुरू करता है।

इसका मतलब है, आम तौर पर, हाइपरथ्रेडिंग एक बहुत ही मूल्यवान विशेषता है (अन्य प्रोसेसर, पॉवर 8 के रूप में, यहां तक ​​कि गहन एसएमटी तकनीकों का उपयोग करता है) और यह कि आपको इसे अधिकतम करने के लिए सीपीयू को आभासी या भौतिक कोर प्रति कम से कम एक धागे के साथ लोड करना चाहिए। एक व्यावहारिक उदाहरण के लिए, 18-कोर सीपीयू से पूर्ण प्रदर्शन निकालने के लिए आपको कम से कम 36 धागे का उपयोग करना चाहिए।

दो अपवाद मौजूद हैं:

  1. यदि आप चाहते हैं कि थ्रेड्स (जहां थ्रेड्स <भौतिक कोर) के सीमित सेट से विलंबता कम हो, तो आप HT को अक्षम कर सकते हैं
  2. बहुत पुराने CPU (Pentium4 और, बहुत छोटे तरीके से, Nehalem) में अनम्य विभाजन नियम हैं जो CPU को कई महत्वपूर्ण संसाधनों को 50/50 अनुपात में विभाजित करने के लिए बाध्य करते हैं, स्वतंत्र रूप से दूसरे धागे की स्थिति / भार से। इस मामले में, आपको यह सुनिश्चित करने के लिए अपने उपयोग के मामले को बेंचमार्क करना होगा कि जोड़ा गया थ्रूपुट काफी कम एकल थ्रेड प्रदर्शन के लायक है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.