मैं SCHED_FIFO
के साथ प्रयोग कर रहा हूं और मुझे कुछ अप्रत्याशित व्यवहार दिखाई दे रहा है। जिस सर्वर का मैं उपयोग कर रहा हूं उसके पास 12 कोर हैं जिनमें हाइपर-थ्रेडिंग अक्षम है। सभी कॉन्फ़िगर करने योग्य इंटरप्ट को सीपीयू 0 पर चलाने के लिए सेट किया गया है।लिनक्स रीयल टाइम शेड्यूलिंग प्राथमिकताओं (SCHED_FIFO और SCHED_RR) का व्यावहारिक उपयोग?
मेरा प्रोग्राम प्रारंभिक प्राथमिकता कार्यों के लिए थ्रेड बनाता है, जो पीएचड्रेड लाइब्रेरी का उपयोग करके सीपीयू एफ़िनिटी सेट को कोर 0 पर सेट किए बिना शेड्यूलिंग पॉलिसी को बदलता है। पैरेंट थ्रेड उसके सीपीयू को सेट करता है कोर 3 और इसकी अपनी शेड्यूलिंग नीति SCHED_FIFO
पर sched_setscheduler()
का उपयोग करके पिड शून्य और प्राथमिकता 1 के साथ और फिर गैर-अवरोधक लूप चलाने के लिए शुरू होती है।
कार्यक्रम स्वयं ही चलता है। हालांकि, अगर मैं दूसरी बार सर्वर में लॉग इन करने का प्रयास करता हूं, जबकि प्रोग्राम टर्मिनल चला रहा है, तब तक मैं उत्तरदायी नहीं हूं जब तक कि मैं अपना प्रोग्राम बंद नहीं करता। ऐसा लगता है कि शेड्यूलर वास्तविक प्रक्रिया प्रक्रिया के समान कोर पर अन्य प्रक्रियाओं को चलाने की कोशिश कर रहा है।
- मुझे क्या याद आ रही है?
- क्या शेड्यूलर अभी भी एक वास्तविक समय प्रक्रिया चलाने वाले कोर पर अन्य प्रक्रियाओं को चलाने का प्रयास करेगा? यदि हां, तो क्या इसे रोकने का कोई तरीका है?
- माता-पिता में
sched_setscheduler()
के साथ शेड्यूलिंग नीति सेट करने से पहले बनाए गए बच्चे के व्यवहार को बदल दिया जाएगा?
अग्रिम धन्यवाद।
के लिए धन्यवाद जवाब दे दो। आप सही दस्तावेज कहते हैं कि sched_setscheduler() प्रक्रिया के लिए शेड्यूलिंग नीति सेट करता है, न कि थ्रेड। हालांकि, मैंने इस उत्तर को पढ़ने के बाद पीएस का उपयोग करके कुछ परीक्षण चलाए हैं और नीतियों को धागे के लिए सही ढंग से सेट किया गया है। इससे मुझे कुछ और परीक्षण चलाने के लिए प्रेरित किया गया। सबसे ध्यान देने योग्य मुद्दों में से एक यह है कि जब प्रोग्राम चल रहा है तो लॉगिन में काफी समय लगता है। यह निश्चित रूप से नए लॉगिन के लिए बैश सत्र की तरह दिखता है, शुरुआत में वास्तविक समय प्रक्रिया को चलाने वाले सीपीयू पर सेट किया जाता है। – digby280