लोड संतुलन शुरू हो जाती है .. सीएफएस red-black tree की अवधारणा का उपयोग करता है।
समयबद्धक वर्तमान समय रिकॉर्ड जब एक कार्य रन कतार में प्रवेश करती है। हालांकि प्रक्रिया प्रोसेसर समय के लिए इंतजार कर रही है, यह वर्तमान में रन कतार में प्रक्रियाओं की कुल संख्या और प्रक्रिया प्राथमिकता से प्राप्त राशि से "प्रतीक्षा" मान बढ़ता है। जब प्रोसेसर इस कार्य को चलाता है, तो यह "प्रतीक्षा" मान कम हो जाता है। यदि यह मान कुछ मूल्य से नीचे गिर जाता है तो शेड्यूलर कार्य को छूट देगा और अन्य कार्य निष्पादित करने के लिए प्रोसेसर के करीब आ जाएगा। सीएफएस हमेशा "प्रतीक्षा" मान शून्य रखकर स्थिति को आदर्श रखने की कोशिश करता है।
लिनक्स load_balance
और select_task_rq_fair()
में दो कार्य हैं जो भार संतुलन का कार्य करते हैं।
सरल शब्द में सीएफएस लोड बैलेंस तंत्र व्यस्त सीपीयू को कम व्यस्त या आदर्श में ऑफ़लोड करता है।
task_h_load
का उपयोग कार्य के वजन की गणना करने के लिए किया जाता है।
मुझे समझ में नहीं आता कि task_h_load में लोड की गणना कैसे की जाती है। task_h_load फ़ंक्शन में इसकी गणना कैसे की जाती है?
यह वज़न कारक प्रक्रिया के अच्छे मूल्य पर निर्भर करता है।
weighting factor = weight of process with nice value 0/weight of current task;
जहां 'weight' लगभग 1024 * (1 के बराबर है।25)^(- अच्छा)
उदाहरण के लिए: वजन अच्छा मूल्य 1 वजन के लिए 820 है अच्छा मूल्य -1
task_h_load
अधिक लोड संतुलन विधियों के लिए के लिए 1277 है और बुनियादी बातें kernel comment task_h_load
उल्लेख उचित समय शेड्यूलिंग के लिए रन कतार के पदानुक्रमित भार की गणना करने के लिए update_cfs_rq_h_load
का उपयोग करें और जो cfs_rq_load_avg का उपयोग रनक्यू load_avg के औसत भार का उपयोग करें।
वर्चुअल रन टाइम CPU पर एक कार्य चलाने का भारित समय है। सीएफएस हमेशा this संतुलन में लाल-काले पेड़ रखने की कोशिश करता है।
< --smaller मूल्य ----------- vruntime मूल्य -------- बड़ा मूल्य ->
प्रत्येक runnable काम है vruntime
पर आधारित लाल काले पेड़ को संतुलित करने में रखा गया है। यदि कार्य चलाने के लिए तैयार है (मतलब है कि कार्य किसी संसाधन के लिए इंतजार नहीं कर रहा है), यह पेड़ पर रखा जाता है। यदि कार्य कुछ संसाधनों की प्रतीक्षा कर रहा है (यानी I/O की प्रतीक्षा कर रहा हूं) तो इसे हटा दिया जाएगा। जिन कार्यों में कम प्रसंस्करण समय होता है (इसका मतलब है कि vruntime
) पेड़ के बाईं तरफ हैं और अधिक प्रसंस्करण समय वाले कार्य पेड़ के दाहिने तरफ हैं।
बाएं नोड का सबसे छोटा कुंजी मान है (सीएफएस के लिए, यह उच्च प्राथमिकता वाला कार्य है)। स्व-संतुलन लाल काले पेड़ को बाएं नोड की ओर नेविगेट करने के लिए ओ (एलजीएन) ऑपरेशन की आवश्यकता होती है। शेड्यूलर rb_leftmost
में इस मान को कैश करता है। इस मूल्य का पुन: प्राप्त करने के द्वारा, अनुसूचक जो निर्धारित कार्य को चलाने के लिए अगले
यह भार संतुलन गैर वास्तविक कार्य केवल for real time कार्य धक्का-पुल संचालन उपयोग किया जाता है जो स्टीवन Rostedt और ग्रेगरी हास्किंस द्वारा
एक और विकसित की है के लिए प्रयोग किया जाता है सीएफएस के बारे में बात भी मेले समूह निर्धारण .Consider में सहायक है below figure
move_task
बस (असंतुलन भारित भार को ले जाने की कोशिश लोड फैक्टर की गणना के रूप में ऊपर दिखाए गए के बाद इसका मतलब है) व्यस्त से this_rq
तक। यह रन कतार दोनों के भार संतुलन के बराबर करने की कोशिश करता है ताकि दोनों "निष्पक्ष" प्रोसेसर समय को छोड़ सकें।
detach_task
env
लिनक्स कर्नेल के सूचक में निर्दिष्ट माइग्रेशन के लिए कार्य को अलग करें।
detach_one_task
env-> src_rq से बिल्कुल एक कार्य को हटाने का प्रयास करता है।
detach_tasks()
busiest_rq
से असंतुलित भारित भार को अलग करने की कोशिश करता है। और यह अलग-अलग कार्यों की संख्या देता है या अन्यथा शून्य होने में विफल रहता है।
इस पृथक कार्य को नए rq
(रन कतार) में जोड़ने के लिए, attach_task, attach_one_task,attach_tasks
स्थिति के अनुसार उपयोग किया जाता है।
नई चेतावनी की जांच lockdep_assert_held()
detach_tasks
में शुरू की है जो move_tasks
On multi-processor it is not easy to move task so easily तो में मौजूद नहीं थे सीएफएस करना डोमेन विशिष्ट लोड संतुलन के रूप में नीचे:
यह सब के लिए समझने के लिए मैं करने के लिए आप चाहते हैं निम्नलिखित संदर्भ के माध्यम से जाने
Per-Entity-Load-Tracking metric for load balancing
weight factor
Open-suse
Robert-love Chapter 3
CPU-scheduling
मैं विशेष रूप से अपने सवाल का जवाब देने मुझे आशा है कि आप अगर टिप्पणी करने के लिए कोई आपत्ति नहीं है इन सारे दस्तावेज़ पढ़ कुछ छूट रहा है।
_task_h_load इस statement.If से task._ पढ़ें जवाब के वजन की गणना करने के लिए आप अभी भी मुझे बाहर कुछ इंगित करना चाहते हैं मैं खुशी होगी प्रयोग किया जाता है उत्तर में सुधार करने के लिए :-) –
हाय, मैं उसके साथ सहमत हूं ... उत्तर मेरे असली प्रश्न का उत्तर नहीं देता है लेकिन आसपास के इलाकों से बहुत सारी जानकारी देता है ... – boaz
टिप्पणी के लिए धन्यवाद @boaz तो क्या आप शुद्ध समझना चाहते हैं कोड? क्या यह आपके लिए ठीक है अगर मैं वर्णन करूंगा कि h_load ऐसा क्यों करता है ..? –