मेरे पास एक साधारण बैश स्क्रिप्ट है जो एक प्रक्रिया के दूसरे भाग में पाइप आउटपुट करती है। अर्थात् :.एकाधिक कोर पर बैश के साथ पाइप प्रक्रियाओं को कैसे चलाया जाए?
dostuff | filterstuff
ऐसा होता है कि मेरे Linux सिस्टम पर (openSUSE यह मायने रखता है, तो गिरी 2.6.27) इन दोनों एक सिंगल कोर पर चलने संसाधित करता है। हालांकि, अलग-अलग कोर पर प्रक्रिया प्रक्रियाएं एक डिफ़ॉल्ट नीति है जो इस मामले में ट्रिगर नहीं होती है।
उस के लिए सिस्टम का कौन सा घटक ज़िम्मेदार है और मल्टीकोर सुविधा का उपयोग करने के लिए मुझे क्या करना चाहिए?
नोट कि 2.6.30 कर्नेल पर ऐसी कोई समस्या नहीं है।
स्पष्टीकरण: Dennis Williamson की सलाह का पालन करने के बाद, मैं शीर्ष कार्यक्रम के साथ यकीन बनाया, पहुंचाया कि प्रक्रियाओं वास्तव में हमेशा एक ही प्रोसेसर पर रन कर रहे हैं। लिनक्स शेड्यूलर, जो आमतौर पर वास्तव में अच्छी नौकरी करता है, इस बार ऐसा नहीं करता है।
मुझे लगता है कि बैश में कुछ ओएस को ऐसा करने से रोकता है। बात यह है कि मुझे बहु-कोर और एकल-कोर मशीनों के लिए पोर्टेबल समाधान की आवश्यकता है। taskset
solutionDennis Williamson द्वारा प्रस्तावित एकल-कोर मशीनों पर काम नहीं करेगा। वर्तमान में मैं उपयोग कर रहा हूँ :,
dostuff | taskset -c 0 filterstuff
लेकिन यह एक गंदा हैक की तरह लगता है। क्या कोई बेहतर समाधान प्रदान कर सकता है?
अपने परीक्षण को 'शीर्ष' के साथ कई बार ('टास्कसेट' के बिना) दोहराने का प्रयास करें। जब मैंने किया, कभी-कभी दो प्रक्रियाएं एक ही सीपीयू पर होती थीं, कभी-कभी अलग-अलग होती थीं। –
वे हमेशा एक ही हैं और सिस्टम का केवल 50% उपयोग करते हैं :( –
'(dostuff) | (filterstuff)' आज़माएं और देखें कि वे किस कोर पर दिखते हैं। एक अंतर (यदि यह मायने रखता है) यह है कि आप हैं एक मल्टीकोर सिस्टम पर और मैं एक बहु-प्रोसेसर (एकल कोर प्रत्येक) सिस्टम पर हूं। आप इन प्रक्रियाओं को वैसे भी अलग क्यों करना चाहते हैं? क्या वे प्रोग्राम हैं जिन्हें आपने लिखा था और क्या आप उन्हें बदल सकते हैं ताकि वे शेड्यूलर को स्वयं प्रभावित कर सकें? –