CPU और IO के लिए अलग-अलग प्रक्रिया प्राथमिकता वाले मामलों का उपयोग करें?


9

लिनक्स प्रक्रियाओं में अलग-अलग सीपीयू और आईओ प्राथमिकता (अच्छा और आयनिस) हो सकती है।

अलग-अलग CPU और IO प्राथमिकता रखने की आवश्यकता क्यों है?

क्या उनके अलग होने का कोई वास्तविक विश्व उपयोग है?

क्या वास्तविक दुनिया के उपयोग के मामलों में आपने पाया है कि अलग-अलग सीपीयू और आईओ प्राथमिकता है? सामान्य CPU प्राथमिकता की तुलना में अधिक है, लेकिन सामान्य IO प्राथमिकता या उपाध्यक्ष से कम है।

जवाबों:


6

'अच्छा' का डिफ़ॉल्ट व्यवहार 'io' की प्राथमिकता को समायोजित करने के लिए होता है, जब भी बदलाव होता है।

निश्चित रूप से सब कुछ आपके काम का बोझ पर निर्भर करता है, लेकिन यह कैसे अपने संसाधन आवंटित किसी भी ऑपरेटिंग सिस्टम के महत्वपूर्ण पहलुओं में से एक है, और यह कैसे संभालती है विवाद

यह समझना वास्तव में महत्वपूर्ण है कि अच्छाई क्या करती है क्योंकि जब प्रतिस्पर्धा से लोड होता है तो ऑपरेटिंग सिस्टम जिस तरह से व्यवहार करता है वह आपके शेष कार्यभार पर प्रभाव डाल सकता है।

ध्यान यह मापता है कि एक ही संसाधन (जैसे सीपीयू) के लिए विभिन्न अनुप्रयोग कैसे प्रतिस्पर्धा करते हैं।

भार संभालना

जब से पूरी तरह से निष्पक्ष अनुसूचक को पेश किया गया था, तब से अच्छा प्रत्येक प्रक्रिया के 'वजन' खंड के लिए एक दृश्य है। जिसे खरीद में देखा जा सकता है।

$ cat /proc/self/sched
---------------------------------------------------------
...
se.load.weight                     :                 1024
...

परिवर्तन केवल वजन बदल जाता है:

$ nice -n 5 cat /proc/self/sched 
---------------------------------------------------------
...
se.load.weight                     :                 335
...

सीपीयू विवाद के लिए उपाय पूरी तरह से निष्पक्ष निर्धारण एल्गोरिथ्म द्वारा किया जाता है। हर एप्लिकेशन को एक 'वेट' मान दिया जाता है और सीपीयू के समय के बचाव के मामले में सीपीयू समय के लिए सभी प्रसंस्करण को पूरा करने और उन्हें उनके वजन के मूल्य के आधार पर सबसे कम मूल्यवर्ग के सीपीयू समय को असाइन करने से प्रक्रियाओं के बीच समय का विभाजन होता है।

अगर मेरे पास 3 एप्लिकेशन हैं जो सभी सीपीयू समय का उपयोग करना चाहते हैं, तो डिफ़ॉल्ट रूप से वे सामान्य वजन के रूप में 1024 प्राप्त करते हैं। अगर मेरे पास ऊपर की तरह एक अच्छी +5 के साथ एक प्रक्रिया है, तो तीनों वेट 2383 पर टोटल हो जाएंगे, नेक्ड प्रक्रिया इस प्रकार दिए गए सेकंड में लगभग 15% सीपीयू समय प्राप्त करेगी यदि सभी 3 प्रक्रिया उस दूसरे में सीपीयू के लिए पूछ रहे थे ।

अलग-अलग CPU और IO प्राथमिकता रखने की आवश्यकता क्यों है?

जब वास्तव में सिस्टम लोड के तहत होता है, तो निकेय केवल उसी के साथ खेल रहा होता है, अर्थात - ऑपरेटिंग सिस्टम प्रतिस्पर्धात्मक प्रक्रियाओं के बीच समय को कैसे घटाता है, जो कुछ भी कारकों द्वारा परिभाषित किया गया है।

यह आपको कैसे प्रभावित करता है या आपके लिए पुनर्संयोजन होता है क्या वितरण पुजारियों द्वारा अलग-अलग अनुप्रयोगों में एक दूसरे के साथ है और प्रत्येक एप्लिकेशन को वितरित करने का समय है।

जब आपका सिस्टम लोड के तहत होता है, तब वास्तव में निक नेम केवल कुछ करता है (सीपीयू या डिस्क की तुलना में अधिक ध्यान चाहने वाला सामान है)। यह केवल कर्नेल को निर्देश देता है कि उन परिस्थितियों में संसाधन कैसे आवंटित करें।

क्या उनके अलग होने का कोई वास्तविक विश्व उपयोग है?

यदि आपके पास कई प्रतिस्पर्धी प्रक्रियाएं हैं या करने के लिए काम है जो सीपीयू द्वारा किया जा सकता है, तो अच्छाई आपको कुछ अपेक्षाकृत स्थिर गारंटी देता है जो पहले काम खत्म करता है। यह आपके लिए महत्वपूर्ण हो सकता है यदि आपका कहना है कि एक रिपोर्ट का उत्पादन करना चाहिए जिसे किसी अन्य रिपोर्ट के पूरा होने से पहले वितरित किया जाना चाहिए।

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

आश्रित अनुप्रयोगों के लिए काम करने के लिए अन्य अनुप्रयोगों की आवश्यकता हो सकती है। उदाहरण के लिए बहुत सारे अपाचे अनुरोधों के लिए एक SQL सर्वर जैसे MySQL समय की एक लंबी अवधि के लिए अवरुद्ध हो सकता है क्योंकि SQL isnt काफी तेजी से काम कर रहा है क्योंकि - कुछ अन्य रिपोर्ट CPU समय के लिए प्रतिस्पर्धा कर रही है। तो न केवल एसक्यूएल ठप है, बल्कि अपाचे भी है। यहां एसक्यूएल कभी-कभी नुकसान पहुंचा सकता है क्योंकि आमतौर पर अपाचे थ्रेड्स की तुलना में बहुत कम वर्कर थ्रेड होते हैं, जो कि शेड्यूलर द्वारा अधिक अनुकूल रूप से तौले जाने वाले समूह के रूप में प्रतिस्पर्धा करते हैं, इसलिए एसक्यूएल को अधिक सीपीयू समय देने से चीजें विकसित होती हैं।

UpdateDB (एक प्रोग्राम जो फ़ाइलों को अनुक्रमित करता है) रात में देर से चलता है और बहुत डिस्क भारी होता है। यह अपनी IO शेड्यूलिंग प्राथमिकता को कम करने के लिए उपयोगी हो सकता है ताकि उस समय के अन्य अनुप्रयोगों को उस चीज़ पर प्राथमिकता मिले जो चीजों के क्रम में उतना महत्वपूर्ण नहीं है।

क्या वास्तविक दुनिया के उपयोग के मामलों में आपने पाया है कि अलग-अलग सीपीयू और आईओ प्राथमिकता है?

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

मैं यह कहना चाहता हूं कि "बुरे दिन पर भी आपका सामान एक्स टाइम पीरियड में हो जाएगा"। अगर यह तेजी से आगे बढ़ता है, तो यह सिर्फ एक बोनस है।

मैं आमतौर पर सहमत विनिर्देशों को उत्पन्न करके शुरू करूंगा जैसे:

  • सभी वेब एप्लिकेशन को 0.3 सेकंड में अनुरोध पूरा करने की गारंटी है।
  • सिस्टम पर सभी SQL अनुरोध 0.1 सेकंड में पूरा होने की गारंटी है।
  • वेब एप्लिकेशन को 50 IOPS से अधिक नहीं संभालना चाहिए और 1k फ़ाइलों को वितरित करना चाहिए।
  • वेब एप्लिकेशन मेमोरी फुटप्रिंट कुल 250Mb से अधिक नहीं है।

और आवश्यकताओं को पूरा करने के लिए जैसे:

  • सभी वेब अनुरोध 0.05 सेकंड में पूरे होने चाहिए।
  • सभी SQL अनुरोध 0.02 सेकंड में पूरे होने चाहिए।
  • सभी अनुरोधों के लिए पर्याप्त मेमोरी हैंडल होना चाहिए।
  • IO आवश्यकताओं को पूरा किया जाना चाहिए।

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

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

अगर हम आपका उदाहरण लेते हैं CPU और IO का। मैंने उन आवश्यकताओं को पूरा करने वाली सीमाएँ निर्धारित की हैं:

# cd /sys/fs/cgroup/blkio/apache
# echo "253:0 100" >blkio.throttle.read_iops_device 
# echo "253:0 50" >blkio.throttle.write_iops_device 
# echo "253:0 102400" >blkio.throttle.read_bps_device

तो 100k बाइट्स 100 iops पढ़ने के लिए।

# cd /sys/fs/cgroup/cpu/apache
# echo 1000000 >cpu.cfs_period_us
# echo 60000 >cpu.cfs_quota_us 

1 सेकंड की अवधि में, CPU के 0.06 सेकंड दें।

# cd /sys/fs/cgroup/cpu/sql
# echo 1000000 >cpu.cfs_period_us
# echo 20000 >cpu.cfs_quota_us

1 सेकंड की अवधि में से, सीपीयू के 0.02 सेकंड दें।

अन्य प्रतिस्पर्धी cgroups प्रदान करना मूर्खतापूर्ण कुछ भी न करें, लोड के तहत मेरी सेवा वितरण में एक कारक कम है क्योंकि मुझे पता है कि प्रत्येक एप्लिकेशन के लिए सीपीयू कैसे फेंका जा रहा है।

इस प्रकृति के नियंत्रण समूह अभी भी सर्वश्रेष्ठ प्रयास हैं, लेकिन वे उस प्रयास पर अधिक नियंत्रण प्रदान करते हैं, जो कि सुंदरता और आयनिकता से अधिक है।


मैं विभिन्न CPU और IO प्राथमिकताओं की आवश्यकता के बारे में पूछ रहा था। आप कहते हैं कि "बहुत कम" ऐसे मामले हैं जहां आपको अलग-अलग सीपीयू और आईओ प्राथमिकता प्राप्त करने की आवश्यकता है। क्या आप उनका संदर्भ दे सकते हैं?
एडुआर्डो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.