लिनक्स पर हाइपरथ्रेडिंग के साथ सीपीयू लोड माप


12

मैं एक मल्टीकोर हाइपरथ्रेडिंग सक्षम सीपीयू का सही उपयोग कैसे प्राप्त कर सकता हूं?

उदाहरण के लिए, 4 वर्चुअल कोर को व्यक्त करते हुए 2 कोर सीपीयू पर विचार करें।

एक एकल थ्रेडेड वर्कलोड अब 100% के रूप में दिखाई देगा top, क्योंकि वर्चुअल कोर का एक कोर पूरी तरह से उपयोग किया जाता है। सीपीयू और topउम्मीद के मुताबिक काम करते हैं, जैसे 4 असली कोर होंगे।

हालांकि, दो थ्रेड्स के साथ, चीजें पूरी तरह से मिलती हैं: यदि सभी अच्छी तरह से काम करते हैं, तो वे दो असली कोर के लिए संतुलित हैं, इसलिए हमें 200% उपयोग मिला: दो बार 100% और दो निष्क्रिय वर्चुअल कोर, और सभी उपलब्ध सीपीयू पावर का उपयोग कर रहे हैं । मुझे ठीक लगता है।

हालांकि, अगर दो धागे एक ही वास्तविक कोर पर चलेंगे, तो वे दो बार 100% का उपयोग करते हुए दिखाएंगे, जो 200% आभासी उपयोग का उपयोग करता है। लेकिन वास्तविक पक्ष में, वह दो धागों पर अपनी शक्ति साझा करने वाला एक कोर होगा, जो तब कुल सीपीयू शक्ति का केवल आधा हिस्सा उपयोग कर रहे हैं।

तो topकुल सीपीयू वर्कलोड को मापने के लिए उपयोग संख्याओं का उपयोग नहीं किया जा सकता है।

मुझे यह भी आश्चर्य है कि हाइपरथ्रेडिंग एक वास्तविक कोर पर दो आभासी कैसे संतुलित करता है। यदि दो धागे एक अलग मात्रा में चक्र लेते हैं, तो क्या वर्चुअल कोर 'अनुकूलन' होगा ताकि दोनों वास्तविक लोड भिन्न होने पर भी 100% लोड दिखा सकें?


1
आप समझते हैं कि ऑपरेटर सिस्टम एक हाइपरथ्रेडिंग वर्चुअल कोर और भौतिक कोर के बीच अंतर के बारे में नहीं जानता है?
रामहुंड

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

1
मुझे बस एक लोड माप करना पसंद है जहां 100% का मतलब होगा कि प्रत्येक वास्तविक कोर के प्रत्येक चक्र का उपयोग किया जाता है।
ड्रोनस

1
सीधे शब्दों में: किसी भी क्षण में कैसे बताएं, अगर मेरा सीपीयू वर्तमान में चल रहे काम को धीमा किए बिना, आगे काम करने में सक्षम होगा?
dronus

1
@ रामहाउंड, इसलिए यदि मेरे पास 8 तार्किक कोर के साथ एक भौतिक 4-कोर प्रोसेसर है, और मेरा लोड औसत 4.00 है, तो क्या मैं 100% उपयोग या 50% हूं?
बटल Butkus

जवाबों:


5

ओरेकल के मार्टिन टेग्टमीयर ने पिछले साल इस बारे में एक दिलचस्प ब्लॉग-पोस्ट लिखा है: https://blogs.oracle.com/solaris/cpu-utilization-of-multi-threaded-Healthectures-explained-v2

संक्षिप्त उत्तर; हाइपरथ्रेडिंग वास्तव में समग्र सीपीयू-उपयोग / सीपीयू-निष्क्रिय प्रतिशत की रिपोर्ट करने की क्षमता के साथ खिलवाड़ करता है।

सबसे खराब स्थिति में, एक 2-कोर 4-वर्चुअल-कोर सीपीयू 100% -utilisation-per-core पर 2 थ्रेड चल रहा है, लगभग सीपीयू को संतृप्त कर सकता है। (निष्पादन पोर्ट उपयोग पर निर्भर करता है; केवल थ्रेड्स जो सीपीयू पर पूरी तरह से अलग कंप्यूटिंग संसाधनों का उपयोग करते हैं, वर्तमान थ्रेड के प्रदर्शन को प्रभावित किए बिना चला सकते हैं।) हालांकि, शीर्ष अभी भी इस मामले में 50% निष्क्रिय की रिपोर्ट करेगा।


1
वर्तमान कार्य लिंक: blogs.oracle.com/partnertech/…
JAN Lalinský

4

कोर का उपयोग प्रणाली पर भार से बहुत अलग है। कोर उपयोग केवल यह दिखा रहा है कि कोर कुछ की गणना कर रहा है या निर्देशों का इंतजार कर रहा है। यह 100% हो सकता है जो किसी भी समय से मेल खाता है सीपीयू कुछ गणना कर रहा है।

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

एक लिनक्स सिस्टम में लोड औसत एक सिस्टम के समग्र प्रदर्शन को मापने के लिए एक गणना मूल्य है। लोड औसत का मान समानांतर कंप्यूटिंग संसाधनों की तुलना में होना चाहिए, कोर विशिष्ट होने के लिए। इसलिए यदि 4 भौतिक कोर वाली प्रणाली का लोड औसत 4 या अधिक है तो हम सुरक्षित रूप से कह सकते हैं कि कुछ प्रक्रियाएं संसाधन की प्रतीक्षा करेंगी।

यह महत्वपूर्ण नहीं है कि सीपीयू का उपयोग 100 या 10 प्रतिशत हो। लोड औसत 200 या 300 तक हो सकता है, इन मामलों में सिस्टम बमुश्किल उत्तरदायी होगा।

एक सामान्य परिचालन स्थिति में सर्वर लोड औसत लंबी अवधि के लिए कोर की संख्या से अधिक नहीं होना चाहिए। मेरी राय में लघु स्पाइक्स महत्वपूर्ण नहीं हैं। 3 नंबर जो आप wआउटपुट में देखेंगे वह लोड एवी है। 1/5/15 मिनट के लिए।


0

मेरी राय में उपरोक्त उत्तर में से कोई भी संतोषजनक नहीं है।

मुझे लगता है कि मैं निम्नलिखित लिंक पर जिस लेख का उल्लेख कर रहा हूं, वह इस प्रश्न का उत्तर देने के लिए लक्षित है: http://perfdynamics.blogspot.ch/2014/01/monitoring-cpu-utilization-under-hyper.html

उद्धरण:

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

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

मेरे पास सबसे अच्छा मामला परीक्षण माप है, यह दर्शाता है कि प्रत्येक HT पोर्ट 75% से अधिक व्यस्त नहीं हो सकता है, या ओएस के अनुसार कुल अपेक्षित 200% क्षमता का 150%। "लापता" 50% क्षमता, जिसे मैंने पहले उल्लेख किया था, एक भ्रम है। इंटेल ने दावा किया है कि सामान्य अनुप्रयोगों के लिए 120% से 130% की सीमा में कुछ की उम्मीद की जा सकती है।

वास्तव में, मुझे पूरा यकीन है कि ऑपरेटिंग सिस्टम प्रत्येक वर्चुअल कोर पर 100% तक पहुंच सकता है, इसके बारे में कोई संदेह नहीं है। मैंने अभी किया है:

mvn clean install -DskipTests -T 5

और मैं आपको मेरे 8 आभासी कोर और 4 भौतिक कोर 100% CPU उपयोगों के लिए आश्वस्त कर सकता हूं। और मैं निश्चित रूप से मेरी मशीन पर 8 कोर नहीं है।

लंबी कहानी संक्षेप में, आप निम्न मान सकते हैं यदि कुल सीपीयू लोड 100% से अधिक है, तो आप अधिकतम 100% भौतिक कोर का उपयोग करते हुए, सबसे अधिक संभावना है। वह मेनस, यदि आपके पास ऑपरेटिंग सिस्टम CPU 1 और CPU 2 में भौतिक CORE 1 विभाजित है और CPU 1 पर आपके पास कुल उपयोग 50% है और CPU 2 पर आपके पास 50% का कुल उपयोग है, तो वास्तविक जीवन में आप सबसे अधिक संभावना रखते हैं। उस सीपीयू पर कुल 100% के उपयोग का दबाव डालना। आपने इसे अधिकतम कर दिया है।

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

धन्यवाद

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.