2009-05-23 12 views
12

एक एम्बेडेड सिस्टम पर (ग्लिब 2.6.1 का उपयोग कर एआरएम प्रोसेसर पर लिनक्स कर्नेल 2.6.28) मैं एक से अधिक थ्रेड वाले अनुप्रयोग चला रहा हूं। मैं उन धागे में से एक को दूसरों की तुलना में अधिक CPU समय प्राप्त करना चाहता हूं।pthreads के लिए अच्छा स्तर?

प्राथमिकताओं की स्थापना के लिए एक विकल्प \ _RR (या SCHED \ _FIFO) SCHED के साथ \ _setschedparampthread उपयोग करने के लिए हो रहा है, फिर भी इस सूत्र काफी बहुत ज्यादा सीपीयू देता है (जब तक यह सोता है, इसे दूर अपने साथी से सभी सीपीयू खाती है धागे जो अभी भी SCHED_OTHER का उपयोग कर रहे हैं)।

एक और विकल्प धागे का अच्छा स्तर स्थापित करेगा। हालांकि यह वही होगा जो मैं खोज रहा था (थ्रेड बस थोड़ा और सीपीयू प्राप्त करता है लेकिन अन्य धागे को भूखा नहीं कर सकता), मैं इसे सही तरीके से काम नहीं कर सकता। मैन पेजों के मुताबिक "धागे एक सामान्य अच्छे मूल्य को साझा नहीं करते हैं", जिसे मैं समझता हूं कि मैं एक ही प्रक्रिया में अलग-अलग धागे को अलग-अलग अच्छे मान सेट कर सकता हूं।

pid_t tid; 
tid = syscall(SYS_gettid); 

int ret = setpriority(PRIO_PROCESS, tid, priority); 

यह है कि टीआईडी ​​लगता है हालांकि सभी धागे के बीच एक ही है:

यहाँ मेरी कोड है। getpriority पर कॉल करते समय भी थ्रेड के लिए व्यक्तिगत अच्छे-स्तर को सेट करने से सभी थ्रेड में नवीनतम सेट अच्छा स्तर वापस आ जाएगा। प्रदर्शन से यह संगत है (यानी एक ही कार्य के साथ थ्रेड ए और थ्रेड बी चलाएं, फिर ए टू -19 और बी से 1 9 सेट करें और दोनों एक ही समय में समाप्त हो जाएंगे)।

फिर भी, जब थ्रेड ए चलाते हैं, तो इसे -19 पर सेट करते हैं और फिर बी चलाते हैं और इसे +19 पर सेट करते हुए बी को पूर्ण शक्ति (ए से आगे बढ़ने का तरीका) पर चलाया जाएगा।

तो ऐसा लगता है कि एक धागा उस समय के अच्छे स्तर के सेट का उपयोग करेगा जब इसे बाद में बदलने का कोई तरीका नहीं है।

मैंने अधिक जानकारी या किसी भी प्रकार की पुष्टि के लिए पागल की तरह गुगल किया है, लेकिन जो कुछ मैंने पाया वह अब अस्पष्ट है। क्या किसी के पास लिनक्स (2.6.28, glibc 2.6.1) पर धागे के लिए कितने अच्छे स्तर हैं, इस पर कोई विवरण उपलब्ध है? और मैं संभवतः पहले से चल रहे थ्रेड के अच्छे स्तर को कैसे बदल सकता हूं?

+0

मुझे पता है कि यह पार्टी के लिए थोड़ा देर हो चुकी है लेकिन ऐसा लगता है कि आप ऐसा करने की कोशिश कर रहे हैं जो मैं करने की कोशिश कर रहा हूं, और विचार करता हूं कि मैं यहां Google खोज के माध्यम से आया हूं, अन्य भी हो सकते हैं। मैं जानना चाहता था कि आपने अपने धागे कैसे बनाए? Pthreads के अनुसार, वे कहते हैं कि अगर सभी एनटीपीएल धागे के साथ बनाया जाता है तो सभी धागे को समान प्राथमिकता साझा करनी होती है। –

उत्तर

5

एरम, एक बार जब मैंने यह प्रश्न पोस्ट किया तो अचानक मुझे अपनी गलती का एहसास हुआ - मैंने मुख्य थ्रेड से फ़ंक्शन को कॉल करके अच्छा स्तर निर्धारित किया है, इसलिए निश्चित रूप से उनके पास एक ही थ्रेड आईडी है (जैसा कि इसे संदर्भ में निष्पादित किया गया है मुख्य धागा)। DOH !!!!

सही टिड का उपयोग करना सब ठीक काम करता है।

अब मैं इस प्रश्न को कैसे हटा सकता हूं?

+0

मुझे लगता है कि इसे स्टीवन के रूप में छोड़ना ठीक है। मुझे लगता है कि लोग इसे पहले ही बंद कर देंगे या इसे घटा देंगे। –

+0

बीटीडब्ल्यू आप अपना खुद का प्रश्न नहीं हटा सकते हैं, क्योंकि मुझे लगता है कि आपके पास अब से पर्याप्त प्रतिनिधि नहीं हैं। Faq देखें। –

संबंधित मुद्दे