2008-12-11 12 views
24

मैं नए इंटेल एटम 330 की समीक्षा पढ़ रहा था, जहां उन्होंने ध्यान दिया कि टास्क मैनेजर 4 कोर दिखाता है - दो भौतिक कोर, साथ ही हाइपरथ्रेडिंग द्वारा दो और अनुरूपित।मल्टीकोर + हाइपरथ्रेडिंग - धागे कैसे वितरित किए जाते हैं?

मान लीजिए कि आपके पास दो धागे के साथ एक प्रोग्राम है। मान लीजिए कि पीसी पर कोई भी काम करने वाले ये थ्रेड हैं, बाकी सब कुछ निष्क्रिय है। संभावना क्या है कि ओएस दोनों धागे को एक ही कोर पर रखेगा? कार्यक्रम थ्रूपुट के लिए इसका बहुत बड़ा प्रभाव है।

यदि उत्तर 0% से अधिक कुछ है, तो क्या अधिक धागे बनाने के अलावा कोई शमन रणनीतियां हैं?

मैं वहाँ विंडोज, लिनक्स, और मैक ओएस एक्स


के लिए अलग अलग जवाब हो जाएगा गूगल चारा के रूप में sk's answer का उपयोग करना है, तो लिंक का अनुसरण उम्मीद है, मैं Windows में GetLogicalProcessorInformation समारोह पाया। यह "तार्किक प्रोसेसर जो संसाधनों को साझा करता है" की बात करता है। इस प्रकार के संसाधन साझाकरण का एक उदाहरण हाइपरथ्रेडिंग परिदृश्य होगा। " इसका मतलब है कि jalf सही है, लेकिन यह काफी निश्चित उत्तर नहीं है।

+2

मैं सिर्फ यह टिप्पणी करना चाहता हूं कि इष्टतम नीति हमेशा अलग-अलग कोरों पर दो कार्यों को चलाने के लिए नहीं है; उदाहरण के लिए, यदि आपके पास दो कार्य हैं जो स्मृति साझा करते हैं और कई गैर-ओवरलैपिंग ऑपरेशन करते हैं, तो उन्हें एक ही कोर पर चलाना उच्च प्रदर्शन प्रदान कर सकता है क्योंकि कैश में कमी कभी-कभी प्रोसेसर को साझा करने के लिए धीमे रनटाइम को याद करती है (याद रखें, इस परिदृश्य में दोनों थ्रेड आमतौर पर एक कोर पर समानांतर में चलेंगे क्योंकि वे विभिन्न लॉजिकल इकाइयों का उपयोग कर रहे हैं)। – Borealid

+0

बस एक एफवाईआई के रूप में: यदि आप कच्चे प्रदर्शन की तलाश में हैं, तो आप हाइपरथ्रेडिंग को अक्षम करना चाह सकते हैं। जब तक इंटेल ने अंततः इसे अच्छी तरह से काम नहीं किया है। अतीत में (आखिरी बार मापा गया था कि 2x प्रोसेसर पी 4 ज़ीऑन बॉक्स पर हाइपरथ्रेडिंग (ओएस को 4 लॉजिकल प्रोसेसर प्रदान करने) के साथ, हाइपरथ्रेडिंग सक्षम के साथ 4 कम्प्यूटेशनल गहन धागे चलाने का शुद्ध प्रदर्शन हाइपरथ्रेडिंग के साथ 2 थ्रेड चलाने से कम नेट प्रदर्शन उत्पन्न करता है अक्षम। जाहिर है, आप इसे नवीनतम हार्डवेयर के साथ स्वयं परीक्षण करना चाहते हैं - यह अब मामला नहीं हो सकता है। लेकिन, जागरूक रहें ... –

+2

उसी कोर पर चलने वाले धागे बिल्कुल वही है जो आप चाहते हैं, कभी-कभी। यदि आप ' लॉक-फ्री डेटा संरचनाओं को फिर से चलाएं, उदाहरण के लिए; जब आपके पास अलग-अलग भौतिक कोर पर धागे होते हैं, तो कोर डेसीमैट्स प्रदर्शन के बीच कैश लाइन स्वैपिंग। –

उत्तर

2

आप यह सुनिश्चित कर सकते हैं कि दोनों धागे एक प्रोसेसर एफ़िनिटी देकर उसी निष्पादन इकाइयों के लिए निर्धारित हो जाएं। यह या तो एक एपीआई (या तो प्रोग्राम इसके लिए पूछ सकता है) या प्रशासनिक इंटरफेस के माध्यम से या तो विंडोज या यूनिक्स में किया जा सकता है (इसलिए कोई व्यवस्थापक इसे सेट कर सकता है)। जैसे WinXP में आप टास्क मैनेजर का उपयोग कर सकते हैं ताकि यह निर्धारित किया जा सके कि कौन सी लॉजिकल प्रोसेसर एक प्रक्रिया निष्पादित कर सकती है।

अन्यथा, शेड्यूलिंग अनिवार्य रूप से यादृच्छिक होगी और आप प्रत्येक लॉजिकल प्रोसेसर पर 25% उपयोग की उम्मीद कर सकते हैं।

+0

जबकि मैं कभी ऐसा नहीं रहा हूं जो ओएस तक चीजों को छोड़ना पसंद करता है, थ्रेड सेट करता है चीजें व्यस्त होने पर एफ़िनिटी मास्क प्रदर्शन के लिए हानिकारक हो सकती है। क्या सेट थ्रेड इडलप्रोसेसर() एक बेहतर विकल्प होगा? – NTDLS

2

संभावना अनिवार्य रूप से 0% है कि ओएस जितना संभव हो उतना भौतिक कोर का उपयोग नहीं करेगा। आपका ओएस बेवकूफ नहीं है। इसका काम सबकुछ निर्धारित करना है, और यह पूरी तरह से जानता है कि यह कितना कोर उपलब्ध है। यदि यह दो सीपीयू-गहन धागे देखता है, तो यह सुनिश्चित करेगा कि वे दो भौतिक कोर पर चलेंगे।

संपादित बस थोड़ा विस्तृत करने, उच्च प्रदर्शन सामग्री के लिए, एक बार आप एमपीआई या अन्य गंभीर बनता है चौखटे में मिलता है, आप निश्चित रूप से प्रत्येक कोर पर क्या चलने की अवधि नियंत्रित करना चाहते हैं।

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

तो बड़े पैमाने पर एचपीसी सामान के लिए, हाँ, आप चाहते हैं कि प्रत्येक थ्रेड एक कोर पर स्थिर रहें। लेकिन सबसे छोटे कार्यों के लिए, यह वास्तव में कोई फर्क नहीं पड़ता, और आप ओएस के शेड्यूलर पर भरोसा कर सकते हैं।

+0

मैं भी उस पर विश्वास करना चाहता हूं, लेकिन एक लिट ली सबूत उपयोगी होगा। –

+0

क्या प्रमाण है? एक प्रोग्राम बनाएं जो एक अनंत लूप में दो धागे चलाता है, और CPU उपयोग की जांच करें। आप पाएंगे कि कोई भी सीन ओएस प्रत्येक कोर को थ्रेड निर्दिष्ट करता है। क्या आपको लगता है कि यह एक समस्या है जिसे ओएस डिजाइनरों ने नहीं माना है? बिलकूल नही। यह एक मौलिक मुद्दा है कि एक ओएस * को संभालने के लिए * है। – jalf

+0

मेरे पास परीक्षण करने के लिए ऐसी कोई प्रणाली नहीं है, अन्यथा यह एक बुरा सुझाव नहीं है। –

1

मुझे अन्य प्लेटफार्मों के बारे में पता नहीं है, लेकिन इंटेल के मामले में, वे Intel Software Network पर बहुत सारे info on threading प्रकाशित करते हैं। उनके पास एक मुफ्त न्यूज़लेटर (इंटेल सॉफ्टवेयर डिस्पैच) भी है जो आप ईमेल के माध्यम से सब्सक्राइब कर सकते हैं और हाल ही में ऐसे कई लेख हैं।

8

लिनक्स में काफी परिष्कृत थ्रेड शेड्यूलर है जो एचटी को अवगत है।इसकी कुछ रणनीतियों में शामिल हैं:

निष्क्रिय लोडबलेंसिंग: यदि कोई भौतिक CPU एक से अधिक कार्य चला रहा है तो शेड्यूलर दूसरे भौतिक प्रोसेसर पर कोई भी नया कार्य चलाने का प्रयास करेगा।

सक्रिय लोडबलेंसिंग: यदि 3 कार्य हैं, 2 एक भौतिक सीपीयू पर और 1 दूसरे पर जब दूसरा भौतिक प्रोसेसर निष्क्रिय हो जाता है तो शेड्यूलर इसे कार्यों में से किसी एक को माइग्रेट करने का प्रयास करेगा।

यह करता है यह जबकि धागा आत्मीयता रखने के लिए, क्योंकि जब एक धागा एक और शारीरिक प्रोसेसर को माइग्रेट करती है यह काम में एक स्टाल के कारण मुख्य स्मृति से कैश के सभी स्तरों फिर से भरना होगा प्रयास करते हैं।

तो अपने प्रश्न का उत्तर देने के लिए (कम से कम लिनक्स पर); दोहरी कोर हाइपरथ्रेड मशीन पर 2 धागे दिए गए, प्रत्येक थ्रेड अपने भौतिक कोर पर चलाएगा।

+0

मुझे नहीं लगता कि मेरी मशीन पर हो रहा है। मेरे i5-2520M पर 'तनाव-सी 2' चलाना, यह कभी-कभी दो धागे को एचटी कोर 1 और 2 पर शेड्यूल करता है (और रखता है), जो एक ही भौतिक कोर पर नक्शा करता है। भले ही सिस्टम अन्यथा निष्क्रिय हो। ("| शारीरिक आईडी | कोर आईडी प्रोसेसर"/proc/cpuinfo | मैं 'egrep साथ HT-> शारीरिक कोर assgnment पाया। Sed 's/^ प्रोसेसर/\ nprocessor/g'') – nh2

+0

मैं इस समस्या को और अधिक के साथ ठोस बनाया [यह सवाल] (http://stackoverflow.com/questions/29422073/why-does-linuxs-scheduler-put-two-threads-onto-the-same-physical-core-on-proces)। – nh2

5

एक सेन ओएस अपने स्वयं के कोर पर कम्प्यूटेशनल गहन कार्यों को निर्धारित करने का प्रयास करेगा, लेकिन जब आप संदर्भ स्विचिंग शुरू करते हैं तो समस्याएं उत्पन्न होती हैं। आधुनिक ओएस के पास अभी भी कोर पर चीजों को शेड्यूल करने की प्रवृत्ति है, जहां शेड्यूलिंग समय पर कोई काम नहीं है, लेकिन इसके परिणामस्वरूप समानांतर अनुप्रयोगों में प्रक्रियाओं को मुख्य रूप से उदारतापूर्वक कोर से कोर में बदल दिया जा सकता है। समानांतर ऐप्स के लिए, आप यह नहीं चाहते हैं, क्योंकि आप डेटा खो देते हैं, प्रक्रिया इसके कोर पर कैश में उपयोग कर रही है। लोग इसके लिए नियंत्रण करने के लिए प्रोसेसर एफ़िनिटी का उपयोग करते हैं, लेकिन लिनक्स पर, शेड_फिनिटी() के अर्थशास्त्र, distros/kernels/विक्रेताओं, आदि के बीच बहुत भिन्न हो सकते हैं

यदि आप लिनक्स पर हैं, तो आप पोर्टेबल प्रोसेसर एफ़िनिटी को नियंत्रित कर सकते हैं Portable Linux Processor Affinity Library (PLPA)। यह OpenMPI यह सुनिश्चित करने के लिए आंतरिक रूप से उपयोग करता है कि प्रक्रियाएं मल्टीकोर और मल्टीसाकेट सिस्टम में अपने स्वयं के कोर के लिए निर्धारित हो जाएं; उन्होंने मॉड्यूल को एक स्टैंडअलोन प्रोजेक्ट के रूप में बंद कर दिया है। ओपनएमपीआई का उपयोग कई अन्य स्थानों के बीच लॉस एलामोस में किया जाता है, इसलिए यह अच्छी तरह से परीक्षण किया गया कोड है। मुझे यकीन नहीं है कि समकक्ष विंडोज के तहत क्या है।

+1

+1, बस ध्यान दें कि फ़ंक्शन 'sched_setaffinity' है। – avakar

5

मैं विंडोज़ पर थ्रेड शेड्यूलिंग पर कुछ उत्तरों की तलाश कर रहा हूं, और कुछ अनुभवजन्य जानकारी है जो मैं यहां पोस्ट करूंगा जो भविष्य में इस पोस्ट में फंस सकता है।

मैंने एक साधारण सी # प्रोग्राम लिखा जो दो धागे लॉन्च करता है। मेरे क्वाड कोर विंडोज 7 बॉक्स पर, मैंने कुछ आश्चर्यजनक परिणाम देखा।

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

परिणाम देखने के लिए सबसे अच्छा, इस कोड को मुक्त रूप से उपलब्ध कंपाइलर csc.exe का उपयोग करके संकलित करें जो .NET Framework 4.0 क्लाइंट के साथ आता है, और इसे एकाधिक कोर वाले मशीन पर चलाएं। प्रोसेसर एफ़िनिटी लाइन ने टिप्पणी की, टास्क मैनेजर ने धागे को चार चार कोरों में फैलाया, प्रत्येक 50% पर चल रहा था। एफ़िनिटी सेट के साथ, दो धागे दो कोरों को 100% पर अधिकतम कर देते हैं, अन्य दो कोर निष्क्रिय होते हैं (जो कि मैंने इस परीक्षण को चलाने से पहले देखा था)।

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

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Diagnostics; 
using System.Runtime.InteropServices; 
using System.Threading.Tasks; 

class Program 
{ 
    [DllImport("kernel32")] 
    static extern int GetCurrentThreadId(); 

    static void Main(string[] args) 
    { 
     Task task1 = Task.Factory.StartNew(() => ThreadFunc(1)); 
     Task task2 = Task.Factory.StartNew(() => ThreadFunc(2)); 
     Stopwatch time = Stopwatch.StartNew(); 
     Task.WaitAll(task1, task2); 
     Console.WriteLine(time.Elapsed); 
    } 

    static void ThreadFunc(int cpu) 
    { 
     int cur = GetCurrentThreadId(); 
     var me = Process.GetCurrentProcess().Threads.Cast<ProcessThread>().Where(t => t.Id == cur).Single(); 
     //me.ProcessorAffinity = (IntPtr)cpu;  //using this line of code binds a thread to each core 
     //me.IdealProcessor = cpu;    //seems to have no effect 

     //do some CPU/memory bound work 
     List<int> ls = new List<int>(); 
     ls.Add(10); 
     for (int j = 1; j != 30000; ++j) 
     { 
      ls.Add((int)ls.Average()); 
     } 
    } 
} 
+1

आपको अवगत होना चाहिए कि यदि आप उपयोग को देखने के लिए टास्क मैनेजर का उपयोग कर रहे हैं, तो टास्क मैनेजर सिस्टम के लिए बहुत विघटनकारी हो सकता है क्योंकि यह आमतौर पर एक बढ़ावा देने वाली प्राथमिकता के साथ चलता है। कार्य प्रबंधक को कम प्राथमिकता के लिए मजबूर करने का प्रयास करें और देखें कि पैटर्न बदलता है या नहीं। –

+0

क्या आप अपने रन टाइम को विभिन्न कॉन्फ़िगरेशन के तहत साझा कर सकते हैं? –

2

यह एक बहुत अच्छा और प्रासंगिक प्रश्न है। जैसा कि हम सभी जानते हैं, एक हाइपर-थ्रेडेड कोर वास्तविक CPU/core नहीं है। इसके बजाए, यह एक वर्चुअल सीपीयू/कोर है (अब से मैं कोर कहूंगा)।विंडोज एक्सपी के रूप में विंडोज सीपीयू शेड्यूलर वास्तविक कोर से हाइपरथ्रेड (वर्चुअल) कोर को अलग करने में सक्षम होना चाहिए। आप कल्पना कर सकते हैं कि इस परिपूर्ण दुनिया में यह उन्हें 'ठीक है' संभालता है और यह कोई मुद्दा नहीं है। आप गलत होंगे

विंडोज 2008 बिज़टॉक सर्वर को अनुकूलित करने के लिए माइक्रोसॉफ्ट की अपनी सिफारिश हाइपर थ्रेडिंग को अक्षम करने की सिफारिश करती है। यह मुझे बताता है कि, हाइपर-थ्रेडेड कोरों का संचालन सही नहीं है और कभी-कभी धागे को हाइपर-थ्रेडेड कोर पर एक समय टुकड़ा मिलता है और जुर्माना (वास्तविक कोर के प्रदर्शन का एक अंश, 10% मैं ' डी अनुमान, और माइक्रोसॉफ्ट अनुमान 20-30%)।

माइक्रोसॉफ्ट लेख संदर्भ जहां वे हाइपरथ्रेडिंग सर्वर दक्षता में सुधार करने को अक्षम करने की सलाह देते हैं: http://msdn.microsoft.com/en-us/library/cc615012(BTS.10).aspx

यह BIOS अद्यतन के बाद दूसरी सिफारिश है, कि कैसे महत्वपूर्ण वे इसे मानते हैं। वे कहते हैं कि:

Microsoft से:

"अक्षम हाइपर-थ्रेडिंग BizTalk पर सर्वर और SQL सर्वर कंप्यूटर

यह महत्वपूर्ण हाइपर-थ्रेडिंग जा के लिए बंद कर दिया है बिज़टॉक सर्वर कंप्यूटर। यह एक BIOS सेटिंग है, आमतौर पर प्रोसेसर सेटिंग्स में पाया जाता है o एफआईओएस सेटअप एफ। हाइपर-थ्रेडिंग सर्वर को बनाता है प्रोसेसर/प्रोसेसर कोर वास्तव में करता है; हालांकि हाइपर-थ्रेडेड प्रोसेसर आम तौर पर 20 और भौतिक प्रोसेसर/प्रोसेसर कोर के प्रदर्शन के 30% के बीच प्रदान करते हैं। जब बिज़टॉक सर्वर प्रोसेसर की संख्या स्व-ट्यूनिंग एल्गोरिदम समायोजित करने के लिए गणना करता है; हाइपर-थ्रेडेड प्रोसेसर इन समायोजन के कारण समायोजित होते हैं जो समग्र प्रदर्शन के लिए हानिकारक है। "

अब, वे कहते हैं कि यह यह आत्म ट्यूनिंग एल्गोरिदम बंद फेंकने की वजह से है, लेकिन फिर पर जाने के विवाद समस्याओं का उल्लेख (सुझाव यह एक बड़ा मुद्दा शेड्यूलिंग, कम से कम मेरे लिए है)। इसे पढ़ें के रूप में आप करेंगे, लेकिन मुझे लगता है कि यह कहते हैं कि यह सब। हाइपरथ्रेडिंग एक अच्छा विचार था जब एक सीपीयू सिस्टम के साथ थे, लेकिन अब सिर्फ एक उलझन है कि इस मल्टी कोर दुनिया में प्रदर्शन को चोट पहुंचा सकते है।

के बजाय पूरी तरह से अक्षम करने हाइपरथ्रेडिंग , आप प्रक्रिया प्रक्रियाओं के लिए डिफ़ॉल्ट सीएसओ affinities सेट करने के लिए प्रक्रिया Lasso (फ्री) जैसे प्रोग्राम का उपयोग कर सकते हैं, ताकि उनके धागे वर्चुअल CPUs को आवंटित नहीं किया जा सके।

तो .... मुझे नहीं लगता कि कोई भी वास्तव में जानता है कि विंडोज सीपीयू शेड्यूलर वर्चुअल सीपीयू को कितनी अच्छी तरह से संभालता है, लेकिन मुझे लगता है कि यह कहना सुरक्षित है कि XP ​​इसे सबसे खराब तरीके से संभालता है, और तब से धीरे-धीरे इसमें सुधार हुआ है, लेकिन यह अभी भी सही नहीं है। वास्तव में, यह कभी भी सही नहीं हो सकता है क्योंकि ओएस को इस धीमे वर्चुअल कोर पर कौन से थ्रेड सबसे अच्छे हैं, इस बारे में कोई जानकारी नहीं है। यह समस्या हो सकती है, और माइक्रोसॉफ्ट सर्वर वातावरण में हाइपर थ्रेडिंग को अक्षम करने की सिफारिश क्यों करता है।

हाइपर थ्रेडिंग के बिना भी याद रखें, 'कोर थ्रैशिंग' का मुद्दा है। यदि आप एक कोर पर धागा रख सकते हैं, तो यह एक अच्छी बात है, क्योंकि यह मुख्य परिवर्तन दंड को कम कर देता है।

0

ओएस एक ही कोर पर 2 सक्रिय धागे प्रेषित करने का मौका शून्य जब तक धागे किसी विशिष्ट कोर (थ्रेड एफ़िनिटी) से बंधे न हों।

इस के पीछे के कारणों ज्यादातर संबंधित HW हैं:

  • ओएस (और सीपीयू) इसलिये इसे एक कम प्रवेश करने के लिए संभव के रूप में कुशल के रूप में कार्य चलेगा यथासंभव कम शक्ति का उपयोग करना चाहता है पावर-स्टेट ASAP।
  • उसी कोर पर सब कुछ चलाना इससे बहुत तेजी से गर्म हो जाएगा। रोगजनक स्थितियों में, प्रोसेसर गर्म हो सकता है और इसकी घड़ी को ठंडा कर सकता है। अत्यधिक गर्मी सीपीयू प्रशंसकों को तेजी से घूमने (लैपटॉप सोचने) का कारण बनती है और अधिक शोर बनाती है।
  • सिस्टम वास्तव में कभी निष्क्रिय नहीं होता है। आईएसआर और डीपीसी प्रत्येक एमएस (ज्यादातर आधुनिक ओएस पर) चलाते हैं।
  • वर्कलोड से 99.99% में कोर से कोर में होने वाले धागे के कारण प्रदर्शन गिरावट नगण्य है।
  • सभी आधुनिक प्रोसेसर में अंतिम स्तर कैश साझा किया जाता है इस प्रकार कोर स्विचिंग इतना बुरा नहीं होता है।
  • मल्टी-सॉकेट सिस्टम (नुमा) के लिए, ओएस सॉकेट से सॉकेट में होपिंग को कम करेगा, इसलिए एक प्रक्रिया इसके मेमोरी कंट्रोलर "पास" रहती है। इस तरह के सिस्टम (दसियों/सैकड़ों कोर) के लिए अनुकूलन करते समय यह एक जटिल डोमेन है।

बीटीडब्ल्यू, जिस तरह से ओएस सीपीयू टोपोलॉजी जानता है एसीपीआई के माध्यम से है - बीआईओएस द्वारा प्रदान किया गया एक इंटरफ़ेस।

चीजों को समेटने के लिए, यह सब सिस्टम पावर विचारों (बैटरी जीवन, बिजली बिल, शीतलन समाधान से शोर) तक उबाल जाता है।

+0

मैं कारणों की एक सूची नहीं मांग रहा था * क्यों * यह * नहीं होना चाहिए, मुझे लगता है कि हम सभी उस पर सहमत हो सकते हैं। मैं पूछ रहा था कि क्या ओएस को इसे रोकने के लिए पर्याप्त जानकारी थी और यदि शेड्यूलर जानकारी का उपयोग करने के लिए पर्याप्त स्मार्ट थे। इसके उत्तर के आपके उत्तर का एकमात्र हिस्सा एसीपीआई का उल्लेख है। –

+0

मेरे उत्तर ने "क्यों" और "कैसे" शेड्यूलर व्यवहार करते हैं और साथ ही उनके पास यह जानकारी भी प्रदान की जाती है। क्या आप कर्नेल से कोड स्निपेट को उत्तर के रूप में ढूंढ रहे हैं? यदि ऐसा है, तो लिनक्स और डार्विन कर्नेल खुले स्रोत हैं ... – egur

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