4 कोर 8 थ्रेड प्रोसेसर पर सिस्टम लोड की व्याख्या करने का उचित तरीका


13

जैसा कि हम सभी जानते हैं कि सिंगल प्रोसेसर पर 1.00 का लोड होने का मतलब है कि 100% का लोड है । एनालॉग क्वाड कोर पर 4.00 का लोड 100% होगा

मुझे 4 कोर 8 थ्रेड प्रोसेसर पर लोड की व्याख्या कैसे करनी चाहिए? मैं सीपीयू की अधिकतम क्षमता तक कब पहुँचूँ? पर 4.00 या 8.00 ?

जवाबों:


17

निश्चित रूप से नहीं, लेकिन ज्यादातर पर 1.00*n_cpu

लोड का मतलब निम्न है: यदि एकल-सीपीयू प्रणाली पर कई प्रक्रियाएं हैं, तो वे समान रूप से समानांतर चल रहे हैं। लेकिन यह सच नहीं है। व्यावहारिक रूप से क्या होता है: कर्नेल एक प्रक्रिया में 1/100 वां सेकंड देता है, और फिर एक बाधा के साथ उसके चलने को तोड़ देता है। और अगली 1/100 वाँ दूसरी प्रक्रिया देता है।

व्यावहारिक रूप से सवाल, "किस प्रक्रिया को हमारा अगला 1/100 सेकंड का अंतराल मिलना चाहिए?", एक जटिल अनुमान के आधार पर तय किया जाएगा। इसे टास्क शेड्यूलिंग का नाम दिया गया है ।

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

लोड क्या कहता है: वर्तमान में कितनी प्रक्रियाएं अपने अगले 1/100 वें सेकंड के समय सीमा की प्रतीक्षा कर रही हैं। बेशक, यह एक औसत मूल्य है। ऐसा इसलिए है क्योंकि आप एक में कई नंबर देख सकते हैं cat /proc/loadavg

मल्टी-सीपीयू सिस्टम में स्थिति थोड़ी जटिल है। कई cpus हैं, जिनकी समय सीमा कई प्रक्रियाओं को दी जा सकती है। यह कार्य को थोड़ा समयबद्ध करता है - लेकिन बहुत अधिक नहीं - जटिल। लेकिन स्थिति वही है।

कर्नेल बुद्धिमान हैं, यह इष्टतम दक्षता के लिए सिस्टम संसाधनों को साझा करने की कोशिश करता है, और यह उस के पास में है (मामूली अनुकूलन चीजें हैं, उदाहरण के लिए यह बेहतर है अगर एक प्रक्रिया उसी समय पर सबसे लंबे समय तक संभव हो। कैपु विचार के कारण सीपीयू, लेकिन वे वहाँ कोई फर्क नहीं पड़ता)। ऐसा इसलिए है क्योंकि अगर हमारे पास लोड 8 है, तो इसका मतलब है कि: वास्तव में 8 प्रक्रियाएं हैं जो उनके अगली बार स्लाइस की प्रतीक्षा कर रही हैं। अगर हमारे पास 8 cpus हैं, तो हम इन समय स्लाइस को cpus को वन-वन-वन कर सकते हैं, और इस प्रकार हमारे सिस्टम का उपयोग बेहतर होगा।

यदि आप एक देखते हैं top, तो आप देख सकते हैं कि वास्तविक चल रही प्रक्रियाओं की संख्या आश्चर्यजनक रूप से कम है: वे Rवहां द्वारा चिह्नित प्रक्रियाएं हैं । यहां तक ​​कि वास्तव में कट्टर प्रणाली पर भी यह अक्सर नीचे नहीं होता है। यह आंशिक रूप से है क्योंकि डिस्क या नेटवर्क से उनके डेटा की प्रतीक्षा करने वाली प्रक्रियाएं भी निलंबित हैं ( Sऊपर से चिह्नित )। लोड केवल सीपीयू उपयोग दिखाता है।

डिस्क लोड को मापने के लिए उपकरण भी हैं, क्योंकि उन्हें कम से कम cpu उपयोग की निगरानी के रूप में महत्वपूर्ण होना चाहिए, लेकिन किसी भी तरह यह हमारे पेशेवर sysadmin दुनिया में इतनी अच्छी तरह से ज्ञात नहीं है।


Windows उपकरण अक्सर लोड को cpus की वास्तविक संख्या के साथ विभाजित कर रहे हैं। यह कुछ पेशेवर विंडोज़ सिस्टम प्रशासक को इस विभाजित-बाय-सीपीयू अर्थ में सिस्टम लोड का उपयोग करने का कारण बनता है। आपके द्वारा यह समझाने के बाद वे सही नहीं हुए हैं और शायद अधिक खुश होंगे।


मल्टीकोर सीपीयू व्यावहारिक रूप से एक ही सिलिकॉन चिप पर कई सीपीयू होते हैं। इसमें कोई फर्क नही है।

हाइपरथ्रेडेड सीपीयू के मामले में एक दिलचस्प साइड इफेक्ट है: एक सीपीयू लोड करने से इसके हाइपरथ्रेडेड जोड़े धीमे हो जाते हैं। लेकिन यह एक गहरी परत पर होता है कि सामान्य कार्य शेड्यूलिंग हैंडल क्या है, हालांकि यह शेड्यूलर के प्रक्रिया-चलती निर्णयों को प्रभावित कर सकता है (और चाहिए)।

लेकिन हमारे वर्तमान दृष्टिकोण से - सिस्टम लोड क्या निर्धारित करता है - यह भी कोई फर्क नहीं पड़ता।


4

जैसा कि हाइपरथ्रेडिंग वास्तव में एक 2 कोर नहीं है, यह कभी भी कोर को 200% तक नहीं ले जाएगा, लेकिन कुछ वर्कलोड के लिए इसे 100% से आगे ले जाएगा।

तो आपका अधिकतम भार लगभग 4 और 6 के बीच कहीं अज्ञात है

(बेशक यह अतिभारित होने पर अधिक हो सकता है क्योंकि यह वास्तव में चलने योग्य प्रक्रियाओं को गिनता है, खासकर जब वे IO की प्रतीक्षा कर रहे हैं)


4

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

दौड़ने की कोशिश करें ps -e vऔर प्रक्रिया राज्य झंडे की तलाश करें।

state    The state is given by a sequence of characters, for example, "RWNA". The      first character indicates the run state of the process:
D    Marks a process in disk (or other short term, uninterruptible) wait.
I    Marks a process that is idle (sleeping for longer than about 20 seconds).  
L    Marks a process that is waiting to acquire a lock.
R    Marks a runnable process.
S    Marks a process that is sleeping for less than about 20 seconds.
T    Marks a stopped process.
W    Marks an idle interrupt thread.
Z    Marks a dead process (a "zombie").

यह psमैनपेज से है, इसलिए आपको वहां अधिक विवरण मिलता है - Rऔर Dप्रक्रियाएं विशेष रूप से रुचि रखती हैं।

आप सभी प्रकार के कारणों से लोड औसत 'स्पाइक्स' के साथ समाप्त हो सकते हैं, इसलिए वे वास्तव में 'इस प्रणाली व्यस्त-ईश' के अलावा किसी भी अन्य चीज का अच्छा उपाय नहीं हैं। सीपीयू कोर के लिए लोड औसत मैपिंग में कम हो रही है आप किसी भी अच्छा करने के लिए नहीं जा रहा है।


3

लिनक्स सिस्टम पर न केवल रनने योग्य कतार में प्रक्रियाओं की गणना लोड की गणना करने के लिए की जाती है, बल्कि उन लोगों की भी होती है, जो नींद की स्थिति में हैं, विकिपीडिया , जब आप डिस्क की प्रतीक्षा में बहुत सारी प्रक्रियाएँ करते हैं, तो यह लोड बढ़ जाता है।


मुझे नहीं पता था कि, इसे ध्यान में रखना होगा!
बार्टेक स्ज़लाबोव्स्की

2

मैंने हमारे 24-कोर एक्सॉन सिस्टम (2 सॉकेट x 12 कोर) पर कुछ प्रयोग किए। लिनक्स के हाइपरथ्रेडिंग सेट करने के तरीके के कारण इस मामले में अधिकतम भार 48.0 है।

हालांकि, आपको थ्रूपुट के 48 कोर के बराबर नहीं मिलता है। मैंने जो देखा है वह यह है कि आपको पहले 24 तार्किक प्रोसेसर में लगभग 90% थ्रूपुट मिलता है, अर्थात यदि लोड 24.0 तक चलता है। फिर आपको शेष 24 तार्किक प्रोसेसर के लिए लगभग 10% का अतिरिक्त थ्रूपुट मिलता है (लोड 48.0 तक चलता है)। इसके बारे में सोचने का एक और तरीका यह है कि यदि आप 24 कोर पर 48 धागे चलाते हैं, तो आपको हाइपरथ्रेडिंग बनाम सक्षम नहीं होने पर लगभग 10-20% तक बढ़ावा मिलेगा। यह 100% बढ़ावा देने की तरह नहीं है विपणन लोगों को होगा।

उदाहरण के लिए, इस अवलोकन का परीक्षण करने का एक तरीका एक प्रक्रिया है जो 48 धागे चलाता है (जैसे कि टीबीबी या नियंत्रित थ्रेडिंग मॉडल का उपयोग करें), फिर चलाएं

time numactl --physcpubind=0-23  ./myprocess

और फिर चला

time numactl --physcpubind=0-47  ./myprocess

उत्तरार्द्ध को लगभग 10-20% कम समय में चलना चाहिए। यदि आपकी प्रक्रिया अत्यधिक आई / ओ अवरुद्ध है, तो परिणाम अलग हो सकता है।

पूर्व केवल हाइपरथ्रेडिंग को अक्षम करके थ्रेड्स को एक लॉजिकल प्रोसेसर (प्रत्येक कोर के) पर चलाने की अनुमति देगा, जबकि बाद वाले थ्रेड्स को 2 लॉजिकल प्रोसेसर (प्रत्येक कोर के) पर चलने की अनुमति देकर हाइपरथ्रेडिंग को सक्षम करेगा।

दोनों मामलों में लोड को 48.0 के रूप में रिपोर्ट किया जाना चाहिए ... जैसा कि आप देख सकते हैं कि बहुत भ्रामक है।

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