यदि आपका कार्य विशिष्ट CPU पर समय का अनुरोध करने वाली एकमात्र प्रक्रिया है, तो कार्यों के बीच कोई संदर्भ स्विच नहीं होगा :-)। लेकिन सीपीयू अभी भी बाधित हो सकता है, जिससे एक संदर्भ कर्नेल और बैक में बदल सकता है। और एक संभावित कारण प्री-एमिशन टाइमर है, यह जांचने के लिए कि क्या इस सीपीयू पर चलने के लिए कोई अन्य कार्य है ...
लिनक्स सीपीयू पर किसी भी पूर्व-उत्सर्जन टाइमर इंटरप्ट को उत्पन्न करने से बच सकता है जब ऐसा करने का कोई कारण नहीं होगा। देखते हैं CONFIG_NO_HZ_FULL
। इस सुविधा का उपयोग करने के लिए, इसे कर्नेल के निर्माण के समय सक्षम किया जाना चाहिए, और बूट विकल्प का उपयोग करके इसे सक्षम किया जाना चाहिए।
डिफ़ॉल्ट रूप से, कोई सीपीयू एक अनुकूली-टिक सीपीयू नहीं होगा। "Nohz_full =" बूट पैरामीटर अनुकूली-टिक CPUs को निर्दिष्ट करता है। उदाहरण के लिए, "nohz_full = 1,6-8" का कहना है कि सीपीयू 1, 6, 7, और 8 अनुकूली-टिक सीपीयू होने चाहिए। ध्यान दें कि आप सभी सीपीयू को अनुकूली-टिक सीपीयू के रूप में चिह्नित करने से प्रतिबंधित हैं [...]
LWN.net का कहना है "Ingo Molnar के अनुसार, CPU के समय का 1% बचाया जाएगा" अनुकूली-टिक CPUs के लिए। कर्नेल दस्तावेज़ कहता है कि इसकी छह अलग-अलग लागतें हैं, और "KNOWN ISSUES" की एक सूची भी है।
यह लाभ अपेक्षाकृत छोटा है, विशेष रूप से कई कार्यों के बीच संदर्भ-स्विच की आवृत्ति को कम करने के संभावित थ्रूपुट लाभ की तुलना में, जैसा कि इस उत्तर में संदर्भित है: लिनक्स सीपीयू अनुसूचक द्वारा उपयोग किए जाने वाले समय-स्लाइस की लंबाई कैसे बदलें?
छोटा प्रिंट: ये माप पूर्व-तारीख स्पेक्टर, मेल्टडाउन, KPTI और x86 ASID समर्थन :-( और मुझे लगता है कि वे कुछ पुराने हार्डवेयर पर भी लागू होते हैं। एक कर्नेल विशेषज्ञ से पूछें या संदर्भ-स्विच की लागत कैसे होती है, इस पर अपने स्वयं के माप चलाएं। आपके विशिष्ट कर्नेल संस्करण और हार्डवेयर में परिवर्तन ... पीटीआई को बहुत हद तक एएसआईडी द्वारा शमन किया जाना चाहिए, सॉफ्टवेयर के अलावा जो कर्नेल में बहुत बार कॉल करता है, मुख्य उदाहरण डेटाबेस। लेकिन मुझे संख्याओं पर अच्छा पकड़ नहीं है। ।
मूल आरएफसी पैच में मोलनार की उम्मीद यह थी कि समय के साथ, यह "अधिकांश लिनक्स डिस्ट्रोस द्वारा सक्षम किया जाएगा"। मैंने देखा कि फेडोरा 28 NO_HZ_FULL
समर्थन के साथ बनाया गया एक डिफ़ॉल्ट कर्नेल प्रदान करता है । डेबियन 9, हालांकि नहीं है।
हाल ही में, लिनक्स v4.17 सीपीयू से एक अवशिष्ट 1 हर्ट्ज टाइमर टिक हटाता हैnohz_full
। मुझे लगता है कि थ्रूपुट पर प्रभाव काफी छोटा है :-), लेकिन मैं NO_HZ_FULL
लाभ की स्थिति का पालन करने की कोशिश कर रहा हूं जब एक सीपीयू पर कई रन करने योग्य प्रक्रियाएं होती हैं -
एक बार जब हम 0 हर्ट्ज तक पहुंच जाते हैं, तो हम [तो] nr_running> = 2 से आवधिक टिक धारणा को हटा सकते हैं, साथ ही साथ व्यस्त कार्यों को अनिवार्य रूप से केवल बार-बार रोकते हैं, क्योंकि शेड्यूल_लैटेंसी की कमी के कारण हमें ऐसा करने की आवश्यकता होती है - एक बार 4-40 msecs, nr_running पर निर्भर करता है। ।
यह थोड़ा सा भ्रामक है क्योंकि पहले से ही v2.6.25-rc1 में एक अलग, अधिक सटीक टिक बैक का उपयोग करते हुए पूर्व-उत्सर्जन शुरू हो गया था, 8f4d37ec073c, "शेड्यूल: हाई-रिस प्रीमेशन टिक" । इसी LWN.net लेख पर इस टिप्पणी के माध्यम से मिला: https://lwn.net/Articles/549754/ )।