2013-08-05 11 views
5

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

+0

क्या आप इसे अधिक विस्तार से समझा सकते हैं: क्या आप अपने कर्नेल मॉड्यूल से दिए गए एफ़िनिटी के साथ कुछ मौजूदा थ्रेड के एफ़िनिटी को बदलना चाहते हैं या एक नया थ्रेड स्पॉन करना चाहते हैं? आप इस तरह से पूरा करने की कोशिश कर रहे हैं? यह जानकारी विशेषज्ञों को आपको उत्तर देने में सहायता कर सकती है। – Eugene

+0

देरी से उत्तर के लिए खेद है। मैं क्या करना चाहता हूं कि प्रत्येक कोर पर दो धागे स्थापित करें, ताकि मैं कैश कोहिरेंसी समस्या के बारे में कुछ माप कर सकूं। मेरे माप को सटीक बनाने के लिए मुझे इनलाइन असेंबली जोड़ने की जरूरत है लेकिन मुझे भी छूट को अक्षम करना होगा। ऐसा करने के लिए, मुझे कार्य के लिए एक लिनक्स कर्नेल मॉड्यूल होना चाहिए। हालांकि, इस तरह के मॉड्यूल के लिए libc लाइब्रेरी अदृश्य है और इस कारण से मैं देखना चाहता हूं कि कौन सा फ़ंक्शन थ्रेड के एफ़िनिटी को बदलता है, एलकेएम में कोई प्रोसेस नहीं है। मुझे उम्मीद है कि यह अब स्पष्ट है ... – user1533288

उत्तर

3

आप kthreads, जो गिरी धागे के लिए खड़ा है का उपयोग करना चाहिए। निर्दिष्ट सीपीयू पर ऐसा बनाने के लिए, आपको kthread_create_on_cpu() का आह्वान करना चाहिए। इसे include/linux/kthread.h में परिभाषित किया गया है। नींद की स्थिति में थ्रेड बनाया जाएगा, इसलिए आपको wake_up_process() पर कॉल करना चाहिए। बस इतना ही।

आप this प्रश्न में मेरे उत्तर में kthreads का उपयोग करने का एक उदाहरण प्राप्त कर सकते हैं।

0

आप kthread_bind() फ़ंक्शन का उपयोग कर सकते हैं।

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